<?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>136166</bug_id>
          
          <creation_ts>2014-08-22 11:50:43 -0700</creation_ts>
          <short_desc>Make possible HashSet&lt;std::unique_ptr&lt;&gt;&gt;</short_desc>
          <delta_ts>2014-09-21 17:24:49 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1030772</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-08-22 11:50:43 -0700</bug_when>
    <thetext>HashSet&lt;std::unique_ptr&lt;&gt;&gt; should just work, but it does not compile.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1030999</commentid>
    <comment_count>1</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-08-24 16:42:20 -0700</bug_when>
    <thetext>There are two things to solve here:
1) Making it compile (we need to make the HashTraits correct, and add a DefaultHash).
2) Making it nice (e.g. adding built in translation/overloading of raw pointers like we do for RefPtrHashMap).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036332</commentid>
    <comment_count>2</comment_count>
      <attachid>238422</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-09-21 00:13:52 -0700</bug_when>
    <thetext>Created attachment 238422
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036333</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-09-21 00:16:12 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; There are two things to solve here:
&gt; 1) Making it compile (we need to make the HashTraits correct, and add a DefaultHash).
&gt; 2) Making it nice (e.g. adding built in translation/overloading of raw pointers like we do for RefPtrHashMap).

I decided to do both at once.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036334</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-21 00:16:34 -0700</bug_when>
    <thetext>Attachment 238422 did not pass style-queue:


ERROR: Source/WTF/wtf/HashFunctions.h:194:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/HashSet.h:291:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/HashSet.h:298:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/HashSet.h:305:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/HashSet.h:312:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/OwnPtr.h:78:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/OwnPtr.h:240:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/HashMap.h:408:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/HashMap.h:415:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/HashMap.h:422:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/HashMap.h:429:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/HashMap.h:439:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/HashMap.h:446:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 13 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036345</commentid>
    <comment_count>5</comment_count>
      <attachid>238426</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-09-21 10:42:56 -0700</bug_when>
    <thetext>Created attachment 238426
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036346</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-21 10:46:05 -0700</bug_when>
    <thetext>Attachment 238426 did not pass style-queue:


ERROR: Source/WTF/wtf/HashFunctions.h:194:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/HashSet.h:291:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/HashSet.h:298:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/HashSet.h:305:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/HashSet.h:312:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/OwnPtr.h:78:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/OwnPtr.h:240:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/HashMap.h:408:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/HashMap.h:415:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/HashMap.h:422:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/HashMap.h:429:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/HashMap.h:439:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/HashMap.h:446:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 13 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036348</commentid>
    <comment_count>7</comment_count>
      <attachid>238426</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-09-21 11:01:38 -0700</bug_when>
    <thetext>Comment on attachment 238426
Patch

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

Wow, looks great!

&gt; Source/WTF/wtf/GetPtr.h:63
&gt; +// Explicit specialization for STL types

I suggest we call these standard library types or C++ standard library types, not STL types. I suggest a period here.

&gt; Source/WTF/wtf/GetPtr.h:65
&gt; +template &lt;typename T&gt; struct IsSmartPtr&lt;std::unique_ptr&lt;T&gt;&gt; {

Should also have Deleter argument here so we can handle any std::unique_ptr, not just one with the standard deleter.

&gt; Source/WTF/wtf/GetPtr.h:70
&gt; +template &lt;typename T&gt;
&gt; +struct GetPtrHelper&lt;std::unique_ptr&lt;T&gt;&gt; {

Should also have Deleter argument here so we can handle any std::unique_ptr, not just one with the standard deleter.

&gt; Source/WTF/wtf/HashFunctions.h:140
&gt; +    template&lt;typename P&gt; struct PtrHash&lt;std::unique_ptr&lt;P&gt;&gt; : PtrHash&lt;P*&gt; {

Should also have Deleter argument here so we can handle any std::unique_ptr, not just one with the standard deleter.

&gt; Source/WTF/wtf/HashFunctions.h:194
&gt; +    template&lt;typename P&gt; struct DefaultHash&lt;std::unique_ptr&lt;P&gt;&gt; { typedef PtrHash&lt;std::unique_ptr&lt;P&gt;&gt; Hash; };

Should also have Deleter argument here so we can handle any std::unique_ptr, not just one with the standard deleter.

&gt; Source/WTF/wtf/HashMap.h:147
&gt; +    // An alternate version of find() for smart pointer keys, that take the raw pointer type as the parameter.

Are you going to follow up by removing RefPtrHashMap and using this technique instead?

Grammatical error here. It should be “takes”, not “take”. Repeated many times in other comments below.

Also, maybe a single comment for all 5 functions rather than a separate paragraph and comment for each?

&gt; Source/WTF/wtf/HashMap.h:406
&gt; +template&lt;typename  K&gt;

Extra space here before K. Same thing four times below.

&gt; Source/WTF/wtf/HashMap.h:444
&gt; +template&lt;typename  K&gt;

Extra space here before K.

&gt; Source/WTF/wtf/HashSet.h:123
&gt; +        template&lt;typename V = ValueType&gt; typename std::enable_if&lt;IsSmartPtr&lt;V&gt;::value, ValueType&gt;::type take(typename GetPtrHelper&lt;V&gt;::PtrType);
&gt; +
&gt; +
&gt;          static bool isValidValue(const ValueType&amp;);

Unwanted extra blank line here.

&gt; Source/WTF/wtf/OwnPtr.h:231
&gt;      }
&gt;  
&gt; +
&gt; +    template&lt;typename P&gt; struct PtrHash&lt;OwnPtr&lt;P&gt;&gt; : PtrHash&lt;P*&gt; {

Unwanted extra blank line here.

&gt; Tools/TestWebKitAPI/Tests/WTF/HashMap.cpp:276
&gt; +    HashMap&lt;std::unique_ptr&lt;ConstructorDestructorCounter&gt;, int&gt; map;

Might consider test coverage for unique_ptr with custom deleter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036357</commentid>
    <comment_count>8</comment_count>
      <attachid>238428</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-09-21 12:40:39 -0700</bug_when>
    <thetext>Created attachment 238428
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036358</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-21 12:42:48 -0700</bug_when>
    <thetext>Attachment 238428 did not pass style-queue:


ERROR: Source/WTF/wtf/HashFunctions.h:194:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/HashSet.h:284:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/HashSet.h:291:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/HashSet.h:298:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/HashSet.h:305:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/OwnPtr.h:78:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/OwnPtr.h:239:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/HashMap.h:400:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/HashMap.h:407:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/HashMap.h:414:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/HashMap.h:421:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/HashMap.h:431:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/HashMap.h:438:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 13 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036360</commentid>
    <comment_count>10</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-09-21 12:45:28 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 238426 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=238426&amp;action=review
&gt; 
&gt; Wow, looks great!
&gt; 
&gt; &gt; Source/WTF/wtf/GetPtr.h:63
&gt; &gt; +// Explicit specialization for STL types
&gt; 
&gt; I suggest we call these standard library types or C++ standard library types, not STL types. I suggest a period here.

Done and done.

&gt; 
&gt; &gt; Source/WTF/wtf/GetPtr.h:65
&gt; &gt; +template &lt;typename T&gt; struct IsSmartPtr&lt;std::unique_ptr&lt;T&gt;&gt; {
&gt; 
&gt; Should also have Deleter argument here so we can handle any std::unique_ptr, not just one with the standard deleter.

Done (I did it everywhere, not just here).

&gt; 
&gt; &gt; Source/WTF/wtf/HashMap.h:147
&gt; &gt; +    // An alternate version of find() for smart pointer keys, that take the raw pointer type as the parameter.
&gt; 
&gt; Are you going to follow up by removing RefPtrHashMap and using this technique instead?

I&apos;d like to, but I need to first figure out if I have gone far enough.  RefPtrHashMap also has overloads for set() and add(), which I am not sure make sense for std::unique_ptr, though I am not sure they are all that useful for RefPtr anyway (maybe for add() in the case where you don&apos;t actually add, you could avoid a ref/deref). If you have thoughts on this, I am all ears.

&gt; 
&gt; Grammatical error here. It should be “takes”, not “take”. Repeated many times in other comments below.
&gt; 
&gt; Also, maybe a single comment for all 5 functions rather than a separate paragraph and comment for each?

Made it one sentence.

&gt; &gt; Source/WTF/wtf/HashMap.h:406
&gt; &gt; +template&lt;typename  K&gt;
&gt; 
&gt; Extra space here before K. Same thing four times below.

Done.

&gt; &gt; Source/WTF/wtf/HashSet.h:123
&gt; &gt; +        template&lt;typename V = ValueType&gt; typename std::enable_if&lt;IsSmartPtr&lt;V&gt;::value, ValueType&gt;::type take(typename GetPtrHelper&lt;V&gt;::PtrType);
&gt; &gt; +
&gt; &gt; +
&gt; &gt;          static bool isValidValue(const ValueType&amp;);
&gt; 
&gt; Unwanted extra blank line here.
&gt; 
&gt; &gt; Source/WTF/wtf/OwnPtr.h:231
&gt; &gt;      }
&gt; &gt;  
&gt; &gt; +
&gt; &gt; +    template&lt;typename P&gt; struct PtrHash&lt;OwnPtr&lt;P&gt;&gt; : PtrHash&lt;P*&gt; {
&gt; 
&gt; Unwanted extra blank line here.

Done.

&gt; 
&gt; &gt; Tools/TestWebKitAPI/Tests/WTF/HashMap.cpp:276
&gt; &gt; +    HashMap&lt;std::unique_ptr&lt;ConstructorDestructorCounter&gt;, int&gt; map;
&gt; 
&gt; Might consider test coverage for unique_ptr with custom deleter.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036393</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-09-21 16:46:31 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; RefPtrHashMap also has overloads for set() and add()

I think the point of those is to avoid reference pointer thrash when you pass a PassRefPtr in and put it into the map. We could easily write a test for that to see we can use move semantics to solve the problem without explicit use of PassRefPtr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036394</commentid>
    <comment_count>12</comment_count>
      <attachid>238428</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-09-21 16:47:31 -0700</bug_when>
    <thetext>Comment on attachment 238428
Patch

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

&gt; Source/WTF/wtf/GetPtr.h:74
&gt; +    static T* getPtr(const std::unique_ptr&lt;T, Deleter&gt;&amp; p) { return const_cast&lt;T*&gt;(p.get()); }

Why was the const_cast needed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036402</commentid>
    <comment_count>13</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-09-21 17:24:49 -0700</bug_when>
    <thetext>Committed r173801: &lt;http://trac.webkit.org/changeset/173801&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238422</attachid>
            <date>2014-09-21 00:13:52 -0700</date>
            <delta_ts>2014-09-21 10:42:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-136166-20140921001351.patch</filename>
            <type>text/plain</type>
            <size>43868</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNzM3OTUpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDQ4IEBACisyMDE0LTA5LTIwICBTYW0gV2VpbmlnICA8c2FtQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgTWFrZSBwb3NzaWJsZSBIYXNoU2V0PHN0ZDo6dW5pcXVlX3B0
cjw+PgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2
MTY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3
dGYvR2V0UHRyLmg6CisgICAgICAgIChXVEY6OmdldFB0cik6CisgICAgICAgIChXVEY6OkdldFB0
ckhlbHBlcjxzdGQ6OnVuaXF1ZV9wdHI8VD4+OjpnZXRQdHIpOgorICAgICAgICBNYWtlIHNwZWNp
YWxpemluZyBHZXRQdHJIZWxwZXIgYSBiaXQgY2xlYW5lciAoeW91IGRvbid0IGhhdmUgdG8gcHV0
IAorICAgICAgICBJc1NtYXJ0UHRyPFQ+Ojp2YWx1ZSBldmVyeXdoZXJlIGFueSBtb3JlKSBhbmQg
YWRkIHNwZWNpYWxpemF0aW9ucyBmb3IKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyLgorCisgICAg
ICAgICogd3RmL0hhc2hGdW5jdGlvbnMuaDoKKyAgICAgICAgKFdURjo6UHRySGFzaDxzdGQ6OnVu
aXF1ZV9wdHI8UD4+KToKKyAgICAgICAgQWRkIHNwZWNpYWxpemF0aW9uIGZvciBQdHJIYXNoIGZv
ciBzdGQ6OnVuaXF1ZV9wdHIgYW5kIHNldCBpdCBhcyB0aGUgRGVmYXVsdEhhc2gKKyAgICAgICAg
Zm9yIGl0IGFzIHdlbGwuCisKKyAgICAgICAgKiB3dGYvSGFzaE1hcC5oOiAgICAKKyAgICAgICAg
KiB3dGYvSGFzaFNldC5oOgorICAgICAgICBBZGQgb3ZlcmxvYWRzIG9mIGZpbmQoKSwgY29udGFp
bnMoKSwgcmVtb3ZlKCksIHRha2UoKSAoYW5kIGdldCgpIGZvciBIYXNoTWFwKSBmb3IgInNtYXJ0
IHBvaW50ZXJzIiB0aGF0CisgICAgICAgIHRha2UgdGhlIHJhdyBwb2ludGVyIHR5cGUgYXMgdGhl
IHBhcmFtZXRlci4gVGhlc2UgdXNlIFNGSU5BRSB0byBtYWtlIHRoZW1zZWx2ZXMgb25seSBhdmFp
bGFibGUKKyAgICAgICAgd2hlbiB0aGUgSXNTbWFydFB0cjxLZXlUeXBlPjo6dmFsdWUgaXMgdHJ1
ZS4gCisKKyAgICAgICAgKiB3dGYvSGFzaFRyYWl0cy5oOgorICAgICAgICBPdmVycmlkZSBjb25z
dHJ1Y3REZWxldGVkVmFsdWUoKSBhbmQgaXNEZWxldGVkVmFsdWUoKSBpbiB0aGUgc3RkOjp1bmlx
dWVfcHRyIHNwZWNpYWxpemF0aW9uCisgICAgICAgIHNpbmNlIHRoZSBkZWZhdWx0IGltcGxlbWVu
dGF0aW9uIGRlcGVuZHMgb24gdGhlIHR5cGUgaGF2aW5nIGEgY29uc3RydWN0b3IgdGhhdCB0YWtl
cyBhIEhhc2hUYWJsZURlbGV0ZWRWYWx1ZQorICAgICAgICBhbmQgZnVuY3Rpb24gbmFtZWQgaXNI
YXNoVGFibGVEZWxldGVkVmFsdWUoKS4KKworICAgICAgICAqIHd0Zi9Pd25QdHIuaDoKKyAgICAg
ICAgKFdURjo6T3duUHRyOjpPd25QdHIpOgorICAgICAgICAoV1RGOjpPd25QdHI6OmlzSGFzaFRh
YmxlRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKFdURjo6T3duUHRyOjpoYXNoVGFibGVEZWxldGVk
VmFsdWUpOgorICAgICAgICBBZGQgSGFzaFRhYmxlRGVsZXRlZFZhbHVlIGNvbnN0cnVjdG9yL2Z1
bmN0aW9ucyB0byBhbGxvdyB0aGUgY29uc3RydWN0RGVsZXRlZFZhbHVlKCkgYW5kIGlzRGVsZXRl
ZFZhbHVlKCkKKyAgICAgICAgaGFzaCB0cmFpdHMgdG8gd29yay4KKworICAgICAgICAoV1RGOjpQ
dHJIYXNoPE93blB0cjxQPj46Omhhc2gpOgorICAgICAgICAoV1RGOjpQdHJIYXNoPE93blB0cjxQ
Pj46OmVxdWFsKToKKyAgICAgICAgQWRkIHNwZWNpYWxpemF0aW9uIGZvciBQdHJIYXNoIGZvciBP
d25QdHIgYW5kIHNldCBpdCBhcyB0aGUgRGVmYXVsdEhhc2gKKyAgICAgICAgZm9yIGl0IGFzIHdl
bGwuCisKKyAgICAgICAgKiB3dGYvUmVmLmg6CisgICAgICAgIFVwZGF0ZSBmb3IgdGhlIGxlc3Mg
dmVyYm9zZSBHZXRQdHJIZWxwZXIgc3BlY2lhbGl6YXRpb24uCisKIDIwMTQtMDktMTkgIENocmlz
IER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBBbGxvdyBET00gbWV0aG9kcyB0
byByZXR1cm4gcmVmZXJlbmNlcyBpbnN0ZWFkIG9mIHBvaW50ZXJzCkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9HZXRQdHIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9HZXRQdHIuaAkocmV2
aXNpb24gMTczNzk1KQorKysgU291cmNlL1dURi93dGYvR2V0UHRyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDMyICszMCw0OCBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RydWN0IElzU21hcnRQ
dHIgCiB9OwogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgYm9vbCBpc1NtYXJ0UHRyPgotc3RydWN0
IEdldFB0ckhlbHBlcjsKK3N0cnVjdCBHZXRQdHJIZWxwZXJCYXNlOwogCiB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KLXN0cnVjdCBHZXRQdHJIZWxwZXI8VCwgZmFsc2UgLyogaXNTbWFydFB0ciAqLz4g
eworc3RydWN0IEdldFB0ckhlbHBlckJhc2U8VCwgZmFsc2UgLyogaXNTbWFydFB0ciAqLz4gewog
ICAgIHR5cGVkZWYgVCogUHRyVHlwZTsKICAgICBzdGF0aWMgVCogZ2V0UHRyKFQmIHApIHsgcmV0
dXJuICZwOyB9CiB9OwogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0cnVjdCBHZXRQdHJIZWxw
ZXI8VCwgdHJ1ZSAvKiBpc1NtYXJ0UHRyICovPiB7CitzdHJ1Y3QgR2V0UHRySGVscGVyQmFzZTxU
LCB0cnVlIC8qIGlzU21hcnRQdHIgKi8+IHsKICAgICB0eXBlZGVmIHR5cGVuYW1lIFQ6OlB0clR5
cGUgUHRyVHlwZTsKICAgICBzdGF0aWMgUHRyVHlwZSBnZXRQdHIoY29uc3QgVCYgcCkgeyByZXR1
cm4gcC5nZXQoKTsgfQogfTsKIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgdHlwZW5h
bWUgR2V0UHRySGVscGVyPFQsIElzU21hcnRQdHI8VD46OnZhbHVlPjo6UHRyVHlwZSBnZXRQdHIo
VCYgcCkKK3N0cnVjdCBHZXRQdHJIZWxwZXIgOiBHZXRQdHJIZWxwZXJCYXNlPFQsIElzU21hcnRQ
dHI8VD46OnZhbHVlPiB7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2lubGluZSB0eXBl
bmFtZSBHZXRQdHJIZWxwZXI8VD46OlB0clR5cGUgZ2V0UHRyKFQmIHApCiB7Ci0gICAgcmV0dXJu
IEdldFB0ckhlbHBlcjxULCBJc1NtYXJ0UHRyPFQ+Ojp2YWx1ZT46OmdldFB0cihwKTsKKyAgICBy
ZXR1cm4gR2V0UHRySGVscGVyPFQ+OjpnZXRQdHIocCk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFt
ZSBUPgotaW5saW5lIHR5cGVuYW1lIEdldFB0ckhlbHBlcjxULCBJc1NtYXJ0UHRyPFQ+Ojp2YWx1
ZT46OlB0clR5cGUgZ2V0UHRyKGNvbnN0IFQmIHApCitpbmxpbmUgdHlwZW5hbWUgR2V0UHRySGVs
cGVyPFQ+OjpQdHJUeXBlIGdldFB0cihjb25zdCBUJiBwKQogewotICAgIHJldHVybiBHZXRQdHJI
ZWxwZXI8VCwgSXNTbWFydFB0cjxUPjo6dmFsdWU+OjpnZXRQdHIocCk7CisgICAgcmV0dXJuIEdl
dFB0ckhlbHBlcjxUPjo6Z2V0UHRyKHApOwogfQogCisvLyBFeHBsaWNpdCBzcGVjaWFsaXphdGlv
biBmb3IgU1RMIHR5cGVzCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgSXNTbWFydFB0
cjxzdGQ6OnVuaXF1ZV9wdHI8VD4+IHsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRy
dWU7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0cnVjdCBHZXRQdHJIZWxwZXI8c3Rk
Ojp1bmlxdWVfcHRyPFQ+PiB7CisgICAgdHlwZWRlZiBUKiBQdHJUeXBlOworICAgIHN0YXRpYyBU
KiBnZXRQdHIoY29uc3Qgc3RkOjp1bmlxdWVfcHRyPFQ+JiBwKSB7IHJldHVybiBjb25zdF9jYXN0
PFQqPihwLmdldCgpKTsgfQorfTsKKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKICNlbmRpZiAvLyBX
VEZfR2V0UHRyX2gKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0hhc2hGdW5jdGlvbnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9IYXNoRnVuY3Rpb25zLmgJKHJldmlzaW9uIDE3Mzc5NSkK
KysrIFNvdXJjZS9XVEYvd3RmL0hhc2hGdW5jdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTI3
LDYgKzEyNyw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChU
IGEsIFQgYikgeyByZXR1cm4gYSA9PSBiOyB9CiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIHNh
ZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKICAgICB9OworCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgUD4gc3RydWN0IFB0ckhhc2g8UmVmUHRyPFA+PiA6IFB0ckhhc2g8UCo+IHsK
ICAgICAgICAgdXNpbmcgUHRySGFzaDxQKj46Omhhc2g7CiAgICAgICAgIHN0YXRpYyB1bnNpZ25l
ZCBoYXNoKGNvbnN0IFJlZlB0cjxQPiYga2V5KSB7IHJldHVybiBoYXNoKGtleS5nZXQoKSk7IH0K
QEAgLTEzNiw2ICsxMzcsMTUgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIHN0YXRpYyBib29s
IGVxdWFsKGNvbnN0IFJlZlB0cjxQPiYgYSwgUCogYikgeyByZXR1cm4gYSA9PSBiOyB9CiAgICAg
fTsKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFA+IHN0cnVjdCBQdHJIYXNoPHN0ZDo6dW5pcXVl
X3B0cjxQPj4gOiBQdHJIYXNoPFAqPiB7CisgICAgICAgIHVzaW5nIFB0ckhhc2g8UCo+OjpoYXNo
OworICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8UD4m
IGtleSkgeyByZXR1cm4gaGFzaChrZXkuZ2V0KCkpOyB9CisgICAgICAgIHVzaW5nIFB0ckhhc2g8
UCo+OjplcXVhbDsKKyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3Qgc3RkOjp1bmlxdWVf
cHRyPFA+JiBhLCBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8UD4mIGIpIHsgcmV0dXJuIGEuZ2V0KCkg
PT0gYi5nZXQoKTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChQKiBhLCBjb25zdCBzdGQ6
OnVuaXF1ZV9wdHI8UD4mIGIpIHsgcmV0dXJuIGEgPT0gYi5nZXQoKTsgfQorICAgICAgICBzdGF0
aWMgYm9vbCBlcXVhbChjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8UD4mIGEsIFAqIGIpIHsgcmV0dXJu
IGEuZ2V0KCkgPT0gYjsgfQorICAgIH07CisKICAgICAvLyBkZWZhdWx0IGhhc2ggZnVuY3Rpb24g
Zm9yIGVhY2ggdHlwZQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRI
YXNoOwpAQCAtMTgxLDYgKzE5MSw3IEBAIG5hbWVzcGFjZSBXVEYgewogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgUD4gc3RydWN0IERlZmF1bHRIYXNoPFAqPiB7IHR5cGVkZWYgUHRySGFzaDxQKj4g
SGFzaDsgfTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQPiBzdHJ1Y3QgRGVmYXVsdEhhc2g8UmVm
UHRyPFA+PiB7IHR5cGVkZWYgUHRySGFzaDxSZWZQdHI8UD4+IEhhc2g7IH07CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgUD4gc3RydWN0IERlZmF1bHRIYXNoPHN0ZDo6dW5pcXVlX3B0cjxQPj4geyB0
eXBlZGVmIFB0ckhhc2g8c3RkOjp1bmlxdWVfcHRyPFA+PiBIYXNoOyB9OwogCiAgICAgLy8gbWFr
ZSBJbnRQYWlySGFzaCB0aGUgZGVmYXVsdCBoYXNoIGZ1bmN0aW9uIGZvciBwYWlycyBvZiAoYXQg
bW9zdCkgMzItYml0IGludGVnZXJzLgogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9IYXNoTWFwLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSGFzaE1hcC5oCShyZXZpc2lvbiAxNzM3OTUp
CisrKyBTb3VyY2UvV1RGL3d0Zi9IYXNoTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIy
LDcgQEAKICNkZWZpbmUgV1RGX0hhc2hNYXBfaAogCiAjaW5jbHVkZSA8aW5pdGlhbGl6ZXJfbGlz
dD4KKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hUYWJsZS5oPgog
I2luY2x1ZGUgPHd0Zi9JdGVyYXRvclJhbmdlLmg+CiAKQEAgLTE0Myw2ICsxNDQsMjIgQEAgcHVi
bGljOgogICAgIC8vICAgc3RhdGljIHRyYW5zbGF0ZShWYWx1ZVR5cGUmLCBjb25zdCBUJiwgdW5z
aWduZWQgaGFzaENvZGUpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0
eXBlbmFtZSBLLCB0eXBlbmFtZSBWPiBBZGRSZXN1bHQgYWRkKEsmJiwgViYmKTsKIAorICAgIC8v
IEFuIGFsdGVybmF0ZSB2ZXJzaW9uIG9mIGZpbmQoKSBmb3Igc21hcnQgcG9pbnRlciBrZXlzLCB0
aGF0IHRha2UgdGhlIHJhdyBwb2ludGVyIHR5cGUgYXMgdGhlIHBhcmFtZXRlci4KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBLID0gS2V5VHlwZT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFy
dFB0cjxLPjo6dmFsdWUsIGl0ZXJhdG9yPjo6dHlwZSBmaW5kKHR5cGVuYW1lIEdldFB0ckhlbHBl
cjxLPjo6UHRyVHlwZSk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSyA9IEtleVR5cGU+IHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBjb25zdF9pdGVyYXRvcj46
OnR5cGUgZmluZCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUpIGNvbnN0OworCisg
ICAgLy8gQW4gYWx0ZXJuYXRlIHZlcnNpb24gb2YgY29udGFpbnMoKSBmb3Igc21hcnQgcG9pbnRl
ciBrZXlzLCB0aGF0IHRha2UgdGhlIHJhdyBwb2ludGVyIHR5cGUgYXMgdGhlIHBhcmFtZXRlci4K
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLID0gS2V5VHlwZT4gdHlwZW5hbWUgc3RkOjplbmFibGVf
aWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIGJvb2w+Ojp0eXBlIGNvbnRhaW5zKHR5cGVuYW1lIEdl
dFB0ckhlbHBlcjxLPjo6UHRyVHlwZSkgY29uc3Q7CisKKyAgICAvLyBBbiBhbHRlcm5hdGUgdmVy
c2lvbiBvZiBnZXQoKSBmb3Igc21hcnQgcG9pbnRlciBrZXlzLCB0aGF0IHRha2UgdGhlIHJhdyBw
b2ludGVyIHR5cGUgYXMgdGhlIHBhcmFtZXRlci4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLID0g
S2V5VHlwZT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIE1h
cHBlZFBlZWtUeXBlPjo6dHlwZSBnZXQodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBl
KSBjb25zdDsKKworICAgIC8vIEFuIGFsdGVybmF0ZSB2ZXJzaW9uIG9mIHJlbW92ZSgpIGZvciBz
bWFydCBwb2ludGVyIGtleXMsIHRoYXQgdGFrZSB0aGUgcmF3IHBvaW50ZXIgdHlwZSBhcyB0aGUg
cGFyYW1ldGVyLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEsgPSBLZXlUeXBlPiB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgYm9vbD46OnR5cGUgcmVtb3ZlKHR5
cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSk7CisKKyAgICAvLyBBbiBhbHRlcm5hdGUg
dmVyc2lvbiBvZiB0YWtlKCkgZm9yIHNtYXJ0IHBvaW50ZXIga2V5cywgdGhhdCB0YWtlIHRoZSBy
YXcgcG9pbnRlciB0eXBlIGFzIHRoZSBwYXJhbWV0ZXIuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
SyA9IEtleVR5cGU+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVl
LCBNYXBwZWRUeXBlPjo6dHlwZSB0YWtlKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlw
ZSk7CisKICAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koKSBjb25zdDsKIAogICAgIHN0YXRpYyBi
b29sIGlzVmFsaWRLZXkoY29uc3QgS2V5VHlwZSYpOwpAQCAtMzg2LDYgKzQwMyw1NiBAQCBhdXRv
IEhhc2hNYXA8VCwgVSwgViwgVywgTWFwcGVkVHJhaXRzPjo6CiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0
ZW1wbGF0ZTx0eXBlbmFtZSAgSz4KK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46
OmZpbmQodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgLT4gdHlwZW5hbWUg
c3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIGl0ZXJhdG9yPjo6dHlwZQorewor
ICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgZmluZDxIYXNoTWFwVHJhbnNsYXRvcjxLZXlWYWx1
ZVBhaXJUcmFpdHMsIEhhc2hGdW5jdGlvbnM+PihrZXkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVt
cGxhdGU8dHlwZW5hbWUgIEs+CitpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpm
aW5kKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIGNvbnN0IC0+IHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBjb25zdF9pdGVyYXRvcj46
OnR5cGUKK3sKKyAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGZpbmQ8SGFzaE1hcFRyYW5zbGF0
b3I8S2V5VmFsdWVQYWlyVHJhaXRzLCBIYXNoRnVuY3Rpb25zPj4oa2V5KTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5h
bWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1lICBLPgoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBW
LCBXLCBYPjo6Y29udGFpbnModHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkg
Y29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIGJv
b2w+Ojp0eXBlCit7CisgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBjb250YWluczxIYXNoTWFw
VHJhbnNsYXRvcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hGdW5jdGlvbnM+PihrZXkpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBX
LCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgIEs+CitpbmxpbmUgYXV0byBIYXNoTWFw
PFQsIFUsIFYsIFcsIFg+OjpnZXQodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtl
eSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUs
IE1hcHBlZFBlZWtUeXBlPjo6dHlwZQoreworICAgIEtleVZhbHVlUGFpclR5cGUqIGVudHJ5ID0g
Y29uc3RfY2FzdDxIYXNoVGFibGVUeXBlJj4obV9pbXBsKS50ZW1wbGF0ZSBsb29rdXA8SGFzaE1h
cFRyYW5zbGF0b3I8S2V5VmFsdWVQYWlyVHJhaXRzLCBIYXNoRnVuY3Rpb25zPj4oa2V5KTsKKyAg
ICBpZiAoIWVudHJ5KQorICAgICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVrKE1hcHBlZFRy
YWl0czo6ZW1wdHlWYWx1ZSgpKTsKKyAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVrKGVudHJ5
LT52YWx1ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1l
IFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSAgSz4KK2lubGlu
ZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OnJlbW92ZSh0eXBlbmFtZSBHZXRQdHJIZWxw
ZXI8Sz46OlB0clR5cGUga2V5KSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRy
PEs+Ojp2YWx1ZSwgYm9vbD46OnR5cGUKK3sKKyAgICByZXR1cm4gcmVtb3ZlKGZpbmQoa2V5KSk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVu
YW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSAgSz4KK2lubGluZSBhdXRvIEhh
c2hNYXA8VCwgVSwgViwgVywgWD46OnRha2UodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJU
eXBlIGtleSkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUs
IE1hcHBlZFR5cGU+Ojp0eXBlCit7CisgICAgaXRlcmF0b3IgaXQgPSBmaW5kKGtleSk7CisgICAg
aWYgKGl0ID09IGVuZCgpKQorICAgICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjplbXB0eVZhbHVl
KCk7CisgICAgTWFwcGVkVHlwZSB2YWx1ZSA9IFdURjo6bW92ZShpdC0+dmFsdWUpOworICAgIHJl
bW92ZShpdCk7CisgICAgcmV0dXJuIHZhbHVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgogaW5saW5lIHZv
aWQgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Y2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0CiB7CiAg
ICAgbV9pbXBsLmNoZWNrVGFibGVDb25zaXN0ZW5jeSgpOwpJbmRleDogU291cmNlL1dURi93dGYv
SGFzaFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0hhc2hTZXQuaAkocmV2aXNp
b24gMTczNzk1KQorKysgU291cmNlL1dURi93dGYvSGFzaFNldC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRlIDxpbml0aWFsaXplcl9saXN0PgogI2luY2x1ZGUg
PHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0
Zi9IYXNoVGFibGUuaD4KIAogbmFtZXNwYWNlIFdURiB7CkBAIC0xMDYsNiArMTA3LDE5IEBAIG5h
bWVzcGFjZSBXVEYgewogICAgICAgICBWYWx1ZVR5cGUgdGFrZShpdGVyYXRvcik7CiAgICAgICAg
IFZhbHVlVHlwZSB0YWtlQW55KCk7CiAKKyAgICAgICAgLy8gQW4gYWx0ZXJuYXRlIHZlcnNpb24g
b2YgZmluZCgpIGZvciBzbWFydCBwb2ludGVyIHZhbHVlcywgdGhhdCB0YWtlIHRoZSByYXcgcG9p
bnRlciB0eXBlIGFzIHRoZSBwYXJhbWV0ZXIuCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFYg
PSBWYWx1ZVR5cGU+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVl
LCBpdGVyYXRvcj46OnR5cGUgZmluZCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUp
IGNvbnN0OworCisgICAgICAgIC8vIEFuIGFsdGVybmF0ZSB2ZXJzaW9uIG9mIGNvbnRhaW5zKCkg
Zm9yIHNtYXJ0IHBvaW50ZXIgdmFsdWVzLCB0aGF0IHRha2UgdGhlIHJhdyBwb2ludGVyIHR5cGUg
YXMgdGhlIHBhcmFtZXRlci4KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgViA9IFZhbHVlVHlw
ZT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUsIGJvb2w+Ojp0
eXBlIGNvbnRhaW5zKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRyVHlwZSkgY29uc3Q7CisK
KyAgICAgICAgLy8gQW4gYWx0ZXJuYXRlIHZlcnNpb24gb2YgcmVtb3ZlKCkgZm9yIHNtYXJ0IHBv
aW50ZXIgdmFsdWVzLCB0aGF0IHRha2UgdGhlIHJhdyBwb2ludGVyIHR5cGUgYXMgdGhlIHBhcmFt
ZXRlci4KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgViA9IFZhbHVlVHlwZT4gdHlwZW5hbWUg
c3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUsIGJvb2w+Ojp0eXBlIHJlbW92ZSh0
eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUpOworCisgICAgICAgIC8vIEFuIGFsdGVy
bmF0ZSB2ZXJzaW9uIG9mIHRha2UoKSBmb3Igc21hcnQgcG9pbnRlciB2YWx1ZXMsIHRoYXQgdGFr
ZSB0aGUgcmF3IHBvaW50ZXIgdHlwZSBhcyB0aGUgcGFyYW1ldGVyLgorICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBWID0gVmFsdWVUeXBlPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0
UHRyPFY+Ojp2YWx1ZSwgVmFsdWVUeXBlPjo6dHlwZSB0YWtlKHR5cGVuYW1lIEdldFB0ckhlbHBl
cjxWPjo6UHRyVHlwZSk7CisKKwogICAgICAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkVmFsdWUoY29u
c3QgVmFsdWVUeXBlJik7CiAgICAgICAgIAogICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
SGFzaFNldCYpIGNvbnN0OwpAQCAtMTE4LDYgKzEzMiwxMyBAQCBuYW1lc3BhY2UgV1RGIHsKICAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIGNvbnN0IFQmIGV4dHJhY3QoY29uc3Qg
VCYgdCkgeyByZXR1cm4gdDsgfQogICAgIH07CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNo
RnVuY3Rpb25zPgorICAgIHN0cnVjdCBIYXNoU2V0VHJhbnNsYXRvciB7CisgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFQmIGtleSkgeyByZXR1
cm4gSGFzaEZ1bmN0aW9uczo6aGFzaChrZXkpOyB9CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFU+IHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFQmIGEsIGNvbnN0IFUmIGIp
IHsgcmV0dXJuIEhhc2hGdW5jdGlvbnM6OmVxdWFsKGEsIGIpOyB9CisgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+IHN0YXRpYyB2b2lkIHRyYW5zbGF0
ZShUJiBsb2NhdGlvbiwgVSYmLCBWJiYgdmFsdWUpIHsgbG9jYXRpb24gPSBzdGQ6OmZvcndhcmQ8
Vj4odmFsdWUpOyB9CisgICAgfTsKKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRyYW5zbGF0b3I+
CiAgICAgc3RydWN0IEhhc2hTZXRUcmFuc2xhdG9yQWRhcHRlciB7CiAgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFQmIGtleSkgeyByZXR1cm4g
VHJhbnNsYXRvcjo6aGFzaChrZXkpOyB9CkBAIC0yNjQsNiArMjg1LDM0IEBAIG5hbWVzcGFjZSBX
VEYgewogICAgICAgICByZXR1cm4gdGFrZShiZWdpbigpKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRz
PgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFY+CisgICAgaW5saW5lIGF1dG8gSGFzaFNldDxWYWx1
ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6ZmluZCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46
OlB0clR5cGUgdmFsdWUpIGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQ
dHI8Vj46OnZhbHVlLCBpdGVyYXRvcj46OnR5cGUKKyAgICB7CisgICAgICAgIHJldHVybiBtX2lt
cGwudGVtcGxhdGUgZmluZDxIYXNoU2V0VHJhbnNsYXRvcjxIYXNoRnVuY3Rpb25zPj4odmFsdWUp
OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVu
Y3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVj4KKyAgICBp
bmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+Ojpjb250YWlu
cyh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUgdmFsdWUpIGNvbnN0IC0+IHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVlLCBib29sPjo6dHlwZQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBjb250YWluczxIYXNoU2V0VHJhbnNs
YXRvcjxIYXNoRnVuY3Rpb25zPj4odmFsdWUpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVj4KKyAgICBpbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHM+OjpyZW1vdmUodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJU
eXBlIHZhbHVlKSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1
ZSwgYm9vbD46OnR5cGUKKyAgICB7CisgICAgICAgIHJldHVybiByZW1vdmUoZmluZCh2YWx1ZSkp
OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVu
Y3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVj4KKyAgICBp
bmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+Ojp0YWtlKHR5
cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRyVHlwZSB2YWx1ZSkgLT4gdHlwZW5hbWUgc3RkOjpl
bmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUsIFZhbHVlVHlwZT46OnR5cGUKKyAgICB7Cisg
ICAgICAgIHJldHVybiB0YWtlKGZpbmQodmFsdWUpKTsKKyAgICB9CisKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgogICAgIGlubGluZSBib29sIEhhc2hT
ZXQ8VCwgVSwgVj46OmlzVmFsaWRWYWx1ZShjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKQogICAgIHsK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL0hhc2hUcmFpdHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi9IYXNoVHJhaXRzLmgJKHJldmlzaW9uIDE3Mzc5NSkKKysrIFNvdXJjZS9XVEYvd3Rm
L0hhc2hUcmFpdHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDYgKzEwNCw5IEBAIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIERlbGV0ZXI+IHMKICAgICB0eXBlZGVmIHN0ZDo6bnVsbHB0
cl90IEVtcHR5VmFsdWVUeXBlOwogICAgIHN0YXRpYyBFbXB0eVZhbHVlVHlwZSBlbXB0eVZhbHVl
KCkgeyByZXR1cm4gbnVsbHB0cjsgfQogCisgICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRl
ZFZhbHVlKHN0ZDo6dW5pcXVlX3B0cjxULCBEZWxldGVyPiYgc2xvdCkgeyBuZXcgKE5vdE51bGws
ICZzbG90KSBzdGQ6OnVuaXF1ZV9wdHI8VCwgRGVsZXRlcj4geyByZWludGVycHJldF9jYXN0PFQq
PigtMSkgfTsgfQorICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IHN0ZDo6dW5p
cXVlX3B0cjxULCBEZWxldGVyPiYgdmFsdWUpIHsgcmV0dXJuIHZhbHVlLmdldCgpID09IHJlaW50
ZXJwcmV0X2Nhc3Q8VCo+KC0xKTsgfQorCiAgICAgdHlwZWRlZiBUKiBQZWVrVHlwZTsKICAgICBz
dGF0aWMgVCogcGVlayhjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8VCwgRGVsZXRlcj4mIHZhbHVlKSB7
IHJldHVybiB2YWx1ZS5nZXQoKTsgfQogICAgIHN0YXRpYyBUKiBwZWVrKHN0ZDo6bnVsbHB0cl90
KSB7IHJldHVybiBudWxscHRyOyB9CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Pd25QdHIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Pd25QdHIuaAkocmV2aXNpb24gMTczNzk1KQorKysg
U291cmNlL1dURi93dGYvT3duUHRyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDE0ICsyMSwxNSBA
QAogI2lmbmRlZiBXVEZfT3duUHRyX2gKICNkZWZpbmUgV1RGX093blB0cl9oCiAKKyNpbmNsdWRl
IDxhbGdvcml0aG0+CisjaW5jbHVkZSA8Y3N0ZGRlZj4KKyNpbmNsdWRlIDxtZW1vcnk+CiAjaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgogI2luY2x1
ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgogI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHJDb21tb24uaD4KLSNpbmNs
dWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8Y3N0ZGRlZj4KLSNpbmNsdWRlIDxtZW1vcnk+CiAK
IG5hbWVzcGFjZSBXVEYgewogCkBAIC03Myw2ICs3NCwxMCBAQCBuYW1lc3BhY2UgV1RGIHsKICAg
ICAgICAgT3duUHRyJiBvcGVyYXRvcj0oT3duUHRyJiYpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBVPiBPd25QdHImIG9wZXJhdG9yPShPd25QdHI8VT4mJik7CiAKKyAgICAgICAgLy8gSGFz
aCB0YWJsZSBkZWxldGVkIHZhbHVlcywgd2hpY2ggYXJlIG9ubHkgY29uc3RydWN0ZWQgYW5kIG5l
dmVyIGNvcGllZCBvciBkZXN0cm95ZWQuCisgICAgICAgIE93blB0cihIYXNoVGFibGVEZWxldGVk
VmFsdWVUeXBlKSA6IG1fcHRyKGhhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpKSB7IH0KKyAgICAgICAg
Ym9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHRyID09IGhh
c2hUYWJsZURlbGV0ZWRWYWx1ZSgpOyB9CisKICAgICAgICAgdm9pZCBzd2FwKE93blB0ciYgbykg
eyBzdGQ6OnN3YXAobV9wdHIsIG8ubV9wdHIpOyB9CiAgICAgICAgIAogICAgICAgICAvLyBDb25z
dHJ1Y3QgYW4gb2JqZWN0IHRvIHN0b3JlIGludG8gdGhpcyBPd25QdHIsIGJ1dCBvbmx5IHNvIGxv
bmcgYXMgdGhpcyBPd25QdHIKQEAgLTg5LDYgKzk0LDggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAg
cHJpdmF0ZToKICAgICAgICAgZXhwbGljaXQgT3duUHRyKFB0clR5cGUgcHRyKSA6IG1fcHRyKHB0
cikgeyB9CiAKKyAgICAgICAgc3RhdGljIFB0clR5cGUgaGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkg
eyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxQdHJUeXBlPigtMSk7IH0KKwogICAgICAgICAvLyBX
ZSBzaG91bGQgbmV2ZXIgaGF2ZSB0d28gT3duUHRycyBmb3IgdGhlIHNhbWUgdW5kZXJseWluZyBv
YmplY3QgKG90aGVyd2lzZSB3ZSdsbCBnZXQKICAgICAgICAgLy8gZG91YmxlLWRlc3RydWN0aW9u
KSwgc28gdGhlc2UgZXF1YWxpdHkgb3BlcmF0b3JzIHNob3VsZCBuZXZlciBiZSBuZWVkZWQuCiAg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IGJvb2wgb3BlcmF0b3I9PShjb25zdCBPd25QdHI8
VT4mKSB7IENPTVBJTEVfQVNTRVJUKCFzaXplb2YoVSopLCBPd25QdHJzX3Nob3VsZF9uZXZlcl9i
ZV9lcXVhbCk7IHJldHVybiBmYWxzZTsgfQpAQCAtMjIwLDYgKzIyNywxOCBAQCBuYW1lc3BhY2Ug
V1RGIHsKICNlbmRpZgogICAgIH0KIAorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgUD4gc3RydWN0
IFB0ckhhc2g8T3duUHRyPFA+PiA6IFB0ckhhc2g8UCo+IHsKKyAgICAgICAgdXNpbmcgUHRySGFz
aDxQKj46Omhhc2g7CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IE93blB0cjxQ
PiYga2V5KSB7IHJldHVybiBoYXNoKGtleS5nZXQoKSk7IH0KKyAgICAgICAgdXNpbmcgUHRySGFz
aDxQKj46OmVxdWFsOworICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBPd25QdHI8UD4m
IGEsIGNvbnN0IE93blB0cjxQPiYgYikgeyByZXR1cm4gYS5nZXQoKSA9PSBiLmdldCgpOyB9Cisg
ICAgICAgIHN0YXRpYyBib29sIGVxdWFsKFAqIGEsIGNvbnN0IE93blB0cjxQPiYgYikgeyByZXR1
cm4gYSA9PSBiLmdldCgpOyB9CisgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IE93blB0
cjxQPiYgYSwgUCogYikgeyByZXR1cm4gYS5nZXQoKSA9PSBiOyB9CisgICAgfTsKKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFA+IHN0cnVjdCBEZWZhdWx0SGFzaDxPd25QdHI8UD4+IHsgdHlwZWRl
ZiBQdHJIYXNoPE93blB0cjxQPj4gSGFzaDsgfTsKKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVz
aW5nIFdURjo6T3duUHRyOwpJbmRleDogU291cmNlL1dURi93dGYvUmVmLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvUmVmLmgJKHJldmlzaW9uIDE3Mzc5NSkKKysrIFNvdXJjZS9XVEYv
d3RmL1JlZi5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHRlbXBsYXRlPHR5cGVuYW1lIFUKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1z
dHJ1Y3QgR2V0UHRySGVscGVyPFJlZjxUPiwgZmFsc2UgLyogaXNTbWFydFB0ciAqLz4geworc3Ry
dWN0IEdldFB0ckhlbHBlcjxSZWY8VD4+IHsKICAgICB0eXBlZGVmIFQqIFB0clR5cGU7CiAgICAg
c3RhdGljIFQqIGdldFB0cihjb25zdCBSZWY8VD4mIHApIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCo+
KCZwLmdldCgpKTsgfQogfTsKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3Mzc5NSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDE0LTA5LTIwICBTYW0gV2VpbmlnICA8c2Ft
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgTWFrZSBwb3NzaWJsZSBIYXNoU2V0PHN0ZDo6dW5pcXVl
X3B0cjw+PgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM2MTY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Db3B5TW92ZUNvdW50ZXIuaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL0NvdW50ZXJzLmNwcDogQWRkZWQuCisgICAgICAgICogVGVz
dFdlYktpdEFQSS9Db3VudGVycy5oOiBDb3BpZWQgZnJvbSBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dURi9Db3B5TW92ZUNvdW50ZXIuaC4KKyAgICAgICAgTW92ZSB0aGUgQ29weU1vdmVDb3Vu
dGVyIGhlbHBlciBmcm9tIENvcHlNb3ZlQ291bnRlci5oIHRvIENvdW50ZXJzLmgsIGFuZCBhZGQg
YSBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyCisgICAgICAgIGhlbHBlciB0byB0aGUgbWl4
IGFzIHdlbGwuIEFkZCBDb3VudGVycy5jcHAgdG8gYWxsb3cgZm9yIHRoZSBnbG9iYWwgdmFyaWFi
bGVzIHRvIGJlIHVzZWQgaW4gbW9yZSB0aGFuIG9uZQorICAgICAgICB0cmFuc2xhdGlvbiB1bml0
LgorICAgIAorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICBBZGQgbmV3IGZpbGVzLgorCisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaE1hcC5jcHA6CisgICAgICAgIEFkZCB0ZXN0cyBmb3Ig
dXNpbmcgc3RkOjp1bmlxdWVfcHRyIGFuZCBPd25QdHIgYXMgdGhlIGtleSdzIG9mIGEgSGFzaE1h
cC4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hTZXQuY3BwOgorICAg
ICAgICBBZGQgdGVzdHMgZm9yIHVzaW5nIHN0ZDo6dW5pcXVlX3B0ciBhbmQgT3duUHRyIGFzIHRo
ZSB2YWx1ZXMgb2YgYSBIYXNoU2V0LgorCiAyMDE0LTA5LTE5ICBKb3NlcGggUGVjb3Jhcm8gIDxw
ZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgSlNTdHJpbmdSZWYgbGVhayBvbiB0aGUgbGVh
a3MgYm90IGFsbG9jYXRpb24gdW5kZXIgc2VsZWN0VGV4dFdpdGhDcml0ZXJpYUNhbGxiYWNrCklu
ZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL0NvdW50ZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9UZXN0V2ViS2l0QVBJL0NvdW50ZXJzLmNwcAkocmV2aXNpb24gMCkKKysrIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvQ291bnRlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ291bnRlcnMuaCIKKwor
dW5zaWduZWQgQ29weU1vdmVDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCA9IDA7Cit1bnNpZ25l
ZCBDb3B5TW92ZUNvdW50ZXI6OmNvcHlDb3VudCA9IDA7Cit1bnNpZ25lZCBDb3B5TW92ZUNvdW50
ZXI6Om1vdmVDb3VudCA9IDA7CisKK3Vuc2lnbmVkIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50
ZXI6OmNvbnN0cnVjdGlvbkNvdW50ID0gMDsKK3Vuc2lnbmVkIENvbnN0cnVjdG9yRGVzdHJ1Y3Rv
ckNvdW50ZXI6OmRlc3RydWN0aW9uQ291bnQgPSAwOwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQ
SS9Db3VudGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ291bnRlcnMu
aAkocmV2aXNpb24gMTczNzk1KQkoZnJvbSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9D
b3B5TW92ZUNvdW50ZXIuaDoxNzM3OTUpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL0NvdW50ZXJz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENvcHlNb3ZlQ291bnRlcl9oCisj
ZGVmaW5lIENvcHlNb3ZlQ291bnRlcl9oCisKK3N0cnVjdCBDb3B5TW92ZUNvdW50ZXIgeworICAg
IHN0YXRpYyB1bnNpZ25lZCBjb25zdHJ1Y3Rpb25Db3VudDsKKyAgICBzdGF0aWMgdW5zaWduZWQg
Y29weUNvdW50OworICAgIHN0YXRpYyB1bnNpZ25lZCBtb3ZlQ291bnQ7CisKKyAgICBzdHJ1Y3Qg
VGVzdGluZ1Njb3BlIHsKKyAgICAgICAgVGVzdGluZ1Njb3BlKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgY29uc3RydWN0aW9uQ291bnQgPSAwOworICAgICAgICAgICAgY29weUNvdW50ID0gMDsK
KyAgICAgICAgICAgIG1vdmVDb3VudCA9IDA7CisgICAgICAgIH0KKyAgICB9OworCisgICAgQ29w
eU1vdmVDb3VudGVyKCkgeyBjb25zdHJ1Y3Rpb25Db3VudCsrOyB9CisgICAgQ29weU1vdmVDb3Vu
dGVyKGNvbnN0IENvcHlNb3ZlQ291bnRlciYpIHsgY29weUNvdW50Kys7IH0KKyAgICBDb3B5TW92
ZUNvdW50ZXImIG9wZXJhdG9yPShjb25zdCBDb3B5TW92ZUNvdW50ZXImKSB7IGNvcHlDb3VudCsr
OyByZXR1cm4gKnRoaXM7IH0KKyAgICBDb3B5TW92ZUNvdW50ZXIoQ29weU1vdmVDb3VudGVyJiYp
IHsgbW92ZUNvdW50Kys7IH0KKyAgICBDb3B5TW92ZUNvdW50ZXImIG9wZXJhdG9yPShDb3B5TW92
ZUNvdW50ZXImJikgeyBtb3ZlQ291bnQrKzsgcmV0dXJuICp0aGlzOyB9Cit9OworCit1bnNpZ25l
ZCBDb3B5TW92ZUNvdW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50ID0gMDsKK3Vuc2lnbmVkIENvcHlN
b3ZlQ291bnRlcjo6Y29weUNvdW50ID0gMDsKK3Vuc2lnbmVkIENvcHlNb3ZlQ291bnRlcjo6bW92
ZUNvdW50ID0gMDsKKworI2VuZGlmCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL0NvdW50ZXJz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9Db3VudGVycy5oCSh3b3JraW5n
IGNvcHkpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL0NvdW50ZXJzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE0IElnYWxpYSBTLkwuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMyw4ICsyNCw4IEBACiAgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBDb3B5TW92ZUNvdW50ZXJf
aAotI2RlZmluZSBDb3B5TW92ZUNvdW50ZXJfaAorI2lmbmRlZiBDb3VudGVyc19oCisjZGVmaW5l
IENvdW50ZXJzX2gKIAogc3RydWN0IENvcHlNb3ZlQ291bnRlciB7CiAgICAgc3RhdGljIHVuc2ln
bmVkIGNvbnN0cnVjdGlvbkNvdW50OwpAQCAtNDcsOCArNDgsMjEgQEAgc3RydWN0IENvcHlNb3Zl
Q291bnRlciB7CiAgICAgQ29weU1vdmVDb3VudGVyJiBvcGVyYXRvcj0oQ29weU1vdmVDb3VudGVy
JiYpIHsgbW92ZUNvdW50Kys7IHJldHVybiAqdGhpczsgfQogfTsKIAotdW5zaWduZWQgQ29weU1v
dmVDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCA9IDA7Ci11bnNpZ25lZCBDb3B5TW92ZUNvdW50
ZXI6OmNvcHlDb3VudCA9IDA7Ci11bnNpZ25lZCBDb3B5TW92ZUNvdW50ZXI6Om1vdmVDb3VudCA9
IDA7CiAKLSNlbmRpZgorc3RydWN0IENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXIgeworICAg
IHN0YXRpYyB1bnNpZ25lZCBjb25zdHJ1Y3Rpb25Db3VudDsKKyAgICBzdGF0aWMgdW5zaWduZWQg
ZGVzdHJ1Y3Rpb25Db3VudDsKKworICAgIHN0cnVjdCBUZXN0aW5nU2NvcGUgeworICAgICAgICBU
ZXN0aW5nU2NvcGUoKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdHJ1Y3Rpb25Db3VudCA9
IDA7CisgICAgICAgICAgICBkZXN0cnVjdGlvbkNvdW50ID0gMDsKKyAgICAgICAgfQorICAgIH07
CisKKyAgICBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyKCkgeyBjb25zdHJ1Y3Rpb25Db3Vu
dCsrOyB9CisgICAgfkNvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXIoKSB7IGRlc3RydWN0aW9u
Q291bnQrKzsgfQorfTsKKworI2VuZGlmIC8vIENvdW50ZXJzX2gKSW5kZXg6IFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiAxNzM3OTUpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RX
ZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTE5
LDYgKzExOSw3IEBACiAJCTc2RTE4MkRBMTU0NzU1MDEwMEYxRkFERCAvKiBXaWxsU2VuZFN1Ym1p
dEV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDc2RTE4MkQ5MTU0NzU1MDEwMEYxRkFERCAvKiBXaWxsU2VuZFN1Ym1pdEV2ZW50LmNwcCAqLzsg
fTsKIAkJNzZFMTgyREQxNTQ3NTY5MTAwRjFGQUREIC8qIFdpbGxTZW5kU3VibWl0RXZlbnRfQnVu
ZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc2
RTE4MkRDMTU0NzU2OTEwMEYxRkFERCAvKiBXaWxsU2VuZFN1Ym1pdEV2ZW50X0J1bmRsZS5jcHAg
Ki87IH07CiAJCTc2RTE4MkRGMTU0NzY3RTYwMEYxRkFERCAvKiBhdXRvLXN1Ym1pdHRpbmctZm9y
bS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDc2RTE4MkRFMTU0NzVBODMwMEYxRkFERCAvKiBhdXRvLXN1Ym1pdHRpbmctZm9ybS5odG1s
ICovOyB9OworCQk3QzZCQkQ4QzE5Q0VBNjMwMDBDMUY1RTAgLyogQ291bnRlcnMuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M2QkJEOEIxOUNFQTYz
MDAwQzFGNUUwIC8qIENvdW50ZXJzLmNwcCAqLzsgfTsKIAkJN0M3NEQ0MkYxODgyMjhGMzAwRTVF
RDU3IC8qIFN0cmluZ1ZpZXcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gN0M3NEQ0MkQxODgyMjhGMzAwRTVFRDU3IC8qIFN0cmluZ1ZpZXcuY3BwICov
OyB9OwogCQk3QzhEREFBQjE3MzVERUVFMDBFQTVBQzAgLyogQ2xvc2VUaGVuVGVybWluYXRlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDOEREQUE5
MTczNURFMUQwMEVBNUFDMCAvKiBDbG9zZVRoZW5UZXJtaW5hdGUuY3BwICovOyB9OwogCQk3QzlF
RDk4QjE3QTE5RjRCMDBFNERDMzMgLyogYXR0cmlidXRlZFN0cmluZ1N0cmlrZXRocm91Z2guaHRt
bCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
QzlFRDk4QTE3QTE5RDA2MDBFNERDMzMgLyogYXR0cmlidXRlZFN0cmluZ1N0cmlrZXRocm91Z2gu
aHRtbCAqLzsgfTsKQEAgLTQ2Myw2ICs0NjQsOCBAQAogCQk3NkUxODJEOTE1NDc1NTAxMDBGMUZB
REQgLyogV2lsbFNlbmRTdWJtaXRFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXaWxsU2VuZFN1Ym1pdEV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzZFMTgyREMxNTQ3NTY5MTAwRjFGQUREIC8qIFdpbGxTZW5kU3VibWl0RXZlbnRf
QnVuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdpbGxTZW5k
U3VibWl0RXZlbnRfQnVuZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzZF
MTgyREUxNTQ3NUE4MzAwRjFGQUREIC8qIGF1dG8tc3VibWl0dGluZy1mb3JtLmh0bWwgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSAiYXV0by1zdWJtaXR0aW5nLWZvcm0uaHRtbCI7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDNkJCRDhBMTlDRUE1NDMwMEMxRjVFMCAvKiBDb3Vu
dGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb3VudGVycy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QzZCQkQ4QjE5Q0VBNjMwMDBDMUY1RTAgLyogQ291
bnRlcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ291bnRlcnMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Qzc0RDQyRDE4ODIyOEYzMDBFNUVE
NTcgLyogU3RyaW5nVmlldy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTdHJpbmdWaWV3LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M4RERBQTkx
NzM1REUxRDAwRUE1QUMwIC8qIENsb3NlVGhlblRlcm1pbmF0ZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDbG9zZVRoZW5UZXJtaW5hdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3QzlFRDk4QTE3QTE5RDA2MDBFNERDMzMgLyogYXR0cmlidXRlZFN0cmluZ1N0cmlrZXRocm91
Z2guaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQuaHRtbDsgcGF0aCA9IGF0dHJpYnV0ZWRTdHJpbmdTdHJpa2V0aHJvdWdoLmh0bWw7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02NzAsNiArNjczLDggQEAKIAkJCQkyRTk2NjBE
QzE2QzA3RDdCMDAzNzFCNDIgLyogaW9zICovLAogCQkJCUJDQTYxQzNBMTE3MDBCOTQwMDQ2MEQx
RSAvKiBtYWMgKi8sCiAJCQkJQkMxMzFBOUUxMTcxMzE3QzAwQjY5NzI3IC8qIGNvbmZpZy5oICov
LAorCQkJCTdDNkJCRDhBMTlDRUE1NDMwMEMxRjVFMCAvKiBDb3VudGVycy5oICovLAorCQkJCTdD
NkJCRDhCMTlDRUE2MzAwMEMxRjVFMCAvKiBDb3VudGVycy5jcHAgKi8sCiAJCQkJQzBBREJFN0Ex
MkZDQTREMDAwRDJDMTI5IC8qIEphdmFTY3JpcHRUZXN0LmNwcCAqLywKIAkJCQlDMEFEQkU3QjEy
RkNBNEQwMDBEMkMxMjkgLyogSmF2YVNjcmlwdFRlc3QuaCAqLywKIAkJCQlCQzU3NUJCRjEyNkY1
NzUyMDA2RjBGMTIgLyogUGxhdGZvcm1VdGlsaXRpZXMuY3BwICovLApAQCAtMTM4NCw2ICsxMzg5
LDcgQEAKIAkJCQlCQzdCNjFBQTEyOUEwMzg3MDBEMTc0QTQgLyogV0tQcmVmZXJlbmNlcy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCQzkwOTk1RTEyNTY3QkMxMDAwODM3NTYgLyogV0tTdHJpbmcu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM5MDk5OTQxMjU2QUNGMTAwMDgzNzU2IC8qIFdLU3Ry
aW5nSlNTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJN0M2QkJEOEMxOUNFQTYzMDAwQzFG
NUUwIC8qIENvdW50ZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTI2NUFGNTUwMTVEMUU0OEEw
MEIwQ0I0QSAvKiBXVEZTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkU3NzY1Q0QxNkM0
RDgwQTAwQkEyQkIxIC8qIG1haW5JT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQkyRTc3NjVDRjE2
QzREODExMDBCQTJCQjEgLyogbWFpbk1hYy5tbSBpbiBTb3VyY2VzICovLApJbmRleDogVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29weU1vdmVDb3VudGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29weU1vdmVDb3VudGVyLmgJKHJldmlzaW9u
IDE3Mzc5NSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvcHlNb3ZlQ291bnRl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDb3B5TW92ZUNvdW50ZXJfaAot
I2RlZmluZSBDb3B5TW92ZUNvdW50ZXJfaAotCi1zdHJ1Y3QgQ29weU1vdmVDb3VudGVyIHsKLSAg
ICBzdGF0aWMgdW5zaWduZWQgY29uc3RydWN0aW9uQ291bnQ7Ci0gICAgc3RhdGljIHVuc2lnbmVk
IGNvcHlDb3VudDsKLSAgICBzdGF0aWMgdW5zaWduZWQgbW92ZUNvdW50OwotCi0gICAgc3RydWN0
IFRlc3RpbmdTY29wZSB7Ci0gICAgICAgIFRlc3RpbmdTY29wZSgpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGNvbnN0cnVjdGlvbkNvdW50ID0gMDsKLSAgICAgICAgICAgIGNvcHlDb3VudCA9IDA7
Ci0gICAgICAgICAgICBtb3ZlQ291bnQgPSAwOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIENv
cHlNb3ZlQ291bnRlcigpIHsgY29uc3RydWN0aW9uQ291bnQrKzsgfQotICAgIENvcHlNb3ZlQ291
bnRlcihjb25zdCBDb3B5TW92ZUNvdW50ZXImKSB7IGNvcHlDb3VudCsrOyB9Ci0gICAgQ29weU1v
dmVDb3VudGVyJiBvcGVyYXRvcj0oY29uc3QgQ29weU1vdmVDb3VudGVyJikgeyBjb3B5Q291bnQr
KzsgcmV0dXJuICp0aGlzOyB9Ci0gICAgQ29weU1vdmVDb3VudGVyKENvcHlNb3ZlQ291bnRlciYm
KSB7IG1vdmVDb3VudCsrOyB9Ci0gICAgQ29weU1vdmVDb3VudGVyJiBvcGVyYXRvcj0oQ29weU1v
dmVDb3VudGVyJiYpIHsgbW92ZUNvdW50Kys7IHJldHVybiAqdGhpczsgfQotfTsKLQotdW5zaWdu
ZWQgQ29weU1vdmVDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCA9IDA7Ci11bnNpZ25lZCBDb3B5
TW92ZUNvdW50ZXI6OmNvcHlDb3VudCA9IDA7Ci11bnNpZ25lZCBDb3B5TW92ZUNvdW50ZXI6Om1v
dmVDb3VudCA9IDA7Ci0KLSNlbmRpZgpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
VEYvSGFzaE1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
VEYvSGFzaE1hcC5jcHAJKHJldmlzaW9uIDE3Mzc5NSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV1RGL0hhc2hNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMSArMjUsMTMgQEAK
IAogI2luY2x1ZGUgImNvbmZpZy5oIgogCi0jaW5jbHVkZSAiQ29weU1vdmVDb3VudGVyLmgiCisj
aW5jbHVkZSAiQ291bnRlcnMuaCIKICNpbmNsdWRlICJNb3ZlT25seS5oIgogI2luY2x1ZGUgPHN0
cmluZz4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0hhc2guaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25Q
dHIuaD4KIAogbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogCkBAIC0xNzEsNCArMTczLDE5NSBA
QCBURVNUKFdURl9IYXNoTWFwLCBFZmZpY2llbnRHZXR0ZXIpCiAgICAgfQogfQogCitURVNUKFdU
Rl9IYXNoTWFwLCBPd25QdHJLZXkpCit7CisgICAgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRl
cjo6VGVzdGluZ1Njb3BlIHNjb3BlOworCisgICAgSGFzaE1hcDxPd25QdHI8Q29uc3RydWN0b3JE
ZXN0cnVjdG9yQ291bnRlcj4sIGludD4gbWFwOworCisgICAgT3duUHRyPENvbnN0cnVjdG9yRGVz
dHJ1Y3RvckNvdW50ZXI+IG93blB0ciA9IGFkb3B0UHRyKG5ldyBDb25zdHJ1Y3RvckRlc3RydWN0
b3JDb3VudGVyKTsKKyAgICBtYXAuYWRkKFdURjo6bW92ZShvd25QdHIpLCAyKTsKKworICAgIEVY
UEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291
bnQpOworICAgIEVYUEVDVF9FUSgwdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVz
dHJ1Y3Rpb25Db3VudCk7CisKKyAgICBtYXAuY2xlYXIoKTsKKyAgICAKKyAgICBFWFBFQ1RfRVEo
MXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsKKyAg
ICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3RydWN0aW9u
Q291bnQpOworfQorCitURVNUKFdURl9IYXNoTWFwLCBPd25QdHJLZXlfRmluZFVzaW5nUmF3UG9p
bnRlcikKK3sKKyAgICBIYXNoTWFwPE93blB0cjxpbnQ+LCBpbnQ+IG1hcDsKKworICAgIE93blB0
cjxpbnQ+IG93blB0ciA9IGFkb3B0UHRyKG5ldyBpbnQoNSkpOworICAgIGludCogcHRyID0gb3du
UHRyLmdldCgpOworICAgIG1hcC5hZGQoV1RGOjptb3ZlKG93blB0ciksIDIpOworCisgICAgYXV0
byBpdCA9IG1hcC5maW5kKHB0cik7CisgICAgQVNTRVJUX1RSVUUoaXQgIT0gbWFwLmVuZCgpKTsK
KyAgICBFWFBFQ1RfRVEocHRyLCBpdC0+a2V5LmdldCgpKTsKKyAgICBFWFBFQ1RfRVEoMiwgaXQt
PnZhbHVlKTsKK30KKworVEVTVChXVEZfSGFzaE1hcCwgT3duUHRyS2V5X0NvbnRhaW5zVXNpbmdS
YXdQb2ludGVyKQoreworICAgIEhhc2hNYXA8T3duUHRyPGludD4sIGludD4gbWFwOworCisgICAg
T3duUHRyPGludD4gb3duUHRyID0gYWRvcHRQdHIobmV3IGludCg1KSk7CisgICAgaW50KiBwdHIg
PSBvd25QdHIuZ2V0KCk7CisgICAgbWFwLmFkZChXVEY6Om1vdmUob3duUHRyKSwgMik7CisKKyAg
ICBFWFBFQ1RfRVEodHJ1ZSwgbWFwLmNvbnRhaW5zKHB0cikpOworfQorCitURVNUKFdURl9IYXNo
TWFwLCBPd25QdHJLZXlfR2V0VXNpbmdSYXdQb2ludGVyKQoreworICAgIEhhc2hNYXA8T3duUHRy
PGludD4sIGludD4gbWFwOworCisgICAgT3duUHRyPGludD4gb3duUHRyID0gYWRvcHRQdHIobmV3
IGludCg1KSk7CisgICAgaW50KiBwdHIgPSBvd25QdHIuZ2V0KCk7CisgICAgbWFwLmFkZChXVEY6
Om1vdmUob3duUHRyKSwgMik7CisKKyAgICBpbnQgdmFsdWUgPSBtYXAuZ2V0KHB0cik7CisgICAg
RVhQRUNUX0VRKDIsIHZhbHVlKTsKK30KKworVEVTVChXVEZfSGFzaE1hcCwgT3duUHRyS2V5X1Jl
bW92ZVVzaW5nUmF3UG9pbnRlcikKK3sKKyAgICBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVy
OjpUZXN0aW5nU2NvcGUgc2NvcGU7CisKKyAgICBIYXNoTWFwPE93blB0cjxDb25zdHJ1Y3RvckRl
c3RydWN0b3JDb3VudGVyPiwgaW50PiBtYXA7CisKKyAgICBPd25QdHI8Q29uc3RydWN0b3JEZXN0
cnVjdG9yQ291bnRlcj4gb3duUHRyID0gYWRvcHRQdHIobmV3IENvbnN0cnVjdG9yRGVzdHJ1Y3Rv
ckNvdW50ZXIpOworICAgIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXIqIHB0ciA9IG93blB0
ci5nZXQoKTsKKyAgICBtYXAuYWRkKFdURjo6bW92ZShvd25QdHIpLCAyKTsKKworICAgIEVYUEVD
VF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQp
OworICAgIEVYUEVDVF9FUSgwdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1
Y3Rpb25Db3VudCk7CisKKyAgICBib29sIHJlc3VsdCA9IG1hcC5yZW1vdmUocHRyKTsKKyAgICBF
WFBFQ1RfRVEodHJ1ZSwgcmVzdWx0KTsKKworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JE
ZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOworICAgIEVYUEVDVF9FUSgxdSwg
Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7Cit9CisKK1RF
U1QoV1RGX0hhc2hNYXAsIE93blB0cktleV9UYWtlVXNpbmdSYXdQb2ludGVyKQoreworICAgIENv
bnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OlRlc3RpbmdTY29wZSBzY29wZTsKKworICAgIEhh
c2hNYXA8T3duUHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+LCBpbnQ+IG1hcDsKKwor
ICAgIE93blB0cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPiBvd25QdHIgPSBhZG9wdFB0
cihuZXcgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcik7CisgICAgQ29uc3RydWN0b3JEZXN0
cnVjdG9yQ291bnRlciogcHRyID0gb3duUHRyLmdldCgpOworICAgIG1hcC5hZGQoV1RGOjptb3Zl
KG93blB0ciksIDIpOworCisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JD
b3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CisgICAgRVhQRUNUX0VRKDB1LCBDb25zdHJ1Y3Rv
ckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNvdW50KTsKKworICAgIGludCByZXN1bHQg
PSBtYXAudGFrZShwdHIpOworICAgIEVYUEVDVF9FUSgyLCByZXN1bHQpOworCisgICAgRVhQRUNU
X0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7
CisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVj
dGlvbkNvdW50KTsKK30KKworCitURVNUKFdURl9IYXNoTWFwLCBVbmlxdWVQdHJLZXkpCit7Cisg
ICAgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6VGVzdGluZ1Njb3BlIHNjb3BlOworCisg
ICAgSGFzaE1hcDxzdGQ6OnVuaXF1ZV9wdHI8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4s
IGludD4gbWFwOworCisgICAgYXV0byB1bmlxdWVQdHIgPSBzdGQ6Om1ha2VfdW5pcXVlPENvbnN0
cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+KCk7CisgICAgbWFwLmFkZChXVEY6Om1vdmUodW5pcXVl
UHRyKSwgMik7CisKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50
ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsKKyAgICBFWFBFQ1RfRVEoMHUsIENvbnN0cnVjdG9yRGVz
dHJ1Y3RvckNvdW50ZXI6OmRlc3RydWN0aW9uQ291bnQpOworCisgICAgbWFwLmNsZWFyKCk7Cisg
ICAgCisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25z
dHJ1Y3Rpb25Db3VudCk7CisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JD
b3VudGVyOjpkZXN0cnVjdGlvbkNvdW50KTsKK30KKworVEVTVChXVEZfSGFzaE1hcCwgVW5pcXVl
UHRyS2V5X0ZpbmRVc2luZ1Jhd1BvaW50ZXIpCit7CisgICAgSGFzaE1hcDxzdGQ6OnVuaXF1ZV9w
dHI8aW50PiwgaW50PiBtYXA7CisKKyAgICBhdXRvIHVuaXF1ZVB0ciA9IHN0ZDo6bWFrZV91bmlx
dWU8aW50Pig1KTsKKyAgICBpbnQqIHB0ciA9IHVuaXF1ZVB0ci5nZXQoKTsKKyAgICBtYXAuYWRk
KFdURjo6bW92ZSh1bmlxdWVQdHIpLCAyKTsKKworICAgIGF1dG8gaXQgPSBtYXAuZmluZChwdHIp
OworICAgIEFTU0VSVF9UUlVFKGl0ICE9IG1hcC5lbmQoKSk7CisgICAgRVhQRUNUX0VRKHB0ciwg
aXQtPmtleS5nZXQoKSk7CisgICAgRVhQRUNUX0VRKDIsIGl0LT52YWx1ZSk7Cit9CisKK1RFU1Qo
V1RGX0hhc2hNYXAsIFVuaXF1ZVB0cktleV9Db250YWluc1VzaW5nUmF3UG9pbnRlcikKK3sKKyAg
ICBIYXNoTWFwPHN0ZDo6dW5pcXVlX3B0cjxpbnQ+LCBpbnQ+IG1hcDsKKworICAgIGF1dG8gdW5p
cXVlUHRyID0gc3RkOjptYWtlX3VuaXF1ZTxpbnQ+KDUpOworICAgIGludCogcHRyID0gdW5pcXVl
UHRyLmdldCgpOworICAgIG1hcC5hZGQoV1RGOjptb3ZlKHVuaXF1ZVB0ciksIDIpOworCisgICAg
RVhQRUNUX0VRKHRydWUsIG1hcC5jb250YWlucyhwdHIpKTsKK30KKworVEVTVChXVEZfSGFzaE1h
cCwgVW5pcXVlUHRyS2V5X0dldFVzaW5nUmF3UG9pbnRlcikKK3sKKyAgICBIYXNoTWFwPHN0ZDo6
dW5pcXVlX3B0cjxpbnQ+LCBpbnQ+IG1hcDsKKworICAgIGF1dG8gdW5pcXVlUHRyID0gc3RkOjpt
YWtlX3VuaXF1ZTxpbnQ+KDUpOworICAgIGludCogcHRyID0gdW5pcXVlUHRyLmdldCgpOworICAg
IG1hcC5hZGQoV1RGOjptb3ZlKHVuaXF1ZVB0ciksIDIpOworCisgICAgaW50IHZhbHVlID0gbWFw
LmdldChwdHIpOworICAgIEVYUEVDVF9FUSgyLCB2YWx1ZSk7Cit9CisKK1RFU1QoV1RGX0hhc2hN
YXAsIFVuaXF1ZVB0cktleV9SZW1vdmVVc2luZ1Jhd1BvaW50ZXIpCit7CisgICAgQ29uc3RydWN0
b3JEZXN0cnVjdG9yQ291bnRlcjo6VGVzdGluZ1Njb3BlIHNjb3BlOworCisgICAgSGFzaE1hcDxz
dGQ6OnVuaXF1ZV9wdHI8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4sIGludD4gbWFwOwor
CisgICAgYXV0byB1bmlxdWVQdHIgPSBzdGQ6Om1ha2VfdW5pcXVlPENvbnN0cnVjdG9yRGVzdHJ1
Y3RvckNvdW50ZXI+KCk7CisgICAgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlciogcHRyID0g
dW5pcXVlUHRyLmdldCgpOworICAgIG1hcC5hZGQoV1RGOjptb3ZlKHVuaXF1ZVB0ciksIDIpOwor
CisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1
Y3Rpb25Db3VudCk7CisgICAgRVhQRUNUX0VRKDB1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3Vu
dGVyOjpkZXN0cnVjdGlvbkNvdW50KTsKKworICAgIGJvb2wgcmVzdWx0ID0gbWFwLnJlbW92ZShw
dHIpOworICAgIEVYUEVDVF9FUSh0cnVlLCByZXN1bHQpOworCisgICAgRVhQRUNUX0VRKDF1LCBD
b25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CisgICAgRVhQ
RUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNvdW50
KTsKK30KKworVEVTVChXVEZfSGFzaE1hcCwgVW5pcXVlUHRyS2V5X1Rha2VVc2luZ1Jhd1BvaW50
ZXIpCit7CisgICAgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6VGVzdGluZ1Njb3BlIHNj
b3BlOworCisgICAgSGFzaE1hcDxzdGQ6OnVuaXF1ZV9wdHI8Q29uc3RydWN0b3JEZXN0cnVjdG9y
Q291bnRlcj4sIGludD4gbWFwOworCisgICAgYXV0byB1bmlxdWVQdHIgPSBzdGQ6Om1ha2VfdW5p
cXVlPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+KCk7CisgICAgQ29uc3RydWN0b3JEZXN0
cnVjdG9yQ291bnRlciogcHRyID0gdW5pcXVlUHRyLmdldCgpOworICAgIG1hcC5hZGQoV1RGOjpt
b3ZlKHVuaXF1ZVB0ciksIDIpOworCisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3Ry
dWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CisgICAgRVhQRUNUX0VRKDB1LCBDb25z
dHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNvdW50KTsKKworICAgIGludCBy
ZXN1bHQgPSBtYXAudGFrZShwdHIpOworICAgIEVYUEVDVF9FUSgyLCByZXN1bHQpOworCisgICAg
RVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25D
b3VudCk7CisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpk
ZXN0cnVjdGlvbkNvdW50KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQpJbmRl
eDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaFNldC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaFNldC5jcHAJKHJldmlzaW9uIDE3
Mzc5NSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hTZXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNSw5ICsyNSwxMSBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKKyNp
bmNsdWRlICJDb3VudGVycy5oIgogI2luY2x1ZGUgIk1vdmVPbmx5LmgiCiAjaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KLQorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFz
c093blB0ci5oPgogCiBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CiAKQEAgLTExNyw0ICsxMTks
MTgwIEBAIFRFU1QoV1RGX0hhc2hTZXQsIE1vdmVPbmx5KQogICAgICAgICBFWFBFQ1RfVFJVRShz
ZWNvbmRTZXQuY29udGFpbnMoTW92ZU9ubHkoaSArIDEpKSk7CiB9CiAKK1RFU1QoV1RGX0hhc2hT
ZXQsIE93blB0cktleSkKK3sKKyAgICBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpUZXN0
aW5nU2NvcGUgc2NvcGU7CisKKyAgICBIYXNoU2V0PE93blB0cjxDb25zdHJ1Y3RvckRlc3RydWN0
b3JDb3VudGVyPj4gc2V0OworCisgICAgT3duUHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50
ZXI+IG93blB0ciA9IGFkb3B0UHRyKG5ldyBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyKTsK
KyAgICBzZXQuYWRkKFdURjo6bW92ZShvd25QdHIpKTsKKworICAgIEVYUEVDVF9FUSgxdSwgQ29u
c3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOworICAgIEVYUEVD
VF9FUSgwdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7
CisKKyAgICBzZXQuY2xlYXIoKTsKKyAgICAKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9y
RGVzdHJ1Y3RvckNvdW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsKKyAgICBFWFBFQ1RfRVEoMXUs
IENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3RydWN0aW9uQ291bnQpOworfQorCitU
RVNUKFdURl9IYXNoU2V0LCBPd25QdHJLZXlfRmluZFVzaW5nUmF3UG9pbnRlcikKK3sKKyAgICBI
YXNoU2V0PE93blB0cjxpbnQ+PiBzZXQ7CisKKyAgICBPd25QdHI8aW50PiBvd25QdHIgPSBhZG9w
dFB0cihuZXcgaW50KDUpKTsKKyAgICBpbnQqIHB0ciA9IG93blB0ci5nZXQoKTsKKyAgICBzZXQu
YWRkKFdURjo6bW92ZShvd25QdHIpKTsKKworICAgIGF1dG8gaXQgPSBzZXQuZmluZChwdHIpOwor
ICAgIEFTU0VSVF9UUlVFKGl0ICE9IHNldC5lbmQoKSk7CisgICAgRVhQRUNUX0VRKHB0ciwgaXQt
PmdldCgpKTsKKyAgICBFWFBFQ1RfRVEoNSwgKml0LT5nZXQoKSk7Cit9CisKK1RFU1QoV1RGX0hh
c2hTZXQsIE93blB0cktleV9Db250YWluc1VzaW5nUmF3UG9pbnRlcikKK3sKKyAgICBIYXNoU2V0
PE93blB0cjxpbnQ+PiBzZXQ7CisKKyAgICBPd25QdHI8aW50PiBvd25QdHIgPSBhZG9wdFB0cihu
ZXcgaW50KDUpKTsKKyAgICBpbnQqIHB0ciA9IG93blB0ci5nZXQoKTsKKyAgICBzZXQuYWRkKFdU
Rjo6bW92ZShvd25QdHIpKTsKKworICAgIEVYUEVDVF9FUSh0cnVlLCBzZXQuY29udGFpbnMocHRy
KSk7Cit9CisKK1RFU1QoV1RGX0hhc2hTZXQsIE93blB0cktleV9SZW1vdmVVc2luZ1Jhd1BvaW50
ZXIpCit7CisgICAgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6VGVzdGluZ1Njb3BlIHNj
b3BlOworCisgICAgSGFzaFNldDxPd25QdHI8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4+
IHNldDsKKworICAgIE93blB0cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPiBvd25QdHIg
PSBhZG9wdFB0cihuZXcgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcik7CisgICAgQ29uc3Ry
dWN0b3JEZXN0cnVjdG9yQ291bnRlciogcHRyID0gb3duUHRyLmdldCgpOworICAgIHNldC5hZGQo
V1RGOjptb3ZlKG93blB0cikpOworCisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3Ry
dWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CisgICAgRVhQRUNUX0VRKDB1LCBDb25z
dHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNvdW50KTsKKworICAgIGJvb2wg
cmVzdWx0ID0gc2V0LnJlbW92ZShwdHIpOworICAgIEVYUEVDVF9FUSh0cnVlLCByZXN1bHQpOwor
CisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1
Y3Rpb25Db3VudCk7CisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3Vu
dGVyOjpkZXN0cnVjdGlvbkNvdW50KTsKK30KKworVEVTVChXVEZfSGFzaFNldCwgT3duUHRyS2V5
X1Rha2VVc2luZ1Jhd1BvaW50ZXIpCit7CisgICAgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRl
cjo6VGVzdGluZ1Njb3BlIHNjb3BlOworCisgICAgSGFzaFNldDxPd25QdHI8Q29uc3RydWN0b3JE
ZXN0cnVjdG9yQ291bnRlcj4+IHNldDsKKworICAgIE93blB0cjxDb25zdHJ1Y3RvckRlc3RydWN0
b3JDb3VudGVyPiBvd25QdHIgPSBhZG9wdFB0cihuZXcgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291
bnRlcik7CisgICAgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlciogcHRyID0gb3duUHRyLmdl
dCgpOworICAgIHNldC5hZGQoV1RGOjptb3ZlKG93blB0cikpOworCisgICAgRVhQRUNUX0VRKDF1
LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CisgICAg
RVhQRUNUX0VRKDB1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNv
dW50KTsKKworICAgIGF1dG8gcmVzdWx0ID0gc2V0LnRha2UocHRyKTsKKyAgICBFWFBFQ1RfRVEo
cHRyLCByZXN1bHQuZ2V0KCkpOworCisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3Ry
dWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CisgICAgRVhQRUNUX0VRKDB1LCBDb25z
dHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNvdW50KTsKKworICAgIHJlc3Vs
dCA9IG51bGxwdHI7CisKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNv
dW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9y
RGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3RydWN0aW9uQ291bnQpOworfQorCitURVNUKFdURl9IYXNo
U2V0LCBVbmlxdWVQdHJLZXkpCit7CisgICAgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6
VGVzdGluZ1Njb3BlIHNjb3BlOworCisgICAgSGFzaFNldDxzdGQ6OnVuaXF1ZV9wdHI8Q29uc3Ry
dWN0b3JEZXN0cnVjdG9yQ291bnRlcj4+IHNldDsKKworICAgIGF1dG8gdW5pcXVlUHRyID0gc3Rk
OjptYWtlX3VuaXF1ZTxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPigpOworICAgIHNldC5h
ZGQoV1RGOjptb3ZlKHVuaXF1ZVB0cikpOworCisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3Rv
ckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CisgICAgRVhQRUNUX0VRKDB1
LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNvdW50KTsKKworICAg
IHNldC5jbGVhcigpOworCisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JD
b3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3Rv
ckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNvdW50KTsKK30KKworVEVTVChXVEZfSGFz
aFNldCwgVW5pcXVlUHRyS2V5X0ZpbmRVc2luZ1Jhd1BvaW50ZXIpCit7CisgICAgSGFzaFNldDxz
dGQ6OnVuaXF1ZV9wdHI8aW50Pj4gc2V0OworCisgICAgYXV0byB1bmlxdWVQdHIgPSBzdGQ6Om1h
a2VfdW5pcXVlPGludD4oNSk7CisgICAgaW50KiBwdHIgPSB1bmlxdWVQdHIuZ2V0KCk7CisgICAg
c2V0LmFkZChXVEY6Om1vdmUodW5pcXVlUHRyKSk7CisKKyAgICBhdXRvIGl0ID0gc2V0LmZpbmQo
cHRyKTsKKyAgICBBU1NFUlRfVFJVRShpdCAhPSBzZXQuZW5kKCkpOworICAgIEVYUEVDVF9FUShw
dHIsIGl0LT5nZXQoKSk7CisgICAgRVhQRUNUX0VRKDUsICppdC0+Z2V0KCkpOworfQorCitURVNU
KFdURl9IYXNoU2V0LCBVbmlxdWVQdHJLZXlfQ29udGFpbnNVc2luZ1Jhd1BvaW50ZXIpCit7Cisg
ICAgSGFzaFNldDxzdGQ6OnVuaXF1ZV9wdHI8aW50Pj4gc2V0OworCisgICAgYXV0byB1bmlxdWVQ
dHIgPSBzdGQ6Om1ha2VfdW5pcXVlPGludD4oNSk7CisgICAgaW50KiBwdHIgPSB1bmlxdWVQdHIu
Z2V0KCk7CisgICAgc2V0LmFkZChXVEY6Om1vdmUodW5pcXVlUHRyKSk7CisKKyAgICBFWFBFQ1Rf
RVEodHJ1ZSwgc2V0LmNvbnRhaW5zKHB0cikpOworfQorCitURVNUKFdURl9IYXNoU2V0LCBVbmlx
dWVQdHJLZXlfUmVtb3ZlVXNpbmdSYXdQb2ludGVyKQoreworICAgIENvbnN0cnVjdG9yRGVzdHJ1
Y3RvckNvdW50ZXI6OlRlc3RpbmdTY29wZSBzY29wZTsKKworICAgIEhhc2hTZXQ8c3RkOjp1bmlx
dWVfcHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+PiBzZXQ7CisKKyAgICBhdXRvIHVu
aXF1ZVB0ciA9IHN0ZDo6bWFrZV91bmlxdWU8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4o
KTsKKyAgICBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyKiBwdHIgPSB1bmlxdWVQdHIuZ2V0
KCk7CisgICAgc2V0LmFkZChXVEY6Om1vdmUodW5pcXVlUHRyKSk7CisKKyAgICBFWFBFQ1RfRVEo
MXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsKKyAg
ICBFWFBFQ1RfRVEoMHUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3RydWN0aW9u
Q291bnQpOworCisgICAgYm9vbCByZXN1bHQgPSBzZXQucmVtb3ZlKHB0cik7CisgICAgRVhQRUNU
X0VRKHRydWUsIHJlc3VsdCk7CisKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1
Y3RvckNvdW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0
cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3RydWN0aW9uQ291bnQpOworfQorCitURVNUKFdU
Rl9IYXNoU2V0LCBVbmlxdWVQdHJLZXlfVGFrZVVzaW5nUmF3UG9pbnRlcikKK3sKKyAgICBDb25z
dHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpUZXN0aW5nU2NvcGUgc2NvcGU7CisKKyAgICBIYXNo
U2V0PHN0ZDo6dW5pcXVlX3B0cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPj4gc2V0Owor
CisgICAgYXV0byB1bmlxdWVQdHIgPSBzdGQ6Om1ha2VfdW5pcXVlPENvbnN0cnVjdG9yRGVzdHJ1
Y3RvckNvdW50ZXI+KCk7CisgICAgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlciogcHRyID0g
dW5pcXVlUHRyLmdldCgpOworICAgIHNldC5hZGQoV1RGOjptb3ZlKHVuaXF1ZVB0cikpOworCisg
ICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rp
b25Db3VudCk7CisgICAgRVhQRUNUX0VRKDB1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVy
OjpkZXN0cnVjdGlvbkNvdW50KTsKKworICAgIGF1dG8gcmVzdWx0ID0gc2V0LnRha2UocHRyKTsK
KyAgICBFWFBFQ1RfRVEocHRyLCByZXN1bHQuZ2V0KCkpOworCisgICAgRVhQRUNUX0VRKDF1LCBD
b25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CisgICAgRVhQ
RUNUX0VRKDB1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNvdW50
KTsKKyAgICAKKyAgICByZXN1bHQgPSBudWxscHRyOworCisgICAgRVhQRUNUX0VRKDF1LCBDb25z
dHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CisgICAgRVhQRUNU
X0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNvdW50KTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238426</attachid>
            <date>2014-09-21 10:42:56 -0700</date>
            <delta_ts>2014-09-21 12:40:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-136166-20140921104255.patch</filename>
            <type>text/plain</type>
            <size>44352</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNzM3OTUpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDQ4IEBACisyMDE0LTA5LTIwICBTYW0gV2VpbmlnICA8c2FtQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgTWFrZSBwb3NzaWJsZSBIYXNoU2V0PHN0ZDo6dW5pcXVlX3B0
cjw+PgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2
MTY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3
dGYvR2V0UHRyLmg6CisgICAgICAgIChXVEY6OmdldFB0cik6CisgICAgICAgIChXVEY6OkdldFB0
ckhlbHBlcjxzdGQ6OnVuaXF1ZV9wdHI8VD4+OjpnZXRQdHIpOgorICAgICAgICBNYWtlIHNwZWNp
YWxpemluZyBHZXRQdHJIZWxwZXIgYSBiaXQgY2xlYW5lciAoeW91IGRvbid0IGhhdmUgdG8gcHV0
IAorICAgICAgICBJc1NtYXJ0UHRyPFQ+Ojp2YWx1ZSBldmVyeXdoZXJlIGFueSBtb3JlKSBhbmQg
YWRkIHNwZWNpYWxpemF0aW9ucyBmb3IKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyLgorCisgICAg
ICAgICogd3RmL0hhc2hGdW5jdGlvbnMuaDoKKyAgICAgICAgKFdURjo6UHRySGFzaDxzdGQ6OnVu
aXF1ZV9wdHI8UD4+KToKKyAgICAgICAgQWRkIHNwZWNpYWxpemF0aW9uIGZvciBQdHJIYXNoIGZv
ciBzdGQ6OnVuaXF1ZV9wdHIgYW5kIHNldCBpdCBhcyB0aGUgRGVmYXVsdEhhc2gKKyAgICAgICAg
Zm9yIGl0IGFzIHdlbGwuCisKKyAgICAgICAgKiB3dGYvSGFzaE1hcC5oOiAgICAKKyAgICAgICAg
KiB3dGYvSGFzaFNldC5oOgorICAgICAgICBBZGQgb3ZlcmxvYWRzIG9mIGZpbmQoKSwgY29udGFp
bnMoKSwgcmVtb3ZlKCksIHRha2UoKSAoYW5kIGdldCgpIGZvciBIYXNoTWFwKSBmb3IgInNtYXJ0
IHBvaW50ZXJzIiB0aGF0CisgICAgICAgIHRha2UgdGhlIHJhdyBwb2ludGVyIHR5cGUgYXMgdGhl
IHBhcmFtZXRlci4gVGhlc2UgdXNlIFNGSU5BRSB0byBtYWtlIHRoZW1zZWx2ZXMgb25seSBhdmFp
bGFibGUKKyAgICAgICAgd2hlbiB0aGUgSXNTbWFydFB0cjxLZXlUeXBlPjo6dmFsdWUgaXMgdHJ1
ZS4gCisKKyAgICAgICAgKiB3dGYvSGFzaFRyYWl0cy5oOgorICAgICAgICBPdmVycmlkZSBjb25z
dHJ1Y3REZWxldGVkVmFsdWUoKSBhbmQgaXNEZWxldGVkVmFsdWUoKSBpbiB0aGUgc3RkOjp1bmlx
dWVfcHRyIHNwZWNpYWxpemF0aW9uCisgICAgICAgIHNpbmNlIHRoZSBkZWZhdWx0IGltcGxlbWVu
dGF0aW9uIGRlcGVuZHMgb24gdGhlIHR5cGUgaGF2aW5nIGEgY29uc3RydWN0b3IgdGhhdCB0YWtl
cyBhIEhhc2hUYWJsZURlbGV0ZWRWYWx1ZQorICAgICAgICBhbmQgZnVuY3Rpb24gbmFtZWQgaXNI
YXNoVGFibGVEZWxldGVkVmFsdWUoKS4KKworICAgICAgICAqIHd0Zi9Pd25QdHIuaDoKKyAgICAg
ICAgKFdURjo6T3duUHRyOjpPd25QdHIpOgorICAgICAgICAoV1RGOjpPd25QdHI6OmlzSGFzaFRh
YmxlRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKFdURjo6T3duUHRyOjpoYXNoVGFibGVEZWxldGVk
VmFsdWUpOgorICAgICAgICBBZGQgSGFzaFRhYmxlRGVsZXRlZFZhbHVlIGNvbnN0cnVjdG9yL2Z1
bmN0aW9ucyB0byBhbGxvdyB0aGUgY29uc3RydWN0RGVsZXRlZFZhbHVlKCkgYW5kIGlzRGVsZXRl
ZFZhbHVlKCkKKyAgICAgICAgaGFzaCB0cmFpdHMgdG8gd29yay4KKworICAgICAgICAoV1RGOjpQ
dHJIYXNoPE93blB0cjxQPj46Omhhc2gpOgorICAgICAgICAoV1RGOjpQdHJIYXNoPE93blB0cjxQ
Pj46OmVxdWFsKToKKyAgICAgICAgQWRkIHNwZWNpYWxpemF0aW9uIGZvciBQdHJIYXNoIGZvciBP
d25QdHIgYW5kIHNldCBpdCBhcyB0aGUgRGVmYXVsdEhhc2gKKyAgICAgICAgZm9yIGl0IGFzIHdl
bGwuCisKKyAgICAgICAgKiB3dGYvUmVmLmg6CisgICAgICAgIFVwZGF0ZSBmb3IgdGhlIGxlc3Mg
dmVyYm9zZSBHZXRQdHJIZWxwZXIgc3BlY2lhbGl6YXRpb24uCisKIDIwMTQtMDktMTkgIENocmlz
IER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBBbGxvdyBET00gbWV0aG9kcyB0
byByZXR1cm4gcmVmZXJlbmNlcyBpbnN0ZWFkIG9mIHBvaW50ZXJzCkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9HZXRQdHIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9HZXRQdHIuaAkocmV2
aXNpb24gMTczNzk1KQorKysgU291cmNlL1dURi93dGYvR2V0UHRyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDMyICszMCw0OCBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RydWN0IElzU21hcnRQ
dHIgCiB9OwogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgYm9vbCBpc1NtYXJ0UHRyPgotc3RydWN0
IEdldFB0ckhlbHBlcjsKK3N0cnVjdCBHZXRQdHJIZWxwZXJCYXNlOwogCiB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KLXN0cnVjdCBHZXRQdHJIZWxwZXI8VCwgZmFsc2UgLyogaXNTbWFydFB0ciAqLz4g
eworc3RydWN0IEdldFB0ckhlbHBlckJhc2U8VCwgZmFsc2UgLyogaXNTbWFydFB0ciAqLz4gewog
ICAgIHR5cGVkZWYgVCogUHRyVHlwZTsKICAgICBzdGF0aWMgVCogZ2V0UHRyKFQmIHApIHsgcmV0
dXJuICZwOyB9CiB9OwogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0cnVjdCBHZXRQdHJIZWxw
ZXI8VCwgdHJ1ZSAvKiBpc1NtYXJ0UHRyICovPiB7CitzdHJ1Y3QgR2V0UHRySGVscGVyQmFzZTxU
LCB0cnVlIC8qIGlzU21hcnRQdHIgKi8+IHsKICAgICB0eXBlZGVmIHR5cGVuYW1lIFQ6OlB0clR5
cGUgUHRyVHlwZTsKICAgICBzdGF0aWMgUHRyVHlwZSBnZXRQdHIoY29uc3QgVCYgcCkgeyByZXR1
cm4gcC5nZXQoKTsgfQogfTsKIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgdHlwZW5h
bWUgR2V0UHRySGVscGVyPFQsIElzU21hcnRQdHI8VD46OnZhbHVlPjo6UHRyVHlwZSBnZXRQdHIo
VCYgcCkKK3N0cnVjdCBHZXRQdHJIZWxwZXIgOiBHZXRQdHJIZWxwZXJCYXNlPFQsIElzU21hcnRQ
dHI8VD46OnZhbHVlPiB7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2lubGluZSB0eXBl
bmFtZSBHZXRQdHJIZWxwZXI8VD46OlB0clR5cGUgZ2V0UHRyKFQmIHApCiB7Ci0gICAgcmV0dXJu
IEdldFB0ckhlbHBlcjxULCBJc1NtYXJ0UHRyPFQ+Ojp2YWx1ZT46OmdldFB0cihwKTsKKyAgICBy
ZXR1cm4gR2V0UHRySGVscGVyPFQ+OjpnZXRQdHIocCk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFt
ZSBUPgotaW5saW5lIHR5cGVuYW1lIEdldFB0ckhlbHBlcjxULCBJc1NtYXJ0UHRyPFQ+Ojp2YWx1
ZT46OlB0clR5cGUgZ2V0UHRyKGNvbnN0IFQmIHApCitpbmxpbmUgdHlwZW5hbWUgR2V0UHRySGVs
cGVyPFQ+OjpQdHJUeXBlIGdldFB0cihjb25zdCBUJiBwKQogewotICAgIHJldHVybiBHZXRQdHJI
ZWxwZXI8VCwgSXNTbWFydFB0cjxUPjo6dmFsdWU+OjpnZXRQdHIocCk7CisgICAgcmV0dXJuIEdl
dFB0ckhlbHBlcjxUPjo6Z2V0UHRyKHApOwogfQogCisvLyBFeHBsaWNpdCBzcGVjaWFsaXphdGlv
biBmb3IgU1RMIHR5cGVzCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgSXNTbWFydFB0
cjxzdGQ6OnVuaXF1ZV9wdHI8VD4+IHsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRy
dWU7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0cnVjdCBHZXRQdHJIZWxwZXI8c3Rk
Ojp1bmlxdWVfcHRyPFQ+PiB7CisgICAgdHlwZWRlZiBUKiBQdHJUeXBlOworICAgIHN0YXRpYyBU
KiBnZXRQdHIoY29uc3Qgc3RkOjp1bmlxdWVfcHRyPFQ+JiBwKSB7IHJldHVybiBjb25zdF9jYXN0
PFQqPihwLmdldCgpKTsgfQorfTsKKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKICNlbmRpZiAvLyBX
VEZfR2V0UHRyX2gKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0hhc2hGdW5jdGlvbnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9IYXNoRnVuY3Rpb25zLmgJKHJldmlzaW9uIDE3Mzc5NSkK
KysrIFNvdXJjZS9XVEYvd3RmL0hhc2hGdW5jdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTI3
LDYgKzEyNyw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChU
IGEsIFQgYikgeyByZXR1cm4gYSA9PSBiOyB9CiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIHNh
ZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKICAgICB9OworCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgUD4gc3RydWN0IFB0ckhhc2g8UmVmUHRyPFA+PiA6IFB0ckhhc2g8UCo+IHsK
ICAgICAgICAgdXNpbmcgUHRySGFzaDxQKj46Omhhc2g7CiAgICAgICAgIHN0YXRpYyB1bnNpZ25l
ZCBoYXNoKGNvbnN0IFJlZlB0cjxQPiYga2V5KSB7IHJldHVybiBoYXNoKGtleS5nZXQoKSk7IH0K
QEAgLTEzNiw2ICsxMzcsMTUgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIHN0YXRpYyBib29s
IGVxdWFsKGNvbnN0IFJlZlB0cjxQPiYgYSwgUCogYikgeyByZXR1cm4gYSA9PSBiOyB9CiAgICAg
fTsKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFA+IHN0cnVjdCBQdHJIYXNoPHN0ZDo6dW5pcXVl
X3B0cjxQPj4gOiBQdHJIYXNoPFAqPiB7CisgICAgICAgIHVzaW5nIFB0ckhhc2g8UCo+OjpoYXNo
OworICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8UD4m
IGtleSkgeyByZXR1cm4gaGFzaChrZXkuZ2V0KCkpOyB9CisgICAgICAgIHVzaW5nIFB0ckhhc2g8
UCo+OjplcXVhbDsKKyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3Qgc3RkOjp1bmlxdWVf
cHRyPFA+JiBhLCBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8UD4mIGIpIHsgcmV0dXJuIGEuZ2V0KCkg
PT0gYi5nZXQoKTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChQKiBhLCBjb25zdCBzdGQ6
OnVuaXF1ZV9wdHI8UD4mIGIpIHsgcmV0dXJuIGEgPT0gYi5nZXQoKTsgfQorICAgICAgICBzdGF0
aWMgYm9vbCBlcXVhbChjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8UD4mIGEsIFAqIGIpIHsgcmV0dXJu
IGEuZ2V0KCkgPT0gYjsgfQorICAgIH07CisKICAgICAvLyBkZWZhdWx0IGhhc2ggZnVuY3Rpb24g
Zm9yIGVhY2ggdHlwZQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRI
YXNoOwpAQCAtMTgxLDYgKzE5MSw3IEBAIG5hbWVzcGFjZSBXVEYgewogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgUD4gc3RydWN0IERlZmF1bHRIYXNoPFAqPiB7IHR5cGVkZWYgUHRySGFzaDxQKj4g
SGFzaDsgfTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQPiBzdHJ1Y3QgRGVmYXVsdEhhc2g8UmVm
UHRyPFA+PiB7IHR5cGVkZWYgUHRySGFzaDxSZWZQdHI8UD4+IEhhc2g7IH07CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgUD4gc3RydWN0IERlZmF1bHRIYXNoPHN0ZDo6dW5pcXVlX3B0cjxQPj4geyB0
eXBlZGVmIFB0ckhhc2g8c3RkOjp1bmlxdWVfcHRyPFA+PiBIYXNoOyB9OwogCiAgICAgLy8gbWFr
ZSBJbnRQYWlySGFzaCB0aGUgZGVmYXVsdCBoYXNoIGZ1bmN0aW9uIGZvciBwYWlycyBvZiAoYXQg
bW9zdCkgMzItYml0IGludGVnZXJzLgogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9IYXNoTWFwLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSGFzaE1hcC5oCShyZXZpc2lvbiAxNzM3OTUp
CisrKyBTb3VyY2UvV1RGL3d0Zi9IYXNoTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIy
LDcgQEAKICNkZWZpbmUgV1RGX0hhc2hNYXBfaAogCiAjaW5jbHVkZSA8aW5pdGlhbGl6ZXJfbGlz
dD4KKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hUYWJsZS5oPgog
I2luY2x1ZGUgPHd0Zi9JdGVyYXRvclJhbmdlLmg+CiAKQEAgLTE0Myw2ICsxNDQsMjIgQEAgcHVi
bGljOgogICAgIC8vICAgc3RhdGljIHRyYW5zbGF0ZShWYWx1ZVR5cGUmLCBjb25zdCBUJiwgdW5z
aWduZWQgaGFzaENvZGUpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0
eXBlbmFtZSBLLCB0eXBlbmFtZSBWPiBBZGRSZXN1bHQgYWRkKEsmJiwgViYmKTsKIAorICAgIC8v
IEFuIGFsdGVybmF0ZSB2ZXJzaW9uIG9mIGZpbmQoKSBmb3Igc21hcnQgcG9pbnRlciBrZXlzLCB0
aGF0IHRha2UgdGhlIHJhdyBwb2ludGVyIHR5cGUgYXMgdGhlIHBhcmFtZXRlci4KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBLID0gS2V5VHlwZT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFy
dFB0cjxLPjo6dmFsdWUsIGl0ZXJhdG9yPjo6dHlwZSBmaW5kKHR5cGVuYW1lIEdldFB0ckhlbHBl
cjxLPjo6UHRyVHlwZSk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSyA9IEtleVR5cGU+IHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBjb25zdF9pdGVyYXRvcj46
OnR5cGUgZmluZCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUpIGNvbnN0OworCisg
ICAgLy8gQW4gYWx0ZXJuYXRlIHZlcnNpb24gb2YgY29udGFpbnMoKSBmb3Igc21hcnQgcG9pbnRl
ciBrZXlzLCB0aGF0IHRha2UgdGhlIHJhdyBwb2ludGVyIHR5cGUgYXMgdGhlIHBhcmFtZXRlci4K
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLID0gS2V5VHlwZT4gdHlwZW5hbWUgc3RkOjplbmFibGVf
aWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIGJvb2w+Ojp0eXBlIGNvbnRhaW5zKHR5cGVuYW1lIEdl
dFB0ckhlbHBlcjxLPjo6UHRyVHlwZSkgY29uc3Q7CisKKyAgICAvLyBBbiBhbHRlcm5hdGUgdmVy
c2lvbiBvZiBnZXQoKSBmb3Igc21hcnQgcG9pbnRlciBrZXlzLCB0aGF0IHRha2UgdGhlIHJhdyBw
b2ludGVyIHR5cGUgYXMgdGhlIHBhcmFtZXRlci4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLID0g
S2V5VHlwZT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIE1h
cHBlZFBlZWtUeXBlPjo6dHlwZSBnZXQodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBl
KSBjb25zdDsKKworICAgIC8vIEFuIGFsdGVybmF0ZSB2ZXJzaW9uIG9mIHJlbW92ZSgpIGZvciBz
bWFydCBwb2ludGVyIGtleXMsIHRoYXQgdGFrZSB0aGUgcmF3IHBvaW50ZXIgdHlwZSBhcyB0aGUg
cGFyYW1ldGVyLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEsgPSBLZXlUeXBlPiB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgYm9vbD46OnR5cGUgcmVtb3ZlKHR5
cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSk7CisKKyAgICAvLyBBbiBhbHRlcm5hdGUg
dmVyc2lvbiBvZiB0YWtlKCkgZm9yIHNtYXJ0IHBvaW50ZXIga2V5cywgdGhhdCB0YWtlIHRoZSBy
YXcgcG9pbnRlciB0eXBlIGFzIHRoZSBwYXJhbWV0ZXIuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
SyA9IEtleVR5cGU+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVl
LCBNYXBwZWRUeXBlPjo6dHlwZSB0YWtlKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlw
ZSk7CisKICAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koKSBjb25zdDsKIAogICAgIHN0YXRpYyBi
b29sIGlzVmFsaWRLZXkoY29uc3QgS2V5VHlwZSYpOwpAQCAtMzg2LDYgKzQwMyw1NiBAQCBhdXRv
IEhhc2hNYXA8VCwgVSwgViwgVywgTWFwcGVkVHJhaXRzPjo6CiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0
ZW1wbGF0ZTx0eXBlbmFtZSAgSz4KK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46
OmZpbmQodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgLT4gdHlwZW5hbWUg
c3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIGl0ZXJhdG9yPjo6dHlwZQorewor
ICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgZmluZDxIYXNoTWFwVHJhbnNsYXRvcjxLZXlWYWx1
ZVBhaXJUcmFpdHMsIEhhc2hGdW5jdGlvbnM+PihrZXkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVt
cGxhdGU8dHlwZW5hbWUgIEs+CitpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpm
aW5kKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIGNvbnN0IC0+IHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBjb25zdF9pdGVyYXRvcj46
OnR5cGUKK3sKKyAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGZpbmQ8SGFzaE1hcFRyYW5zbGF0
b3I8S2V5VmFsdWVQYWlyVHJhaXRzLCBIYXNoRnVuY3Rpb25zPj4oa2V5KTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5h
bWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1lICBLPgoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBW
LCBXLCBYPjo6Y29udGFpbnModHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkg
Y29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIGJv
b2w+Ojp0eXBlCit7CisgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBjb250YWluczxIYXNoTWFw
VHJhbnNsYXRvcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hGdW5jdGlvbnM+PihrZXkpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBX
LCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgIEs+CitpbmxpbmUgYXV0byBIYXNoTWFw
PFQsIFUsIFYsIFcsIFg+OjpnZXQodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtl
eSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUs
IE1hcHBlZFBlZWtUeXBlPjo6dHlwZQoreworICAgIEtleVZhbHVlUGFpclR5cGUqIGVudHJ5ID0g
Y29uc3RfY2FzdDxIYXNoVGFibGVUeXBlJj4obV9pbXBsKS50ZW1wbGF0ZSBsb29rdXA8SGFzaE1h
cFRyYW5zbGF0b3I8S2V5VmFsdWVQYWlyVHJhaXRzLCBIYXNoRnVuY3Rpb25zPj4oa2V5KTsKKyAg
ICBpZiAoIWVudHJ5KQorICAgICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVrKE1hcHBlZFRy
YWl0czo6ZW1wdHlWYWx1ZSgpKTsKKyAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVrKGVudHJ5
LT52YWx1ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1l
IFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSAgSz4KK2lubGlu
ZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OnJlbW92ZSh0eXBlbmFtZSBHZXRQdHJIZWxw
ZXI8Sz46OlB0clR5cGUga2V5KSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRy
PEs+Ojp2YWx1ZSwgYm9vbD46OnR5cGUKK3sKKyAgICByZXR1cm4gcmVtb3ZlKGZpbmQoa2V5KSk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVu
YW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSAgSz4KK2lubGluZSBhdXRvIEhh
c2hNYXA8VCwgVSwgViwgVywgWD46OnRha2UodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJU
eXBlIGtleSkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUs
IE1hcHBlZFR5cGU+Ojp0eXBlCit7CisgICAgaXRlcmF0b3IgaXQgPSBmaW5kKGtleSk7CisgICAg
aWYgKGl0ID09IGVuZCgpKQorICAgICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjplbXB0eVZhbHVl
KCk7CisgICAgTWFwcGVkVHlwZSB2YWx1ZSA9IFdURjo6bW92ZShpdC0+dmFsdWUpOworICAgIHJl
bW92ZShpdCk7CisgICAgcmV0dXJuIHZhbHVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgogaW5saW5lIHZv
aWQgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Y2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0CiB7CiAg
ICAgbV9pbXBsLmNoZWNrVGFibGVDb25zaXN0ZW5jeSgpOwpJbmRleDogU291cmNlL1dURi93dGYv
SGFzaFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0hhc2hTZXQuaAkocmV2aXNp
b24gMTczNzk1KQorKysgU291cmNlL1dURi93dGYvSGFzaFNldC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRlIDxpbml0aWFsaXplcl9saXN0PgogI2luY2x1ZGUg
PHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0
Zi9IYXNoVGFibGUuaD4KIAogbmFtZXNwYWNlIFdURiB7CkBAIC0xMDYsNiArMTA3LDE5IEBAIG5h
bWVzcGFjZSBXVEYgewogICAgICAgICBWYWx1ZVR5cGUgdGFrZShpdGVyYXRvcik7CiAgICAgICAg
IFZhbHVlVHlwZSB0YWtlQW55KCk7CiAKKyAgICAgICAgLy8gQW4gYWx0ZXJuYXRlIHZlcnNpb24g
b2YgZmluZCgpIGZvciBzbWFydCBwb2ludGVyIHZhbHVlcywgdGhhdCB0YWtlIHRoZSByYXcgcG9p
bnRlciB0eXBlIGFzIHRoZSBwYXJhbWV0ZXIuCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFYg
PSBWYWx1ZVR5cGU+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVl
LCBpdGVyYXRvcj46OnR5cGUgZmluZCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUp
IGNvbnN0OworCisgICAgICAgIC8vIEFuIGFsdGVybmF0ZSB2ZXJzaW9uIG9mIGNvbnRhaW5zKCkg
Zm9yIHNtYXJ0IHBvaW50ZXIgdmFsdWVzLCB0aGF0IHRha2UgdGhlIHJhdyBwb2ludGVyIHR5cGUg
YXMgdGhlIHBhcmFtZXRlci4KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgViA9IFZhbHVlVHlw
ZT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUsIGJvb2w+Ojp0
eXBlIGNvbnRhaW5zKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRyVHlwZSkgY29uc3Q7CisK
KyAgICAgICAgLy8gQW4gYWx0ZXJuYXRlIHZlcnNpb24gb2YgcmVtb3ZlKCkgZm9yIHNtYXJ0IHBv
aW50ZXIgdmFsdWVzLCB0aGF0IHRha2UgdGhlIHJhdyBwb2ludGVyIHR5cGUgYXMgdGhlIHBhcmFt
ZXRlci4KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgViA9IFZhbHVlVHlwZT4gdHlwZW5hbWUg
c3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUsIGJvb2w+Ojp0eXBlIHJlbW92ZSh0
eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUpOworCisgICAgICAgIC8vIEFuIGFsdGVy
bmF0ZSB2ZXJzaW9uIG9mIHRha2UoKSBmb3Igc21hcnQgcG9pbnRlciB2YWx1ZXMsIHRoYXQgdGFr
ZSB0aGUgcmF3IHBvaW50ZXIgdHlwZSBhcyB0aGUgcGFyYW1ldGVyLgorICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBWID0gVmFsdWVUeXBlPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0
UHRyPFY+Ojp2YWx1ZSwgVmFsdWVUeXBlPjo6dHlwZSB0YWtlKHR5cGVuYW1lIEdldFB0ckhlbHBl
cjxWPjo6UHRyVHlwZSk7CisKKwogICAgICAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkVmFsdWUoY29u
c3QgVmFsdWVUeXBlJik7CiAgICAgICAgIAogICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
SGFzaFNldCYpIGNvbnN0OwpAQCAtMTE4LDYgKzEzMiwxMyBAQCBuYW1lc3BhY2UgV1RGIHsKICAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIGNvbnN0IFQmIGV4dHJhY3QoY29uc3Qg
VCYgdCkgeyByZXR1cm4gdDsgfQogICAgIH07CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNo
RnVuY3Rpb25zPgorICAgIHN0cnVjdCBIYXNoU2V0VHJhbnNsYXRvciB7CisgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFQmIGtleSkgeyByZXR1
cm4gSGFzaEZ1bmN0aW9uczo6aGFzaChrZXkpOyB9CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFU+IHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFQmIGEsIGNvbnN0IFUmIGIp
IHsgcmV0dXJuIEhhc2hGdW5jdGlvbnM6OmVxdWFsKGEsIGIpOyB9CisgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+IHN0YXRpYyB2b2lkIHRyYW5zbGF0
ZShUJiBsb2NhdGlvbiwgVSYmLCBWJiYgdmFsdWUpIHsgbG9jYXRpb24gPSBzdGQ6OmZvcndhcmQ8
Vj4odmFsdWUpOyB9CisgICAgfTsKKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRyYW5zbGF0b3I+
CiAgICAgc3RydWN0IEhhc2hTZXRUcmFuc2xhdG9yQWRhcHRlciB7CiAgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFQmIGtleSkgeyByZXR1cm4g
VHJhbnNsYXRvcjo6aGFzaChrZXkpOyB9CkBAIC0yNjQsNiArMjg1LDM0IEBAIG5hbWVzcGFjZSBX
VEYgewogICAgICAgICByZXR1cm4gdGFrZShiZWdpbigpKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRz
PgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFY+CisgICAgaW5saW5lIGF1dG8gSGFzaFNldDxWYWx1
ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6ZmluZCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46
OlB0clR5cGUgdmFsdWUpIGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQ
dHI8Vj46OnZhbHVlLCBpdGVyYXRvcj46OnR5cGUKKyAgICB7CisgICAgICAgIHJldHVybiBtX2lt
cGwudGVtcGxhdGUgZmluZDxIYXNoU2V0VHJhbnNsYXRvcjxIYXNoRnVuY3Rpb25zPj4odmFsdWUp
OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVu
Y3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVj4KKyAgICBp
bmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+Ojpjb250YWlu
cyh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUgdmFsdWUpIGNvbnN0IC0+IHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVlLCBib29sPjo6dHlwZQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBjb250YWluczxIYXNoU2V0VHJhbnNs
YXRvcjxIYXNoRnVuY3Rpb25zPj4odmFsdWUpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVj4KKyAgICBpbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHM+OjpyZW1vdmUodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJU
eXBlIHZhbHVlKSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1
ZSwgYm9vbD46OnR5cGUKKyAgICB7CisgICAgICAgIHJldHVybiByZW1vdmUoZmluZCh2YWx1ZSkp
OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVu
Y3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVj4KKyAgICBp
bmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+Ojp0YWtlKHR5
cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRyVHlwZSB2YWx1ZSkgLT4gdHlwZW5hbWUgc3RkOjpl
bmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUsIFZhbHVlVHlwZT46OnR5cGUKKyAgICB7Cisg
ICAgICAgIHJldHVybiB0YWtlKGZpbmQodmFsdWUpKTsKKyAgICB9CisKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgogICAgIGlubGluZSBib29sIEhhc2hT
ZXQ8VCwgVSwgVj46OmlzVmFsaWRWYWx1ZShjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKQogICAgIHsK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL0hhc2hUcmFpdHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi9IYXNoVHJhaXRzLmgJKHJldmlzaW9uIDE3Mzc5NSkKKysrIFNvdXJjZS9XVEYvd3Rm
L0hhc2hUcmFpdHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDYgKzEwNCw5IEBAIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIERlbGV0ZXI+IHMKICAgICB0eXBlZGVmIHN0ZDo6bnVsbHB0
cl90IEVtcHR5VmFsdWVUeXBlOwogICAgIHN0YXRpYyBFbXB0eVZhbHVlVHlwZSBlbXB0eVZhbHVl
KCkgeyByZXR1cm4gbnVsbHB0cjsgfQogCisgICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRl
ZFZhbHVlKHN0ZDo6dW5pcXVlX3B0cjxULCBEZWxldGVyPiYgc2xvdCkgeyBuZXcgKE5vdE51bGws
ICZzbG90KSBzdGQ6OnVuaXF1ZV9wdHI8VCwgRGVsZXRlcj4geyByZWludGVycHJldF9jYXN0PFQq
PigtMSkgfTsgfQorICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IHN0ZDo6dW5p
cXVlX3B0cjxULCBEZWxldGVyPiYgdmFsdWUpIHsgcmV0dXJuIHZhbHVlLmdldCgpID09IHJlaW50
ZXJwcmV0X2Nhc3Q8VCo+KC0xKTsgfQorCiAgICAgdHlwZWRlZiBUKiBQZWVrVHlwZTsKICAgICBz
dGF0aWMgVCogcGVlayhjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8VCwgRGVsZXRlcj4mIHZhbHVlKSB7
IHJldHVybiB2YWx1ZS5nZXQoKTsgfQogICAgIHN0YXRpYyBUKiBwZWVrKHN0ZDo6bnVsbHB0cl90
KSB7IHJldHVybiBudWxscHRyOyB9CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Pd25QdHIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Pd25QdHIuaAkocmV2aXNpb24gMTczNzk1KQorKysg
U291cmNlL1dURi93dGYvT3duUHRyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDE0ICsyMSwxNSBA
QAogI2lmbmRlZiBXVEZfT3duUHRyX2gKICNkZWZpbmUgV1RGX093blB0cl9oCiAKKyNpbmNsdWRl
IDxhbGdvcml0aG0+CisjaW5jbHVkZSA8Y3N0ZGRlZj4KKyNpbmNsdWRlIDxtZW1vcnk+CiAjaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgogI2luY2x1
ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgogI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHJDb21tb24uaD4KLSNpbmNs
dWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8Y3N0ZGRlZj4KLSNpbmNsdWRlIDxtZW1vcnk+CiAK
IG5hbWVzcGFjZSBXVEYgewogCkBAIC03Myw2ICs3NCwxMCBAQCBuYW1lc3BhY2UgV1RGIHsKICAg
ICAgICAgT3duUHRyJiBvcGVyYXRvcj0oT3duUHRyJiYpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBVPiBPd25QdHImIG9wZXJhdG9yPShPd25QdHI8VT4mJik7CiAKKyAgICAgICAgLy8gSGFz
aCB0YWJsZSBkZWxldGVkIHZhbHVlcywgd2hpY2ggYXJlIG9ubHkgY29uc3RydWN0ZWQgYW5kIG5l
dmVyIGNvcGllZCBvciBkZXN0cm95ZWQuCisgICAgICAgIE93blB0cihIYXNoVGFibGVEZWxldGVk
VmFsdWVUeXBlKSA6IG1fcHRyKGhhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpKSB7IH0KKyAgICAgICAg
Ym9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHRyID09IGhh
c2hUYWJsZURlbGV0ZWRWYWx1ZSgpOyB9CisKICAgICAgICAgdm9pZCBzd2FwKE93blB0ciYgbykg
eyBzdGQ6OnN3YXAobV9wdHIsIG8ubV9wdHIpOyB9CiAgICAgICAgIAogICAgICAgICAvLyBDb25z
dHJ1Y3QgYW4gb2JqZWN0IHRvIHN0b3JlIGludG8gdGhpcyBPd25QdHIsIGJ1dCBvbmx5IHNvIGxv
bmcgYXMgdGhpcyBPd25QdHIKQEAgLTg5LDYgKzk0LDggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAg
cHJpdmF0ZToKICAgICAgICAgZXhwbGljaXQgT3duUHRyKFB0clR5cGUgcHRyKSA6IG1fcHRyKHB0
cikgeyB9CiAKKyAgICAgICAgc3RhdGljIFB0clR5cGUgaGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkg
eyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxQdHJUeXBlPigtMSk7IH0KKwogICAgICAgICAvLyBX
ZSBzaG91bGQgbmV2ZXIgaGF2ZSB0d28gT3duUHRycyBmb3IgdGhlIHNhbWUgdW5kZXJseWluZyBv
YmplY3QgKG90aGVyd2lzZSB3ZSdsbCBnZXQKICAgICAgICAgLy8gZG91YmxlLWRlc3RydWN0aW9u
KSwgc28gdGhlc2UgZXF1YWxpdHkgb3BlcmF0b3JzIHNob3VsZCBuZXZlciBiZSBuZWVkZWQuCiAg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IGJvb2wgb3BlcmF0b3I9PShjb25zdCBPd25QdHI8
VT4mKSB7IENPTVBJTEVfQVNTRVJUKCFzaXplb2YoVSopLCBPd25QdHJzX3Nob3VsZF9uZXZlcl9i
ZV9lcXVhbCk7IHJldHVybiBmYWxzZTsgfQpAQCAtMjIwLDYgKzIyNywxOCBAQCBuYW1lc3BhY2Ug
V1RGIHsKICNlbmRpZgogICAgIH0KIAorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgUD4gc3RydWN0
IFB0ckhhc2g8T3duUHRyPFA+PiA6IFB0ckhhc2g8UCo+IHsKKyAgICAgICAgdXNpbmcgUHRySGFz
aDxQKj46Omhhc2g7CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IE93blB0cjxQ
PiYga2V5KSB7IHJldHVybiBoYXNoKGtleS5nZXQoKSk7IH0KKyAgICAgICAgdXNpbmcgUHRySGFz
aDxQKj46OmVxdWFsOworICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBPd25QdHI8UD4m
IGEsIGNvbnN0IE93blB0cjxQPiYgYikgeyByZXR1cm4gYS5nZXQoKSA9PSBiLmdldCgpOyB9Cisg
ICAgICAgIHN0YXRpYyBib29sIGVxdWFsKFAqIGEsIGNvbnN0IE93blB0cjxQPiYgYikgeyByZXR1
cm4gYSA9PSBiLmdldCgpOyB9CisgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IE93blB0
cjxQPiYgYSwgUCogYikgeyByZXR1cm4gYS5nZXQoKSA9PSBiOyB9CisgICAgfTsKKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFA+IHN0cnVjdCBEZWZhdWx0SGFzaDxPd25QdHI8UD4+IHsgdHlwZWRl
ZiBQdHJIYXNoPE93blB0cjxQPj4gSGFzaDsgfTsKKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVz
aW5nIFdURjo6T3duUHRyOwpJbmRleDogU291cmNlL1dURi93dGYvUmVmLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvUmVmLmgJKHJldmlzaW9uIDE3Mzc5NSkKKysrIFNvdXJjZS9XVEYv
d3RmL1JlZi5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHRlbXBsYXRlPHR5cGVuYW1lIFUKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1z
dHJ1Y3QgR2V0UHRySGVscGVyPFJlZjxUPiwgZmFsc2UgLyogaXNTbWFydFB0ciAqLz4geworc3Ry
dWN0IEdldFB0ckhlbHBlcjxSZWY8VD4+IHsKICAgICB0eXBlZGVmIFQqIFB0clR5cGU7CiAgICAg
c3RhdGljIFQqIGdldFB0cihjb25zdCBSZWY8VD4mIHApIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCo+
KCZwLmdldCgpKTsgfQogfTsKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3Mzc5NSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDE0LTA5LTIwICBTYW0gV2VpbmlnICA8c2Ft
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgTWFrZSBwb3NzaWJsZSBIYXNoU2V0PHN0ZDo6dW5pcXVl
X3B0cjw+PgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM2MTY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Db3B5TW92ZUNvdW50ZXIuaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL0NvdW50ZXJzLmNwcDogQWRkZWQuCisgICAgICAgICogVGVz
dFdlYktpdEFQSS9Db3VudGVycy5oOiBDb3BpZWQgZnJvbSBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dURi9Db3B5TW92ZUNvdW50ZXIuaC4KKyAgICAgICAgTW92ZSB0aGUgQ29weU1vdmVDb3Vu
dGVyIGhlbHBlciBmcm9tIENvcHlNb3ZlQ291bnRlci5oIHRvIENvdW50ZXJzLmgsIGFuZCBhZGQg
YSBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyCisgICAgICAgIGhlbHBlciB0byB0aGUgbWl4
IGFzIHdlbGwuIEFkZCBDb3VudGVycy5jcHAgdG8gYWxsb3cgZm9yIHRoZSBnbG9iYWwgdmFyaWFi
bGVzIHRvIGJlIHVzZWQgaW4gbW9yZSB0aGFuIG9uZQorICAgICAgICB0cmFuc2xhdGlvbiB1bml0
LgorICAgIAorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICBBZGQgbmV3IGZpbGVzLgorCisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaE1hcC5jcHA6CisgICAgICAgIEFkZCB0ZXN0cyBmb3Ig
dXNpbmcgc3RkOjp1bmlxdWVfcHRyIGFuZCBPd25QdHIgYXMgdGhlIGtleSdzIG9mIGEgSGFzaE1h
cC4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hTZXQuY3BwOgorICAg
ICAgICBBZGQgdGVzdHMgZm9yIHVzaW5nIHN0ZDo6dW5pcXVlX3B0ciBhbmQgT3duUHRyIGFzIHRo
ZSB2YWx1ZXMgb2YgYSBIYXNoU2V0LgorCiAyMDE0LTA5LTE5ICBKb3NlcGggUGVjb3Jhcm8gIDxw
ZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgSlNTdHJpbmdSZWYgbGVhayBvbiB0aGUgbGVh
a3MgYm90IGFsbG9jYXRpb24gdW5kZXIgc2VsZWN0VGV4dFdpdGhDcml0ZXJpYUNhbGxiYWNrCklu
ZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE3Mzc5NSkKKysrIFRv
b2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTY1LDYg
KzY1LDcgQEAgc2V0KFRlc3RKYXZhU2NyaXB0Q29yZV9MSUJSQVJJRVMKICkKIAogc2V0KFRlc3RX
VEZfU09VUkNFUworICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L0NvdW50ZXJzLmNwcAogICAgICR7
VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzQ29udHJvbGxlci5jcHAKICAgICAke1RFU1RXRUJLSVRB
UElfRElSfS9UZXN0cy9XVEYvQXRvbWljU3RyaW5nLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9E
SVJ9L1Rlc3RzL1dURi9DU3RyaW5nLmNwcApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9Db3Vu
dGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9Db3VudGVycy5jcHAJ
KHJldmlzaW9uIDApCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL0NvdW50ZXJzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkNvdW50ZXJzLmgiCisKK3Vuc2lnbmVkIENvcHlNb3ZlQ291bnRlcjo6Y29u
c3RydWN0aW9uQ291bnQgPSAwOwordW5zaWduZWQgQ29weU1vdmVDb3VudGVyOjpjb3B5Q291bnQg
PSAwOwordW5zaWduZWQgQ29weU1vdmVDb3VudGVyOjptb3ZlQ291bnQgPSAwOworCit1bnNpZ25l
ZCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCA9IDA7Cit1
bnNpZ25lZCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNvdW50ID0g
MDsKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ291bnRlcnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9UZXN0V2ViS2l0QVBJL0NvdW50ZXJzLmgJKHJldmlzaW9uIDE3Mzc5NSkJKGZyb20gVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29weU1vdmVDb3VudGVyLmg6MTczNzk1KQorKysg
VG9vbHMvVGVzdFdlYktpdEFQSS9Db3VudGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBDb3B5TW92ZUNvdW50ZXJfaAorI2RlZmluZSBDb3B5TW92ZUNvdW50ZXJfaAorCitz
dHJ1Y3QgQ29weU1vdmVDb3VudGVyIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgY29uc3RydWN0aW9u
Q291bnQ7CisgICAgc3RhdGljIHVuc2lnbmVkIGNvcHlDb3VudDsKKyAgICBzdGF0aWMgdW5zaWdu
ZWQgbW92ZUNvdW50OworCisgICAgc3RydWN0IFRlc3RpbmdTY29wZSB7CisgICAgICAgIFRlc3Rp
bmdTY29wZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0cnVjdGlvbkNvdW50ID0gMDsK
KyAgICAgICAgICAgIGNvcHlDb3VudCA9IDA7CisgICAgICAgICAgICBtb3ZlQ291bnQgPSAwOwor
ICAgICAgICB9CisgICAgfTsKKworICAgIENvcHlNb3ZlQ291bnRlcigpIHsgY29uc3RydWN0aW9u
Q291bnQrKzsgfQorICAgIENvcHlNb3ZlQ291bnRlcihjb25zdCBDb3B5TW92ZUNvdW50ZXImKSB7
IGNvcHlDb3VudCsrOyB9CisgICAgQ29weU1vdmVDb3VudGVyJiBvcGVyYXRvcj0oY29uc3QgQ29w
eU1vdmVDb3VudGVyJikgeyBjb3B5Q291bnQrKzsgcmV0dXJuICp0aGlzOyB9CisgICAgQ29weU1v
dmVDb3VudGVyKENvcHlNb3ZlQ291bnRlciYmKSB7IG1vdmVDb3VudCsrOyB9CisgICAgQ29weU1v
dmVDb3VudGVyJiBvcGVyYXRvcj0oQ29weU1vdmVDb3VudGVyJiYpIHsgbW92ZUNvdW50Kys7IHJl
dHVybiAqdGhpczsgfQorfTsKKwordW5zaWduZWQgQ29weU1vdmVDb3VudGVyOjpjb25zdHJ1Y3Rp
b25Db3VudCA9IDA7Cit1bnNpZ25lZCBDb3B5TW92ZUNvdW50ZXI6OmNvcHlDb3VudCA9IDA7Cit1
bnNpZ25lZCBDb3B5TW92ZUNvdW50ZXI6Om1vdmVDb3VudCA9IDA7CisKKyNlbmRpZgpJbmRleDog
VG9vbHMvVGVzdFdlYktpdEFQSS9Db3VudGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvQ291bnRlcnMuaAkod29ya2luZyBjb3B5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQ
SS9Db3VudGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjMsOCArMjQsOCBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICov
CiAKLSNpZm5kZWYgQ29weU1vdmVDb3VudGVyX2gKLSNkZWZpbmUgQ29weU1vdmVDb3VudGVyX2gK
KyNpZm5kZWYgQ291bnRlcnNfaAorI2RlZmluZSBDb3VudGVyc19oCiAKIHN0cnVjdCBDb3B5TW92
ZUNvdW50ZXIgewogICAgIHN0YXRpYyB1bnNpZ25lZCBjb25zdHJ1Y3Rpb25Db3VudDsKQEAgLTQ3
LDggKzQ4LDIxIEBAIHN0cnVjdCBDb3B5TW92ZUNvdW50ZXIgewogICAgIENvcHlNb3ZlQ291bnRl
ciYgb3BlcmF0b3I9KENvcHlNb3ZlQ291bnRlciYmKSB7IG1vdmVDb3VudCsrOyByZXR1cm4gKnRo
aXM7IH0KIH07CiAKLXVuc2lnbmVkIENvcHlNb3ZlQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQg
PSAwOwotdW5zaWduZWQgQ29weU1vdmVDb3VudGVyOjpjb3B5Q291bnQgPSAwOwotdW5zaWduZWQg
Q29weU1vdmVDb3VudGVyOjptb3ZlQ291bnQgPSAwOwogCi0jZW5kaWYKK3N0cnVjdCBDb25zdHJ1
Y3RvckRlc3RydWN0b3JDb3VudGVyIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgY29uc3RydWN0aW9u
Q291bnQ7CisgICAgc3RhdGljIHVuc2lnbmVkIGRlc3RydWN0aW9uQ291bnQ7CisKKyAgICBzdHJ1
Y3QgVGVzdGluZ1Njb3BlIHsKKyAgICAgICAgVGVzdGluZ1Njb3BlKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgY29uc3RydWN0aW9uQ291bnQgPSAwOworICAgICAgICAgICAgZGVzdHJ1Y3Rpb25D
b3VudCA9IDA7CisgICAgICAgIH0KKyAgICB9OworCisgICAgQ29uc3RydWN0b3JEZXN0cnVjdG9y
Q291bnRlcigpIHsgY29uc3RydWN0aW9uQ291bnQrKzsgfQorICAgIH5Db25zdHJ1Y3RvckRlc3Ry
dWN0b3JDb3VudGVyKCkgeyBkZXN0cnVjdGlvbkNvdW50Kys7IH0KK307CisKKyNlbmRpZiAvLyBD
b3VudGVyc19oCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTczNzk1KQor
KysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTExOSw2ICsxMTksNyBAQAogCQk3NkUxODJEQTE1NDc1
NTAxMDBGMUZBREQgLyogV2lsbFNlbmRTdWJtaXRFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NkUxODJEOTE1NDc1NTAxMDBGMUZBREQgLyog
V2lsbFNlbmRTdWJtaXRFdmVudC5jcHAgKi87IH07CiAJCTc2RTE4MkREMTU0NzU2OTEwMEYxRkFE
RCAvKiBXaWxsU2VuZFN1Ym1pdEV2ZW50X0J1bmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NkUxODJEQzE1NDc1NjkxMDBGMUZBREQgLyogV2ls
bFNlbmRTdWJtaXRFdmVudF9CdW5kbGUuY3BwICovOyB9OwogCQk3NkUxODJERjE1NDc2N0U2MDBG
MUZBREQgLyogYXV0by1zdWJtaXR0aW5nLWZvcm0uaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NkUxODJERTE1NDc1QTgzMDBGMUZBREQg
LyogYXV0by1zdWJtaXR0aW5nLWZvcm0uaHRtbCAqLzsgfTsKKwkJN0M2QkJEOEMxOUNFQTYzMDAw
QzFGNUUwIC8qIENvdW50ZXJzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDdDNkJCRDhCMTlDRUE2MzAwMEMxRjVFMCAvKiBDb3VudGVycy5jcHAgKi87
IH07CiAJCTdDNzRENDJGMTg4MjI4RjMwMEU1RUQ1NyAvKiBTdHJpbmdWaWV3LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDNzRENDJEMTg4MjI4RjMw
MEU1RUQ1NyAvKiBTdHJpbmdWaWV3LmNwcCAqLzsgfTsKIAkJN0M4RERBQUIxNzM1REVFRTAwRUE1
QUMwIC8qIENsb3NlVGhlblRlcm1pbmF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3QzhEREFBOTE3MzVERTFEMDBFQTVBQzAgLyogQ2xvc2VUaGVu
VGVybWluYXRlLmNwcCAqLzsgfTsKIAkJN0M5RUQ5OEIxN0ExOUY0QjAwRTREQzMzIC8qIGF0dHJp
YnV0ZWRTdHJpbmdTdHJpa2V0aHJvdWdoLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M5RUQ5OEExN0ExOUQwNjAwRTREQzMzIC8qIGF0
dHJpYnV0ZWRTdHJpbmdTdHJpa2V0aHJvdWdoLmh0bWwgKi87IH07CkBAIC00NjMsNiArNDY0LDgg
QEAKIAkJNzZFMTgyRDkxNTQ3NTUwMTAwRjFGQUREIC8qIFdpbGxTZW5kU3VibWl0RXZlbnQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2lsbFNlbmRTdWJtaXRFdmVu
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc2RTE4MkRDMTU0NzU2OTEwMEYx
RkFERCAvKiBXaWxsU2VuZFN1Ym1pdEV2ZW50X0J1bmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXaWxsU2VuZFN1Ym1pdEV2ZW50X0J1bmRsZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc2RTE4MkRFMTU0NzVBODMwMEYxRkFERCAvKiBhdXRv
LXN1Ym1pdHRpbmctZm9ybS5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gImF1dG8t
c3VibWl0dGluZy1mb3JtLmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QzZC
QkQ4QTE5Q0VBNTQzMDBDMUY1RTAgLyogQ291bnRlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ291bnRlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0M2
QkJEOEIxOUNFQTYzMDAwQzFGNUUwIC8qIENvdW50ZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENvdW50ZXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0M3NEQ0MkQxODgyMjhGMzAwRTVFRDU3IC8qIFN0cmluZ1ZpZXcuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RyaW5nVmlldy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTdDOEREQUE5MTczNURFMUQwMEVBNUFDMCAvKiBDbG9zZVRoZW5U
ZXJtaW5hdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2xvc2VUaGVuVGVybWluYXRlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M5RUQ5OEExN0ExOUQwNjAwRTREQzMzIC8q
IGF0dHJpYnV0ZWRTdHJpbmdTdHJpa2V0aHJvdWdoLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBhdHRyaWJ1dGVk
U3RyaW5nU3RyaWtldGhyb3VnaC5odG1sOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
NjcwLDYgKzY3Myw4IEBACiAJCQkJMkU5NjYwREMxNkMwN0Q3QjAwMzcxQjQyIC8qIGlvcyAqLywK
IAkJCQlCQ0E2MUMzQTExNzAwQjk0MDA0NjBEMUUgLyogbWFjICovLAogCQkJCUJDMTMxQTlFMTE3
MTMxN0MwMEI2OTcyNyAvKiBjb25maWcuaCAqLywKKwkJCQk3QzZCQkQ4QTE5Q0VBNTQzMDBDMUY1
RTAgLyogQ291bnRlcnMuaCAqLywKKwkJCQk3QzZCQkQ4QjE5Q0VBNjMwMDBDMUY1RTAgLyogQ291
bnRlcnMuY3BwICovLAogCQkJCUMwQURCRTdBMTJGQ0E0RDAwMEQyQzEyOSAvKiBKYXZhU2NyaXB0
VGVzdC5jcHAgKi8sCiAJCQkJQzBBREJFN0IxMkZDQTREMDAwRDJDMTI5IC8qIEphdmFTY3JpcHRU
ZXN0LmggKi8sCiAJCQkJQkM1NzVCQkYxMjZGNTc1MjAwNkYwRjEyIC8qIFBsYXRmb3JtVXRpbGl0
aWVzLmNwcCAqLywKQEAgLTEzODQsNiArMTM4OSw3IEBACiAJCQkJQkM3QjYxQUExMjlBMDM4NzAw
RDE3NEE0IC8qIFdLUHJlZmVyZW5jZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM5MDk5NUUx
MjU2N0JDMTAwMDgzNzU2IC8qIFdLU3RyaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDOTA5
OTk0MTI1NkFDRjEwMDA4Mzc1NiAvKiBXS1N0cmluZ0pTU3RyaW5nLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTdDNkJCRDhDMTlDRUE2MzAwMEMxRjVFMCAvKiBDb3VudGVycy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkyNjVBRjU1MDE1RDFFNDhBMDBCMENCNEEgLyogV1RGU3RyaW5nLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTJFNzc2NUNEMTZDNEQ4MEEwMEJBMkJCMSAvKiBtYWluSU9TLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMkU3NzY1Q0YxNkM0RDgxMTAwQkEyQkIxIC8qIG1haW5NYWMubW0g
aW4gU291cmNlcyAqLywKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvcHlN
b3ZlQ291bnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RG
L0NvcHlNb3ZlQ291bnRlci5oCShyZXZpc2lvbiAxNzM3OTUpCisrKyBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9Db3B5TW92ZUNvdW50ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1NCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IElnYWxpYSBTLkwuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpZm5kZWYgQ29weU1vdmVDb3VudGVyX2gKLSNkZWZpbmUgQ29weU1vdmVDb3VudGVyX2gKLQot
c3RydWN0IENvcHlNb3ZlQ291bnRlciB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGNvbnN0cnVjdGlv
bkNvdW50OwotICAgIHN0YXRpYyB1bnNpZ25lZCBjb3B5Q291bnQ7Ci0gICAgc3RhdGljIHVuc2ln
bmVkIG1vdmVDb3VudDsKLQotICAgIHN0cnVjdCBUZXN0aW5nU2NvcGUgewotICAgICAgICBUZXN0
aW5nU2NvcGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdHJ1Y3Rpb25Db3VudCA9IDA7
Ci0gICAgICAgICAgICBjb3B5Q291bnQgPSAwOwotICAgICAgICAgICAgbW92ZUNvdW50ID0gMDsK
LSAgICAgICAgfQotICAgIH07Ci0KLSAgICBDb3B5TW92ZUNvdW50ZXIoKSB7IGNvbnN0cnVjdGlv
bkNvdW50Kys7IH0KLSAgICBDb3B5TW92ZUNvdW50ZXIoY29uc3QgQ29weU1vdmVDb3VudGVyJikg
eyBjb3B5Q291bnQrKzsgfQotICAgIENvcHlNb3ZlQ291bnRlciYgb3BlcmF0b3I9KGNvbnN0IENv
cHlNb3ZlQ291bnRlciYpIHsgY29weUNvdW50Kys7IHJldHVybiAqdGhpczsgfQotICAgIENvcHlN
b3ZlQ291bnRlcihDb3B5TW92ZUNvdW50ZXImJikgeyBtb3ZlQ291bnQrKzsgfQotICAgIENvcHlN
b3ZlQ291bnRlciYgb3BlcmF0b3I9KENvcHlNb3ZlQ291bnRlciYmKSB7IG1vdmVDb3VudCsrOyBy
ZXR1cm4gKnRoaXM7IH0KLX07Ci0KLXVuc2lnbmVkIENvcHlNb3ZlQ291bnRlcjo6Y29uc3RydWN0
aW9uQ291bnQgPSAwOwotdW5zaWduZWQgQ29weU1vdmVDb3VudGVyOjpjb3B5Q291bnQgPSAwOwot
dW5zaWduZWQgQ29weU1vdmVDb3VudGVyOjptb3ZlQ291bnQgPSAwOwotCi0jZW5kaWYKSW5kZXg6
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hNYXAuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hNYXAuY3BwCShyZXZpc2lvbiAxNzM3
OTUpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9IYXNoTWFwLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjUsMTEgKzI1LDEzIEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAotI2lu
Y2x1ZGUgIkNvcHlNb3ZlQ291bnRlci5oIgorI2luY2x1ZGUgIkNvdW50ZXJzLmgiCiAjaW5jbHVk
ZSAiTW92ZU9ubHkuaCIKICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisjaW5jbHVkZSA8d3RmL093blB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBUZXN0V2ViS2l0
QVBJIHsKIApAQCAtMTcxLDQgKzE3MywxOTUgQEAgVEVTVChXVEZfSGFzaE1hcCwgRWZmaWNpZW50
R2V0dGVyKQogICAgIH0KIH0KIAorVEVTVChXVEZfSGFzaE1hcCwgT3duUHRyS2V5KQoreworICAg
IENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OlRlc3RpbmdTY29wZSBzY29wZTsKKworICAg
IEhhc2hNYXA8T3duUHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+LCBpbnQ+IG1hcDsK
KworICAgIE93blB0cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPiBvd25QdHIgPSBhZG9w
dFB0cihuZXcgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcik7CisgICAgbWFwLmFkZChXVEY6
Om1vdmUob3duUHRyKSwgMik7CisKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1
Y3RvckNvdW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsKKyAgICBFWFBFQ1RfRVEoMHUsIENvbnN0
cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3RydWN0aW9uQ291bnQpOworCisgICAgbWFwLmNs
ZWFyKCk7CisgICAgCisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3Vu
dGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRl
c3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNvdW50KTsKK30KKworVEVTVChXVEZfSGFzaE1h
cCwgT3duUHRyS2V5X0ZpbmRVc2luZ1Jhd1BvaW50ZXIpCit7CisgICAgSGFzaE1hcDxPd25QdHI8
aW50PiwgaW50PiBtYXA7CisKKyAgICBPd25QdHI8aW50PiBvd25QdHIgPSBhZG9wdFB0cihuZXcg
aW50KDUpKTsKKyAgICBpbnQqIHB0ciA9IG93blB0ci5nZXQoKTsKKyAgICBtYXAuYWRkKFdURjo6
bW92ZShvd25QdHIpLCAyKTsKKworICAgIGF1dG8gaXQgPSBtYXAuZmluZChwdHIpOworICAgIEFT
U0VSVF9UUlVFKGl0ICE9IG1hcC5lbmQoKSk7CisgICAgRVhQRUNUX0VRKHB0ciwgaXQtPmtleS5n
ZXQoKSk7CisgICAgRVhQRUNUX0VRKDIsIGl0LT52YWx1ZSk7Cit9CisKK1RFU1QoV1RGX0hhc2hN
YXAsIE93blB0cktleV9Db250YWluc1VzaW5nUmF3UG9pbnRlcikKK3sKKyAgICBIYXNoTWFwPE93
blB0cjxpbnQ+LCBpbnQ+IG1hcDsKKworICAgIE93blB0cjxpbnQ+IG93blB0ciA9IGFkb3B0UHRy
KG5ldyBpbnQoNSkpOworICAgIGludCogcHRyID0gb3duUHRyLmdldCgpOworICAgIG1hcC5hZGQo
V1RGOjptb3ZlKG93blB0ciksIDIpOworCisgICAgRVhQRUNUX0VRKHRydWUsIG1hcC5jb250YWlu
cyhwdHIpKTsKK30KKworVEVTVChXVEZfSGFzaE1hcCwgT3duUHRyS2V5X0dldFVzaW5nUmF3UG9p
bnRlcikKK3sKKyAgICBIYXNoTWFwPE93blB0cjxpbnQ+LCBpbnQ+IG1hcDsKKworICAgIE93blB0
cjxpbnQ+IG93blB0ciA9IGFkb3B0UHRyKG5ldyBpbnQoNSkpOworICAgIGludCogcHRyID0gb3du
UHRyLmdldCgpOworICAgIG1hcC5hZGQoV1RGOjptb3ZlKG93blB0ciksIDIpOworCisgICAgaW50
IHZhbHVlID0gbWFwLmdldChwdHIpOworICAgIEVYUEVDVF9FUSgyLCB2YWx1ZSk7Cit9CisKK1RF
U1QoV1RGX0hhc2hNYXAsIE93blB0cktleV9SZW1vdmVVc2luZ1Jhd1BvaW50ZXIpCit7CisgICAg
Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6VGVzdGluZ1Njb3BlIHNjb3BlOworCisgICAg
SGFzaE1hcDxPd25QdHI8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4sIGludD4gbWFwOwor
CisgICAgT3duUHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+IG93blB0ciA9IGFkb3B0
UHRyKG5ldyBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyKTsKKyAgICBDb25zdHJ1Y3RvckRl
c3RydWN0b3JDb3VudGVyKiBwdHIgPSBvd25QdHIuZ2V0KCk7CisgICAgbWFwLmFkZChXVEY6Om1v
dmUob3duUHRyKSwgMik7CisKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3Rv
ckNvdW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsKKyAgICBFWFBFQ1RfRVEoMHUsIENvbnN0cnVj
dG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3RydWN0aW9uQ291bnQpOworCisgICAgYm9vbCByZXN1
bHQgPSBtYXAucmVtb3ZlKHB0cik7CisgICAgRVhQRUNUX0VRKHRydWUsIHJlc3VsdCk7CisKKyAg
ICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmNvbnN0cnVjdGlv
bkNvdW50KTsKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6
OmRlc3RydWN0aW9uQ291bnQpOworfQorCitURVNUKFdURl9IYXNoTWFwLCBPd25QdHJLZXlfVGFr
ZVVzaW5nUmF3UG9pbnRlcikKK3sKKyAgICBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpU
ZXN0aW5nU2NvcGUgc2NvcGU7CisKKyAgICBIYXNoTWFwPE93blB0cjxDb25zdHJ1Y3RvckRlc3Ry
dWN0b3JDb3VudGVyPiwgaW50PiBtYXA7CisKKyAgICBPd25QdHI8Q29uc3RydWN0b3JEZXN0cnVj
dG9yQ291bnRlcj4gb3duUHRyID0gYWRvcHRQdHIobmV3IENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNv
dW50ZXIpOworICAgIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXIqIHB0ciA9IG93blB0ci5n
ZXQoKTsKKyAgICBtYXAuYWRkKFdURjo6bW92ZShvd25QdHIpLCAyKTsKKworICAgIEVYUEVDVF9F
USgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOwor
ICAgIEVYUEVDVF9FUSgwdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rp
b25Db3VudCk7CisKKyAgICBpbnQgcmVzdWx0ID0gbWFwLnRha2UocHRyKTsKKyAgICBFWFBFQ1Rf
RVEoMiwgcmVzdWx0KTsKKworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9y
Q291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0
b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7Cit9CisKKworVEVTVChXVEZf
SGFzaE1hcCwgVW5pcXVlUHRyS2V5KQoreworICAgIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50
ZXI6OlRlc3RpbmdTY29wZSBzY29wZTsKKworICAgIEhhc2hNYXA8c3RkOjp1bmlxdWVfcHRyPENv
bnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+LCBpbnQ+IG1hcDsKKworICAgIGF1dG8gdW5pcXVl
UHRyID0gc3RkOjptYWtlX3VuaXF1ZTxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPigpOwor
ICAgIG1hcC5hZGQoV1RGOjptb3ZlKHVuaXF1ZVB0ciksIDIpOworCisgICAgRVhQRUNUX0VRKDF1
LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CisgICAg
RVhQRUNUX0VRKDB1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNv
dW50KTsKKworICAgIG1hcC5jbGVhcigpOworICAgIAorICAgIEVYUEVDVF9FUSgxdSwgQ29uc3Ry
dWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOworICAgIEVYUEVDVF9F
USgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7Cit9
CisKK1RFU1QoV1RGX0hhc2hNYXAsIFVuaXF1ZVB0cktleV9GaW5kVXNpbmdSYXdQb2ludGVyKQor
eworICAgIEhhc2hNYXA8c3RkOjp1bmlxdWVfcHRyPGludD4sIGludD4gbWFwOworCisgICAgYXV0
byB1bmlxdWVQdHIgPSBzdGQ6Om1ha2VfdW5pcXVlPGludD4oNSk7CisgICAgaW50KiBwdHIgPSB1
bmlxdWVQdHIuZ2V0KCk7CisgICAgbWFwLmFkZChXVEY6Om1vdmUodW5pcXVlUHRyKSwgMik7CisK
KyAgICBhdXRvIGl0ID0gbWFwLmZpbmQocHRyKTsKKyAgICBBU1NFUlRfVFJVRShpdCAhPSBtYXAu
ZW5kKCkpOworICAgIEVYUEVDVF9FUShwdHIsIGl0LT5rZXkuZ2V0KCkpOworICAgIEVYUEVDVF9F
USgyLCBpdC0+dmFsdWUpOworfQorCitURVNUKFdURl9IYXNoTWFwLCBVbmlxdWVQdHJLZXlfQ29u
dGFpbnNVc2luZ1Jhd1BvaW50ZXIpCit7CisgICAgSGFzaE1hcDxzdGQ6OnVuaXF1ZV9wdHI8aW50
PiwgaW50PiBtYXA7CisKKyAgICBhdXRvIHVuaXF1ZVB0ciA9IHN0ZDo6bWFrZV91bmlxdWU8aW50
Pig1KTsKKyAgICBpbnQqIHB0ciA9IHVuaXF1ZVB0ci5nZXQoKTsKKyAgICBtYXAuYWRkKFdURjo6
bW92ZSh1bmlxdWVQdHIpLCAyKTsKKworICAgIEVYUEVDVF9FUSh0cnVlLCBtYXAuY29udGFpbnMo
cHRyKSk7Cit9CisKK1RFU1QoV1RGX0hhc2hNYXAsIFVuaXF1ZVB0cktleV9HZXRVc2luZ1Jhd1Bv
aW50ZXIpCit7CisgICAgSGFzaE1hcDxzdGQ6OnVuaXF1ZV9wdHI8aW50PiwgaW50PiBtYXA7CisK
KyAgICBhdXRvIHVuaXF1ZVB0ciA9IHN0ZDo6bWFrZV91bmlxdWU8aW50Pig1KTsKKyAgICBpbnQq
IHB0ciA9IHVuaXF1ZVB0ci5nZXQoKTsKKyAgICBtYXAuYWRkKFdURjo6bW92ZSh1bmlxdWVQdHIp
LCAyKTsKKworICAgIGludCB2YWx1ZSA9IG1hcC5nZXQocHRyKTsKKyAgICBFWFBFQ1RfRVEoMiwg
dmFsdWUpOworfQorCitURVNUKFdURl9IYXNoTWFwLCBVbmlxdWVQdHJLZXlfUmVtb3ZlVXNpbmdS
YXdQb2ludGVyKQoreworICAgIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OlRlc3RpbmdT
Y29wZSBzY29wZTsKKworICAgIEhhc2hNYXA8c3RkOjp1bmlxdWVfcHRyPENvbnN0cnVjdG9yRGVz
dHJ1Y3RvckNvdW50ZXI+LCBpbnQ+IG1hcDsKKworICAgIGF1dG8gdW5pcXVlUHRyID0gc3RkOjpt
YWtlX3VuaXF1ZTxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPigpOworICAgIENvbnN0cnVj
dG9yRGVzdHJ1Y3RvckNvdW50ZXIqIHB0ciA9IHVuaXF1ZVB0ci5nZXQoKTsKKyAgICBtYXAuYWRk
KFdURjo6bW92ZSh1bmlxdWVQdHIpLCAyKTsKKworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0
b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOworICAgIEVYUEVDVF9FUSgw
dSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7CisKKyAg
ICBib29sIHJlc3VsdCA9IG1hcC5yZW1vdmUocHRyKTsKKyAgICBFWFBFQ1RfRVEodHJ1ZSwgcmVz
dWx0KTsKKworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6
Y29uc3RydWN0aW9uQ291bnQpOworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVj
dG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7Cit9CisKK1RFU1QoV1RGX0hhc2hNYXAsIFVu
aXF1ZVB0cktleV9UYWtlVXNpbmdSYXdQb2ludGVyKQoreworICAgIENvbnN0cnVjdG9yRGVzdHJ1
Y3RvckNvdW50ZXI6OlRlc3RpbmdTY29wZSBzY29wZTsKKworICAgIEhhc2hNYXA8c3RkOjp1bmlx
dWVfcHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+LCBpbnQ+IG1hcDsKKworICAgIGF1
dG8gdW5pcXVlUHRyID0gc3RkOjptYWtlX3VuaXF1ZTxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3Vu
dGVyPigpOworICAgIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXIqIHB0ciA9IHVuaXF1ZVB0
ci5nZXQoKTsKKyAgICBtYXAuYWRkKFdURjo6bW92ZSh1bmlxdWVQdHIpLCAyKTsKKworICAgIEVY
UEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291
bnQpOworICAgIEVYUEVDVF9FUSgwdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVz
dHJ1Y3Rpb25Db3VudCk7CisKKyAgICBpbnQgcmVzdWx0ID0gbWFwLnRha2UocHRyKTsKKyAgICBF
WFBFQ1RfRVEoMiwgcmVzdWx0KTsKKworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0
cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOworICAgIEVYUEVDVF9FUSgxdSwgQ29u
c3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V1RGL0hhc2hTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V1RGL0hhc2hTZXQuY3BwCShyZXZpc2lvbiAxNzM3OTUpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9IYXNoU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsOSArMjUsMTEgQEAK
IAogI2luY2x1ZGUgImNvbmZpZy5oIgogCisjaW5jbHVkZSAiQ291bnRlcnMuaCIKICNpbmNsdWRl
ICJNb3ZlT25seS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0KKyNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAogbmFtZXNwYWNlIFRlc3RX
ZWJLaXRBUEkgewogCkBAIC0xMTcsNCArMTE5LDE4MCBAQCBURVNUKFdURl9IYXNoU2V0LCBNb3Zl
T25seSkKICAgICAgICAgRVhQRUNUX1RSVUUoc2Vjb25kU2V0LmNvbnRhaW5zKE1vdmVPbmx5KGkg
KyAxKSkpOwogfQogCitURVNUKFdURl9IYXNoU2V0LCBPd25QdHJLZXkpCit7CisgICAgQ29uc3Ry
dWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6VGVzdGluZ1Njb3BlIHNjb3BlOworCisgICAgSGFzaFNl
dDxPd25QdHI8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4+IHNldDsKKworICAgIE93blB0
cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPiBvd25QdHIgPSBhZG9wdFB0cihuZXcgQ29u
c3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcik7CisgICAgc2V0LmFkZChXVEY6Om1vdmUob3duUHRy
KSk7CisKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmNv
bnN0cnVjdGlvbkNvdW50KTsKKyAgICBFWFBFQ1RfRVEoMHUsIENvbnN0cnVjdG9yRGVzdHJ1Y3Rv
ckNvdW50ZXI6OmRlc3RydWN0aW9uQ291bnQpOworCisgICAgc2V0LmNsZWFyKCk7CisgICAgCisg
ICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rp
b25Db3VudCk7CisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVy
OjpkZXN0cnVjdGlvbkNvdW50KTsKK30KKworVEVTVChXVEZfSGFzaFNldCwgT3duUHRyS2V5X0Zp
bmRVc2luZ1Jhd1BvaW50ZXIpCit7CisgICAgSGFzaFNldDxPd25QdHI8aW50Pj4gc2V0OworCisg
ICAgT3duUHRyPGludD4gb3duUHRyID0gYWRvcHRQdHIobmV3IGludCg1KSk7CisgICAgaW50KiBw
dHIgPSBvd25QdHIuZ2V0KCk7CisgICAgc2V0LmFkZChXVEY6Om1vdmUob3duUHRyKSk7CisKKyAg
ICBhdXRvIGl0ID0gc2V0LmZpbmQocHRyKTsKKyAgICBBU1NFUlRfVFJVRShpdCAhPSBzZXQuZW5k
KCkpOworICAgIEVYUEVDVF9FUShwdHIsIGl0LT5nZXQoKSk7CisgICAgRVhQRUNUX0VRKDUsICpp
dC0+Z2V0KCkpOworfQorCitURVNUKFdURl9IYXNoU2V0LCBPd25QdHJLZXlfQ29udGFpbnNVc2lu
Z1Jhd1BvaW50ZXIpCit7CisgICAgSGFzaFNldDxPd25QdHI8aW50Pj4gc2V0OworCisgICAgT3du
UHRyPGludD4gb3duUHRyID0gYWRvcHRQdHIobmV3IGludCg1KSk7CisgICAgaW50KiBwdHIgPSBv
d25QdHIuZ2V0KCk7CisgICAgc2V0LmFkZChXVEY6Om1vdmUob3duUHRyKSk7CisKKyAgICBFWFBF
Q1RfRVEodHJ1ZSwgc2V0LmNvbnRhaW5zKHB0cikpOworfQorCitURVNUKFdURl9IYXNoU2V0LCBP
d25QdHJLZXlfUmVtb3ZlVXNpbmdSYXdQb2ludGVyKQoreworICAgIENvbnN0cnVjdG9yRGVzdHJ1
Y3RvckNvdW50ZXI6OlRlc3RpbmdTY29wZSBzY29wZTsKKworICAgIEhhc2hTZXQ8T3duUHRyPENv
bnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+PiBzZXQ7CisKKyAgICBPd25QdHI8Q29uc3RydWN0
b3JEZXN0cnVjdG9yQ291bnRlcj4gb3duUHRyID0gYWRvcHRQdHIobmV3IENvbnN0cnVjdG9yRGVz
dHJ1Y3RvckNvdW50ZXIpOworICAgIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXIqIHB0ciA9
IG93blB0ci5nZXQoKTsKKyAgICBzZXQuYWRkKFdURjo6bW92ZShvd25QdHIpKTsKKworICAgIEVY
UEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291
bnQpOworICAgIEVYUEVDVF9FUSgwdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVz
dHJ1Y3Rpb25Db3VudCk7CisKKyAgICBib29sIHJlc3VsdCA9IHNldC5yZW1vdmUocHRyKTsKKyAg
ICBFWFBFQ1RfRVEodHJ1ZSwgcmVzdWx0KTsKKworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0
b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOworICAgIEVYUEVDVF9FUSgx
dSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7Cit9CisK
K1RFU1QoV1RGX0hhc2hTZXQsIE93blB0cktleV9UYWtlVXNpbmdSYXdQb2ludGVyKQoreworICAg
IENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OlRlc3RpbmdTY29wZSBzY29wZTsKKworICAg
IEhhc2hTZXQ8T3duUHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+PiBzZXQ7CisKKyAg
ICBPd25QdHI8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4gb3duUHRyID0gYWRvcHRQdHIo
bmV3IENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXIpOworICAgIENvbnN0cnVjdG9yRGVzdHJ1
Y3RvckNvdW50ZXIqIHB0ciA9IG93blB0ci5nZXQoKTsKKyAgICBzZXQuYWRkKFdURjo6bW92ZShv
d25QdHIpKTsKKworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRl
cjo6Y29uc3RydWN0aW9uQ291bnQpOworICAgIEVYUEVDVF9FUSgwdSwgQ29uc3RydWN0b3JEZXN0
cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7CisKKyAgICBhdXRvIHJlc3VsdCA9IHNl
dC50YWtlKHB0cik7CisgICAgRVhQRUNUX0VRKHB0ciwgcmVzdWx0LmdldCgpKTsKKworICAgIEVY
UEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291
bnQpOworICAgIEVYUEVDVF9FUSgwdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVz
dHJ1Y3Rpb25Db3VudCk7CisKKyAgICByZXN1bHQgPSBudWxscHRyOworCisgICAgRVhQRUNUX0VR
KDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7Cisg
ICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlv
bkNvdW50KTsKK30KKworVEVTVChXVEZfSGFzaFNldCwgVW5pcXVlUHRyS2V5KQoreworICAgIENv
bnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OlRlc3RpbmdTY29wZSBzY29wZTsKKworICAgIEhh
c2hTZXQ8c3RkOjp1bmlxdWVfcHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+PiBzZXQ7
CisKKyAgICBhdXRvIHVuaXF1ZVB0ciA9IHN0ZDo6bWFrZV91bmlxdWU8Q29uc3RydWN0b3JEZXN0
cnVjdG9yQ291bnRlcj4oKTsKKyAgICBzZXQuYWRkKFdURjo6bW92ZSh1bmlxdWVQdHIpKTsKKwor
ICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0
aW9uQ291bnQpOworICAgIEVYUEVDVF9FUSgwdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRl
cjo6ZGVzdHJ1Y3Rpb25Db3VudCk7CisKKyAgICBzZXQuY2xlYXIoKTsKKworICAgIEVYUEVDVF9F
USgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOwor
ICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rp
b25Db3VudCk7Cit9CisKK1RFU1QoV1RGX0hhc2hTZXQsIFVuaXF1ZVB0cktleV9GaW5kVXNpbmdS
YXdQb2ludGVyKQoreworICAgIEhhc2hTZXQ8c3RkOjp1bmlxdWVfcHRyPGludD4+IHNldDsKKwor
ICAgIGF1dG8gdW5pcXVlUHRyID0gc3RkOjptYWtlX3VuaXF1ZTxpbnQ+KDUpOworICAgIGludCog
cHRyID0gdW5pcXVlUHRyLmdldCgpOworICAgIHNldC5hZGQoV1RGOjptb3ZlKHVuaXF1ZVB0cikp
OworCisgICAgYXV0byBpdCA9IHNldC5maW5kKHB0cik7CisgICAgQVNTRVJUX1RSVUUoaXQgIT0g
c2V0LmVuZCgpKTsKKyAgICBFWFBFQ1RfRVEocHRyLCBpdC0+Z2V0KCkpOworICAgIEVYUEVDVF9F
USg1LCAqaXQtPmdldCgpKTsKK30KKworVEVTVChXVEZfSGFzaFNldCwgVW5pcXVlUHRyS2V5X0Nv
bnRhaW5zVXNpbmdSYXdQb2ludGVyKQoreworICAgIEhhc2hTZXQ8c3RkOjp1bmlxdWVfcHRyPGlu
dD4+IHNldDsKKworICAgIGF1dG8gdW5pcXVlUHRyID0gc3RkOjptYWtlX3VuaXF1ZTxpbnQ+KDUp
OworICAgIGludCogcHRyID0gdW5pcXVlUHRyLmdldCgpOworICAgIHNldC5hZGQoV1RGOjptb3Zl
KHVuaXF1ZVB0cikpOworCisgICAgRVhQRUNUX0VRKHRydWUsIHNldC5jb250YWlucyhwdHIpKTsK
K30KKworVEVTVChXVEZfSGFzaFNldCwgVW5pcXVlUHRyS2V5X1JlbW92ZVVzaW5nUmF3UG9pbnRl
cikKK3sKKyAgICBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpUZXN0aW5nU2NvcGUgc2Nv
cGU7CisKKyAgICBIYXNoU2V0PHN0ZDo6dW5pcXVlX3B0cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JD
b3VudGVyPj4gc2V0OworCisgICAgYXV0byB1bmlxdWVQdHIgPSBzdGQ6Om1ha2VfdW5pcXVlPENv
bnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+KCk7CisgICAgQ29uc3RydWN0b3JEZXN0cnVjdG9y
Q291bnRlciogcHRyID0gdW5pcXVlUHRyLmdldCgpOworICAgIHNldC5hZGQoV1RGOjptb3ZlKHVu
aXF1ZVB0cikpOworCisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3Vu
dGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CisgICAgRVhQRUNUX0VRKDB1LCBDb25zdHJ1Y3RvckRl
c3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNvdW50KTsKKworICAgIGJvb2wgcmVzdWx0ID0g
c2V0LnJlbW92ZShwdHIpOworICAgIEVYUEVDVF9FUSh0cnVlLCByZXN1bHQpOworCisgICAgRVhQ
RUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3Vu
dCk7CisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0
cnVjdGlvbkNvdW50KTsKK30KKworVEVTVChXVEZfSGFzaFNldCwgVW5pcXVlUHRyS2V5X1Rha2VV
c2luZ1Jhd1BvaW50ZXIpCit7CisgICAgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6VGVz
dGluZ1Njb3BlIHNjb3BlOworCisgICAgSGFzaFNldDxzdGQ6OnVuaXF1ZV9wdHI8Q29uc3RydWN0
b3JEZXN0cnVjdG9yQ291bnRlcj4+IHNldDsKKworICAgIGF1dG8gdW5pcXVlUHRyID0gc3RkOjpt
YWtlX3VuaXF1ZTxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPigpOworICAgIENvbnN0cnVj
dG9yRGVzdHJ1Y3RvckNvdW50ZXIqIHB0ciA9IHVuaXF1ZVB0ci5nZXQoKTsKKyAgICBzZXQuYWRk
KFdURjo6bW92ZSh1bmlxdWVQdHIpKTsKKworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JE
ZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOworICAgIEVYUEVDVF9FUSgwdSwg
Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7CisKKyAgICBh
dXRvIHJlc3VsdCA9IHNldC50YWtlKHB0cik7CisgICAgRVhQRUNUX0VRKHB0ciwgcmVzdWx0Lmdl
dCgpKTsKKworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6
Y29uc3RydWN0aW9uQ291bnQpOworICAgIEVYUEVDVF9FUSgwdSwgQ29uc3RydWN0b3JEZXN0cnVj
dG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7CisgICAgCisgICAgcmVzdWx0ID0gbnVsbHB0
cjsKKworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29u
c3RydWN0aW9uQ291bnQpOworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9y
Q291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJL
aXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238428</attachid>
            <date>2014-09-21 12:40:39 -0700</date>
            <delta_ts>2014-09-21 16:47:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-136166-20140921124037.patch</filename>
            <type>text/plain</type>
            <size>46912</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNzM3OTcpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDQ4IEBACisyMDE0LTA5LTIwICBTYW0gV2VpbmlnICA8c2FtQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgTWFrZSBwb3NzaWJsZSBIYXNoU2V0PHN0ZDo6dW5pcXVlX3B0
cjw+PgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2
MTY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3
dGYvR2V0UHRyLmg6CisgICAgICAgIChXVEY6OmdldFB0cik6CisgICAgICAgIChXVEY6OkdldFB0
ckhlbHBlcjxzdGQ6OnVuaXF1ZV9wdHI8VD4+OjpnZXRQdHIpOgorICAgICAgICBNYWtlIHNwZWNp
YWxpemluZyBHZXRQdHJIZWxwZXIgYSBiaXQgY2xlYW5lciAoeW91IGRvbid0IGhhdmUgdG8gcHV0
IAorICAgICAgICBJc1NtYXJ0UHRyPFQ+Ojp2YWx1ZSBldmVyeXdoZXJlIGFueSBtb3JlKSBhbmQg
YWRkIHNwZWNpYWxpemF0aW9ucyBmb3IKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyLgorCisgICAg
ICAgICogd3RmL0hhc2hGdW5jdGlvbnMuaDoKKyAgICAgICAgKFdURjo6UHRySGFzaDxzdGQ6OnVu
aXF1ZV9wdHI8UD4+KToKKyAgICAgICAgQWRkIHNwZWNpYWxpemF0aW9uIGZvciBQdHJIYXNoIGZv
ciBzdGQ6OnVuaXF1ZV9wdHIgYW5kIHNldCBpdCBhcyB0aGUgRGVmYXVsdEhhc2gKKyAgICAgICAg
Zm9yIGl0IGFzIHdlbGwuCisKKyAgICAgICAgKiB3dGYvSGFzaE1hcC5oOiAgICAKKyAgICAgICAg
KiB3dGYvSGFzaFNldC5oOgorICAgICAgICBBZGQgb3ZlcmxvYWRzIG9mIGZpbmQoKSwgY29udGFp
bnMoKSwgcmVtb3ZlKCksIHRha2UoKSAoYW5kIGdldCgpIGZvciBIYXNoTWFwKSBmb3IgInNtYXJ0
IHBvaW50ZXJzIiB0aGF0CisgICAgICAgIHRha2UgdGhlIHJhdyBwb2ludGVyIHR5cGUgYXMgdGhl
IHBhcmFtZXRlci4gVGhlc2UgdXNlIFNGSU5BRSB0byBtYWtlIHRoZW1zZWx2ZXMgb25seSBhdmFp
bGFibGUKKyAgICAgICAgd2hlbiB0aGUgSXNTbWFydFB0cjxLZXlUeXBlPjo6dmFsdWUgaXMgdHJ1
ZS4gCisKKyAgICAgICAgKiB3dGYvSGFzaFRyYWl0cy5oOgorICAgICAgICBPdmVycmlkZSBjb25z
dHJ1Y3REZWxldGVkVmFsdWUoKSBhbmQgaXNEZWxldGVkVmFsdWUoKSBpbiB0aGUgc3RkOjp1bmlx
dWVfcHRyIHNwZWNpYWxpemF0aW9uCisgICAgICAgIHNpbmNlIHRoZSBkZWZhdWx0IGltcGxlbWVu
dGF0aW9uIGRlcGVuZHMgb24gdGhlIHR5cGUgaGF2aW5nIGEgY29uc3RydWN0b3IgdGhhdCB0YWtl
cyBhIEhhc2hUYWJsZURlbGV0ZWRWYWx1ZQorICAgICAgICBhbmQgZnVuY3Rpb24gbmFtZWQgaXNI
YXNoVGFibGVEZWxldGVkVmFsdWUoKS4KKworICAgICAgICAqIHd0Zi9Pd25QdHIuaDoKKyAgICAg
ICAgKFdURjo6T3duUHRyOjpPd25QdHIpOgorICAgICAgICAoV1RGOjpPd25QdHI6OmlzSGFzaFRh
YmxlRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKFdURjo6T3duUHRyOjpoYXNoVGFibGVEZWxldGVk
VmFsdWUpOgorICAgICAgICBBZGQgSGFzaFRhYmxlRGVsZXRlZFZhbHVlIGNvbnN0cnVjdG9yL2Z1
bmN0aW9ucyB0byBhbGxvdyB0aGUgY29uc3RydWN0RGVsZXRlZFZhbHVlKCkgYW5kIGlzRGVsZXRl
ZFZhbHVlKCkKKyAgICAgICAgaGFzaCB0cmFpdHMgdG8gd29yay4KKworICAgICAgICAoV1RGOjpQ
dHJIYXNoPE93blB0cjxQPj46Omhhc2gpOgorICAgICAgICAoV1RGOjpQdHJIYXNoPE93blB0cjxQ
Pj46OmVxdWFsKToKKyAgICAgICAgQWRkIHNwZWNpYWxpemF0aW9uIGZvciBQdHJIYXNoIGZvciBP
d25QdHIgYW5kIHNldCBpdCBhcyB0aGUgRGVmYXVsdEhhc2gKKyAgICAgICAgZm9yIGl0IGFzIHdl
bGwuCisKKyAgICAgICAgKiB3dGYvUmVmLmg6CisgICAgICAgIFVwZGF0ZSBmb3IgdGhlIGxlc3Mg
dmVyYm9zZSBHZXRQdHJIZWxwZXIgc3BlY2lhbGl6YXRpb24uCisKIDIwMTQtMDktMTkgIENocmlz
IER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBBbGxvdyBET00gbWV0aG9kcyB0
byByZXR1cm4gcmVmZXJlbmNlcyBpbnN0ZWFkIG9mIHBvaW50ZXJzCkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9HZXRQdHIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9HZXRQdHIuaAkocmV2
aXNpb24gMTczNzk3KQorKysgU291cmNlL1dURi93dGYvR2V0UHRyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTIxLDYgKzIxLDggQEAKICNpZm5kZWYgV1RGX0dldFB0cl9oCiAjZGVmaW5lIFdURl9HZXRQ
dHJfaAogCisjaW5jbHVkZSA8bWVtb3J5PgorCiBuYW1lc3BhY2UgV1RGIHsKIAogdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+IGlubGluZSBUKiBnZXRQdHIoVCogcCkgeyByZXR1cm4gcDsgfQpAQCAtMzAs
MzIgKzMyLDQ4IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgSXNTbWFydFB0ciAKIH07
CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBULCBib29sIGlzU21hcnRQdHI+Ci1zdHJ1Y3QgR2V0UHRy
SGVscGVyOworc3RydWN0IEdldFB0ckhlbHBlckJhc2U7CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBU
Pgotc3RydWN0IEdldFB0ckhlbHBlcjxULCBmYWxzZSAvKiBpc1NtYXJ0UHRyICovPiB7CitzdHJ1
Y3QgR2V0UHRySGVscGVyQmFzZTxULCBmYWxzZSAvKiBpc1NtYXJ0UHRyICovPiB7CiAgICAgdHlw
ZWRlZiBUKiBQdHJUeXBlOwogICAgIHN0YXRpYyBUKiBnZXRQdHIoVCYgcCkgeyByZXR1cm4gJnA7
IH0KIH07CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotc3RydWN0IEdldFB0ckhlbHBlcjxULCB0
cnVlIC8qIGlzU21hcnRQdHIgKi8+IHsKK3N0cnVjdCBHZXRQdHJIZWxwZXJCYXNlPFQsIHRydWUg
LyogaXNTbWFydFB0ciAqLz4gewogICAgIHR5cGVkZWYgdHlwZW5hbWUgVDo6UHRyVHlwZSBQdHJU
eXBlOwogICAgIHN0YXRpYyBQdHJUeXBlIGdldFB0cihjb25zdCBUJiBwKSB7IHJldHVybiBwLmdl
dCgpOyB9CiB9OwogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWlubGluZSB0eXBlbmFtZSBHZXRQ
dHJIZWxwZXI8VCwgSXNTbWFydFB0cjxUPjo6dmFsdWU+OjpQdHJUeXBlIGdldFB0cihUJiBwKQor
c3RydWN0IEdldFB0ckhlbHBlciA6IEdldFB0ckhlbHBlckJhc2U8VCwgSXNTbWFydFB0cjxUPjo6
dmFsdWU+IHsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgoraW5saW5lIHR5cGVuYW1lIEdl
dFB0ckhlbHBlcjxUPjo6UHRyVHlwZSBnZXRQdHIoVCYgcCkKIHsKLSAgICByZXR1cm4gR2V0UHRy
SGVscGVyPFQsIElzU21hcnRQdHI8VD46OnZhbHVlPjo6Z2V0UHRyKHApOworICAgIHJldHVybiBH
ZXRQdHJIZWxwZXI8VD46OmdldFB0cihwKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1p
bmxpbmUgdHlwZW5hbWUgR2V0UHRySGVscGVyPFQsIElzU21hcnRQdHI8VD46OnZhbHVlPjo6UHRy
VHlwZSBnZXRQdHIoY29uc3QgVCYgcCkKK2lubGluZSB0eXBlbmFtZSBHZXRQdHJIZWxwZXI8VD46
OlB0clR5cGUgZ2V0UHRyKGNvbnN0IFQmIHApCiB7Ci0gICAgcmV0dXJuIEdldFB0ckhlbHBlcjxU
LCBJc1NtYXJ0UHRyPFQ+Ojp2YWx1ZT46OmdldFB0cihwKTsKKyAgICByZXR1cm4gR2V0UHRySGVs
cGVyPFQ+OjpnZXRQdHIocCk7CiB9CiAKKy8vIEV4cGxpY2l0IHNwZWNpYWxpemF0aW9uIGZvciBD
Kysgc3RhbmRhcmQgbGlicmFyeSB0eXBlcy4KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIERlbGV0ZXI+IHN0cnVjdCBJc1NtYXJ0UHRyPHN0ZDo6dW5pcXVlX3B0cjxULCBEZWxldGVy
Pj4geworICAgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsKK307CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBULCB0eXBlbmFtZSBEZWxldGVyPgorc3RydWN0IEdldFB0ckhlbHBlcjxzdGQ6
OnVuaXF1ZV9wdHI8VCwgRGVsZXRlcj4+IHsKKyAgICB0eXBlZGVmIFQqIFB0clR5cGU7CisgICAg
c3RhdGljIFQqIGdldFB0cihjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8VCwgRGVsZXRlcj4mIHApIHsg
cmV0dXJuIGNvbnN0X2Nhc3Q8VCo+KHAuZ2V0KCkpOyB9Cit9OworCiB9IC8vIG5hbWVzcGFjZSBX
VEYKIAogI2VuZGlmIC8vIFdURl9HZXRQdHJfaApJbmRleDogU291cmNlL1dURi93dGYvSGFzaEZ1
bmN0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0hhc2hGdW5jdGlvbnMuaAko
cmV2aXNpb24gMTczNzk3KQorKysgU291cmNlL1dURi93dGYvSGFzaEZ1bmN0aW9ucy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjcsNiArMTI3LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIHN0
YXRpYyBib29sIGVxdWFsKFQgYSwgVCBiKSB7IHJldHVybiBhID09IGI7IH0KICAgICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwogICAg
IH07CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQPiBzdHJ1Y3QgUHRySGFzaDxSZWZQdHI8UD4+
IDogUHRySGFzaDxQKj4gewogICAgICAgICB1c2luZyBQdHJIYXNoPFAqPjo6aGFzaDsKICAgICAg
ICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUmVmUHRyPFA+JiBrZXkpIHsgcmV0dXJuIGhh
c2goa2V5LmdldCgpKTsgfQpAQCAtMTM2LDYgKzEzNywxNSBAQCBuYW1lc3BhY2UgV1RGIHsKICAg
ICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUmVmUHRyPFA+JiBhLCBQKiBiKSB7IHJldHVy
biBhID09IGI7IH0KICAgICB9OwogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgUCwgdHlwZW5hbWUg
RGVsZXRlcj4gc3RydWN0IFB0ckhhc2g8c3RkOjp1bmlxdWVfcHRyPFAsIERlbGV0ZXI+PiA6IFB0
ckhhc2g8UCo+IHsKKyAgICAgICAgdXNpbmcgUHRySGFzaDxQKj46Omhhc2g7CisgICAgICAgIHN0
YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxQLCBEZWxldGVyPiYga2V5
KSB7IHJldHVybiBoYXNoKGtleS5nZXQoKSk7IH0KKyAgICAgICAgdXNpbmcgUHRySGFzaDxQKj46
OmVxdWFsOworICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8
UCwgRGVsZXRlcj4mIGEsIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxQLCBEZWxldGVyPiYgYikgeyBy
ZXR1cm4gYS5nZXQoKSA9PSBiLmdldCgpOyB9CisgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKFAq
IGEsIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxQLCBEZWxldGVyPiYgYikgeyByZXR1cm4gYSA9PSBi
LmdldCgpOyB9CisgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IHN0ZDo6dW5pcXVlX3B0
cjxQLCBEZWxldGVyPiYgYSwgUCogYikgeyByZXR1cm4gYS5nZXQoKSA9PSBiOyB9CisgICAgfTsK
KwogICAgIC8vIGRlZmF1bHQgaGFzaCBmdW5jdGlvbiBmb3IgZWFjaCB0eXBlCiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7CkBAIC0xODEsNiArMTkxLDcgQEAg
bmFtZXNwYWNlIFdURiB7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQPiBzdHJ1Y3QgRGVmYXVs
dEhhc2g8UCo+IHsgdHlwZWRlZiBQdHJIYXNoPFAqPiBIYXNoOyB9OwogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFA+IHN0cnVjdCBEZWZhdWx0SGFzaDxSZWZQdHI8UD4+IHsgdHlwZWRlZiBQdHJIYXNo
PFJlZlB0cjxQPj4gSGFzaDsgfTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQLCB0eXBlbmFtZSBE
ZWxldGVyPiBzdHJ1Y3QgRGVmYXVsdEhhc2g8c3RkOjp1bmlxdWVfcHRyPFAsIERlbGV0ZXI+PiB7
IHR5cGVkZWYgUHRySGFzaDxzdGQ6OnVuaXF1ZV9wdHI8UCwgRGVsZXRlcj4+IEhhc2g7IH07CiAK
ICAgICAvLyBtYWtlIEludFBhaXJIYXNoIHRoZSBkZWZhdWx0IGhhc2ggZnVuY3Rpb24gZm9yIHBh
aXJzIG9mIChhdCBtb3N0KSAzMi1iaXQgaW50ZWdlcnMuCiAKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L0hhc2hNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9IYXNoTWFwLmgJKHJldmlz
aW9uIDE3Mzc5NykKKysrIFNvdXJjZS9XVEYvd3RmL0hhc2hNYXAuaAkod29ya2luZyBjb3B5KQpA
QCAtMjIsNiArMjIsNyBAQAogI2RlZmluZSBXVEZfSGFzaE1hcF9oCiAKICNpbmNsdWRlIDxpbml0
aWFsaXplcl9saXN0PgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KICNpbmNsdWRlIDx3dGYvSGFz
aFRhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL0l0ZXJhdG9yUmFuZ2UuaD4KIApAQCAtMTQzLDYgKzE0
NCwxNCBAQCBwdWJsaWM6CiAgICAgLy8gICBzdGF0aWMgdHJhbnNsYXRlKFZhbHVlVHlwZSYsIGNv
bnN0IFQmLCB1bnNpZ25lZCBoYXNoQ29kZSk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRy
YW5zbGF0b3IsIHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+IEFkZFJlc3VsdCBhZGQoSyYmLCBWJiYp
OwogCisgICAgLy8gT3ZlcmxvYWRzIGZvciBzbWFydCBwb2ludGVyIGtleXMgdGhhdCB0YWtlIHRo
ZSByYXcgcG9pbnRlciB0eXBlIGFzIHRoZSBwYXJhbWV0ZXIuCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgSyA9IEtleVR5cGU+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZh
bHVlLCBpdGVyYXRvcj46OnR5cGUgZmluZCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5
cGUpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEsgPSBLZXlUeXBlPiB0eXBlbmFtZSBzdGQ6OmVu
YWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgY29uc3RfaXRlcmF0b3I+Ojp0eXBlIGZpbmQo
dHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBLID0gS2V5VHlwZT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxL
Pjo6dmFsdWUsIGJvb2w+Ojp0eXBlIGNvbnRhaW5zKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6
UHRyVHlwZSkgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSyA9IEtleVR5cGU+IHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBNYXBwZWRQZWVrVHlwZT46
OnR5cGUgZ2V0KHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSkgY29uc3Q7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgSyA9IEtleVR5cGU+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElz
U21hcnRQdHI8Sz46OnZhbHVlLCBib29sPjo6dHlwZSByZW1vdmUodHlwZW5hbWUgR2V0UHRySGVs
cGVyPEs+OjpQdHJUeXBlKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLID0gS2V5VHlwZT4gdHlw
ZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIE1hcHBlZFR5cGU+Ojp0
eXBlIHRha2UodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlKTsKKwogICAgIHZvaWQg
Y2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0OwogCiAgICAgc3RhdGljIGJvb2wgaXNWYWxpZEtleShj
b25zdCBLZXlUeXBlJik7CkBAIC0zODYsNiArMzk1LDU2IEBAIGF1dG8gSGFzaE1hcDxULCBVLCBW
LCBXLCBNYXBwZWRUcmFpdHM+OjoKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1l
IEs+CitpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpmaW5kKHR5cGVuYW1lIEdl
dFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElz
U21hcnRQdHI8Sz46OnZhbHVlLCBpdGVyYXRvcj46OnR5cGUKK3sKKyAgICByZXR1cm4gbV9pbXBs
LnRlbXBsYXRlIGZpbmQ8SGFzaE1hcFRyYW5zbGF0b3I8S2V5VmFsdWVQYWlyVHJhaXRzLCBIYXNo
RnVuY3Rpb25zPj4oa2V5KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwg
dHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1lIEs+
CitpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpmaW5kKHR5cGVuYW1lIEdldFB0
ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lm
PElzU21hcnRQdHI8Sz46OnZhbHVlLCBjb25zdF9pdGVyYXRvcj46OnR5cGUKK3sKKyAgICByZXR1
cm4gbV9pbXBsLnRlbXBsYXRlIGZpbmQ8SGFzaE1hcFRyYW5zbGF0b3I8S2V5VmFsdWVQYWlyVHJh
aXRzLCBIYXNoRnVuY3Rpb25zPj4oa2V5KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KK3RlbXBsYXRlPHR5
cGVuYW1lIEs+CitpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpjb250YWlucyh0
eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSBjb25zdCAtPiB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgYm9vbD46OnR5cGUKK3sKKyAgICBy
ZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGNvbnRhaW5zPEhhc2hNYXBUcmFuc2xhdG9yPEtleVZhbHVl
UGFpclRyYWl0cywgSGFzaEZ1bmN0aW9ucz4+KGtleSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBLPgoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Z2V0
KHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIGNvbnN0IC0+IHR5cGVuYW1l
IHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBNYXBwZWRQZWVrVHlwZT46OnR5
cGUKK3sKKyAgICBLZXlWYWx1ZVBhaXJUeXBlKiBlbnRyeSA9IGNvbnN0X2Nhc3Q8SGFzaFRhYmxl
VHlwZSY+KG1faW1wbCkudGVtcGxhdGUgbG9va3VwPEhhc2hNYXBUcmFuc2xhdG9yPEtleVZhbHVl
UGFpclRyYWl0cywgSGFzaEZ1bmN0aW9ucz4+KGtleSk7CisgICAgaWYgKCFlbnRyeSkKKyAgICAg
ICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGVlayhNYXBwZWRUcmFpdHM6OmVtcHR5VmFsdWUoKSk7
CisgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGVlayhlbnRyeS0+dmFsdWUpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBl
bmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgSz4KK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwg
ViwgVywgWD46OnJlbW92ZSh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSAt
PiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgYm9vbD46OnR5
cGUKK3sKKyAgICByZXR1cm4gcmVtb3ZlKGZpbmQoa2V5KSk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBLPgoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6
dGFrZSh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSAtPiB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgTWFwcGVkVHlwZT46OnR5cGUKK3sK
KyAgICBpdGVyYXRvciBpdCA9IGZpbmQoa2V5KTsKKyAgICBpZiAoaXQgPT0gZW5kKCkpCisgICAg
ICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OmVtcHR5VmFsdWUoKTsKKyAgICBNYXBwZWRUeXBlIHZh
bHVlID0gV1RGOjptb3ZlKGl0LT52YWx1ZSk7CisgICAgcmVtb3ZlKGl0KTsKKyAgICByZXR1cm4g
dmFsdWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+CiBpbmxpbmUgdm9pZCBIYXNoTWFwPFQsIFUsIFYsIFcs
IFg+OjpjaGVja0NvbnNpc3RlbmN5KCkgY29uc3QKIHsKICAgICBtX2ltcGwuY2hlY2tUYWJsZUNv
bnNpc3RlbmN5KCk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvSGFzaFNldC5oCShyZXZpc2lvbiAxNzM3OTcpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9IYXNoU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2lu
Y2x1ZGUgPGluaXRpYWxpemVyX2xpc3Q+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNp
bmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hUYWJsZS5oPgogCiBuYW1l
c3BhY2UgV1RGIHsKQEAgLTEwNiw2ICsxMDcsMTIgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAg
IFZhbHVlVHlwZSB0YWtlKGl0ZXJhdG9yKTsKICAgICAgICAgVmFsdWVUeXBlIHRha2VBbnkoKTsK
IAorICAgICAgICAvLyBPdmVybG9hZHMgZm9yIHNtYXJ0IHBvaW50ZXIgdmFsdWVzIHRoYXQgdGFr
ZSB0aGUgcmF3IHBvaW50ZXIgdHlwZSBhcyB0aGUgcGFyYW1ldGVyLgorICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBWID0gVmFsdWVUeXBlPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0
UHRyPFY+Ojp2YWx1ZSwgaXRlcmF0b3I+Ojp0eXBlIGZpbmQodHlwZW5hbWUgR2V0UHRySGVscGVy
PFY+OjpQdHJUeXBlKSBjb25zdDsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgViA9IFZhbHVl
VHlwZT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUsIGJvb2w+
Ojp0eXBlIGNvbnRhaW5zKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRyVHlwZSkgY29uc3Q7
CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFYgPSBWYWx1ZVR5cGU+IHR5cGVuYW1lIHN0ZDo6
ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVlLCBib29sPjo6dHlwZSByZW1vdmUodHlwZW5h
bWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
ViA9IFZhbHVlVHlwZT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFs
dWUsIFZhbHVlVHlwZT46OnR5cGUgdGFrZSh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5
cGUpOworCiAgICAgICAgIHN0YXRpYyBib29sIGlzVmFsaWRWYWx1ZShjb25zdCBWYWx1ZVR5cGUm
KTsKICAgICAgICAgCiAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBIYXNoU2V0JikgY29u
c3Q7CkBAIC0xMTgsNiArMTI1LDEzIEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdGF0aWMgY29uc3QgVCYgZXh0cmFjdChjb25zdCBUJiB0KSB7IHJldHVy
biB0OyB9CiAgICAgfTsKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hGdW5jdGlvbnM+Cisg
ICAgc3RydWN0IEhhc2hTZXRUcmFuc2xhdG9yIHsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgVCYga2V5KSB7IHJldHVybiBIYXNoRnVuY3Rp
b25zOjpoYXNoKGtleSk7IH0KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VT4gc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgVCYgYSwgY29uc3QgVSYgYikgeyByZXR1cm4gSGFz
aEZ1bmN0aW9uczo6ZXF1YWwoYSwgYik7IH0KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4gc3RhdGljIHZvaWQgdHJhbnNsYXRlKFQmIGxvY2F0aW9u
LCBVJiYsIFYmJiB2YWx1ZSkgeyBsb2NhdGlvbiA9IHN0ZDo6Zm9yd2FyZDxWPih2YWx1ZSk7IH0K
KyAgICB9OworCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHJhbnNsYXRvcj4KICAgICBzdHJ1Y3Qg
SGFzaFNldFRyYW5zbGF0b3JBZGFwdGVyIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgVCYga2V5KSB7IHJldHVybiBUcmFuc2xhdG9yOjpo
YXNoKGtleSk7IH0KQEAgLTI2NCw2ICsyNzgsMzQgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAg
IHJldHVybiB0YWtlKGJlZ2luKCkpOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZh
bHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVj4KKyAgICBpbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rp
b25zLCBUcmFpdHM+OjpmaW5kKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRyVHlwZSB2YWx1
ZSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUs
IGl0ZXJhdG9yPjo6dHlwZQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBm
aW5kPEhhc2hTZXRUcmFuc2xhdG9yPEhhc2hGdW5jdGlvbnM+Pih2YWx1ZSk7CisgICAgfQorCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVu
YW1lIFRyYWl0cz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWPgorICAgIGlubGluZSBhdXRvIEhh
c2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmNvbnRhaW5zKHR5cGVuYW1lIEdl
dFB0ckhlbHBlcjxWPjo6UHRyVHlwZSB2YWx1ZSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUsIGJvb2w+Ojp0eXBlCisgICAgeworICAgICAgICBy
ZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGNvbnRhaW5zPEhhc2hTZXRUcmFuc2xhdG9yPEhhc2hGdW5j
dGlvbnM+Pih2YWx1ZSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5
cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBWPgorICAgIGlubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cz46OnJlbW92ZSh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUgdmFsdWUpIC0+
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVlLCBib29sPjo6dHlw
ZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlbW92ZShmaW5kKHZhbHVlKSk7CisgICAgfQorCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVu
YW1lIFRyYWl0cz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWPgorICAgIGlubGluZSBhdXRvIEhh
c2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OnRha2UodHlwZW5hbWUgR2V0UHRy
SGVscGVyPFY+OjpQdHJUeXBlIHZhbHVlKSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1Nt
YXJ0UHRyPFY+Ojp2YWx1ZSwgVmFsdWVUeXBlPjo6dHlwZQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHRha2UoZmluZCh2YWx1ZSkpOworICAgIH0KKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFY+CiAgICAgaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6
aXNWYWxpZFZhbHVlKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpCiAgICAgewpJbmRleDogU291cmNl
L1dURi93dGYvSGFzaFRyYWl0cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0hhc2hU
cmFpdHMuaAkocmV2aXNpb24gMTczNzk3KQorKysgU291cmNlL1dURi93dGYvSGFzaFRyYWl0cy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNiArMTA0LDkgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgRGVsZXRlcj4gcwogICAgIHR5cGVkZWYgc3RkOjpudWxscHRyX3QgRW1wdHlWYWx1
ZVR5cGU7CiAgICAgc3RhdGljIEVtcHR5VmFsdWVUeXBlIGVtcHR5VmFsdWUoKSB7IHJldHVybiBu
dWxscHRyOyB9CiAKKyAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoc3RkOjp1
bmlxdWVfcHRyPFQsIERlbGV0ZXI+JiBzbG90KSB7IG5ldyAoTm90TnVsbCwgJnNsb3QpIHN0ZDo6
dW5pcXVlX3B0cjxULCBEZWxldGVyPiB7IHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KC0xKSB9OyB9Cisg
ICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3Qgc3RkOjp1bmlxdWVfcHRyPFQsIERl
bGV0ZXI+JiB2YWx1ZSkgeyByZXR1cm4gdmFsdWUuZ2V0KCkgPT0gcmVpbnRlcnByZXRfY2FzdDxU
Kj4oLTEpOyB9CisKICAgICB0eXBlZGVmIFQqIFBlZWtUeXBlOwogICAgIHN0YXRpYyBUKiBwZWVr
KGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxULCBEZWxldGVyPiYgdmFsdWUpIHsgcmV0dXJuIHZhbHVl
LmdldCgpOyB9CiAgICAgc3RhdGljIFQqIHBlZWsoc3RkOjpudWxscHRyX3QpIHsgcmV0dXJuIG51
bGxwdHI7IH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL093blB0ci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL093blB0ci5oCShyZXZpc2lvbiAxNzM3OTcpCisrKyBTb3VyY2UvV1RGL3d0
Zi9Pd25QdHIuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTQgKzIxLDE1IEBACiAjaWZuZGVmIFdU
Rl9Pd25QdHJfaAogI2RlZmluZSBXVEZfT3duUHRyX2gKIAorI2luY2x1ZGUgPGFsZ29yaXRobT4K
KyNpbmNsdWRlIDxjc3RkZGVmPgorI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CiAjaW5jbHVkZSA8d3RmL0dldFB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ckNvbW1vbi5oPgotI2luY2x1ZGUgPGFsZ29yaXRo
bT4KLSNpbmNsdWRlIDxjc3RkZGVmPgotI2luY2x1ZGUgPG1lbW9yeT4KIAogbmFtZXNwYWNlIFdU
RiB7CiAKQEAgLTczLDYgKzc0LDEwIEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBPd25QdHIm
IG9wZXJhdG9yPShPd25QdHImJik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IE93blB0
ciYgb3BlcmF0b3I9KE93blB0cjxVPiYmKTsKIAorICAgICAgICAvLyBIYXNoIHRhYmxlIGRlbGV0
ZWQgdmFsdWVzLCB3aGljaCBhcmUgb25seSBjb25zdHJ1Y3RlZCBhbmQgbmV2ZXIgY29waWVkIG9y
IGRlc3Ryb3llZC4KKyAgICAgICAgT3duUHRyKEhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpIDog
bV9wdHIoaGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkpIHsgfQorICAgICAgICBib29sIGlzSGFzaFRh
YmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9wdHIgPT0gaGFzaFRhYmxlRGVsZXRl
ZFZhbHVlKCk7IH0KKwogICAgICAgICB2b2lkIHN3YXAoT3duUHRyJiBvKSB7IHN0ZDo6c3dhcCht
X3B0ciwgby5tX3B0cik7IH0KICAgICAgICAgCiAgICAgICAgIC8vIENvbnN0cnVjdCBhbiBvYmpl
Y3QgdG8gc3RvcmUgaW50byB0aGlzIE93blB0ciwgYnV0IG9ubHkgc28gbG9uZyBhcyB0aGlzIE93
blB0cgpAQCAtODksNiArOTQsOCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICBwcml2YXRlOgogICAg
ICAgICBleHBsaWNpdCBPd25QdHIoUHRyVHlwZSBwdHIpIDogbV9wdHIocHRyKSB7IH0KIAorICAg
ICAgICBzdGF0aWMgUHRyVHlwZSBoYXNoVGFibGVEZWxldGVkVmFsdWUoKSB7IHJldHVybiByZWlu
dGVycHJldF9jYXN0PFB0clR5cGU+KC0xKTsgfQorCiAgICAgICAgIC8vIFdlIHNob3VsZCBuZXZl
ciBoYXZlIHR3byBPd25QdHJzIGZvciB0aGUgc2FtZSB1bmRlcmx5aW5nIG9iamVjdCAob3RoZXJ3
aXNlIHdlJ2xsIGdldAogICAgICAgICAvLyBkb3VibGUtZGVzdHJ1Y3Rpb24pLCBzbyB0aGVzZSBl
cXVhbGl0eSBvcGVyYXRvcnMgc2hvdWxkIG5ldmVyIGJlIG5lZWRlZC4KICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVT4gYm9vbCBvcGVyYXRvcj09KGNvbnN0IE93blB0cjxVPiYpIHsgQ09NUElM
RV9BU1NFUlQoIXNpemVvZihVKiksIE93blB0cnNfc2hvdWxkX25ldmVyX2JlX2VxdWFsKTsgcmV0
dXJuIGZhbHNlOyB9CkBAIC0yMjAsNiArMjI3LDE3IEBAIG5hbWVzcGFjZSBXVEYgewogI2VuZGlm
CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgUD4gc3RydWN0IFB0ckhhc2g8T3duUHRy
PFA+PiA6IFB0ckhhc2g8UCo+IHsKKyAgICAgICAgdXNpbmcgUHRySGFzaDxQKj46Omhhc2g7Cisg
ICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IE93blB0cjxQPiYga2V5KSB7IHJldHVy
biBoYXNoKGtleS5nZXQoKSk7IH0KKyAgICAgICAgdXNpbmcgUHRySGFzaDxQKj46OmVxdWFsOwor
ICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBPd25QdHI8UD4mIGEsIGNvbnN0IE93blB0
cjxQPiYgYikgeyByZXR1cm4gYS5nZXQoKSA9PSBiLmdldCgpOyB9CisgICAgICAgIHN0YXRpYyBi
b29sIGVxdWFsKFAqIGEsIGNvbnN0IE93blB0cjxQPiYgYikgeyByZXR1cm4gYSA9PSBiLmdldCgp
OyB9CisgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IE93blB0cjxQPiYgYSwgUCogYikg
eyByZXR1cm4gYS5nZXQoKSA9PSBiOyB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFA+IHN0cnVjdCBEZWZhdWx0SGFzaDxPd25QdHI8UD4+IHsgdHlwZWRlZiBQdHJIYXNoPE93blB0
cjxQPj4gSGFzaDsgfTsKKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6T3duUHRy
OwpJbmRleDogU291cmNlL1dURi93dGYvUmVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvUmVmLmgJKHJldmlzaW9uIDE3Mzc5NykKKysrIFNvdXJjZS9XVEYvd3RmL1JlZi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHRlbXBsYXRl
PHR5cGVuYW1lIFUKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgR2V0UHRySGVs
cGVyPFJlZjxUPiwgZmFsc2UgLyogaXNTbWFydFB0ciAqLz4geworc3RydWN0IEdldFB0ckhlbHBl
cjxSZWY8VD4+IHsKICAgICB0eXBlZGVmIFQqIFB0clR5cGU7CiAgICAgc3RhdGljIFQqIGdldFB0
cihjb25zdCBSZWY8VD4mIHApIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCo+KCZwLmdldCgpKTsgfQog
fTsKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDE3Mzc5NykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDI2IEBACisyMDE0LTA5LTIwICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgTWFrZSBwb3NzaWJsZSBIYXNoU2V0PHN0ZDo6dW5pcXVlX3B0cjw+PgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2MTY2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9Db3B5TW92ZUNvdW50ZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL0NvdW50ZXJzLmNwcDogQWRkZWQuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9Db3Vu
dGVycy5oOiBDb3BpZWQgZnJvbSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Db3B5TW92
ZUNvdW50ZXIuaC4KKyAgICAgICAgTW92ZSB0aGUgQ29weU1vdmVDb3VudGVyIGhlbHBlciBmcm9t
IENvcHlNb3ZlQ291bnRlci5oIHRvIENvdW50ZXJzLmgsIGFuZCBhZGQgYSBDb25zdHJ1Y3RvckRl
c3RydWN0b3JDb3VudGVyCisgICAgICAgIGhlbHBlciB0byB0aGUgbWl4IGFzIHdlbGwuIEFkZCBD
b3VudGVycy5jcHAgdG8gYWxsb3cgZm9yIHRoZSBnbG9iYWwgdmFyaWFibGVzIHRvIGJlIHVzZWQg
aW4gbW9yZSB0aGFuIG9uZQorICAgICAgICB0cmFuc2xhdGlvbiB1bml0LgorICAgIAorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICBBZGQgbmV3IGZpbGVzLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XVEYvSGFzaE1hcC5jcHA6CisgICAgICAgIEFkZCB0ZXN0cyBmb3IgdXNpbmcgc3RkOjp1bmlx
dWVfcHRyIGFuZCBPd25QdHIgYXMgdGhlIGtleSdzIG9mIGEgSGFzaE1hcC4KKworICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hTZXQuY3BwOgorICAgICAgICBBZGQgdGVzdHMg
Zm9yIHVzaW5nIHN0ZDo6dW5pcXVlX3B0ciBhbmQgT3duUHRyIGFzIHRoZSB2YWx1ZXMgb2YgYSBI
YXNoU2V0LgorCiAyMDE0LTA5LTE5ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5j
b20+CiAKICAgICAgICAgSlNTdHJpbmdSZWYgbGVhayBvbiB0aGUgbGVha3MgYm90IGFsbG9jYXRp
b24gdW5kZXIgc2VsZWN0VGV4dFdpdGhDcml0ZXJpYUNhbGxiYWNrCkluZGV4OiBUb29scy9UZXN0
V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRB
UEkvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE3Mzc5NykKKysrIFRvb2xzL1Rlc3RXZWJLaXRB
UEkvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTY1LDYgKzY1LDcgQEAgc2V0KFRl
c3RKYXZhU2NyaXB0Q29yZV9MSUJSQVJJRVMKICkKIAogc2V0KFRlc3RXVEZfU09VUkNFUworICAg
ICR7VEVTVFdFQktJVEFQSV9ESVJ9L0NvdW50ZXJzLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9E
SVJ9L1Rlc3RzQ29udHJvbGxlci5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9X
VEYvQXRvbWljU3RyaW5nLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9D
U3RyaW5nLmNwcApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9Db3VudGVycy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9Db3VudGVycy5jcHAJKHJldmlzaW9uIDApCisr
KyBUb29scy9UZXN0V2ViS2l0QVBJL0NvdW50ZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNv
dW50ZXJzLmgiCisKK3Vuc2lnbmVkIENvcHlNb3ZlQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQg
PSAwOwordW5zaWduZWQgQ29weU1vdmVDb3VudGVyOjpjb3B5Q291bnQgPSAwOwordW5zaWduZWQg
Q29weU1vdmVDb3VudGVyOjptb3ZlQ291bnQgPSAwOworCit1bnNpZ25lZCBDb25zdHJ1Y3RvckRl
c3RydWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCA9IDA7Cit1bnNpZ25lZCBDb25zdHJ1
Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNvdW50ID0gMDsKSW5kZXg6IFRvb2xz
L1Rlc3RXZWJLaXRBUEkvQ291bnRlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0
QVBJL0NvdW50ZXJzLmgJKHJldmlzaW9uIDE3Mzc5NSkJKGZyb20gVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XVEYvQ29weU1vdmVDb3VudGVyLmg6MTczNzk1KQorKysgVG9vbHMvVGVzdFdlYktp
dEFQSS9Db3VudGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDb3B5TW92
ZUNvdW50ZXJfaAorI2RlZmluZSBDb3B5TW92ZUNvdW50ZXJfaAorCitzdHJ1Y3QgQ29weU1vdmVD
b3VudGVyIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgY29uc3RydWN0aW9uQ291bnQ7CisgICAgc3Rh
dGljIHVuc2lnbmVkIGNvcHlDb3VudDsKKyAgICBzdGF0aWMgdW5zaWduZWQgbW92ZUNvdW50Owor
CisgICAgc3RydWN0IFRlc3RpbmdTY29wZSB7CisgICAgICAgIFRlc3RpbmdTY29wZSgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGNvbnN0cnVjdGlvbkNvdW50ID0gMDsKKyAgICAgICAgICAgIGNv
cHlDb3VudCA9IDA7CisgICAgICAgICAgICBtb3ZlQ291bnQgPSAwOworICAgICAgICB9CisgICAg
fTsKKworICAgIENvcHlNb3ZlQ291bnRlcigpIHsgY29uc3RydWN0aW9uQ291bnQrKzsgfQorICAg
IENvcHlNb3ZlQ291bnRlcihjb25zdCBDb3B5TW92ZUNvdW50ZXImKSB7IGNvcHlDb3VudCsrOyB9
CisgICAgQ29weU1vdmVDb3VudGVyJiBvcGVyYXRvcj0oY29uc3QgQ29weU1vdmVDb3VudGVyJikg
eyBjb3B5Q291bnQrKzsgcmV0dXJuICp0aGlzOyB9CisgICAgQ29weU1vdmVDb3VudGVyKENvcHlN
b3ZlQ291bnRlciYmKSB7IG1vdmVDb3VudCsrOyB9CisgICAgQ29weU1vdmVDb3VudGVyJiBvcGVy
YXRvcj0oQ29weU1vdmVDb3VudGVyJiYpIHsgbW92ZUNvdW50Kys7IHJldHVybiAqdGhpczsgfQor
fTsKKwordW5zaWduZWQgQ29weU1vdmVDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCA9IDA7Cit1
bnNpZ25lZCBDb3B5TW92ZUNvdW50ZXI6OmNvcHlDb3VudCA9IDA7Cit1bnNpZ25lZCBDb3B5TW92
ZUNvdW50ZXI6Om1vdmVDb3VudCA9IDA7CisKKyNlbmRpZgpJbmRleDogVG9vbHMvVGVzdFdlYktp
dEFQSS9Db3VudGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ291bnRl
cnMuaAkod29ya2luZyBjb3B5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9Db3VudGVycy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNCBJ
Z2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjMsOCArMjQsOCBA
QAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgQ29w
eU1vdmVDb3VudGVyX2gKLSNkZWZpbmUgQ29weU1vdmVDb3VudGVyX2gKKyNpZm5kZWYgQ291bnRl
cnNfaAorI2RlZmluZSBDb3VudGVyc19oCiAKIHN0cnVjdCBDb3B5TW92ZUNvdW50ZXIgewogICAg
IHN0YXRpYyB1bnNpZ25lZCBjb25zdHJ1Y3Rpb25Db3VudDsKQEAgLTQ3LDggKzQ4LDQxIEBAIHN0
cnVjdCBDb3B5TW92ZUNvdW50ZXIgewogICAgIENvcHlNb3ZlQ291bnRlciYgb3BlcmF0b3I9KENv
cHlNb3ZlQ291bnRlciYmKSB7IG1vdmVDb3VudCsrOyByZXR1cm4gKnRoaXM7IH0KIH07CiAKLXVu
c2lnbmVkIENvcHlNb3ZlQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQgPSAwOwotdW5zaWduZWQg
Q29weU1vdmVDb3VudGVyOjpjb3B5Q291bnQgPSAwOwotdW5zaWduZWQgQ29weU1vdmVDb3VudGVy
Ojptb3ZlQ291bnQgPSAwOwogCi0jZW5kaWYKK3N0cnVjdCBDb25zdHJ1Y3RvckRlc3RydWN0b3JD
b3VudGVyIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgY29uc3RydWN0aW9uQ291bnQ7CisgICAgc3Rh
dGljIHVuc2lnbmVkIGRlc3RydWN0aW9uQ291bnQ7CisKKyAgICBzdHJ1Y3QgVGVzdGluZ1Njb3Bl
IHsKKyAgICAgICAgVGVzdGluZ1Njb3BlKCkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3Ry
dWN0aW9uQ291bnQgPSAwOworICAgICAgICAgICAgZGVzdHJ1Y3Rpb25Db3VudCA9IDA7CisgICAg
ICAgIH0KKyAgICB9OworCisgICAgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcigpIHsgY29u
c3RydWN0aW9uQ291bnQrKzsgfQorICAgIH5Db25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyKCkg
eyBkZXN0cnVjdGlvbkNvdW50Kys7IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1
Y3QgRGVsZXRlckNvdW50ZXIgeworICAgIHN0YXRpYyB1bnNpZ25lZCBkZWxldGVyQ291bnQ7CisK
KyAgICBzdHJ1Y3QgVGVzdGluZ1Njb3BlIHsKKyAgICAgICAgVGVzdGluZ1Njb3BlKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgZGVsZXRlckNvdW50ID0gMDsKKyAgICAgICAgfQorICAgIH07CisK
KyAgICB2b2lkIG9wZXJhdG9yKCkoVCogcCkgY29uc3QKKyAgICB7CisgICAgICAgIGRlbGV0ZXJD
b3VudCsrOworICAgICAgICBkZWxldGUgcDsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTxjbGFzcyBU
PiB1bnNpZ25lZCBEZWxldGVyQ291bnRlcjxUPjo6ZGVsZXRlckNvdW50ID0gMDsKKworI2VuZGlm
IC8vIENvdW50ZXJzX2gKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS52
Y3hwcm9qL1Rlc3RXZWJLaXRBUEkudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RXZWJLaXRBUEkudmN4cHJvai9UZXN0V2ViS2l0QVBJLnZjeHByb2oJKHJldmlz
aW9uIDE3Mzc5NykKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS52Y3hwcm9q
L1Rlc3RXZWJLaXRBUEkudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjgwLDExICsyODAsMTMg
QEAKICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbUdyb3VwPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cY29uZmlnLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxD
b3VudGVycy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cVGVzdC5oIiAvPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cVGVzdHNDb250cm9sbGVyLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlx3aW5cSG9zdFdpbmRvdy5oIiAvPgogICA8L0l0ZW1Hcm91cD4KICAg
PEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXENvdW50ZXJzLmNwcCIgLz4K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFRlc3RzQ29udHJvbGxlci5jcHAiIC8+CiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxUZXN0c1xXZWJDb3JlXExheW91dFVuaXQuY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cVGVzdHNcV2ViQ29yZVx3aW5cQml0bWFwSW1hZ2Uu
Y3BwIj4KSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS52Y3hwcm9qL1Rl
c3RXZWJLaXRBUEkudmN4cHJvai5maWx0ZXJzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdFdlYktpdEFQSS52Y3hwcm9qL1Rlc3RXZWJLaXRBUEkudmN4cHJvai5maWx0ZXJz
CShyZXZpc2lvbiAxNzM3OTcpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEku
dmN4cHJvai9UZXN0V2ViS2l0QVBJLnZjeHByb2ouZmlsdGVycwkod29ya2luZyBjb3B5KQpAQCAt
MjIsNiArMjIsNyBAQAogICA8L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGNvbmZpZy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
Q291bnRlcnMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXFRlc3QuaCIgLz4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXFRlc3RzQ29udHJvbGxlci5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cd2luXEhvc3RXaW5kb3cuaCI+CkBAIC0yOSw2ICszMCw3IEBACiAg
ICAgPC9DbEluY2x1ZGU+CiAgIDwvSXRlbUdyb3VwPgogICA8SXRlbUdyb3VwPgorICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cQ291bnRlcnMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cVGVzdHNDb250cm9sbGVyLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHdpblxIb3N0V2luZG93LmNwcCI+CiAgICAgICA8RmlsdGVyPndpbjwvRmlsdGVyPgpJbmRleDog
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE3Mzc5NykKKysrIFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTksNiArMTE5LDcgQEAKIAkJNzZFMTgyREExNTQ3NTUwMTAwRjFGQUREIC8qIFdp
bGxTZW5kU3VibWl0RXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzZFMTgyRDkxNTQ3NTUwMTAwRjFGQUREIC8qIFdpbGxTZW5kU3VibWl0RXZl
bnQuY3BwICovOyB9OwogCQk3NkUxODJERDE1NDc1NjkxMDBGMUZBREQgLyogV2lsbFNlbmRTdWJt
aXRFdmVudF9CdW5kbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzZFMTgyREMxNTQ3NTY5MTAwRjFGQUREIC8qIFdpbGxTZW5kU3VibWl0RXZlbnRf
QnVuZGxlLmNwcCAqLzsgfTsKIAkJNzZFMTgyREYxNTQ3NjdFNjAwRjFGQUREIC8qIGF1dG8tc3Vi
bWl0dGluZy1mb3JtLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzZFMTgyREUxNTQ3NUE4MzAwRjFGQUREIC8qIGF1dG8tc3VibWl0dGlu
Zy1mb3JtLmh0bWwgKi87IH07CisJCTdDNkJCRDhDMTlDRUE2MzAwMEMxRjVFMCAvKiBDb3VudGVy
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzZC
QkQ4QjE5Q0VBNjMwMDBDMUY1RTAgLyogQ291bnRlcnMuY3BwICovOyB9OwogCQk3Qzc0RDQyRjE4
ODIyOEYzMDBFNUVENTcgLyogU3RyaW5nVmlldy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qzc0RDQyRDE4ODIyOEYzMDBFNUVENTcgLyogU3RyaW5n
Vmlldy5jcHAgKi87IH07CiAJCTdDOEREQUFCMTczNURFRUUwMEVBNUFDMCAvKiBDbG9zZVRoZW5U
ZXJtaW5hdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gN0M4RERBQTkxNzM1REUxRDAwRUE1QUMwIC8qIENsb3NlVGhlblRlcm1pbmF0ZS5jcHAgKi87
IH07CiAJCTdDOUVEOThCMTdBMTlGNEIwMEU0REMzMyAvKiBhdHRyaWJ1dGVkU3RyaW5nU3RyaWtl
dGhyb3VnaC5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdDOUVEOThBMTdBMTlEMDYwMEU0REMzMyAvKiBhdHRyaWJ1dGVkU3RyaW5nU3Ry
aWtldGhyb3VnaC5odG1sICovOyB9OwpAQCAtNDYzLDYgKzQ2NCw4IEBACiAJCTc2RTE4MkQ5MTU0
NzU1MDEwMEYxRkFERCAvKiBXaWxsU2VuZFN1Ym1pdEV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdpbGxTZW5kU3VibWl0RXZlbnQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3NkUxODJEQzE1NDc1NjkxMDBGMUZBREQgLyogV2lsbFNlbmRT
dWJtaXRFdmVudF9CdW5kbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV2lsbFNlbmRTdWJtaXRFdmVudF9CdW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3NkUxODJERTE1NDc1QTgzMDBGMUZBREQgLyogYXV0by1zdWJtaXR0aW5nLWZvcm0u
aHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJhdXRvLXN1Ym1pdHRpbmctZm9ybS5o
dG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0M2QkJEOEExOUNFQTU0MzAwQzFG
NUUwIC8qIENvdW50ZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvdW50
ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDNkJCRDhCMTlDRUE2MzAwMEMx
RjVFMCAvKiBDb3VudGVycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBDb3VudGVycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDNzRENDJEMTg4
MjI4RjMwMEU1RUQ1NyAvKiBTdHJpbmdWaWV3LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFN0cmluZ1ZpZXcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3QzhEREFBOTE3MzVERTFEMDBFQTVBQzAgLyogQ2xvc2VUaGVuVGVybWluYXRlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IENsb3NlVGhlblRlcm1pbmF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTdDOUVEOThBMTdBMTlEMDYwMEU0REMzMyAvKiBhdHRyaWJ1dGVkU3RyaW5n
U3RyaWtldGhyb3VnaC5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gYXR0cmlidXRlZFN0cmluZ1N0cmlrZXRocm91
Z2guaHRtbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY3MCw2ICs2NzMsOCBAQAog
CQkJCTJFOTY2MERDMTZDMDdEN0IwMDM3MUI0MiAvKiBpb3MgKi8sCiAJCQkJQkNBNjFDM0ExMTcw
MEI5NDAwNDYwRDFFIC8qIG1hYyAqLywKIAkJCQlCQzEzMUE5RTExNzEzMTdDMDBCNjk3MjcgLyog
Y29uZmlnLmggKi8sCisJCQkJN0M2QkJEOEExOUNFQTU0MzAwQzFGNUUwIC8qIENvdW50ZXJzLmgg
Ki8sCisJCQkJN0M2QkJEOEIxOUNFQTYzMDAwQzFGNUUwIC8qIENvdW50ZXJzLmNwcCAqLywKIAkJ
CQlDMEFEQkU3QTEyRkNBNEQwMDBEMkMxMjkgLyogSmF2YVNjcmlwdFRlc3QuY3BwICovLAogCQkJ
CUMwQURCRTdCMTJGQ0E0RDAwMEQyQzEyOSAvKiBKYXZhU2NyaXB0VGVzdC5oICovLAogCQkJCUJD
NTc1QkJGMTI2RjU3NTIwMDZGMEYxMiAvKiBQbGF0Zm9ybVV0aWxpdGllcy5jcHAgKi8sCkBAIC0x
Mzg0LDYgKzEzODksNyBAQAogCQkJCUJDN0I2MUFBMTI5QTAzODcwMEQxNzRBNCAvKiBXS1ByZWZl
cmVuY2VzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDOTA5OTVFMTI1NjdCQzEwMDA4Mzc1NiAv
KiBXS1N0cmluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzkwOTk5NDEyNTZBQ0YxMDAwODM3
NTYgLyogV0tTdHJpbmdKU1N0cmluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3QzZCQkQ4QzE5
Q0VBNjMwMDBDMUY1RTAgLyogQ291bnRlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMjY1QUY1
NTAxNUQxRTQ4QTAwQjBDQjRBIC8qIFdURlN0cmluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQky
RTc3NjVDRDE2QzREODBBMDBCQTJCQjEgLyogbWFpbklPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTJFNzc2NUNGMTZDNEQ4MTEwMEJBMkJCMSAvKiBtYWluTWFjLm1tIGluIFNvdXJjZXMgKi8sCklu
ZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Db3B5TW92ZUNvdW50ZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Db3B5TW92ZUNvdW50ZXIu
aAkocmV2aXNpb24gMTczNzk3KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29w
eU1vdmVDb3VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTQgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENvcHlNb3Zl
Q291bnRlcl9oCi0jZGVmaW5lIENvcHlNb3ZlQ291bnRlcl9oCi0KLXN0cnVjdCBDb3B5TW92ZUNv
dW50ZXIgewotICAgIHN0YXRpYyB1bnNpZ25lZCBjb25zdHJ1Y3Rpb25Db3VudDsKLSAgICBzdGF0
aWMgdW5zaWduZWQgY29weUNvdW50OwotICAgIHN0YXRpYyB1bnNpZ25lZCBtb3ZlQ291bnQ7Ci0K
LSAgICBzdHJ1Y3QgVGVzdGluZ1Njb3BlIHsKLSAgICAgICAgVGVzdGluZ1Njb3BlKCkKLSAgICAg
ICAgewotICAgICAgICAgICAgY29uc3RydWN0aW9uQ291bnQgPSAwOwotICAgICAgICAgICAgY29w
eUNvdW50ID0gMDsKLSAgICAgICAgICAgIG1vdmVDb3VudCA9IDA7Ci0gICAgICAgIH0KLSAgICB9
OwotCi0gICAgQ29weU1vdmVDb3VudGVyKCkgeyBjb25zdHJ1Y3Rpb25Db3VudCsrOyB9Ci0gICAg
Q29weU1vdmVDb3VudGVyKGNvbnN0IENvcHlNb3ZlQ291bnRlciYpIHsgY29weUNvdW50Kys7IH0K
LSAgICBDb3B5TW92ZUNvdW50ZXImIG9wZXJhdG9yPShjb25zdCBDb3B5TW92ZUNvdW50ZXImKSB7
IGNvcHlDb3VudCsrOyByZXR1cm4gKnRoaXM7IH0KLSAgICBDb3B5TW92ZUNvdW50ZXIoQ29weU1v
dmVDb3VudGVyJiYpIHsgbW92ZUNvdW50Kys7IH0KLSAgICBDb3B5TW92ZUNvdW50ZXImIG9wZXJh
dG9yPShDb3B5TW92ZUNvdW50ZXImJikgeyBtb3ZlQ291bnQrKzsgcmV0dXJuICp0aGlzOyB9Ci19
OwotCi11bnNpZ25lZCBDb3B5TW92ZUNvdW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50ID0gMDsKLXVu
c2lnbmVkIENvcHlNb3ZlQ291bnRlcjo6Y29weUNvdW50ID0gMDsKLXVuc2lnbmVkIENvcHlNb3Zl
Q291bnRlcjo6bW92ZUNvdW50ID0gMDsKLQotI2VuZGlmCkluZGV4OiBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9IYXNoTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9IYXNoTWFwLmNwcAkocmV2aXNpb24gMTczNzk3KQorKysgVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaE1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDEx
ICsyNSwxMyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKLSNpbmNsdWRlICJDb3B5TW92ZUNv
dW50ZXIuaCIKKyNpbmNsdWRlICJDb3VudGVycy5oIgogI2luY2x1ZGUgIk1vdmVPbmx5LmgiCiAj
aW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nSGFzaC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgogCiBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CiAKQEAgLTE3MSw0
ICsxNzMsMjE3IEBAIFRFU1QoV1RGX0hhc2hNYXAsIEVmZmljaWVudEdldHRlcikKICAgICB9CiB9
CiAKK1RFU1QoV1RGX0hhc2hNYXAsIE93blB0cktleSkKK3sKKyAgICBDb25zdHJ1Y3RvckRlc3Ry
dWN0b3JDb3VudGVyOjpUZXN0aW5nU2NvcGUgc2NvcGU7CisKKyAgICBIYXNoTWFwPE93blB0cjxD
b25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPiwgaW50PiBtYXA7CisKKyAgICBPd25QdHI8Q29u
c3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4gb3duUHRyID0gYWRvcHRQdHIobmV3IENvbnN0cnVj
dG9yRGVzdHJ1Y3RvckNvdW50ZXIpOworICAgIG1hcC5hZGQoV1RGOjptb3ZlKG93blB0ciksIDIp
OworCisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25z
dHJ1Y3Rpb25Db3VudCk7CisgICAgRVhQRUNUX0VRKDB1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JD
b3VudGVyOjpkZXN0cnVjdGlvbkNvdW50KTsKKworICAgIG1hcC5jbGVhcigpOworICAgIAorICAg
IEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9u
Q291bnQpOworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6
ZGVzdHJ1Y3Rpb25Db3VudCk7Cit9CisKK1RFU1QoV1RGX0hhc2hNYXAsIE93blB0cktleV9GaW5k
VXNpbmdSYXdQb2ludGVyKQoreworICAgIEhhc2hNYXA8T3duUHRyPGludD4sIGludD4gbWFwOwor
CisgICAgT3duUHRyPGludD4gb3duUHRyID0gYWRvcHRQdHIobmV3IGludCg1KSk7CisgICAgaW50
KiBwdHIgPSBvd25QdHIuZ2V0KCk7CisgICAgbWFwLmFkZChXVEY6Om1vdmUob3duUHRyKSwgMik7
CisKKyAgICBhdXRvIGl0ID0gbWFwLmZpbmQocHRyKTsKKyAgICBBU1NFUlRfVFJVRShpdCAhPSBt
YXAuZW5kKCkpOworICAgIEVYUEVDVF9FUShwdHIsIGl0LT5rZXkuZ2V0KCkpOworICAgIEVYUEVD
VF9FUSgyLCBpdC0+dmFsdWUpOworfQorCitURVNUKFdURl9IYXNoTWFwLCBPd25QdHJLZXlfQ29u
dGFpbnNVc2luZ1Jhd1BvaW50ZXIpCit7CisgICAgSGFzaE1hcDxPd25QdHI8aW50PiwgaW50PiBt
YXA7CisKKyAgICBPd25QdHI8aW50PiBvd25QdHIgPSBhZG9wdFB0cihuZXcgaW50KDUpKTsKKyAg
ICBpbnQqIHB0ciA9IG93blB0ci5nZXQoKTsKKyAgICBtYXAuYWRkKFdURjo6bW92ZShvd25QdHIp
LCAyKTsKKworICAgIEVYUEVDVF9FUSh0cnVlLCBtYXAuY29udGFpbnMocHRyKSk7Cit9CisKK1RF
U1QoV1RGX0hhc2hNYXAsIE93blB0cktleV9HZXRVc2luZ1Jhd1BvaW50ZXIpCit7CisgICAgSGFz
aE1hcDxPd25QdHI8aW50PiwgaW50PiBtYXA7CisKKyAgICBPd25QdHI8aW50PiBvd25QdHIgPSBh
ZG9wdFB0cihuZXcgaW50KDUpKTsKKyAgICBpbnQqIHB0ciA9IG93blB0ci5nZXQoKTsKKyAgICBt
YXAuYWRkKFdURjo6bW92ZShvd25QdHIpLCAyKTsKKworICAgIGludCB2YWx1ZSA9IG1hcC5nZXQo
cHRyKTsKKyAgICBFWFBFQ1RfRVEoMiwgdmFsdWUpOworfQorCitURVNUKFdURl9IYXNoTWFwLCBP
d25QdHJLZXlfUmVtb3ZlVXNpbmdSYXdQb2ludGVyKQoreworICAgIENvbnN0cnVjdG9yRGVzdHJ1
Y3RvckNvdW50ZXI6OlRlc3RpbmdTY29wZSBzY29wZTsKKworICAgIEhhc2hNYXA8T3duUHRyPENv
bnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+LCBpbnQ+IG1hcDsKKworICAgIE93blB0cjxDb25z
dHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPiBvd25QdHIgPSBhZG9wdFB0cihuZXcgQ29uc3RydWN0
b3JEZXN0cnVjdG9yQ291bnRlcik7CisgICAgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlciog
cHRyID0gb3duUHRyLmdldCgpOworICAgIG1hcC5hZGQoV1RGOjptb3ZlKG93blB0ciksIDIpOwor
CisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1
Y3Rpb25Db3VudCk7CisgICAgRVhQRUNUX0VRKDB1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3Vu
dGVyOjpkZXN0cnVjdGlvbkNvdW50KTsKKworICAgIGJvb2wgcmVzdWx0ID0gbWFwLnJlbW92ZShw
dHIpOworICAgIEVYUEVDVF9FUSh0cnVlLCByZXN1bHQpOworCisgICAgRVhQRUNUX0VRKDF1LCBD
b25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CisgICAgRVhQ
RUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNvdW50
KTsKK30KKworVEVTVChXVEZfSGFzaE1hcCwgT3duUHRyS2V5X1Rha2VVc2luZ1Jhd1BvaW50ZXIp
Cit7CisgICAgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6VGVzdGluZ1Njb3BlIHNjb3Bl
OworCisgICAgSGFzaE1hcDxPd25QdHI8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4sIGlu
dD4gbWFwOworCisgICAgT3duUHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+IG93blB0
ciA9IGFkb3B0UHRyKG5ldyBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyKTsKKyAgICBDb25z
dHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyKiBwdHIgPSBvd25QdHIuZ2V0KCk7CisgICAgbWFwLmFk
ZChXVEY6Om1vdmUob3duUHRyKSwgMik7CisKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9y
RGVzdHJ1Y3RvckNvdW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsKKyAgICBFWFBFQ1RfRVEoMHUs
IENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3RydWN0aW9uQ291bnQpOworCisgICAg
aW50IHJlc3VsdCA9IG1hcC50YWtlKHB0cik7CisgICAgRVhQRUNUX0VRKDIsIHJlc3VsdCk7CisK
KyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmNvbnN0cnVj
dGlvbkNvdW50KTsKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50
ZXI6OmRlc3RydWN0aW9uQ291bnQpOworfQorCitURVNUKFdURl9IYXNoTWFwLCBVbmlxdWVQdHJL
ZXkpCit7CisgICAgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6VGVzdGluZ1Njb3BlIHNj
b3BlOworCisgICAgSGFzaE1hcDxzdGQ6OnVuaXF1ZV9wdHI8Q29uc3RydWN0b3JEZXN0cnVjdG9y
Q291bnRlcj4sIGludD4gbWFwOworCisgICAgYXV0byB1bmlxdWVQdHIgPSBzdGQ6Om1ha2VfdW5p
cXVlPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+KCk7CisgICAgbWFwLmFkZChXVEY6Om1v
dmUodW5pcXVlUHRyKSwgMik7CisKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1
Y3RvckNvdW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsKKyAgICBFWFBFQ1RfRVEoMHUsIENvbnN0
cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3RydWN0aW9uQ291bnQpOworCisgICAgbWFwLmNs
ZWFyKCk7CisgICAgCisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3Vu
dGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRl
c3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNvdW50KTsKK30KKworVEVTVChXVEZfSGFzaE1h
cCwgVW5pcXVlUHRyS2V5X0N1c3RvbURlbGV0ZXIpCit7CisgICAgQ29uc3RydWN0b3JEZXN0cnVj
dG9yQ291bnRlcjo6VGVzdGluZ1Njb3BlIGNvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXJTY29w
ZTsKKyAgICBEZWxldGVyQ291bnRlcjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPjo6VGVz
dGluZ1Njb3BlIGRlbGV0ZXJDb3VudGVyU2NvcGU7CisKKyAgICBIYXNoTWFwPHN0ZDo6dW5pcXVl
X3B0cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyLCBEZWxldGVyQ291bnRlcjxDb25zdHJ1
Y3RvckRlc3RydWN0b3JDb3VudGVyPj4sIGludD4gbWFwOworCisgICAgc3RkOjp1bmlxdWVfcHRy
PENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXIsIERlbGV0ZXJDb3VudGVyPENvbnN0cnVjdG9y
RGVzdHJ1Y3RvckNvdW50ZXI+PiB1bmlxdWVQdHIobmV3IENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNv
dW50ZXIoKSwgRGVsZXRlckNvdW50ZXI8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4oKSk7
CisgICAgbWFwLmFkZChXVEY6Om1vdmUodW5pcXVlUHRyKSwgMik7CisKKyAgICBFWFBFQ1RfRVEo
MXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsKKyAg
ICBFWFBFQ1RfRVEoMHUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3RydWN0aW9u
Q291bnQpOworCisgICAgRVhQRUNUX0VRKDB1LCBEZWxldGVyQ291bnRlcjxDb25zdHJ1Y3RvckRl
c3RydWN0b3JDb3VudGVyPjo6ZGVsZXRlckNvdW50KTsKKworICAgIG1hcC5jbGVhcigpOworICAg
IAorICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3Ry
dWN0aW9uQ291bnQpOworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291
bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7CisKKyAgICBFWFBFQ1RfRVEoMXUsIERlbGV0ZXJDb3Vu
dGVyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+OjpkZWxldGVyQ291bnQpOworfQorCitU
RVNUKFdURl9IYXNoTWFwLCBVbmlxdWVQdHJLZXlfRmluZFVzaW5nUmF3UG9pbnRlcikKK3sKKyAg
ICBIYXNoTWFwPHN0ZDo6dW5pcXVlX3B0cjxpbnQ+LCBpbnQ+IG1hcDsKKworICAgIGF1dG8gdW5p
cXVlUHRyID0gc3RkOjptYWtlX3VuaXF1ZTxpbnQ+KDUpOworICAgIGludCogcHRyID0gdW5pcXVl
UHRyLmdldCgpOworICAgIG1hcC5hZGQoV1RGOjptb3ZlKHVuaXF1ZVB0ciksIDIpOworCisgICAg
YXV0byBpdCA9IG1hcC5maW5kKHB0cik7CisgICAgQVNTRVJUX1RSVUUoaXQgIT0gbWFwLmVuZCgp
KTsKKyAgICBFWFBFQ1RfRVEocHRyLCBpdC0+a2V5LmdldCgpKTsKKyAgICBFWFBFQ1RfRVEoMiwg
aXQtPnZhbHVlKTsKK30KKworVEVTVChXVEZfSGFzaE1hcCwgVW5pcXVlUHRyS2V5X0NvbnRhaW5z
VXNpbmdSYXdQb2ludGVyKQoreworICAgIEhhc2hNYXA8c3RkOjp1bmlxdWVfcHRyPGludD4sIGlu
dD4gbWFwOworCisgICAgYXV0byB1bmlxdWVQdHIgPSBzdGQ6Om1ha2VfdW5pcXVlPGludD4oNSk7
CisgICAgaW50KiBwdHIgPSB1bmlxdWVQdHIuZ2V0KCk7CisgICAgbWFwLmFkZChXVEY6Om1vdmUo
dW5pcXVlUHRyKSwgMik7CisKKyAgICBFWFBFQ1RfRVEodHJ1ZSwgbWFwLmNvbnRhaW5zKHB0cikp
OworfQorCitURVNUKFdURl9IYXNoTWFwLCBVbmlxdWVQdHJLZXlfR2V0VXNpbmdSYXdQb2ludGVy
KQoreworICAgIEhhc2hNYXA8c3RkOjp1bmlxdWVfcHRyPGludD4sIGludD4gbWFwOworCisgICAg
YXV0byB1bmlxdWVQdHIgPSBzdGQ6Om1ha2VfdW5pcXVlPGludD4oNSk7CisgICAgaW50KiBwdHIg
PSB1bmlxdWVQdHIuZ2V0KCk7CisgICAgbWFwLmFkZChXVEY6Om1vdmUodW5pcXVlUHRyKSwgMik7
CisKKyAgICBpbnQgdmFsdWUgPSBtYXAuZ2V0KHB0cik7CisgICAgRVhQRUNUX0VRKDIsIHZhbHVl
KTsKK30KKworVEVTVChXVEZfSGFzaE1hcCwgVW5pcXVlUHRyS2V5X1JlbW92ZVVzaW5nUmF3UG9p
bnRlcikKK3sKKyAgICBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpUZXN0aW5nU2NvcGUg
c2NvcGU7CisKKyAgICBIYXNoTWFwPHN0ZDo6dW5pcXVlX3B0cjxDb25zdHJ1Y3RvckRlc3RydWN0
b3JDb3VudGVyPiwgaW50PiBtYXA7CisKKyAgICBhdXRvIHVuaXF1ZVB0ciA9IHN0ZDo6bWFrZV91
bmlxdWU8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4oKTsKKyAgICBDb25zdHJ1Y3RvckRl
c3RydWN0b3JDb3VudGVyKiBwdHIgPSB1bmlxdWVQdHIuZ2V0KCk7CisgICAgbWFwLmFkZChXVEY6
Om1vdmUodW5pcXVlUHRyKSwgMik7CisKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVz
dHJ1Y3RvckNvdW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsKKyAgICBFWFBFQ1RfRVEoMHUsIENv
bnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3RydWN0aW9uQ291bnQpOworCisgICAgYm9v
bCByZXN1bHQgPSBtYXAucmVtb3ZlKHB0cik7CisgICAgRVhQRUNUX0VRKHRydWUsIHJlc3VsdCk7
CisKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmNvbnN0
cnVjdGlvbkNvdW50KTsKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNv
dW50ZXI6OmRlc3RydWN0aW9uQ291bnQpOworfQorCitURVNUKFdURl9IYXNoTWFwLCBVbmlxdWVQ
dHJLZXlfVGFrZVVzaW5nUmF3UG9pbnRlcikKK3sKKyAgICBDb25zdHJ1Y3RvckRlc3RydWN0b3JD
b3VudGVyOjpUZXN0aW5nU2NvcGUgc2NvcGU7CisKKyAgICBIYXNoTWFwPHN0ZDo6dW5pcXVlX3B0
cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPiwgaW50PiBtYXA7CisKKyAgICBhdXRvIHVu
aXF1ZVB0ciA9IHN0ZDo6bWFrZV91bmlxdWU8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4o
KTsKKyAgICBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyKiBwdHIgPSB1bmlxdWVQdHIuZ2V0
KCk7CisgICAgbWFwLmFkZChXVEY6Om1vdmUodW5pcXVlUHRyKSwgMik7CisKKyAgICBFWFBFQ1Rf
RVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsK
KyAgICBFWFBFQ1RfRVEoMHUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3RydWN0
aW9uQ291bnQpOworCisgICAgaW50IHJlc3VsdCA9IG1hcC50YWtlKHB0cik7CisgICAgRVhQRUNU
X0VRKDIsIHJlc3VsdCk7CisKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3Rv
ckNvdW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVj
dG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3RydWN0aW9uQ291bnQpOworfQorCiB9IC8vIG5hbWVz
cGFjZSBUZXN0V2ViS2l0QVBJCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9I
YXNoU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9I
YXNoU2V0LmNwcAkocmV2aXNpb24gMTczNzk3KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XVEYvSGFzaFNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDkgKzI1LDExIEBACiAKICNp
bmNsdWRlICJjb25maWcuaCIKIAorI2luY2x1ZGUgIkNvdW50ZXJzLmgiCiAjaW5jbHVkZSAiTW92
ZU9ubHkuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotCisjaW5jbHVkZSA8d3RmL093blB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBUZXN0V2ViS2l0
QVBJIHsKIApAQCAtMTE3LDQgKzExOSwxODAgQEAgVEVTVChXVEZfSGFzaFNldCwgTW92ZU9ubHkp
CiAgICAgICAgIEVYUEVDVF9UUlVFKHNlY29uZFNldC5jb250YWlucyhNb3ZlT25seShpICsgMSkp
KTsKIH0KIAorVEVTVChXVEZfSGFzaFNldCwgT3duUHRyS2V5KQoreworICAgIENvbnN0cnVjdG9y
RGVzdHJ1Y3RvckNvdW50ZXI6OlRlc3RpbmdTY29wZSBzY29wZTsKKworICAgIEhhc2hTZXQ8T3du
UHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+PiBzZXQ7CisKKyAgICBPd25QdHI8Q29u
c3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4gb3duUHRyID0gYWRvcHRQdHIobmV3IENvbnN0cnVj
dG9yRGVzdHJ1Y3RvckNvdW50ZXIpOworICAgIHNldC5hZGQoV1RGOjptb3ZlKG93blB0cikpOwor
CisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1
Y3Rpb25Db3VudCk7CisgICAgRVhQRUNUX0VRKDB1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3Vu
dGVyOjpkZXN0cnVjdGlvbkNvdW50KTsKKworICAgIHNldC5jbGVhcigpOworICAgIAorICAgIEVY
UEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291
bnQpOworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVz
dHJ1Y3Rpb25Db3VudCk7Cit9CisKK1RFU1QoV1RGX0hhc2hTZXQsIE93blB0cktleV9GaW5kVXNp
bmdSYXdQb2ludGVyKQoreworICAgIEhhc2hTZXQ8T3duUHRyPGludD4+IHNldDsKKworICAgIE93
blB0cjxpbnQ+IG93blB0ciA9IGFkb3B0UHRyKG5ldyBpbnQoNSkpOworICAgIGludCogcHRyID0g
b3duUHRyLmdldCgpOworICAgIHNldC5hZGQoV1RGOjptb3ZlKG93blB0cikpOworCisgICAgYXV0
byBpdCA9IHNldC5maW5kKHB0cik7CisgICAgQVNTRVJUX1RSVUUoaXQgIT0gc2V0LmVuZCgpKTsK
KyAgICBFWFBFQ1RfRVEocHRyLCBpdC0+Z2V0KCkpOworICAgIEVYUEVDVF9FUSg1LCAqaXQtPmdl
dCgpKTsKK30KKworVEVTVChXVEZfSGFzaFNldCwgT3duUHRyS2V5X0NvbnRhaW5zVXNpbmdSYXdQ
b2ludGVyKQoreworICAgIEhhc2hTZXQ8T3duUHRyPGludD4+IHNldDsKKworICAgIE93blB0cjxp
bnQ+IG93blB0ciA9IGFkb3B0UHRyKG5ldyBpbnQoNSkpOworICAgIGludCogcHRyID0gb3duUHRy
LmdldCgpOworICAgIHNldC5hZGQoV1RGOjptb3ZlKG93blB0cikpOworCisgICAgRVhQRUNUX0VR
KHRydWUsIHNldC5jb250YWlucyhwdHIpKTsKK30KKworVEVTVChXVEZfSGFzaFNldCwgT3duUHRy
S2V5X1JlbW92ZVVzaW5nUmF3UG9pbnRlcikKK3sKKyAgICBDb25zdHJ1Y3RvckRlc3RydWN0b3JD
b3VudGVyOjpUZXN0aW5nU2NvcGUgc2NvcGU7CisKKyAgICBIYXNoU2V0PE93blB0cjxDb25zdHJ1
Y3RvckRlc3RydWN0b3JDb3VudGVyPj4gc2V0OworCisgICAgT3duUHRyPENvbnN0cnVjdG9yRGVz
dHJ1Y3RvckNvdW50ZXI+IG93blB0ciA9IGFkb3B0UHRyKG5ldyBDb25zdHJ1Y3RvckRlc3RydWN0
b3JDb3VudGVyKTsKKyAgICBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyKiBwdHIgPSBvd25Q
dHIuZ2V0KCk7CisgICAgc2V0LmFkZChXVEY6Om1vdmUob3duUHRyKSk7CisKKyAgICBFWFBFQ1Rf
RVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsK
KyAgICBFWFBFQ1RfRVEoMHUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3RydWN0
aW9uQ291bnQpOworCisgICAgYm9vbCByZXN1bHQgPSBzZXQucmVtb3ZlKHB0cik7CisgICAgRVhQ
RUNUX0VRKHRydWUsIHJlc3VsdCk7CisKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVz
dHJ1Y3RvckNvdW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsKKyAgICBFWFBFQ1RfRVEoMXUsIENv
bnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3RydWN0aW9uQ291bnQpOworfQorCitURVNU
KFdURl9IYXNoU2V0LCBPd25QdHJLZXlfVGFrZVVzaW5nUmF3UG9pbnRlcikKK3sKKyAgICBDb25z
dHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpUZXN0aW5nU2NvcGUgc2NvcGU7CisKKyAgICBIYXNo
U2V0PE93blB0cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPj4gc2V0OworCisgICAgT3du
UHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+IG93blB0ciA9IGFkb3B0UHRyKG5ldyBD
b25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyKTsKKyAgICBDb25zdHJ1Y3RvckRlc3RydWN0b3JD
b3VudGVyKiBwdHIgPSBvd25QdHIuZ2V0KCk7CisgICAgc2V0LmFkZChXVEY6Om1vdmUob3duUHRy
KSk7CisKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmNv
bnN0cnVjdGlvbkNvdW50KTsKKyAgICBFWFBFQ1RfRVEoMHUsIENvbnN0cnVjdG9yRGVzdHJ1Y3Rv
ckNvdW50ZXI6OmRlc3RydWN0aW9uQ291bnQpOworCisgICAgYXV0byByZXN1bHQgPSBzZXQudGFr
ZShwdHIpOworICAgIEVYUEVDVF9FUShwdHIsIHJlc3VsdC5nZXQoKSk7CisKKyAgICBFWFBFQ1Rf
RVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsK
KyAgICBFWFBFQ1RfRVEoMHUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3RydWN0
aW9uQ291bnQpOworCisgICAgcmVzdWx0ID0gbnVsbHB0cjsKKworICAgIEVYUEVDVF9FUSgxdSwg
Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOworICAgIEVY
UEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3Vu
dCk7Cit9CisKK1RFU1QoV1RGX0hhc2hTZXQsIFVuaXF1ZVB0cktleSkKK3sKKyAgICBDb25zdHJ1
Y3RvckRlc3RydWN0b3JDb3VudGVyOjpUZXN0aW5nU2NvcGUgc2NvcGU7CisKKyAgICBIYXNoU2V0
PHN0ZDo6dW5pcXVlX3B0cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPj4gc2V0OworCisg
ICAgYXV0byB1bmlxdWVQdHIgPSBzdGQ6Om1ha2VfdW5pcXVlPENvbnN0cnVjdG9yRGVzdHJ1Y3Rv
ckNvdW50ZXI+KCk7CisgICAgc2V0LmFkZChXVEY6Om1vdmUodW5pcXVlUHRyKSk7CisKKyAgICBF
WFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmNvbnN0cnVjdGlvbkNv
dW50KTsKKyAgICBFWFBFQ1RfRVEoMHUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRl
c3RydWN0aW9uQ291bnQpOworCisgICAgc2V0LmNsZWFyKCk7CisKKyAgICBFWFBFQ1RfRVEoMXUs
IENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsKKyAgICBF
WFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3RydWN0aW9uQ291
bnQpOworfQorCitURVNUKFdURl9IYXNoU2V0LCBVbmlxdWVQdHJLZXlfRmluZFVzaW5nUmF3UG9p
bnRlcikKK3sKKyAgICBIYXNoU2V0PHN0ZDo6dW5pcXVlX3B0cjxpbnQ+PiBzZXQ7CisKKyAgICBh
dXRvIHVuaXF1ZVB0ciA9IHN0ZDo6bWFrZV91bmlxdWU8aW50Pig1KTsKKyAgICBpbnQqIHB0ciA9
IHVuaXF1ZVB0ci5nZXQoKTsKKyAgICBzZXQuYWRkKFdURjo6bW92ZSh1bmlxdWVQdHIpKTsKKwor
ICAgIGF1dG8gaXQgPSBzZXQuZmluZChwdHIpOworICAgIEFTU0VSVF9UUlVFKGl0ICE9IHNldC5l
bmQoKSk7CisgICAgRVhQRUNUX0VRKHB0ciwgaXQtPmdldCgpKTsKKyAgICBFWFBFQ1RfRVEoNSwg
Kml0LT5nZXQoKSk7Cit9CisKK1RFU1QoV1RGX0hhc2hTZXQsIFVuaXF1ZVB0cktleV9Db250YWlu
c1VzaW5nUmF3UG9pbnRlcikKK3sKKyAgICBIYXNoU2V0PHN0ZDo6dW5pcXVlX3B0cjxpbnQ+PiBz
ZXQ7CisKKyAgICBhdXRvIHVuaXF1ZVB0ciA9IHN0ZDo6bWFrZV91bmlxdWU8aW50Pig1KTsKKyAg
ICBpbnQqIHB0ciA9IHVuaXF1ZVB0ci5nZXQoKTsKKyAgICBzZXQuYWRkKFdURjo6bW92ZSh1bmlx
dWVQdHIpKTsKKworICAgIEVYUEVDVF9FUSh0cnVlLCBzZXQuY29udGFpbnMocHRyKSk7Cit9CisK
K1RFU1QoV1RGX0hhc2hTZXQsIFVuaXF1ZVB0cktleV9SZW1vdmVVc2luZ1Jhd1BvaW50ZXIpCit7
CisgICAgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6VGVzdGluZ1Njb3BlIHNjb3BlOwor
CisgICAgSGFzaFNldDxzdGQ6OnVuaXF1ZV9wdHI8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRl
cj4+IHNldDsKKworICAgIGF1dG8gdW5pcXVlUHRyID0gc3RkOjptYWtlX3VuaXF1ZTxDb25zdHJ1
Y3RvckRlc3RydWN0b3JDb3VudGVyPigpOworICAgIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50
ZXIqIHB0ciA9IHVuaXF1ZVB0ci5nZXQoKTsKKyAgICBzZXQuYWRkKFdURjo6bW92ZSh1bmlxdWVQ
dHIpKTsKKworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6
Y29uc3RydWN0aW9uQ291bnQpOworICAgIEVYUEVDVF9FUSgwdSwgQ29uc3RydWN0b3JEZXN0cnVj
dG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7CisKKyAgICBib29sIHJlc3VsdCA9IHNldC5y
ZW1vdmUocHRyKTsKKyAgICBFWFBFQ1RfRVEodHJ1ZSwgcmVzdWx0KTsKKworICAgIEVYUEVDVF9F
USgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOwor
ICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rp
b25Db3VudCk7Cit9CisKK1RFU1QoV1RGX0hhc2hTZXQsIFVuaXF1ZVB0cktleV9UYWtlVXNpbmdS
YXdQb2ludGVyKQoreworICAgIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OlRlc3RpbmdT
Y29wZSBzY29wZTsKKworICAgIEhhc2hTZXQ8c3RkOjp1bmlxdWVfcHRyPENvbnN0cnVjdG9yRGVz
dHJ1Y3RvckNvdW50ZXI+PiBzZXQ7CisKKyAgICBhdXRvIHVuaXF1ZVB0ciA9IHN0ZDo6bWFrZV91
bmlxdWU8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4oKTsKKyAgICBDb25zdHJ1Y3RvckRl
c3RydWN0b3JDb3VudGVyKiBwdHIgPSB1bmlxdWVQdHIuZ2V0KCk7CisgICAgc2V0LmFkZChXVEY6
Om1vdmUodW5pcXVlUHRyKSk7CisKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1
Y3RvckNvdW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsKKyAgICBFWFBFQ1RfRVEoMHUsIENvbnN0
cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3RydWN0aW9uQ291bnQpOworCisgICAgYXV0byBy
ZXN1bHQgPSBzZXQudGFrZShwdHIpOworICAgIEVYUEVDVF9FUShwdHIsIHJlc3VsdC5nZXQoKSk7
CisKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmNvbnN0
cnVjdGlvbkNvdW50KTsKKyAgICBFWFBFQ1RfRVEoMHUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNv
dW50ZXI6OmRlc3RydWN0aW9uQ291bnQpOworICAgIAorICAgIHJlc3VsdCA9IG51bGxwdHI7CisK
KyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmNvbnN0cnVj
dGlvbkNvdW50KTsKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50
ZXI6OmRlc3RydWN0aW9uQ291bnQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJ
Cg==
</data>
<flag name="review"
          id="263163"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>