<?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>152198</bug_id>
          
          <creation_ts>2015-12-11 16:03:40 -0800</creation_ts>
          <short_desc>B3-&gt;Air compare-branch fusion should fuse even if the result of the comparison is used more than once</short_desc>
          <delta_ts>2015-12-14 11:14:18 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>150279</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1148589</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-11 16:03:40 -0800</bug_when>
    <thetext>This code:

    cmp
    setXX
    movzx -&gt; put result in %res
    test %res, %res
    jnz
    ...
    test %res, %res
    jnz

is always worse than this code:

    cmp
    jXX
    ...
    cmp
    jXX

But our instruction selector emits the worse code because it&apos;s afraid of emitting the compare instruction more than once.  It&apos;s also afraid of duplicating loads.  The solution is:

- Don&apos;t be afraid of duplicating comparisons if you&apos;re emitting a branch, since for a shared comparison result, the branch will have to do a second comparison anyway.
- When we decide to match a shared comparison we could simply disable load fusion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1148747</commentid>
    <comment_count>1</comment_count>
      <attachid>267245</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-12 15:13:33 -0800</bug_when>
    <thetext>Created attachment 267245
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1148761</commentid>
    <comment_count>2</comment_count>
      <attachid>267249</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-12 18:46:38 -0800</bug_when>
    <thetext>Created attachment 267249
the patch

I&apos;m still writing tests but other than that, it&apos;s ready for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1148762</commentid>
    <comment_count>3</comment_count>
      <attachid>267250</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-12 18:48:29 -0800</bug_when>
    <thetext>Created attachment 267250
the patch

Rebased.  Still writing tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1148763</commentid>
    <comment_count>4</comment_count>
      <attachid>267251</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-12 18:50:41 -0800</bug_when>
    <thetext>Created attachment 267251
the patch

Rebased but without the DFGCommon.h change.  Still writing more tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1148764</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-12-12 18:53:38 -0800</bug_when>
    <thetext>Attachment 267251 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/testb3.cpp:5720:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5722:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5732:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5734:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5749:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5749:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5751:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5751:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5753:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5755:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5757:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5798:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5800:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5813:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5815:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5831:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5833:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5835:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5837:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5839:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5842:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5844:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5846:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5848:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5850:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
Total errors found: 25 in 6 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>1148876</commentid>
    <comment_count>6</comment_count>
      <attachid>267277</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-13 19:22:47 -0800</bug_when>
    <thetext>Created attachment 267277
the patch

Added more stuff, now I need to add more tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1148877</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-12-13 19:25:47 -0800</bug_when>
    <thetext>Attachment 267277 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/B3LowerToAir.cpp:993:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5724:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5726:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5736:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5738:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5753:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5753:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5755:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5755:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5757:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5759:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5761:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5802:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5804:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5817:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5819:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5835:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5837:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5839:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5841:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5843:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5846:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5848:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5850:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5852:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5854:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
Total errors found: 26 in 8 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>1148879</commentid>
    <comment_count>8</comment_count>
      <attachid>267278</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-13 19:38:51 -0800</bug_when>
    <thetext>Created attachment 267278
tests work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1148881</commentid>
    <comment_count>9</comment_count>
      <attachid>267280</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-13 20:26:34 -0800</bug_when>
    <thetext>Created attachment 267280
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1148882</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-12-13 20:27:47 -0800</bug_when>
    <thetext>Attachment 267280 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/B3LowerToAir.cpp:993:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5728:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5730:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5740:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5742:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5757:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5757:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5759:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5759:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5761:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5763:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5765:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5806:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5808:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5821:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5823:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5839:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5841:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5843:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5845:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5847:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5850:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5852:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5854:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5856:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5858:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
Total errors found: 26 in 7 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>1149004</commentid>
    <comment_count>11</comment_count>
      <attachid>267280</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-12-14 10:14:44 -0800</bug_when>
    <thetext>Comment on attachment 267280
the patch

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

Quick review, some comments:

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:917
&gt; +        // FusionResult prepareToFuse(value): Call this when you thing that you would like to fuse

typo: thing

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:1000
&gt;          // Chew through any negations. It&apos;s not strictly necessary for this to be a loop, but we like
&gt;          // to follow the rule that the instruction selector reduces strength whenever it doesn&apos;t
&gt;          // require making things more complicated.

Need update, the loop is no longer only about negation.

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:1598
&gt; +                appendUnOp&lt;ZeroExtend8To32, ZeroExtend8To32&gt;(m_value-&gt;child(0));

Shouldn&apos;t the second be ZeroExtend8To64?

The Intel doc is not super clear about what happens without the Rex byte here.

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:1603
&gt; +                appendUnOp&lt;ZeroExtend16To32, ZeroExtend16To32&gt;(m_value-&gt;child(0));

Ditto.

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:1607
&gt; +            if (m_value-&gt;child(1)-&gt;isInt(0xffffffff)) {

This is fishy, strength reduction should have simplified this case.

We don&apos;t want to repeat every case we have in ReduceStrength.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1149017</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-14 11:09:30 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; Comment on attachment 267280 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=267280&amp;action=review
&gt; 
&gt; Quick review, some comments:
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:917
&gt; &gt; +        // FusionResult prepareToFuse(value): Call this when you thing that you would like to fuse
&gt; 
&gt; typo: thing

Fixed.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:1000
&gt; &gt;          // Chew through any negations. It&apos;s not strictly necessary for this to be a loop, but we like
&gt; &gt;          // to follow the rule that the instruction selector reduces strength whenever it doesn&apos;t
&gt; &gt;          // require making things more complicated.
&gt; 
&gt; Need update, the loop is no longer only about negation.

It never was about negations, I meant &quot;inversions&quot; - both BitXor and Equal(_, 0) are inversions.  I&apos;ll change the comment.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:1598
&gt; &gt; +                appendUnOp&lt;ZeroExtend8To32, ZeroExtend8To32&gt;(m_value-&gt;child(0));
&gt; 
&gt; Shouldn&apos;t the second be ZeroExtend8To64?

No, that would be a waste of a REX byte.

&gt; 
&gt; The Intel doc is not super clear about what happens without the Rex byte
&gt; here.

32-bit operations zero-extend any registers that they def.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:1603
&gt; &gt; +                appendUnOp&lt;ZeroExtend16To32, ZeroExtend16To32&gt;(m_value-&gt;child(0));
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:1607
&gt; &gt; +            if (m_value-&gt;child(1)-&gt;isInt(0xffffffff)) {
&gt; 
&gt; This is fishy, strength reduction should have simplified this case.
&gt; 
&gt; We don&apos;t want to repeat every case we have in ReduceStrength.

I&apos;ll remove it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1149018</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-14 11:14:18 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/194039</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>267245</attachid>
            <date>2015-12-12 15:13:33 -0800</date>
            <delta_ts>2015-12-12 18:46:38 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>17688</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCShyZXZpc2lv
biAxOTM5OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODY5LDIwICs4NjksMTA2IEBAIHByaXZhdGU6CiAgICAgICAgIGNv
bnN0IENvbXBhcmVGbG9hdEZ1bmN0b3ImIGNvbXBhcmVGbG9hdCwgLy8gU2lnbmF0dXJlOiAoQXJn
IGRvdWJsZUNvbmQsIEFyZywgQXJnKSAtPiBJbnN0CiAgICAgICAgIGJvb2wgaW52ZXJ0ZWQgPSBm
YWxzZSkKICAgICB7CisgICAgICAgIC8vIE5PVEU6IFRoaXMgaXMgdG90YWxseSBoYXBweSB0byBt
YXRjaCBjb21wYXJpc29ucyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIGNvbXB1dGVkIGVsc2Vod2Vy
ZQorICAgICAgICAvLyBzaW5jZSBvbiBtb3N0IGFyY2hpdGVjdHVyZXMsIHRoZSBjb3N0IG9mIGJy
YW5jaGluZyBvbiBhIHByZXZpb3VzbHkgY29tcHV0ZWQgY29tcGFyaXNvbgorICAgICAgICAvLyBy
ZXN1bHQgaXMgYWxtb3N0IGFsd2F5cyBoaWdoZXIgdGhhbiBqdXN0IGRvaW5nIGFub3RoZXIgZnVz
ZWQgY29tcGFyZS9icmFuY2guIFRoZSBvbmx5IHRpbWUKKyAgICAgICAgLy8gaXQgY291bGQgYmUg
d29yc2UgaXMgaWYgd2UgaGF2ZSBhIGJpbmFyeSBjb21wYXJpc29uIGFuZCBib3RoIG9wZXJhbmRz
IGFyZSB2YXJpYWJsZXMgKG5vdAorICAgICAgICAvLyBjb25zdGFudHMpLCBhbmQgd2UgZW5jb3Vu
dGVyIHJlZ2lzdGVyIHByZXNzdXJlLiBFdmVuIGluIHRoaXMgY2FzZSwgZHVwbGljYXRpbmcgdGhl
IGNvbXBhcmUKKyAgICAgICAgLy8gc28gdGhhdCB3ZSBjYW4gZnVzZSBpdCB0byB0aGUgYnJhbmNo
IHdpbGwgYmUgbW9yZSBlZmZpY2llbnQgbW9zdCBvZiB0aGUgdGltZSwgc2luY2UKKyAgICAgICAg
Ly8gcmVnaXN0ZXIgcHJlc3N1cmUgaXMgbm90ICp0aGF0KiBjb21tb24uIEZvciB0aGlzIHJlYXNv
biwgdGhpcyBhbGdvcml0aG0gd2lsbCBhbHdheXMKKyAgICAgICAgLy8gZHVwbGljYXRlIHRoZSBj
b21wYXJpc29uLgorICAgICAgICAvLworICAgICAgICAvLyBIb3dldmVyLCB3ZSBjYW5ub3QgZHVw
bGljYXRlIGxvYWRzLiBUaGUgY2FuQmVJbnRlcm5hbCgpIG9uIGEgbG9hZCB3aWxsIGFzc3VtZSB0
aGF0IHdlCisgICAgICAgIC8vIGFscmVhZHkgdmFsaWRhdGVkIGNhbkJlSW50ZXJuYWwoKSBvbiBh
bGwgb2YgdGhlIHZhbHVlcyB0aGF0IGdvdCB1cyB0byB0aGUgbG9hZC4gU28sIHdlCisgICAgICAg
IC8vIGhhdmUgY2FsbHMgdG8gY2FuQmVJbnRlcm5hbCgpIG9ubHkgZm9yIHRoZSBwdXJwb3NlIG9m
IHRyYWNraW5nIHdoZXRoZXIgd2UgYXJlIHN0aWxsIGluCisgICAgICAgIC8vIGdvb2Qgc2hhcGUu
CisgICAgICAgIC8vCisgICAgICAgIC8vIFdlIGNvdWxkIGV2ZW4gaGF2ZSBhIGNoYWluIG9mIGNv
bXBhcmUgdmFsdWVzIHRoYXQgd2UgZnVzZSwgYW5kIGFueSBtZW1iZXIgb2YgdGhlIGNoYWluCisg
ICAgICAgIC8vIGNvdWxkIGJlIHNoYXJlZC4gT25jZSBhbnkgb2YgdGhlbSBhcmUgc2hhcmVkLCB0
aGVuIHRoZSBzaGFyZWQgb25lJ3MgdHJhbnNpdGl2ZSBjaGlsZHJlbgorICAgICAgICAvLyBjYW5u
b3QgYmUgbG9ja2VkIChpLmUuIGNvbW1pdEludGVybmFsKCkpLiBCdXQgaWYgbm9uZSBvZiB0aGVt
IGFyZSBzaGFyZWQsIHRoZW4gd2Ugd2FudCB0bworICAgICAgICAvLyBsb2NrIGFsbCBvZiB0aGVt
IGJlY2F1c2UgdGhhdCdzIGEgcHJlcmVxdWlzaXRlIHRvIGZ1c2luZyB0aGUgbG9hZHMgc28gdGhh
dCB0aGUgbG9hZHMgZG9uJ3QKKyAgICAgICAgLy8gZ2V0IGR1cGxpY2F0ZWQuIEZvciBleGFtcGxl
LCB3ZSBtaWdodCBoYXZlOiAKKyAgICAgICAgLy8KKyAgICAgICAgLy8gICAgIEB0bXAxID0gTGVz
c1RoYW4oQGEsIEBiKQorICAgICAgICAvLyAgICAgQHRtcDIgPSBFcXVhbChAdG1wMSwgMCkKKyAg
ICAgICAgLy8gICAgIEJyYW5jaChAdG1wMikKKyAgICAgICAgLy8KKyAgICAgICAgLy8gSWYgZWl0
aGVyIEBhIG9yIEBiIGFyZSBsb2FkcywgdGhlbiB3ZSB3YW50IHRvIGhhdmUgbG9ja2VkIEB0bXAx
IGFuZCBAdG1wMiBzbyB0aGF0IHRoZXkKKyAgICAgICAgLy8gZG9uJ3QgZW1pdCB0aGUgbG9hZHMg
YSBzZWNvbmQgdGltZS4gQnV0IGlmIHdlIGhhZCBhbm90aGVyIHVzZSBvZiBAdG1wMiwgdGhlbiB3
ZSBjYW5ub3QKKyAgICAgICAgLy8gbG9jayBAdG1wMSAob3IgQGEgb3IgQGIpIGJlY2F1c2UgdGhl
biB0aGUgc3Vic2VxdWVudCB1c2Ugb2YgQHRtcDIgd29uJ3Qgd29yayByaWdodC4KKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gQnV0IGlmIHdlIGRvbid0IGxvY2sgYW4gaW50ZXJuYWwgdmFsdWUsIHRo
ZW4gdGhpcyBpbnRlcm5hbCB2YWx1ZSBtYXkgaGF2ZSBhbHJlYWR5CisgICAgICAgIC8vIHNlcGFy
YXRlbHkgbG9ja2VkIGl0cyBjaGlsZHJlbi4gU28sIGlmIHdlJ3JlIG5vdCBsb2NraW5nIGEgdmFs
dWUgdGhlbiB3ZSBuZWVkIHRvIG1ha2Ugc3VyZQorICAgICAgICAvLyB0aGF0IGl0cyBjaGlsZHJl
biBhcmVuJ3QgbG9ja2VkLgorICAgICAgICBib29sIGNhbkNvbW1pdEludGVybmFsID0gdHJ1ZTsK
KworICAgICAgICBhdXRvIHByZXBhcmVUb0Z1c2UgPSBbJl0gKFZhbHVlKiB2YWx1ZSkgLT4gYm9v
bCB7CisgICAgICAgICAgICBpZiAodmFsdWUgPT0gbV92YWx1ZSkgeworICAgICAgICAgICAgICAg
IC8vIEl0J3Mgbm90IGFjdHVhbGx5IGludGVybmFsLiBJdCdzIHRoZSByb290IHZhbHVlLiBXZSdy
ZSBnb29kIHRvIGdvLgorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoY2FuQ29tbWl0SW50ZXJuYWwgJiYgY2FuQmVJbnRlcm5hbCh2
YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBhcmUgdGhlIG9ubHkgdXNlcnMgb2YgdGhp
cyB2YWx1ZS4gVGhpcyBhbHNvIG1lYW5zIHRoYXQgdGhlIHZhbHVlJ3MgY2hpbGRyZW4KKyAgICAg
ICAgICAgICAgICAvLyBjb3VsZCBub3QgaGF2ZSBiZWVuIGxvY2tlZCwgc2luY2Ugd2UgaGF2ZSBu
b3cgcHJvdmVkIHRoYXQgbV92YWx1ZSBkb21pbmF0ZXMgdmFsdWUKKyAgICAgICAgICAgICAgICAv
LyBpbiB0aGUgZGF0YSBmbG93IGdyYXBoLiBUbyBvbmx5IG90aGVyIHdheSB0byB2YWx1ZSBpcyBm
cm9tIGEgdXNlciBvZiBtX3ZhbHVlLiBJZgorICAgICAgICAgICAgICAgIC8vIHZhbHVlJ3MgY2hp
bGRyZW4gYXJlIHNoYXJlZCB3aXRoIG90aGVycywgdGhlbiB0aGV5IGNvdWxkIG5vdCBoYXZlIGJl
ZW4gbG9ja2VkCisgICAgICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGVpciB1c2UgY291bnQgaXMg
Z3JlYXRlciB0aGFuIDEuIElmIHRoZXkgYXJlIG9ubHkgdXNlZCBmcm9tIHZhbHVlLCB0aGVuCisg
ICAgICAgICAgICAgICAgLy8gaW4gb3JkZXIgZm9yIHZhbHVlJ3MgY2hpbGRyZW4gdG8gYmUgbG9j
a2VkLCB2YWx1ZSB3b3VsZCBhbHNvIGhhdmUgdG8gYmUgbG9ja2VkLAorICAgICAgICAgICAgICAg
IC8vIGFuZCB3ZSBqdXN0IHByb3ZlZCB0aGF0IGl0IHdhc24ndC4KKyAgICAgICAgICAgICAgICBj
b21taXRJbnRlcm5hbCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFdlJ3JlIGdvaW5nIHRvIHRyeSB0byBzaGFyZSB2
YWx1ZSB3aXRoIG90aGVycy4gSXQncyBwb3NzaWJsZSB0aGF0IHNvbWUgb3RoZXIgYmFzaWMKKyAg
ICAgICAgICAgIC8vIGJsb2NrIGhhZCBhbHJlYWR5IGVtaXR0ZWQgY29kZSBmb3IgdmFsdWUgYW5k
IHRoZW4gbWF0Y2hlZCBvdmVyIGl0cyBjaGlsZHJlbiBhbmQgdGhlbgorICAgICAgICAgICAgLy8g
bG9ja2VkIHRoZW0sIGluIHdoaWNoIGNhc2Ugd2UganVzdCB3YW50IHRvIHVzZSB2YWx1ZSBpbnN0
ZWFkIG9mIGR1cGxpY2F0aW5nIGl0LiBTbywgd2UKKyAgICAgICAgICAgIC8vIHZhbGlkYXRlIHRo
ZSBjaGlsZHJlbi4gTm90ZSB0aGF0IHRoaXMgb25seSBhcmlzZXMgaW4gbGluZWFyIGNoYWlucyBs
aWtlOgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vICAgICBCQiMxOgorICAgICAgICAg
ICAgLy8gICAgICAgICBAMSA9IEZvbyguLi4pCisgICAgICAgICAgICAvLyAgICAgICAgIEAyID0g
QmFyKEAxKQorICAgICAgICAgICAgLy8gICAgICAgICBKdW1wKCMyKQorICAgICAgICAgICAgLy8g
ICAgIEJCIzI6CisgICAgICAgICAgICAvLyAgICAgICAgIEAzID0gQmF6KEAyKQorICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgIC8vIE5vdGljZSBob3cgd2UgY291bGQgc3RhcnQgYnkgZ2VuZXJh
dGluZyBjb2RlIGZvciBCQiMxIGFuZCB0aGVuIGRlY2lkZSB0byBsb2NrIEAxIHdoZW4KKyAgICAg
ICAgICAgIC8vIGdlbmVyYXRpbmcgY29kZSBmb3IgQDIsIGlmIHdlIGhhdmUgc29tZSB3YXkgb2Yg
ZnVzaW5nIEJhciBhbmQgRm9vIGludG8gYSBzaW5nbGUKKyAgICAgICAgICAgIC8vIGluc3RydWN0
aW9uLiBUaGlzIGlzIGxlZ2FsLCBzaW5jZSBpbmRlZWQgQDEgb25seSBoYXMgb25lIHVzZXIuIFRo
ZSBmYWN0IHRoYXQgQDIgbm93CisgICAgICAgICAgICAvLyBoYXMgYSB0bXAgKGkuZS4gQDIgaXMg
cGlubmVkKSwgY2FuQmVJbnRlcm5hbChAMikgd2lsbCByZXR1cm4gZmFsc2UsIHdoaWNoIGJyaW5n
cyB1cworICAgICAgICAgICAgLy8gaGVyZS4gSW4gdGhhdCBjYXNlLCB3ZSBjYW5ub3QgbWF0Y2gg
b3ZlciBAMiBiZWNhdXNlIHRoZW4gd2UnZCBoaXQgYSBoYXphcmQgaWYgd2UgZW5kCisgICAgICAg
ICAgICAvLyB1cCBkZWNpZGluZyBub3QgdG8gZnVzZSBGb28gaW50byB0aGUgZnVzZWQgQmF6L0Jh
ci4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBIYXBwaWx5LCB0aGVyZSBhcmUgb25s
eSB0d28gcGxhY2VzIHdoZXJlIHRoaXMga2luZCBvZiBjaGlsZCB2YWxpZGF0aW9uIGhhcHBlbnMg
aXMgaW4KKyAgICAgICAgICAgIC8vIHJ1bGVzIHRoYXQgYWRtaXQgc2hhcmluZywgbGlrZSB0aGlz
IGFuZCBlZmZlY3RpdmVBZGRyZXNzKCkuCisgICAgICAgICAgICBmb3IgKFZhbHVlKiBjaGlsZCA6
IHZhbHVlLT5jaGlsZHJlbigpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fbG9ja2VkLmNvbnRh
aW5zKGNoaWxkKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAvLyBJdCdzIHNhZmUgdG8gc2hhcmUgdmFsdWUsIGJ1dCBzaW5j
ZSB3ZSdyZSBzaGFyaW5nLCBpdCBtZWFucyB0aGF0IHdlIGFyZW4ndCBsb2NraW5nIGl0LgorICAg
ICAgICAgICAgLy8gSWYgd2UgZG9uJ3QgbG9jayBpdCwgdGhlbiBmdXNpbmcgbG9hZHMgaXMgb2Zm
IGxpbWl0cyBhbmQgYWxsIG9mIHZhbHVlJ3MgY2hpbGRyZW4gd2lsbAorICAgICAgICAgICAgLy8g
aGF2ZSB0byBnbyB0aHJvdWdoIHRoZSBzaGFyaW5nIHBhdGggYXMgd2VsbC4KKyAgICAgICAgICAg
IGNhbkNvbW1pdEludGVybmFsID0gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9OworICAgICAgICAKICAgICAgICAgLy8gQ2hldyB0aHJvdWdo
IGFueSBuZWdhdGlvbnMuIEl0J3Mgbm90IHN0cmljdGx5IG5lY2Vzc2FyeSBmb3IgdGhpcyB0byBi
ZSBhIGxvb3AsIGJ1dCB3ZSBsaWtlCiAgICAgICAgIC8vIHRvIGZvbGxvdyB0aGUgcnVsZSB0aGF0
IHRoZSBpbnN0cnVjdGlvbiBzZWxlY3RvciByZWR1Y2VzIHN0cmVuZ3RoIHdoZW5ldmVyIGl0IGRv
ZXNuJ3QKICAgICAgICAgLy8gcmVxdWlyZSBtYWtpbmcgdGhpbmdzIG1vcmUgY29tcGxpY2F0ZWQu
CiAgICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgIGlmICghY2FuQmVJbnRlcm5hbCh2YWx1
ZSkgJiYgdmFsdWUgIT0gbV92YWx1ZSkKLSAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGJvb2wgc2hvdWxkSW52ZXJ0ID0KICAgICAgICAgICAgICAgICAodmFsdWUtPm9wY29kZSgp
ID09IEJpdFhvciAmJiB2YWx1ZS0+Y2hpbGQoMSktPmhhc0ludCgpICYmICh2YWx1ZS0+Y2hpbGQo
MSktPmFzSW50KCkgJiAxKSAmJiB2YWx1ZS0+Y2hpbGQoMCktPnJldHVybnNCb29sKCkpCiAgICAg
ICAgICAgICAgICAgfHwgKHZhbHVlLT5vcGNvZGUoKSA9PSBFcXVhbCAmJiB2YWx1ZS0+Y2hpbGQo
MSktPmlzSW50KDApKTsKICAgICAgICAgICAgIGlmICghc2hvdWxkSW52ZXJ0KQogICAgICAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBpZiAoIXByZXBhcmVUb0Z1c2UodmFsdWUpKQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCiAgICAgICAgICAgICB2YWx1ZSA9
IHZhbHVlLT5jaGlsZCgwKTsKICAgICAgICAgICAgIGludmVydGVkID0gIWludmVydGVkOwotICAg
ICAgICAgICAgY29tbWl0SW50ZXJuYWwodmFsdWUpOwogICAgICAgICB9CiAKICAgICAgICAgYXV0
byBjcmVhdGVSZWxDb25kID0gWyZdICgKQEAgLTkyNyw1MSArMTAxMyw1NCBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgpOwogICAgICAgICAgICAgICAgIH07CiAK
LSAgICAgICAgICAgICAgICAvLyBGaXJzdCBoYW5kbGUgY29tcGFyZXMgdGhhdCBpbnZvbHZlIGZl
d2VyIGJpdHMgdGhhbiBCMydzIHR5cGUgc3lzdGVtIHN1cHBvcnRzLgotICAgICAgICAgICAgICAg
IC8vIFRoaXMgaXMgcHJldHR5IGltcG9ydGFudC4gRm9yIGV4YW1wbGUsIHdlIHdhbnQgdGhpcyB0
byBiZSBhIHNpbmdsZSBpbnN0cnVjdGlvbjoKLSAgICAgICAgICAgICAgICAvLwotICAgICAgICAg
ICAgICAgIC8vICAgICBAMSA9IExvYWQ4UyguLi4pCi0gICAgICAgICAgICAgICAgLy8gICAgIEAy
ID0gQ29uc3QzMiguLi4pCi0gICAgICAgICAgICAgICAgLy8gICAgIEAzID0gTGVzc1RoYW4oQDEs
IEAyKQotICAgICAgICAgICAgICAgIC8vICAgICBCcmFuY2goQDMpCisgICAgICAgICAgICAgICAg
aWYgKGNhbkNvbW1pdEludGVybmFsKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZpcnN0IGhh
bmRsZSBjb21wYXJlcyB0aGF0IGludm9sdmUgZmV3ZXIgYml0cyB0aGFuIEIzJ3MgdHlwZSBzeXN0
ZW0gc3VwcG9ydHMuCisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgcHJldHR5IGltcG9y
dGFudC4gRm9yIGV4YW1wbGUsIHdlIHdhbnQgdGhpcyB0byBiZSBhIHNpbmdsZQorICAgICAgICAg
ICAgICAgICAgICAvLyBpbnN0cnVjdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAg
ICAgICAgICAgICAgICAgLy8gICAgIEAxID0gTG9hZDhTKC4uLikKKyAgICAgICAgICAgICAgICAg
ICAgLy8gICAgIEAyID0gQ29uc3QzMiguLi4pCisgICAgICAgICAgICAgICAgICAgIC8vICAgICBA
MyA9IExlc3NUaGFuKEAxLCBAMikKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIEJyYW5jaChA
MykKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAocmVsQ29uZC5pc1NpZ25l
ZENvbmQoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlDb21w
YXJlTG9hZEltbShBcmc6OldpZHRoOCwgTG9hZDhTLCBBcmc6OlNpZ25lZCkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHJlbENvbmQuaXNTaWduZWRDb25kKCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeUNvbXBhcmVMb2FkSW1tKEFyZzo6V2lkdGg4
LCBMb2FkOFMsIEFyZzo6U2lnbmVkKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgaWYgKHJlbENvbmQuaXNVbnNpZ25lZENvbmQoKSkgewotICAgICAgICAgICAg
ICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlDb21wYXJlTG9hZEltbShBcmc6OldpZHRoOCwg
TG9hZDhaLCBBcmc6OlVuc2lnbmVkKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAocmVsQ29u
ZC5pc1Vuc2lnbmVkQ29uZCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCBy
ZXN1bHQgPSB0cnlDb21wYXJlTG9hZEltbShBcmc6OldpZHRoOCwgTG9hZDhaLCBBcmc6OlVuc2ln
bmVkKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAg
ICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAocmVsQ29uZC5pc1NpZ25lZENv
bmQoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlDb21wYXJl
TG9hZEltbShBcmc6OldpZHRoMTYsIExvYWQxNlMsIEFyZzo6U2lnbmVkKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBpZiAocmVsQ29uZC5pc1NpZ25lZENvbmQoKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5Q29tcGFyZUxvYWRJbW0oQXJnOjpXaWR0aDE2
LCBMb2FkMTZTLCBBcmc6OlNpZ25lZCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIGlmIChyZWxDb25kLmlzVW5zaWduZWRDb25kKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5Q29tcGFyZUxvYWRJbW0oQXJnOjpXaWR0aDE2
LCBMb2FkMTZaLCBBcmc6OlVuc2lnbmVkKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlbENv
bmQuaXNVbnNpZ25lZENvbmQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEluc3Qg
cmVzdWx0ID0gdHJ5Q29tcGFyZUxvYWRJbW0oQXJnOjpXaWR0aDE2LCBMb2FkMTZaLCBBcmc6OlVu
c2lnbmVkKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gTm93IGhhbmRsZSBj
b21wYXJlcyB0aGF0IGludm9sdmUgYSBsb2FkIGFuZCBhbiBpbW1lZGlhdGUuCisKKyAgICAgICAg
ICAgICAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCA9IEFyZzo6d2lkdGhGb3JCM1R5cGUodmFsdWUt
PmNoaWxkKDApLT50eXBlKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQg
PSB0cnlDb21wYXJlTG9hZEltbSh3aWR0aCwgTG9hZCwgQXJnOjpTaWduZWQpKQogICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgICAgICAvLyBOb3cgaGFuZGxlIGNvbXBhcmVzIHRoYXQgaW52b2x2ZSBhIGxvYWQgYW5k
IGFuIGltbWVkaWF0ZS4KKyAgICAgICAgICAgICAgICAgICAgLy8gTm93IGhhbmRsZSBjb21wYXJl
cyB0aGF0IGludm9sdmUgYSBsb2FkLiBJdCdzIG5vdCBvYnZpb3VzIHRoYXQgaXQncyBiZXR0ZXIg
dG8KKyAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIHRoaXMgYmVmb3JlIHRoZSBpbW1lZGlh
dGUgY2FzZXMgb3Igbm90LiBQcm9iYWJseSBkb2Vzbid0IG1hdHRlci4KIAotICAgICAgICAgICAg
ICAgIEFyZzo6V2lkdGggd2lkdGggPSBBcmc6OndpZHRoRm9yQjNUeXBlKHZhbHVlLT5jaGlsZCgw
KS0+dHlwZSgpKTsKLSAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlDb21wYXJl
TG9hZEltbSh3aWR0aCwgTG9hZCwgQXJnOjpTaWduZWQpKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotCi0gICAgICAgICAgICAgICAgLy8gTm93IGhhbmRsZSBjb21wYXJlcyB0
aGF0IGludm9sdmUgYSBsb2FkLiBJdCdzIG5vdCBvYnZpb3VzIHRoYXQgaXQncyBiZXR0ZXIgdG8K
LSAgICAgICAgICAgICAgICAvLyBoYW5kbGUgdGhpcyBiZWZvcmUgdGhlIGltbWVkaWF0ZSBjYXNl
cyBvciBub3QuIFByb2JhYmx5IGRvZXNuJ3QgbWF0dGVyLgotCi0gICAgICAgICAgICAgICAgaWYg
KEluc3QgcmVzdWx0ID0gdHJ5Q29tcGFyZSh3aWR0aCwgbG9hZFByb21pc2UobGVmdCksIHRtcFBy
b21pc2UocmlnaHQpKSkgewotICAgICAgICAgICAgICAgICAgICBjb21taXRJbnRlcm5hbChsZWZ0
KTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeUNvbXBhcmUod2lkdGgs
IGxvYWRQcm9taXNlKGxlZnQpLCB0bXBQcm9taXNlKHJpZ2h0KSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbW1pdEludGVybmFsKGxlZnQpOworICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeUNvbXBhcmUod2lkdGgsIHRtcFBy
b21pc2UobGVmdCksIGxvYWRQcm9taXNlKHJpZ2h0KSkpIHsKLSAgICAgICAgICAgICAgICAgICAg
Y29tbWl0SW50ZXJuYWwocmlnaHQpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlDb21wYXJlKHdpZHRo
LCB0bXBQcm9taXNlKGxlZnQpLCBsb2FkUHJvbWlzZShyaWdodCkpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjb21taXRJbnRlcm5hbChyaWdodCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICAgICAgLy8gTm93IGhhbmRsZSBjb21wYXJlcyB0aGF0IGludm9sdmUg
YW4gaW1tZWRpYXRlIGFuZCBhIHRtcC4KQEAgLTEwNTgsMzkgKzExNDcsNDEgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoKTsKICAgICAgICAgICAgICAgICB9Owog
Ci0gICAgICAgICAgICAgICAgLy8gRmlyc3QgaGFuZGxlIHRlc3QncyB0aGF0IGludm9sdmUgZmV3
ZXIgYml0cyB0aGFuIEIzJ3MgdHlwZSBzeXN0ZW0gc3VwcG9ydHMuCi0KLSAgICAgICAgICAgICAg
ICBpZiAoSW5zdCByZXN1bHQgPSB0cnlUZXN0TG9hZEltbShBcmc6OldpZHRoOCwgTG9hZDhaKSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgICAgICAgICAgICAgIGlm
IChJbnN0IHJlc3VsdCA9IHRyeVRlc3RMb2FkSW1tKEFyZzo6V2lkdGg4LCBMb2FkOFMpKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgICAgICAgICAgICAgaWYgKElu
c3QgcmVzdWx0ID0gdHJ5VGVzdExvYWRJbW0oQXJnOjpXaWR0aDE2LCBMb2FkMTZaKSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICBpZiAoY2FuQ29t
bWl0SW50ZXJuYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRmlyc3QgaGFuZGxlIHRlc3Qn
cyB0aGF0IGludm9sdmUgZmV3ZXIgYml0cyB0aGFuIEIzJ3MgdHlwZSBzeXN0ZW0gc3VwcG9ydHMu
CiAKLSAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlUZXN0TG9hZEltbShBcmc6
OldpZHRoMTYsIExvYWQxNlMpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owot
Ci0gICAgICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0ZXN0J3MgdGhhdCBpbnZvbHZlIGEgbG9h
ZCBhbmQgYW4gaW1tZWRpYXRlLiBOb3RlIHRoYXQgaW1tZWRpYXRlcyBhcmUKLSAgICAgICAgICAg
ICAgICAvLyAzMi1iaXQsIGFuZCB3ZSB3YW50IHplcm8tZXh0ZW5zaW9uLiBIZW5jZSwgdGhlIGlt
bWVkaWF0ZSBmb3JtIGlzIGNvbXBpbGVkIGFzIGEKLSAgICAgICAgICAgICAgICAvLyAzMi1iaXQg
dGVzdC4gTm90ZSB0aGF0IHRoaXMgc3BpdHMgb24gdGhlIGdyYXZlIG9mIGluZmVyaW9yIGVuZGlh
bnMsIHN1Y2ggYXMgdGhlCi0gICAgICAgICAgICAgICAgLy8gYmlnIG9uZS4KLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlUZXN0TG9hZEltbShB
cmc6OldpZHRoMzIsIExvYWQpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owot
Ci0gICAgICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0ZXN0J3MgdGhhdCBpbnZvbHZlIGEgbG9h
ZC4KLQotICAgICAgICAgICAgICAgIEFyZzo6V2lkdGggd2lkdGggPSBBcmc6OndpZHRoRm9yQjNU
eXBlKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpKTsKLSAgICAgICAgICAgICAgICBpZiAoSW5zdCBy
ZXN1bHQgPSB0cnlUZXN0KHdpZHRoLCBsb2FkUHJvbWlzZShsZWZ0KSwgdG1wUHJvbWlzZShyaWdo
dCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKGxlZnQpOwotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5VGVzdExvYWRJbW0oQXJnOjpXaWR0aDgs
IExvYWQ4WikpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5
VGVzdExvYWRJbW0oQXJnOjpXaWR0aDgsIExvYWQ4UykpCisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5VGVzdExvYWRJbW0oQXJnOjpXaWR0aDE2LCBMb2FkMTZa
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlUZXN0TG9h
ZEltbShBcmc6OldpZHRoMTYsIExvYWQxNlMpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKIAotICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeVRlc3Qo
d2lkdGgsIHRtcFByb21pc2UobGVmdCksIGxvYWRQcm9taXNlKHJpZ2h0KSkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwocmlnaHQpOwotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICAvLyBOb3cgaGFuZGxlIHRlc3QncyB0
aGF0IGludm9sdmUgYSBsb2FkIGFuZCBhbiBpbW1lZGlhdGUuIE5vdGUgdGhhdCBpbW1lZGlhdGVz
CisgICAgICAgICAgICAgICAgICAgIC8vIGFyZSAzMi1iaXQsIGFuZCB3ZSB3YW50IHplcm8tZXh0
ZW5zaW9uLiBIZW5jZSwgdGhlIGltbWVkaWF0ZSBmb3JtIGlzIGNvbXBpbGVkCisgICAgICAgICAg
ICAgICAgICAgIC8vIGFzIGEgMzItYml0IHRlc3QuIE5vdGUgdGhhdCB0aGlzIHNwaXRzIG9uIHRo
ZSBncmF2ZSBvZiBpbmZlcmlvciBlbmRpYW5zLCBzdWNoCisgICAgICAgICAgICAgICAgICAgIC8v
IGFzIHRoZSBiaWcgb25lLgorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5VGVzdExvYWRJbW0oQXJnOjpXaWR0aDMyLCBMb2FkKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBOb3cgaGFuZGxlIHRlc3QncyB0aGF0IGludm9s
dmUgYSBsb2FkLgorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgQXJn
OjpXaWR0aCB3aWR0aCA9IEFyZzo6d2lkdGhGb3JCM1R5cGUodmFsdWUtPmNoaWxkKDApLT50eXBl
KCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlUZXN0KHdpZHRo
LCBsb2FkUHJvbWlzZShsZWZ0KSwgdG1wUHJvbWlzZShyaWdodCkpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjb21taXRJbnRlcm5hbChsZWZ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeVRlc3Qod2lkdGgs
IHRtcFByb21pc2UobGVmdCksIGxvYWRQcm9taXNlKHJpZ2h0KSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbW1pdEludGVybmFsKHJpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgICAgICAvLyBOb3cgaGFuZGxlIHRlc3QncyB0aGF0IGludm9sdmUgYW4g
aW1tZWRpYXRlIGFuZCBhIHRtcC4KQEAgLTExMTMsNyArMTIwNCw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH07CiAKLSAgICAgICAgaWYgKGNhbkJlSW50ZXJuYWwodmFsdWUp
IHx8IHZhbHVlID09IG1fdmFsdWUpIHsKKyAgICAgICAgaWYgKHByZXBhcmVUb0Z1c2UodmFsdWUp
KSB7CiAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSBhdHRlbXB0RnVzZWQoKSkgewogICAg
ICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKHZhbHVlKTsKICAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHJldmlzaW9u
IDE5Mzk5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MjM0LDYgKzUyMzQsNzAgQEAgdm9pZCB0ZXN0Q2hlY2tNZWdhQ29tYm8oKQog
ICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAmdmFsdWUgLSAyLCAxKSA9PSA0Mik7CiB9CiAK
K3ZvaWQgdGVzdENoZWNrVHdvTWVnYUNvbWJvcygpCit7CisgICAgUHJvY2VkdXJlIHByb2M7Cisg
ICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBWYWx1ZSogYmFzZSA9
IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIwKTsKKyAgICBWYWx1ZSogaW5kZXggPSByb290LT5hcHBlbmROZXc8VmFs
dWU+KAorICAgICAgICBwcm9jLCBaRXh0MzIsIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBl
bmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAg
ICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBH
UFJJbmZvOjphcmd1bWVudEdQUjEpKSk7CisKKyAgICBWYWx1ZSogcHRyID0gcm9vdC0+YXBwZW5k
TmV3PFZhbHVlPigKKyAgICAgICAgcHJvYywgQWRkLCBPcmlnaW4oKSwgYmFzZSwKKyAgICAgICAg
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFNobCwgT3JpZ2luKCks
IGluZGV4LAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIDEpKSk7CisKKyAgICBWYWx1ZSogcHJlZGljYXRlID0gcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPigKKyAgICAgICAgcHJvYywgTGVzc1RoYW4sIE9yaWdpbigpLAorICAgICAgICByb290
LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIExvYWQ4UywgT3JpZ2luKCksIHB0ciksCisg
ICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCA0Mikp
OworICAgIAorICAgIENoZWNrVmFsdWUqIGNoZWNrID0gcm9vdC0+YXBwZW5kTmV3PENoZWNrVmFs
dWU+KHByb2MsIENoZWNrLCBPcmlnaW4oKSwgcHJlZGljYXRlKTsKKyAgICBjaGVjay0+c2V0R2Vu
ZXJhdG9yKAorICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hS
ZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1z
LnNpemUoKSA9PSAxKTsKKworICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgYWx3YXlzIHdvcmsg
YmVjYXVzZSBhIGZ1bmN0aW9uIHRoaXMgc2ltcGxlIHNob3VsZCBuZXZlciBoYXZlIGNhbGxlZQor
ICAgICAgICAgICAgLy8gc2F2ZXMuCisgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMig0MiksIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgICAg
IGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOworICAgICAgICAgICAgaml0LnJldCgpOworICAg
ICAgICB9KTsKKyAgICBDaGVja1ZhbHVlKiBjaGVjazIgPSByb290LT5hcHBlbmROZXc8Q2hlY2tW
YWx1ZT4ocHJvYywgQ2hlY2ssIE9yaWdpbigpLCBwcmVkaWNhdGUpOworICAgIGNoZWNrMi0+c2V0
R2VuZXJhdG9yKAorICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0
Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgQ0hFQ0socGFy
YW1zLnNpemUoKSA9PSAxKTsKKworICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgYWx3YXlzIHdv
cmsgYmVjYXVzZSBhIGZ1bmN0aW9uIHRoaXMgc2ltcGxlIHNob3VsZCBuZXZlciBoYXZlIGNhbGxl
ZQorICAgICAgICAgICAgLy8gc2F2ZXMuCisgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMig0MyksIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAg
ICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOworICAgICAgICAgICAgaml0LnJldCgpOwor
ICAgICAgICB9KTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAg
cHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIDApKTsKKworICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisKKyAg
ICBpbnQ4X3QgdmFsdWU7CisgICAgdmFsdWUgPSA0MjsKKyAgICBDSEVDSyhpbnZva2U8aW50Pigq
Y29kZSwgJnZhbHVlIC0gMiwgMSkgPT0gMCk7CisgICAgdmFsdWUgPSAxMjc7CisgICAgQ0hFQ0so
aW52b2tlPGludD4oKmNvZGUsICZ2YWx1ZSAtIDIsIDEpID09IDApOworICAgIHZhbHVlID0gNDE7
CisgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsICZ2YWx1ZSAtIDIsIDEpID09IDQyKTsKKyAg
ICB2YWx1ZSA9IDA7CisgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsICZ2YWx1ZSAtIDIsIDEp
ID09IDQyKTsKKyAgICB2YWx1ZSA9IC0xOworICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAm
dmFsdWUgLSAyLCAxKSA9PSA0Mik7Cit9CisKIHZvaWQgdGVzdENoZWNrQWRkSW1tKCkKIHsKICAg
ICBQcm9jZWR1cmUgcHJvYzsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>267249</attachid>
            <date>2015-12-12 18:46:38 -0800</date>
            <delta_ts>2015-12-12 18:48:29 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>31358</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk0MDEyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBA
CisyMDE1LTEyLTEyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QjMtPkFpciBjb21wYXJlLWJyYW5jaCBmdXNpb24gc2hvdWxkIGZ1c2UgZXZlbiBpZiB0aGUgcmVz
dWx0IG9mIHRoZSBjb21wYXJpc29uIGlzIHVzZWQgbW9yZSB0aGFuIG9uY2UKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjE5OAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElmIHdlIGhhdmUgYSBjb21wYXJp
c29uIG9wZXJhdGlvbiB0aGF0IGlzIGJyYW5jaGVkIG9uIGZyb20gbXVsdGlwbGUgcGxhY2VzLCB0
aGVuIHdlIHdlcmUKKyAgICAgICAgcHJldmlvdXNseSBleGVjdXRpbmcgdGhlIGNvbXBhcmlzb24g
dG8gZ2V0IGEgYm9vbGVhbiByZXN1bHQgaW4gYSByZWdpc3RlciBhbmQgdGhlbiB3ZSB3ZXJlCisg
ICAgICAgIHRlc3RpbmcvYnJhbmNoaW5nIG9uIHRoYXQgcmVnaXN0ZXIgaW4gbXVsdGlwbGUgcGxh
Y2VzLiBUaGlzIGlzIGFjdHVhbGx5IGxlc3MgZWZmaWNpZW50IHRoYW4KKyAgICAgICAganVzdCBm
dXNpbmcgdGhlIGNvbXBhcmUvYnJhbmNoIG11bHRpcGxlIHRpbWVzLCBldmVuIHRob3VnaCB0aGlz
IG1lYW5zIHRoYXQgdGhlIGNvbXBhcmlzb24KKyAgICAgICAgZXhlY3V0ZXMgbXVsdGlwbGUgdGlt
ZXMuIFRoaXMgd291bGQgb25seSBiZSBiYWQgaWYgdGhlIGNvbXBhcmlzb24gZnVzZWQgbG9hZHMg
bXVsdGlwbGUgdGltZXMsCisgICAgICAgIHNpbmNlIGR1cGxpY2F0aW5nIGxvYWRzIGlzIGJvdGgg
d3JvbmcgYW5kIGluZWZmaWNpZW50LiBTbywgdGhpcyBhZGRzIHRoZSBub3Rpb24gb2Ygc2hhcmlu
ZyB0bworICAgICAgICBjb21wYXJlL2JyYW5jaCBmdXNpb24uIElmIGEgY29tcGFyZSBpcyBzaGFy
ZWQgYnkgbXVsdGlwbGUgYnJhbmNoZXMsIHRoZW4gd2UgcmVmdXNlIHRvIGZ1c2UKKyAgICAgICAg
dGhlIGxvYWQuCisKKyAgICAgICAgVG8gd3JpdGUgdGhlIHRlc3QsIEkgbmVlZGVkIHRvIHplcm8t
ZXh0ZW5kIDggdG8gMzIuIEluIHRoZSBwcm9jZXNzIG9mIHRoaW5raW5nIGFib3V0IGhvdyB0bwor
ICAgICAgICBkbyB0aGlzLCBJIHJlYWxpemVkIHRoYXQgd2UgbmVlZGVkIGxvd2VyaW5ncyBmb3Ig
U0V4dDgvU0V4dDE2LiBBbmQgSSByZWFsaXplZCB0aGF0IHRoZQorICAgICAgICBsb3dlcmluZ3Mg
Zm9yIHRoZSBvdGhlciBleHRlbnNpb24gb3BlcmF0aW9ucyB3ZXJlIG5vdCBmdWxseSBmbGVzaGVk
IG91dDsgZm9yIGV4YW1wbGUgdGhleQorICAgICAgICB3ZXJlIGluY2FwYWJsZSBvZiBsb2FkIGZ1
c2lvbi4gVGhpcyBwYXRjaCBmaXhlcyB0aGlzIGFuZCBhbHNvIGFkZHMgc29tZSBzbWFydCBzdHJl
bmd0aAorICAgICAgICByZWR1Y3Rpb25zIGZvciBCaXRBbmQoQHgsIDB4ZmYvMHhmZmZmLzB4ZmZm
ZmZmZmYpIC0gYWxsIG9mIHdoaWNoIHNob3VsZCBiZSBsb3dlcmVkIHRvIGEgemVybworICAgICAg
ICBleHRlbnNpb24uCisKKyAgICAgICAgVGhpcyBpcyBhIGJpZyB3aW4gb24gYXNtLmpzIGNvZGUu
IEl0J3Mgbm90IGVub3VnaCB0byBicmlkZ2UgdGhlIGdhcCB0byBMTFZNLCBidXQgaXQncyBhIGh1
Z2UKKyAgICAgICAgc3RlcCBpbiB0aGF0IGRpcmVjdGlvbi4KKworICAgICAgICAqIGFzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
clg4NkNvbW1vbjo6bG9hZDhTaWduZWRFeHRlbmRUbzMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9B
c3NlbWJsZXJYODZDb21tb246Onplcm9FeHRlbmQ4VG8zMik6CisgICAgICAgIChKU0M6Ok1hY3Jv
QXNzZW1ibGVyWDg2Q29tbW9uOjpzaWduRXh0ZW5kOFRvMzIpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlclg4NkNvbW1vbjo6bG9hZDE2KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJYODZDb21tb246OmxvYWQxNlNpZ25lZEV4dGVuZFRvMzIpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlclg4NkNvbW1vbjo6emVyb0V4dGVuZDE2VG8zMik6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpzaWduRXh0ZW5kMTZUbzMyKToKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJYODZDb21tb246OnN0b3JlMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKToK
KyAgICAgICAgKiBhc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6Olg4NkFz
c2VtYmxlcjo6bW92emJsX3JyKToKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjptb3ZzYmxf
cnIpOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6Om1vdnp3bF9ycik6CisgICAgICAgIChK
U0M6Olg4NkFzc2VtYmxlcjo6bW92c3dsX3JyKToKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVy
OjpjbW92bF9ycik6CisgICAgICAgICogYjMvQjNMb3dlclRvQWlyLmNwcDoKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6Y3JlYXRlR2VuZXJpY0NvbXBhcmUpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpsb3dlcik6CisgICAgICAgICogYjMvYWlyL0Fpck9w
Y29kZS5vcGNvZGVzOgorICAgICAgICAqIGIzL3Rlc3RiMy5jcHA6CisgICAgICAgIChKU0M6OkIz
Ojp0ZXN0Q2hlY2tNZWdhQ29tYm8pOgorICAgICAgICAoSlNDOjpCMzo6dGVzdENoZWNrVHdvTWVn
YUNvbWJvcyk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Q2hlY2tUd29Ob25SZWR1bmRhbnRNZWdh
Q29tYm9zKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RDaGVja0FkZEltbSk6CisgICAgICAgIChK
U0M6OkIzOjpydW4pOgorCiAyMDE1LTEyLTEyICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW5A
d2Via2l0Lm9yZz4KIAogICAgICAgICBbSlNDXSBBZGQgbG93ZXJpbmcgZm9yIEIzJ3MgU3RvcmU4
IG9wY29kZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlclg4NkNvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAkocmV2aXNpb24gMTkzOTkyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC02NDQsNiArNjQ0LDE2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IG1fYXNzZW1ibGVyLm1vdnNibF9tcihhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBkZXN0
KTsKICAgICB9CisKKyAgICB2b2lkIHplcm9FeHRlbmQ4VG8zMihSZWdpc3RlcklEIHNyYywgUmVn
aXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92emJsX3JyKHNyYywg
ZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2lnbkV4dGVuZDhUbzMyKFJlZ2lzdGVySUQg
c3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZzYmxf
cnIoc3JjLCBkZXN0KTsKKyAgICB9CiAgICAgCiAgICAgdm9pZCBsb2FkMTYoQmFzZUluZGV4IGFk
ZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CkBAIC02NjUsNiArNjc1LDE2IEBAIHB1Ymxp
YzoKICAgICAgICAgbV9hc3NlbWJsZXIubW92c3dsX21yKGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNz
LmJhc2UsIGRlc3QpOwogICAgIH0KIAorICAgIHZvaWQgemVyb0V4dGVuZDE2VG8zMihSZWdpc3Rl
cklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92
endsX3JyKHNyYywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2lnbkV4dGVuZDE2VG8z
MihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubW92c3dsX3JyKHNyYywgZGVzdCk7CisgICAgfQorICAgIAogICAgIERhdGFMYWJlbDMy
IHN0b3JlMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGFk
ZHJlc3MpCiAgICAgewogICAgICAgICBwYWRCZWZvcmVQYXRjaCgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCShyZXZpc2lvbiAxOTM5
OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzE4LDYgKzE3MTgsMjEgQEAgcHVibGljOgogICAgICAgICBtX2Zv
cm1hdHRlci50d29CeXRlT3A4KE9QMl9NT1ZaWF9HdkViLCBkc3QsIHNyYyk7CiAgICAgfQogCisg
ICAgdm9pZCBtb3ZzYmxfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsK
KyAgICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wOChPUDJfTU9WU1hfR3ZFYiwgZHN0LCBzcmMp
OworICAgIH0KKworICAgIHZvaWQgbW92endsX3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklE
IGRzdCkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcDgoT1AyX01PVlpYX0d2
RXcsIGRzdCwgc3JjKTsKKyAgICB9CisKKyAgICB2b2lkIG1vdnN3bF9ycihSZWdpc3RlcklEIHNy
YywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3A4
KE9QMl9NT1ZTWF9HdkV3LCBkc3QsIHNyYyk7CisgICAgfQorCiAgICAgdm9pZCBjbW92bF9ycihD
b25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKICAg
ICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wKGNtb3ZjYyhjb25kKSwgZHN0LCBzcmMpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHJldmlzaW9uIDE5
Mzk5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NjksMjAgKzg2OSwxMjggQEAgcHJpdmF0ZToKICAgICAgICAgY29uc3Qg
Q29tcGFyZUZsb2F0RnVuY3RvciYgY29tcGFyZUZsb2F0LCAvLyBTaWduYXR1cmU6IChBcmcgZG91
YmxlQ29uZCwgQXJnLCBBcmcpIC0+IEluc3QKICAgICAgICAgYm9vbCBpbnZlcnRlZCA9IGZhbHNl
KQogICAgIHsKKyAgICAgICAgLy8gTk9URTogVGhpcyBpcyB0b3RhbGx5IGhhcHB5IHRvIG1hdGNo
IGNvbXBhcmlzb25zIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gY29tcHV0ZWQgZWxzZXdoZXJlCisg
ICAgICAgIC8vIHNpbmNlIG9uIG1vc3QgYXJjaGl0ZWN0dXJlcywgdGhlIGNvc3Qgb2YgYnJhbmNo
aW5nIG9uIGEgcHJldmlvdXNseSBjb21wdXRlZCBjb21wYXJpc29uCisgICAgICAgIC8vIHJlc3Vs
dCBpcyBhbG1vc3QgYWx3YXlzIGhpZ2hlciB0aGFuIGp1c3QgZG9pbmcgYW5vdGhlciBmdXNlZCBj
b21wYXJlL2JyYW5jaC4gVGhlIG9ubHkgdGltZQorICAgICAgICAvLyBpdCBjb3VsZCBiZSB3b3Jz
ZSBpcyBpZiB3ZSBoYXZlIGEgYmluYXJ5IGNvbXBhcmlzb24gYW5kIGJvdGggb3BlcmFuZHMgYXJl
IHZhcmlhYmxlcyAobm90CisgICAgICAgIC8vIGNvbnN0YW50cyksIGFuZCB3ZSBlbmNvdW50ZXIg
cmVnaXN0ZXIgcHJlc3N1cmUuIEV2ZW4gaW4gdGhpcyBjYXNlLCBkdXBsaWNhdGluZyB0aGUgY29t
cGFyZQorICAgICAgICAvLyBzbyB0aGF0IHdlIGNhbiBmdXNlIGl0IHRvIHRoZSBicmFuY2ggd2ls
bCBiZSBtb3JlIGVmZmljaWVudCBtb3N0IG9mIHRoZSB0aW1lLCBzaW5jZQorICAgICAgICAvLyBy
ZWdpc3RlciBwcmVzc3VyZSBpcyBub3QgKnRoYXQqIGNvbW1vbi4gRm9yIHRoaXMgcmVhc29uLCB0
aGlzIGFsZ29yaXRobSB3aWxsIGFsd2F5cworICAgICAgICAvLyBkdXBsaWNhdGUgdGhlIGNvbXBh
cmlzb24uCisgICAgICAgIC8vCisgICAgICAgIC8vIEhvd2V2ZXIsIHdlIGNhbm5vdCBkdXBsaWNh
dGUgbG9hZHMuIFRoZSBjYW5CZUludGVybmFsKCkgb24gYSBsb2FkIHdpbGwgYXNzdW1lIHRoYXQg
d2UKKyAgICAgICAgLy8gYWxyZWFkeSB2YWxpZGF0ZWQgY2FuQmVJbnRlcm5hbCgpIG9uIGFsbCBv
ZiB0aGUgdmFsdWVzIHRoYXQgZ290IHVzIHRvIHRoZSBsb2FkLiBTbywgZXZlbgorICAgICAgICAv
LyBpZiB3ZSBhcmUgc2hhcmluZyBhIHZhbHVlLCB3ZSBzdGlsbCBuZWVkIHRvIGNhbGwgY2FuQmVJ
bnRlcm5hbCgpIGZvciB0aGUgcHVycG9zZSBvZgorICAgICAgICAvLyB0cmFja2luZyB3aGV0aGVy
IHdlIGFyZSBzdGlsbCBpbiBnb29kIHNoYXBlIHRvIGZ1c2UgbG9hZHMuCisgICAgICAgIC8vCisg
ICAgICAgIC8vIFdlIGNvdWxkIGV2ZW4gaGF2ZSBhIGNoYWluIG9mIGNvbXBhcmUgdmFsdWVzIHRo
YXQgd2UgZnVzZSwgYW5kIGFueSBtZW1iZXIgb2YgdGhlIGNoYWluCisgICAgICAgIC8vIGNvdWxk
IGJlIHNoYXJlZC4gT25jZSBhbnkgb2YgdGhlbSBhcmUgc2hhcmVkLCB0aGVuIHRoZSBzaGFyZWQg
b25lJ3MgdHJhbnNpdGl2ZSBjaGlsZHJlbgorICAgICAgICAvLyBjYW5ub3QgYmUgbG9ja2VkIChp
LmUuIGNvbW1pdEludGVybmFsKCkpLiBCdXQgaWYgbm9uZSBvZiB0aGVtIGFyZSBzaGFyZWQsIHRo
ZW4gd2Ugd2FudCB0bworICAgICAgICAvLyBsb2NrIGFsbCBvZiB0aGVtIGJlY2F1c2UgdGhhdCdz
IGEgcHJlcmVxdWlzaXRlIHRvIGZ1c2luZyB0aGUgbG9hZHMgc28gdGhhdCB0aGUgbG9hZHMgZG9u
J3QKKyAgICAgICAgLy8gZ2V0IGR1cGxpY2F0ZWQuIEZvciBleGFtcGxlLCB3ZSBtaWdodCBoYXZl
OiAKKyAgICAgICAgLy8KKyAgICAgICAgLy8gICAgIEB0bXAxID0gTGVzc1RoYW4oQGEsIEBiKQor
ICAgICAgICAvLyAgICAgQHRtcDIgPSBFcXVhbChAdG1wMSwgMCkKKyAgICAgICAgLy8gICAgIEJy
YW5jaChAdG1wMikKKyAgICAgICAgLy8KKyAgICAgICAgLy8gSWYgZWl0aGVyIEBhIG9yIEBiIGFy
ZSBsb2FkcywgdGhlbiB3ZSB3YW50IHRvIGhhdmUgbG9ja2VkIEB0bXAxIGFuZCBAdG1wMiBzbyB0
aGF0IHRoZXkKKyAgICAgICAgLy8gZG9uJ3QgZW1pdCB0aGUgbG9hZHMgYSBzZWNvbmQgdGltZS4g
QnV0IGlmIHdlIGhhZCBhbm90aGVyIHVzZSBvZiBAdG1wMiwgdGhlbiB3ZSBjYW5ub3QKKyAgICAg
ICAgLy8gbG9jayBAdG1wMSAob3IgQGEgb3IgQGIpIGJlY2F1c2UgdGhlbiB3ZSdsbCBnZXQgaW50
byB0cm91YmxlIHdoZW4gdGhlIG90aGVyIHZhbHVlcyB0aGF0CisgICAgICAgIC8vIHRyeSB0byBz
aGFyZSBAdG1wMSB3aXRoIHVzIHRyeSB0byBkbyB0aGVpciBsb3dlcmluZy4KKyAgICAgICAgLy8K
KyAgICAgICAgLy8gVGhlcmUncyBvbmUgbW9yZSB3cmlua2xlLiBJZiB3ZSBkb24ndCBsb2NrIGFu
IGludGVybmFsIHZhbHVlLCB0aGVuIHRoaXMgaW50ZXJuYWwgdmFsdWUgbWF5CisgICAgICAgIC8v
IGhhdmUgYWxyZWFkeSBzZXBhcmF0ZWx5IGxvY2tlZCBpdHMgY2hpbGRyZW4uIFNvLCBpZiB3ZSdy
ZSBub3QgbG9ja2luZyBhIHZhbHVlIHRoZW4gd2UgbmVlZAorICAgICAgICAvLyB0byBtYWtlIHN1
cmUgdGhhdCBpdHMgY2hpbGRyZW4gYXJlbid0IGxvY2tlZC4gV2UgZW5jYXBzdWxhdGUgdGhpcyBp
biB0d28gd2F5czoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gY2FuQ29tbWl0SW50ZXJuYWw6IFRo
aXMgdmFyaWFibGUgdGVsbHMgdXMgaWYgdGhlIHZhbHVlcyB0aGF0IHdlJ3ZlIGZ1c2VkIHNvIGZh
ciBhcmUKKyAgICAgICAgLy8gbG9ja2VkLiBUaGlzIG1lYW5zIHRoYXQgd2UncmUgbm90IHNoYXJp
bmcgYW55IG9mIHRoZW0gd2l0aCBhbnlvbmUuIFRoaXMgcGVybWl0cyB1cyB0byBmdXNlCisgICAg
ICAgIC8vIGxvYWRzLiBJZiBpdCdzIGZhbHNlLCB0aGVuIHdlIGNhbm5vdCBmdXNlIGxvYWRzIGFu
ZCB3ZSBhbHNvIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlCisgICAgICAgIC8vIGNoaWxkcmVuIG9m
IGFueSB2YWx1ZXMgd2UgdHJ5IHRvIGZ1c2UtYnktc2hhcmluZyBhcmUgbm90IGFscmVhZHkgbG9j
a2VkLiBZb3UgZG9uJ3QgaGF2ZSB0bworICAgICAgICAvLyB3b3JyeSBhYm91dCB0aGUgY2hpbGRy
ZW4gbG9ja2luZyB0aGluZyBpZiB5b3UgdXNlIHByZXBhcmVUb0Z1c2UoKSBiZWZvcmUgdHJ5aW5n
IHRvIGZ1c2UgYQorICAgICAgICAvLyBzaGFyYWJsZSB2YWx1ZS4gQnV0LCB5b3UgZG8gbmVlZCB0
byBndWFyZCBhbnkgbG9hZCBmdXNpb24gYnkgY2hlY2tpbmcgaWYgY2FuQ29tbWl0SW50ZXJuYWwK
KyAgICAgICAgLy8gaXMgdHJ1ZS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gYm9vbCBwcmVwYXJl
VG9GdXNlKHZhbHVlKTogQ2FsbCB0aGlzIHdoZW4geW91IGtub3cgdGhhdCB5b3Ugd291bGQgbGlr
ZSB0byBmdXNlIHNvbWUgdmFsdWUKKyAgICAgICAgLy8gYW5kIHRoYXQgdmFsdWUgaXMgbm90IGEg
bG9hZC4gSXQgd2lsbCBhdXRvbWF0aWNhbGx5IGhhbmRsZSB0aGUgc2hhcmVkLW9yLWxvY2tlZCBp
c3N1ZXMgYW5kCisgICAgICAgIC8vIGl0IHdpbGwgY2xlYXIgY2FuQ29tbWl0SW50ZXJuYWwgaWYg
bmVjZXNzYXJ5LiBUaGlzIHdpbGwgcmV0dXJuIGZhbHNlIGlmIHRoZSB2YWx1ZSBjYW5ub3QKKyAg
ICAgICAgLy8gYmUgbG9ja2VkIGFuZCBpdHMgY2hpbGRyZW4gYXJlIGxvY2tlZC4gVGhhdCdzIHJh
cmUsIGJ1dCB5b3UganVzdCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0CisgICAgICAgIC8vIHlvdSBk
byBzbWFydCB0aGluZ3Mgd2hlbiB0aGlzIGhhcHBlbnMgKGkuZS4ganVzdCB1c2UgdGhlIHZhbHVl
IHJhdGhlciB0aGFuIHRyeWluZyB0byBmdXNlCisgICAgICAgIC8vIGl0KS4KKyAgICAgICAgYm9v
bCBjYW5Db21taXRJbnRlcm5hbCA9IHRydWU7CisKKyAgICAgICAgYXV0byBwcmVwYXJlVG9GdXNl
ID0gWyZdIChWYWx1ZSogdmFsdWUpIC0+IGJvb2wgeworICAgICAgICAgICAgaWYgKHZhbHVlID09
IG1fdmFsdWUpIHsKKyAgICAgICAgICAgICAgICAvLyBJdCdzIG5vdCBhY3R1YWxseSBpbnRlcm5h
bC4gSXQncyB0aGUgcm9vdCB2YWx1ZS4gV2UncmUgZ29vZCB0byBnby4KKyAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNhbkNvbW1p
dEludGVybmFsICYmIGNhbkJlSW50ZXJuYWwodmFsdWUpKSB7CisgICAgICAgICAgICAgICAgLy8g
V2UgYXJlIHRoZSBvbmx5IHVzZXJzIG9mIHRoaXMgdmFsdWUuIFRoaXMgYWxzbyBtZWFucyB0aGF0
IHRoZSB2YWx1ZSdzIGNoaWxkcmVuCisgICAgICAgICAgICAgICAgLy8gY291bGQgbm90IGhhdmUg
YmVlbiBsb2NrZWQsIHNpbmNlIHdlIGhhdmUgbm93IHByb3ZlZCB0aGF0IG1fdmFsdWUgZG9taW5h
dGVzIHZhbHVlCisgICAgICAgICAgICAgICAgLy8gaW4gdGhlIGRhdGEgZmxvdyBncmFwaC4gVG8g
b25seSBvdGhlciB3YXkgdG8gdmFsdWUgaXMgZnJvbSBhIHVzZXIgb2YgbV92YWx1ZS4gSWYKKyAg
ICAgICAgICAgICAgICAvLyB2YWx1ZSdzIGNoaWxkcmVuIGFyZSBzaGFyZWQgd2l0aCBvdGhlcnMs
IHRoZW4gdGhleSBjb3VsZCBub3QgaGF2ZSBiZWVuIGxvY2tlZAorICAgICAgICAgICAgICAgIC8v
IGJlY2F1c2UgdGhlaXIgdXNlIGNvdW50IGlzIGdyZWF0ZXIgdGhhbiAxLiBJZiB0aGV5IGFyZSBv
bmx5IHVzZWQgZnJvbSB2YWx1ZSwgdGhlbgorICAgICAgICAgICAgICAgIC8vIGluIG9yZGVyIGZv
ciB2YWx1ZSdzIGNoaWxkcmVuIHRvIGJlIGxvY2tlZCwgdmFsdWUgd291bGQgYWxzbyBoYXZlIHRv
IGJlIGxvY2tlZCwKKyAgICAgICAgICAgICAgICAvLyBhbmQgd2UganVzdCBwcm92ZWQgdGhhdCBp
dCB3YXNuJ3QuCisgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwodmFsdWUpOworICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBX
ZSdyZSBnb2luZyB0byB0cnkgdG8gc2hhcmUgdmFsdWUgd2l0aCBvdGhlcnMuIEl0J3MgcG9zc2li
bGUgdGhhdCBzb21lIG90aGVyIGJhc2ljCisgICAgICAgICAgICAvLyBibG9jayBoYWQgYWxyZWFk
eSBlbWl0dGVkIGNvZGUgZm9yIHZhbHVlIGFuZCB0aGVuIG1hdGNoZWQgb3ZlciBpdHMgY2hpbGRy
ZW4gYW5kIHRoZW4KKyAgICAgICAgICAgIC8vIGxvY2tlZCB0aGVtLCBpbiB3aGljaCBjYXNlIHdl
IGp1c3Qgd2FudCB0byB1c2UgdmFsdWUgaW5zdGVhZCBvZiBkdXBsaWNhdGluZyBpdC4gU28sIHdl
CisgICAgICAgICAgICAvLyB2YWxpZGF0ZSB0aGUgY2hpbGRyZW4uIE5vdGUgdGhhdCB0aGlzIG9u
bHkgYXJpc2VzIGluIGxpbmVhciBjaGFpbnMgbGlrZToKKyAgICAgICAgICAgIC8vCisgICAgICAg
ICAgICAvLyAgICAgQkIjMToKKyAgICAgICAgICAgIC8vICAgICAgICAgQDEgPSBGb28oLi4uKQor
ICAgICAgICAgICAgLy8gICAgICAgICBAMiA9IEJhcihAMSkKKyAgICAgICAgICAgIC8vICAgICAg
ICAgSnVtcCgjMikKKyAgICAgICAgICAgIC8vICAgICBCQiMyOgorICAgICAgICAgICAgLy8gICAg
ICAgICBAMyA9IEJheihAMikKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBOb3RpY2Ug
aG93IHdlIGNvdWxkIHN0YXJ0IGJ5IGdlbmVyYXRpbmcgY29kZSBmb3IgQkIjMSBhbmQgdGhlbiBk
ZWNpZGUgdG8gbG9jayBAMSB3aGVuCisgICAgICAgICAgICAvLyBnZW5lcmF0aW5nIGNvZGUgZm9y
IEAyLCBpZiB3ZSBoYXZlIHNvbWUgd2F5IG9mIGZ1c2luZyBCYXIgYW5kIEZvbyBpbnRvIGEgc2lu
Z2xlCisgICAgICAgICAgICAvLyBpbnN0cnVjdGlvbi4gVGhpcyBpcyBsZWdhbCwgc2luY2UgaW5k
ZWVkIEAxIG9ubHkgaGFzIG9uZSB1c2VyLiBUaGUgZmFjdCB0aGF0IEAyIG5vdworICAgICAgICAg
ICAgLy8gaGFzIGEgdG1wIChpLmUuIEAyIGlzIHBpbm5lZCksIGNhbkJlSW50ZXJuYWwoQDIpIHdp
bGwgcmV0dXJuIGZhbHNlLCB3aGljaCBicmluZ3MgdXMKKyAgICAgICAgICAgIC8vIGhlcmUuIElu
IHRoYXQgY2FzZSwgd2UgY2Fubm90IG1hdGNoIG92ZXIgQDIgYmVjYXVzZSB0aGVuIHdlJ2QgaGl0
IGEgaGF6YXJkIGlmIHdlIGVuZAorICAgICAgICAgICAgLy8gdXAgZGVjaWRpbmcgbm90IHRvIGZ1
c2UgRm9vIGludG8gdGhlIGZ1c2VkIEJhei9CYXIuCisgICAgICAgICAgICAvLworICAgICAgICAg
ICAgLy8gSGFwcGlseSwgdGhlcmUgYXJlIG9ubHkgdHdvIHBsYWNlcyB3aGVyZSB0aGlzIGtpbmQg
b2YgY2hpbGQgdmFsaWRhdGlvbiBoYXBwZW5zIGlzIGluCisgICAgICAgICAgICAvLyBydWxlcyB0
aGF0IGFkbWl0IHNoYXJpbmcsIGxpa2UgdGhpcyBhbmQgZWZmZWN0aXZlQWRkcmVzcygpLgorICAg
ICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIE4uQi4gV2UgY291bGQgcHJvYmFibHkgYXZvaWQg
dGhlIG5lZWQgdG8gZG8gdmFsdWUgbG9ja2luZyBpZiB3ZSBjb21taXR0ZWQgdG8gYSB3ZWxsCisg
ICAgICAgICAgICAvLyBjaG9zZW4gY29kZSBnZW5lcmF0aW9uIG9yZGVyLiBGb3IgZXhhbXBsZSwg
aWYgd2UgZ3VhcmFudGVlZCB0aGF0IGFsbCBvZiB0aGUgdXNlcnMgb2YKKyAgICAgICAgICAgIC8v
IGEgdmFsdWUgZ2V0IGdlbmVyYXRlZCBiZWZvcmUgdGhhdCB2YWx1ZSwgdGhlbiB0aGVyZSdzIG5v
IHdheSBmb3IgdGhlIGxvd2VyaW5nIG9mIEAzIHRvCisgICAgICAgICAgICAvLyBzZWUgQDEgbG9j
a2VkLiBCdXQgd2UgZG9uJ3Qgd2FudCB0byBkbyB0aGF0LCBzaW5jZSB0aGlzIGlzIGEgZ3JlZWR5
IGluc3RydWN0aW9uCisgICAgICAgICAgICAvLyBzZWxlY3RvciBhbmQgc28gd2Ugd2FudCB0byBi
ZSBhYmxlIHRvIHBsYXkgd2l0aCBvcmRlci4KKyAgICAgICAgICAgIGZvciAoVmFsdWUqIGNoaWxk
IDogdmFsdWUtPmNoaWxkcmVuKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9sb2NrZWQuY29u
dGFpbnMoY2hpbGQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIC8vIEl0J3Mgc2FmZSB0byBzaGFyZSB2YWx1ZSwgYnV0IHNp
bmNlIHdlJ3JlIHNoYXJpbmcsIGl0IG1lYW5zIHRoYXQgd2UgYXJlbid0IGxvY2tpbmcgaXQuCisg
ICAgICAgICAgICAvLyBJZiB3ZSBkb24ndCBsb2NrIGl0LCB0aGVuIGZ1c2luZyBsb2FkcyBpcyBv
ZmYgbGltaXRzIGFuZCBhbGwgb2YgdmFsdWUncyBjaGlsZHJlbiB3aWxsCisgICAgICAgICAgICAv
LyBoYXZlIHRvIGdvIHRocm91Z2ggdGhlIHNoYXJpbmcgcGF0aCBhcyB3ZWxsLgorICAgICAgICAg
ICAgY2FuQ29tbWl0SW50ZXJuYWwgPSBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH07CisgICAgICAgIAogICAgICAgICAvLyBDaGV3IHRocm91
Z2ggYW55IG5lZ2F0aW9ucy4gSXQncyBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IGZvciB0aGlzIHRv
IGJlIGEgbG9vcCwgYnV0IHdlIGxpa2UKICAgICAgICAgLy8gdG8gZm9sbG93IHRoZSBydWxlIHRo
YXQgdGhlIGluc3RydWN0aW9uIHNlbGVjdG9yIHJlZHVjZXMgc3RyZW5ndGggd2hlbmV2ZXIgaXQg
ZG9lc24ndAogICAgICAgICAvLyByZXF1aXJlIG1ha2luZyB0aGluZ3MgbW9yZSBjb21wbGljYXRl
ZC4KICAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgaWYgKCFjYW5CZUludGVybmFsKHZh
bHVlKSAmJiB2YWx1ZSAhPSBtX3ZhbHVlKQotICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgYm9vbCBzaG91bGRJbnZlcnQgPQogICAgICAgICAgICAgICAgICh2YWx1ZS0+b3Bjb2Rl
KCkgPT0gQml0WG9yICYmIHZhbHVlLT5jaGlsZCgxKS0+aGFzSW50KCkgJiYgKHZhbHVlLT5jaGls
ZCgxKS0+YXNJbnQoKSAmIDEpICYmIHZhbHVlLT5jaGlsZCgwKS0+cmV0dXJuc0Jvb2woKSkKICAg
ICAgICAgICAgICAgICB8fCAodmFsdWUtPm9wY29kZSgpID09IEVxdWFsICYmIHZhbHVlLT5jaGls
ZCgxKS0+aXNJbnQoMCkpOwogICAgICAgICAgICAgaWYgKCFzaG91bGRJbnZlcnQpCiAgICAgICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGlmICghcHJlcGFyZVRvRnVzZSh2YWx1ZSkp
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKICAgICAgICAgICAgIHZhbHVl
ID0gdmFsdWUtPmNoaWxkKDApOwogICAgICAgICAgICAgaW52ZXJ0ZWQgPSAhaW52ZXJ0ZWQ7Ci0g
ICAgICAgICAgICBjb21taXRJbnRlcm5hbCh2YWx1ZSk7CiAgICAgICAgIH0KIAogICAgICAgICBh
dXRvIGNyZWF0ZVJlbENvbmQgPSBbJl0gKApAQCAtOTI3LDUxICsxMDM1LDU1IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CiAgICAgICAgICAgICAgICAgfTsK
IAotICAgICAgICAgICAgICAgIC8vIEZpcnN0IGhhbmRsZSBjb21wYXJlcyB0aGF0IGludm9sdmUg
ZmV3ZXIgYml0cyB0aGFuIEIzJ3MgdHlwZSBzeXN0ZW0gc3VwcG9ydHMuCi0gICAgICAgICAgICAg
ICAgLy8gVGhpcyBpcyBwcmV0dHkgaW1wb3J0YW50LiBGb3IgZXhhbXBsZSwgd2Ugd2FudCB0aGlz
IHRvIGJlIGEgc2luZ2xlIGluc3RydWN0aW9uOgotICAgICAgICAgICAgICAgIC8vCi0gICAgICAg
ICAgICAgICAgLy8gICAgIEAxID0gTG9hZDhTKC4uLikKLSAgICAgICAgICAgICAgICAvLyAgICAg
QDIgPSBDb25zdDMyKC4uLikKLSAgICAgICAgICAgICAgICAvLyAgICAgQDMgPSBMZXNzVGhhbihA
MSwgQDIpCi0gICAgICAgICAgICAgICAgLy8gICAgIEJyYW5jaChAMykKKyAgICAgICAgICAgICAg
ICBBcmc6OldpZHRoIHdpZHRoID0gQXJnOjp3aWR0aEZvckIzVHlwZSh2YWx1ZS0+Y2hpbGQoMCkt
PnR5cGUoKSk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKHJlbENvbmQu
aXNTaWduZWRDb25kKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0g
dHJ5Q29tcGFyZUxvYWRJbW0oQXJnOjpXaWR0aDgsIExvYWQ4UywgQXJnOjpTaWduZWQpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgaWYgKGNhbkNvbW1pdEludGVybmFsKSB7CisgICAgICAgICAgICAgICAg
ICAgIC8vIEZpcnN0IGhhbmRsZSBjb21wYXJlcyB0aGF0IGludm9sdmUgZmV3ZXIgYml0cyB0aGFu
IEIzJ3MgdHlwZSBzeXN0ZW0gc3VwcG9ydHMuCisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMg
aXMgcHJldHR5IGltcG9ydGFudC4gRm9yIGV4YW1wbGUsIHdlIHdhbnQgdGhpcyB0byBiZSBhIHNp
bmdsZQorICAgICAgICAgICAgICAgICAgICAvLyBpbnN0cnVjdGlvbjoKKyAgICAgICAgICAgICAg
ICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIEAxID0gTG9hZDhTKC4uLikKKyAg
ICAgICAgICAgICAgICAgICAgLy8gICAgIEAyID0gQ29uc3QzMiguLi4pCisgICAgICAgICAgICAg
ICAgICAgIC8vICAgICBAMyA9IExlc3NUaGFuKEAxLCBAMikKKyAgICAgICAgICAgICAgICAgICAg
Ly8gICAgIEJyYW5jaChAMykKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAo
cmVsQ29uZC5pc1Vuc2lnbmVkQ29uZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChJbnN0
IHJlc3VsdCA9IHRyeUNvbXBhcmVMb2FkSW1tKEFyZzo6V2lkdGg4LCBMb2FkOFosIEFyZzo6VW5z
aWduZWQpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChyZWxDb25kLmlzU2lnbmVkQ29uZCgp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlDb21wYXJl
TG9hZEltbShBcmc6OldpZHRoOCwgTG9hZDhTLCBBcmc6OlNpZ25lZCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAocmVsQ29uZC5pc1Vuc2lnbmVk
Q29uZCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlD
b21wYXJlTG9hZEltbShBcmc6OldpZHRoOCwgTG9hZDhaLCBBcmc6OlVuc2lnbmVkKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgICAgICBpZiAocmVsQ29uZC5pc1NpZ25lZENvbmQoKSkgewotICAg
ICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlDb21wYXJlTG9hZEltbShBcmc6
OldpZHRoMTYsIExvYWQxNlMsIEFyZzo6U2lnbmVkKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBp
ZiAocmVsQ29uZC5pc1NpZ25lZENvbmQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KEluc3QgcmVzdWx0ID0gdHJ5Q29tcGFyZUxvYWRJbW0oQXJnOjpXaWR0aDE2LCBMb2FkMTZTLCBB
cmc6OlNpZ25lZCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IGlmIChyZWxDb25kLmlzVW5zaWduZWRDb25kKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KEluc3QgcmVzdWx0ID0gdHJ5Q29tcGFyZUxvYWRJbW0oQXJnOjpXaWR0aDE2LCBMb2FkMTZaLCBB
cmc6OlVuc2lnbmVkKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAocmVsQ29uZC5pc1Vuc2ln
bmVkQ29uZCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0
cnlDb21wYXJlTG9hZEltbShBcmc6OldpZHRoMTYsIExvYWQxNlosIEFyZzo6VW5zaWduZWQpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUgY29tcGFyZXMgdGhhdCBp
bnZvbHZlIGEgbG9hZCBhbmQgYW4gaW1tZWRpYXRlLgorICAgICAgICAgICAgICAgICAgICAvLyBO
b3cgaGFuZGxlIGNvbXBhcmVzIHRoYXQgaW52b2x2ZSBhIGxvYWQgYW5kIGFuIGltbWVkaWF0ZS4K
IAotICAgICAgICAgICAgICAgIEFyZzo6V2lkdGggd2lkdGggPSBBcmc6OndpZHRoRm9yQjNUeXBl
KHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpKTsKLSAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1
bHQgPSB0cnlDb21wYXJlTG9hZEltbSh3aWR0aCwgTG9hZCwgQXJnOjpTaWduZWQpKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICBpZiAoSW5z
dCByZXN1bHQgPSB0cnlDb21wYXJlTG9hZEltbSh3aWR0aCwgTG9hZCwgQXJnOjpTaWduZWQpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgICAgICAgICAgICAg
IC8vIE5vdyBoYW5kbGUgY29tcGFyZXMgdGhhdCBpbnZvbHZlIGEgbG9hZC4gSXQncyBub3Qgb2J2
aW91cyB0aGF0IGl0J3MgYmV0dGVyIHRvCi0gICAgICAgICAgICAgICAgLy8gaGFuZGxlIHRoaXMg
YmVmb3JlIHRoZSBpbW1lZGlhdGUgY2FzZXMgb3Igbm90LiBQcm9iYWJseSBkb2Vzbid0IG1hdHRl
ci4KKyAgICAgICAgICAgICAgICAgICAgLy8gTm93IGhhbmRsZSBjb21wYXJlcyB0aGF0IGludm9s
dmUgYSBsb2FkLiBJdCdzIG5vdCBvYnZpb3VzIHRoYXQgaXQncyBiZXR0ZXIgdG8KKyAgICAgICAg
ICAgICAgICAgICAgLy8gaGFuZGxlIHRoaXMgYmVmb3JlIHRoZSBpbW1lZGlhdGUgY2FzZXMgb3Ig
bm90LiBQcm9iYWJseSBkb2Vzbid0IG1hdHRlci4KIAotICAgICAgICAgICAgICAgIGlmIChJbnN0
IHJlc3VsdCA9IHRyeUNvbXBhcmUod2lkdGgsIGxvYWRQcm9taXNlKGxlZnQpLCB0bXBQcm9taXNl
KHJpZ2h0KSkpIHsKLSAgICAgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwobGVmdCk7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlDb21wYXJlKHdpZHRoLCBsb2Fk
UHJvbWlzZShsZWZ0KSwgdG1wUHJvbWlzZShyaWdodCkpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjb21taXRJbnRlcm5hbChsZWZ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlDb21wYXJlKHdpZHRoLCB0bXBQcm9taXNl
KGxlZnQpLCBsb2FkUHJvbWlzZShyaWdodCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbW1p
dEludGVybmFsKHJpZ2h0KTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5Q29tcGFyZSh3aWR0aCwgdG1w
UHJvbWlzZShsZWZ0KSwgbG9hZFByb21pc2UocmlnaHQpKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgY29tbWl0SW50ZXJuYWwocmlnaHQpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUgY29tcGFyZXMgdGhhdCBpbnZvbHZlIGFuIGlt
bWVkaWF0ZSBhbmQgYSB0bXAuCkBAIC0xMDU4LDM5ICsxMTcwLDQxIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CiAgICAgICAgICAgICAgICAgfTsKIAotICAg
ICAgICAgICAgICAgIC8vIEZpcnN0IGhhbmRsZSB0ZXN0J3MgdGhhdCBpbnZvbHZlIGZld2VyIGJp
dHMgdGhhbiBCMydzIHR5cGUgc3lzdGVtIHN1cHBvcnRzLgotCi0gICAgICAgICAgICAgICAgaWYg
KEluc3QgcmVzdWx0ID0gdHJ5VGVzdExvYWRJbW0oQXJnOjpXaWR0aDgsIExvYWQ4WikpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICAgICAgICAgICAgICBpZiAoSW5z
dCByZXN1bHQgPSB0cnlUZXN0TG9hZEltbShBcmc6OldpZHRoOCwgTG9hZDhTKSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgICAgICAgICAgICAgIGlmIChJbnN0IHJl
c3VsdCA9IHRyeVRlc3RMb2FkSW1tKEFyZzo6V2lkdGgxNiwgTG9hZDE2WikpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1
bHQgPSB0cnlUZXN0TG9hZEltbShBcmc6OldpZHRoMTYsIExvYWQxNlMpKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0
ZXN0J3MgdGhhdCBpbnZvbHZlIGEgbG9hZCBhbmQgYW4gaW1tZWRpYXRlLiBOb3RlIHRoYXQgaW1t
ZWRpYXRlcyBhcmUKLSAgICAgICAgICAgICAgICAvLyAzMi1iaXQsIGFuZCB3ZSB3YW50IHplcm8t
ZXh0ZW5zaW9uLiBIZW5jZSwgdGhlIGltbWVkaWF0ZSBmb3JtIGlzIGNvbXBpbGVkIGFzIGEKLSAg
ICAgICAgICAgICAgICAvLyAzMi1iaXQgdGVzdC4gTm90ZSB0aGF0IHRoaXMgc3BpdHMgb24gdGhl
IGdyYXZlIG9mIGluZmVyaW9yIGVuZGlhbnMsIHN1Y2ggYXMgdGhlCi0gICAgICAgICAgICAgICAg
Ly8gYmlnIG9uZS4KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoSW5zdCBy
ZXN1bHQgPSB0cnlUZXN0TG9hZEltbShBcmc6OldpZHRoMzIsIExvYWQpKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgIGlmIChjYW5Db21taXRJbnRl
cm5hbCkgeworICAgICAgICAgICAgICAgICAgICAvLyBGaXJzdCBoYW5kbGUgdGVzdCdzIHRoYXQg
aW52b2x2ZSBmZXdlciBiaXRzIHRoYW4gQjMncyB0eXBlIHN5c3RlbSBzdXBwb3J0cy4KIAotICAg
ICAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUgdGVzdCdzIHRoYXQgaW52b2x2ZSBhIGxvYWQuCi0K
LSAgICAgICAgICAgICAgICBBcmc6OldpZHRoIHdpZHRoID0gQXJnOjp3aWR0aEZvckIzVHlwZSh2
YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0
ID0gdHJ5VGVzdCh3aWR0aCwgbG9hZFByb21pc2UobGVmdCksIHRtcFByb21pc2UocmlnaHQpKSkg
ewotICAgICAgICAgICAgICAgICAgICBjb21taXRJbnRlcm5hbChsZWZ0KTsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeVRlc3RMb2FkSW1tKEFyZzo6V2lkdGg4LCBMb2Fk
OFopKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeVRlc3RM
b2FkSW1tKEFyZzo6V2lkdGg4LCBMb2FkOFMpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlm
IChJbnN0IHJlc3VsdCA9IHRyeVRlc3RMb2FkSW1tKEFyZzo6V2lkdGgxNiwgTG9hZDE2WikpCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5VGVzdExvYWRJbW0o
QXJnOjpXaWR0aDE2LCBMb2FkMTZTKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAKLSAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlUZXN0KHdpZHRo
LCB0bXBQcm9taXNlKGxlZnQpLCBsb2FkUHJvbWlzZShyaWdodCkpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGNvbW1pdEludGVybmFsKHJpZ2h0KTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0ZXN0J3MgdGhhdCBp
bnZvbHZlIGEgbG9hZCBhbmQgYW4gaW1tZWRpYXRlLiBOb3RlIHRoYXQgaW1tZWRpYXRlcworICAg
ICAgICAgICAgICAgICAgICAvLyBhcmUgMzItYml0LCBhbmQgd2Ugd2FudCB6ZXJvLWV4dGVuc2lv
bi4gSGVuY2UsIHRoZSBpbW1lZGlhdGUgZm9ybSBpcyBjb21waWxlZAorICAgICAgICAgICAgICAg
ICAgICAvLyBhcyBhIDMyLWJpdCB0ZXN0LiBOb3RlIHRoYXQgdGhpcyBzcGl0cyBvbiB0aGUgZ3Jh
dmUgb2YgaW5mZXJpb3IgZW5kaWFucywgc3VjaAorICAgICAgICAgICAgICAgICAgICAvLyBhcyB0
aGUgYmlnIG9uZS4KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlm
IChJbnN0IHJlc3VsdCA9IHRyeVRlc3RMb2FkSW1tKEFyZzo6V2lkdGgzMiwgTG9hZCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0ZXN0J3MgdGhhdCBpbnZvbHZlIGEg
bG9hZC4KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIEFyZzo6V2lk
dGggd2lkdGggPSBBcmc6OndpZHRoRm9yQjNUeXBlKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5VGVzdCh3aWR0aCwgbG9h
ZFByb21pc2UobGVmdCksIHRtcFByb21pc2UocmlnaHQpKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgY29tbWl0SW50ZXJuYWwobGVmdCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlUZXN0KHdpZHRoLCB0bXBQ
cm9taXNlKGxlZnQpLCBsb2FkUHJvbWlzZShyaWdodCkpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjb21taXRJbnRlcm5hbChyaWdodCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0ZXN0J3MgdGhhdCBpbnZvbHZlIGFuIGltbWVk
aWF0ZSBhbmQgYSB0bXAuCkBAIC0xMTEzLDcgKzEyMjcsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgfQogICAgICAgICB9OwogCi0gICAgICAgIGlmIChjYW5CZUludGVybmFsKHZhbHVlKSB8fCB2
YWx1ZSA9PSBtX3ZhbHVlKSB7CisgICAgICAgIGlmIChwcmVwYXJlVG9GdXNlKHZhbHVlKSkgewog
ICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gYXR0ZW1wdEZ1c2VkKCkpIHsKICAgICAgICAg
ICAgICAgICBjb21taXRJbnRlcm5hbCh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKQEAgLTE0NTksOCArMTU3MywyMiBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAg
ICAgY2FzZSBCaXRBbmQ6IHsKLSAgICAgICAgICAgIGFwcGVuZEJpbk9wPEFuZDMyLCBBbmQ2NCwg
Q29tbXV0YXRpdmU+KAotICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVl
LT5jaGlsZCgxKSk7CisgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmlzSW50KDB4
ZmYpKSB7CisgICAgICAgICAgICAgICAgYXBwZW5kVW5PcDxaZXJvRXh0ZW5kOFRvMzIsIFplcm9F
eHRlbmQ4VG8zMj4obV92YWx1ZS0+Y2hpbGQoMCkpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNo
aWxkKDEpLT5pc0ludCgweGZmZmYpKSB7CisgICAgICAgICAgICAgICAgYXBwZW5kVW5PcDxaZXJv
RXh0ZW5kMTZUbzMyLCBaZXJvRXh0ZW5kMTZUbzMyPihtX3ZhbHVlLT5jaGlsZCgwKSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobV92
YWx1ZS0+Y2hpbGQoMSktPmlzSW50KDB4ZmZmZmZmZmYpKSB7CisgICAgICAgICAgICAgICAgYXBw
ZW5kVW5PcDxNb3ZlMzIsIE1vdmUzMj4obV92YWx1ZS0+Y2hpbGQoMCkpOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgYXBw
ZW5kQmluT3A8QW5kMzIsIEFuZDY0LCBDb21tdXRhdGl2ZT4obV92YWx1ZS0+Y2hpbGQoMCksIG1f
dmFsdWUtPmNoaWxkKDEpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0x
NTYyLDE4ICsxNjkwLDI4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KIAorICAgICAgICBjYXNlIFNFeHQ4OiB7CisgICAgICAgICAgICBhcHBlbmRVbk9wPFNpZ25F
eHRlbmQ4VG8zMiwgQWlyOjpPb3BzPihtX3ZhbHVlLT5jaGlsZCgwKSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFNFeHQxNjogeworICAgICAgICAgICAg
YXBwZW5kVW5PcDxTaWduRXh0ZW5kMTZUbzMyLCBBaXI6Ok9vcHM+KG1fdmFsdWUtPmNoaWxkKDAp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAgICAgIGNhc2UgWkV4dDMy
OiB7CiAgICAgICAgICAgICBpZiAoaGlnaEJpdHNBcmVaZXJvKG1fdmFsdWUtPmNoaWxkKDApKSkg
ewogICAgICAgICAgICAgICAgIEFTU0VSVCh0bXAobV92YWx1ZS0+Y2hpbGQoMCkpID09IHRtcCht
X3ZhbHVlKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICBhcHBlbmQoTW92ZTMyLCB0bXAobV92YWx1ZS0+Y2hpbGQoMCkpLCB0bXAobV92YWx1
ZSkpOworICAgICAgICAgICAgYXBwZW5kVW5PcDxNb3ZlMzIsIEFpcjo6T29wcz4obV92YWx1ZS0+
Y2hpbGQoMCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgY2Fz
ZSBTRXh0MzI6IHsKLSAgICAgICAgICAgIGFwcGVuZChTaWduRXh0ZW5kMzJUb1B0ciwgdG1wKG1f
dmFsdWUtPmNoaWxkKDApKSwgdG1wKG1fdmFsdWUpKTsKKyAgICAgICAgICAgIGFwcGVuZFVuT3A8
U2lnbkV4dGVuZDMyVG9QdHIsIEFpcjo6T29wcz4obV92YWx1ZS0+Y2hpbGQoMCkpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My90ZXN0YjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0
YjMuY3BwCShyZXZpc2lvbiAxOTM5OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVz
dGIzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIzNCw2ICs1MjM0LDE2MyBAQCB2b2lkIHRlc3RD
aGVja01lZ2FDb21ibygpCiAgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsICZ2YWx1ZSAtIDIs
IDEpID09IDQyKTsKIH0KIAordm9pZCB0ZXN0Q2hlY2tUd29NZWdhQ29tYm9zKCkKK3sKKyAgICBQ
cm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOwor
ICAgIFZhbHVlKiBiYXNlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIFZhbHVlKiBpbmRleCA9IHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgIHByb2MsIFpFeHQzMiwgT3JpZ2luKCksCisg
ICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVuYywg
T3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSkpKTsKKworICAgIFZhbHVlKiBw
dHIgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICBwcm9jLCBBZGQsIE9yaWdpbigp
LCBiYXNlLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJv
YywgU2hsLCBPcmlnaW4oKSwgaW5kZXgsCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29u
c3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMSkpKTsKKworICAgIFZhbHVlKiBwcmVkaWNhdGUg
PSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICBwcm9jLCBMZXNzVGhhbiwgT3JpZ2lu
KCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZDhTLCBP
cmlnaW4oKSwgcHRyKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIDQyKSk7CisgICAgCisgICAgQ2hlY2tWYWx1ZSogY2hlY2sgPSByb290LT5h
cHBlbmROZXc8Q2hlY2tWYWx1ZT4ocHJvYywgQ2hlY2ssIE9yaWdpbigpLCBwcmVkaWNhdGUpOwor
ICAgIGNoZWNrLT5zZXRHZW5lcmF0b3IoCisgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICBB
bGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAg
ICAgICBDSEVDSyhwYXJhbXMuc2l6ZSgpID09IDEpOworCisgICAgICAgICAgICAvLyBUaGlzIHNo
b3VsZCBhbHdheXMgd29yayBiZWNhdXNlIGEgZnVuY3Rpb24gdGhpcyBzaW1wbGUgc2hvdWxkIG5l
dmVyIGhhdmUgY2FsbGVlCisgICAgICAgICAgICAvLyBzYXZlcy4KKyAgICAgICAgICAgIGppdC5t
b3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDQyKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIpOworICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CisgICAgICAgICAg
ICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgIENoZWNrVmFsdWUqIGNoZWNrMiA9IHJvb3Qt
PmFwcGVuZE5ldzxDaGVja1ZhbHVlPihwcm9jLCBDaGVjaywgT3JpZ2luKCksIHByZWRpY2F0ZSk7
CisgICAgY2hlY2syLT5zZXRHZW5lcmF0b3IoCisgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAg
ICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAg
ICAgICAgICBDSEVDSyhwYXJhbXMuc2l6ZSgpID09IDEpOworCisgICAgICAgICAgICAvLyBUaGlz
IHNob3VsZCBhbHdheXMgd29yayBiZWNhdXNlIGEgZnVuY3Rpb24gdGhpcyBzaW1wbGUgc2hvdWxk
IG5ldmVyIGhhdmUgY2FsbGVlCisgICAgICAgICAgICAvLyBzYXZlcy4KKyAgICAgICAgICAgIGpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDQzKSwgR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpOworICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CisgICAgICAg
ICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9s
VmFsdWU+KAorICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByb290LT5hcHBlbmROZXc8
Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOworCisgICAgYXV0byBjb2RlID0gY29t
cGlsZShwcm9jKTsKKworICAgIGludDhfdCB2YWx1ZTsKKyAgICB2YWx1ZSA9IDQyOworICAgIENI
RUNLKGludm9rZTxpbnQ+KCpjb2RlLCAmdmFsdWUgLSAyLCAxKSA9PSAwKTsKKyAgICB2YWx1ZSA9
IDEyNzsKKyAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgJnZhbHVlIC0gMiwgMSkgPT0gMCk7
CisgICAgdmFsdWUgPSA0MTsKKyAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgJnZhbHVlIC0g
MiwgMSkgPT0gNDIpOworICAgIHZhbHVlID0gMDsKKyAgICBDSEVDSyhpbnZva2U8aW50PigqY29k
ZSwgJnZhbHVlIC0gMiwgMSkgPT0gNDIpOworICAgIHZhbHVlID0gLTE7CisgICAgQ0hFQ0soaW52
b2tlPGludD4oKmNvZGUsICZ2YWx1ZSAtIDIsIDEpID09IDQyKTsKK30KKwordm9pZCB0ZXN0Q2hl
Y2tUd29Ob25SZWR1bmRhbnRNZWdhQ29tYm9zKCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAg
ICAKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxv
Y2sqIHRoZW5DYXNlID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGVsc2VDYXNl
ID0gcHJvYy5hZGRCbG9jaygpOworICAgIAorICAgIFZhbHVlKiBiYXNlID0gcm9vdC0+YXBwZW5k
TmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjApOworICAgIFZhbHVlKiBpbmRleCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAg
IHByb2MsIFpFeHQzMiwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
CisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5h
cHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMSkpKTsKKyAgICBWYWx1ZSogYnJhbmNoUHJlZGljYXRlID0gcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPigKKyAgICAgICAgcHJvYywgQml0QW5kLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAg
ICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKSksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25z
dDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAweGZmKSk7CisKKyAgICBWYWx1ZSogcHRyID0gcm9v
dC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgcHJvYywgQWRkLCBPcmlnaW4oKSwgYmFzZSwK
KyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFNobCwg
T3JpZ2luKCksIGluZGV4LAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1
ZT4ocHJvYywgT3JpZ2luKCksIDEpKSk7CisKKyAgICBWYWx1ZSogY2hlY2tQcmVkaWNhdGUgPSBy
b290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICBwcm9jLCBMZXNzVGhhbiwgT3JpZ2luKCks
CisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZDhTLCBPcmln
aW4oKSwgcHRyKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIDQyKSk7CisKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAg
ICAgICAgcHJvYywgQnJhbmNoLCBPcmlnaW4oKSwgYnJhbmNoUHJlZGljYXRlLAorICAgICAgICBG
cmVxdWVudGVkQmxvY2sodGhlbkNhc2UpLCBGcmVxdWVudGVkQmxvY2soZWxzZUNhc2UpKTsKKyAg
ICAKKyAgICBDaGVja1ZhbHVlKiBjaGVjayA9IHRoZW5DYXNlLT5hcHBlbmROZXc8Q2hlY2tWYWx1
ZT4ocHJvYywgQ2hlY2ssIE9yaWdpbigpLCBjaGVja1ByZWRpY2F0ZSk7CisgICAgY2hlY2stPnNl
dEdlbmVyYXRvcigKKyAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgIEFsbG93TWFjcm9TY3Jh
dGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAgIENIRUNLKHBh
cmFtcy5zaXplKCkgPT0gMSk7CisKKyAgICAgICAgICAgIC8vIFRoaXMgc2hvdWxkIGFsd2F5cyB3
b3JrIGJlY2F1c2UgYSBmdW5jdGlvbiB0aGlzIHNpbXBsZSBzaG91bGQgbmV2ZXIgaGF2ZSBjYWxs
ZWUKKyAgICAgICAgICAgIC8vIHNhdmVzLgorICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoNDIpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAg
ICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsK
KyAgICAgICAgfSk7CisgICAgdGhlbkNhc2UtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAg
ICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCB0aGVuQ2FzZS0+YXBwZW5kTmV3PENvbnN0MzJW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIDQzKSk7CisKKyAgICBDaGVja1ZhbHVlKiBjaGVjazIgPSBl
bHNlQ2FzZS0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KHByb2MsIENoZWNrLCBPcmlnaW4oKSwgY2hl
Y2tQcmVkaWNhdGUpOworICAgIGNoZWNrMi0+c2V0R2VuZXJhdG9yKAorICAgICAgICBbJl0gKEND
YWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykg
eworICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRj
aChqaXQpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnNpemUoKSA9PSAxKTsKKworICAgICAg
ICAgICAgLy8gVGhpcyBzaG91bGQgYWx3YXlzIHdvcmsgYmVjYXVzZSBhIGZ1bmN0aW9uIHRoaXMg
c2ltcGxlIHNob3VsZCBuZXZlciBoYXZlIGNhbGxlZQorICAgICAgICAgICAgLy8gc2F2ZXMuCisg
ICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMig0NCksIEdQUklu
Zm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1
ZSgpOworICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICB9KTsKKyAgICBlbHNlQ2FzZS0+
YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCks
IGVsc2VDYXNlLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgNDUpKTsK
KworICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisKKyAgICBpbnQ4X3QgdmFsdWU7CisK
KyAgICB2YWx1ZSA9IDQyOworICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAmdmFsdWUgLSAy
LCAxLCB0cnVlKSA9PSA0Myk7CisgICAgdmFsdWUgPSAxMjc7CisgICAgQ0hFQ0soaW52b2tlPGlu
dD4oKmNvZGUsICZ2YWx1ZSAtIDIsIDEsIHRydWUpID09IDQzKTsKKyAgICB2YWx1ZSA9IDQxOwor
ICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAmdmFsdWUgLSAyLCAxLCB0cnVlKSA9PSA0Mik7
CisgICAgdmFsdWUgPSAwOworICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAmdmFsdWUgLSAy
LCAxLCB0cnVlKSA9PSA0Mik7CisgICAgdmFsdWUgPSAtMTsKKyAgICBDSEVDSyhpbnZva2U8aW50
PigqY29kZSwgJnZhbHVlIC0gMiwgMSwgdHJ1ZSkgPT0gNDIpOworCisgICAgdmFsdWUgPSA0MjsK
KyAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgJnZhbHVlIC0gMiwgMSwgZmFsc2UpID09IDQ1
KTsKKyAgICB2YWx1ZSA9IDEyNzsKKyAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgJnZhbHVl
IC0gMiwgMSwgZmFsc2UpID09IDQ1KTsKKyAgICB2YWx1ZSA9IDQxOworICAgIENIRUNLKGludm9r
ZTxpbnQ+KCpjb2RlLCAmdmFsdWUgLSAyLCAxLCBmYWxzZSkgPT0gNDQpOworICAgIHZhbHVlID0g
MDsKKyAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgJnZhbHVlIC0gMiwgMSwgZmFsc2UpID09
IDQ0KTsKKyAgICB2YWx1ZSA9IC0xOworICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAmdmFs
dWUgLSAyLCAxLCBmYWxzZSkgPT0gNDQpOworfQorCiB2b2lkIHRlc3RDaGVja0FkZEltbSgpCiB7
CiAgICAgUHJvY2VkdXJlIHByb2M7CkBAIC03ODYwLDYgKzgwMTcsOCBAQCB2b2lkIHJ1bihjb25z
dCBjaGFyKiBmaWx0ZXIpCiAgICAgUlVOKHRlc3RTaW1wbGVDaGVjaygpKTsKICAgICBSVU4odGVz
dENoZWNrTGVzc1RoYW4oKSk7CiAgICAgUlVOKHRlc3RDaGVja01lZ2FDb21ibygpKTsKKyAgICBS
VU4odGVzdENoZWNrVHdvTWVnYUNvbWJvcygpKTsKKyAgICBSVU4odGVzdENoZWNrVHdvTm9uUmVk
dW5kYW50TWVnYUNvbWJvcygpKTsKICAgICBSVU4odGVzdENoZWNrQWRkSW1tKCkpOwogICAgIFJV
Tih0ZXN0Q2hlY2tBZGRJbW1Db21tdXRlKCkpOwogICAgIFJVTih0ZXN0Q2hlY2tBZGRJbW1Tb21l
UmVnaXN0ZXIoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29k
ZS5vcGNvZGVzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
T3Bjb2RlLm9wY29kZXMJKHJldmlzaW9uIDE5Mzk5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHdvcmtpbmcgY29weSkKQEAgLTI4Miw3ICsyODIs
MjcgQEAgTW92ZTMyIFU6RywgRDpHCiBTaWduRXh0ZW5kMzJUb1B0ciBVOkcsIEQ6RwogICAgIFRt
cCwgVG1wCiAKK1plcm9FeHRlbmQ4VG8zMiBVOkcsIEQ6RworICAgIFRtcCwgVG1wCisgICAgQWRk
ciwgVG1wIGFzIGxvYWQ4CisgICAgSW5kZXgsIFRtcCBhcyBsb2FkOAorCitTaWduRXh0ZW5kOFRv
MzIgVTpHLCBEOkcKKyAgICBUbXAsIFRtcAorICAgIEFkZHIsIFRtcCBhcyBsb2FkOFNpZ25lZEV4
dGVuZFRvMzIKKyAgICBJbmRleCwgVG1wIGFzIGxvYWQ4U2lnbmVkRXh0ZW5kVG8zMgorCitaZXJv
RXh0ZW5kMTZUbzMyIFU6RywgRDpHCisgICAgVG1wLCBUbXAKKyAgICBBZGRyLCBUbXAgYXMgbG9h
ZDE2CisgICAgSW5kZXgsIFRtcCBhcyBsb2FkMTYKKworU2lnbkV4dGVuZDE2VG8zMiBVOkcsIEQ6
RworICAgIFRtcCwgVG1wCisgICAgQWRkciwgVG1wIGFzIGxvYWQxNlNpZ25lZEV4dGVuZFRvMzIK
KyAgICBJbmRleCwgVG1wIGFzIGxvYWQxNlNpZ25lZEV4dGVuZFRvMzIKKwogTW92ZUZsb2F0IFU6
RiwgRDpGCiAgICAgVG1wLCBUbXAgYXMgbW92ZURvdWJsZQogICAgIEFkZHIsIFRtcCBhcyBsb2Fk
RmxvYXQKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>267250</attachid>
            <date>2015-12-12 18:48:29 -0800</date>
            <delta_ts>2015-12-12 18:50:41 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>31862</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk0MDEyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBA
CisyMDE1LTEyLTEyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QjMtPkFpciBjb21wYXJlLWJyYW5jaCBmdXNpb24gc2hvdWxkIGZ1c2UgZXZlbiBpZiB0aGUgcmVz
dWx0IG9mIHRoZSBjb21wYXJpc29uIGlzIHVzZWQgbW9yZSB0aGFuIG9uY2UKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjE5OAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElmIHdlIGhhdmUgYSBjb21wYXJp
c29uIG9wZXJhdGlvbiB0aGF0IGlzIGJyYW5jaGVkIG9uIGZyb20gbXVsdGlwbGUgcGxhY2VzLCB0
aGVuIHdlIHdlcmUKKyAgICAgICAgcHJldmlvdXNseSBleGVjdXRpbmcgdGhlIGNvbXBhcmlzb24g
dG8gZ2V0IGEgYm9vbGVhbiByZXN1bHQgaW4gYSByZWdpc3RlciBhbmQgdGhlbiB3ZSB3ZXJlCisg
ICAgICAgIHRlc3RpbmcvYnJhbmNoaW5nIG9uIHRoYXQgcmVnaXN0ZXIgaW4gbXVsdGlwbGUgcGxh
Y2VzLiBUaGlzIGlzIGFjdHVhbGx5IGxlc3MgZWZmaWNpZW50IHRoYW4KKyAgICAgICAganVzdCBm
dXNpbmcgdGhlIGNvbXBhcmUvYnJhbmNoIG11bHRpcGxlIHRpbWVzLCBldmVuIHRob3VnaCB0aGlz
IG1lYW5zIHRoYXQgdGhlIGNvbXBhcmlzb24KKyAgICAgICAgZXhlY3V0ZXMgbXVsdGlwbGUgdGlt
ZXMuIFRoaXMgd291bGQgb25seSBiZSBiYWQgaWYgdGhlIGNvbXBhcmlzb24gZnVzZWQgbG9hZHMg
bXVsdGlwbGUgdGltZXMsCisgICAgICAgIHNpbmNlIGR1cGxpY2F0aW5nIGxvYWRzIGlzIGJvdGgg
d3JvbmcgYW5kIGluZWZmaWNpZW50LiBTbywgdGhpcyBhZGRzIHRoZSBub3Rpb24gb2Ygc2hhcmlu
ZyB0bworICAgICAgICBjb21wYXJlL2JyYW5jaCBmdXNpb24uIElmIGEgY29tcGFyZSBpcyBzaGFy
ZWQgYnkgbXVsdGlwbGUgYnJhbmNoZXMsIHRoZW4gd2UgcmVmdXNlIHRvIGZ1c2UKKyAgICAgICAg
dGhlIGxvYWQuCisKKyAgICAgICAgVG8gd3JpdGUgdGhlIHRlc3QsIEkgbmVlZGVkIHRvIHplcm8t
ZXh0ZW5kIDggdG8gMzIuIEluIHRoZSBwcm9jZXNzIG9mIHRoaW5raW5nIGFib3V0IGhvdyB0bwor
ICAgICAgICBkbyB0aGlzLCBJIHJlYWxpemVkIHRoYXQgd2UgbmVlZGVkIGxvd2VyaW5ncyBmb3Ig
U0V4dDgvU0V4dDE2LiBBbmQgSSByZWFsaXplZCB0aGF0IHRoZQorICAgICAgICBsb3dlcmluZ3Mg
Zm9yIHRoZSBvdGhlciBleHRlbnNpb24gb3BlcmF0aW9ucyB3ZXJlIG5vdCBmdWxseSBmbGVzaGVk
IG91dDsgZm9yIGV4YW1wbGUgdGhleQorICAgICAgICB3ZXJlIGluY2FwYWJsZSBvZiBsb2FkIGZ1
c2lvbi4gVGhpcyBwYXRjaCBmaXhlcyB0aGlzIGFuZCBhbHNvIGFkZHMgc29tZSBzbWFydCBzdHJl
bmd0aAorICAgICAgICByZWR1Y3Rpb25zIGZvciBCaXRBbmQoQHgsIDB4ZmYvMHhmZmZmLzB4ZmZm
ZmZmZmYpIC0gYWxsIG9mIHdoaWNoIHNob3VsZCBiZSBsb3dlcmVkIHRvIGEgemVybworICAgICAg
ICBleHRlbnNpb24uCisKKyAgICAgICAgVGhpcyBpcyBhIGJpZyB3aW4gb24gYXNtLmpzIGNvZGUu
IEl0J3Mgbm90IGVub3VnaCB0byBicmlkZ2UgdGhlIGdhcCB0byBMTFZNLCBidXQgaXQncyBhIGh1
Z2UKKyAgICAgICAgc3RlcCBpbiB0aGF0IGRpcmVjdGlvbi4KKworICAgICAgICAqIGFzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
clg4NkNvbW1vbjo6bG9hZDhTaWduZWRFeHRlbmRUbzMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9B
c3NlbWJsZXJYODZDb21tb246Onplcm9FeHRlbmQ4VG8zMik6CisgICAgICAgIChKU0M6Ok1hY3Jv
QXNzZW1ibGVyWDg2Q29tbW9uOjpzaWduRXh0ZW5kOFRvMzIpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlclg4NkNvbW1vbjo6bG9hZDE2KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJYODZDb21tb246OmxvYWQxNlNpZ25lZEV4dGVuZFRvMzIpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlclg4NkNvbW1vbjo6emVyb0V4dGVuZDE2VG8zMik6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpzaWduRXh0ZW5kMTZUbzMyKToKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJYODZDb21tb246OnN0b3JlMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKToK
KyAgICAgICAgKiBhc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6Olg4NkFz
c2VtYmxlcjo6bW92emJsX3JyKToKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjptb3ZzYmxf
cnIpOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6Om1vdnp3bF9ycik6CisgICAgICAgIChK
U0M6Olg4NkFzc2VtYmxlcjo6bW92c3dsX3JyKToKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVy
OjpjbW92bF9ycik6CisgICAgICAgICogYjMvQjNMb3dlclRvQWlyLmNwcDoKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6Y3JlYXRlR2VuZXJpY0NvbXBhcmUpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpsb3dlcik6CisgICAgICAgICogYjMvYWlyL0Fpck9w
Y29kZS5vcGNvZGVzOgorICAgICAgICAqIGIzL3Rlc3RiMy5jcHA6CisgICAgICAgIChKU0M6OkIz
Ojp0ZXN0Q2hlY2tNZWdhQ29tYm8pOgorICAgICAgICAoSlNDOjpCMzo6dGVzdENoZWNrVHdvTWVn
YUNvbWJvcyk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Q2hlY2tUd29Ob25SZWR1bmRhbnRNZWdh
Q29tYm9zKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RDaGVja0FkZEltbSk6CisgICAgICAgIChK
U0M6OkIzOjpydW4pOgorCiAyMDE1LTEyLTEyICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW5A
d2Via2l0Lm9yZz4KIAogICAgICAgICBbSlNDXSBBZGQgbG93ZXJpbmcgZm9yIEIzJ3MgU3RvcmU4
IG9wY29kZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlclg4NkNvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAkocmV2aXNpb24gMTk0MDEyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC02NDQsNiArNjQ0LDE2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IG1fYXNzZW1ibGVyLm1vdnNibF9tcihhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBkZXN0
KTsKICAgICB9CisKKyAgICB2b2lkIHplcm9FeHRlbmQ4VG8zMihSZWdpc3RlcklEIHNyYywgUmVn
aXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92emJsX3JyKHNyYywg
ZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2lnbkV4dGVuZDhUbzMyKFJlZ2lzdGVySUQg
c3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZzYmxf
cnIoc3JjLCBkZXN0KTsKKyAgICB9CiAgICAgCiAgICAgdm9pZCBsb2FkMTYoQmFzZUluZGV4IGFk
ZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CkBAIC02NjUsNiArNjc1LDE2IEBAIHB1Ymxp
YzoKICAgICAgICAgbV9hc3NlbWJsZXIubW92c3dsX21yKGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNz
LmJhc2UsIGRlc3QpOwogICAgIH0KIAorICAgIHZvaWQgemVyb0V4dGVuZDE2VG8zMihSZWdpc3Rl
cklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92
endsX3JyKHNyYywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2lnbkV4dGVuZDE2VG8z
MihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubW92c3dsX3JyKHNyYywgZGVzdCk7CisgICAgfQorICAgIAogICAgIERhdGFMYWJlbDMy
IHN0b3JlMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGFk
ZHJlc3MpCiAgICAgewogICAgICAgICBwYWRCZWZvcmVQYXRjaCgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCShyZXZpc2lvbiAxOTQw
MTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzE5LDYgKzE3MTksMjEgQEAgcHVibGljOgogICAgICAgICBtX2Zv
cm1hdHRlci50d29CeXRlT3A4KE9QMl9NT1ZaWF9HdkViLCBkc3QsIHNyYyk7CiAgICAgfQogCisg
ICAgdm9pZCBtb3ZzYmxfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsK
KyAgICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wOChPUDJfTU9WU1hfR3ZFYiwgZHN0LCBzcmMp
OworICAgIH0KKworICAgIHZvaWQgbW92endsX3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklE
IGRzdCkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcDgoT1AyX01PVlpYX0d2
RXcsIGRzdCwgc3JjKTsKKyAgICB9CisKKyAgICB2b2lkIG1vdnN3bF9ycihSZWdpc3RlcklEIHNy
YywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3A4
KE9QMl9NT1ZTWF9HdkV3LCBkc3QsIHNyYyk7CisgICAgfQorCiAgICAgdm9pZCBjbW92bF9ycihD
b25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKICAg
ICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wKGNtb3ZjYyhjb25kKSwgZHN0LCBzcmMpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHJldmlzaW9uIDE5
NDAxMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NzMsMjAgKzg3MywxMjggQEAgcHJpdmF0ZToKICAgICAgICAgY29uc3Qg
Q29tcGFyZUZsb2F0RnVuY3RvciYgY29tcGFyZUZsb2F0LCAvLyBTaWduYXR1cmU6IChBcmcgZG91
YmxlQ29uZCwgQXJnLCBBcmcpIC0+IEluc3QKICAgICAgICAgYm9vbCBpbnZlcnRlZCA9IGZhbHNl
KQogICAgIHsKKyAgICAgICAgLy8gTk9URTogVGhpcyBpcyB0b3RhbGx5IGhhcHB5IHRvIG1hdGNo
IGNvbXBhcmlzb25zIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gY29tcHV0ZWQgZWxzZXdoZXJlCisg
ICAgICAgIC8vIHNpbmNlIG9uIG1vc3QgYXJjaGl0ZWN0dXJlcywgdGhlIGNvc3Qgb2YgYnJhbmNo
aW5nIG9uIGEgcHJldmlvdXNseSBjb21wdXRlZCBjb21wYXJpc29uCisgICAgICAgIC8vIHJlc3Vs
dCBpcyBhbG1vc3QgYWx3YXlzIGhpZ2hlciB0aGFuIGp1c3QgZG9pbmcgYW5vdGhlciBmdXNlZCBj
b21wYXJlL2JyYW5jaC4gVGhlIG9ubHkgdGltZQorICAgICAgICAvLyBpdCBjb3VsZCBiZSB3b3Jz
ZSBpcyBpZiB3ZSBoYXZlIGEgYmluYXJ5IGNvbXBhcmlzb24gYW5kIGJvdGggb3BlcmFuZHMgYXJl
IHZhcmlhYmxlcyAobm90CisgICAgICAgIC8vIGNvbnN0YW50cyksIGFuZCB3ZSBlbmNvdW50ZXIg
cmVnaXN0ZXIgcHJlc3N1cmUuIEV2ZW4gaW4gdGhpcyBjYXNlLCBkdXBsaWNhdGluZyB0aGUgY29t
cGFyZQorICAgICAgICAvLyBzbyB0aGF0IHdlIGNhbiBmdXNlIGl0IHRvIHRoZSBicmFuY2ggd2ls
bCBiZSBtb3JlIGVmZmljaWVudCBtb3N0IG9mIHRoZSB0aW1lLCBzaW5jZQorICAgICAgICAvLyBy
ZWdpc3RlciBwcmVzc3VyZSBpcyBub3QgKnRoYXQqIGNvbW1vbi4gRm9yIHRoaXMgcmVhc29uLCB0
aGlzIGFsZ29yaXRobSB3aWxsIGFsd2F5cworICAgICAgICAvLyBkdXBsaWNhdGUgdGhlIGNvbXBh
cmlzb24uCisgICAgICAgIC8vCisgICAgICAgIC8vIEhvd2V2ZXIsIHdlIGNhbm5vdCBkdXBsaWNh
dGUgbG9hZHMuIFRoZSBjYW5CZUludGVybmFsKCkgb24gYSBsb2FkIHdpbGwgYXNzdW1lIHRoYXQg
d2UKKyAgICAgICAgLy8gYWxyZWFkeSB2YWxpZGF0ZWQgY2FuQmVJbnRlcm5hbCgpIG9uIGFsbCBv
ZiB0aGUgdmFsdWVzIHRoYXQgZ290IHVzIHRvIHRoZSBsb2FkLiBTbywgZXZlbgorICAgICAgICAv
LyBpZiB3ZSBhcmUgc2hhcmluZyBhIHZhbHVlLCB3ZSBzdGlsbCBuZWVkIHRvIGNhbGwgY2FuQmVJ
bnRlcm5hbCgpIGZvciB0aGUgcHVycG9zZSBvZgorICAgICAgICAvLyB0cmFja2luZyB3aGV0aGVy
IHdlIGFyZSBzdGlsbCBpbiBnb29kIHNoYXBlIHRvIGZ1c2UgbG9hZHMuCisgICAgICAgIC8vCisg
ICAgICAgIC8vIFdlIGNvdWxkIGV2ZW4gaGF2ZSBhIGNoYWluIG9mIGNvbXBhcmUgdmFsdWVzIHRo
YXQgd2UgZnVzZSwgYW5kIGFueSBtZW1iZXIgb2YgdGhlIGNoYWluCisgICAgICAgIC8vIGNvdWxk
IGJlIHNoYXJlZC4gT25jZSBhbnkgb2YgdGhlbSBhcmUgc2hhcmVkLCB0aGVuIHRoZSBzaGFyZWQg
b25lJ3MgdHJhbnNpdGl2ZSBjaGlsZHJlbgorICAgICAgICAvLyBjYW5ub3QgYmUgbG9ja2VkIChp
LmUuIGNvbW1pdEludGVybmFsKCkpLiBCdXQgaWYgbm9uZSBvZiB0aGVtIGFyZSBzaGFyZWQsIHRo
ZW4gd2Ugd2FudCB0bworICAgICAgICAvLyBsb2NrIGFsbCBvZiB0aGVtIGJlY2F1c2UgdGhhdCdz
IGEgcHJlcmVxdWlzaXRlIHRvIGZ1c2luZyB0aGUgbG9hZHMgc28gdGhhdCB0aGUgbG9hZHMgZG9u
J3QKKyAgICAgICAgLy8gZ2V0IGR1cGxpY2F0ZWQuIEZvciBleGFtcGxlLCB3ZSBtaWdodCBoYXZl
OiAKKyAgICAgICAgLy8KKyAgICAgICAgLy8gICAgIEB0bXAxID0gTGVzc1RoYW4oQGEsIEBiKQor
ICAgICAgICAvLyAgICAgQHRtcDIgPSBFcXVhbChAdG1wMSwgMCkKKyAgICAgICAgLy8gICAgIEJy
YW5jaChAdG1wMikKKyAgICAgICAgLy8KKyAgICAgICAgLy8gSWYgZWl0aGVyIEBhIG9yIEBiIGFy
ZSBsb2FkcywgdGhlbiB3ZSB3YW50IHRvIGhhdmUgbG9ja2VkIEB0bXAxIGFuZCBAdG1wMiBzbyB0
aGF0IHRoZXkKKyAgICAgICAgLy8gZG9uJ3QgZW1pdCB0aGUgbG9hZHMgYSBzZWNvbmQgdGltZS4g
QnV0IGlmIHdlIGhhZCBhbm90aGVyIHVzZSBvZiBAdG1wMiwgdGhlbiB3ZSBjYW5ub3QKKyAgICAg
ICAgLy8gbG9jayBAdG1wMSAob3IgQGEgb3IgQGIpIGJlY2F1c2UgdGhlbiB3ZSdsbCBnZXQgaW50
byB0cm91YmxlIHdoZW4gdGhlIG90aGVyIHZhbHVlcyB0aGF0CisgICAgICAgIC8vIHRyeSB0byBz
aGFyZSBAdG1wMSB3aXRoIHVzIHRyeSB0byBkbyB0aGVpciBsb3dlcmluZy4KKyAgICAgICAgLy8K
KyAgICAgICAgLy8gVGhlcmUncyBvbmUgbW9yZSB3cmlua2xlLiBJZiB3ZSBkb24ndCBsb2NrIGFu
IGludGVybmFsIHZhbHVlLCB0aGVuIHRoaXMgaW50ZXJuYWwgdmFsdWUgbWF5CisgICAgICAgIC8v
IGhhdmUgYWxyZWFkeSBzZXBhcmF0ZWx5IGxvY2tlZCBpdHMgY2hpbGRyZW4uIFNvLCBpZiB3ZSdy
ZSBub3QgbG9ja2luZyBhIHZhbHVlIHRoZW4gd2UgbmVlZAorICAgICAgICAvLyB0byBtYWtlIHN1
cmUgdGhhdCBpdHMgY2hpbGRyZW4gYXJlbid0IGxvY2tlZC4gV2UgZW5jYXBzdWxhdGUgdGhpcyBp
biB0d28gd2F5czoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gY2FuQ29tbWl0SW50ZXJuYWw6IFRo
aXMgdmFyaWFibGUgdGVsbHMgdXMgaWYgdGhlIHZhbHVlcyB0aGF0IHdlJ3ZlIGZ1c2VkIHNvIGZh
ciBhcmUKKyAgICAgICAgLy8gbG9ja2VkLiBUaGlzIG1lYW5zIHRoYXQgd2UncmUgbm90IHNoYXJp
bmcgYW55IG9mIHRoZW0gd2l0aCBhbnlvbmUuIFRoaXMgcGVybWl0cyB1cyB0byBmdXNlCisgICAg
ICAgIC8vIGxvYWRzLiBJZiBpdCdzIGZhbHNlLCB0aGVuIHdlIGNhbm5vdCBmdXNlIGxvYWRzIGFu
ZCB3ZSBhbHNvIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlCisgICAgICAgIC8vIGNoaWxkcmVuIG9m
IGFueSB2YWx1ZXMgd2UgdHJ5IHRvIGZ1c2UtYnktc2hhcmluZyBhcmUgbm90IGFscmVhZHkgbG9j
a2VkLiBZb3UgZG9uJ3QgaGF2ZSB0bworICAgICAgICAvLyB3b3JyeSBhYm91dCB0aGUgY2hpbGRy
ZW4gbG9ja2luZyB0aGluZyBpZiB5b3UgdXNlIHByZXBhcmVUb0Z1c2UoKSBiZWZvcmUgdHJ5aW5n
IHRvIGZ1c2UgYQorICAgICAgICAvLyBzaGFyYWJsZSB2YWx1ZS4gQnV0LCB5b3UgZG8gbmVlZCB0
byBndWFyZCBhbnkgbG9hZCBmdXNpb24gYnkgY2hlY2tpbmcgaWYgY2FuQ29tbWl0SW50ZXJuYWwK
KyAgICAgICAgLy8gaXMgdHJ1ZS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gYm9vbCBwcmVwYXJl
VG9GdXNlKHZhbHVlKTogQ2FsbCB0aGlzIHdoZW4geW91IGtub3cgdGhhdCB5b3Ugd291bGQgbGlr
ZSB0byBmdXNlIHNvbWUgdmFsdWUKKyAgICAgICAgLy8gYW5kIHRoYXQgdmFsdWUgaXMgbm90IGEg
bG9hZC4gSXQgd2lsbCBhdXRvbWF0aWNhbGx5IGhhbmRsZSB0aGUgc2hhcmVkLW9yLWxvY2tlZCBp
c3N1ZXMgYW5kCisgICAgICAgIC8vIGl0IHdpbGwgY2xlYXIgY2FuQ29tbWl0SW50ZXJuYWwgaWYg
bmVjZXNzYXJ5LiBUaGlzIHdpbGwgcmV0dXJuIGZhbHNlIGlmIHRoZSB2YWx1ZSBjYW5ub3QKKyAg
ICAgICAgLy8gYmUgbG9ja2VkIGFuZCBpdHMgY2hpbGRyZW4gYXJlIGxvY2tlZC4gVGhhdCdzIHJh
cmUsIGJ1dCB5b3UganVzdCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0CisgICAgICAgIC8vIHlvdSBk
byBzbWFydCB0aGluZ3Mgd2hlbiB0aGlzIGhhcHBlbnMgKGkuZS4ganVzdCB1c2UgdGhlIHZhbHVl
IHJhdGhlciB0aGFuIHRyeWluZyB0byBmdXNlCisgICAgICAgIC8vIGl0KS4KKyAgICAgICAgYm9v
bCBjYW5Db21taXRJbnRlcm5hbCA9IHRydWU7CisKKyAgICAgICAgYXV0byBwcmVwYXJlVG9GdXNl
ID0gWyZdIChWYWx1ZSogdmFsdWUpIC0+IGJvb2wgeworICAgICAgICAgICAgaWYgKHZhbHVlID09
IG1fdmFsdWUpIHsKKyAgICAgICAgICAgICAgICAvLyBJdCdzIG5vdCBhY3R1YWxseSBpbnRlcm5h
bC4gSXQncyB0aGUgcm9vdCB2YWx1ZS4gV2UncmUgZ29vZCB0byBnby4KKyAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNhbkNvbW1p
dEludGVybmFsICYmIGNhbkJlSW50ZXJuYWwodmFsdWUpKSB7CisgICAgICAgICAgICAgICAgLy8g
V2UgYXJlIHRoZSBvbmx5IHVzZXJzIG9mIHRoaXMgdmFsdWUuIFRoaXMgYWxzbyBtZWFucyB0aGF0
IHRoZSB2YWx1ZSdzIGNoaWxkcmVuCisgICAgICAgICAgICAgICAgLy8gY291bGQgbm90IGhhdmUg
YmVlbiBsb2NrZWQsIHNpbmNlIHdlIGhhdmUgbm93IHByb3ZlZCB0aGF0IG1fdmFsdWUgZG9taW5h
dGVzIHZhbHVlCisgICAgICAgICAgICAgICAgLy8gaW4gdGhlIGRhdGEgZmxvdyBncmFwaC4gVG8g
b25seSBvdGhlciB3YXkgdG8gdmFsdWUgaXMgZnJvbSBhIHVzZXIgb2YgbV92YWx1ZS4gSWYKKyAg
ICAgICAgICAgICAgICAvLyB2YWx1ZSdzIGNoaWxkcmVuIGFyZSBzaGFyZWQgd2l0aCBvdGhlcnMs
IHRoZW4gdGhleSBjb3VsZCBub3QgaGF2ZSBiZWVuIGxvY2tlZAorICAgICAgICAgICAgICAgIC8v
IGJlY2F1c2UgdGhlaXIgdXNlIGNvdW50IGlzIGdyZWF0ZXIgdGhhbiAxLiBJZiB0aGV5IGFyZSBv
bmx5IHVzZWQgZnJvbSB2YWx1ZSwgdGhlbgorICAgICAgICAgICAgICAgIC8vIGluIG9yZGVyIGZv
ciB2YWx1ZSdzIGNoaWxkcmVuIHRvIGJlIGxvY2tlZCwgdmFsdWUgd291bGQgYWxzbyBoYXZlIHRv
IGJlIGxvY2tlZCwKKyAgICAgICAgICAgICAgICAvLyBhbmQgd2UganVzdCBwcm92ZWQgdGhhdCBp
dCB3YXNuJ3QuCisgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwodmFsdWUpOworICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBX
ZSdyZSBnb2luZyB0byB0cnkgdG8gc2hhcmUgdmFsdWUgd2l0aCBvdGhlcnMuIEl0J3MgcG9zc2li
bGUgdGhhdCBzb21lIG90aGVyIGJhc2ljCisgICAgICAgICAgICAvLyBibG9jayBoYWQgYWxyZWFk
eSBlbWl0dGVkIGNvZGUgZm9yIHZhbHVlIGFuZCB0aGVuIG1hdGNoZWQgb3ZlciBpdHMgY2hpbGRy
ZW4gYW5kIHRoZW4KKyAgICAgICAgICAgIC8vIGxvY2tlZCB0aGVtLCBpbiB3aGljaCBjYXNlIHdl
IGp1c3Qgd2FudCB0byB1c2UgdmFsdWUgaW5zdGVhZCBvZiBkdXBsaWNhdGluZyBpdC4gU28sIHdl
CisgICAgICAgICAgICAvLyB2YWxpZGF0ZSB0aGUgY2hpbGRyZW4uIE5vdGUgdGhhdCB0aGlzIG9u
bHkgYXJpc2VzIGluIGxpbmVhciBjaGFpbnMgbGlrZToKKyAgICAgICAgICAgIC8vCisgICAgICAg
ICAgICAvLyAgICAgQkIjMToKKyAgICAgICAgICAgIC8vICAgICAgICAgQDEgPSBGb28oLi4uKQor
ICAgICAgICAgICAgLy8gICAgICAgICBAMiA9IEJhcihAMSkKKyAgICAgICAgICAgIC8vICAgICAg
ICAgSnVtcCgjMikKKyAgICAgICAgICAgIC8vICAgICBCQiMyOgorICAgICAgICAgICAgLy8gICAg
ICAgICBAMyA9IEJheihAMikKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBOb3RpY2Ug
aG93IHdlIGNvdWxkIHN0YXJ0IGJ5IGdlbmVyYXRpbmcgY29kZSBmb3IgQkIjMSBhbmQgdGhlbiBk
ZWNpZGUgdG8gbG9jayBAMSB3aGVuCisgICAgICAgICAgICAvLyBnZW5lcmF0aW5nIGNvZGUgZm9y
IEAyLCBpZiB3ZSBoYXZlIHNvbWUgd2F5IG9mIGZ1c2luZyBCYXIgYW5kIEZvbyBpbnRvIGEgc2lu
Z2xlCisgICAgICAgICAgICAvLyBpbnN0cnVjdGlvbi4gVGhpcyBpcyBsZWdhbCwgc2luY2UgaW5k
ZWVkIEAxIG9ubHkgaGFzIG9uZSB1c2VyLiBUaGUgZmFjdCB0aGF0IEAyIG5vdworICAgICAgICAg
ICAgLy8gaGFzIGEgdG1wIChpLmUuIEAyIGlzIHBpbm5lZCksIGNhbkJlSW50ZXJuYWwoQDIpIHdp
bGwgcmV0dXJuIGZhbHNlLCB3aGljaCBicmluZ3MgdXMKKyAgICAgICAgICAgIC8vIGhlcmUuIElu
IHRoYXQgY2FzZSwgd2UgY2Fubm90IG1hdGNoIG92ZXIgQDIgYmVjYXVzZSB0aGVuIHdlJ2QgaGl0
IGEgaGF6YXJkIGlmIHdlIGVuZAorICAgICAgICAgICAgLy8gdXAgZGVjaWRpbmcgbm90IHRvIGZ1
c2UgRm9vIGludG8gdGhlIGZ1c2VkIEJhei9CYXIuCisgICAgICAgICAgICAvLworICAgICAgICAg
ICAgLy8gSGFwcGlseSwgdGhlcmUgYXJlIG9ubHkgdHdvIHBsYWNlcyB3aGVyZSB0aGlzIGtpbmQg
b2YgY2hpbGQgdmFsaWRhdGlvbiBoYXBwZW5zIGlzIGluCisgICAgICAgICAgICAvLyBydWxlcyB0
aGF0IGFkbWl0IHNoYXJpbmcsIGxpa2UgdGhpcyBhbmQgZWZmZWN0aXZlQWRkcmVzcygpLgorICAg
ICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIE4uQi4gV2UgY291bGQgcHJvYmFibHkgYXZvaWQg
dGhlIG5lZWQgdG8gZG8gdmFsdWUgbG9ja2luZyBpZiB3ZSBjb21taXR0ZWQgdG8gYSB3ZWxsCisg
ICAgICAgICAgICAvLyBjaG9zZW4gY29kZSBnZW5lcmF0aW9uIG9yZGVyLiBGb3IgZXhhbXBsZSwg
aWYgd2UgZ3VhcmFudGVlZCB0aGF0IGFsbCBvZiB0aGUgdXNlcnMgb2YKKyAgICAgICAgICAgIC8v
IGEgdmFsdWUgZ2V0IGdlbmVyYXRlZCBiZWZvcmUgdGhhdCB2YWx1ZSwgdGhlbiB0aGVyZSdzIG5v
IHdheSBmb3IgdGhlIGxvd2VyaW5nIG9mIEAzIHRvCisgICAgICAgICAgICAvLyBzZWUgQDEgbG9j
a2VkLiBCdXQgd2UgZG9uJ3Qgd2FudCB0byBkbyB0aGF0LCBzaW5jZSB0aGlzIGlzIGEgZ3JlZWR5
IGluc3RydWN0aW9uCisgICAgICAgICAgICAvLyBzZWxlY3RvciBhbmQgc28gd2Ugd2FudCB0byBi
ZSBhYmxlIHRvIHBsYXkgd2l0aCBvcmRlci4KKyAgICAgICAgICAgIGZvciAoVmFsdWUqIGNoaWxk
IDogdmFsdWUtPmNoaWxkcmVuKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9sb2NrZWQuY29u
dGFpbnMoY2hpbGQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIC8vIEl0J3Mgc2FmZSB0byBzaGFyZSB2YWx1ZSwgYnV0IHNp
bmNlIHdlJ3JlIHNoYXJpbmcsIGl0IG1lYW5zIHRoYXQgd2UgYXJlbid0IGxvY2tpbmcgaXQuCisg
ICAgICAgICAgICAvLyBJZiB3ZSBkb24ndCBsb2NrIGl0LCB0aGVuIGZ1c2luZyBsb2FkcyBpcyBv
ZmYgbGltaXRzIGFuZCBhbGwgb2YgdmFsdWUncyBjaGlsZHJlbiB3aWxsCisgICAgICAgICAgICAv
LyBoYXZlIHRvIGdvIHRocm91Z2ggdGhlIHNoYXJpbmcgcGF0aCBhcyB3ZWxsLgorICAgICAgICAg
ICAgY2FuQ29tbWl0SW50ZXJuYWwgPSBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH07CisgICAgICAgIAogICAgICAgICAvLyBDaGV3IHRocm91
Z2ggYW55IG5lZ2F0aW9ucy4gSXQncyBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IGZvciB0aGlzIHRv
IGJlIGEgbG9vcCwgYnV0IHdlIGxpa2UKICAgICAgICAgLy8gdG8gZm9sbG93IHRoZSBydWxlIHRo
YXQgdGhlIGluc3RydWN0aW9uIHNlbGVjdG9yIHJlZHVjZXMgc3RyZW5ndGggd2hlbmV2ZXIgaXQg
ZG9lc24ndAogICAgICAgICAvLyByZXF1aXJlIG1ha2luZyB0aGluZ3MgbW9yZSBjb21wbGljYXRl
ZC4KICAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgaWYgKCFjYW5CZUludGVybmFsKHZh
bHVlKSAmJiB2YWx1ZSAhPSBtX3ZhbHVlKQotICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgYm9vbCBzaG91bGRJbnZlcnQgPQogICAgICAgICAgICAgICAgICh2YWx1ZS0+b3Bjb2Rl
KCkgPT0gQml0WG9yICYmIHZhbHVlLT5jaGlsZCgxKS0+aGFzSW50KCkgJiYgKHZhbHVlLT5jaGls
ZCgxKS0+YXNJbnQoKSAmIDEpICYmIHZhbHVlLT5jaGlsZCgwKS0+cmV0dXJuc0Jvb2woKSkKICAg
ICAgICAgICAgICAgICB8fCAodmFsdWUtPm9wY29kZSgpID09IEVxdWFsICYmIHZhbHVlLT5jaGls
ZCgxKS0+aXNJbnQoMCkpOwogICAgICAgICAgICAgaWYgKCFzaG91bGRJbnZlcnQpCiAgICAgICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGlmICghcHJlcGFyZVRvRnVzZSh2YWx1ZSkp
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKICAgICAgICAgICAgIHZhbHVl
ID0gdmFsdWUtPmNoaWxkKDApOwogICAgICAgICAgICAgaW52ZXJ0ZWQgPSAhaW52ZXJ0ZWQ7Ci0g
ICAgICAgICAgICBjb21taXRJbnRlcm5hbCh2YWx1ZSk7CiAgICAgICAgIH0KIAogICAgICAgICBh
dXRvIGNyZWF0ZVJlbENvbmQgPSBbJl0gKApAQCAtOTMxLDUxICsxMDM5LDU1IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CiAgICAgICAgICAgICAgICAgfTsK
IAotICAgICAgICAgICAgICAgIC8vIEZpcnN0IGhhbmRsZSBjb21wYXJlcyB0aGF0IGludm9sdmUg
ZmV3ZXIgYml0cyB0aGFuIEIzJ3MgdHlwZSBzeXN0ZW0gc3VwcG9ydHMuCi0gICAgICAgICAgICAg
ICAgLy8gVGhpcyBpcyBwcmV0dHkgaW1wb3J0YW50LiBGb3IgZXhhbXBsZSwgd2Ugd2FudCB0aGlz
IHRvIGJlIGEgc2luZ2xlIGluc3RydWN0aW9uOgotICAgICAgICAgICAgICAgIC8vCi0gICAgICAg
ICAgICAgICAgLy8gICAgIEAxID0gTG9hZDhTKC4uLikKLSAgICAgICAgICAgICAgICAvLyAgICAg
QDIgPSBDb25zdDMyKC4uLikKLSAgICAgICAgICAgICAgICAvLyAgICAgQDMgPSBMZXNzVGhhbihA
MSwgQDIpCi0gICAgICAgICAgICAgICAgLy8gICAgIEJyYW5jaChAMykKKyAgICAgICAgICAgICAg
ICBBcmc6OldpZHRoIHdpZHRoID0gQXJnOjp3aWR0aEZvckIzVHlwZSh2YWx1ZS0+Y2hpbGQoMCkt
PnR5cGUoKSk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKHJlbENvbmQu
aXNTaWduZWRDb25kKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0g
dHJ5Q29tcGFyZUxvYWRJbW0oQXJnOjpXaWR0aDgsIExvYWQ4UywgQXJnOjpTaWduZWQpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgaWYgKGNhbkNvbW1pdEludGVybmFsKSB7CisgICAgICAgICAgICAgICAg
ICAgIC8vIEZpcnN0IGhhbmRsZSBjb21wYXJlcyB0aGF0IGludm9sdmUgZmV3ZXIgYml0cyB0aGFu
IEIzJ3MgdHlwZSBzeXN0ZW0gc3VwcG9ydHMuCisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMg
aXMgcHJldHR5IGltcG9ydGFudC4gRm9yIGV4YW1wbGUsIHdlIHdhbnQgdGhpcyB0byBiZSBhIHNp
bmdsZQorICAgICAgICAgICAgICAgICAgICAvLyBpbnN0cnVjdGlvbjoKKyAgICAgICAgICAgICAg
ICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIEAxID0gTG9hZDhTKC4uLikKKyAg
ICAgICAgICAgICAgICAgICAgLy8gICAgIEAyID0gQ29uc3QzMiguLi4pCisgICAgICAgICAgICAg
ICAgICAgIC8vICAgICBAMyA9IExlc3NUaGFuKEAxLCBAMikKKyAgICAgICAgICAgICAgICAgICAg
Ly8gICAgIEJyYW5jaChAMykKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAo
cmVsQ29uZC5pc1Vuc2lnbmVkQ29uZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChJbnN0
IHJlc3VsdCA9IHRyeUNvbXBhcmVMb2FkSW1tKEFyZzo6V2lkdGg4LCBMb2FkOFosIEFyZzo6VW5z
aWduZWQpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChyZWxDb25kLmlzU2lnbmVkQ29uZCgp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlDb21wYXJl
TG9hZEltbShBcmc6OldpZHRoOCwgTG9hZDhTLCBBcmc6OlNpZ25lZCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAocmVsQ29uZC5pc1Vuc2lnbmVk
Q29uZCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlD
b21wYXJlTG9hZEltbShBcmc6OldpZHRoOCwgTG9hZDhaLCBBcmc6OlVuc2lnbmVkKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgICAgICBpZiAocmVsQ29uZC5pc1NpZ25lZENvbmQoKSkgewotICAg
ICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlDb21wYXJlTG9hZEltbShBcmc6
OldpZHRoMTYsIExvYWQxNlMsIEFyZzo6U2lnbmVkKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBp
ZiAocmVsQ29uZC5pc1NpZ25lZENvbmQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KEluc3QgcmVzdWx0ID0gdHJ5Q29tcGFyZUxvYWRJbW0oQXJnOjpXaWR0aDE2LCBMb2FkMTZTLCBB
cmc6OlNpZ25lZCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IGlmIChyZWxDb25kLmlzVW5zaWduZWRDb25kKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KEluc3QgcmVzdWx0ID0gdHJ5Q29tcGFyZUxvYWRJbW0oQXJnOjpXaWR0aDE2LCBMb2FkMTZaLCBB
cmc6OlVuc2lnbmVkKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAocmVsQ29uZC5pc1Vuc2ln
bmVkQ29uZCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0
cnlDb21wYXJlTG9hZEltbShBcmc6OldpZHRoMTYsIExvYWQxNlosIEFyZzo6VW5zaWduZWQpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUgY29tcGFyZXMgdGhhdCBp
bnZvbHZlIGEgbG9hZCBhbmQgYW4gaW1tZWRpYXRlLgorICAgICAgICAgICAgICAgICAgICAvLyBO
b3cgaGFuZGxlIGNvbXBhcmVzIHRoYXQgaW52b2x2ZSBhIGxvYWQgYW5kIGFuIGltbWVkaWF0ZS4K
IAotICAgICAgICAgICAgICAgIEFyZzo6V2lkdGggd2lkdGggPSBBcmc6OndpZHRoRm9yQjNUeXBl
KHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpKTsKLSAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1
bHQgPSB0cnlDb21wYXJlTG9hZEltbSh3aWR0aCwgTG9hZCwgQXJnOjpTaWduZWQpKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICBpZiAoSW5z
dCByZXN1bHQgPSB0cnlDb21wYXJlTG9hZEltbSh3aWR0aCwgTG9hZCwgQXJnOjpTaWduZWQpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgICAgICAgICAgICAg
IC8vIE5vdyBoYW5kbGUgY29tcGFyZXMgdGhhdCBpbnZvbHZlIGEgbG9hZC4gSXQncyBub3Qgb2J2
aW91cyB0aGF0IGl0J3MgYmV0dGVyIHRvCi0gICAgICAgICAgICAgICAgLy8gaGFuZGxlIHRoaXMg
YmVmb3JlIHRoZSBpbW1lZGlhdGUgY2FzZXMgb3Igbm90LiBQcm9iYWJseSBkb2Vzbid0IG1hdHRl
ci4KKyAgICAgICAgICAgICAgICAgICAgLy8gTm93IGhhbmRsZSBjb21wYXJlcyB0aGF0IGludm9s
dmUgYSBsb2FkLiBJdCdzIG5vdCBvYnZpb3VzIHRoYXQgaXQncyBiZXR0ZXIgdG8KKyAgICAgICAg
ICAgICAgICAgICAgLy8gaGFuZGxlIHRoaXMgYmVmb3JlIHRoZSBpbW1lZGlhdGUgY2FzZXMgb3Ig
bm90LiBQcm9iYWJseSBkb2Vzbid0IG1hdHRlci4KIAotICAgICAgICAgICAgICAgIGlmIChJbnN0
IHJlc3VsdCA9IHRyeUNvbXBhcmUod2lkdGgsIGxvYWRQcm9taXNlKGxlZnQpLCB0bXBQcm9taXNl
KHJpZ2h0KSkpIHsKLSAgICAgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwobGVmdCk7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlDb21wYXJlKHdpZHRoLCBsb2Fk
UHJvbWlzZShsZWZ0KSwgdG1wUHJvbWlzZShyaWdodCkpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjb21taXRJbnRlcm5hbChsZWZ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlDb21wYXJlKHdpZHRoLCB0bXBQcm9taXNl
KGxlZnQpLCBsb2FkUHJvbWlzZShyaWdodCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbW1p
dEludGVybmFsKHJpZ2h0KTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5Q29tcGFyZSh3aWR0aCwgdG1w
UHJvbWlzZShsZWZ0KSwgbG9hZFByb21pc2UocmlnaHQpKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgY29tbWl0SW50ZXJuYWwocmlnaHQpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUgY29tcGFyZXMgdGhhdCBpbnZvbHZlIGFuIGlt
bWVkaWF0ZSBhbmQgYSB0bXAuCkBAIC0xMDYyLDM5ICsxMTc0LDQxIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CiAgICAgICAgICAgICAgICAgfTsKIAotICAg
ICAgICAgICAgICAgIC8vIEZpcnN0IGhhbmRsZSB0ZXN0J3MgdGhhdCBpbnZvbHZlIGZld2VyIGJp
dHMgdGhhbiBCMydzIHR5cGUgc3lzdGVtIHN1cHBvcnRzLgorICAgICAgICAgICAgICAgIGlmIChj
YW5Db21taXRJbnRlcm5hbCkgeworICAgICAgICAgICAgICAgICAgICAvLyBGaXJzdCBoYW5kbGUg
dGVzdCdzIHRoYXQgaW52b2x2ZSBmZXdlciBiaXRzIHRoYW4gQjMncyB0eXBlIHN5c3RlbSBzdXBw
b3J0cy4KIAotICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeVRlc3RMb2FkSW1t
KEFyZzo6V2lkdGg4LCBMb2FkOFopKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwotCi0gICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5VGVzdExvYWRJbW0oQXJn
OjpXaWR0aDgsIExvYWQ4UykpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0K
LSAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlUZXN0TG9hZEltbShBcmc6Oldp
ZHRoMTYsIExvYWQxNlopKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0g
ICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5VGVzdExvYWRJbW0oQXJnOjpXaWR0
aDE2LCBMb2FkMTZTKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAg
ICAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUgdGVzdCdzIHRoYXQgaW52b2x2ZSBhIGxvYWQgYW5k
IGFuIGltbWVkaWF0ZS4gTm90ZSB0aGF0IGltbWVkaWF0ZXMgYXJlCi0gICAgICAgICAgICAgICAg
Ly8gMzItYml0LCBhbmQgd2Ugd2FudCB6ZXJvLWV4dGVuc2lvbi4gSGVuY2UsIHRoZSBpbW1lZGlh
dGUgZm9ybSBpcyBjb21waWxlZCBhcyBhCi0gICAgICAgICAgICAgICAgLy8gMzItYml0IHRlc3Qu
IE5vdGUgdGhhdCB0aGlzIHNwaXRzIG9uIHRoZSBncmF2ZSBvZiBpbmZlcmlvciBlbmRpYW5zLCBz
dWNoIGFzIHRoZQotICAgICAgICAgICAgICAgIC8vIGJpZyBvbmUuCi0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5VGVzdExvYWRJbW0oQXJnOjpX
aWR0aDMyLCBMb2FkKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAg
ICAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUgdGVzdCdzIHRoYXQgaW52b2x2ZSBhIGxvYWQuCi0K
LSAgICAgICAgICAgICAgICBBcmc6OldpZHRoIHdpZHRoID0gQXJnOjp3aWR0aEZvckIzVHlwZSh2
YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0
ID0gdHJ5VGVzdCh3aWR0aCwgbG9hZFByb21pc2UobGVmdCksIHRtcFByb21pc2UocmlnaHQpKSkg
ewotICAgICAgICAgICAgICAgICAgICBjb21taXRJbnRlcm5hbChsZWZ0KTsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeVRlc3RMb2FkSW1tKEFyZzo6V2lkdGg4LCBMb2Fk
OFopKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeVRlc3RM
b2FkSW1tKEFyZzo6V2lkdGg4LCBMb2FkOFMpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlm
IChJbnN0IHJlc3VsdCA9IHRyeVRlc3RMb2FkSW1tKEFyZzo6V2lkdGgxNiwgTG9hZDE2WikpCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5VGVzdExvYWRJbW0o
QXJnOjpXaWR0aDE2LCBMb2FkMTZTKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAKLSAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlUZXN0KHdpZHRo
LCB0bXBQcm9taXNlKGxlZnQpLCBsb2FkUHJvbWlzZShyaWdodCkpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGNvbW1pdEludGVybmFsKHJpZ2h0KTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0ZXN0J3MgdGhhdCBp
bnZvbHZlIGEgbG9hZCBhbmQgYW4gaW1tZWRpYXRlLiBOb3RlIHRoYXQgaW1tZWRpYXRlcworICAg
ICAgICAgICAgICAgICAgICAvLyBhcmUgMzItYml0LCBhbmQgd2Ugd2FudCB6ZXJvLWV4dGVuc2lv
bi4gSGVuY2UsIHRoZSBpbW1lZGlhdGUgZm9ybSBpcyBjb21waWxlZAorICAgICAgICAgICAgICAg
ICAgICAvLyBhcyBhIDMyLWJpdCB0ZXN0LiBOb3RlIHRoYXQgdGhpcyBzcGl0cyBvbiB0aGUgZ3Jh
dmUgb2YgaW5mZXJpb3IgZW5kaWFucywgc3VjaAorICAgICAgICAgICAgICAgICAgICAvLyBhcyB0
aGUgYmlnIG9uZS4KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlm
IChJbnN0IHJlc3VsdCA9IHRyeVRlc3RMb2FkSW1tKEFyZzo6V2lkdGgzMiwgTG9hZCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0ZXN0J3MgdGhhdCBpbnZvbHZlIGEg
bG9hZC4KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIEFyZzo6V2lk
dGggd2lkdGggPSBBcmc6OndpZHRoRm9yQjNUeXBlKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5VGVzdCh3aWR0aCwgbG9h
ZFByb21pc2UobGVmdCksIHRtcFByb21pc2UocmlnaHQpKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgY29tbWl0SW50ZXJuYWwobGVmdCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlUZXN0KHdpZHRoLCB0bXBQ
cm9taXNlKGxlZnQpLCBsb2FkUHJvbWlzZShyaWdodCkpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjb21taXRJbnRlcm5hbChyaWdodCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0ZXN0J3MgdGhhdCBpbnZvbHZlIGFuIGltbWVk
aWF0ZSBhbmQgYSB0bXAuCkBAIC0xMTE3LDcgKzEyMzEsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgfQogICAgICAgICB9OwogCi0gICAgICAgIGlmIChjYW5CZUludGVybmFsKHZhbHVlKSB8fCB2
YWx1ZSA9PSBtX3ZhbHVlKSB7CisgICAgICAgIGlmIChwcmVwYXJlVG9GdXNlKHZhbHVlKSkgewog
ICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gYXR0ZW1wdEZ1c2VkKCkpIHsKICAgICAgICAg
ICAgICAgICBjb21taXRJbnRlcm5hbCh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKQEAgLTE0NjMsNiArMTU3NywyMSBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAg
ICAgY2FzZSBCaXRBbmQ6IHsKKyAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJ
bnQoMHhmZikpIHsKKyAgICAgICAgICAgICAgICBhcHBlbmRVbk9wPFplcm9FeHRlbmQ4VG8zMiwg
WmVyb0V4dGVuZDhUbzMyPihtX3ZhbHVlLT5jaGlsZCgwKSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobV92YWx1
ZS0+Y2hpbGQoMSktPmlzSW50KDB4ZmZmZikpIHsKKyAgICAgICAgICAgICAgICBhcHBlbmRVbk9w
PFplcm9FeHRlbmQxNlRvMzIsIFplcm9FeHRlbmQxNlRvMzI+KG1fdmFsdWUtPmNoaWxkKDApKTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
IChtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQoMHhmZmZmZmZmZikpIHsKKyAgICAgICAgICAgICAg
ICBhcHBlbmRVbk9wPE1vdmUzMiwgTW92ZTMyPihtX3ZhbHVlLT5jaGlsZCgwKSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAg
ICBhcHBlbmRCaW5PcDxBbmQzMiwgQW5kNjQsIEFuZERvdWJsZSwgQW5kRmxvYXQsIENvbW11dGF0
aXZlPigKICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQo
MSkpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTU3MiwxOCArMTcwMSwyOCBAQCBwcml2YXRl
OgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKKyAgICAgICAgY2FzZSBTRXh0ODog
eworICAgICAgICAgICAgYXBwZW5kVW5PcDxTaWduRXh0ZW5kOFRvMzIsIEFpcjo6T29wcz4obV92
YWx1ZS0+Y2hpbGQoMCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgY2FzZSBTRXh0MTY6IHsKKyAgICAgICAgICAgIGFwcGVuZFVuT3A8U2lnbkV4dGVuZDE2VG8z
MiwgQWlyOjpPb3BzPihtX3ZhbHVlLT5jaGlsZCgwKSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKwogICAgICAgICBjYXNlIFpFeHQzMjogewogICAgICAgICAgICAgaWYgKGhpZ2hC
aXRzQXJlWmVybyhtX3ZhbHVlLT5jaGlsZCgwKSkpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQo
dG1wKG1fdmFsdWUtPmNoaWxkKDApKSA9PSB0bXAobV92YWx1ZSkpOwogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgYXBwZW5kKE1vdmUzMiwgdG1w
KG1fdmFsdWUtPmNoaWxkKDApKSwgdG1wKG1fdmFsdWUpKTsKKyAgICAgICAgICAgIGFwcGVuZFVu
T3A8TW92ZTMyLCBBaXI6Ok9vcHM+KG1fdmFsdWUtPmNoaWxkKDApKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgU0V4dDMyOiB7Ci0gICAgICAgICAgICBh
cHBlbmQoU2lnbkV4dGVuZDMyVG9QdHIsIHRtcChtX3ZhbHVlLT5jaGlsZCgwKSksIHRtcChtX3Zh
bHVlKSk7CisgICAgICAgICAgICBhcHBlbmRVbk9wPFNpZ25FeHRlbmQzMlRvUHRyLCBBaXI6Ok9v
cHM+KG1fdmFsdWUtPmNoaWxkKDApKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkocmV2aXNpb24gMTk0MDEyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU2OTMsNiArNTY5MywxNjMgQEAgdm9pZCB0ZXN0Q2hlY2tNZWdhQ29tYm8oKQogICAgIENIRUNL
KGludm9rZTxpbnQ+KCpjb2RlLCAmdmFsdWUgLSAyLCAxKSA9PSA0Mik7CiB9CiAKK3ZvaWQgdGVz
dENoZWNrVHdvTWVnYUNvbWJvcygpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNC
bG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBWYWx1ZSogYmFzZSA9IHJvb3QtPmFw
cGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIwKTsKKyAgICBWYWx1ZSogaW5kZXggPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAg
ICAgICBwcm9jLCBaRXh0MzIsIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFs
dWU+KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAgICAgICAgcm9v
dC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjph
cmd1bWVudEdQUjEpKSk7CisKKyAgICBWYWx1ZSogcHRyID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVl
PigKKyAgICAgICAgcHJvYywgQWRkLCBPcmlnaW4oKSwgYmFzZSwKKyAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFNobCwgT3JpZ2luKCksIGluZGV4LAor
ICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IDEpKSk7CisKKyAgICBWYWx1ZSogcHJlZGljYXRlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigK
KyAgICAgICAgcHJvYywgTGVzc1RoYW4sIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmRO
ZXc8TWVtb3J5VmFsdWU+KHByb2MsIExvYWQ4UywgT3JpZ2luKCksIHB0ciksCisgICAgICAgIHJv
b3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCA0MikpOworICAgIAor
ICAgIENoZWNrVmFsdWUqIGNoZWNrID0gcm9vdC0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KHByb2Ms
IENoZWNrLCBPcmlnaW4oKSwgcHJlZGljYXRlKTsKKyAgICBjaGVjay0+c2V0R2VuZXJhdG9yKAor
ICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVz
YWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnNpemUoKSA9
PSAxKTsKKworICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgYWx3YXlzIHdvcmsgYmVjYXVzZSBh
IGZ1bmN0aW9uIHRoaXMgc2ltcGxlIHNob3VsZCBuZXZlciBoYXZlIGNhbGxlZQorICAgICAgICAg
ICAgLy8gc2F2ZXMuCisgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMig0MiksIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgICAgIGppdC5lbWl0
RnVuY3Rpb25FcGlsb2d1ZSgpOworICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICB9KTsK
KyAgICBDaGVja1ZhbHVlKiBjaGVjazIgPSByb290LT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4ocHJv
YywgQ2hlY2ssIE9yaWdpbigpLCBwcmVkaWNhdGUpOworICAgIGNoZWNrMi0+c2V0R2VuZXJhdG9y
KAorICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3Rl
clVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnNpemUo
KSA9PSAxKTsKKworICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgYWx3YXlzIHdvcmsgYmVjYXVz
ZSBhIGZ1bmN0aW9uIHRoaXMgc2ltcGxlIHNob3VsZCBuZXZlciBoYXZlIGNhbGxlZQorICAgICAg
ICAgICAgLy8gc2F2ZXMuCisgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMig0MyksIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgICAgIGppdC5l
bWl0RnVuY3Rpb25FcGlsb2d1ZSgpOworICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICB9
KTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0
dXJuLCBPcmlnaW4oKSwgcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIDApKTsKKworICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisKKyAgICBpbnQ4X3Qg
dmFsdWU7CisgICAgdmFsdWUgPSA0MjsKKyAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgJnZh
bHVlIC0gMiwgMSkgPT0gMCk7CisgICAgdmFsdWUgPSAxMjc7CisgICAgQ0hFQ0soaW52b2tlPGlu
dD4oKmNvZGUsICZ2YWx1ZSAtIDIsIDEpID09IDApOworICAgIHZhbHVlID0gNDE7CisgICAgQ0hF
Q0soaW52b2tlPGludD4oKmNvZGUsICZ2YWx1ZSAtIDIsIDEpID09IDQyKTsKKyAgICB2YWx1ZSA9
IDA7CisgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsICZ2YWx1ZSAtIDIsIDEpID09IDQyKTsK
KyAgICB2YWx1ZSA9IC0xOworICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAmdmFsdWUgLSAy
LCAxKSA9PSA0Mik7Cit9CisKK3ZvaWQgdGVzdENoZWNrVHdvTm9uUmVkdW5kYW50TWVnYUNvbWJv
cygpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgCisgICAgQmFzaWNCbG9jayogcm9vdCA9
IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiB0aGVuQ2FzZSA9IHByb2MuYWRkQmxv
Y2soKTsKKyAgICBCYXNpY0Jsb2NrKiBlbHNlQ2FzZSA9IHByb2MuYWRkQmxvY2soKTsKKyAgICAK
KyAgICBWYWx1ZSogYmFzZSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBWYWx1ZSogaW5kZXggPSBy
b290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICBwcm9jLCBaRXh0MzIsIE9yaWdpbigpLAor
ICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMs
IE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+
KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpKSk7CisgICAgVmFsdWUqIGJy
YW5jaFByZWRpY2F0ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgIHByb2MsIEJp
dEFuZCwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAg
ICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8
QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMikp
LAorICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
MHhmZikpOworCisgICAgVmFsdWUqIHB0ciA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAg
ICAgIHByb2MsIEFkZCwgT3JpZ2luKCksIGJhc2UsCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxW
YWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBTaGwsIE9yaWdpbigpLCBpbmRleCwKKyAgICAgICAg
ICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAxKSkpOwor
CisgICAgVmFsdWUqIGNoZWNrUHJlZGljYXRlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAg
ICAgICAgcHJvYywgTGVzc1RoYW4sIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KHByb2MsIExvYWQ4UywgT3JpZ2luKCksIHB0ciksCisgICAgICAgIHJvb3Qt
PmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCA0MikpOworCisgICAgcm9v
dC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIEJyYW5jaCwgT3JpZ2lu
KCksIGJyYW5jaFByZWRpY2F0ZSwKKyAgICAgICAgRnJlcXVlbnRlZEJsb2NrKHRoZW5DYXNlKSwg
RnJlcXVlbnRlZEJsb2NrKGVsc2VDYXNlKSk7CisgICAgCisgICAgQ2hlY2tWYWx1ZSogY2hlY2sg
PSB0aGVuQ2FzZS0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KHByb2MsIENoZWNrLCBPcmlnaW4oKSwg
Y2hlY2tQcmVkaWNhdGUpOworICAgIGNoZWNrLT5zZXRHZW5lcmF0b3IoCisgICAgICAgIFsmXSAo
Q0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1z
KSB7CisgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3Jh
dGNoKGppdCk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuc2l6ZSgpID09IDEpOworCisgICAg
ICAgICAgICAvLyBUaGlzIHNob3VsZCBhbHdheXMgd29yayBiZWNhdXNlIGEgZnVuY3Rpb24gdGhp
cyBzaW1wbGUgc2hvdWxkIG5ldmVyIGhhdmUgY2FsbGVlCisgICAgICAgICAgICAvLyBzYXZlcy4K
KyAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDQyKSwgR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxv
Z3VlKCk7CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgIHRoZW5DYXNl
LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4o
KSwgdGhlbkNhc2UtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCA0Mykp
OworCisgICAgQ2hlY2tWYWx1ZSogY2hlY2syID0gZWxzZUNhc2UtPmFwcGVuZE5ldzxDaGVja1Zh
bHVlPihwcm9jLCBDaGVjaywgT3JpZ2luKCksIGNoZWNrUHJlZGljYXRlKTsKKyAgICBjaGVjazIt
PnNldEdlbmVyYXRvcigKKyAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgIEFsbG93TWFjcm9T
Y3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAgIENIRUNL
KHBhcmFtcy5zaXplKCkgPT0gMSk7CisKKyAgICAgICAgICAgIC8vIFRoaXMgc2hvdWxkIGFsd2F5
cyB3b3JrIGJlY2F1c2UgYSBmdW5jdGlvbiB0aGlzIHNpbXBsZSBzaG91bGQgbmV2ZXIgaGF2ZSBj
YWxsZWUKKyAgICAgICAgICAgIC8vIHNhdmVzLgorICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoNDQpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAg
ICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKKyAgICAgICAgICAgIGppdC5yZXQo
KTsKKyAgICAgICAgfSk7CisgICAgZWxzZUNhc2UtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAor
ICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBlbHNlQ2FzZS0+YXBwZW5kTmV3PENvbnN0
MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDQ1KSk7CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxl
KHByb2MpOworCisgICAgaW50OF90IHZhbHVlOworCisgICAgdmFsdWUgPSA0MjsKKyAgICBDSEVD
SyhpbnZva2U8aW50PigqY29kZSwgJnZhbHVlIC0gMiwgMSwgdHJ1ZSkgPT0gNDMpOworICAgIHZh
bHVlID0gMTI3OworICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAmdmFsdWUgLSAyLCAxLCB0
cnVlKSA9PSA0Myk7CisgICAgdmFsdWUgPSA0MTsKKyAgICBDSEVDSyhpbnZva2U8aW50PigqY29k
ZSwgJnZhbHVlIC0gMiwgMSwgdHJ1ZSkgPT0gNDIpOworICAgIHZhbHVlID0gMDsKKyAgICBDSEVD
SyhpbnZva2U8aW50PigqY29kZSwgJnZhbHVlIC0gMiwgMSwgdHJ1ZSkgPT0gNDIpOworICAgIHZh
bHVlID0gLTE7CisgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsICZ2YWx1ZSAtIDIsIDEsIHRy
dWUpID09IDQyKTsKKworICAgIHZhbHVlID0gNDI7CisgICAgQ0hFQ0soaW52b2tlPGludD4oKmNv
ZGUsICZ2YWx1ZSAtIDIsIDEsIGZhbHNlKSA9PSA0NSk7CisgICAgdmFsdWUgPSAxMjc7CisgICAg
Q0hFQ0soaW52b2tlPGludD4oKmNvZGUsICZ2YWx1ZSAtIDIsIDEsIGZhbHNlKSA9PSA0NSk7Cisg
ICAgdmFsdWUgPSA0MTsKKyAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgJnZhbHVlIC0gMiwg
MSwgZmFsc2UpID09IDQ0KTsKKyAgICB2YWx1ZSA9IDA7CisgICAgQ0hFQ0soaW52b2tlPGludD4o
KmNvZGUsICZ2YWx1ZSAtIDIsIDEsIGZhbHNlKSA9PSA0NCk7CisgICAgdmFsdWUgPSAtMTsKKyAg
ICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgJnZhbHVlIC0gMiwgMSwgZmFsc2UpID09IDQ0KTsK
K30KKwogdm9pZCB0ZXN0Q2hlY2tBZGRJbW0oKQogewogICAgIFByb2NlZHVyZSBwcm9jOwpAQCAt
ODM0Niw2ICs4NTAzLDggQEAgdm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVyKQogICAgIFJVTih0
ZXN0U2ltcGxlQ2hlY2soKSk7CiAgICAgUlVOKHRlc3RDaGVja0xlc3NUaGFuKCkpOwogICAgIFJV
Tih0ZXN0Q2hlY2tNZWdhQ29tYm8oKSk7CisgICAgUlVOKHRlc3RDaGVja1R3b01lZ2FDb21ib3Mo
KSk7CisgICAgUlVOKHRlc3RDaGVja1R3b05vblJlZHVuZGFudE1lZ2FDb21ib3MoKSk7CiAgICAg
UlVOKHRlc3RDaGVja0FkZEltbSgpKTsKICAgICBSVU4odGVzdENoZWNrQWRkSW1tQ29tbXV0ZSgp
KTsKICAgICBSVU4odGVzdENoZWNrQWRkSW1tU29tZVJlZ2lzdGVyKCkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCShyZXZpc2lvbiAx
OTQwMTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVz
CSh3b3JraW5nIGNvcHkpCkBAIC0yODgsNiArMjg4LDI2IEBAIE1vdmUzMiBVOkcsIEQ6RwogU2ln
bkV4dGVuZDMyVG9QdHIgVTpHLCBEOkcKICAgICBUbXAsIFRtcAogCitaZXJvRXh0ZW5kOFRvMzIg
VTpHLCBEOkcKKyAgICBUbXAsIFRtcAorICAgIEFkZHIsIFRtcCBhcyBsb2FkOAorICAgIEluZGV4
LCBUbXAgYXMgbG9hZDgKKworU2lnbkV4dGVuZDhUbzMyIFU6RywgRDpHCisgICAgVG1wLCBUbXAK
KyAgICBBZGRyLCBUbXAgYXMgbG9hZDhTaWduZWRFeHRlbmRUbzMyCisgICAgSW5kZXgsIFRtcCBh
cyBsb2FkOFNpZ25lZEV4dGVuZFRvMzIKKworWmVyb0V4dGVuZDE2VG8zMiBVOkcsIEQ6RworICAg
IFRtcCwgVG1wCisgICAgQWRkciwgVG1wIGFzIGxvYWQxNgorICAgIEluZGV4LCBUbXAgYXMgbG9h
ZDE2CisKK1NpZ25FeHRlbmQxNlRvMzIgVTpHLCBEOkcKKyAgICBUbXAsIFRtcAorICAgIEFkZHIs
IFRtcCBhcyBsb2FkMTZTaWduZWRFeHRlbmRUbzMyCisgICAgSW5kZXgsIFRtcCBhcyBsb2FkMTZT
aWduZWRFeHRlbmRUbzMyCisKIE1vdmVGbG9hdCBVOkYsIEQ6RgogICAgIFRtcCwgVG1wIGFzIG1v
dmVEb3VibGUKICAgICBBZGRyLCBUbXAgYXMgbG9hZEZsb2F0CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29tbW9uLmgJKHJldmlzaW9uIDE5NDAxMikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAg
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogLy8gV2UgYXJlIGluIHRoZSBtaWRkbGUg
b2YgYW4gZXhwZXJpbWVudGFsIHRyYW5zaXRpb24gZnJvbSBMTFZNIHRvIEIzIGFzIHRoZSBiYWNr
ZW5kIGZvciB0aGUgRlRMLiBXZSBkb24ndAogLy8geWV0IGtub3cgaG93IGl0IHdpbGwgdHVybiBv
dXQuIEZvciBub3csIHRoaXMgZmxhZyB3aWxsIGNvbnRyb2wgd2hldGhlciBGVEwgdXNlcyBCMy4g
UmVtZW1iZXIgdG8gc2V0IHRoaXMKIC8vIHRvIDAgYmVmb3JlIGNvbW1pdHRpbmchCi0jZGVmaW5l
IEZUTF9VU0VTX0IzIDAKKyNkZWZpbmUgRlRMX1VTRVNfQjMgMQogCiBzdHJ1Y3QgTm9kZTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>267251</attachid>
            <date>2015-12-12 18:50:41 -0800</date>
            <delta_ts>2015-12-13 19:22:47 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>31273</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk0MDEyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBA
CisyMDE1LTEyLTEyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QjMtPkFpciBjb21wYXJlLWJyYW5jaCBmdXNpb24gc2hvdWxkIGZ1c2UgZXZlbiBpZiB0aGUgcmVz
dWx0IG9mIHRoZSBjb21wYXJpc29uIGlzIHVzZWQgbW9yZSB0aGFuIG9uY2UKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjE5OAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElmIHdlIGhhdmUgYSBjb21wYXJp
c29uIG9wZXJhdGlvbiB0aGF0IGlzIGJyYW5jaGVkIG9uIGZyb20gbXVsdGlwbGUgcGxhY2VzLCB0
aGVuIHdlIHdlcmUKKyAgICAgICAgcHJldmlvdXNseSBleGVjdXRpbmcgdGhlIGNvbXBhcmlzb24g
dG8gZ2V0IGEgYm9vbGVhbiByZXN1bHQgaW4gYSByZWdpc3RlciBhbmQgdGhlbiB3ZSB3ZXJlCisg
ICAgICAgIHRlc3RpbmcvYnJhbmNoaW5nIG9uIHRoYXQgcmVnaXN0ZXIgaW4gbXVsdGlwbGUgcGxh
Y2VzLiBUaGlzIGlzIGFjdHVhbGx5IGxlc3MgZWZmaWNpZW50IHRoYW4KKyAgICAgICAganVzdCBm
dXNpbmcgdGhlIGNvbXBhcmUvYnJhbmNoIG11bHRpcGxlIHRpbWVzLCBldmVuIHRob3VnaCB0aGlz
IG1lYW5zIHRoYXQgdGhlIGNvbXBhcmlzb24KKyAgICAgICAgZXhlY3V0ZXMgbXVsdGlwbGUgdGlt
ZXMuIFRoaXMgd291bGQgb25seSBiZSBiYWQgaWYgdGhlIGNvbXBhcmlzb24gZnVzZWQgbG9hZHMg
bXVsdGlwbGUgdGltZXMsCisgICAgICAgIHNpbmNlIGR1cGxpY2F0aW5nIGxvYWRzIGlzIGJvdGgg
d3JvbmcgYW5kIGluZWZmaWNpZW50LiBTbywgdGhpcyBhZGRzIHRoZSBub3Rpb24gb2Ygc2hhcmlu
ZyB0bworICAgICAgICBjb21wYXJlL2JyYW5jaCBmdXNpb24uIElmIGEgY29tcGFyZSBpcyBzaGFy
ZWQgYnkgbXVsdGlwbGUgYnJhbmNoZXMsIHRoZW4gd2UgcmVmdXNlIHRvIGZ1c2UKKyAgICAgICAg
dGhlIGxvYWQuCisKKyAgICAgICAgVG8gd3JpdGUgdGhlIHRlc3QsIEkgbmVlZGVkIHRvIHplcm8t
ZXh0ZW5kIDggdG8gMzIuIEluIHRoZSBwcm9jZXNzIG9mIHRoaW5raW5nIGFib3V0IGhvdyB0bwor
ICAgICAgICBkbyB0aGlzLCBJIHJlYWxpemVkIHRoYXQgd2UgbmVlZGVkIGxvd2VyaW5ncyBmb3Ig
U0V4dDgvU0V4dDE2LiBBbmQgSSByZWFsaXplZCB0aGF0IHRoZQorICAgICAgICBsb3dlcmluZ3Mg
Zm9yIHRoZSBvdGhlciBleHRlbnNpb24gb3BlcmF0aW9ucyB3ZXJlIG5vdCBmdWxseSBmbGVzaGVk
IG91dDsgZm9yIGV4YW1wbGUgdGhleQorICAgICAgICB3ZXJlIGluY2FwYWJsZSBvZiBsb2FkIGZ1
c2lvbi4gVGhpcyBwYXRjaCBmaXhlcyB0aGlzIGFuZCBhbHNvIGFkZHMgc29tZSBzbWFydCBzdHJl
bmd0aAorICAgICAgICByZWR1Y3Rpb25zIGZvciBCaXRBbmQoQHgsIDB4ZmYvMHhmZmZmLzB4ZmZm
ZmZmZmYpIC0gYWxsIG9mIHdoaWNoIHNob3VsZCBiZSBsb3dlcmVkIHRvIGEgemVybworICAgICAg
ICBleHRlbnNpb24uCisKKyAgICAgICAgVGhpcyBpcyBhIGJpZyB3aW4gb24gYXNtLmpzIGNvZGUu
IEl0J3Mgbm90IGVub3VnaCB0byBicmlkZ2UgdGhlIGdhcCB0byBMTFZNLCBidXQgaXQncyBhIGh1
Z2UKKyAgICAgICAgc3RlcCBpbiB0aGF0IGRpcmVjdGlvbi4KKworICAgICAgICAqIGFzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
clg4NkNvbW1vbjo6bG9hZDhTaWduZWRFeHRlbmRUbzMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9B
c3NlbWJsZXJYODZDb21tb246Onplcm9FeHRlbmQ4VG8zMik6CisgICAgICAgIChKU0M6Ok1hY3Jv
QXNzZW1ibGVyWDg2Q29tbW9uOjpzaWduRXh0ZW5kOFRvMzIpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlclg4NkNvbW1vbjo6bG9hZDE2KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJYODZDb21tb246OmxvYWQxNlNpZ25lZEV4dGVuZFRvMzIpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlclg4NkNvbW1vbjo6emVyb0V4dGVuZDE2VG8zMik6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpzaWduRXh0ZW5kMTZUbzMyKToKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJYODZDb21tb246OnN0b3JlMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKToK
KyAgICAgICAgKiBhc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6Olg4NkFz
c2VtYmxlcjo6bW92emJsX3JyKToKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjptb3ZzYmxf
cnIpOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6Om1vdnp3bF9ycik6CisgICAgICAgIChK
U0M6Olg4NkFzc2VtYmxlcjo6bW92c3dsX3JyKToKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVy
OjpjbW92bF9ycik6CisgICAgICAgICogYjMvQjNMb3dlclRvQWlyLmNwcDoKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6Y3JlYXRlR2VuZXJpY0NvbXBhcmUpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpsb3dlcik6CisgICAgICAgICogYjMvYWlyL0Fpck9w
Y29kZS5vcGNvZGVzOgorICAgICAgICAqIGIzL3Rlc3RiMy5jcHA6CisgICAgICAgIChKU0M6OkIz
Ojp0ZXN0Q2hlY2tNZWdhQ29tYm8pOgorICAgICAgICAoSlNDOjpCMzo6dGVzdENoZWNrVHdvTWVn
YUNvbWJvcyk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Q2hlY2tUd29Ob25SZWR1bmRhbnRNZWdh
Q29tYm9zKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RDaGVja0FkZEltbSk6CisgICAgICAgIChK
U0M6OkIzOjpydW4pOgorCiAyMDE1LTEyLTEyICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW5A
d2Via2l0Lm9yZz4KIAogICAgICAgICBbSlNDXSBBZGQgbG93ZXJpbmcgZm9yIEIzJ3MgU3RvcmU4
IG9wY29kZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlclg4NkNvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAkocmV2aXNpb24gMTk0MDEyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC02NDQsNiArNjQ0LDE2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IG1fYXNzZW1ibGVyLm1vdnNibF9tcihhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBkZXN0
KTsKICAgICB9CisKKyAgICB2b2lkIHplcm9FeHRlbmQ4VG8zMihSZWdpc3RlcklEIHNyYywgUmVn
aXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92emJsX3JyKHNyYywg
ZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2lnbkV4dGVuZDhUbzMyKFJlZ2lzdGVySUQg
c3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZzYmxf
cnIoc3JjLCBkZXN0KTsKKyAgICB9CiAgICAgCiAgICAgdm9pZCBsb2FkMTYoQmFzZUluZGV4IGFk
ZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CkBAIC02NjUsNiArNjc1LDE2IEBAIHB1Ymxp
YzoKICAgICAgICAgbV9hc3NlbWJsZXIubW92c3dsX21yKGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNz
LmJhc2UsIGRlc3QpOwogICAgIH0KIAorICAgIHZvaWQgemVyb0V4dGVuZDE2VG8zMihSZWdpc3Rl
cklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92
endsX3JyKHNyYywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2lnbkV4dGVuZDE2VG8z
MihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubW92c3dsX3JyKHNyYywgZGVzdCk7CisgICAgfQorICAgIAogICAgIERhdGFMYWJlbDMy
IHN0b3JlMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGFk
ZHJlc3MpCiAgICAgewogICAgICAgICBwYWRCZWZvcmVQYXRjaCgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCShyZXZpc2lvbiAxOTQw
MTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzE5LDYgKzE3MTksMjEgQEAgcHVibGljOgogICAgICAgICBtX2Zv
cm1hdHRlci50d29CeXRlT3A4KE9QMl9NT1ZaWF9HdkViLCBkc3QsIHNyYyk7CiAgICAgfQogCisg
ICAgdm9pZCBtb3ZzYmxfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsK
KyAgICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wOChPUDJfTU9WU1hfR3ZFYiwgZHN0LCBzcmMp
OworICAgIH0KKworICAgIHZvaWQgbW92endsX3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklE
IGRzdCkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcDgoT1AyX01PVlpYX0d2
RXcsIGRzdCwgc3JjKTsKKyAgICB9CisKKyAgICB2b2lkIG1vdnN3bF9ycihSZWdpc3RlcklEIHNy
YywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3A4
KE9QMl9NT1ZTWF9HdkV3LCBkc3QsIHNyYyk7CisgICAgfQorCiAgICAgdm9pZCBjbW92bF9ycihD
b25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKICAg
ICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wKGNtb3ZjYyhjb25kKSwgZHN0LCBzcmMpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHJldmlzaW9uIDE5
NDAxMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NzMsMjAgKzg3MywxMjggQEAgcHJpdmF0ZToKICAgICAgICAgY29uc3Qg
Q29tcGFyZUZsb2F0RnVuY3RvciYgY29tcGFyZUZsb2F0LCAvLyBTaWduYXR1cmU6IChBcmcgZG91
YmxlQ29uZCwgQXJnLCBBcmcpIC0+IEluc3QKICAgICAgICAgYm9vbCBpbnZlcnRlZCA9IGZhbHNl
KQogICAgIHsKKyAgICAgICAgLy8gTk9URTogVGhpcyBpcyB0b3RhbGx5IGhhcHB5IHRvIG1hdGNo
IGNvbXBhcmlzb25zIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gY29tcHV0ZWQgZWxzZXdoZXJlCisg
ICAgICAgIC8vIHNpbmNlIG9uIG1vc3QgYXJjaGl0ZWN0dXJlcywgdGhlIGNvc3Qgb2YgYnJhbmNo
aW5nIG9uIGEgcHJldmlvdXNseSBjb21wdXRlZCBjb21wYXJpc29uCisgICAgICAgIC8vIHJlc3Vs
dCBpcyBhbG1vc3QgYWx3YXlzIGhpZ2hlciB0aGFuIGp1c3QgZG9pbmcgYW5vdGhlciBmdXNlZCBj
b21wYXJlL2JyYW5jaC4gVGhlIG9ubHkgdGltZQorICAgICAgICAvLyBpdCBjb3VsZCBiZSB3b3Jz
ZSBpcyBpZiB3ZSBoYXZlIGEgYmluYXJ5IGNvbXBhcmlzb24gYW5kIGJvdGggb3BlcmFuZHMgYXJl
IHZhcmlhYmxlcyAobm90CisgICAgICAgIC8vIGNvbnN0YW50cyksIGFuZCB3ZSBlbmNvdW50ZXIg
cmVnaXN0ZXIgcHJlc3N1cmUuIEV2ZW4gaW4gdGhpcyBjYXNlLCBkdXBsaWNhdGluZyB0aGUgY29t
cGFyZQorICAgICAgICAvLyBzbyB0aGF0IHdlIGNhbiBmdXNlIGl0IHRvIHRoZSBicmFuY2ggd2ls
bCBiZSBtb3JlIGVmZmljaWVudCBtb3N0IG9mIHRoZSB0aW1lLCBzaW5jZQorICAgICAgICAvLyBy
ZWdpc3RlciBwcmVzc3VyZSBpcyBub3QgKnRoYXQqIGNvbW1vbi4gRm9yIHRoaXMgcmVhc29uLCB0
aGlzIGFsZ29yaXRobSB3aWxsIGFsd2F5cworICAgICAgICAvLyBkdXBsaWNhdGUgdGhlIGNvbXBh
cmlzb24uCisgICAgICAgIC8vCisgICAgICAgIC8vIEhvd2V2ZXIsIHdlIGNhbm5vdCBkdXBsaWNh
dGUgbG9hZHMuIFRoZSBjYW5CZUludGVybmFsKCkgb24gYSBsb2FkIHdpbGwgYXNzdW1lIHRoYXQg
d2UKKyAgICAgICAgLy8gYWxyZWFkeSB2YWxpZGF0ZWQgY2FuQmVJbnRlcm5hbCgpIG9uIGFsbCBv
ZiB0aGUgdmFsdWVzIHRoYXQgZ290IHVzIHRvIHRoZSBsb2FkLiBTbywgZXZlbgorICAgICAgICAv
LyBpZiB3ZSBhcmUgc2hhcmluZyBhIHZhbHVlLCB3ZSBzdGlsbCBuZWVkIHRvIGNhbGwgY2FuQmVJ
bnRlcm5hbCgpIGZvciB0aGUgcHVycG9zZSBvZgorICAgICAgICAvLyB0cmFja2luZyB3aGV0aGVy
IHdlIGFyZSBzdGlsbCBpbiBnb29kIHNoYXBlIHRvIGZ1c2UgbG9hZHMuCisgICAgICAgIC8vCisg
ICAgICAgIC8vIFdlIGNvdWxkIGV2ZW4gaGF2ZSBhIGNoYWluIG9mIGNvbXBhcmUgdmFsdWVzIHRo
YXQgd2UgZnVzZSwgYW5kIGFueSBtZW1iZXIgb2YgdGhlIGNoYWluCisgICAgICAgIC8vIGNvdWxk
IGJlIHNoYXJlZC4gT25jZSBhbnkgb2YgdGhlbSBhcmUgc2hhcmVkLCB0aGVuIHRoZSBzaGFyZWQg
b25lJ3MgdHJhbnNpdGl2ZSBjaGlsZHJlbgorICAgICAgICAvLyBjYW5ub3QgYmUgbG9ja2VkIChp
LmUuIGNvbW1pdEludGVybmFsKCkpLiBCdXQgaWYgbm9uZSBvZiB0aGVtIGFyZSBzaGFyZWQsIHRo
ZW4gd2Ugd2FudCB0bworICAgICAgICAvLyBsb2NrIGFsbCBvZiB0aGVtIGJlY2F1c2UgdGhhdCdz
IGEgcHJlcmVxdWlzaXRlIHRvIGZ1c2luZyB0aGUgbG9hZHMgc28gdGhhdCB0aGUgbG9hZHMgZG9u
J3QKKyAgICAgICAgLy8gZ2V0IGR1cGxpY2F0ZWQuIEZvciBleGFtcGxlLCB3ZSBtaWdodCBoYXZl
OiAKKyAgICAgICAgLy8KKyAgICAgICAgLy8gICAgIEB0bXAxID0gTGVzc1RoYW4oQGEsIEBiKQor
ICAgICAgICAvLyAgICAgQHRtcDIgPSBFcXVhbChAdG1wMSwgMCkKKyAgICAgICAgLy8gICAgIEJy
YW5jaChAdG1wMikKKyAgICAgICAgLy8KKyAgICAgICAgLy8gSWYgZWl0aGVyIEBhIG9yIEBiIGFy
ZSBsb2FkcywgdGhlbiB3ZSB3YW50IHRvIGhhdmUgbG9ja2VkIEB0bXAxIGFuZCBAdG1wMiBzbyB0
aGF0IHRoZXkKKyAgICAgICAgLy8gZG9uJ3QgZW1pdCB0aGUgbG9hZHMgYSBzZWNvbmQgdGltZS4g
QnV0IGlmIHdlIGhhZCBhbm90aGVyIHVzZSBvZiBAdG1wMiwgdGhlbiB3ZSBjYW5ub3QKKyAgICAg
ICAgLy8gbG9jayBAdG1wMSAob3IgQGEgb3IgQGIpIGJlY2F1c2UgdGhlbiB3ZSdsbCBnZXQgaW50
byB0cm91YmxlIHdoZW4gdGhlIG90aGVyIHZhbHVlcyB0aGF0CisgICAgICAgIC8vIHRyeSB0byBz
aGFyZSBAdG1wMSB3aXRoIHVzIHRyeSB0byBkbyB0aGVpciBsb3dlcmluZy4KKyAgICAgICAgLy8K
KyAgICAgICAgLy8gVGhlcmUncyBvbmUgbW9yZSB3cmlua2xlLiBJZiB3ZSBkb24ndCBsb2NrIGFu
IGludGVybmFsIHZhbHVlLCB0aGVuIHRoaXMgaW50ZXJuYWwgdmFsdWUgbWF5CisgICAgICAgIC8v
IGhhdmUgYWxyZWFkeSBzZXBhcmF0ZWx5IGxvY2tlZCBpdHMgY2hpbGRyZW4uIFNvLCBpZiB3ZSdy
ZSBub3QgbG9ja2luZyBhIHZhbHVlIHRoZW4gd2UgbmVlZAorICAgICAgICAvLyB0byBtYWtlIHN1
cmUgdGhhdCBpdHMgY2hpbGRyZW4gYXJlbid0IGxvY2tlZC4gV2UgZW5jYXBzdWxhdGUgdGhpcyBp
biB0d28gd2F5czoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gY2FuQ29tbWl0SW50ZXJuYWw6IFRo
aXMgdmFyaWFibGUgdGVsbHMgdXMgaWYgdGhlIHZhbHVlcyB0aGF0IHdlJ3ZlIGZ1c2VkIHNvIGZh
ciBhcmUKKyAgICAgICAgLy8gbG9ja2VkLiBUaGlzIG1lYW5zIHRoYXQgd2UncmUgbm90IHNoYXJp
bmcgYW55IG9mIHRoZW0gd2l0aCBhbnlvbmUuIFRoaXMgcGVybWl0cyB1cyB0byBmdXNlCisgICAg
ICAgIC8vIGxvYWRzLiBJZiBpdCdzIGZhbHNlLCB0aGVuIHdlIGNhbm5vdCBmdXNlIGxvYWRzIGFu
ZCB3ZSBhbHNvIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlCisgICAgICAgIC8vIGNoaWxkcmVuIG9m
IGFueSB2YWx1ZXMgd2UgdHJ5IHRvIGZ1c2UtYnktc2hhcmluZyBhcmUgbm90IGFscmVhZHkgbG9j
a2VkLiBZb3UgZG9uJ3QgaGF2ZSB0bworICAgICAgICAvLyB3b3JyeSBhYm91dCB0aGUgY2hpbGRy
ZW4gbG9ja2luZyB0aGluZyBpZiB5b3UgdXNlIHByZXBhcmVUb0Z1c2UoKSBiZWZvcmUgdHJ5aW5n
IHRvIGZ1c2UgYQorICAgICAgICAvLyBzaGFyYWJsZSB2YWx1ZS4gQnV0LCB5b3UgZG8gbmVlZCB0
byBndWFyZCBhbnkgbG9hZCBmdXNpb24gYnkgY2hlY2tpbmcgaWYgY2FuQ29tbWl0SW50ZXJuYWwK
KyAgICAgICAgLy8gaXMgdHJ1ZS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gYm9vbCBwcmVwYXJl
VG9GdXNlKHZhbHVlKTogQ2FsbCB0aGlzIHdoZW4geW91IGtub3cgdGhhdCB5b3Ugd291bGQgbGlr
ZSB0byBmdXNlIHNvbWUgdmFsdWUKKyAgICAgICAgLy8gYW5kIHRoYXQgdmFsdWUgaXMgbm90IGEg
bG9hZC4gSXQgd2lsbCBhdXRvbWF0aWNhbGx5IGhhbmRsZSB0aGUgc2hhcmVkLW9yLWxvY2tlZCBp
c3N1ZXMgYW5kCisgICAgICAgIC8vIGl0IHdpbGwgY2xlYXIgY2FuQ29tbWl0SW50ZXJuYWwgaWYg
bmVjZXNzYXJ5LiBUaGlzIHdpbGwgcmV0dXJuIGZhbHNlIGlmIHRoZSB2YWx1ZSBjYW5ub3QKKyAg
ICAgICAgLy8gYmUgbG9ja2VkIGFuZCBpdHMgY2hpbGRyZW4gYXJlIGxvY2tlZC4gVGhhdCdzIHJh
cmUsIGJ1dCB5b3UganVzdCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0CisgICAgICAgIC8vIHlvdSBk
byBzbWFydCB0aGluZ3Mgd2hlbiB0aGlzIGhhcHBlbnMgKGkuZS4ganVzdCB1c2UgdGhlIHZhbHVl
IHJhdGhlciB0aGFuIHRyeWluZyB0byBmdXNlCisgICAgICAgIC8vIGl0KS4KKyAgICAgICAgYm9v
bCBjYW5Db21taXRJbnRlcm5hbCA9IHRydWU7CisKKyAgICAgICAgYXV0byBwcmVwYXJlVG9GdXNl
ID0gWyZdIChWYWx1ZSogdmFsdWUpIC0+IGJvb2wgeworICAgICAgICAgICAgaWYgKHZhbHVlID09
IG1fdmFsdWUpIHsKKyAgICAgICAgICAgICAgICAvLyBJdCdzIG5vdCBhY3R1YWxseSBpbnRlcm5h
bC4gSXQncyB0aGUgcm9vdCB2YWx1ZS4gV2UncmUgZ29vZCB0byBnby4KKyAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNhbkNvbW1p
dEludGVybmFsICYmIGNhbkJlSW50ZXJuYWwodmFsdWUpKSB7CisgICAgICAgICAgICAgICAgLy8g
V2UgYXJlIHRoZSBvbmx5IHVzZXJzIG9mIHRoaXMgdmFsdWUuIFRoaXMgYWxzbyBtZWFucyB0aGF0
IHRoZSB2YWx1ZSdzIGNoaWxkcmVuCisgICAgICAgICAgICAgICAgLy8gY291bGQgbm90IGhhdmUg
YmVlbiBsb2NrZWQsIHNpbmNlIHdlIGhhdmUgbm93IHByb3ZlZCB0aGF0IG1fdmFsdWUgZG9taW5h
dGVzIHZhbHVlCisgICAgICAgICAgICAgICAgLy8gaW4gdGhlIGRhdGEgZmxvdyBncmFwaC4gVG8g
b25seSBvdGhlciB3YXkgdG8gdmFsdWUgaXMgZnJvbSBhIHVzZXIgb2YgbV92YWx1ZS4gSWYKKyAg
ICAgICAgICAgICAgICAvLyB2YWx1ZSdzIGNoaWxkcmVuIGFyZSBzaGFyZWQgd2l0aCBvdGhlcnMs
IHRoZW4gdGhleSBjb3VsZCBub3QgaGF2ZSBiZWVuIGxvY2tlZAorICAgICAgICAgICAgICAgIC8v
IGJlY2F1c2UgdGhlaXIgdXNlIGNvdW50IGlzIGdyZWF0ZXIgdGhhbiAxLiBJZiB0aGV5IGFyZSBv
bmx5IHVzZWQgZnJvbSB2YWx1ZSwgdGhlbgorICAgICAgICAgICAgICAgIC8vIGluIG9yZGVyIGZv
ciB2YWx1ZSdzIGNoaWxkcmVuIHRvIGJlIGxvY2tlZCwgdmFsdWUgd291bGQgYWxzbyBoYXZlIHRv
IGJlIGxvY2tlZCwKKyAgICAgICAgICAgICAgICAvLyBhbmQgd2UganVzdCBwcm92ZWQgdGhhdCBp
dCB3YXNuJ3QuCisgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwodmFsdWUpOworICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBX
ZSdyZSBnb2luZyB0byB0cnkgdG8gc2hhcmUgdmFsdWUgd2l0aCBvdGhlcnMuIEl0J3MgcG9zc2li
bGUgdGhhdCBzb21lIG90aGVyIGJhc2ljCisgICAgICAgICAgICAvLyBibG9jayBoYWQgYWxyZWFk
eSBlbWl0dGVkIGNvZGUgZm9yIHZhbHVlIGFuZCB0aGVuIG1hdGNoZWQgb3ZlciBpdHMgY2hpbGRy
ZW4gYW5kIHRoZW4KKyAgICAgICAgICAgIC8vIGxvY2tlZCB0aGVtLCBpbiB3aGljaCBjYXNlIHdl
IGp1c3Qgd2FudCB0byB1c2UgdmFsdWUgaW5zdGVhZCBvZiBkdXBsaWNhdGluZyBpdC4gU28sIHdl
CisgICAgICAgICAgICAvLyB2YWxpZGF0ZSB0aGUgY2hpbGRyZW4uIE5vdGUgdGhhdCB0aGlzIG9u
bHkgYXJpc2VzIGluIGxpbmVhciBjaGFpbnMgbGlrZToKKyAgICAgICAgICAgIC8vCisgICAgICAg
ICAgICAvLyAgICAgQkIjMToKKyAgICAgICAgICAgIC8vICAgICAgICAgQDEgPSBGb28oLi4uKQor
ICAgICAgICAgICAgLy8gICAgICAgICBAMiA9IEJhcihAMSkKKyAgICAgICAgICAgIC8vICAgICAg
ICAgSnVtcCgjMikKKyAgICAgICAgICAgIC8vICAgICBCQiMyOgorICAgICAgICAgICAgLy8gICAg
ICAgICBAMyA9IEJheihAMikKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBOb3RpY2Ug
aG93IHdlIGNvdWxkIHN0YXJ0IGJ5IGdlbmVyYXRpbmcgY29kZSBmb3IgQkIjMSBhbmQgdGhlbiBk
ZWNpZGUgdG8gbG9jayBAMSB3aGVuCisgICAgICAgICAgICAvLyBnZW5lcmF0aW5nIGNvZGUgZm9y
IEAyLCBpZiB3ZSBoYXZlIHNvbWUgd2F5IG9mIGZ1c2luZyBCYXIgYW5kIEZvbyBpbnRvIGEgc2lu
Z2xlCisgICAgICAgICAgICAvLyBpbnN0cnVjdGlvbi4gVGhpcyBpcyBsZWdhbCwgc2luY2UgaW5k
ZWVkIEAxIG9ubHkgaGFzIG9uZSB1c2VyLiBUaGUgZmFjdCB0aGF0IEAyIG5vdworICAgICAgICAg
ICAgLy8gaGFzIGEgdG1wIChpLmUuIEAyIGlzIHBpbm5lZCksIGNhbkJlSW50ZXJuYWwoQDIpIHdp
bGwgcmV0dXJuIGZhbHNlLCB3aGljaCBicmluZ3MgdXMKKyAgICAgICAgICAgIC8vIGhlcmUuIElu
IHRoYXQgY2FzZSwgd2UgY2Fubm90IG1hdGNoIG92ZXIgQDIgYmVjYXVzZSB0aGVuIHdlJ2QgaGl0
IGEgaGF6YXJkIGlmIHdlIGVuZAorICAgICAgICAgICAgLy8gdXAgZGVjaWRpbmcgbm90IHRvIGZ1
c2UgRm9vIGludG8gdGhlIGZ1c2VkIEJhei9CYXIuCisgICAgICAgICAgICAvLworICAgICAgICAg
ICAgLy8gSGFwcGlseSwgdGhlcmUgYXJlIG9ubHkgdHdvIHBsYWNlcyB3aGVyZSB0aGlzIGtpbmQg
b2YgY2hpbGQgdmFsaWRhdGlvbiBoYXBwZW5zIGlzIGluCisgICAgICAgICAgICAvLyBydWxlcyB0
aGF0IGFkbWl0IHNoYXJpbmcsIGxpa2UgdGhpcyBhbmQgZWZmZWN0aXZlQWRkcmVzcygpLgorICAg
ICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIE4uQi4gV2UgY291bGQgcHJvYmFibHkgYXZvaWQg
dGhlIG5lZWQgdG8gZG8gdmFsdWUgbG9ja2luZyBpZiB3ZSBjb21taXR0ZWQgdG8gYSB3ZWxsCisg
ICAgICAgICAgICAvLyBjaG9zZW4gY29kZSBnZW5lcmF0aW9uIG9yZGVyLiBGb3IgZXhhbXBsZSwg
aWYgd2UgZ3VhcmFudGVlZCB0aGF0IGFsbCBvZiB0aGUgdXNlcnMgb2YKKyAgICAgICAgICAgIC8v
IGEgdmFsdWUgZ2V0IGdlbmVyYXRlZCBiZWZvcmUgdGhhdCB2YWx1ZSwgdGhlbiB0aGVyZSdzIG5v
IHdheSBmb3IgdGhlIGxvd2VyaW5nIG9mIEAzIHRvCisgICAgICAgICAgICAvLyBzZWUgQDEgbG9j
a2VkLiBCdXQgd2UgZG9uJ3Qgd2FudCB0byBkbyB0aGF0LCBzaW5jZSB0aGlzIGlzIGEgZ3JlZWR5
IGluc3RydWN0aW9uCisgICAgICAgICAgICAvLyBzZWxlY3RvciBhbmQgc28gd2Ugd2FudCB0byBi
ZSBhYmxlIHRvIHBsYXkgd2l0aCBvcmRlci4KKyAgICAgICAgICAgIGZvciAoVmFsdWUqIGNoaWxk
IDogdmFsdWUtPmNoaWxkcmVuKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9sb2NrZWQuY29u
dGFpbnMoY2hpbGQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIC8vIEl0J3Mgc2FmZSB0byBzaGFyZSB2YWx1ZSwgYnV0IHNp
bmNlIHdlJ3JlIHNoYXJpbmcsIGl0IG1lYW5zIHRoYXQgd2UgYXJlbid0IGxvY2tpbmcgaXQuCisg
ICAgICAgICAgICAvLyBJZiB3ZSBkb24ndCBsb2NrIGl0LCB0aGVuIGZ1c2luZyBsb2FkcyBpcyBv
ZmYgbGltaXRzIGFuZCBhbGwgb2YgdmFsdWUncyBjaGlsZHJlbiB3aWxsCisgICAgICAgICAgICAv
LyBoYXZlIHRvIGdvIHRocm91Z2ggdGhlIHNoYXJpbmcgcGF0aCBhcyB3ZWxsLgorICAgICAgICAg
ICAgY2FuQ29tbWl0SW50ZXJuYWwgPSBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH07CisgICAgICAgIAogICAgICAgICAvLyBDaGV3IHRocm91
Z2ggYW55IG5lZ2F0aW9ucy4gSXQncyBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IGZvciB0aGlzIHRv
IGJlIGEgbG9vcCwgYnV0IHdlIGxpa2UKICAgICAgICAgLy8gdG8gZm9sbG93IHRoZSBydWxlIHRo
YXQgdGhlIGluc3RydWN0aW9uIHNlbGVjdG9yIHJlZHVjZXMgc3RyZW5ndGggd2hlbmV2ZXIgaXQg
ZG9lc24ndAogICAgICAgICAvLyByZXF1aXJlIG1ha2luZyB0aGluZ3MgbW9yZSBjb21wbGljYXRl
ZC4KICAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgaWYgKCFjYW5CZUludGVybmFsKHZh
bHVlKSAmJiB2YWx1ZSAhPSBtX3ZhbHVlKQotICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgYm9vbCBzaG91bGRJbnZlcnQgPQogICAgICAgICAgICAgICAgICh2YWx1ZS0+b3Bjb2Rl
KCkgPT0gQml0WG9yICYmIHZhbHVlLT5jaGlsZCgxKS0+aGFzSW50KCkgJiYgKHZhbHVlLT5jaGls
ZCgxKS0+YXNJbnQoKSAmIDEpICYmIHZhbHVlLT5jaGlsZCgwKS0+cmV0dXJuc0Jvb2woKSkKICAg
ICAgICAgICAgICAgICB8fCAodmFsdWUtPm9wY29kZSgpID09IEVxdWFsICYmIHZhbHVlLT5jaGls
ZCgxKS0+aXNJbnQoMCkpOwogICAgICAgICAgICAgaWYgKCFzaG91bGRJbnZlcnQpCiAgICAgICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGlmICghcHJlcGFyZVRvRnVzZSh2YWx1ZSkp
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKICAgICAgICAgICAgIHZhbHVl
ID0gdmFsdWUtPmNoaWxkKDApOwogICAgICAgICAgICAgaW52ZXJ0ZWQgPSAhaW52ZXJ0ZWQ7Ci0g
ICAgICAgICAgICBjb21taXRJbnRlcm5hbCh2YWx1ZSk7CiAgICAgICAgIH0KIAogICAgICAgICBh
dXRvIGNyZWF0ZVJlbENvbmQgPSBbJl0gKApAQCAtOTMxLDUxICsxMDM5LDU1IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CiAgICAgICAgICAgICAgICAgfTsK
IAotICAgICAgICAgICAgICAgIC8vIEZpcnN0IGhhbmRsZSBjb21wYXJlcyB0aGF0IGludm9sdmUg
ZmV3ZXIgYml0cyB0aGFuIEIzJ3MgdHlwZSBzeXN0ZW0gc3VwcG9ydHMuCi0gICAgICAgICAgICAg
ICAgLy8gVGhpcyBpcyBwcmV0dHkgaW1wb3J0YW50LiBGb3IgZXhhbXBsZSwgd2Ugd2FudCB0aGlz
IHRvIGJlIGEgc2luZ2xlIGluc3RydWN0aW9uOgotICAgICAgICAgICAgICAgIC8vCi0gICAgICAg
ICAgICAgICAgLy8gICAgIEAxID0gTG9hZDhTKC4uLikKLSAgICAgICAgICAgICAgICAvLyAgICAg
QDIgPSBDb25zdDMyKC4uLikKLSAgICAgICAgICAgICAgICAvLyAgICAgQDMgPSBMZXNzVGhhbihA
MSwgQDIpCi0gICAgICAgICAgICAgICAgLy8gICAgIEJyYW5jaChAMykKKyAgICAgICAgICAgICAg
ICBBcmc6OldpZHRoIHdpZHRoID0gQXJnOjp3aWR0aEZvckIzVHlwZSh2YWx1ZS0+Y2hpbGQoMCkt
PnR5cGUoKSk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKHJlbENvbmQu
aXNTaWduZWRDb25kKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0g
dHJ5Q29tcGFyZUxvYWRJbW0oQXJnOjpXaWR0aDgsIExvYWQ4UywgQXJnOjpTaWduZWQpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgaWYgKGNhbkNvbW1pdEludGVybmFsKSB7CisgICAgICAgICAgICAgICAg
ICAgIC8vIEZpcnN0IGhhbmRsZSBjb21wYXJlcyB0aGF0IGludm9sdmUgZmV3ZXIgYml0cyB0aGFu
IEIzJ3MgdHlwZSBzeXN0ZW0gc3VwcG9ydHMuCisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMg
aXMgcHJldHR5IGltcG9ydGFudC4gRm9yIGV4YW1wbGUsIHdlIHdhbnQgdGhpcyB0byBiZSBhIHNp
bmdsZQorICAgICAgICAgICAgICAgICAgICAvLyBpbnN0cnVjdGlvbjoKKyAgICAgICAgICAgICAg
ICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIEAxID0gTG9hZDhTKC4uLikKKyAg
ICAgICAgICAgICAgICAgICAgLy8gICAgIEAyID0gQ29uc3QzMiguLi4pCisgICAgICAgICAgICAg
ICAgICAgIC8vICAgICBAMyA9IExlc3NUaGFuKEAxLCBAMikKKyAgICAgICAgICAgICAgICAgICAg
Ly8gICAgIEJyYW5jaChAMykKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAo
cmVsQ29uZC5pc1Vuc2lnbmVkQ29uZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChJbnN0
IHJlc3VsdCA9IHRyeUNvbXBhcmVMb2FkSW1tKEFyZzo6V2lkdGg4LCBMb2FkOFosIEFyZzo6VW5z
aWduZWQpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChyZWxDb25kLmlzU2lnbmVkQ29uZCgp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlDb21wYXJl
TG9hZEltbShBcmc6OldpZHRoOCwgTG9hZDhTLCBBcmc6OlNpZ25lZCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAocmVsQ29uZC5pc1Vuc2lnbmVk
Q29uZCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlD
b21wYXJlTG9hZEltbShBcmc6OldpZHRoOCwgTG9hZDhaLCBBcmc6OlVuc2lnbmVkKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgICAgICBpZiAocmVsQ29uZC5pc1NpZ25lZENvbmQoKSkgewotICAg
ICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlDb21wYXJlTG9hZEltbShBcmc6
OldpZHRoMTYsIExvYWQxNlMsIEFyZzo6U2lnbmVkKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBp
ZiAocmVsQ29uZC5pc1NpZ25lZENvbmQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KEluc3QgcmVzdWx0ID0gdHJ5Q29tcGFyZUxvYWRJbW0oQXJnOjpXaWR0aDE2LCBMb2FkMTZTLCBB
cmc6OlNpZ25lZCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IGlmIChyZWxDb25kLmlzVW5zaWduZWRDb25kKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KEluc3QgcmVzdWx0ID0gdHJ5Q29tcGFyZUxvYWRJbW0oQXJnOjpXaWR0aDE2LCBMb2FkMTZaLCBB
cmc6OlVuc2lnbmVkKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAocmVsQ29uZC5pc1Vuc2ln
bmVkQ29uZCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0
cnlDb21wYXJlTG9hZEltbShBcmc6OldpZHRoMTYsIExvYWQxNlosIEFyZzo6VW5zaWduZWQpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUgY29tcGFyZXMgdGhhdCBp
bnZvbHZlIGEgbG9hZCBhbmQgYW4gaW1tZWRpYXRlLgorICAgICAgICAgICAgICAgICAgICAvLyBO
b3cgaGFuZGxlIGNvbXBhcmVzIHRoYXQgaW52b2x2ZSBhIGxvYWQgYW5kIGFuIGltbWVkaWF0ZS4K
IAotICAgICAgICAgICAgICAgIEFyZzo6V2lkdGggd2lkdGggPSBBcmc6OndpZHRoRm9yQjNUeXBl
KHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpKTsKLSAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1
bHQgPSB0cnlDb21wYXJlTG9hZEltbSh3aWR0aCwgTG9hZCwgQXJnOjpTaWduZWQpKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICBpZiAoSW5z
dCByZXN1bHQgPSB0cnlDb21wYXJlTG9hZEltbSh3aWR0aCwgTG9hZCwgQXJnOjpTaWduZWQpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgICAgICAgICAgICAg
IC8vIE5vdyBoYW5kbGUgY29tcGFyZXMgdGhhdCBpbnZvbHZlIGEgbG9hZC4gSXQncyBub3Qgb2J2
aW91cyB0aGF0IGl0J3MgYmV0dGVyIHRvCi0gICAgICAgICAgICAgICAgLy8gaGFuZGxlIHRoaXMg
YmVmb3JlIHRoZSBpbW1lZGlhdGUgY2FzZXMgb3Igbm90LiBQcm9iYWJseSBkb2Vzbid0IG1hdHRl
ci4KKyAgICAgICAgICAgICAgICAgICAgLy8gTm93IGhhbmRsZSBjb21wYXJlcyB0aGF0IGludm9s
dmUgYSBsb2FkLiBJdCdzIG5vdCBvYnZpb3VzIHRoYXQgaXQncyBiZXR0ZXIgdG8KKyAgICAgICAg
ICAgICAgICAgICAgLy8gaGFuZGxlIHRoaXMgYmVmb3JlIHRoZSBpbW1lZGlhdGUgY2FzZXMgb3Ig
bm90LiBQcm9iYWJseSBkb2Vzbid0IG1hdHRlci4KIAotICAgICAgICAgICAgICAgIGlmIChJbnN0
IHJlc3VsdCA9IHRyeUNvbXBhcmUod2lkdGgsIGxvYWRQcm9taXNlKGxlZnQpLCB0bXBQcm9taXNl
KHJpZ2h0KSkpIHsKLSAgICAgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwobGVmdCk7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlDb21wYXJlKHdpZHRoLCBsb2Fk
UHJvbWlzZShsZWZ0KSwgdG1wUHJvbWlzZShyaWdodCkpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjb21taXRJbnRlcm5hbChsZWZ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlDb21wYXJlKHdpZHRoLCB0bXBQcm9taXNl
KGxlZnQpLCBsb2FkUHJvbWlzZShyaWdodCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbW1p
dEludGVybmFsKHJpZ2h0KTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5Q29tcGFyZSh3aWR0aCwgdG1w
UHJvbWlzZShsZWZ0KSwgbG9hZFByb21pc2UocmlnaHQpKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgY29tbWl0SW50ZXJuYWwocmlnaHQpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUgY29tcGFyZXMgdGhhdCBpbnZvbHZlIGFuIGlt
bWVkaWF0ZSBhbmQgYSB0bXAuCkBAIC0xMDYyLDM5ICsxMTc0LDQxIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CiAgICAgICAgICAgICAgICAgfTsKIAotICAg
ICAgICAgICAgICAgIC8vIEZpcnN0IGhhbmRsZSB0ZXN0J3MgdGhhdCBpbnZvbHZlIGZld2VyIGJp
dHMgdGhhbiBCMydzIHR5cGUgc3lzdGVtIHN1cHBvcnRzLgorICAgICAgICAgICAgICAgIGlmIChj
YW5Db21taXRJbnRlcm5hbCkgeworICAgICAgICAgICAgICAgICAgICAvLyBGaXJzdCBoYW5kbGUg
dGVzdCdzIHRoYXQgaW52b2x2ZSBmZXdlciBiaXRzIHRoYW4gQjMncyB0eXBlIHN5c3RlbSBzdXBw
b3J0cy4KIAotICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeVRlc3RMb2FkSW1t
KEFyZzo6V2lkdGg4LCBMb2FkOFopKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwotCi0gICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5VGVzdExvYWRJbW0oQXJn
OjpXaWR0aDgsIExvYWQ4UykpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0K
LSAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlUZXN0TG9hZEltbShBcmc6Oldp
ZHRoMTYsIExvYWQxNlopKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0g
ICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5VGVzdExvYWRJbW0oQXJnOjpXaWR0
aDE2LCBMb2FkMTZTKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAg
ICAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUgdGVzdCdzIHRoYXQgaW52b2x2ZSBhIGxvYWQgYW5k
IGFuIGltbWVkaWF0ZS4gTm90ZSB0aGF0IGltbWVkaWF0ZXMgYXJlCi0gICAgICAgICAgICAgICAg
Ly8gMzItYml0LCBhbmQgd2Ugd2FudCB6ZXJvLWV4dGVuc2lvbi4gSGVuY2UsIHRoZSBpbW1lZGlh
dGUgZm9ybSBpcyBjb21waWxlZCBhcyBhCi0gICAgICAgICAgICAgICAgLy8gMzItYml0IHRlc3Qu
IE5vdGUgdGhhdCB0aGlzIHNwaXRzIG9uIHRoZSBncmF2ZSBvZiBpbmZlcmlvciBlbmRpYW5zLCBz
dWNoIGFzIHRoZQotICAgICAgICAgICAgICAgIC8vIGJpZyBvbmUuCi0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5VGVzdExvYWRJbW0oQXJnOjpX
aWR0aDMyLCBMb2FkKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAg
ICAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUgdGVzdCdzIHRoYXQgaW52b2x2ZSBhIGxvYWQuCi0K
LSAgICAgICAgICAgICAgICBBcmc6OldpZHRoIHdpZHRoID0gQXJnOjp3aWR0aEZvckIzVHlwZSh2
YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0
ID0gdHJ5VGVzdCh3aWR0aCwgbG9hZFByb21pc2UobGVmdCksIHRtcFByb21pc2UocmlnaHQpKSkg
ewotICAgICAgICAgICAgICAgICAgICBjb21taXRJbnRlcm5hbChsZWZ0KTsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeVRlc3RMb2FkSW1tKEFyZzo6V2lkdGg4LCBMb2Fk
OFopKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeVRlc3RM
b2FkSW1tKEFyZzo6V2lkdGg4LCBMb2FkOFMpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlm
IChJbnN0IHJlc3VsdCA9IHRyeVRlc3RMb2FkSW1tKEFyZzo6V2lkdGgxNiwgTG9hZDE2WikpCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5VGVzdExvYWRJbW0o
QXJnOjpXaWR0aDE2LCBMb2FkMTZTKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAKLSAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlUZXN0KHdpZHRo
LCB0bXBQcm9taXNlKGxlZnQpLCBsb2FkUHJvbWlzZShyaWdodCkpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGNvbW1pdEludGVybmFsKHJpZ2h0KTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0ZXN0J3MgdGhhdCBp
bnZvbHZlIGEgbG9hZCBhbmQgYW4gaW1tZWRpYXRlLiBOb3RlIHRoYXQgaW1tZWRpYXRlcworICAg
ICAgICAgICAgICAgICAgICAvLyBhcmUgMzItYml0LCBhbmQgd2Ugd2FudCB6ZXJvLWV4dGVuc2lv
bi4gSGVuY2UsIHRoZSBpbW1lZGlhdGUgZm9ybSBpcyBjb21waWxlZAorICAgICAgICAgICAgICAg
ICAgICAvLyBhcyBhIDMyLWJpdCB0ZXN0LiBOb3RlIHRoYXQgdGhpcyBzcGl0cyBvbiB0aGUgZ3Jh
dmUgb2YgaW5mZXJpb3IgZW5kaWFucywgc3VjaAorICAgICAgICAgICAgICAgICAgICAvLyBhcyB0
aGUgYmlnIG9uZS4KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlm
IChJbnN0IHJlc3VsdCA9IHRyeVRlc3RMb2FkSW1tKEFyZzo6V2lkdGgzMiwgTG9hZCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0ZXN0J3MgdGhhdCBpbnZvbHZlIGEg
bG9hZC4KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIEFyZzo6V2lk
dGggd2lkdGggPSBBcmc6OndpZHRoRm9yQjNUeXBlKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5VGVzdCh3aWR0aCwgbG9h
ZFByb21pc2UobGVmdCksIHRtcFByb21pc2UocmlnaHQpKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgY29tbWl0SW50ZXJuYWwobGVmdCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlUZXN0KHdpZHRoLCB0bXBQ
cm9taXNlKGxlZnQpLCBsb2FkUHJvbWlzZShyaWdodCkpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjb21taXRJbnRlcm5hbChyaWdodCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0ZXN0J3MgdGhhdCBpbnZvbHZlIGFuIGltbWVk
aWF0ZSBhbmQgYSB0bXAuCkBAIC0xMTE3LDcgKzEyMzEsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgfQogICAgICAgICB9OwogCi0gICAgICAgIGlmIChjYW5CZUludGVybmFsKHZhbHVlKSB8fCB2
YWx1ZSA9PSBtX3ZhbHVlKSB7CisgICAgICAgIGlmIChwcmVwYXJlVG9GdXNlKHZhbHVlKSkgewog
ICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gYXR0ZW1wdEZ1c2VkKCkpIHsKICAgICAgICAg
ICAgICAgICBjb21taXRJbnRlcm5hbCh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKQEAgLTE0NjMsNiArMTU3NywyMSBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAg
ICAgY2FzZSBCaXRBbmQ6IHsKKyAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJ
bnQoMHhmZikpIHsKKyAgICAgICAgICAgICAgICBhcHBlbmRVbk9wPFplcm9FeHRlbmQ4VG8zMiwg
WmVyb0V4dGVuZDhUbzMyPihtX3ZhbHVlLT5jaGlsZCgwKSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobV92YWx1
ZS0+Y2hpbGQoMSktPmlzSW50KDB4ZmZmZikpIHsKKyAgICAgICAgICAgICAgICBhcHBlbmRVbk9w
PFplcm9FeHRlbmQxNlRvMzIsIFplcm9FeHRlbmQxNlRvMzI+KG1fdmFsdWUtPmNoaWxkKDApKTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
IChtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQoMHhmZmZmZmZmZikpIHsKKyAgICAgICAgICAgICAg
ICBhcHBlbmRVbk9wPE1vdmUzMiwgTW92ZTMyPihtX3ZhbHVlLT5jaGlsZCgwKSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAg
ICBhcHBlbmRCaW5PcDxBbmQzMiwgQW5kNjQsIEFuZERvdWJsZSwgQW5kRmxvYXQsIENvbW11dGF0
aXZlPigKICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQo
MSkpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTU3MiwxOCArMTcwMSwyOCBAQCBwcml2YXRl
OgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKKyAgICAgICAgY2FzZSBTRXh0ODog
eworICAgICAgICAgICAgYXBwZW5kVW5PcDxTaWduRXh0ZW5kOFRvMzIsIEFpcjo6T29wcz4obV92
YWx1ZS0+Y2hpbGQoMCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgY2FzZSBTRXh0MTY6IHsKKyAgICAgICAgICAgIGFwcGVuZFVuT3A8U2lnbkV4dGVuZDE2VG8z
MiwgQWlyOjpPb3BzPihtX3ZhbHVlLT5jaGlsZCgwKSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKwogICAgICAgICBjYXNlIFpFeHQzMjogewogICAgICAgICAgICAgaWYgKGhpZ2hC
aXRzQXJlWmVybyhtX3ZhbHVlLT5jaGlsZCgwKSkpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQo
dG1wKG1fdmFsdWUtPmNoaWxkKDApKSA9PSB0bXAobV92YWx1ZSkpOwogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgYXBwZW5kKE1vdmUzMiwgdG1w
KG1fdmFsdWUtPmNoaWxkKDApKSwgdG1wKG1fdmFsdWUpKTsKKyAgICAgICAgICAgIGFwcGVuZFVu
T3A8TW92ZTMyLCBBaXI6Ok9vcHM+KG1fdmFsdWUtPmNoaWxkKDApKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgU0V4dDMyOiB7Ci0gICAgICAgICAgICBh
cHBlbmQoU2lnbkV4dGVuZDMyVG9QdHIsIHRtcChtX3ZhbHVlLT5jaGlsZCgwKSksIHRtcChtX3Zh
bHVlKSk7CisgICAgICAgICAgICBhcHBlbmRVbk9wPFNpZ25FeHRlbmQzMlRvUHRyLCBBaXI6Ok9v
cHM+KG1fdmFsdWUtPmNoaWxkKDApKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkocmV2aXNpb24gMTk0MDEyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU2OTMsNiArNTY5MywxNjMgQEAgdm9pZCB0ZXN0Q2hlY2tNZWdhQ29tYm8oKQogICAgIENIRUNL
KGludm9rZTxpbnQ+KCpjb2RlLCAmdmFsdWUgLSAyLCAxKSA9PSA0Mik7CiB9CiAKK3ZvaWQgdGVz
dENoZWNrVHdvTWVnYUNvbWJvcygpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNC
bG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBWYWx1ZSogYmFzZSA9IHJvb3QtPmFw
cGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIwKTsKKyAgICBWYWx1ZSogaW5kZXggPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAg
ICAgICBwcm9jLCBaRXh0MzIsIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFs
dWU+KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAgICAgICAgcm9v
dC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjph
cmd1bWVudEdQUjEpKSk7CisKKyAgICBWYWx1ZSogcHRyID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVl
PigKKyAgICAgICAgcHJvYywgQWRkLCBPcmlnaW4oKSwgYmFzZSwKKyAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFNobCwgT3JpZ2luKCksIGluZGV4LAor
ICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IDEpKSk7CisKKyAgICBWYWx1ZSogcHJlZGljYXRlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigK
KyAgICAgICAgcHJvYywgTGVzc1RoYW4sIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmRO
ZXc8TWVtb3J5VmFsdWU+KHByb2MsIExvYWQ4UywgT3JpZ2luKCksIHB0ciksCisgICAgICAgIHJv
b3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCA0MikpOworICAgIAor
ICAgIENoZWNrVmFsdWUqIGNoZWNrID0gcm9vdC0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KHByb2Ms
IENoZWNrLCBPcmlnaW4oKSwgcHJlZGljYXRlKTsKKyAgICBjaGVjay0+c2V0R2VuZXJhdG9yKAor
ICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVz
YWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnNpemUoKSA9
PSAxKTsKKworICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgYWx3YXlzIHdvcmsgYmVjYXVzZSBh
IGZ1bmN0aW9uIHRoaXMgc2ltcGxlIHNob3VsZCBuZXZlciBoYXZlIGNhbGxlZQorICAgICAgICAg
ICAgLy8gc2F2ZXMuCisgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMig0MiksIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgICAgIGppdC5lbWl0
RnVuY3Rpb25FcGlsb2d1ZSgpOworICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICB9KTsK
KyAgICBDaGVja1ZhbHVlKiBjaGVjazIgPSByb290LT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4ocHJv
YywgQ2hlY2ssIE9yaWdpbigpLCBwcmVkaWNhdGUpOworICAgIGNoZWNrMi0+c2V0R2VuZXJhdG9y
KAorICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3Rl
clVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnNpemUo
KSA9PSAxKTsKKworICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgYWx3YXlzIHdvcmsgYmVjYXVz
ZSBhIGZ1bmN0aW9uIHRoaXMgc2ltcGxlIHNob3VsZCBuZXZlciBoYXZlIGNhbGxlZQorICAgICAg
ICAgICAgLy8gc2F2ZXMuCisgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMig0MyksIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgICAgIGppdC5l
bWl0RnVuY3Rpb25FcGlsb2d1ZSgpOworICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICB9
KTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0
dXJuLCBPcmlnaW4oKSwgcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIDApKTsKKworICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisKKyAgICBpbnQ4X3Qg
dmFsdWU7CisgICAgdmFsdWUgPSA0MjsKKyAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgJnZh
bHVlIC0gMiwgMSkgPT0gMCk7CisgICAgdmFsdWUgPSAxMjc7CisgICAgQ0hFQ0soaW52b2tlPGlu
dD4oKmNvZGUsICZ2YWx1ZSAtIDIsIDEpID09IDApOworICAgIHZhbHVlID0gNDE7CisgICAgQ0hF
Q0soaW52b2tlPGludD4oKmNvZGUsICZ2YWx1ZSAtIDIsIDEpID09IDQyKTsKKyAgICB2YWx1ZSA9
IDA7CisgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsICZ2YWx1ZSAtIDIsIDEpID09IDQyKTsK
KyAgICB2YWx1ZSA9IC0xOworICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAmdmFsdWUgLSAy
LCAxKSA9PSA0Mik7Cit9CisKK3ZvaWQgdGVzdENoZWNrVHdvTm9uUmVkdW5kYW50TWVnYUNvbWJv
cygpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgCisgICAgQmFzaWNCbG9jayogcm9vdCA9
IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiB0aGVuQ2FzZSA9IHByb2MuYWRkQmxv
Y2soKTsKKyAgICBCYXNpY0Jsb2NrKiBlbHNlQ2FzZSA9IHByb2MuYWRkQmxvY2soKTsKKyAgICAK
KyAgICBWYWx1ZSogYmFzZSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBWYWx1ZSogaW5kZXggPSBy
b290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICBwcm9jLCBaRXh0MzIsIE9yaWdpbigpLAor
ICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMs
IE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+
KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpKSk7CisgICAgVmFsdWUqIGJy
YW5jaFByZWRpY2F0ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgIHByb2MsIEJp
dEFuZCwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAg
ICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8
QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMikp
LAorICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
MHhmZikpOworCisgICAgVmFsdWUqIHB0ciA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAg
ICAgIHByb2MsIEFkZCwgT3JpZ2luKCksIGJhc2UsCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxW
YWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBTaGwsIE9yaWdpbigpLCBpbmRleCwKKyAgICAgICAg
ICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAxKSkpOwor
CisgICAgVmFsdWUqIGNoZWNrUHJlZGljYXRlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAg
ICAgICAgcHJvYywgTGVzc1RoYW4sIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KHByb2MsIExvYWQ4UywgT3JpZ2luKCksIHB0ciksCisgICAgICAgIHJvb3Qt
PmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCA0MikpOworCisgICAgcm9v
dC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIEJyYW5jaCwgT3JpZ2lu
KCksIGJyYW5jaFByZWRpY2F0ZSwKKyAgICAgICAgRnJlcXVlbnRlZEJsb2NrKHRoZW5DYXNlKSwg
RnJlcXVlbnRlZEJsb2NrKGVsc2VDYXNlKSk7CisgICAgCisgICAgQ2hlY2tWYWx1ZSogY2hlY2sg
PSB0aGVuQ2FzZS0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KHByb2MsIENoZWNrLCBPcmlnaW4oKSwg
Y2hlY2tQcmVkaWNhdGUpOworICAgIGNoZWNrLT5zZXRHZW5lcmF0b3IoCisgICAgICAgIFsmXSAo
Q0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1z
KSB7CisgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3Jh
dGNoKGppdCk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuc2l6ZSgpID09IDEpOworCisgICAg
ICAgICAgICAvLyBUaGlzIHNob3VsZCBhbHdheXMgd29yayBiZWNhdXNlIGEgZnVuY3Rpb24gdGhp
cyBzaW1wbGUgc2hvdWxkIG5ldmVyIGhhdmUgY2FsbGVlCisgICAgICAgICAgICAvLyBzYXZlcy4K
KyAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDQyKSwgR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxv
Z3VlKCk7CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgIHRoZW5DYXNl
LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4o
KSwgdGhlbkNhc2UtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCA0Mykp
OworCisgICAgQ2hlY2tWYWx1ZSogY2hlY2syID0gZWxzZUNhc2UtPmFwcGVuZE5ldzxDaGVja1Zh
bHVlPihwcm9jLCBDaGVjaywgT3JpZ2luKCksIGNoZWNrUHJlZGljYXRlKTsKKyAgICBjaGVjazIt
PnNldEdlbmVyYXRvcigKKyAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgIEFsbG93TWFjcm9T
Y3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAgIENIRUNL
KHBhcmFtcy5zaXplKCkgPT0gMSk7CisKKyAgICAgICAgICAgIC8vIFRoaXMgc2hvdWxkIGFsd2F5
cyB3b3JrIGJlY2F1c2UgYSBmdW5jdGlvbiB0aGlzIHNpbXBsZSBzaG91bGQgbmV2ZXIgaGF2ZSBj
YWxsZWUKKyAgICAgICAgICAgIC8vIHNhdmVzLgorICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoNDQpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAg
ICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKKyAgICAgICAgICAgIGppdC5yZXQo
KTsKKyAgICAgICAgfSk7CisgICAgZWxzZUNhc2UtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAor
ICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBlbHNlQ2FzZS0+YXBwZW5kTmV3PENvbnN0
MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDQ1KSk7CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxl
KHByb2MpOworCisgICAgaW50OF90IHZhbHVlOworCisgICAgdmFsdWUgPSA0MjsKKyAgICBDSEVD
SyhpbnZva2U8aW50PigqY29kZSwgJnZhbHVlIC0gMiwgMSwgdHJ1ZSkgPT0gNDMpOworICAgIHZh
bHVlID0gMTI3OworICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAmdmFsdWUgLSAyLCAxLCB0
cnVlKSA9PSA0Myk7CisgICAgdmFsdWUgPSA0MTsKKyAgICBDSEVDSyhpbnZva2U8aW50PigqY29k
ZSwgJnZhbHVlIC0gMiwgMSwgdHJ1ZSkgPT0gNDIpOworICAgIHZhbHVlID0gMDsKKyAgICBDSEVD
SyhpbnZva2U8aW50PigqY29kZSwgJnZhbHVlIC0gMiwgMSwgdHJ1ZSkgPT0gNDIpOworICAgIHZh
bHVlID0gLTE7CisgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsICZ2YWx1ZSAtIDIsIDEsIHRy
dWUpID09IDQyKTsKKworICAgIHZhbHVlID0gNDI7CisgICAgQ0hFQ0soaW52b2tlPGludD4oKmNv
ZGUsICZ2YWx1ZSAtIDIsIDEsIGZhbHNlKSA9PSA0NSk7CisgICAgdmFsdWUgPSAxMjc7CisgICAg
Q0hFQ0soaW52b2tlPGludD4oKmNvZGUsICZ2YWx1ZSAtIDIsIDEsIGZhbHNlKSA9PSA0NSk7Cisg
ICAgdmFsdWUgPSA0MTsKKyAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgJnZhbHVlIC0gMiwg
MSwgZmFsc2UpID09IDQ0KTsKKyAgICB2YWx1ZSA9IDA7CisgICAgQ0hFQ0soaW52b2tlPGludD4o
KmNvZGUsICZ2YWx1ZSAtIDIsIDEsIGZhbHNlKSA9PSA0NCk7CisgICAgdmFsdWUgPSAtMTsKKyAg
ICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgJnZhbHVlIC0gMiwgMSwgZmFsc2UpID09IDQ0KTsK
K30KKwogdm9pZCB0ZXN0Q2hlY2tBZGRJbW0oKQogewogICAgIFByb2NlZHVyZSBwcm9jOwpAQCAt
ODM0Niw2ICs4NTAzLDggQEAgdm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVyKQogICAgIFJVTih0
ZXN0U2ltcGxlQ2hlY2soKSk7CiAgICAgUlVOKHRlc3RDaGVja0xlc3NUaGFuKCkpOwogICAgIFJV
Tih0ZXN0Q2hlY2tNZWdhQ29tYm8oKSk7CisgICAgUlVOKHRlc3RDaGVja1R3b01lZ2FDb21ib3Mo
KSk7CisgICAgUlVOKHRlc3RDaGVja1R3b05vblJlZHVuZGFudE1lZ2FDb21ib3MoKSk7CiAgICAg
UlVOKHRlc3RDaGVja0FkZEltbSgpKTsKICAgICBSVU4odGVzdENoZWNrQWRkSW1tQ29tbXV0ZSgp
KTsKICAgICBSVU4odGVzdENoZWNrQWRkSW1tU29tZVJlZ2lzdGVyKCkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCShyZXZpc2lvbiAx
OTQwMTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVz
CSh3b3JraW5nIGNvcHkpCkBAIC0yODgsNiArMjg4LDI2IEBAIE1vdmUzMiBVOkcsIEQ6RwogU2ln
bkV4dGVuZDMyVG9QdHIgVTpHLCBEOkcKICAgICBUbXAsIFRtcAogCitaZXJvRXh0ZW5kOFRvMzIg
VTpHLCBEOkcKKyAgICBUbXAsIFRtcAorICAgIEFkZHIsIFRtcCBhcyBsb2FkOAorICAgIEluZGV4
LCBUbXAgYXMgbG9hZDgKKworU2lnbkV4dGVuZDhUbzMyIFU6RywgRDpHCisgICAgVG1wLCBUbXAK
KyAgICBBZGRyLCBUbXAgYXMgbG9hZDhTaWduZWRFeHRlbmRUbzMyCisgICAgSW5kZXgsIFRtcCBh
cyBsb2FkOFNpZ25lZEV4dGVuZFRvMzIKKworWmVyb0V4dGVuZDE2VG8zMiBVOkcsIEQ6RworICAg
IFRtcCwgVG1wCisgICAgQWRkciwgVG1wIGFzIGxvYWQxNgorICAgIEluZGV4LCBUbXAgYXMgbG9h
ZDE2CisKK1NpZ25FeHRlbmQxNlRvMzIgVTpHLCBEOkcKKyAgICBUbXAsIFRtcAorICAgIEFkZHIs
IFRtcCBhcyBsb2FkMTZTaWduZWRFeHRlbmRUbzMyCisgICAgSW5kZXgsIFRtcCBhcyBsb2FkMTZT
aWduZWRFeHRlbmRUbzMyCisKIE1vdmVGbG9hdCBVOkYsIEQ6RgogICAgIFRtcCwgVG1wIGFzIG1v
dmVEb3VibGUKICAgICBBZGRyLCBUbXAgYXMgbG9hZEZsb2F0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>267277</attachid>
            <date>2015-12-13 19:22:47 -0800</date>
            <delta_ts>2015-12-13 19:38:51 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>40038</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk0MDEyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBA
CisyMDE1LTEyLTEyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QjMtPkFpciBjb21wYXJlLWJyYW5jaCBmdXNpb24gc2hvdWxkIGZ1c2UgZXZlbiBpZiB0aGUgcmVz
dWx0IG9mIHRoZSBjb21wYXJpc29uIGlzIHVzZWQgbW9yZSB0aGFuIG9uY2UKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjE5OAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElmIHdlIGhhdmUgYSBjb21wYXJp
c29uIG9wZXJhdGlvbiB0aGF0IGlzIGJyYW5jaGVkIG9uIGZyb20gbXVsdGlwbGUgcGxhY2VzLCB0
aGVuIHdlIHdlcmUKKyAgICAgICAgcHJldmlvdXNseSBleGVjdXRpbmcgdGhlIGNvbXBhcmlzb24g
dG8gZ2V0IGEgYm9vbGVhbiByZXN1bHQgaW4gYSByZWdpc3RlciBhbmQgdGhlbiB3ZSB3ZXJlCisg
ICAgICAgIHRlc3RpbmcvYnJhbmNoaW5nIG9uIHRoYXQgcmVnaXN0ZXIgaW4gbXVsdGlwbGUgcGxh
Y2VzLiBUaGlzIGlzIGFjdHVhbGx5IGxlc3MgZWZmaWNpZW50IHRoYW4KKyAgICAgICAganVzdCBm
dXNpbmcgdGhlIGNvbXBhcmUvYnJhbmNoIG11bHRpcGxlIHRpbWVzLCBldmVuIHRob3VnaCB0aGlz
IG1lYW5zIHRoYXQgdGhlIGNvbXBhcmlzb24KKyAgICAgICAgZXhlY3V0ZXMgbXVsdGlwbGUgdGlt
ZXMuIFRoaXMgd291bGQgb25seSBiZSBiYWQgaWYgdGhlIGNvbXBhcmlzb24gZnVzZWQgbG9hZHMg
bXVsdGlwbGUgdGltZXMsCisgICAgICAgIHNpbmNlIGR1cGxpY2F0aW5nIGxvYWRzIGlzIGJvdGgg
d3JvbmcgYW5kIGluZWZmaWNpZW50LiBTbywgdGhpcyBhZGRzIHRoZSBub3Rpb24gb2Ygc2hhcmlu
ZyB0bworICAgICAgICBjb21wYXJlL2JyYW5jaCBmdXNpb24uIElmIGEgY29tcGFyZSBpcyBzaGFy
ZWQgYnkgbXVsdGlwbGUgYnJhbmNoZXMsIHRoZW4gd2UgcmVmdXNlIHRvIGZ1c2UKKyAgICAgICAg
dGhlIGxvYWQuCisKKyAgICAgICAgVG8gd3JpdGUgdGhlIHRlc3QsIEkgbmVlZGVkIHRvIHplcm8t
ZXh0ZW5kIDggdG8gMzIuIEluIHRoZSBwcm9jZXNzIG9mIHRoaW5raW5nIGFib3V0IGhvdyB0bwor
ICAgICAgICBkbyB0aGlzLCBJIHJlYWxpemVkIHRoYXQgd2UgbmVlZGVkIGxvd2VyaW5ncyBmb3Ig
U0V4dDgvU0V4dDE2LiBBbmQgSSByZWFsaXplZCB0aGF0IHRoZQorICAgICAgICBsb3dlcmluZ3Mg
Zm9yIHRoZSBvdGhlciBleHRlbnNpb24gb3BlcmF0aW9ucyB3ZXJlIG5vdCBmdWxseSBmbGVzaGVk
IG91dDsgZm9yIGV4YW1wbGUgdGhleQorICAgICAgICB3ZXJlIGluY2FwYWJsZSBvZiBsb2FkIGZ1
c2lvbi4gVGhpcyBwYXRjaCBmaXhlcyB0aGlzIGFuZCBhbHNvIGFkZHMgc29tZSBzbWFydCBzdHJl
bmd0aAorICAgICAgICByZWR1Y3Rpb25zIGZvciBCaXRBbmQoQHgsIDB4ZmYvMHhmZmZmLzB4ZmZm
ZmZmZmYpIC0gYWxsIG9mIHdoaWNoIHNob3VsZCBiZSBsb3dlcmVkIHRvIGEgemVybworICAgICAg
ICBleHRlbnNpb24uCisKKyAgICAgICAgVGhpcyBpcyBhIGJpZyB3aW4gb24gYXNtLmpzIGNvZGUu
IEl0J3Mgbm90IGVub3VnaCB0byBicmlkZ2UgdGhlIGdhcCB0byBMTFZNLCBidXQgaXQncyBhIGh1
Z2UKKyAgICAgICAgc3RlcCBpbiB0aGF0IGRpcmVjdGlvbi4KKworICAgICAgICAqIGFzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
clg4NkNvbW1vbjo6bG9hZDhTaWduZWRFeHRlbmRUbzMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9B
c3NlbWJsZXJYODZDb21tb246Onplcm9FeHRlbmQ4VG8zMik6CisgICAgICAgIChKU0M6Ok1hY3Jv
QXNzZW1ibGVyWDg2Q29tbW9uOjpzaWduRXh0ZW5kOFRvMzIpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlclg4NkNvbW1vbjo6bG9hZDE2KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJYODZDb21tb246OmxvYWQxNlNpZ25lZEV4dGVuZFRvMzIpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlclg4NkNvbW1vbjo6emVyb0V4dGVuZDE2VG8zMik6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpzaWduRXh0ZW5kMTZUbzMyKToKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJYODZDb21tb246OnN0b3JlMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKToK
KyAgICAgICAgKiBhc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6Olg4NkFz
c2VtYmxlcjo6bW92emJsX3JyKToKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjptb3ZzYmxf
cnIpOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6Om1vdnp3bF9ycik6CisgICAgICAgIChK
U0M6Olg4NkFzc2VtYmxlcjo6bW92c3dsX3JyKToKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVy
OjpjbW92bF9ycik6CisgICAgICAgICogYjMvQjNMb3dlclRvQWlyLmNwcDoKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6Y3JlYXRlR2VuZXJpY0NvbXBhcmUpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpsb3dlcik6CisgICAgICAgICogYjMvYWlyL0Fpck9w
Y29kZS5vcGNvZGVzOgorICAgICAgICAqIGIzL3Rlc3RiMy5jcHA6CisgICAgICAgIChKU0M6OkIz
Ojp0ZXN0Q2hlY2tNZWdhQ29tYm8pOgorICAgICAgICAoSlNDOjpCMzo6dGVzdENoZWNrVHdvTWVn
YUNvbWJvcyk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Q2hlY2tUd29Ob25SZWR1bmRhbnRNZWdh
Q29tYm9zKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RDaGVja0FkZEltbSk6CisgICAgICAgIChK
U0M6OkIzOjpydW4pOgorCiAyMDE1LTEyLTEyICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW5A
d2Via2l0Lm9yZz4KIAogICAgICAgICBbSlNDXSBBZGQgbG93ZXJpbmcgZm9yIEIzJ3MgU3RvcmU4
IG9wY29kZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlclg4NkNvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAkocmV2aXNpb24gMTk0MDEyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC02NDQsNiArNjQ0LDE2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IG1fYXNzZW1ibGVyLm1vdnNibF9tcihhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBkZXN0
KTsKICAgICB9CisKKyAgICB2b2lkIHplcm9FeHRlbmQ4VG8zMihSZWdpc3RlcklEIHNyYywgUmVn
aXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92emJsX3JyKHNyYywg
ZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2lnbkV4dGVuZDhUbzMyKFJlZ2lzdGVySUQg
c3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZzYmxf
cnIoc3JjLCBkZXN0KTsKKyAgICB9CiAgICAgCiAgICAgdm9pZCBsb2FkMTYoQmFzZUluZGV4IGFk
ZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CkBAIC02NjUsNiArNjc1LDE2IEBAIHB1Ymxp
YzoKICAgICAgICAgbV9hc3NlbWJsZXIubW92c3dsX21yKGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNz
LmJhc2UsIGRlc3QpOwogICAgIH0KIAorICAgIHZvaWQgemVyb0V4dGVuZDE2VG8zMihSZWdpc3Rl
cklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92
endsX3JyKHNyYywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2lnbkV4dGVuZDE2VG8z
MihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubW92c3dsX3JyKHNyYywgZGVzdCk7CisgICAgfQorICAgIAogICAgIERhdGFMYWJlbDMy
IHN0b3JlMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGFk
ZHJlc3MpCiAgICAgewogICAgICAgICBwYWRCZWZvcmVQYXRjaCgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCShyZXZpc2lvbiAxOTQw
MTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzE5LDYgKzE3MTksMjEgQEAgcHVibGljOgogICAgICAgICBtX2Zv
cm1hdHRlci50d29CeXRlT3A4KE9QMl9NT1ZaWF9HdkViLCBkc3QsIHNyYyk7CiAgICAgfQogCisg
ICAgdm9pZCBtb3ZzYmxfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsK
KyAgICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wOChPUDJfTU9WU1hfR3ZFYiwgZHN0LCBzcmMp
OworICAgIH0KKworICAgIHZvaWQgbW92endsX3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklE
IGRzdCkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcDgoT1AyX01PVlpYX0d2
RXcsIGRzdCwgc3JjKTsKKyAgICB9CisKKyAgICB2b2lkIG1vdnN3bF9ycihSZWdpc3RlcklEIHNy
YywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3A4
KE9QMl9NT1ZTWF9HdkV3LCBkc3QsIHNyYyk7CisgICAgfQorCiAgICAgdm9pZCBjbW92bF9ycihD
b25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKICAg
ICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wKGNtb3ZjYyhjb25kKSwgZHN0LCBzcmMpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHJldmlzaW9uIDE5
NDAxMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NzMsMjAgKzg3MywxNDUgQEAgcHJpdmF0ZToKICAgICAgICAgY29uc3Qg
Q29tcGFyZUZsb2F0RnVuY3RvciYgY29tcGFyZUZsb2F0LCAvLyBTaWduYXR1cmU6IChBcmcgZG91
YmxlQ29uZCwgQXJnLCBBcmcpIC0+IEluc3QKICAgICAgICAgYm9vbCBpbnZlcnRlZCA9IGZhbHNl
KQogICAgIHsKKyAgICAgICAgLy8gTk9URTogVGhpcyBpcyB0b3RhbGx5IGhhcHB5IHRvIG1hdGNo
IGNvbXBhcmlzb25zIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gY29tcHV0ZWQgZWxzZXdoZXJlCisg
ICAgICAgIC8vIHNpbmNlIG9uIG1vc3QgYXJjaGl0ZWN0dXJlcywgdGhlIGNvc3Qgb2YgYnJhbmNo
aW5nIG9uIGEgcHJldmlvdXNseSBjb21wdXRlZCBjb21wYXJpc29uCisgICAgICAgIC8vIHJlc3Vs
dCBpcyBhbG1vc3QgYWx3YXlzIGhpZ2hlciB0aGFuIGp1c3QgZG9pbmcgYW5vdGhlciBmdXNlZCBj
b21wYXJlL2JyYW5jaC4gVGhlIG9ubHkgdGltZQorICAgICAgICAvLyBpdCBjb3VsZCBiZSB3b3Jz
ZSBpcyBpZiB3ZSBoYXZlIGEgYmluYXJ5IGNvbXBhcmlzb24gYW5kIGJvdGggb3BlcmFuZHMgYXJl
IHZhcmlhYmxlcyAobm90CisgICAgICAgIC8vIGNvbnN0YW50cyksIGFuZCB3ZSBlbmNvdW50ZXIg
cmVnaXN0ZXIgcHJlc3N1cmUuIEV2ZW4gaW4gdGhpcyBjYXNlLCBkdXBsaWNhdGluZyB0aGUgY29t
cGFyZQorICAgICAgICAvLyBzbyB0aGF0IHdlIGNhbiBmdXNlIGl0IHRvIHRoZSBicmFuY2ggd2ls
bCBiZSBtb3JlIGVmZmljaWVudCBtb3N0IG9mIHRoZSB0aW1lLCBzaW5jZQorICAgICAgICAvLyBy
ZWdpc3RlciBwcmVzc3VyZSBpcyBub3QgKnRoYXQqIGNvbW1vbi4gRm9yIHRoaXMgcmVhc29uLCB0
aGlzIGFsZ29yaXRobSB3aWxsIGFsd2F5cworICAgICAgICAvLyBkdXBsaWNhdGUgdGhlIGNvbXBh
cmlzb24uCisgICAgICAgIC8vCisgICAgICAgIC8vIEhvd2V2ZXIsIHdlIGNhbm5vdCBkdXBsaWNh
dGUgbG9hZHMuIFRoZSBjYW5CZUludGVybmFsKCkgb24gYSBsb2FkIHdpbGwgYXNzdW1lIHRoYXQg
d2UKKyAgICAgICAgLy8gYWxyZWFkeSB2YWxpZGF0ZWQgY2FuQmVJbnRlcm5hbCgpIG9uIGFsbCBv
ZiB0aGUgdmFsdWVzIHRoYXQgZ290IHVzIHRvIHRoZSBsb2FkLiBTbywgZXZlbgorICAgICAgICAv
LyBpZiB3ZSBhcmUgc2hhcmluZyBhIHZhbHVlLCB3ZSBzdGlsbCBuZWVkIHRvIGNhbGwgY2FuQmVJ
bnRlcm5hbCgpIGZvciB0aGUgcHVycG9zZSBvZgorICAgICAgICAvLyB0cmFja2luZyB3aGV0aGVy
IHdlIGFyZSBzdGlsbCBpbiBnb29kIHNoYXBlIHRvIGZ1c2UgbG9hZHMuCisgICAgICAgIC8vCisg
ICAgICAgIC8vIFdlIGNvdWxkIGV2ZW4gaGF2ZSBhIGNoYWluIG9mIGNvbXBhcmUgdmFsdWVzIHRo
YXQgd2UgZnVzZSwgYW5kIGFueSBtZW1iZXIgb2YgdGhlIGNoYWluCisgICAgICAgIC8vIGNvdWxk
IGJlIHNoYXJlZC4gT25jZSBhbnkgb2YgdGhlbSBhcmUgc2hhcmVkLCB0aGVuIHRoZSBzaGFyZWQg
b25lJ3MgdHJhbnNpdGl2ZSBjaGlsZHJlbgorICAgICAgICAvLyBjYW5ub3QgYmUgbG9ja2VkIChp
LmUuIGNvbW1pdEludGVybmFsKCkpLiBCdXQgaWYgbm9uZSBvZiB0aGVtIGFyZSBzaGFyZWQsIHRo
ZW4gd2Ugd2FudCB0bworICAgICAgICAvLyBsb2NrIGFsbCBvZiB0aGVtIGJlY2F1c2UgdGhhdCdz
IGEgcHJlcmVxdWlzaXRlIHRvIGZ1c2luZyB0aGUgbG9hZHMgc28gdGhhdCB0aGUgbG9hZHMgZG9u
J3QKKyAgICAgICAgLy8gZ2V0IGR1cGxpY2F0ZWQuIEZvciBleGFtcGxlLCB3ZSBtaWdodCBoYXZl
OiAKKyAgICAgICAgLy8KKyAgICAgICAgLy8gICAgIEB0bXAxID0gTGVzc1RoYW4oQGEsIEBiKQor
ICAgICAgICAvLyAgICAgQHRtcDIgPSBFcXVhbChAdG1wMSwgMCkKKyAgICAgICAgLy8gICAgIEJy
YW5jaChAdG1wMikKKyAgICAgICAgLy8KKyAgICAgICAgLy8gSWYgZWl0aGVyIEBhIG9yIEBiIGFy
ZSBsb2FkcywgdGhlbiB3ZSB3YW50IHRvIGhhdmUgbG9ja2VkIEB0bXAxIGFuZCBAdG1wMiBzbyB0
aGF0IHRoZXkKKyAgICAgICAgLy8gZG9uJ3QgZW1pdCB0aGUgbG9hZHMgYSBzZWNvbmQgdGltZS4g
QnV0IGlmIHdlIGhhZCBhbm90aGVyIHVzZSBvZiBAdG1wMiwgdGhlbiB3ZSBjYW5ub3QKKyAgICAg
ICAgLy8gbG9jayBAdG1wMSAob3IgQGEgb3IgQGIpIGJlY2F1c2UgdGhlbiB3ZSdsbCBnZXQgaW50
byB0cm91YmxlIHdoZW4gdGhlIG90aGVyIHZhbHVlcyB0aGF0CisgICAgICAgIC8vIHRyeSB0byBz
aGFyZSBAdG1wMSB3aXRoIHVzIHRyeSB0byBkbyB0aGVpciBsb3dlcmluZy4KKyAgICAgICAgLy8K
KyAgICAgICAgLy8gVGhlcmUncyBvbmUgbW9yZSB3cmlua2xlLiBJZiB3ZSBkb24ndCBsb2NrIGFu
IGludGVybmFsIHZhbHVlLCB0aGVuIHRoaXMgaW50ZXJuYWwgdmFsdWUgbWF5CisgICAgICAgIC8v
IGhhdmUgYWxyZWFkeSBzZXBhcmF0ZWx5IGxvY2tlZCBpdHMgY2hpbGRyZW4uIFNvLCBpZiB3ZSdy
ZSBub3QgbG9ja2luZyBhIHZhbHVlIHRoZW4gd2UgbmVlZAorICAgICAgICAvLyB0byBtYWtlIHN1
cmUgdGhhdCBpdHMgY2hpbGRyZW4gYXJlbid0IGxvY2tlZC4gV2UgZW5jYXBzdWxhdGUgdGhpcyBp
biB0d28gd2F5czoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gY2FuQ29tbWl0SW50ZXJuYWw6IFRo
aXMgdmFyaWFibGUgdGVsbHMgdXMgaWYgdGhlIHZhbHVlcyB0aGF0IHdlJ3ZlIGZ1c2VkIHNvIGZh
ciBhcmUKKyAgICAgICAgLy8gbG9ja2VkLiBUaGlzIG1lYW5zIHRoYXQgd2UncmUgbm90IHNoYXJp
bmcgYW55IG9mIHRoZW0gd2l0aCBhbnlvbmUuIFRoaXMgcGVybWl0cyB1cyB0byBmdXNlCisgICAg
ICAgIC8vIGxvYWRzLiBJZiBpdCdzIGZhbHNlLCB0aGVuIHdlIGNhbm5vdCBmdXNlIGxvYWRzIGFu
ZCB3ZSBhbHNvIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlCisgICAgICAgIC8vIGNoaWxkcmVuIG9m
IGFueSB2YWx1ZXMgd2UgdHJ5IHRvIGZ1c2UtYnktc2hhcmluZyBhcmUgbm90IGFscmVhZHkgbG9j
a2VkLiBZb3UgZG9uJ3QgaGF2ZSB0bworICAgICAgICAvLyB3b3JyeSBhYm91dCB0aGUgY2hpbGRy
ZW4gbG9ja2luZyB0aGluZyBpZiB5b3UgdXNlIHByZXBhcmVUb0Z1c2UoKSBiZWZvcmUgdHJ5aW5n
IHRvIGZ1c2UgYQorICAgICAgICAvLyBzaGFyYWJsZSB2YWx1ZS4gQnV0LCB5b3UgZG8gbmVlZCB0
byBndWFyZCBhbnkgbG9hZCBmdXNpb24gYnkgY2hlY2tpbmcgaWYgY2FuQ29tbWl0SW50ZXJuYWwK
KyAgICAgICAgLy8gaXMgdHJ1ZS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gRnVzaW9uUmVzdWx0
IHByZXBhcmVUb0Z1c2UodmFsdWUpOiBDYWxsIHRoaXMgd2hlbiB5b3UgdGhpbmcgdGhhdCB5b3Ug
d291bGQgbGlrZSB0byBmdXNlCisgICAgICAgIC8vIHNvbWUgdmFsdWUgYW5kIHRoYXQgdmFsdWUg
aXMgbm90IGEgbG9hZC4gSXQgd2lsbCBhdXRvbWF0aWNhbGx5IGhhbmRsZSB0aGUgc2hhcmVkLW9y
LWxvY2tlZAorICAgICAgICAvLyBpc3N1ZXMgYW5kIGl0IHdpbGwgY2xlYXIgY2FuQ29tbWl0SW50
ZXJuYWwgaWYgbmVjZXNzYXJ5LiBUaGlzIHdpbGwgcmV0dXJuIENhbm5vdEZ1c2UKKyAgICAgICAg
Ly8gKHdoaWNoIGFjdHMgbGlrZSBmYWxzZSkgaWYgdGhlIHZhbHVlIGNhbm5vdCBiZSBsb2NrZWQg
YW5kIGl0cyBjaGlsZHJlbiBhcmUgbG9ja2VkLiBUaGF0J3MKKyAgICAgICAgLy8gcmFyZSwgYnV0
IHlvdSBqdXN0IG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91IGRvIHNtYXJ0IHRoaW5ncyB3aGVu
IHRoaXMgaGFwcGVucyAoaS5lLiBqdXN0CisgICAgICAgIC8vIHVzZSB0aGUgdmFsdWUgcmF0aGVy
IHRoYW4gdHJ5aW5nIHRvIGZ1c2UgaXQpLiBBZnRlciB5b3UgY2FsbCBwcmVwYXJlVG9GdXNlKCks
IHlvdSBjYW4KKyAgICAgICAgLy8gc3RpbGwgY2hhbmdlIHlvdXIgbWluZCBhYm91dCB3aGV0aGVy
IHlvdSB3aWxsIGFjdHVhbGx5IGZ1c2UgdGhlIHZhbHVlLiBJZiB5b3UgZG8gZnVzZSBpdCwKKyAg
ICAgICAgLy8geW91IG5lZWQgdG8gY2FsbCBjb21taXRGdXNpb24odmFsdWUsIGZ1c2lvblJlc3Vs
dCkuCisgICAgICAgIC8vCisgICAgICAgIC8vIGNvbW1pdEZ1c2lvbih2YWx1ZSwgZnVzaW9uUmVz
dWx0KTogSGFuZGxlcyBjYWxsaW5nIGNvbW1pdEludGVybmFsKHZhbHVlKSBpZiBmdXNpb25SZXN1
bHQKKyAgICAgICAgLy8gaXMgRnVzZUFuZENvbW1pdC4KKyAgICAgICAgCisgICAgICAgIGJvb2wg
Y2FuQ29tbWl0SW50ZXJuYWwgPSB0cnVlOworCisgICAgICAgIGVudW0gRnVzaW9uUmVzdWx0IHsK
KyAgICAgICAgICAgIENhbm5vdEZ1c2UsCisgICAgICAgICAgICBGdXNlQW5kQ29tbWl0LAorICAg
ICAgICAgICAgRnVzZQorICAgICAgICB9OworICAgICAgICBhdXRvIHByZXBhcmVUb0Z1c2UgPSBb
Jl0gKFZhbHVlKiB2YWx1ZSkgLT4gRnVzaW9uUmVzdWx0IHsKKyAgICAgICAgICAgIGlmICh2YWx1
ZSA9PSBtX3ZhbHVlKSB7CisgICAgICAgICAgICAgICAgLy8gSXQncyBub3QgYWN0dWFsbHkgaW50
ZXJuYWwuIEl0J3MgdGhlIHJvb3QgdmFsdWUuIFdlJ3JlIGdvb2QgdG8gZ28uCisgICAgICAgICAg
ICAgICAgcmV0dXJuIEZ1c2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjYW5D
b21taXRJbnRlcm5hbCAmJiBjYW5CZUludGVybmFsKHZhbHVlKSkgeworICAgICAgICAgICAgICAg
IC8vIFdlIGFyZSB0aGUgb25seSB1c2VycyBvZiB0aGlzIHZhbHVlLiBUaGlzIGFsc28gbWVhbnMg
dGhhdCB0aGUgdmFsdWUncyBjaGlsZHJlbgorICAgICAgICAgICAgICAgIC8vIGNvdWxkIG5vdCBo
YXZlIGJlZW4gbG9ja2VkLCBzaW5jZSB3ZSBoYXZlIG5vdyBwcm92ZWQgdGhhdCBtX3ZhbHVlIGRv
bWluYXRlcyB2YWx1ZQorICAgICAgICAgICAgICAgIC8vIGluIHRoZSBkYXRhIGZsb3cgZ3JhcGgu
IFRvIG9ubHkgb3RoZXIgd2F5IHRvIHZhbHVlIGlzIGZyb20gYSB1c2VyIG9mIG1fdmFsdWUuIElm
CisgICAgICAgICAgICAgICAgLy8gdmFsdWUncyBjaGlsZHJlbiBhcmUgc2hhcmVkIHdpdGggb3Ro
ZXJzLCB0aGVuIHRoZXkgY291bGQgbm90IGhhdmUgYmVlbiBsb2NrZWQKKyAgICAgICAgICAgICAg
ICAvLyBiZWNhdXNlIHRoZWlyIHVzZSBjb3VudCBpcyBncmVhdGVyIHRoYW4gMS4gSWYgdGhleSBh
cmUgb25seSB1c2VkIGZyb20gdmFsdWUsIHRoZW4KKyAgICAgICAgICAgICAgICAvLyBpbiBvcmRl
ciBmb3IgdmFsdWUncyBjaGlsZHJlbiB0byBiZSBsb2NrZWQsIHZhbHVlIHdvdWxkIGFsc28gaGF2
ZSB0byBiZSBsb2NrZWQsCisgICAgICAgICAgICAgICAgLy8gYW5kIHdlIGp1c3QgcHJvdmVkIHRo
YXQgaXQgd2Fzbid0LgorICAgICAgICAgICAgICAgIHJldHVybiBGdXNlQW5kQ29tbWl0OworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBXZSdyZSBnb2luZyB0byB0cnkgdG8gc2hhcmUg
dmFsdWUgd2l0aCBvdGhlcnMuIEl0J3MgcG9zc2libGUgdGhhdCBzb21lIG90aGVyIGJhc2ljCisg
ICAgICAgICAgICAvLyBibG9jayBoYWQgYWxyZWFkeSBlbWl0dGVkIGNvZGUgZm9yIHZhbHVlIGFu
ZCB0aGVuIG1hdGNoZWQgb3ZlciBpdHMgY2hpbGRyZW4gYW5kIHRoZW4KKyAgICAgICAgICAgIC8v
IGxvY2tlZCB0aGVtLCBpbiB3aGljaCBjYXNlIHdlIGp1c3Qgd2FudCB0byB1c2UgdmFsdWUgaW5z
dGVhZCBvZiBkdXBsaWNhdGluZyBpdC4gU28sIHdlCisgICAgICAgICAgICAvLyB2YWxpZGF0ZSB0
aGUgY2hpbGRyZW4uIE5vdGUgdGhhdCB0aGlzIG9ubHkgYXJpc2VzIGluIGxpbmVhciBjaGFpbnMg
bGlrZToKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyAgICAgQkIjMToKKyAgICAgICAg
ICAgIC8vICAgICAgICAgQDEgPSBGb28oLi4uKQorICAgICAgICAgICAgLy8gICAgICAgICBAMiA9
IEJhcihAMSkKKyAgICAgICAgICAgIC8vICAgICAgICAgSnVtcCgjMikKKyAgICAgICAgICAgIC8v
ICAgICBCQiMyOgorICAgICAgICAgICAgLy8gICAgICAgICBAMyA9IEJheihAMikKKyAgICAgICAg
ICAgIC8vCisgICAgICAgICAgICAvLyBOb3RpY2UgaG93IHdlIGNvdWxkIHN0YXJ0IGJ5IGdlbmVy
YXRpbmcgY29kZSBmb3IgQkIjMSBhbmQgdGhlbiBkZWNpZGUgdG8gbG9jayBAMSB3aGVuCisgICAg
ICAgICAgICAvLyBnZW5lcmF0aW5nIGNvZGUgZm9yIEAyLCBpZiB3ZSBoYXZlIHNvbWUgd2F5IG9m
IGZ1c2luZyBCYXIgYW5kIEZvbyBpbnRvIGEgc2luZ2xlCisgICAgICAgICAgICAvLyBpbnN0cnVj
dGlvbi4gVGhpcyBpcyBsZWdhbCwgc2luY2UgaW5kZWVkIEAxIG9ubHkgaGFzIG9uZSB1c2VyLiBU
aGUgZmFjdCB0aGF0IEAyIG5vdworICAgICAgICAgICAgLy8gaGFzIGEgdG1wIChpLmUuIEAyIGlz
IHBpbm5lZCksIGNhbkJlSW50ZXJuYWwoQDIpIHdpbGwgcmV0dXJuIGZhbHNlLCB3aGljaCBicmlu
Z3MgdXMKKyAgICAgICAgICAgIC8vIGhlcmUuIEluIHRoYXQgY2FzZSwgd2UgY2Fubm90IG1hdGNo
IG92ZXIgQDIgYmVjYXVzZSB0aGVuIHdlJ2QgaGl0IGEgaGF6YXJkIGlmIHdlIGVuZAorICAgICAg
ICAgICAgLy8gdXAgZGVjaWRpbmcgbm90IHRvIGZ1c2UgRm9vIGludG8gdGhlIGZ1c2VkIEJhei9C
YXIuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gSGFwcGlseSwgdGhlcmUgYXJlIG9u
bHkgdHdvIHBsYWNlcyB3aGVyZSB0aGlzIGtpbmQgb2YgY2hpbGQgdmFsaWRhdGlvbiBoYXBwZW5z
IGlzIGluCisgICAgICAgICAgICAvLyBydWxlcyB0aGF0IGFkbWl0IHNoYXJpbmcsIGxpa2UgdGhp
cyBhbmQgZWZmZWN0aXZlQWRkcmVzcygpLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8v
IE4uQi4gV2UgY291bGQgcHJvYmFibHkgYXZvaWQgdGhlIG5lZWQgdG8gZG8gdmFsdWUgbG9ja2lu
ZyBpZiB3ZSBjb21taXR0ZWQgdG8gYSB3ZWxsCisgICAgICAgICAgICAvLyBjaG9zZW4gY29kZSBn
ZW5lcmF0aW9uIG9yZGVyLiBGb3IgZXhhbXBsZSwgaWYgd2UgZ3VhcmFudGVlZCB0aGF0IGFsbCBv
ZiB0aGUgdXNlcnMgb2YKKyAgICAgICAgICAgIC8vIGEgdmFsdWUgZ2V0IGdlbmVyYXRlZCBiZWZv
cmUgdGhhdCB2YWx1ZSwgdGhlbiB0aGVyZSdzIG5vIHdheSBmb3IgdGhlIGxvd2VyaW5nIG9mIEAz
IHRvCisgICAgICAgICAgICAvLyBzZWUgQDEgbG9ja2VkLiBCdXQgd2UgZG9uJ3Qgd2FudCB0byBk
byB0aGF0LCBzaW5jZSB0aGlzIGlzIGEgZ3JlZWR5IGluc3RydWN0aW9uCisgICAgICAgICAgICAv
LyBzZWxlY3RvciBhbmQgc28gd2Ugd2FudCB0byBiZSBhYmxlIHRvIHBsYXkgd2l0aCBvcmRlci4K
KyAgICAgICAgICAgIGZvciAoVmFsdWUqIGNoaWxkIDogdmFsdWUtPmNoaWxkcmVuKCkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAobV9sb2NrZWQuY29udGFpbnMoY2hpbGQpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gQ2Fubm90RnVzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Ly8gSXQncyBzYWZlIHRvIHNoYXJlIHZhbHVlLCBidXQgc2luY2Ugd2UncmUgc2hhcmluZywgaXQg
bWVhbnMgdGhhdCB3ZSBhcmVuJ3QgbG9ja2luZyBpdC4KKyAgICAgICAgICAgIC8vIElmIHdlIGRv
bid0IGxvY2sgaXQsIHRoZW4gZnVzaW5nIGxvYWRzIGlzIG9mZiBsaW1pdHMgYW5kIGFsbCBvZiB2
YWx1ZSdzIGNoaWxkcmVuIHdpbGwKKyAgICAgICAgICAgIC8vIGhhdmUgdG8gZ28gdGhyb3VnaCB0
aGUgc2hhcmluZyBwYXRoIGFzIHdlbGwuCisgICAgICAgICAgICBjYW5Db21taXRJbnRlcm5hbCA9
IGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gRnVzZTsKKyAgICAgICAg
fTsKKworICAgICAgICBhdXRvIGNvbW1pdEZ1c2lvbiA9IFsmXSAoVmFsdWUqIHZhbHVlLCBGdXNp
b25SZXN1bHQgcmVzdWx0KSB7CisgICAgICAgICAgICBpZiAocmVzdWx0ID09IEZ1c2VBbmRDb21t
aXQpCisgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwodmFsdWUpOworICAgICAgICB9Owor
ICAgICAgICAKICAgICAgICAgLy8gQ2hldyB0aHJvdWdoIGFueSBuZWdhdGlvbnMuIEl0J3Mgbm90
IHN0cmljdGx5IG5lY2Vzc2FyeSBmb3IgdGhpcyB0byBiZSBhIGxvb3AsIGJ1dCB3ZSBsaWtlCiAg
ICAgICAgIC8vIHRvIGZvbGxvdyB0aGUgcnVsZSB0aGF0IHRoZSBpbnN0cnVjdGlvbiBzZWxlY3Rv
ciByZWR1Y2VzIHN0cmVuZ3RoIHdoZW5ldmVyIGl0IGRvZXNuJ3QKICAgICAgICAgLy8gcmVxdWly
ZSBtYWtpbmcgdGhpbmdzIG1vcmUgY29tcGxpY2F0ZWQuCiAgICAgICAgIGZvciAoOzspIHsKLSAg
ICAgICAgICAgIGlmICghY2FuQmVJbnRlcm5hbCh2YWx1ZSkgJiYgdmFsdWUgIT0gbV92YWx1ZSkK
LSAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGJvb2wgc2hvdWxkSW52ZXJ0ID0K
ICAgICAgICAgICAgICAgICAodmFsdWUtPm9wY29kZSgpID09IEJpdFhvciAmJiB2YWx1ZS0+Y2hp
bGQoMSktPmhhc0ludCgpICYmICh2YWx1ZS0+Y2hpbGQoMSktPmFzSW50KCkgJiAxKSAmJiB2YWx1
ZS0+Y2hpbGQoMCktPnJldHVybnNCb29sKCkpCiAgICAgICAgICAgICAgICAgfHwgKHZhbHVlLT5v
cGNvZGUoKSA9PSBFcXVhbCAmJiB2YWx1ZS0+Y2hpbGQoMSktPmlzSW50KDApKTsKICAgICAgICAg
ICAgIGlmICghc2hvdWxkSW52ZXJ0KQogICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICBGdXNpb25SZXN1bHQgZnVzaW9uUmVzdWx0ID0gcHJlcGFyZVRvRnVzZSh2YWx1ZSk7Cisg
ICAgICAgICAgICBpZiAoZnVzaW9uUmVzdWx0ID09IENhbm5vdEZ1c2UpCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjb21taXRGdXNpb24odmFsdWUsIGZ1c2lvblJlc3VsdCk7
CisgICAgICAgICAgICAKICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUtPmNoaWxkKDApOwogICAg
ICAgICAgICAgaW52ZXJ0ZWQgPSAhaW52ZXJ0ZWQ7Ci0gICAgICAgICAgICBjb21taXRJbnRlcm5h
bCh2YWx1ZSk7CiAgICAgICAgIH0KIAogICAgICAgICBhdXRvIGNyZWF0ZVJlbENvbmQgPSBbJl0g
KApAQCAtOTMxLDUxICsxMDU2LDU1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBJbnN0KCk7CiAgICAgICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgICAgIC8vIEZp
cnN0IGhhbmRsZSBjb21wYXJlcyB0aGF0IGludm9sdmUgZmV3ZXIgYml0cyB0aGFuIEIzJ3MgdHlw
ZSBzeXN0ZW0gc3VwcG9ydHMuCi0gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBwcmV0dHkgaW1w
b3J0YW50LiBGb3IgZXhhbXBsZSwgd2Ugd2FudCB0aGlzIHRvIGJlIGEgc2luZ2xlIGluc3RydWN0
aW9uOgotICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgLy8gICAgIEAxID0gTG9h
ZDhTKC4uLikKLSAgICAgICAgICAgICAgICAvLyAgICAgQDIgPSBDb25zdDMyKC4uLikKLSAgICAg
ICAgICAgICAgICAvLyAgICAgQDMgPSBMZXNzVGhhbihAMSwgQDIpCi0gICAgICAgICAgICAgICAg
Ly8gICAgIEJyYW5jaChAMykKKyAgICAgICAgICAgICAgICBBcmc6OldpZHRoIHdpZHRoID0gQXJn
Ojp3aWR0aEZvckIzVHlwZSh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSk7CiAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgaWYgKHJlbENvbmQuaXNTaWduZWRDb25kKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5Q29tcGFyZUxvYWRJbW0oQXJnOjpX
aWR0aDgsIExvYWQ4UywgQXJnOjpTaWduZWQpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGNhbkNv
bW1pdEludGVybmFsKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZpcnN0IGhhbmRsZSBjb21w
YXJlcyB0aGF0IGludm9sdmUgZmV3ZXIgYml0cyB0aGFuIEIzJ3MgdHlwZSBzeXN0ZW0gc3VwcG9y
dHMuCisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgcHJldHR5IGltcG9ydGFudC4gRm9y
IGV4YW1wbGUsIHdlIHdhbnQgdGhpcyB0byBiZSBhIHNpbmdsZQorICAgICAgICAgICAgICAgICAg
ICAvLyBpbnN0cnVjdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAg
ICAgICAgLy8gICAgIEAxID0gTG9hZDhTKC4uLikKKyAgICAgICAgICAgICAgICAgICAgLy8gICAg
IEAyID0gQ29uc3QzMiguLi4pCisgICAgICAgICAgICAgICAgICAgIC8vICAgICBAMyA9IExlc3NU
aGFuKEAxLCBAMikKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIEJyYW5jaChAMykKICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAocmVsQ29uZC5pc1Vuc2lnbmVkQ29uZCgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeUNvbXBhcmVMb2Fk
SW1tKEFyZzo6V2lkdGg4LCBMb2FkOFosIEFyZzo6VW5zaWduZWQpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIGlmIChyZWxDb25kLmlzU2lnbmVkQ29uZCgpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlDb21wYXJlTG9hZEltbShBcmc6OldpZHRoOCwgTG9h
ZDhTLCBBcmc6OlNpZ25lZCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICBpZiAocmVsQ29uZC5pc1Vuc2lnbmVkQ29uZCgpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlDb21wYXJlTG9hZEltbShBcmc6OldpZHRo
OCwgTG9hZDhaLCBBcmc6OlVuc2lnbmVkKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBp
ZiAocmVsQ29uZC5pc1NpZ25lZENvbmQoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoSW5z
dCByZXN1bHQgPSB0cnlDb21wYXJlTG9hZEltbShBcmc6OldpZHRoMTYsIExvYWQxNlMsIEFyZzo6
U2lnbmVkKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAocmVsQ29uZC5pc1NpZ25lZENvbmQo
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5Q29tcGFy
ZUxvYWRJbW0oQXJnOjpXaWR0aDE2LCBMb2FkMTZTLCBBcmc6OlNpZ25lZCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChyZWxDb25kLmlzVW5zaWduZWRD
b25kKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5Q29tcGFy
ZUxvYWRJbW0oQXJnOjpXaWR0aDE2LCBMb2FkMTZaLCBBcmc6OlVuc2lnbmVkKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBpZiAocmVsQ29uZC5pc1Vuc2lnbmVkQ29uZCgpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlDb21wYXJlTG9hZEltbShBcmc6Oldp
ZHRoMTYsIExvYWQxNlosIEFyZzo6VW5zaWduZWQpKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
ICAgIC8vIE5vdyBoYW5kbGUgY29tcGFyZXMgdGhhdCBpbnZvbHZlIGEgbG9hZCBhbmQgYW4gaW1t
ZWRpYXRlLgorICAgICAgICAgICAgICAgICAgICAvLyBOb3cgaGFuZGxlIGNvbXBhcmVzIHRoYXQg
aW52b2x2ZSBhIGxvYWQgYW5kIGFuIGltbWVkaWF0ZS4KIAotICAgICAgICAgICAgICAgIEFyZzo6
V2lkdGggd2lkdGggPSBBcmc6OndpZHRoRm9yQjNUeXBlKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgp
KTsKLSAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlDb21wYXJlTG9hZEltbSh3
aWR0aCwgTG9hZCwgQXJnOjpTaWduZWQpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlDb21wYXJlTG9h
ZEltbSh3aWR0aCwgTG9hZCwgQXJnOjpTaWduZWQpKQorICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKIAotICAgICAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUgY29tcGFyZXMg
dGhhdCBpbnZvbHZlIGEgbG9hZC4gSXQncyBub3Qgb2J2aW91cyB0aGF0IGl0J3MgYmV0dGVyIHRv
Ci0gICAgICAgICAgICAgICAgLy8gaGFuZGxlIHRoaXMgYmVmb3JlIHRoZSBpbW1lZGlhdGUgY2Fz
ZXMgb3Igbm90LiBQcm9iYWJseSBkb2Vzbid0IG1hdHRlci4KKyAgICAgICAgICAgICAgICAgICAg
Ly8gTm93IGhhbmRsZSBjb21wYXJlcyB0aGF0IGludm9sdmUgYSBsb2FkLiBJdCdzIG5vdCBvYnZp
b3VzIHRoYXQgaXQncyBiZXR0ZXIgdG8KKyAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIHRo
aXMgYmVmb3JlIHRoZSBpbW1lZGlhdGUgY2FzZXMgb3Igbm90LiBQcm9iYWJseSBkb2Vzbid0IG1h
dHRlci4KIAotICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeUNvbXBhcmUod2lk
dGgsIGxvYWRQcm9taXNlKGxlZnQpLCB0bXBQcm9taXNlKHJpZ2h0KSkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgY29tbWl0SW50ZXJuYWwobGVmdCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoSW5z
dCByZXN1bHQgPSB0cnlDb21wYXJlKHdpZHRoLCBsb2FkUHJvbWlzZShsZWZ0KSwgdG1wUHJvbWlz
ZShyaWdodCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21taXRJbnRlcm5hbChsZWZ0
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1
bHQgPSB0cnlDb21wYXJlKHdpZHRoLCB0bXBQcm9taXNlKGxlZnQpLCBsb2FkUHJvbWlzZShyaWdo
dCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKHJpZ2h0KTsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKElu
c3QgcmVzdWx0ID0gdHJ5Q29tcGFyZSh3aWR0aCwgdG1wUHJvbWlzZShsZWZ0KSwgbG9hZFByb21p
c2UocmlnaHQpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwocmln
aHQpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIC8vIE5vdyBo
YW5kbGUgY29tcGFyZXMgdGhhdCBpbnZvbHZlIGFuIGltbWVkaWF0ZSBhbmQgYSB0bXAuCkBAIC0x
MDYyLDM5ICsxMTkxLDQxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJ
bnN0KCk7CiAgICAgICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgICAgIC8vIEZpcnN0IGhh
bmRsZSB0ZXN0J3MgdGhhdCBpbnZvbHZlIGZld2VyIGJpdHMgdGhhbiBCMydzIHR5cGUgc3lzdGVt
IHN1cHBvcnRzLgorICAgICAgICAgICAgICAgIGlmIChjYW5Db21taXRJbnRlcm5hbCkgeworICAg
ICAgICAgICAgICAgICAgICAvLyBGaXJzdCBoYW5kbGUgdGVzdCdzIHRoYXQgaW52b2x2ZSBmZXdl
ciBiaXRzIHRoYW4gQjMncyB0eXBlIHN5c3RlbSBzdXBwb3J0cy4KIAotICAgICAgICAgICAgICAg
IGlmIChJbnN0IHJlc3VsdCA9IHRyeVRlc3RMb2FkSW1tKEFyZzo6V2lkdGg4LCBMb2FkOFopKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgICAgICAgICAgICAgaWYg
KEluc3QgcmVzdWx0ID0gdHJ5VGVzdExvYWRJbW0oQXJnOjpXaWR0aDgsIExvYWQ4UykpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICAgICAgICAgICAgICBpZiAoSW5z
dCByZXN1bHQgPSB0cnlUZXN0TG9hZEltbShBcmc6OldpZHRoMTYsIExvYWQxNlopKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgICAgICAgICAgICAgaWYgKEluc3Qg
cmVzdWx0ID0gdHJ5VGVzdExvYWRJbW0oQXJnOjpXaWR0aDE2LCBMb2FkMTZTKSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgICAgICAgICAgICAgIC8vIE5vdyBoYW5k
bGUgdGVzdCdzIHRoYXQgaW52b2x2ZSBhIGxvYWQgYW5kIGFuIGltbWVkaWF0ZS4gTm90ZSB0aGF0
IGltbWVkaWF0ZXMgYXJlCi0gICAgICAgICAgICAgICAgLy8gMzItYml0LCBhbmQgd2Ugd2FudCB6
ZXJvLWV4dGVuc2lvbi4gSGVuY2UsIHRoZSBpbW1lZGlhdGUgZm9ybSBpcyBjb21waWxlZCBhcyBh
Ci0gICAgICAgICAgICAgICAgLy8gMzItYml0IHRlc3QuIE5vdGUgdGhhdCB0aGlzIHNwaXRzIG9u
IHRoZSBncmF2ZSBvZiBpbmZlcmlvciBlbmRpYW5zLCBzdWNoIGFzIHRoZQotICAgICAgICAgICAg
ICAgIC8vIGJpZyBvbmUuCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKElu
c3QgcmVzdWx0ID0gdHJ5VGVzdExvYWRJbW0oQXJnOjpXaWR0aDMyLCBMb2FkKSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgICAgICAgICAgICAgIC8vIE5vdyBoYW5k
bGUgdGVzdCdzIHRoYXQgaW52b2x2ZSBhIGxvYWQuCi0KLSAgICAgICAgICAgICAgICBBcmc6Oldp
ZHRoIHdpZHRoID0gQXJnOjp3aWR0aEZvckIzVHlwZSh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSk7
Ci0gICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5VGVzdCh3aWR0aCwgbG9hZFBy
b21pc2UobGVmdCksIHRtcFByb21pc2UocmlnaHQpKSkgewotICAgICAgICAgICAgICAgICAgICBj
b21taXRJbnRlcm5hbChsZWZ0KTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9
IHRyeVRlc3RMb2FkSW1tKEFyZzo6V2lkdGg4LCBMb2FkOFopKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeVRlc3RMb2FkSW1tKEFyZzo6V2lkdGg4LCBMb2Fk
OFMpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeVRlc3RM
b2FkSW1tKEFyZzo6V2lkdGgxNiwgTG9hZDE2WikpCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
aWYgKEluc3QgcmVzdWx0ID0gdHJ5VGVzdExvYWRJbW0oQXJnOjpXaWR0aDE2LCBMb2FkMTZTKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICAgICAgICAgICAg
ICBpZiAoSW5zdCByZXN1bHQgPSB0cnlUZXN0KHdpZHRoLCB0bXBQcm9taXNlKGxlZnQpLCBsb2Fk
UHJvbWlzZShyaWdodCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKHJp
Z2h0KTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gTm93IGhhbmRsZSB0ZXN0J3MgdGhhdCBpbnZvbHZlIGEgbG9hZCBhbmQgYW4gaW1t
ZWRpYXRlLiBOb3RlIHRoYXQgaW1tZWRpYXRlcworICAgICAgICAgICAgICAgICAgICAvLyBhcmUg
MzItYml0LCBhbmQgd2Ugd2FudCB6ZXJvLWV4dGVuc2lvbi4gSGVuY2UsIHRoZSBpbW1lZGlhdGUg
Zm9ybSBpcyBjb21waWxlZAorICAgICAgICAgICAgICAgICAgICAvLyBhcyBhIDMyLWJpdCB0ZXN0
LiBOb3RlIHRoYXQgdGhpcyBzcGl0cyBvbiB0aGUgZ3JhdmUgb2YgaW5mZXJpb3IgZW5kaWFucywg
c3VjaAorICAgICAgICAgICAgICAgICAgICAvLyBhcyB0aGUgYmlnIG9uZS4KKyAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeVRlc3RM
b2FkSW1tKEFyZzo6V2lkdGgzMiwgTG9hZCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8g
Tm93IGhhbmRsZSB0ZXN0J3MgdGhhdCBpbnZvbHZlIGEgbG9hZC4KKyAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgIEFyZzo6V2lkdGggd2lkdGggPSBBcmc6OndpZHRoRm9y
QjNUeXBlKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KEluc3QgcmVzdWx0ID0gdHJ5VGVzdCh3aWR0aCwgbG9hZFByb21pc2UobGVmdCksIHRtcFByb21p
c2UocmlnaHQpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwobGVm
dCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAo
SW5zdCByZXN1bHQgPSB0cnlUZXN0KHdpZHRoLCB0bXBQcm9taXNlKGxlZnQpLCBsb2FkUHJvbWlz
ZShyaWdodCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21taXRJbnRlcm5hbChyaWdo
dCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgLy8gTm93IGhh
bmRsZSB0ZXN0J3MgdGhhdCBpbnZvbHZlIGFuIGltbWVkaWF0ZSBhbmQgYSB0bXAuCkBAIC0xMTE3
LDkgKzEyNDgsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgfQogICAgICAgICB9OwogCi0gICAg
ICAgIGlmIChjYW5CZUludGVybmFsKHZhbHVlKSB8fCB2YWx1ZSA9PSBtX3ZhbHVlKSB7CisgICAg
ICAgIGlmIChGdXNpb25SZXN1bHQgZnVzaW9uUmVzdWx0ID0gcHJlcGFyZVRvRnVzZSh2YWx1ZSkp
IHsKICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IGF0dGVtcHRGdXNlZCgpKSB7Ci0gICAg
ICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwodmFsdWUpOworICAgICAgICAgICAgICAgIGNvbW1p
dEZ1c2lvbih2YWx1ZSwgZnVzaW9uUmVzdWx0KTsKICAgICAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xNDYzLDYgKzE1OTQsMjEgQEAgcHJp
dmF0ZToKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgQml0QW5kOiB7CisgICAgICAgICAgICBp
ZiAobV92YWx1ZS0+Y2hpbGQoMSktPmlzSW50KDB4ZmYpKSB7CisgICAgICAgICAgICAgICAgYXBw
ZW5kVW5PcDxaZXJvRXh0ZW5kOFRvMzIsIFplcm9FeHRlbmQ4VG8zMj4obV92YWx1ZS0+Y2hpbGQo
MCkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5pc0ludCgweGZmZmYpKSB7Cisg
ICAgICAgICAgICAgICAgYXBwZW5kVW5PcDxaZXJvRXh0ZW5kMTZUbzMyLCBaZXJvRXh0ZW5kMTZU
bzMyPihtX3ZhbHVlLT5jaGlsZCgwKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmlzSW50KDB4ZmZm
ZmZmZmYpKSB7CisgICAgICAgICAgICAgICAgYXBwZW5kVW5PcDxNb3ZlMzIsIE1vdmUzMj4obV92
YWx1ZS0+Y2hpbGQoMCkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAogICAgICAgICAgICAgYXBwZW5kQmluT3A8QW5kMzIsIEFuZDY0LCBBbmRE
b3VibGUsIEFuZEZsb2F0LCBDb21tdXRhdGl2ZT4oCiAgICAgICAgICAgICAgICAgbV92YWx1ZS0+
Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxkKDEpKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE1
NzIsMTggKzE3MTgsMzEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogCisgICAgICAgIGNhc2UgU0V4dDg6IHsKKyAgICAgICAgICAgIGFwcGVuZFVuT3A8U2lnbkV4
dGVuZDhUbzMyLCBBaXI6Ok9vcHM+KG1fdmFsdWUtPmNoaWxkKDApKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgU0V4dDE2OiB7CisgICAgICAgICAgICBh
cHBlbmRVbk9wPFNpZ25FeHRlbmQxNlRvMzIsIEFpcjo6T29wcz4obV92YWx1ZS0+Y2hpbGQoMCkp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKICAgICAgICAgY2FzZSBaRXh0MzI6
IHsKICAgICAgICAgICAgIGlmIChoaWdoQml0c0FyZVplcm8obV92YWx1ZS0+Y2hpbGQoMCkpKSB7
CiAgICAgICAgICAgICAgICAgQVNTRVJUKHRtcChtX3ZhbHVlLT5jaGlsZCgwKSkgPT0gdG1wKG1f
dmFsdWUpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIGFwcGVuZChNb3ZlMzIsIHRtcChtX3ZhbHVlLT5jaGlsZCgwKSksIHRtcChtX3ZhbHVl
KSk7CisgICAgICAgICAgICBhcHBlbmRVbk9wPE1vdmUzMiwgQWlyOjpPb3BzPihtX3ZhbHVlLT5j
aGlsZCgwKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBjYXNl
IFNFeHQzMjogewotICAgICAgICAgICAgYXBwZW5kKFNpZ25FeHRlbmQzMlRvUHRyLCB0bXAobV92
YWx1ZS0+Y2hpbGQoMCkpLCB0bXAobV92YWx1ZSkpOworICAgICAgICAgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBoYXZlIHN1cHBvcnQgZm9yIG1vdnNicS9tb3Zzd3EKKyAgICAgICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTIyMzIKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgYXBwZW5kVW5PcDxTaWduRXh0ZW5kMzJUb1B0ciwgQWlyOjpPb3BzPiht
X3ZhbHVlLT5jaGlsZCgwKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAkocmV2
aXNpb24gMTk0MDEyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5n
dGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjcsNiArMzY3LDMyIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRBbmQoU0V4dDgodmFs
dWUpLCBtYXNrKSB3aGVyZSAobWFzayAmIDB4ZmZmZmZmMDApID09IDAKKyAgICAgICAgICAgIC8v
IEludG8gdGhpczogQml0QW5kKHZhbHVlLCBtYXNrKQorICAgICAgICAgICAgaWYgKG1fdmFsdWUt
PmNoaWxkKDApLT5vcGNvZGUoKSA9PSBTRXh0OCAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+aGFzSW50
MzIoKQorICAgICAgICAgICAgICAgICYmICEobV92YWx1ZS0+Y2hpbGQoMSktPmFzSW50MzIoKSAm
IDB4ZmZmZmZmMDApKSB7CisgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCkgPSBtX3Zh
bHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7CisgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1
ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRBbmQoU0V4
dDE2KHZhbHVlKSwgbWFzaykgd2hlcmUgKG1hc2sgJiAweGZmZmYwMDAwKSA9PSAwCisgICAgICAg
ICAgICAvLyBJbnRvIHRoaXM6IEJpdEFuZCh2YWx1ZSwgbWFzaykKKyAgICAgICAgICAgIGlmICht
X3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gU0V4dDE2ICYmIG1fdmFsdWUtPmNoaWxkKDEp
LT5oYXNJbnQzMigpCisgICAgICAgICAgICAgICAgJiYgIShtX3ZhbHVlLT5jaGlsZCgxKS0+YXNJ
bnQzMigpICYgMHhmZmZmMDAwMCkpIHsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgw
KSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKKyAgICAgICAgICAgICAgICBtX2NoYW5n
ZWQgPSB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJp
dEFuZChTRXh0MzIodmFsdWUpLCBtYXNrKSB3aGVyZSAobWFzayAmICkgPT0gMAorICAgICAgICAg
ICAgLy8gSW50byB0aGlzOiBCaXRBbmQoWkV4dDMyKHZhbHVlKSwgbWFzaykKKyAgICAgICAgICAg
IGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gU0V4dDMyICYmIG1fdmFsdWUtPmNo
aWxkKDEpLT5oYXNJbnQzMigpCisgICAgICAgICAgICAgICAgJiYgIShtX3ZhbHVlLT5jaGlsZCgx
KS0+YXNJbnQzMigpICYgMHhmZmZmZmZmZjAwMDAwMDAwbGx1KSkgeworICAgICAgICAgICAgICAg
IG1fdmFsdWUtPmNoaWxkKDApID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPigKKyAgICAg
ICAgICAgICAgICAgICAgbV9pbmRleCwgWkV4dDMyLCBtX3ZhbHVlLT5vcmlnaW4oKSwKKyAgICAg
ICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGls
ZCgwKS0+Y2hpbGQoMSkpOworICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEJpdE9yOgpAQCAt
NTY0LDYgKzU5MCw5NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJl
YWs7CiAKKyAgICAgICAgY2FzZSBTRXh0ODoKKyAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU0V4
dDgoY29uc3RhbnQpCisgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IHN0YXRpY19jYXN0PGludDhf
dD4oY29uc3RhbnQpCisgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPmhhc0ludDMy
KCkpIHsKKyAgICAgICAgICAgICAgICBpbnQzMl90IHJlc3VsdCA9IHN0YXRpY19jYXN0PGludDhf
dD4obV92YWx1ZS0+Y2hpbGQoMCktPmFzSW50MzIoKSk7CisgICAgICAgICAgICAgICAgcmVwbGFj
ZVdpdGhOZXdWYWx1ZShtX3Byb2MuYWRkSW50Q29uc3RhbnQobV92YWx1ZSwgcmVzdWx0KSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFR1
cm4gdGhpczogU0V4dDgoU0V4dDgodmFsdWUpKQorICAgICAgICAgICAgLy8gICBvciB0aGlzOiBT
RXh0OChTRXh0MTYodmFsdWUpKQorICAgICAgICAgICAgLy8gSW50byB0aGlzOiBTRXh0OCh2YWx1
ZSkKKyAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gU0V4dDgg
fHwgbV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IFNFeHQxNikgeworICAgICAgICAgICAg
ICAgIG1fdmFsdWUtPmNoaWxkKDApID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApOworICAg
ICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gQml0QW5kICYmIG1fdmFsdWUt
PmNoaWxkKDApLT5jaGlsZCgxKS0+aGFzSW50MzIoKSkgeworICAgICAgICAgICAgICAgIFZhbHVl
KiBpbnB1dCA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKKyAgICAgICAgICAgICAgICBp
bnQzMl90IG1hc2sgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmFzSW50MzIoKTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNFeHQ4KEJpdEFu
ZChpbnB1dCwgbWFzaykpIHdoZXJlIChtYXNrICYgMHhmZikgPT0gMHhmZgorICAgICAgICAgICAg
ICAgIC8vIEludG8gdGhpczogU0V4dDgoaW5wdXQpCisgICAgICAgICAgICAgICAgaWYgKChtYXNr
ICYgMHhmZikgPT0gMHhmZikgeworICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgw
KSA9IGlucHV0OworICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBTRXh0OChCaXRBbmQoaW5wdXQsIG1hc2sp
KSB3aGVyZSAobWFzayAmIDB4ODApID09IDAKKyAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6
IEJpdEFuZChpbnB1dCwgY29uc3QgJiAweDdmKQorICAgICAgICAgICAgICAgIGlmICghKG1hc2sg
JiAweDgwKSkgeworICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAorICAg
ICAgICAgICAgICAgICAgICAgICAgbV9wcm9jLmFkZDxWYWx1ZT4oCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQml0QW5kLCBtX3ZhbHVlLT5vcmlnaW4oKSwgaW5wdXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0MzJWYWx1ZT4oCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIG1fdmFsdWUtPm9yaWdpbigp
LCBtYXNrICYgMHg3ZikpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2Fz
ZSBTRXh0MTY6CisgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNFeHQxNihjb25zdGFudCkKKyAg
ICAgICAgICAgIC8vIEludG8gdGhpczogc3RhdGljX2Nhc3Q8aW50MTZfdD4oY29uc3RhbnQpCisg
ICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPmhhc0ludDMyKCkpIHsKKyAgICAgICAg
ICAgICAgICBpbnQzMl90IHJlc3VsdCA9IHN0YXRpY19jYXN0PGludDE2X3Q+KG1fdmFsdWUtPmNo
aWxkKDApLT5hc0ludDMyKCkpOworICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUo
bV9wcm9jLmFkZEludENvbnN0YW50KG1fdmFsdWUsIHJlc3VsdCkpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNFeHQx
NihTRXh0MTYodmFsdWUpKQorICAgICAgICAgICAgLy8gSW50byB0aGlzOiBTRXh0MTYodmFsdWUp
CisgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IFNFeHQxNikg
eworICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApID0gbV92YWx1ZS0+Y2hpbGQoMCkt
PmNoaWxkKDApOworICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU0V4dDE2KFNFeHQ4KHZhbHVlKSkKKyAg
ICAgICAgICAgIC8vIEludG8gdGhpczogU0V4dDgodmFsdWUpCisgICAgICAgICAgICBpZiAobV92
YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IFNFeHQ4KSB7CisgICAgICAgICAgICAgICAgbV92
YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCkpOwor
ICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bj
b2RlKCkgPT0gQml0QW5kICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+aGFzSW50MzIo
KSkgeworICAgICAgICAgICAgICAgIFZhbHVlKiBpbnB1dCA9IG1fdmFsdWUtPmNoaWxkKDApLT5j
aGlsZCgwKTsKKyAgICAgICAgICAgICAgICBpbnQzMl90IG1hc2sgPSBtX3ZhbHVlLT5jaGlsZCgw
KS0+Y2hpbGQoMSktPmFzSW50MzIoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAvLyBUdXJuIHRoaXM6IFNFeHQxNihCaXRBbmQoaW5wdXQsIG1hc2spKSB3aGVyZSAobWFzayAm
IDB4ZmZmZikgPT0gMHhmZmZmCisgICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBTRXh0MTYo
aW5wdXQpCisgICAgICAgICAgICAgICAgaWYgKChtYXNrICYgMHhmZmZmKSA9PSAweGZmZmYpIHsK
KyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCkgPSBpbnB1dDsKKyAgICAgICAg
ICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8v
IFR1cm4gdGhpczogU0V4dDE2KEJpdEFuZChpbnB1dCwgbWFzaykpIHdoZXJlIChtYXNrICYgMHg4
MDAwKSA9PSAwCisgICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBCaXRBbmQoaW5wdXQsIGNv
bnN0ICYgMHg3ZmZmKQorICAgICAgICAgICAgICAgIGlmICghKG1hc2sgJiAweDgwMDApKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoCisgICAgICAgICAgICAgICAg
ICAgICAgICBtX3Byb2MuYWRkPFZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBC
aXRBbmQsIG1fdmFsdWUtPm9yaWdpbigpLCBpbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2luc2VydGlvblNldC5pbnNlcnQ8Q29uc3QzMlZhbHVlPigKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9pbmRleCwgbV92YWx1ZS0+b3JpZ2luKCksIG1hc2sgJiAweDdm
ZmYpKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgIGNhc2UgU0V4dDMyOgog
ICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBTRXh0MzIoY29uc3RhbnQpCiAgICAgICAgICAgICAv
LyBJbnRvIHRoaXM6IHN0YXRpY19jYXN0PGludDY0X3Q+KGNvbnN0YW50KQpAQCAtNTcxLDYgKzY4
OCwxNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUobV9w
cm9jLmFkZEludENvbnN0YW50KG1fdmFsdWUsIG1fdmFsdWUtPmNoaWxkKDApLT5hc0ludDMyKCkp
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Ly8gVHVybiB0aGlzOiBTRXh0MzIoQml0QW5kKGlucHV0LCBtYXNrKSkgd2hlcmUgKG1hc2sgJiAw
eDgwMDAwMDAwKSA9PSAwCisgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFpFeHQzMihCaXRBbmQo
aW5wdXQsIG1hc2spKQorICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUo
KSA9PSBCaXRBbmQgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5oYXNJbnQzMigpCisg
ICAgICAgICAgICAgICAgJiYgIShtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmFzSW50MzIo
KSAmIDB4ODAwMDAwMDApKSB7CisgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZSgK
KyAgICAgICAgICAgICAgICAgICAgbV9wcm9jLmFkZDxWYWx1ZT4oCisgICAgICAgICAgICAgICAg
ICAgICAgICBaRXh0MzIsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgwKSkpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7
CiAKICAgICAgICAgY2FzZSBaRXh0MzI6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
dGVzdGIzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIz
LmNwcAkocmV2aXNpb24gMTk0MDEyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3Ri
My5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDExIEBAIHVzaW5nIG5hbWVzcGFjZSBK
U0M6OkIzOwogbmFtZXNwYWNlIHsKIAogLy8gTm90aGluZyBmYW5jeSBmb3Igbm93OyB3ZSBqdXN0
IHVzZSB0aGUgZXhpc3RpbmcgV1RGIGFzc2VydGlvbiBtYWNoaW5lcnkuCi0jZGVmaW5lIENIRUNL
KHgpIFJFTEVBU0VfQVNTRVJUKHgpCisjZGVmaW5lIENIRUNLKHgpIGRvIHsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmICghISh4
KSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgIFdURlJlcG9ydEFzc2VydGlvbkZhaWx1cmUoX19G
SUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAjeCk7IFwKKyAgICB9IHdoaWxl
IChmYWxzZSkKIAogVk0qIHZtOwogCkBAIC01NjkzLDYgKzU2OTcsMTYzIEBAIHZvaWQgdGVzdENo
ZWNrTWVnYUNvbWJvKCkKICAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgJnZhbHVlIC0gMiwg
MSkgPT0gNDIpOwogfQogCit2b2lkIHRlc3RDaGVja1R3b01lZ2FDb21ib3MoKQoreworICAgIFBy
b2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7Cisg
ICAgVmFsdWUqIGJhc2UgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgVmFsdWUqIGluZGV4ID0gcm9v
dC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgcHJvYywgWkV4dDMyLCBPcmlnaW4oKSwKKyAg
ICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFRydW5jLCBP
cmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSkpOworCisgICAgVmFsdWUqIHB0
ciA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgIHByb2MsIEFkZCwgT3JpZ2luKCks
IGJhc2UsCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9j
LCBTaGwsIE9yaWdpbigpLCBpbmRleCwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25z
dDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAxKSkpOworCisgICAgVmFsdWUqIHByZWRpY2F0ZSA9
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgIHByb2MsIExlc3NUaGFuLCBPcmlnaW4o
KSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBMb2FkOFMsIE9y
aWdpbigpLCBwdHIpLAorICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgNDIpKTsKKyAgICAKKyAgICBDaGVja1ZhbHVlKiBjaGVjayA9IHJvb3QtPmFw
cGVuZE5ldzxDaGVja1ZhbHVlPihwcm9jLCBDaGVjaywgT3JpZ2luKCksIHByZWRpY2F0ZSk7Cisg
ICAgY2hlY2stPnNldEdlbmVyYXRvcigKKyAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgIEFs
bG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAg
ICAgIENIRUNLKHBhcmFtcy5zaXplKCkgPT0gMSk7CisKKyAgICAgICAgICAgIC8vIFRoaXMgc2hv
dWxkIGFsd2F5cyB3b3JrIGJlY2F1c2UgYSBmdW5jdGlvbiB0aGlzIHNpbXBsZSBzaG91bGQgbmV2
ZXIgaGF2ZSBjYWxsZWUKKyAgICAgICAgICAgIC8vIHNhdmVzLgorICAgICAgICAgICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoNDIpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
Uik7CisgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKKyAgICAgICAgICAg
IGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgQ2hlY2tWYWx1ZSogY2hlY2syID0gcm9vdC0+
YXBwZW5kTmV3PENoZWNrVmFsdWU+KHByb2MsIENoZWNrLCBPcmlnaW4oKSwgcHJlZGljYXRlKTsK
KyAgICBjaGVjazItPnNldEdlbmVyYXRvcigKKyAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAg
IEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAg
ICAgICAgIENIRUNLKHBhcmFtcy5zaXplKCkgPT0gMSk7CisKKyAgICAgICAgICAgIC8vIFRoaXMg
c2hvdWxkIGFsd2F5cyB3b3JrIGJlY2F1c2UgYSBmdW5jdGlvbiB0aGlzIHNpbXBsZSBzaG91bGQg
bmV2ZXIgaGF2ZSBjYWxsZWUKKyAgICAgICAgICAgIC8vIHNhdmVzLgorICAgICAgICAgICAgaml0
Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoNDMpLCBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUik7CisgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKKyAgICAgICAg
ICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xW
YWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksIHJvb3QtPmFwcGVuZE5ldzxD
b25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSk7CisKKyAgICBhdXRvIGNvZGUgPSBjb21w
aWxlKHByb2MpOworCisgICAgaW50OF90IHZhbHVlOworICAgIHZhbHVlID0gNDI7CisgICAgQ0hF
Q0soaW52b2tlPGludD4oKmNvZGUsICZ2YWx1ZSAtIDIsIDEpID09IDApOworICAgIHZhbHVlID0g
MTI3OworICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAmdmFsdWUgLSAyLCAxKSA9PSAwKTsK
KyAgICB2YWx1ZSA9IDQxOworICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAmdmFsdWUgLSAy
LCAxKSA9PSA0Mik7CisgICAgdmFsdWUgPSAwOworICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2Rl
LCAmdmFsdWUgLSAyLCAxKSA9PSA0Mik7CisgICAgdmFsdWUgPSAtMTsKKyAgICBDSEVDSyhpbnZv
a2U8aW50PigqY29kZSwgJnZhbHVlIC0gMiwgMSkgPT0gNDIpOworfQorCit2b2lkIHRlc3RDaGVj
a1R3b05vblJlZHVuZGFudE1lZ2FDb21ib3MoKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAg
IAorICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9j
ayogdGhlbkNhc2UgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogZWxzZUNhc2Ug
PSBwcm9jLmFkZEJsb2NrKCk7CisgICAgCisgICAgVmFsdWUqIGJhc2UgPSByb290LT5hcHBlbmRO
ZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BS
MCk7CisgICAgVmFsdWUqIGluZGV4ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAg
cHJvYywgWkV4dDMyLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigK
KyAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIxKSkpOworICAgIFZhbHVlKiBicmFuY2hQcmVkaWNhdGUgPSByb290LT5hcHBlbmROZXc8
VmFsdWU+KAorICAgICAgICBwcm9jLCBCaXRBbmQsIE9yaWdpbigpLAorICAgICAgICByb290LT5h
cHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAg
ICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigp
LCBHUFJJbmZvOjphcmd1bWVudEdQUjIpKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0
MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDB4ZmYpKTsKKworICAgIFZhbHVlKiBwdHIgPSByb290
LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICBwcm9jLCBBZGQsIE9yaWdpbigpLCBiYXNlLAor
ICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgU2hsLCBP
cmlnaW4oKSwgaW5kZXgsCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgMSkpKTsKKworICAgIFZhbHVlKiBjaGVja1ByZWRpY2F0ZSA9IHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgIHByb2MsIExlc3NUaGFuLCBPcmlnaW4oKSwK
KyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBMb2FkOFMsIE9yaWdp
bigpLCBwdHIpLAorICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgNDIpKTsKKworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAg
ICAgICBwcm9jLCBCcmFuY2gsIE9yaWdpbigpLCBicmFuY2hQcmVkaWNhdGUsCisgICAgICAgIEZy
ZXF1ZW50ZWRCbG9jayh0aGVuQ2FzZSksIEZyZXF1ZW50ZWRCbG9jayhlbHNlQ2FzZSkpOworICAg
IAorICAgIENoZWNrVmFsdWUqIGNoZWNrID0gdGhlbkNhc2UtPmFwcGVuZE5ldzxDaGVja1ZhbHVl
Pihwcm9jLCBDaGVjaywgT3JpZ2luKCksIGNoZWNrUHJlZGljYXRlKTsKKyAgICBjaGVjay0+c2V0
R2VuZXJhdG9yKAorICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0
Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgQ0hFQ0socGFy
YW1zLnNpemUoKSA9PSAxKTsKKworICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgYWx3YXlzIHdv
cmsgYmVjYXVzZSBhIGZ1bmN0aW9uIHRoaXMgc2ltcGxlIHNob3VsZCBuZXZlciBoYXZlIGNhbGxl
ZQorICAgICAgICAgICAgLy8gc2F2ZXMuCisgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMig0MiksIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAg
ICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOworICAgICAgICAgICAgaml0LnJldCgpOwor
ICAgICAgICB9KTsKKyAgICB0aGVuQ2FzZS0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAg
ICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksIHRoZW5DYXNlLT5hcHBlbmROZXc8Q29uc3QzMlZh
bHVlPihwcm9jLCBPcmlnaW4oKSwgNDMpKTsKKworICAgIENoZWNrVmFsdWUqIGNoZWNrMiA9IGVs
c2VDYXNlLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4ocHJvYywgQ2hlY2ssIE9yaWdpbigpLCBjaGVj
a1ByZWRpY2F0ZSk7CisgICAgY2hlY2syLT5zZXRHZW5lcmF0b3IoCisgICAgICAgIFsmXSAoQ0Nh
bGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7
CisgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNo
KGppdCk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuc2l6ZSgpID09IDEpOworCisgICAgICAg
ICAgICAvLyBUaGlzIHNob3VsZCBhbHdheXMgd29yayBiZWNhdXNlIGEgZnVuY3Rpb24gdGhpcyBz
aW1wbGUgc2hvdWxkIG5ldmVyIGhhdmUgY2FsbGVlCisgICAgICAgICAgICAvLyBzYXZlcy4KKyAg
ICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDQ0KSwgR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3Vl
KCk7CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgIGVsc2VDYXNlLT5h
cHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwg
ZWxzZUNhc2UtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCA0NSkpOwor
CisgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKworICAgIGludDhfdCB2YWx1ZTsKKwor
ICAgIHZhbHVlID0gNDI7CisgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsICZ2YWx1ZSAtIDIs
IDEsIHRydWUpID09IDQzKTsKKyAgICB2YWx1ZSA9IDEyNzsKKyAgICBDSEVDSyhpbnZva2U8aW50
PigqY29kZSwgJnZhbHVlIC0gMiwgMSwgdHJ1ZSkgPT0gNDMpOworICAgIHZhbHVlID0gNDE7Cisg
ICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsICZ2YWx1ZSAtIDIsIDEsIHRydWUpID09IDQyKTsK
KyAgICB2YWx1ZSA9IDA7CisgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsICZ2YWx1ZSAtIDIs
IDEsIHRydWUpID09IDQyKTsKKyAgICB2YWx1ZSA9IC0xOworICAgIENIRUNLKGludm9rZTxpbnQ+
KCpjb2RlLCAmdmFsdWUgLSAyLCAxLCB0cnVlKSA9PSA0Mik7CisKKyAgICB2YWx1ZSA9IDQyOwor
ICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAmdmFsdWUgLSAyLCAxLCBmYWxzZSkgPT0gNDUp
OworICAgIHZhbHVlID0gMTI3OworICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAmdmFsdWUg
LSAyLCAxLCBmYWxzZSkgPT0gNDUpOworICAgIHZhbHVlID0gNDE7CisgICAgQ0hFQ0soaW52b2tl
PGludD4oKmNvZGUsICZ2YWx1ZSAtIDIsIDEsIGZhbHNlKSA9PSA0NCk7CisgICAgdmFsdWUgPSAw
OworICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAmdmFsdWUgLSAyLCAxLCBmYWxzZSkgPT0g
NDQpOworICAgIHZhbHVlID0gLTE7CisgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsICZ2YWx1
ZSAtIDIsIDEsIGZhbHNlKSA9PSA0NCk7Cit9CisKIHZvaWQgdGVzdENoZWNrQWRkSW1tKCkKIHsK
ICAgICBQcm9jZWR1cmUgcHJvYzsKQEAgLTgzNDYsNiArODUwNyw4IEBAIHZvaWQgcnVuKGNvbnN0
IGNoYXIqIGZpbHRlcikKICAgICBSVU4odGVzdFNpbXBsZUNoZWNrKCkpOwogICAgIFJVTih0ZXN0
Q2hlY2tMZXNzVGhhbigpKTsKICAgICBSVU4odGVzdENoZWNrTWVnYUNvbWJvKCkpOworICAgIFJV
Tih0ZXN0Q2hlY2tUd29NZWdhQ29tYm9zKCkpOworICAgIFJVTih0ZXN0Q2hlY2tUd29Ob25SZWR1
bmRhbnRNZWdhQ29tYm9zKCkpOwogICAgIFJVTih0ZXN0Q2hlY2tBZGRJbW0oKSk7CiAgICAgUlVO
KHRlc3RDaGVja0FkZEltbUNvbW11dGUoKSk7CiAgICAgUlVOKHRlc3RDaGVja0FkZEltbVNvbWVS
ZWdpc3RlcigpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2Rl
Lm9wY29kZXMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJP
cGNvZGUub3Bjb2RlcwkocmV2aXNpb24gMTk0MDEyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwkod29ya2luZyBjb3B5KQpAQCAtMjg4LDYgKzI4OCwy
NiBAQCBNb3ZlMzIgVTpHLCBEOkcKIFNpZ25FeHRlbmQzMlRvUHRyIFU6RywgRDpHCiAgICAgVG1w
LCBUbXAKIAorWmVyb0V4dGVuZDhUbzMyIFU6RywgRDpHCisgICAgVG1wLCBUbXAKKyAgICBBZGRy
LCBUbXAgYXMgbG9hZDgKKyAgICBJbmRleCwgVG1wIGFzIGxvYWQ4CisKK1NpZ25FeHRlbmQ4VG8z
MiBVOkcsIEQ6RworICAgIFRtcCwgVG1wCisgICAgQWRkciwgVG1wIGFzIGxvYWQ4U2lnbmVkRXh0
ZW5kVG8zMgorICAgIEluZGV4LCBUbXAgYXMgbG9hZDhTaWduZWRFeHRlbmRUbzMyCisKK1plcm9F
eHRlbmQxNlRvMzIgVTpHLCBEOkcKKyAgICBUbXAsIFRtcAorICAgIEFkZHIsIFRtcCBhcyBsb2Fk
MTYKKyAgICBJbmRleCwgVG1wIGFzIGxvYWQxNgorCitTaWduRXh0ZW5kMTZUbzMyIFU6RywgRDpH
CisgICAgVG1wLCBUbXAKKyAgICBBZGRyLCBUbXAgYXMgbG9hZDE2U2lnbmVkRXh0ZW5kVG8zMgor
ICAgIEluZGV4LCBUbXAgYXMgbG9hZDE2U2lnbmVkRXh0ZW5kVG8zMgorCiBNb3ZlRmxvYXQgVTpG
LCBEOkYKICAgICBUbXAsIFRtcCBhcyBtb3ZlRG91YmxlCiAgICAgQWRkciwgVG1wIGFzIGxvYWRG
bG9hdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCShyZXZpc2lvbiAx
OTQwMTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
IC8vIFdlIGFyZSBpbiB0aGUgbWlkZGxlIG9mIGFuIGV4cGVyaW1lbnRhbCB0cmFuc2l0aW9uIGZy
b20gTExWTSB0byBCMyBhcyB0aGUgYmFja2VuZCBmb3IgdGhlIEZUTC4gV2UgZG9uJ3QKIC8vIHll
dCBrbm93IGhvdyBpdCB3aWxsIHR1cm4gb3V0LiBGb3Igbm93LCB0aGlzIGZsYWcgd2lsbCBjb250
cm9sIHdoZXRoZXIgRlRMIHVzZXMgQjMuIFJlbWVtYmVyIHRvIHNldCB0aGlzCiAvLyB0byAwIGJl
Zm9yZSBjb21taXR0aW5nIQotI2RlZmluZSBGVExfVVNFU19CMyAwCisjZGVmaW5lIEZUTF9VU0VT
X0IzIDEKIAogc3RydWN0IE5vZGU7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>267278</attachid>
            <date>2015-12-13 19:38:51 -0800</date>
            <delta_ts>2015-12-13 20:26:34 -0800</delta_ts>
            <desc>tests work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>48658</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk0MDEyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBA
CisyMDE1LTEyLTEyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QjMtPkFpciBjb21wYXJlLWJyYW5jaCBmdXNpb24gc2hvdWxkIGZ1c2UgZXZlbiBpZiB0aGUgcmVz
dWx0IG9mIHRoZSBjb21wYXJpc29uIGlzIHVzZWQgbW9yZSB0aGFuIG9uY2UKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjE5OAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElmIHdlIGhhdmUgYSBjb21wYXJp
c29uIG9wZXJhdGlvbiB0aGF0IGlzIGJyYW5jaGVkIG9uIGZyb20gbXVsdGlwbGUgcGxhY2VzLCB0
aGVuIHdlIHdlcmUKKyAgICAgICAgcHJldmlvdXNseSBleGVjdXRpbmcgdGhlIGNvbXBhcmlzb24g
dG8gZ2V0IGEgYm9vbGVhbiByZXN1bHQgaW4gYSByZWdpc3RlciBhbmQgdGhlbiB3ZSB3ZXJlCisg
ICAgICAgIHRlc3RpbmcvYnJhbmNoaW5nIG9uIHRoYXQgcmVnaXN0ZXIgaW4gbXVsdGlwbGUgcGxh
Y2VzLiBUaGlzIGlzIGFjdHVhbGx5IGxlc3MgZWZmaWNpZW50IHRoYW4KKyAgICAgICAganVzdCBm
dXNpbmcgdGhlIGNvbXBhcmUvYnJhbmNoIG11bHRpcGxlIHRpbWVzLCBldmVuIHRob3VnaCB0aGlz
IG1lYW5zIHRoYXQgdGhlIGNvbXBhcmlzb24KKyAgICAgICAgZXhlY3V0ZXMgbXVsdGlwbGUgdGlt
ZXMuIFRoaXMgd291bGQgb25seSBiZSBiYWQgaWYgdGhlIGNvbXBhcmlzb24gZnVzZWQgbG9hZHMg
bXVsdGlwbGUgdGltZXMsCisgICAgICAgIHNpbmNlIGR1cGxpY2F0aW5nIGxvYWRzIGlzIGJvdGgg
d3JvbmcgYW5kIGluZWZmaWNpZW50LiBTbywgdGhpcyBhZGRzIHRoZSBub3Rpb24gb2Ygc2hhcmlu
ZyB0bworICAgICAgICBjb21wYXJlL2JyYW5jaCBmdXNpb24uIElmIGEgY29tcGFyZSBpcyBzaGFy
ZWQgYnkgbXVsdGlwbGUgYnJhbmNoZXMsIHRoZW4gd2UgcmVmdXNlIHRvIGZ1c2UKKyAgICAgICAg
dGhlIGxvYWQuCisKKyAgICAgICAgVG8gd3JpdGUgdGhlIHRlc3QsIEkgbmVlZGVkIHRvIHplcm8t
ZXh0ZW5kIDggdG8gMzIuIEluIHRoZSBwcm9jZXNzIG9mIHRoaW5raW5nIGFib3V0IGhvdyB0bwor
ICAgICAgICBkbyB0aGlzLCBJIHJlYWxpemVkIHRoYXQgd2UgbmVlZGVkIGxvd2VyaW5ncyBmb3Ig
U0V4dDgvU0V4dDE2LiBBbmQgSSByZWFsaXplZCB0aGF0IHRoZQorICAgICAgICBsb3dlcmluZ3Mg
Zm9yIHRoZSBvdGhlciBleHRlbnNpb24gb3BlcmF0aW9ucyB3ZXJlIG5vdCBmdWxseSBmbGVzaGVk
IG91dDsgZm9yIGV4YW1wbGUgdGhleQorICAgICAgICB3ZXJlIGluY2FwYWJsZSBvZiBsb2FkIGZ1
c2lvbi4gVGhpcyBwYXRjaCBmaXhlcyB0aGlzIGFuZCBhbHNvIGFkZHMgc29tZSBzbWFydCBzdHJl
bmd0aAorICAgICAgICByZWR1Y3Rpb25zIGZvciBCaXRBbmQoQHgsIDB4ZmYvMHhmZmZmLzB4ZmZm
ZmZmZmYpIC0gYWxsIG9mIHdoaWNoIHNob3VsZCBiZSBsb3dlcmVkIHRvIGEgemVybworICAgICAg
ICBleHRlbnNpb24uCisKKyAgICAgICAgVGhpcyBpcyBhIGJpZyB3aW4gb24gYXNtLmpzIGNvZGUu
IEl0J3Mgbm90IGVub3VnaCB0byBicmlkZ2UgdGhlIGdhcCB0byBMTFZNLCBidXQgaXQncyBhIGh1
Z2UKKyAgICAgICAgc3RlcCBpbiB0aGF0IGRpcmVjdGlvbi4KKworICAgICAgICAqIGFzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
clg4NkNvbW1vbjo6bG9hZDhTaWduZWRFeHRlbmRUbzMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9B
c3NlbWJsZXJYODZDb21tb246Onplcm9FeHRlbmQ4VG8zMik6CisgICAgICAgIChKU0M6Ok1hY3Jv
QXNzZW1ibGVyWDg2Q29tbW9uOjpzaWduRXh0ZW5kOFRvMzIpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlclg4NkNvbW1vbjo6bG9hZDE2KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJYODZDb21tb246OmxvYWQxNlNpZ25lZEV4dGVuZFRvMzIpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlclg4NkNvbW1vbjo6emVyb0V4dGVuZDE2VG8zMik6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpzaWduRXh0ZW5kMTZUbzMyKToKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJYODZDb21tb246OnN0b3JlMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKToK
KyAgICAgICAgKiBhc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6Olg4NkFz
c2VtYmxlcjo6bW92emJsX3JyKToKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjptb3ZzYmxf
cnIpOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6Om1vdnp3bF9ycik6CisgICAgICAgIChK
U0M6Olg4NkFzc2VtYmxlcjo6bW92c3dsX3JyKToKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVy
OjpjbW92bF9ycik6CisgICAgICAgICogYjMvQjNMb3dlclRvQWlyLmNwcDoKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6Y3JlYXRlR2VuZXJpY0NvbXBhcmUpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpsb3dlcik6CisgICAgICAgICogYjMvYWlyL0Fpck9w
Y29kZS5vcGNvZGVzOgorICAgICAgICAqIGIzL3Rlc3RiMy5jcHA6CisgICAgICAgIChKU0M6OkIz
Ojp0ZXN0Q2hlY2tNZWdhQ29tYm8pOgorICAgICAgICAoSlNDOjpCMzo6dGVzdENoZWNrVHdvTWVn
YUNvbWJvcyk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Q2hlY2tUd29Ob25SZWR1bmRhbnRNZWdh
Q29tYm9zKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RDaGVja0FkZEltbSk6CisgICAgICAgIChK
U0M6OkIzOjpydW4pOgorCiAyMDE1LTEyLTEyICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW5A
d2Via2l0Lm9yZz4KIAogICAgICAgICBbSlNDXSBBZGQgbG93ZXJpbmcgZm9yIEIzJ3MgU3RvcmU4
IG9wY29kZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlclg4NkNvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAkocmV2aXNpb24gMTk0MDEyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC02NDQsNiArNjQ0LDE2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IG1fYXNzZW1ibGVyLm1vdnNibF9tcihhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBkZXN0
KTsKICAgICB9CisKKyAgICB2b2lkIHplcm9FeHRlbmQ4VG8zMihSZWdpc3RlcklEIHNyYywgUmVn
aXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92emJsX3JyKHNyYywg
ZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2lnbkV4dGVuZDhUbzMyKFJlZ2lzdGVySUQg
c3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZzYmxf
cnIoc3JjLCBkZXN0KTsKKyAgICB9CiAgICAgCiAgICAgdm9pZCBsb2FkMTYoQmFzZUluZGV4IGFk
ZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CkBAIC02NjUsNiArNjc1LDE2IEBAIHB1Ymxp
YzoKICAgICAgICAgbV9hc3NlbWJsZXIubW92c3dsX21yKGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNz
LmJhc2UsIGRlc3QpOwogICAgIH0KIAorICAgIHZvaWQgemVyb0V4dGVuZDE2VG8zMihSZWdpc3Rl
cklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92
endsX3JyKHNyYywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2lnbkV4dGVuZDE2VG8z
MihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubW92c3dsX3JyKHNyYywgZGVzdCk7CisgICAgfQorICAgIAogICAgIERhdGFMYWJlbDMy
IHN0b3JlMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGFk
ZHJlc3MpCiAgICAgewogICAgICAgICBwYWRCZWZvcmVQYXRjaCgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCShyZXZpc2lvbiAxOTQw
MTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzE5LDYgKzE3MTksMjEgQEAgcHVibGljOgogICAgICAgICBtX2Zv
cm1hdHRlci50d29CeXRlT3A4KE9QMl9NT1ZaWF9HdkViLCBkc3QsIHNyYyk7CiAgICAgfQogCisg
ICAgdm9pZCBtb3ZzYmxfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsK
KyAgICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wOChPUDJfTU9WU1hfR3ZFYiwgZHN0LCBzcmMp
OworICAgIH0KKworICAgIHZvaWQgbW92endsX3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklE
IGRzdCkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcDgoT1AyX01PVlpYX0d2
RXcsIGRzdCwgc3JjKTsKKyAgICB9CisKKyAgICB2b2lkIG1vdnN3bF9ycihSZWdpc3RlcklEIHNy
YywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3A4
KE9QMl9NT1ZTWF9HdkV3LCBkc3QsIHNyYyk7CisgICAgfQorCiAgICAgdm9pZCBjbW92bF9ycihD
b25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKICAg
ICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wKGNtb3ZjYyhjb25kKSwgZHN0LCBzcmMpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHJldmlzaW9uIDE5
NDAxMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NzMsMjAgKzg3MywxNDUgQEAgcHJpdmF0ZToKICAgICAgICAgY29uc3Qg
Q29tcGFyZUZsb2F0RnVuY3RvciYgY29tcGFyZUZsb2F0LCAvLyBTaWduYXR1cmU6IChBcmcgZG91
YmxlQ29uZCwgQXJnLCBBcmcpIC0+IEluc3QKICAgICAgICAgYm9vbCBpbnZlcnRlZCA9IGZhbHNl
KQogICAgIHsKKyAgICAgICAgLy8gTk9URTogVGhpcyBpcyB0b3RhbGx5IGhhcHB5IHRvIG1hdGNo
IGNvbXBhcmlzb25zIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gY29tcHV0ZWQgZWxzZXdoZXJlCisg
ICAgICAgIC8vIHNpbmNlIG9uIG1vc3QgYXJjaGl0ZWN0dXJlcywgdGhlIGNvc3Qgb2YgYnJhbmNo
aW5nIG9uIGEgcHJldmlvdXNseSBjb21wdXRlZCBjb21wYXJpc29uCisgICAgICAgIC8vIHJlc3Vs
dCBpcyBhbG1vc3QgYWx3YXlzIGhpZ2hlciB0aGFuIGp1c3QgZG9pbmcgYW5vdGhlciBmdXNlZCBj
b21wYXJlL2JyYW5jaC4gVGhlIG9ubHkgdGltZQorICAgICAgICAvLyBpdCBjb3VsZCBiZSB3b3Jz
ZSBpcyBpZiB3ZSBoYXZlIGEgYmluYXJ5IGNvbXBhcmlzb24gYW5kIGJvdGggb3BlcmFuZHMgYXJl
IHZhcmlhYmxlcyAobm90CisgICAgICAgIC8vIGNvbnN0YW50cyksIGFuZCB3ZSBlbmNvdW50ZXIg
cmVnaXN0ZXIgcHJlc3N1cmUuIEV2ZW4gaW4gdGhpcyBjYXNlLCBkdXBsaWNhdGluZyB0aGUgY29t
cGFyZQorICAgICAgICAvLyBzbyB0aGF0IHdlIGNhbiBmdXNlIGl0IHRvIHRoZSBicmFuY2ggd2ls
bCBiZSBtb3JlIGVmZmljaWVudCBtb3N0IG9mIHRoZSB0aW1lLCBzaW5jZQorICAgICAgICAvLyBy
ZWdpc3RlciBwcmVzc3VyZSBpcyBub3QgKnRoYXQqIGNvbW1vbi4gRm9yIHRoaXMgcmVhc29uLCB0
aGlzIGFsZ29yaXRobSB3aWxsIGFsd2F5cworICAgICAgICAvLyBkdXBsaWNhdGUgdGhlIGNvbXBh
cmlzb24uCisgICAgICAgIC8vCisgICAgICAgIC8vIEhvd2V2ZXIsIHdlIGNhbm5vdCBkdXBsaWNh
dGUgbG9hZHMuIFRoZSBjYW5CZUludGVybmFsKCkgb24gYSBsb2FkIHdpbGwgYXNzdW1lIHRoYXQg
d2UKKyAgICAgICAgLy8gYWxyZWFkeSB2YWxpZGF0ZWQgY2FuQmVJbnRlcm5hbCgpIG9uIGFsbCBv
ZiB0aGUgdmFsdWVzIHRoYXQgZ290IHVzIHRvIHRoZSBsb2FkLiBTbywgZXZlbgorICAgICAgICAv
LyBpZiB3ZSBhcmUgc2hhcmluZyBhIHZhbHVlLCB3ZSBzdGlsbCBuZWVkIHRvIGNhbGwgY2FuQmVJ
bnRlcm5hbCgpIGZvciB0aGUgcHVycG9zZSBvZgorICAgICAgICAvLyB0cmFja2luZyB3aGV0aGVy
IHdlIGFyZSBzdGlsbCBpbiBnb29kIHNoYXBlIHRvIGZ1c2UgbG9hZHMuCisgICAgICAgIC8vCisg
ICAgICAgIC8vIFdlIGNvdWxkIGV2ZW4gaGF2ZSBhIGNoYWluIG9mIGNvbXBhcmUgdmFsdWVzIHRo
YXQgd2UgZnVzZSwgYW5kIGFueSBtZW1iZXIgb2YgdGhlIGNoYWluCisgICAgICAgIC8vIGNvdWxk
IGJlIHNoYXJlZC4gT25jZSBhbnkgb2YgdGhlbSBhcmUgc2hhcmVkLCB0aGVuIHRoZSBzaGFyZWQg
b25lJ3MgdHJhbnNpdGl2ZSBjaGlsZHJlbgorICAgICAgICAvLyBjYW5ub3QgYmUgbG9ja2VkIChp
LmUuIGNvbW1pdEludGVybmFsKCkpLiBCdXQgaWYgbm9uZSBvZiB0aGVtIGFyZSBzaGFyZWQsIHRo
ZW4gd2Ugd2FudCB0bworICAgICAgICAvLyBsb2NrIGFsbCBvZiB0aGVtIGJlY2F1c2UgdGhhdCdz
IGEgcHJlcmVxdWlzaXRlIHRvIGZ1c2luZyB0aGUgbG9hZHMgc28gdGhhdCB0aGUgbG9hZHMgZG9u
J3QKKyAgICAgICAgLy8gZ2V0IGR1cGxpY2F0ZWQuIEZvciBleGFtcGxlLCB3ZSBtaWdodCBoYXZl
OiAKKyAgICAgICAgLy8KKyAgICAgICAgLy8gICAgIEB0bXAxID0gTGVzc1RoYW4oQGEsIEBiKQor
ICAgICAgICAvLyAgICAgQHRtcDIgPSBFcXVhbChAdG1wMSwgMCkKKyAgICAgICAgLy8gICAgIEJy
YW5jaChAdG1wMikKKyAgICAgICAgLy8KKyAgICAgICAgLy8gSWYgZWl0aGVyIEBhIG9yIEBiIGFy
ZSBsb2FkcywgdGhlbiB3ZSB3YW50IHRvIGhhdmUgbG9ja2VkIEB0bXAxIGFuZCBAdG1wMiBzbyB0
aGF0IHRoZXkKKyAgICAgICAgLy8gZG9uJ3QgZW1pdCB0aGUgbG9hZHMgYSBzZWNvbmQgdGltZS4g
QnV0IGlmIHdlIGhhZCBhbm90aGVyIHVzZSBvZiBAdG1wMiwgdGhlbiB3ZSBjYW5ub3QKKyAgICAg
ICAgLy8gbG9jayBAdG1wMSAob3IgQGEgb3IgQGIpIGJlY2F1c2UgdGhlbiB3ZSdsbCBnZXQgaW50
byB0cm91YmxlIHdoZW4gdGhlIG90aGVyIHZhbHVlcyB0aGF0CisgICAgICAgIC8vIHRyeSB0byBz
aGFyZSBAdG1wMSB3aXRoIHVzIHRyeSB0byBkbyB0aGVpciBsb3dlcmluZy4KKyAgICAgICAgLy8K
KyAgICAgICAgLy8gVGhlcmUncyBvbmUgbW9yZSB3cmlua2xlLiBJZiB3ZSBkb24ndCBsb2NrIGFu
IGludGVybmFsIHZhbHVlLCB0aGVuIHRoaXMgaW50ZXJuYWwgdmFsdWUgbWF5CisgICAgICAgIC8v
IGhhdmUgYWxyZWFkeSBzZXBhcmF0ZWx5IGxvY2tlZCBpdHMgY2hpbGRyZW4uIFNvLCBpZiB3ZSdy
ZSBub3QgbG9ja2luZyBhIHZhbHVlIHRoZW4gd2UgbmVlZAorICAgICAgICAvLyB0byBtYWtlIHN1
cmUgdGhhdCBpdHMgY2hpbGRyZW4gYXJlbid0IGxvY2tlZC4gV2UgZW5jYXBzdWxhdGUgdGhpcyBp
biB0d28gd2F5czoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gY2FuQ29tbWl0SW50ZXJuYWw6IFRo
aXMgdmFyaWFibGUgdGVsbHMgdXMgaWYgdGhlIHZhbHVlcyB0aGF0IHdlJ3ZlIGZ1c2VkIHNvIGZh
ciBhcmUKKyAgICAgICAgLy8gbG9ja2VkLiBUaGlzIG1lYW5zIHRoYXQgd2UncmUgbm90IHNoYXJp
bmcgYW55IG9mIHRoZW0gd2l0aCBhbnlvbmUuIFRoaXMgcGVybWl0cyB1cyB0byBmdXNlCisgICAg
ICAgIC8vIGxvYWRzLiBJZiBpdCdzIGZhbHNlLCB0aGVuIHdlIGNhbm5vdCBmdXNlIGxvYWRzIGFu
ZCB3ZSBhbHNvIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlCisgICAgICAgIC8vIGNoaWxkcmVuIG9m
IGFueSB2YWx1ZXMgd2UgdHJ5IHRvIGZ1c2UtYnktc2hhcmluZyBhcmUgbm90IGFscmVhZHkgbG9j
a2VkLiBZb3UgZG9uJ3QgaGF2ZSB0bworICAgICAgICAvLyB3b3JyeSBhYm91dCB0aGUgY2hpbGRy
ZW4gbG9ja2luZyB0aGluZyBpZiB5b3UgdXNlIHByZXBhcmVUb0Z1c2UoKSBiZWZvcmUgdHJ5aW5n
IHRvIGZ1c2UgYQorICAgICAgICAvLyBzaGFyYWJsZSB2YWx1ZS4gQnV0LCB5b3UgZG8gbmVlZCB0
byBndWFyZCBhbnkgbG9hZCBmdXNpb24gYnkgY2hlY2tpbmcgaWYgY2FuQ29tbWl0SW50ZXJuYWwK
KyAgICAgICAgLy8gaXMgdHJ1ZS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gRnVzaW9uUmVzdWx0
IHByZXBhcmVUb0Z1c2UodmFsdWUpOiBDYWxsIHRoaXMgd2hlbiB5b3UgdGhpbmcgdGhhdCB5b3Ug
d291bGQgbGlrZSB0byBmdXNlCisgICAgICAgIC8vIHNvbWUgdmFsdWUgYW5kIHRoYXQgdmFsdWUg
aXMgbm90IGEgbG9hZC4gSXQgd2lsbCBhdXRvbWF0aWNhbGx5IGhhbmRsZSB0aGUgc2hhcmVkLW9y
LWxvY2tlZAorICAgICAgICAvLyBpc3N1ZXMgYW5kIGl0IHdpbGwgY2xlYXIgY2FuQ29tbWl0SW50
ZXJuYWwgaWYgbmVjZXNzYXJ5LiBUaGlzIHdpbGwgcmV0dXJuIENhbm5vdEZ1c2UKKyAgICAgICAg
Ly8gKHdoaWNoIGFjdHMgbGlrZSBmYWxzZSkgaWYgdGhlIHZhbHVlIGNhbm5vdCBiZSBsb2NrZWQg
YW5kIGl0cyBjaGlsZHJlbiBhcmUgbG9ja2VkLiBUaGF0J3MKKyAgICAgICAgLy8gcmFyZSwgYnV0
IHlvdSBqdXN0IG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91IGRvIHNtYXJ0IHRoaW5ncyB3aGVu
IHRoaXMgaGFwcGVucyAoaS5lLiBqdXN0CisgICAgICAgIC8vIHVzZSB0aGUgdmFsdWUgcmF0aGVy
IHRoYW4gdHJ5aW5nIHRvIGZ1c2UgaXQpLiBBZnRlciB5b3UgY2FsbCBwcmVwYXJlVG9GdXNlKCks
IHlvdSBjYW4KKyAgICAgICAgLy8gc3RpbGwgY2hhbmdlIHlvdXIgbWluZCBhYm91dCB3aGV0aGVy
IHlvdSB3aWxsIGFjdHVhbGx5IGZ1c2UgdGhlIHZhbHVlLiBJZiB5b3UgZG8gZnVzZSBpdCwKKyAg
ICAgICAgLy8geW91IG5lZWQgdG8gY2FsbCBjb21taXRGdXNpb24odmFsdWUsIGZ1c2lvblJlc3Vs
dCkuCisgICAgICAgIC8vCisgICAgICAgIC8vIGNvbW1pdEZ1c2lvbih2YWx1ZSwgZnVzaW9uUmVz
dWx0KTogSGFuZGxlcyBjYWxsaW5nIGNvbW1pdEludGVybmFsKHZhbHVlKSBpZiBmdXNpb25SZXN1
bHQKKyAgICAgICAgLy8gaXMgRnVzZUFuZENvbW1pdC4KKyAgICAgICAgCisgICAgICAgIGJvb2wg
Y2FuQ29tbWl0SW50ZXJuYWwgPSB0cnVlOworCisgICAgICAgIGVudW0gRnVzaW9uUmVzdWx0IHsK
KyAgICAgICAgICAgIENhbm5vdEZ1c2UsCisgICAgICAgICAgICBGdXNlQW5kQ29tbWl0LAorICAg
ICAgICAgICAgRnVzZQorICAgICAgICB9OworICAgICAgICBhdXRvIHByZXBhcmVUb0Z1c2UgPSBb
Jl0gKFZhbHVlKiB2YWx1ZSkgLT4gRnVzaW9uUmVzdWx0IHsKKyAgICAgICAgICAgIGlmICh2YWx1
ZSA9PSBtX3ZhbHVlKSB7CisgICAgICAgICAgICAgICAgLy8gSXQncyBub3QgYWN0dWFsbHkgaW50
ZXJuYWwuIEl0J3MgdGhlIHJvb3QgdmFsdWUuIFdlJ3JlIGdvb2QgdG8gZ28uCisgICAgICAgICAg
ICAgICAgcmV0dXJuIEZ1c2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjYW5D
b21taXRJbnRlcm5hbCAmJiBjYW5CZUludGVybmFsKHZhbHVlKSkgeworICAgICAgICAgICAgICAg
IC8vIFdlIGFyZSB0aGUgb25seSB1c2VycyBvZiB0aGlzIHZhbHVlLiBUaGlzIGFsc28gbWVhbnMg
dGhhdCB0aGUgdmFsdWUncyBjaGlsZHJlbgorICAgICAgICAgICAgICAgIC8vIGNvdWxkIG5vdCBo
YXZlIGJlZW4gbG9ja2VkLCBzaW5jZSB3ZSBoYXZlIG5vdyBwcm92ZWQgdGhhdCBtX3ZhbHVlIGRv
bWluYXRlcyB2YWx1ZQorICAgICAgICAgICAgICAgIC8vIGluIHRoZSBkYXRhIGZsb3cgZ3JhcGgu
IFRvIG9ubHkgb3RoZXIgd2F5IHRvIHZhbHVlIGlzIGZyb20gYSB1c2VyIG9mIG1fdmFsdWUuIElm
CisgICAgICAgICAgICAgICAgLy8gdmFsdWUncyBjaGlsZHJlbiBhcmUgc2hhcmVkIHdpdGggb3Ro
ZXJzLCB0aGVuIHRoZXkgY291bGQgbm90IGhhdmUgYmVlbiBsb2NrZWQKKyAgICAgICAgICAgICAg
ICAvLyBiZWNhdXNlIHRoZWlyIHVzZSBjb3VudCBpcyBncmVhdGVyIHRoYW4gMS4gSWYgdGhleSBh
cmUgb25seSB1c2VkIGZyb20gdmFsdWUsIHRoZW4KKyAgICAgICAgICAgICAgICAvLyBpbiBvcmRl
ciBmb3IgdmFsdWUncyBjaGlsZHJlbiB0byBiZSBsb2NrZWQsIHZhbHVlIHdvdWxkIGFsc28gaGF2
ZSB0byBiZSBsb2NrZWQsCisgICAgICAgICAgICAgICAgLy8gYW5kIHdlIGp1c3QgcHJvdmVkIHRo
YXQgaXQgd2Fzbid0LgorICAgICAgICAgICAgICAgIHJldHVybiBGdXNlQW5kQ29tbWl0OworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBXZSdyZSBnb2luZyB0byB0cnkgdG8gc2hhcmUg
dmFsdWUgd2l0aCBvdGhlcnMuIEl0J3MgcG9zc2libGUgdGhhdCBzb21lIG90aGVyIGJhc2ljCisg
ICAgICAgICAgICAvLyBibG9jayBoYWQgYWxyZWFkeSBlbWl0dGVkIGNvZGUgZm9yIHZhbHVlIGFu
ZCB0aGVuIG1hdGNoZWQgb3ZlciBpdHMgY2hpbGRyZW4gYW5kIHRoZW4KKyAgICAgICAgICAgIC8v
IGxvY2tlZCB0aGVtLCBpbiB3aGljaCBjYXNlIHdlIGp1c3Qgd2FudCB0byB1c2UgdmFsdWUgaW5z
dGVhZCBvZiBkdXBsaWNhdGluZyBpdC4gU28sIHdlCisgICAgICAgICAgICAvLyB2YWxpZGF0ZSB0
aGUgY2hpbGRyZW4uIE5vdGUgdGhhdCB0aGlzIG9ubHkgYXJpc2VzIGluIGxpbmVhciBjaGFpbnMg
bGlrZToKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyAgICAgQkIjMToKKyAgICAgICAg
ICAgIC8vICAgICAgICAgQDEgPSBGb28oLi4uKQorICAgICAgICAgICAgLy8gICAgICAgICBAMiA9
IEJhcihAMSkKKyAgICAgICAgICAgIC8vICAgICAgICAgSnVtcCgjMikKKyAgICAgICAgICAgIC8v
ICAgICBCQiMyOgorICAgICAgICAgICAgLy8gICAgICAgICBAMyA9IEJheihAMikKKyAgICAgICAg
ICAgIC8vCisgICAgICAgICAgICAvLyBOb3RpY2UgaG93IHdlIGNvdWxkIHN0YXJ0IGJ5IGdlbmVy
YXRpbmcgY29kZSBmb3IgQkIjMSBhbmQgdGhlbiBkZWNpZGUgdG8gbG9jayBAMSB3aGVuCisgICAg
ICAgICAgICAvLyBnZW5lcmF0aW5nIGNvZGUgZm9yIEAyLCBpZiB3ZSBoYXZlIHNvbWUgd2F5IG9m
IGZ1c2luZyBCYXIgYW5kIEZvbyBpbnRvIGEgc2luZ2xlCisgICAgICAgICAgICAvLyBpbnN0cnVj
dGlvbi4gVGhpcyBpcyBsZWdhbCwgc2luY2UgaW5kZWVkIEAxIG9ubHkgaGFzIG9uZSB1c2VyLiBU
aGUgZmFjdCB0aGF0IEAyIG5vdworICAgICAgICAgICAgLy8gaGFzIGEgdG1wIChpLmUuIEAyIGlz
IHBpbm5lZCksIGNhbkJlSW50ZXJuYWwoQDIpIHdpbGwgcmV0dXJuIGZhbHNlLCB3aGljaCBicmlu
Z3MgdXMKKyAgICAgICAgICAgIC8vIGhlcmUuIEluIHRoYXQgY2FzZSwgd2UgY2Fubm90IG1hdGNo
IG92ZXIgQDIgYmVjYXVzZSB0aGVuIHdlJ2QgaGl0IGEgaGF6YXJkIGlmIHdlIGVuZAorICAgICAg
ICAgICAgLy8gdXAgZGVjaWRpbmcgbm90IHRvIGZ1c2UgRm9vIGludG8gdGhlIGZ1c2VkIEJhei9C
YXIuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gSGFwcGlseSwgdGhlcmUgYXJlIG9u
bHkgdHdvIHBsYWNlcyB3aGVyZSB0aGlzIGtpbmQgb2YgY2hpbGQgdmFsaWRhdGlvbiBoYXBwZW5z
IGlzIGluCisgICAgICAgICAgICAvLyBydWxlcyB0aGF0IGFkbWl0IHNoYXJpbmcsIGxpa2UgdGhp
cyBhbmQgZWZmZWN0aXZlQWRkcmVzcygpLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8v
IE4uQi4gV2UgY291bGQgcHJvYmFibHkgYXZvaWQgdGhlIG5lZWQgdG8gZG8gdmFsdWUgbG9ja2lu
ZyBpZiB3ZSBjb21taXR0ZWQgdG8gYSB3ZWxsCisgICAgICAgICAgICAvLyBjaG9zZW4gY29kZSBn
ZW5lcmF0aW9uIG9yZGVyLiBGb3IgZXhhbXBsZSwgaWYgd2UgZ3VhcmFudGVlZCB0aGF0IGFsbCBv
ZiB0aGUgdXNlcnMgb2YKKyAgICAgICAgICAgIC8vIGEgdmFsdWUgZ2V0IGdlbmVyYXRlZCBiZWZv
cmUgdGhhdCB2YWx1ZSwgdGhlbiB0aGVyZSdzIG5vIHdheSBmb3IgdGhlIGxvd2VyaW5nIG9mIEAz
IHRvCisgICAgICAgICAgICAvLyBzZWUgQDEgbG9ja2VkLiBCdXQgd2UgZG9uJ3Qgd2FudCB0byBk
byB0aGF0LCBzaW5jZSB0aGlzIGlzIGEgZ3JlZWR5IGluc3RydWN0aW9uCisgICAgICAgICAgICAv
LyBzZWxlY3RvciBhbmQgc28gd2Ugd2FudCB0byBiZSBhYmxlIHRvIHBsYXkgd2l0aCBvcmRlci4K
KyAgICAgICAgICAgIGZvciAoVmFsdWUqIGNoaWxkIDogdmFsdWUtPmNoaWxkcmVuKCkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAobV9sb2NrZWQuY29udGFpbnMoY2hpbGQpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gQ2Fubm90RnVzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Ly8gSXQncyBzYWZlIHRvIHNoYXJlIHZhbHVlLCBidXQgc2luY2Ugd2UncmUgc2hhcmluZywgaXQg
bWVhbnMgdGhhdCB3ZSBhcmVuJ3QgbG9ja2luZyBpdC4KKyAgICAgICAgICAgIC8vIElmIHdlIGRv
bid0IGxvY2sgaXQsIHRoZW4gZnVzaW5nIGxvYWRzIGlzIG9mZiBsaW1pdHMgYW5kIGFsbCBvZiB2
YWx1ZSdzIGNoaWxkcmVuIHdpbGwKKyAgICAgICAgICAgIC8vIGhhdmUgdG8gZ28gdGhyb3VnaCB0
aGUgc2hhcmluZyBwYXRoIGFzIHdlbGwuCisgICAgICAgICAgICBjYW5Db21taXRJbnRlcm5hbCA9
IGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gRnVzZTsKKyAgICAgICAg
fTsKKworICAgICAgICBhdXRvIGNvbW1pdEZ1c2lvbiA9IFsmXSAoVmFsdWUqIHZhbHVlLCBGdXNp
b25SZXN1bHQgcmVzdWx0KSB7CisgICAgICAgICAgICBpZiAocmVzdWx0ID09IEZ1c2VBbmRDb21t
aXQpCisgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwodmFsdWUpOworICAgICAgICB9Owor
ICAgICAgICAKICAgICAgICAgLy8gQ2hldyB0aHJvdWdoIGFueSBuZWdhdGlvbnMuIEl0J3Mgbm90
IHN0cmljdGx5IG5lY2Vzc2FyeSBmb3IgdGhpcyB0byBiZSBhIGxvb3AsIGJ1dCB3ZSBsaWtlCiAg
ICAgICAgIC8vIHRvIGZvbGxvdyB0aGUgcnVsZSB0aGF0IHRoZSBpbnN0cnVjdGlvbiBzZWxlY3Rv
ciByZWR1Y2VzIHN0cmVuZ3RoIHdoZW5ldmVyIGl0IGRvZXNuJ3QKICAgICAgICAgLy8gcmVxdWly
ZSBtYWtpbmcgdGhpbmdzIG1vcmUgY29tcGxpY2F0ZWQuCiAgICAgICAgIGZvciAoOzspIHsKLSAg
ICAgICAgICAgIGlmICghY2FuQmVJbnRlcm5hbCh2YWx1ZSkgJiYgdmFsdWUgIT0gbV92YWx1ZSkK
LSAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGJvb2wgc2hvdWxkSW52ZXJ0ID0K
ICAgICAgICAgICAgICAgICAodmFsdWUtPm9wY29kZSgpID09IEJpdFhvciAmJiB2YWx1ZS0+Y2hp
bGQoMSktPmhhc0ludCgpICYmICh2YWx1ZS0+Y2hpbGQoMSktPmFzSW50KCkgJiAxKSAmJiB2YWx1
ZS0+Y2hpbGQoMCktPnJldHVybnNCb29sKCkpCiAgICAgICAgICAgICAgICAgfHwgKHZhbHVlLT5v
cGNvZGUoKSA9PSBFcXVhbCAmJiB2YWx1ZS0+Y2hpbGQoMSktPmlzSW50KDApKTsKICAgICAgICAg
ICAgIGlmICghc2hvdWxkSW52ZXJ0KQogICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICBGdXNpb25SZXN1bHQgZnVzaW9uUmVzdWx0ID0gcHJlcGFyZVRvRnVzZSh2YWx1ZSk7Cisg
ICAgICAgICAgICBpZiAoZnVzaW9uUmVzdWx0ID09IENhbm5vdEZ1c2UpCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjb21taXRGdXNpb24odmFsdWUsIGZ1c2lvblJlc3VsdCk7
CisgICAgICAgICAgICAKICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUtPmNoaWxkKDApOwogICAg
ICAgICAgICAgaW52ZXJ0ZWQgPSAhaW52ZXJ0ZWQ7Ci0gICAgICAgICAgICBjb21taXRJbnRlcm5h
bCh2YWx1ZSk7CiAgICAgICAgIH0KIAogICAgICAgICBhdXRvIGNyZWF0ZVJlbENvbmQgPSBbJl0g
KApAQCAtOTMxLDUxICsxMDU2LDU1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBJbnN0KCk7CiAgICAgICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgICAgIC8vIEZp
cnN0IGhhbmRsZSBjb21wYXJlcyB0aGF0IGludm9sdmUgZmV3ZXIgYml0cyB0aGFuIEIzJ3MgdHlw
ZSBzeXN0ZW0gc3VwcG9ydHMuCi0gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBwcmV0dHkgaW1w
b3J0YW50LiBGb3IgZXhhbXBsZSwgd2Ugd2FudCB0aGlzIHRvIGJlIGEgc2luZ2xlIGluc3RydWN0
aW9uOgotICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgLy8gICAgIEAxID0gTG9h
ZDhTKC4uLikKLSAgICAgICAgICAgICAgICAvLyAgICAgQDIgPSBDb25zdDMyKC4uLikKLSAgICAg
ICAgICAgICAgICAvLyAgICAgQDMgPSBMZXNzVGhhbihAMSwgQDIpCi0gICAgICAgICAgICAgICAg
Ly8gICAgIEJyYW5jaChAMykKKyAgICAgICAgICAgICAgICBBcmc6OldpZHRoIHdpZHRoID0gQXJn
Ojp3aWR0aEZvckIzVHlwZSh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSk7CiAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgaWYgKHJlbENvbmQuaXNTaWduZWRDb25kKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5Q29tcGFyZUxvYWRJbW0oQXJnOjpX
aWR0aDgsIExvYWQ4UywgQXJnOjpTaWduZWQpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGNhbkNv
bW1pdEludGVybmFsKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZpcnN0IGhhbmRsZSBjb21w
YXJlcyB0aGF0IGludm9sdmUgZmV3ZXIgYml0cyB0aGFuIEIzJ3MgdHlwZSBzeXN0ZW0gc3VwcG9y
dHMuCisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgcHJldHR5IGltcG9ydGFudC4gRm9y
IGV4YW1wbGUsIHdlIHdhbnQgdGhpcyB0byBiZSBhIHNpbmdsZQorICAgICAgICAgICAgICAgICAg
ICAvLyBpbnN0cnVjdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAg
ICAgICAgLy8gICAgIEAxID0gTG9hZDhTKC4uLikKKyAgICAgICAgICAgICAgICAgICAgLy8gICAg
IEAyID0gQ29uc3QzMiguLi4pCisgICAgICAgICAgICAgICAgICAgIC8vICAgICBAMyA9IExlc3NU
aGFuKEAxLCBAMikKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIEJyYW5jaChAMykKICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAocmVsQ29uZC5pc1Vuc2lnbmVkQ29uZCgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeUNvbXBhcmVMb2Fk
SW1tKEFyZzo6V2lkdGg4LCBMb2FkOFosIEFyZzo6VW5zaWduZWQpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIGlmIChyZWxDb25kLmlzU2lnbmVkQ29uZCgpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlDb21wYXJlTG9hZEltbShBcmc6OldpZHRoOCwgTG9h
ZDhTLCBBcmc6OlNpZ25lZCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICBpZiAocmVsQ29uZC5pc1Vuc2lnbmVkQ29uZCgpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlDb21wYXJlTG9hZEltbShBcmc6OldpZHRo
OCwgTG9hZDhaLCBBcmc6OlVuc2lnbmVkKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBp
ZiAocmVsQ29uZC5pc1NpZ25lZENvbmQoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoSW5z
dCByZXN1bHQgPSB0cnlDb21wYXJlTG9hZEltbShBcmc6OldpZHRoMTYsIExvYWQxNlMsIEFyZzo6
U2lnbmVkKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAocmVsQ29uZC5pc1NpZ25lZENvbmQo
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5Q29tcGFy
ZUxvYWRJbW0oQXJnOjpXaWR0aDE2LCBMb2FkMTZTLCBBcmc6OlNpZ25lZCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChyZWxDb25kLmlzVW5zaWduZWRD
b25kKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5Q29tcGFy
ZUxvYWRJbW0oQXJnOjpXaWR0aDE2LCBMb2FkMTZaLCBBcmc6OlVuc2lnbmVkKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBpZiAocmVsQ29uZC5pc1Vuc2lnbmVkQ29uZCgpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlDb21wYXJlTG9hZEltbShBcmc6Oldp
ZHRoMTYsIExvYWQxNlosIEFyZzo6VW5zaWduZWQpKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
ICAgIC8vIE5vdyBoYW5kbGUgY29tcGFyZXMgdGhhdCBpbnZvbHZlIGEgbG9hZCBhbmQgYW4gaW1t
ZWRpYXRlLgorICAgICAgICAgICAgICAgICAgICAvLyBOb3cgaGFuZGxlIGNvbXBhcmVzIHRoYXQg
aW52b2x2ZSBhIGxvYWQgYW5kIGFuIGltbWVkaWF0ZS4KIAotICAgICAgICAgICAgICAgIEFyZzo6
V2lkdGggd2lkdGggPSBBcmc6OndpZHRoRm9yQjNUeXBlKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgp
KTsKLSAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlDb21wYXJlTG9hZEltbSh3
aWR0aCwgTG9hZCwgQXJnOjpTaWduZWQpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlDb21wYXJlTG9h
ZEltbSh3aWR0aCwgTG9hZCwgQXJnOjpTaWduZWQpKQorICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKIAotICAgICAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUgY29tcGFyZXMg
dGhhdCBpbnZvbHZlIGEgbG9hZC4gSXQncyBub3Qgb2J2aW91cyB0aGF0IGl0J3MgYmV0dGVyIHRv
Ci0gICAgICAgICAgICAgICAgLy8gaGFuZGxlIHRoaXMgYmVmb3JlIHRoZSBpbW1lZGlhdGUgY2Fz
ZXMgb3Igbm90LiBQcm9iYWJseSBkb2Vzbid0IG1hdHRlci4KKyAgICAgICAgICAgICAgICAgICAg
Ly8gTm93IGhhbmRsZSBjb21wYXJlcyB0aGF0IGludm9sdmUgYSBsb2FkLiBJdCdzIG5vdCBvYnZp
b3VzIHRoYXQgaXQncyBiZXR0ZXIgdG8KKyAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIHRo
aXMgYmVmb3JlIHRoZSBpbW1lZGlhdGUgY2FzZXMgb3Igbm90LiBQcm9iYWJseSBkb2Vzbid0IG1h
dHRlci4KIAotICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeUNvbXBhcmUod2lk
dGgsIGxvYWRQcm9taXNlKGxlZnQpLCB0bXBQcm9taXNlKHJpZ2h0KSkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgY29tbWl0SW50ZXJuYWwobGVmdCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoSW5z
dCByZXN1bHQgPSB0cnlDb21wYXJlKHdpZHRoLCBsb2FkUHJvbWlzZShsZWZ0KSwgdG1wUHJvbWlz
ZShyaWdodCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21taXRJbnRlcm5hbChsZWZ0
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1
bHQgPSB0cnlDb21wYXJlKHdpZHRoLCB0bXBQcm9taXNlKGxlZnQpLCBsb2FkUHJvbWlzZShyaWdo
dCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKHJpZ2h0KTsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKElu
c3QgcmVzdWx0ID0gdHJ5Q29tcGFyZSh3aWR0aCwgdG1wUHJvbWlzZShsZWZ0KSwgbG9hZFByb21p
c2UocmlnaHQpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwocmln
aHQpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIC8vIE5vdyBo
YW5kbGUgY29tcGFyZXMgdGhhdCBpbnZvbHZlIGFuIGltbWVkaWF0ZSBhbmQgYSB0bXAuCkBAIC0x
MDYyLDM5ICsxMTkxLDQxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJ
bnN0KCk7CiAgICAgICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgICAgIC8vIEZpcnN0IGhh
bmRsZSB0ZXN0J3MgdGhhdCBpbnZvbHZlIGZld2VyIGJpdHMgdGhhbiBCMydzIHR5cGUgc3lzdGVt
IHN1cHBvcnRzLgorICAgICAgICAgICAgICAgIGlmIChjYW5Db21taXRJbnRlcm5hbCkgeworICAg
ICAgICAgICAgICAgICAgICAvLyBGaXJzdCBoYW5kbGUgdGVzdCdzIHRoYXQgaW52b2x2ZSBmZXdl
ciBiaXRzIHRoYW4gQjMncyB0eXBlIHN5c3RlbSBzdXBwb3J0cy4KIAotICAgICAgICAgICAgICAg
IGlmIChJbnN0IHJlc3VsdCA9IHRyeVRlc3RMb2FkSW1tKEFyZzo6V2lkdGg4LCBMb2FkOFopKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgICAgICAgICAgICAgaWYg
KEluc3QgcmVzdWx0ID0gdHJ5VGVzdExvYWRJbW0oQXJnOjpXaWR0aDgsIExvYWQ4UykpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICAgICAgICAgICAgICBpZiAoSW5z
dCByZXN1bHQgPSB0cnlUZXN0TG9hZEltbShBcmc6OldpZHRoMTYsIExvYWQxNlopKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgICAgICAgICAgICAgaWYgKEluc3Qg
cmVzdWx0ID0gdHJ5VGVzdExvYWRJbW0oQXJnOjpXaWR0aDE2LCBMb2FkMTZTKSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgICAgICAgICAgICAgIC8vIE5vdyBoYW5k
bGUgdGVzdCdzIHRoYXQgaW52b2x2ZSBhIGxvYWQgYW5kIGFuIGltbWVkaWF0ZS4gTm90ZSB0aGF0
IGltbWVkaWF0ZXMgYXJlCi0gICAgICAgICAgICAgICAgLy8gMzItYml0LCBhbmQgd2Ugd2FudCB6
ZXJvLWV4dGVuc2lvbi4gSGVuY2UsIHRoZSBpbW1lZGlhdGUgZm9ybSBpcyBjb21waWxlZCBhcyBh
Ci0gICAgICAgICAgICAgICAgLy8gMzItYml0IHRlc3QuIE5vdGUgdGhhdCB0aGlzIHNwaXRzIG9u
IHRoZSBncmF2ZSBvZiBpbmZlcmlvciBlbmRpYW5zLCBzdWNoIGFzIHRoZQotICAgICAgICAgICAg
ICAgIC8vIGJpZyBvbmUuCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKElu
c3QgcmVzdWx0ID0gdHJ5VGVzdExvYWRJbW0oQXJnOjpXaWR0aDMyLCBMb2FkKSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgICAgICAgICAgICAgIC8vIE5vdyBoYW5k
bGUgdGVzdCdzIHRoYXQgaW52b2x2ZSBhIGxvYWQuCi0KLSAgICAgICAgICAgICAgICBBcmc6Oldp
ZHRoIHdpZHRoID0gQXJnOjp3aWR0aEZvckIzVHlwZSh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSk7
Ci0gICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5VGVzdCh3aWR0aCwgbG9hZFBy
b21pc2UobGVmdCksIHRtcFByb21pc2UocmlnaHQpKSkgewotICAgICAgICAgICAgICAgICAgICBj
b21taXRJbnRlcm5hbChsZWZ0KTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9
IHRyeVRlc3RMb2FkSW1tKEFyZzo6V2lkdGg4LCBMb2FkOFopKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeVRlc3RMb2FkSW1tKEFyZzo6V2lkdGg4LCBMb2Fk
OFMpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeVRlc3RM
b2FkSW1tKEFyZzo6V2lkdGgxNiwgTG9hZDE2WikpCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
aWYgKEluc3QgcmVzdWx0ID0gdHJ5VGVzdExvYWRJbW0oQXJnOjpXaWR0aDE2LCBMb2FkMTZTKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICAgICAgICAgICAg
ICBpZiAoSW5zdCByZXN1bHQgPSB0cnlUZXN0KHdpZHRoLCB0bXBQcm9taXNlKGxlZnQpLCBsb2Fk
UHJvbWlzZShyaWdodCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKHJp
Z2h0KTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gTm93IGhhbmRsZSB0ZXN0J3MgdGhhdCBpbnZvbHZlIGEgbG9hZCBhbmQgYW4gaW1t
ZWRpYXRlLiBOb3RlIHRoYXQgaW1tZWRpYXRlcworICAgICAgICAgICAgICAgICAgICAvLyBhcmUg
MzItYml0LCBhbmQgd2Ugd2FudCB6ZXJvLWV4dGVuc2lvbi4gSGVuY2UsIHRoZSBpbW1lZGlhdGUg
Zm9ybSBpcyBjb21waWxlZAorICAgICAgICAgICAgICAgICAgICAvLyBhcyBhIDMyLWJpdCB0ZXN0
LiBOb3RlIHRoYXQgdGhpcyBzcGl0cyBvbiB0aGUgZ3JhdmUgb2YgaW5mZXJpb3IgZW5kaWFucywg
c3VjaAorICAgICAgICAgICAgICAgICAgICAvLyBhcyB0aGUgYmlnIG9uZS4KKyAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeVRlc3RM
b2FkSW1tKEFyZzo6V2lkdGgzMiwgTG9hZCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8g
Tm93IGhhbmRsZSB0ZXN0J3MgdGhhdCBpbnZvbHZlIGEgbG9hZC4KKyAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgIEFyZzo6V2lkdGggd2lkdGggPSBBcmc6OndpZHRoRm9y
QjNUeXBlKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KEluc3QgcmVzdWx0ID0gdHJ5VGVzdCh3aWR0aCwgbG9hZFByb21pc2UobGVmdCksIHRtcFByb21p
c2UocmlnaHQpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwobGVm
dCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAo
SW5zdCByZXN1bHQgPSB0cnlUZXN0KHdpZHRoLCB0bXBQcm9taXNlKGxlZnQpLCBsb2FkUHJvbWlz
ZShyaWdodCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21taXRJbnRlcm5hbChyaWdo
dCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgLy8gTm93IGhh
bmRsZSB0ZXN0J3MgdGhhdCBpbnZvbHZlIGFuIGltbWVkaWF0ZSBhbmQgYSB0bXAuCkBAIC0xMTE3
LDkgKzEyNDgsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgfQogICAgICAgICB9OwogCi0gICAg
ICAgIGlmIChjYW5CZUludGVybmFsKHZhbHVlKSB8fCB2YWx1ZSA9PSBtX3ZhbHVlKSB7CisgICAg
ICAgIGlmIChGdXNpb25SZXN1bHQgZnVzaW9uUmVzdWx0ID0gcHJlcGFyZVRvRnVzZSh2YWx1ZSkp
IHsKICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IGF0dGVtcHRGdXNlZCgpKSB7Ci0gICAg
ICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwodmFsdWUpOworICAgICAgICAgICAgICAgIGNvbW1p
dEZ1c2lvbih2YWx1ZSwgZnVzaW9uUmVzdWx0KTsKICAgICAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xNDYzLDYgKzE1OTQsMjEgQEAgcHJp
dmF0ZToKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgQml0QW5kOiB7CisgICAgICAgICAgICBp
ZiAobV92YWx1ZS0+Y2hpbGQoMSktPmlzSW50KDB4ZmYpKSB7CisgICAgICAgICAgICAgICAgYXBw
ZW5kVW5PcDxaZXJvRXh0ZW5kOFRvMzIsIFplcm9FeHRlbmQ4VG8zMj4obV92YWx1ZS0+Y2hpbGQo
MCkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5pc0ludCgweGZmZmYpKSB7Cisg
ICAgICAgICAgICAgICAgYXBwZW5kVW5PcDxaZXJvRXh0ZW5kMTZUbzMyLCBaZXJvRXh0ZW5kMTZU
bzMyPihtX3ZhbHVlLT5jaGlsZCgwKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmlzSW50KDB4ZmZm
ZmZmZmYpKSB7CisgICAgICAgICAgICAgICAgYXBwZW5kVW5PcDxNb3ZlMzIsIE1vdmUzMj4obV92
YWx1ZS0+Y2hpbGQoMCkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAogICAgICAgICAgICAgYXBwZW5kQmluT3A8QW5kMzIsIEFuZDY0LCBBbmRE
b3VibGUsIEFuZEZsb2F0LCBDb21tdXRhdGl2ZT4oCiAgICAgICAgICAgICAgICAgbV92YWx1ZS0+
Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxkKDEpKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE1
NzIsMTggKzE3MTgsMzEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogCisgICAgICAgIGNhc2UgU0V4dDg6IHsKKyAgICAgICAgICAgIGFwcGVuZFVuT3A8U2lnbkV4
dGVuZDhUbzMyLCBBaXI6Ok9vcHM+KG1fdmFsdWUtPmNoaWxkKDApKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgU0V4dDE2OiB7CisgICAgICAgICAgICBh
cHBlbmRVbk9wPFNpZ25FeHRlbmQxNlRvMzIsIEFpcjo6T29wcz4obV92YWx1ZS0+Y2hpbGQoMCkp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKICAgICAgICAgY2FzZSBaRXh0MzI6
IHsKICAgICAgICAgICAgIGlmIChoaWdoQml0c0FyZVplcm8obV92YWx1ZS0+Y2hpbGQoMCkpKSB7
CiAgICAgICAgICAgICAgICAgQVNTRVJUKHRtcChtX3ZhbHVlLT5jaGlsZCgwKSkgPT0gdG1wKG1f
dmFsdWUpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIGFwcGVuZChNb3ZlMzIsIHRtcChtX3ZhbHVlLT5jaGlsZCgwKSksIHRtcChtX3ZhbHVl
KSk7CisgICAgICAgICAgICBhcHBlbmRVbk9wPE1vdmUzMiwgQWlyOjpPb3BzPihtX3ZhbHVlLT5j
aGlsZCgwKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBjYXNl
IFNFeHQzMjogewotICAgICAgICAgICAgYXBwZW5kKFNpZ25FeHRlbmQzMlRvUHRyLCB0bXAobV92
YWx1ZS0+Y2hpbGQoMCkpLCB0bXAobV92YWx1ZSkpOworICAgICAgICAgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBoYXZlIHN1cHBvcnQgZm9yIG1vdnNicS9tb3Zzd3EKKyAgICAgICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTIyMzIKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgYXBwZW5kVW5PcDxTaWduRXh0ZW5kMzJUb1B0ciwgQWlyOjpPb3BzPiht
X3ZhbHVlLT5jaGlsZCgwKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAkocmV2
aXNpb24gMTk0MDEyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5n
dGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjcsNiArMzY3LDMyIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRBbmQoU0V4dDgodmFs
dWUpLCBtYXNrKSB3aGVyZSAobWFzayAmIDB4ZmZmZmZmMDApID09IDAKKyAgICAgICAgICAgIC8v
IEludG8gdGhpczogQml0QW5kKHZhbHVlLCBtYXNrKQorICAgICAgICAgICAgaWYgKG1fdmFsdWUt
PmNoaWxkKDApLT5vcGNvZGUoKSA9PSBTRXh0OCAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+aGFzSW50
MzIoKQorICAgICAgICAgICAgICAgICYmICEobV92YWx1ZS0+Y2hpbGQoMSktPmFzSW50MzIoKSAm
IDB4ZmZmZmZmMDApKSB7CisgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCkgPSBtX3Zh
bHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7CisgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1
ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRBbmQoU0V4
dDE2KHZhbHVlKSwgbWFzaykgd2hlcmUgKG1hc2sgJiAweGZmZmYwMDAwKSA9PSAwCisgICAgICAg
ICAgICAvLyBJbnRvIHRoaXM6IEJpdEFuZCh2YWx1ZSwgbWFzaykKKyAgICAgICAgICAgIGlmICht
X3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gU0V4dDE2ICYmIG1fdmFsdWUtPmNoaWxkKDEp
LT5oYXNJbnQzMigpCisgICAgICAgICAgICAgICAgJiYgIShtX3ZhbHVlLT5jaGlsZCgxKS0+YXNJ
bnQzMigpICYgMHhmZmZmMDAwMCkpIHsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgw
KSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKKyAgICAgICAgICAgICAgICBtX2NoYW5n
ZWQgPSB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJp
dEFuZChTRXh0MzIodmFsdWUpLCBtYXNrKSB3aGVyZSAobWFzayAmICkgPT0gMAorICAgICAgICAg
ICAgLy8gSW50byB0aGlzOiBCaXRBbmQoWkV4dDMyKHZhbHVlKSwgbWFzaykKKyAgICAgICAgICAg
IGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gU0V4dDMyICYmIG1fdmFsdWUtPmNo
aWxkKDEpLT5oYXNJbnQzMigpCisgICAgICAgICAgICAgICAgJiYgIShtX3ZhbHVlLT5jaGlsZCgx
KS0+YXNJbnQzMigpICYgMHhmZmZmZmZmZjAwMDAwMDAwbGx1KSkgeworICAgICAgICAgICAgICAg
IG1fdmFsdWUtPmNoaWxkKDApID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPigKKyAgICAg
ICAgICAgICAgICAgICAgbV9pbmRleCwgWkV4dDMyLCBtX3ZhbHVlLT5vcmlnaW4oKSwKKyAgICAg
ICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGls
ZCgwKS0+Y2hpbGQoMSkpOworICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEJpdE9yOgpAQCAt
NTY0LDYgKzU5MCw5NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJl
YWs7CiAKKyAgICAgICAgY2FzZSBTRXh0ODoKKyAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU0V4
dDgoY29uc3RhbnQpCisgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IHN0YXRpY19jYXN0PGludDhf
dD4oY29uc3RhbnQpCisgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPmhhc0ludDMy
KCkpIHsKKyAgICAgICAgICAgICAgICBpbnQzMl90IHJlc3VsdCA9IHN0YXRpY19jYXN0PGludDhf
dD4obV92YWx1ZS0+Y2hpbGQoMCktPmFzSW50MzIoKSk7CisgICAgICAgICAgICAgICAgcmVwbGFj
ZVdpdGhOZXdWYWx1ZShtX3Byb2MuYWRkSW50Q29uc3RhbnQobV92YWx1ZSwgcmVzdWx0KSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFR1
cm4gdGhpczogU0V4dDgoU0V4dDgodmFsdWUpKQorICAgICAgICAgICAgLy8gICBvciB0aGlzOiBT
RXh0OChTRXh0MTYodmFsdWUpKQorICAgICAgICAgICAgLy8gSW50byB0aGlzOiBTRXh0OCh2YWx1
ZSkKKyAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gU0V4dDgg
fHwgbV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IFNFeHQxNikgeworICAgICAgICAgICAg
ICAgIG1fdmFsdWUtPmNoaWxkKDApID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApOworICAg
ICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gQml0QW5kICYmIG1fdmFsdWUt
PmNoaWxkKDApLT5jaGlsZCgxKS0+aGFzSW50MzIoKSkgeworICAgICAgICAgICAgICAgIFZhbHVl
KiBpbnB1dCA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKKyAgICAgICAgICAgICAgICBp
bnQzMl90IG1hc2sgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmFzSW50MzIoKTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNFeHQ4KEJpdEFu
ZChpbnB1dCwgbWFzaykpIHdoZXJlIChtYXNrICYgMHhmZikgPT0gMHhmZgorICAgICAgICAgICAg
ICAgIC8vIEludG8gdGhpczogU0V4dDgoaW5wdXQpCisgICAgICAgICAgICAgICAgaWYgKChtYXNr
ICYgMHhmZikgPT0gMHhmZikgeworICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgw
KSA9IGlucHV0OworICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBTRXh0OChCaXRBbmQoaW5wdXQsIG1hc2sp
KSB3aGVyZSAobWFzayAmIDB4ODApID09IDAKKyAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6
IEJpdEFuZChpbnB1dCwgY29uc3QgJiAweDdmKQorICAgICAgICAgICAgICAgIGlmICghKG1hc2sg
JiAweDgwKSkgeworICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAorICAg
ICAgICAgICAgICAgICAgICAgICAgbV9wcm9jLmFkZDxWYWx1ZT4oCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQml0QW5kLCBtX3ZhbHVlLT5vcmlnaW4oKSwgaW5wdXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0MzJWYWx1ZT4oCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIG1fdmFsdWUtPm9yaWdpbigp
LCBtYXNrICYgMHg3ZikpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2Fz
ZSBTRXh0MTY6CisgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNFeHQxNihjb25zdGFudCkKKyAg
ICAgICAgICAgIC8vIEludG8gdGhpczogc3RhdGljX2Nhc3Q8aW50MTZfdD4oY29uc3RhbnQpCisg
ICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPmhhc0ludDMyKCkpIHsKKyAgICAgICAg
ICAgICAgICBpbnQzMl90IHJlc3VsdCA9IHN0YXRpY19jYXN0PGludDE2X3Q+KG1fdmFsdWUtPmNo
aWxkKDApLT5hc0ludDMyKCkpOworICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUo
bV9wcm9jLmFkZEludENvbnN0YW50KG1fdmFsdWUsIHJlc3VsdCkpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNFeHQx
NihTRXh0MTYodmFsdWUpKQorICAgICAgICAgICAgLy8gSW50byB0aGlzOiBTRXh0MTYodmFsdWUp
CisgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IFNFeHQxNikg
eworICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApID0gbV92YWx1ZS0+Y2hpbGQoMCkt
PmNoaWxkKDApOworICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU0V4dDE2KFNFeHQ4KHZhbHVlKSkKKyAg
ICAgICAgICAgIC8vIEludG8gdGhpczogU0V4dDgodmFsdWUpCisgICAgICAgICAgICBpZiAobV92
YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IFNFeHQ4KSB7CisgICAgICAgICAgICAgICAgbV92
YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCkpOwor
ICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bj
b2RlKCkgPT0gQml0QW5kICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+aGFzSW50MzIo
KSkgeworICAgICAgICAgICAgICAgIFZhbHVlKiBpbnB1dCA9IG1fdmFsdWUtPmNoaWxkKDApLT5j
aGlsZCgwKTsKKyAgICAgICAgICAgICAgICBpbnQzMl90IG1hc2sgPSBtX3ZhbHVlLT5jaGlsZCgw
KS0+Y2hpbGQoMSktPmFzSW50MzIoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAvLyBUdXJuIHRoaXM6IFNFeHQxNihCaXRBbmQoaW5wdXQsIG1hc2spKSB3aGVyZSAobWFzayAm
IDB4ZmZmZikgPT0gMHhmZmZmCisgICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBTRXh0MTYo
aW5wdXQpCisgICAgICAgICAgICAgICAgaWYgKChtYXNrICYgMHhmZmZmKSA9PSAweGZmZmYpIHsK
KyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCkgPSBpbnB1dDsKKyAgICAgICAg
ICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8v
IFR1cm4gdGhpczogU0V4dDE2KEJpdEFuZChpbnB1dCwgbWFzaykpIHdoZXJlIChtYXNrICYgMHg4
MDAwKSA9PSAwCisgICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBCaXRBbmQoaW5wdXQsIGNv
bnN0ICYgMHg3ZmZmKQorICAgICAgICAgICAgICAgIGlmICghKG1hc2sgJiAweDgwMDApKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoCisgICAgICAgICAgICAgICAg
ICAgICAgICBtX3Byb2MuYWRkPFZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBC
aXRBbmQsIG1fdmFsdWUtPm9yaWdpbigpLCBpbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2luc2VydGlvblNldC5pbnNlcnQ8Q29uc3QzMlZhbHVlPigKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9pbmRleCwgbV92YWx1ZS0+b3JpZ2luKCksIG1hc2sgJiAweDdm
ZmYpKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgIGNhc2UgU0V4dDMyOgog
ICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBTRXh0MzIoY29uc3RhbnQpCiAgICAgICAgICAgICAv
LyBJbnRvIHRoaXM6IHN0YXRpY19jYXN0PGludDY0X3Q+KGNvbnN0YW50KQpAQCAtNTcxLDYgKzY4
OCwxNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUobV9w
cm9jLmFkZEludENvbnN0YW50KG1fdmFsdWUsIG1fdmFsdWUtPmNoaWxkKDApLT5hc0ludDMyKCkp
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Ly8gVHVybiB0aGlzOiBTRXh0MzIoQml0QW5kKGlucHV0LCBtYXNrKSkgd2hlcmUgKG1hc2sgJiAw
eDgwMDAwMDAwKSA9PSAwCisgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFpFeHQzMihCaXRBbmQo
aW5wdXQsIG1hc2spKQorICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUo
KSA9PSBCaXRBbmQgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5oYXNJbnQzMigpCisg
ICAgICAgICAgICAgICAgJiYgIShtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmFzSW50MzIo
KSAmIDB4ODAwMDAwMDApKSB7CisgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZSgK
KyAgICAgICAgICAgICAgICAgICAgbV9wcm9jLmFkZDxWYWx1ZT4oCisgICAgICAgICAgICAgICAg
ICAgICAgICBaRXh0MzIsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgwKSkpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7
CiAKICAgICAgICAgY2FzZSBaRXh0MzI6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
dGVzdGIzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIz
LmNwcAkocmV2aXNpb24gMTk0MDEyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3Ri
My5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDExIEBAIHVzaW5nIG5hbWVzcGFjZSBK
U0M6OkIzOwogbmFtZXNwYWNlIHsKIAogLy8gTm90aGluZyBmYW5jeSBmb3Igbm93OyB3ZSBqdXN0
IHVzZSB0aGUgZXhpc3RpbmcgV1RGIGFzc2VydGlvbiBtYWNoaW5lcnkuCi0jZGVmaW5lIENIRUNL
KHgpIFJFTEVBU0VfQVNTRVJUKHgpCisjZGVmaW5lIENIRUNLKHgpIGRvIHsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmICghISh4
KSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgIFdURlJlcG9ydEFzc2VydGlvbkZhaWx1cmUoX19G
SUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAjeCk7IFwKKyAgICB9IHdoaWxl
IChmYWxzZSkKIAogVk0qIHZtOwogCkBAIC01NjkzLDYgKzU2OTcsMTYzIEBAIHZvaWQgdGVzdENo
ZWNrTWVnYUNvbWJvKCkKICAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgJnZhbHVlIC0gMiwg
MSkgPT0gNDIpOwogfQogCit2b2lkIHRlc3RDaGVja1R3b01lZ2FDb21ib3MoKQoreworICAgIFBy
b2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7Cisg
ICAgVmFsdWUqIGJhc2UgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgVmFsdWUqIGluZGV4ID0gcm9v
dC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgcHJvYywgWkV4dDMyLCBPcmlnaW4oKSwKKyAg
ICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFRydW5jLCBP
cmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSkpOworCisgICAgVmFsdWUqIHB0
ciA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgIHByb2MsIEFkZCwgT3JpZ2luKCks
IGJhc2UsCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9j
LCBTaGwsIE9yaWdpbigpLCBpbmRleCwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25z
dDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAxKSkpOworCisgICAgVmFsdWUqIHByZWRpY2F0ZSA9
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgIHByb2MsIExlc3NUaGFuLCBPcmlnaW4o
KSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBMb2FkOFMsIE9y
aWdpbigpLCBwdHIpLAorICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgNDIpKTsKKyAgICAKKyAgICBDaGVja1ZhbHVlKiBjaGVjayA9IHJvb3QtPmFw
cGVuZE5ldzxDaGVja1ZhbHVlPihwcm9jLCBDaGVjaywgT3JpZ2luKCksIHByZWRpY2F0ZSk7Cisg
ICAgY2hlY2stPnNldEdlbmVyYXRvcigKKyAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgIEFs
bG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAg
ICAgIENIRUNLKHBhcmFtcy5zaXplKCkgPT0gMSk7CisKKyAgICAgICAgICAgIC8vIFRoaXMgc2hv
dWxkIGFsd2F5cyB3b3JrIGJlY2F1c2UgYSBmdW5jdGlvbiB0aGlzIHNpbXBsZSBzaG91bGQgbmV2
ZXIgaGF2ZSBjYWxsZWUKKyAgICAgICAgICAgIC8vIHNhdmVzLgorICAgICAgICAgICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoNDIpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
Uik7CisgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKKyAgICAgICAgICAg
IGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgQ2hlY2tWYWx1ZSogY2hlY2syID0gcm9vdC0+
YXBwZW5kTmV3PENoZWNrVmFsdWU+KHByb2MsIENoZWNrLCBPcmlnaW4oKSwgcHJlZGljYXRlKTsK
KyAgICBjaGVjazItPnNldEdlbmVyYXRvcigKKyAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAg
IEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAg
ICAgICAgIENIRUNLKHBhcmFtcy5zaXplKCkgPT0gMSk7CisKKyAgICAgICAgICAgIC8vIFRoaXMg
c2hvdWxkIGFsd2F5cyB3b3JrIGJlY2F1c2UgYSBmdW5jdGlvbiB0aGlzIHNpbXBsZSBzaG91bGQg
bmV2ZXIgaGF2ZSBjYWxsZWUKKyAgICAgICAgICAgIC8vIHNhdmVzLgorICAgICAgICAgICAgaml0
Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoNDMpLCBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUik7CisgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKKyAgICAgICAg
ICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xW
YWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksIHJvb3QtPmFwcGVuZE5ldzxD
b25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSk7CisKKyAgICBhdXRvIGNvZGUgPSBjb21w
aWxlKHByb2MpOworCisgICAgaW50OF90IHZhbHVlOworICAgIHZhbHVlID0gNDI7CisgICAgQ0hF
Q0soaW52b2tlPGludD4oKmNvZGUsICZ2YWx1ZSAtIDIsIDEpID09IDApOworICAgIHZhbHVlID0g
MTI3OworICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAmdmFsdWUgLSAyLCAxKSA9PSAwKTsK
KyAgICB2YWx1ZSA9IDQxOworICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAmdmFsdWUgLSAy
LCAxKSA9PSA0Mik7CisgICAgdmFsdWUgPSAwOworICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2Rl
LCAmdmFsdWUgLSAyLCAxKSA9PSA0Mik7CisgICAgdmFsdWUgPSAtMTsKKyAgICBDSEVDSyhpbnZv
a2U8aW50PigqY29kZSwgJnZhbHVlIC0gMiwgMSkgPT0gNDIpOworfQorCit2b2lkIHRlc3RDaGVj
a1R3b05vblJlZHVuZGFudE1lZ2FDb21ib3MoKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAg
IAorICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9j
ayogdGhlbkNhc2UgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogZWxzZUNhc2Ug
PSBwcm9jLmFkZEJsb2NrKCk7CisgICAgCisgICAgVmFsdWUqIGJhc2UgPSByb290LT5hcHBlbmRO
ZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BS
MCk7CisgICAgVmFsdWUqIGluZGV4ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAg
cHJvYywgWkV4dDMyLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigK
KyAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIxKSkpOworICAgIFZhbHVlKiBicmFuY2hQcmVkaWNhdGUgPSByb290LT5hcHBlbmROZXc8
VmFsdWU+KAorICAgICAgICBwcm9jLCBCaXRBbmQsIE9yaWdpbigpLAorICAgICAgICByb290LT5h
cHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAg
ICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigp
LCBHUFJJbmZvOjphcmd1bWVudEdQUjIpKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0
MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDB4ZmYpKTsKKworICAgIFZhbHVlKiBwdHIgPSByb290
LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICBwcm9jLCBBZGQsIE9yaWdpbigpLCBiYXNlLAor
ICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgU2hsLCBP
cmlnaW4oKSwgaW5kZXgsCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgMSkpKTsKKworICAgIFZhbHVlKiBjaGVja1ByZWRpY2F0ZSA9IHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgIHByb2MsIExlc3NUaGFuLCBPcmlnaW4oKSwK
KyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBMb2FkOFMsIE9yaWdp
bigpLCBwdHIpLAorICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgNDIpKTsKKworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAg
ICAgICBwcm9jLCBCcmFuY2gsIE9yaWdpbigpLCBicmFuY2hQcmVkaWNhdGUsCisgICAgICAgIEZy
ZXF1ZW50ZWRCbG9jayh0aGVuQ2FzZSksIEZyZXF1ZW50ZWRCbG9jayhlbHNlQ2FzZSkpOworICAg
IAorICAgIENoZWNrVmFsdWUqIGNoZWNrID0gdGhlbkNhc2UtPmFwcGVuZE5ldzxDaGVja1ZhbHVl
Pihwcm9jLCBDaGVjaywgT3JpZ2luKCksIGNoZWNrUHJlZGljYXRlKTsKKyAgICBjaGVjay0+c2V0
R2VuZXJhdG9yKAorICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0
Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgQ0hFQ0socGFy
YW1zLnNpemUoKSA9PSAxKTsKKworICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgYWx3YXlzIHdv
cmsgYmVjYXVzZSBhIGZ1bmN0aW9uIHRoaXMgc2ltcGxlIHNob3VsZCBuZXZlciBoYXZlIGNhbGxl
ZQorICAgICAgICAgICAgLy8gc2F2ZXMuCisgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMig0MiksIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAg
ICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOworICAgICAgICAgICAgaml0LnJldCgpOwor
ICAgICAgICB9KTsKKyAgICB0aGVuQ2FzZS0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAg
ICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksIHRoZW5DYXNlLT5hcHBlbmROZXc8Q29uc3QzMlZh
bHVlPihwcm9jLCBPcmlnaW4oKSwgNDMpKTsKKworICAgIENoZWNrVmFsdWUqIGNoZWNrMiA9IGVs
c2VDYXNlLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4ocHJvYywgQ2hlY2ssIE9yaWdpbigpLCBjaGVj
a1ByZWRpY2F0ZSk7CisgICAgY2hlY2syLT5zZXRHZW5lcmF0b3IoCisgICAgICAgIFsmXSAoQ0Nh
bGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7
CisgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNo
KGppdCk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuc2l6ZSgpID09IDEpOworCisgICAgICAg
ICAgICAvLyBUaGlzIHNob3VsZCBhbHdheXMgd29yayBiZWNhdXNlIGEgZnVuY3Rpb24gdGhpcyBz
aW1wbGUgc2hvdWxkIG5ldmVyIGhhdmUgY2FsbGVlCisgICAgICAgICAgICAvLyBzYXZlcy4KKyAg
ICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDQ0KSwgR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3Vl
KCk7CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgIGVsc2VDYXNlLT5h
cHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwg
ZWxzZUNhc2UtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCA0NSkpOwor
CisgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKworICAgIGludDhfdCB2YWx1ZTsKKwor
ICAgIHZhbHVlID0gNDI7CisgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsICZ2YWx1ZSAtIDIs
IDEsIHRydWUpID09IDQzKTsKKyAgICB2YWx1ZSA9IDEyNzsKKyAgICBDSEVDSyhpbnZva2U8aW50
PigqY29kZSwgJnZhbHVlIC0gMiwgMSwgdHJ1ZSkgPT0gNDMpOworICAgIHZhbHVlID0gNDE7Cisg
ICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsICZ2YWx1ZSAtIDIsIDEsIHRydWUpID09IDQyKTsK
KyAgICB2YWx1ZSA9IDA7CisgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsICZ2YWx1ZSAtIDIs
IDEsIHRydWUpID09IDQyKTsKKyAgICB2YWx1ZSA9IC0xOworICAgIENIRUNLKGludm9rZTxpbnQ+
KCpjb2RlLCAmdmFsdWUgLSAyLCAxLCB0cnVlKSA9PSA0Mik7CisKKyAgICB2YWx1ZSA9IDQyOwor
ICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAmdmFsdWUgLSAyLCAxLCBmYWxzZSkgPT0gNDUp
OworICAgIHZhbHVlID0gMTI3OworICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAmdmFsdWUg
LSAyLCAxLCBmYWxzZSkgPT0gNDUpOworICAgIHZhbHVlID0gNDE7CisgICAgQ0hFQ0soaW52b2tl
PGludD4oKmNvZGUsICZ2YWx1ZSAtIDIsIDEsIGZhbHNlKSA9PSA0NCk7CisgICAgdmFsdWUgPSAw
OworICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAmdmFsdWUgLSAyLCAxLCBmYWxzZSkgPT0g
NDQpOworICAgIHZhbHVlID0gLTE7CisgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsICZ2YWx1
ZSAtIDIsIDEsIGZhbHNlKSA9PSA0NCk7Cit9CisKIHZvaWQgdGVzdENoZWNrQWRkSW1tKCkKIHsK
ICAgICBQcm9jZWR1cmUgcHJvYzsKQEAgLTcyNzAsNiArNzQzMSwyMzggQEAgdm9pZCB0ZXN0VHJ1
bmNTRXh0MzIoaW50MzJfdCB2YWx1ZSkKICAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludDMyX3Q+
KHByb2MsIHZhbHVlKSA9PSB2YWx1ZSk7CiB9CiAKK3ZvaWQgdGVzdFNFeHQ4KGludDMyX3QgdmFs
dWUpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2Mu
YWRkQmxvY2soKTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAg
cHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigK
KyAgICAgICAgICAgIHByb2MsIFNFeHQ4LCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLAor
ICAgICAgICAgICAgICAgIHJvb3QtPmFwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9y
aWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKSkpOworCisgICAgQ0hFQ0soY29tcGlsZUFu
ZFJ1bjxpbnQzMl90Pihwcm9jLCB2YWx1ZSkgPT0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oc3RhdGlj
X2Nhc3Q8aW50OF90Pih2YWx1ZSkpKTsKK30KKwordm9pZCB0ZXN0U0V4dDhGb2xkKGludDMyX3Qg
dmFsdWUpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHBy
b2MuYWRkQmxvY2soKTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAg
ICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVl
PigKKyAgICAgICAgICAgIHByb2MsIFNFeHQ4LCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3Qt
PmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCB2YWx1ZSkpKTsKKworICAg
IENIRUNLKGNvbXBpbGVBbmRSdW48aW50MzJfdD4ocHJvYykgPT0gc3RhdGljX2Nhc3Q8aW50MzJf
dD4oc3RhdGljX2Nhc3Q8aW50OF90Pih2YWx1ZSkpKTsKK30KKwordm9pZCB0ZXN0U0V4dDhTRXh0
OChpbnQzMl90IHZhbHVlKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sq
IHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1
ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBTRXh0OCwgT3JpZ2luKCksCisgICAgICAg
ICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIFNFeHQ4
LCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAg
ICAgICAgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgICAgICAgICAg
ICAgIHJvb3QtPmFwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjApKSkpKTsKKworICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50MzJf
dD4ocHJvYywgdmFsdWUpID09IHN0YXRpY19jYXN0PGludDMyX3Q+KHN0YXRpY19jYXN0PGludDhf
dD4odmFsdWUpKSk7Cit9CisKK3ZvaWQgdGVzdFNFeHQ4U0V4dDE2KGludDMyX3QgdmFsdWUpCit7
CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxv
Y2soKTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywg
UmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAg
ICAgICAgIHByb2MsIFNFeHQ4LCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5l
dzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgU0V4dDE2LCBPcmlnaW4oKSwKKyAgICAg
ICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgICAgICBw
cm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgICAgIHJvb3QtPmFwZW5kTmV3
PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjAp
KSkpKTsKKworICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50MzJfdD4ocHJvYywgdmFsdWUpID09
IHN0YXRpY19jYXN0PGludDMyX3Q+KHN0YXRpY19jYXN0PGludDhfdD4odmFsdWUpKSk7Cit9CisK
K3ZvaWQgdGVzdFNFeHQ4Qml0QW5kKGludDMyX3QgdmFsdWUsIGludDMyX3QgbWFzaykKK3sKKyAg
ICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygp
OworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9jLCBSZXR1
cm4sIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAg
ICAgcHJvYywgU0V4dDgsIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZh
bHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBCaXRBbmQsIE9yaWdpbigpLAorICAgICAgICAg
ICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgIHByb2Ms
IFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFy
Z3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKSwK
KyAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmln
aW4oKSwgbWFzaykpKSk7CisKKyAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludDMyX3Q+KHByb2Ms
IHZhbHVlKSA9PSBzdGF0aWNfY2FzdDxpbnQzMl90PihzdGF0aWNfY2FzdDxpbnQ4X3Q+KHZhbHVl
ICYgbWFzaykpKTsKK30KKwordm9pZCB0ZXN0Qml0QW5kU0V4dDgoaW50MzJfdCB2YWx1ZSwgaW50
MzJfdCBtYXNrKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3Qg
PSBwcm9jLmFkZEJsb2NrKCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisg
ICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxW
YWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBCaXRBbmQsIE9yaWdpbigpLAorICAgICAgICAgICAg
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBTRXh0OCwgT3Jp
Z2luKCksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAg
ICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgICAgICBy
b290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86
OmFyZ3VtZW50R1BSMCkpKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBtYXNrKSkpOworCisgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxp
bnQzMl90Pihwcm9jLCB2YWx1ZSkgPT0gKHN0YXRpY19jYXN0PGludDMyX3Q+KHN0YXRpY19jYXN0
PGludDhfdD4odmFsdWUpKSAmIG1hc2spKTsKK30KKwordm9pZCB0ZXN0U0V4dDE2KGludDMyX3Qg
dmFsdWUpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHBy
b2MuYWRkQmxvY2soKTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAg
ICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVl
PigKKyAgICAgICAgICAgIHByb2MsIFNFeHQxNiwgT3JpZ2luKCksCisgICAgICAgICAgICByb290
LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4o
KSwKKyAgICAgICAgICAgICAgICByb290LT5hcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSkpKTsKKworICAgIENIRUNLKGNvbXBp
bGVBbmRSdW48aW50MzJfdD4ocHJvYywgdmFsdWUpID09IHN0YXRpY19jYXN0PGludDMyX3Q+KHN0
YXRpY19jYXN0PGludDE2X3Q+KHZhbHVlKSkpOworfQorCit2b2lkIHRlc3RTRXh0MTZGb2xkKGlu
dDMyX3QgdmFsdWUpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9v
dCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigK
KyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFNFeHQxNiwgT3JpZ2luKCksCisgICAgICAgICAg
ICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgdmFsdWUpKSk7
CisKKyAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludDMyX3Q+KHByb2MpID09IHN0YXRpY19jYXN0
PGludDMyX3Q+KHN0YXRpY19jYXN0PGludDE2X3Q+KHZhbHVlKSkpOworfQorCit2b2lkIHRlc3RT
RXh0MTZTRXh0MTYoaW50MzJfdCB2YWx1ZSkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBC
YXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIHJvb3QtPmFwcGVuZE5ldzxD
b250cm9sVmFsdWU+KAorICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICBy
b290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgU0V4dDE2LCBPcmlnaW4o
KSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAg
cHJvYywgU0V4dDE2LCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8
VmFsdWU+KAorICAgICAgICAgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAg
ICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSkpKSk7CisKKyAgICBDSEVDSyhjb21waWxl
QW5kUnVuPGludDMyPihwcm9jLCB2YWx1ZSkgPT0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oc3RhdGlj
X2Nhc3Q8aW50MTZfdD4odmFsdWUpKSk7Cit9CisKK3ZvaWQgdGVzdFNFeHQxNlNFeHQ4KGludDMy
X3QgdmFsdWUpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9
IHByb2MuYWRkQmxvY2soKTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAg
ICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZh
bHVlPigKKyAgICAgICAgICAgIHByb2MsIFNFeHQxNiwgT3JpZ2luKCksCisgICAgICAgICAgICBy
b290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIFNFeHQ4LCBPcmln
aW4oKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAg
ICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgICAgIHJv
b3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6
YXJndW1lbnRHUFIwKSkpKSk7CisKKyAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludDMyPihwcm9j
LCB2YWx1ZSkgPT0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oc3RhdGljX2Nhc3Q8aW50OF90Pih2YWx1
ZSkpKTsKK30KKwordm9pZCB0ZXN0U0V4dDE2Qml0QW5kKGludDMyX3QgdmFsdWUsIGludDMyX3Qg
bWFzaykKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJv
Yy5hZGRCbG9jaygpOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAg
ICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+
KAorICAgICAgICAgICAgcHJvYywgU0V4dDE2LCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgQml0QW5kLCBPcmlnaW4o
KSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAg
ICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgICAgIHJvb3Qt
PmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIwKSksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1
ZT4ocHJvYywgT3JpZ2luKCksIG1hc2spKSkpOworCisgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxp
bnQzMl90Pihwcm9jLCB2YWx1ZSkgPT0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oc3RhdGljX2Nhc3Q8
aW50MTZfdD4odmFsdWUgJiBtYXNrKSkpOworfQorCit2b2lkIHRlc3RCaXRBbmRTRXh0MTYoaW50
MzJfdCB2YWx1ZSwgaW50MzJfdCBtYXNrKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJh
c2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PENv
bnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgIHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBCaXRBbmQsIE9yaWdpbigp
LAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICBw
cm9jLCBTRXh0MTYsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxW
YWx1ZT4oCisgICAgICAgICAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAg
ICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9y
aWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKSksCisgICAgICAgICAgICByb290LT5hcHBl
bmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbWFzaykpKTsKKworICAgIENIRUNL
KGNvbXBpbGVBbmRSdW48aW50MzJfdD4ocHJvYywgdmFsdWUpID09IChzdGF0aWNfY2FzdDxpbnQz
Ml90PihzdGF0aWNfY2FzdDxpbnQxNl90Pih2YWx1ZSkpICYgbWFzaykpOworfQorCit2b2lkIHRl
c3RTRXh0MzJCaXRBbmQoaW50MzJfdCB2YWx1ZSwgaW50MzJfdCBtYXNrKQoreworICAgIFByb2Nl
ZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAg
cm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3Jp
Z2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9j
LCBTRXh0MzIsIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigK
KyAgICAgICAgICAgICAgICBwcm9jLCBCaXRBbmQsIE9yaWdpbigpLAorICAgICAgICAgICAgICAg
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgIHByb2MsIFRydW5j
LCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50
UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKSwKKyAgICAg
ICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
bWFzaykpKSk7CisKKyAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludDY0X3Q+KHByb2MsIHZhbHVl
KSA9PSBzdGF0aWNfY2FzdDxpbnQ2NF90Pih2YWx1ZSAmIG1hc2spKTsKK30KKwordm9pZCB0ZXN0
Qml0QW5kU0V4dDMyKGludDMyX3QgdmFsdWUsIGludDY0X3QgbWFzaykKK3sKKyAgICBQcm9jZWR1
cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIHJv
b3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdp
bigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywg
Qml0QW5kLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisg
ICAgICAgICAgICAgICAgcHJvYywgU0V4dDMyLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICBy
b290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgICAgICBwcm9jLCBUcnVuYywg
T3JpZ2luKCksCisgICAgICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJl
Z1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSkpLAorICAgICAg
ICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIG1hc2sp
KSk7CisKKyAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludDY0X3Q+KHByb2MsIHZhbHVlKSA9PSAo
c3RhdGljX2Nhc3Q8aW50NjRfdD4odmFsdWUpICYgbWFzaykpOworfQorCiB2b2lkIHRlc3RCYXNp
Y1NlbGVjdCgpCiB7CiAgICAgUHJvY2VkdXJlIHByb2M7CkBAIC04MzQ2LDYgKzg3MzksOCBAQCB2
b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAgICAgUlVOKHRlc3RTaW1wbGVDaGVjaygpKTsK
ICAgICBSVU4odGVzdENoZWNrTGVzc1RoYW4oKSk7CiAgICAgUlVOKHRlc3RDaGVja01lZ2FDb21i
bygpKTsKKyAgICBSVU4odGVzdENoZWNrVHdvTWVnYUNvbWJvcygpKTsKKyAgICBSVU4odGVzdENo
ZWNrVHdvTm9uUmVkdW5kYW50TWVnYUNvbWJvcygpKTsKICAgICBSVU4odGVzdENoZWNrQWRkSW1t
KCkpOwogICAgIFJVTih0ZXN0Q2hlY2tBZGRJbW1Db21tdXRlKCkpOwogICAgIFJVTih0ZXN0Q2hl
Y2tBZGRJbW1Tb21lUmVnaXN0ZXIoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpck9wY29kZS5vcGNvZGVzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHJldmlzaW9uIDE5NDAxMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHdvcmtpbmcgY29weSkKQEAg
LTI4OCw2ICsyODgsMjYgQEAgTW92ZTMyIFU6RywgRDpHCiBTaWduRXh0ZW5kMzJUb1B0ciBVOkcs
IEQ6RwogICAgIFRtcCwgVG1wCiAKK1plcm9FeHRlbmQ4VG8zMiBVOkcsIEQ6RworICAgIFRtcCwg
VG1wCisgICAgQWRkciwgVG1wIGFzIGxvYWQ4CisgICAgSW5kZXgsIFRtcCBhcyBsb2FkOAorCitT
aWduRXh0ZW5kOFRvMzIgVTpHLCBEOkcKKyAgICBUbXAsIFRtcAorICAgIEFkZHIsIFRtcCBhcyBs
b2FkOFNpZ25lZEV4dGVuZFRvMzIKKyAgICBJbmRleCwgVG1wIGFzIGxvYWQ4U2lnbmVkRXh0ZW5k
VG8zMgorCitaZXJvRXh0ZW5kMTZUbzMyIFU6RywgRDpHCisgICAgVG1wLCBUbXAKKyAgICBBZGRy
LCBUbXAgYXMgbG9hZDE2CisgICAgSW5kZXgsIFRtcCBhcyBsb2FkMTYKKworU2lnbkV4dGVuZDE2
VG8zMiBVOkcsIEQ6RworICAgIFRtcCwgVG1wCisgICAgQWRkciwgVG1wIGFzIGxvYWQxNlNpZ25l
ZEV4dGVuZFRvMzIKKyAgICBJbmRleCwgVG1wIGFzIGxvYWQxNlNpZ25lZEV4dGVuZFRvMzIKKwog
TW92ZUZsb2F0IFU6RiwgRDpGCiAgICAgVG1wLCBUbXAgYXMgbW92ZURvdWJsZQogICAgIEFkZHIs
IFRtcCBhcyBsb2FkRmxvYXQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29t
bW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24u
aAkocmV2aXNpb24gMTk0MDEyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21t
b24uaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiAvLyBXZSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbiBleHBlcmltZW50YWwg
dHJhbnNpdGlvbiBmcm9tIExMVk0gdG8gQjMgYXMgdGhlIGJhY2tlbmQgZm9yIHRoZSBGVEwuIFdl
IGRvbid0CiAvLyB5ZXQga25vdyBob3cgaXQgd2lsbCB0dXJuIG91dC4gRm9yIG5vdywgdGhpcyBm
bGFnIHdpbGwgY29udHJvbCB3aGV0aGVyIEZUTCB1c2VzIEIzLiBSZW1lbWJlciB0byBzZXQgdGhp
cwogLy8gdG8gMCBiZWZvcmUgY29tbWl0dGluZyEKLSNkZWZpbmUgRlRMX1VTRVNfQjMgMAorI2Rl
ZmluZSBGVExfVVNFU19CMyAxCiAKIHN0cnVjdCBOb2RlOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>267280</attachid>
            <date>2015-12-13 20:26:34 -0800</date>
            <delta_ts>2015-12-14 10:14:44 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>57622</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk0MDIzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcyIEBA
CisyMDE1LTEyLTEzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QjMtPkFpciBjb21wYXJlLWJyYW5jaCBmdXNpb24gc2hvdWxkIGZ1c2UgZXZlbiBpZiB0aGUgcmVz
dWx0IG9mIHRoZSBjb21wYXJpc29uIGlzIHVzZWQgbW9yZSB0aGFuIG9uY2UKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjE5OAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElmIHdlIGhhdmUgYSBjb21wYXJp
c29uIG9wZXJhdGlvbiB0aGF0IGlzIGJyYW5jaGVkIG9uIGZyb20gbXVsdGlwbGUgcGxhY2VzLCB0
aGVuIHdlIHdlcmUKKyAgICAgICAgcHJldmlvdXNseSBleGVjdXRpbmcgdGhlIGNvbXBhcmlzb24g
dG8gZ2V0IGEgYm9vbGVhbiByZXN1bHQgaW4gYSByZWdpc3RlciBhbmQgdGhlbiB3ZSB3ZXJlCisg
ICAgICAgIHRlc3RpbmcvYnJhbmNoaW5nIG9uIHRoYXQgcmVnaXN0ZXIgaW4gbXVsdGlwbGUgcGxh
Y2VzLiBUaGlzIGlzIGFjdHVhbGx5IGxlc3MgZWZmaWNpZW50IHRoYW4KKyAgICAgICAganVzdCBm
dXNpbmcgdGhlIGNvbXBhcmUvYnJhbmNoIG11bHRpcGxlIHRpbWVzLCBldmVuIHRob3VnaCB0aGlz
IG1lYW5zIHRoYXQgdGhlIGNvbXBhcmlzb24KKyAgICAgICAgZXhlY3V0ZXMgbXVsdGlwbGUgdGlt
ZXMuIFRoaXMgd291bGQgb25seSBiZSBiYWQgaWYgdGhlIGNvbXBhcmlzb24gZnVzZWQgbG9hZHMg
bXVsdGlwbGUgdGltZXMsCisgICAgICAgIHNpbmNlIGR1cGxpY2F0aW5nIGxvYWRzIGlzIGJvdGgg
d3JvbmcgYW5kIGluZWZmaWNpZW50LiBTbywgdGhpcyBhZGRzIHRoZSBub3Rpb24gb2Ygc2hhcmlu
ZyB0bworICAgICAgICBjb21wYXJlL2JyYW5jaCBmdXNpb24uIElmIGEgY29tcGFyZSBpcyBzaGFy
ZWQgYnkgbXVsdGlwbGUgYnJhbmNoZXMsIHRoZW4gd2UgcmVmdXNlIHRvIGZ1c2UKKyAgICAgICAg
dGhlIGxvYWQuCisKKyAgICAgICAgVG8gd3JpdGUgdGhlIHRlc3QsIEkgbmVlZGVkIHRvIHplcm8t
ZXh0ZW5kIDggdG8gMzIuIEluIHRoZSBwcm9jZXNzIG9mIHRoaW5raW5nIGFib3V0IGhvdyB0bwor
ICAgICAgICBkbyB0aGlzLCBJIHJlYWxpemVkIHRoYXQgd2UgbmVlZGVkIGxvd2VyaW5ncyBmb3Ig
U0V4dDgvU0V4dDE2LiBBbmQgSSByZWFsaXplZCB0aGF0IHRoZQorICAgICAgICBsb3dlcmluZ3Mg
Zm9yIHRoZSBvdGhlciBleHRlbnNpb24gb3BlcmF0aW9ucyB3ZXJlIG5vdCBmdWxseSBmbGVzaGVk
IG91dDsgZm9yIGV4YW1wbGUgdGhleQorICAgICAgICB3ZXJlIGluY2FwYWJsZSBvZiBsb2FkIGZ1
c2lvbi4gVGhpcyBwYXRjaCBmaXhlcyB0aGlzIGFuZCBhbHNvIGFkZHMgc29tZSBzbWFydCBzdHJl
bmd0aAorICAgICAgICByZWR1Y3Rpb25zIGZvciBCaXRBbmQoQHgsIDB4ZmYvMHhmZmZmLzB4ZmZm
ZmZmZmYpIC0gYWxsIG9mIHdoaWNoIHNob3VsZCBiZSBsb3dlcmVkIHRvIGEgemVybworICAgICAg
ICBleHRlbnNpb24uCisKKyAgICAgICAgVGhpcyBpcyBhIGJpZyB3aW4gb24gYXNtLmpzIGNvZGUu
IEl0J3Mgbm90IGVub3VnaCB0byBicmlkZ2UgdGhlIGdhcCB0byBMTFZNLCBidXQgaXQncyBhIGh1
Z2UKKyAgICAgICAgc3RlcCBpbiB0aGF0IGRpcmVjdGlvbi4KKworICAgICAgICAqIGFzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
clg4NkNvbW1vbjo6bG9hZDhTaWduZWRFeHRlbmRUbzMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9B
c3NlbWJsZXJYODZDb21tb246Onplcm9FeHRlbmQ4VG8zMik6CisgICAgICAgIChKU0M6Ok1hY3Jv
QXNzZW1ibGVyWDg2Q29tbW9uOjpzaWduRXh0ZW5kOFRvMzIpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlclg4NkNvbW1vbjo6bG9hZDE2KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJYODZDb21tb246OmxvYWQxNlNpZ25lZEV4dGVuZFRvMzIpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlclg4NkNvbW1vbjo6emVyb0V4dGVuZDE2VG8zMik6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpzaWduRXh0ZW5kMTZUbzMyKToKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJYODZDb21tb246OnN0b3JlMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKToK
KyAgICAgICAgKiBhc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6Olg4NkFz
c2VtYmxlcjo6bW92emJsX3JyKToKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjptb3ZzYmxf
cnIpOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6Om1vdnp3bF9ycik6CisgICAgICAgIChK
U0M6Olg4NkFzc2VtYmxlcjo6bW92c3dsX3JyKToKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVy
OjpjbW92bF9ycik6CisgICAgICAgICogYjMvQjNMb3dlclRvQWlyLmNwcDoKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6Y3JlYXRlR2VuZXJpY0NvbXBhcmUpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpsb3dlcik6CisgICAgICAgICogYjMvQjNSZWR1Y2VT
dHJlbmd0aC5jcHA6CisgICAgICAgICogYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzOgorICAgICAg
ICAqIGIzL3Rlc3RiMy5jcHA6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Q2hlY2tNZWdhQ29tYm8p
OgorICAgICAgICAoSlNDOjpCMzo6dGVzdENoZWNrVHdvTWVnYUNvbWJvcyk6CisgICAgICAgIChK
U0M6OkIzOjp0ZXN0Q2hlY2tUd29Ob25SZWR1bmRhbnRNZWdhQ29tYm9zKToKKyAgICAgICAgKEpT
Qzo6QjM6OnRlc3RDaGVja0FkZEltbSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0VHJ1bmNTRXh0
MzIpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdFNFeHQ4KToKKyAgICAgICAgKEpTQzo6QjM6OnRl
c3RTRXh0OEZvbGQpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdFNFeHQ4U0V4dDgpOgorICAgICAg
ICAoSlNDOjpCMzo6dGVzdFNFeHQ4U0V4dDE2KToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RTRXh0
OEJpdEFuZCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Qml0QW5kU0V4dDgpOgorICAgICAgICAo
SlNDOjpCMzo6dGVzdFNFeHQxNik6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0U0V4dDE2Rm9sZCk6
CisgICAgICAgIChKU0M6OkIzOjp0ZXN0U0V4dDE2U0V4dDE2KToKKyAgICAgICAgKEpTQzo6QjM6
OnRlc3RTRXh0MTZTRXh0OCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0U0V4dDE2Qml0QW5kKToK
KyAgICAgICAgKEpTQzo6QjM6OnRlc3RCaXRBbmRTRXh0MTYpOgorICAgICAgICAoSlNDOjpCMzo6
dGVzdFNFeHQzMkJpdEFuZCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Qml0QW5kU0V4dDMyKToK
KyAgICAgICAgKEpTQzo6QjM6OnRlc3RCYXNpY1NlbGVjdCk6CisgICAgICAgIChKU0M6OkIzOjpy
dW4pOgorCiAyMDE1LTEyLTEzICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29t
PgogCiAgICAgICAgIFtKU0NdIFNob3VsZCBub3QgZW1pdCBnZXRfYnlfaWQgZm9yIGluZGV4ZWQg
cHJvcGVydHkgYWNjZXNzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCShyZXZpc2lvbiAxOTQwMTIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29t
bW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0NCw2ICs2NDQsMTYgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgbV9hc3NlbWJsZXIubW92c2JsX21yKGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJh
c2UsIGRlc3QpOwogICAgIH0KKworICAgIHZvaWQgemVyb0V4dGVuZDhUbzMyKFJlZ2lzdGVySUQg
c3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5tb3Z6Ymxf
cnIoc3JjLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzaWduRXh0ZW5kOFRvMzIoUmVn
aXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVy
Lm1vdnNibF9ycihzcmMsIGRlc3QpOworICAgIH0KICAgICAKICAgICB2b2lkIGxvYWQxNihCYXNl
SW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKQEAgLTY2NSw2ICs2NzUsMTYg
QEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5tb3Zzd2xfbXIoYWRkcmVzcy5vZmZzZXQs
IGFkZHJlc3MuYmFzZSwgZGVzdCk7CiAgICAgfQogCisgICAgdm9pZCB6ZXJvRXh0ZW5kMTZUbzMy
KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5tb3Z6d2xfcnIoc3JjLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzaWduRXh0
ZW5kMTZUbzMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5tb3Zzd2xfcnIoc3JjLCBkZXN0KTsKKyAgICB9CisgICAgCiAgICAgRGF0
YUxhYmVsMzIgc3RvcmUzMldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goUmVnaXN0ZXJJRCBzcmMsIEFk
ZHJlc3MgYWRkcmVzcykKICAgICB7CiAgICAgICAgIHBhZEJlZm9yZVBhdGNoKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHJldmlz
aW9uIDE5NDAxMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1i
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3MTksNiArMTcxOSwyMSBAQCBwdWJsaWM6CiAgICAg
ICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcDgoT1AyX01PVlpYX0d2RWIsIGRzdCwgc3JjKTsKICAg
ICB9CiAKKyAgICB2b2lkIG1vdnNibF9ycihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3Qp
CisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3A4KE9QMl9NT1ZTWF9HdkViLCBk
c3QsIHNyYyk7CisgICAgfQorCisgICAgdm9pZCBtb3Z6d2xfcnIoUmVnaXN0ZXJJRCBzcmMsIFJl
Z2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wOChPUDJf
TU9WWlhfR3ZFdywgZHN0LCBzcmMpOworICAgIH0KKworICAgIHZvaWQgbW92c3dsX3JyKFJlZ2lz
dGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3
b0J5dGVPcDgoT1AyX01PVlNYX0d2RXcsIGRzdCwgc3JjKTsKKyAgICB9CisKICAgICB2b2lkIGNt
b3ZsX3JyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCiAg
ICAgewogICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3AoY21vdmNjKGNvbmQpLCBkc3QsIHNy
Yyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2
aXNpb24gMTk0MDEyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTg3MywyMCArODczLDE0NSBAQCBwcml2YXRlOgogICAgICAg
ICBjb25zdCBDb21wYXJlRmxvYXRGdW5jdG9yJiBjb21wYXJlRmxvYXQsIC8vIFNpZ25hdHVyZTog
KEFyZyBkb3VibGVDb25kLCBBcmcsIEFyZykgLT4gSW5zdAogICAgICAgICBib29sIGludmVydGVk
ID0gZmFsc2UpCiAgICAgeworICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIHRvdGFsbHkgaGFwcHkg
dG8gbWF0Y2ggY29tcGFyaXNvbnMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBjb21wdXRlZCBlbHNl
d2hlcmUKKyAgICAgICAgLy8gc2luY2Ugb24gbW9zdCBhcmNoaXRlY3R1cmVzLCB0aGUgY29zdCBv
ZiBicmFuY2hpbmcgb24gYSBwcmV2aW91c2x5IGNvbXB1dGVkIGNvbXBhcmlzb24KKyAgICAgICAg
Ly8gcmVzdWx0IGlzIGFsbW9zdCBhbHdheXMgaGlnaGVyIHRoYW4ganVzdCBkb2luZyBhbm90aGVy
IGZ1c2VkIGNvbXBhcmUvYnJhbmNoLiBUaGUgb25seSB0aW1lCisgICAgICAgIC8vIGl0IGNvdWxk
IGJlIHdvcnNlIGlzIGlmIHdlIGhhdmUgYSBiaW5hcnkgY29tcGFyaXNvbiBhbmQgYm90aCBvcGVy
YW5kcyBhcmUgdmFyaWFibGVzIChub3QKKyAgICAgICAgLy8gY29uc3RhbnRzKSwgYW5kIHdlIGVu
Y291bnRlciByZWdpc3RlciBwcmVzc3VyZS4gRXZlbiBpbiB0aGlzIGNhc2UsIGR1cGxpY2F0aW5n
IHRoZSBjb21wYXJlCisgICAgICAgIC8vIHNvIHRoYXQgd2UgY2FuIGZ1c2UgaXQgdG8gdGhlIGJy
YW5jaCB3aWxsIGJlIG1vcmUgZWZmaWNpZW50IG1vc3Qgb2YgdGhlIHRpbWUsIHNpbmNlCisgICAg
ICAgIC8vIHJlZ2lzdGVyIHByZXNzdXJlIGlzIG5vdCAqdGhhdCogY29tbW9uLiBGb3IgdGhpcyBy
ZWFzb24sIHRoaXMgYWxnb3JpdGhtIHdpbGwgYWx3YXlzCisgICAgICAgIC8vIGR1cGxpY2F0ZSB0
aGUgY29tcGFyaXNvbi4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gSG93ZXZlciwgd2UgY2Fubm90
IGR1cGxpY2F0ZSBsb2Fkcy4gVGhlIGNhbkJlSW50ZXJuYWwoKSBvbiBhIGxvYWQgd2lsbCBhc3N1
bWUgdGhhdCB3ZQorICAgICAgICAvLyBhbHJlYWR5IHZhbGlkYXRlZCBjYW5CZUludGVybmFsKCkg
b24gYWxsIG9mIHRoZSB2YWx1ZXMgdGhhdCBnb3QgdXMgdG8gdGhlIGxvYWQuIFNvLCBldmVuCisg
ICAgICAgIC8vIGlmIHdlIGFyZSBzaGFyaW5nIGEgdmFsdWUsIHdlIHN0aWxsIG5lZWQgdG8gY2Fs
bCBjYW5CZUludGVybmFsKCkgZm9yIHRoZSBwdXJwb3NlIG9mCisgICAgICAgIC8vIHRyYWNraW5n
IHdoZXRoZXIgd2UgYXJlIHN0aWxsIGluIGdvb2Qgc2hhcGUgdG8gZnVzZSBsb2Fkcy4KKyAgICAg
ICAgLy8KKyAgICAgICAgLy8gV2UgY291bGQgZXZlbiBoYXZlIGEgY2hhaW4gb2YgY29tcGFyZSB2
YWx1ZXMgdGhhdCB3ZSBmdXNlLCBhbmQgYW55IG1lbWJlciBvZiB0aGUgY2hhaW4KKyAgICAgICAg
Ly8gY291bGQgYmUgc2hhcmVkLiBPbmNlIGFueSBvZiB0aGVtIGFyZSBzaGFyZWQsIHRoZW4gdGhl
IHNoYXJlZCBvbmUncyB0cmFuc2l0aXZlIGNoaWxkcmVuCisgICAgICAgIC8vIGNhbm5vdCBiZSBs
b2NrZWQgKGkuZS4gY29tbWl0SW50ZXJuYWwoKSkuIEJ1dCBpZiBub25lIG9mIHRoZW0gYXJlIHNo
YXJlZCwgdGhlbiB3ZSB3YW50IHRvCisgICAgICAgIC8vIGxvY2sgYWxsIG9mIHRoZW0gYmVjYXVz
ZSB0aGF0J3MgYSBwcmVyZXF1aXNpdGUgdG8gZnVzaW5nIHRoZSBsb2FkcyBzbyB0aGF0IHRoZSBs
b2FkcyBkb24ndAorICAgICAgICAvLyBnZXQgZHVwbGljYXRlZC4gRm9yIGV4YW1wbGUsIHdlIG1p
Z2h0IGhhdmU6IAorICAgICAgICAvLworICAgICAgICAvLyAgICAgQHRtcDEgPSBMZXNzVGhhbihA
YSwgQGIpCisgICAgICAgIC8vICAgICBAdG1wMiA9IEVxdWFsKEB0bXAxLCAwKQorICAgICAgICAv
LyAgICAgQnJhbmNoKEB0bXAyKQorICAgICAgICAvLworICAgICAgICAvLyBJZiBlaXRoZXIgQGEg
b3IgQGIgYXJlIGxvYWRzLCB0aGVuIHdlIHdhbnQgdG8gaGF2ZSBsb2NrZWQgQHRtcDEgYW5kIEB0
bXAyIHNvIHRoYXQgdGhleQorICAgICAgICAvLyBkb24ndCBlbWl0IHRoZSBsb2FkcyBhIHNlY29u
ZCB0aW1lLiBCdXQgaWYgd2UgaGFkIGFub3RoZXIgdXNlIG9mIEB0bXAyLCB0aGVuIHdlIGNhbm5v
dAorICAgICAgICAvLyBsb2NrIEB0bXAxIChvciBAYSBvciBAYikgYmVjYXVzZSB0aGVuIHdlJ2xs
IGdldCBpbnRvIHRyb3VibGUgd2hlbiB0aGUgb3RoZXIgdmFsdWVzIHRoYXQKKyAgICAgICAgLy8g
dHJ5IHRvIHNoYXJlIEB0bXAxIHdpdGggdXMgdHJ5IHRvIGRvIHRoZWlyIGxvd2VyaW5nLgorICAg
ICAgICAvLworICAgICAgICAvLyBUaGVyZSdzIG9uZSBtb3JlIHdyaW5rbGUuIElmIHdlIGRvbid0
IGxvY2sgYW4gaW50ZXJuYWwgdmFsdWUsIHRoZW4gdGhpcyBpbnRlcm5hbCB2YWx1ZSBtYXkKKyAg
ICAgICAgLy8gaGF2ZSBhbHJlYWR5IHNlcGFyYXRlbHkgbG9ja2VkIGl0cyBjaGlsZHJlbi4gU28s
IGlmIHdlJ3JlIG5vdCBsb2NraW5nIGEgdmFsdWUgdGhlbiB3ZSBuZWVkCisgICAgICAgIC8vIHRv
IG1ha2Ugc3VyZSB0aGF0IGl0cyBjaGlsZHJlbiBhcmVuJ3QgbG9ja2VkLiBXZSBlbmNhcHN1bGF0
ZSB0aGlzIGluIHR3byB3YXlzOgorICAgICAgICAvLworICAgICAgICAvLyBjYW5Db21taXRJbnRl
cm5hbDogVGhpcyB2YXJpYWJsZSB0ZWxscyB1cyBpZiB0aGUgdmFsdWVzIHRoYXQgd2UndmUgZnVz
ZWQgc28gZmFyIGFyZQorICAgICAgICAvLyBsb2NrZWQuIFRoaXMgbWVhbnMgdGhhdCB3ZSdyZSBu
b3Qgc2hhcmluZyBhbnkgb2YgdGhlbSB3aXRoIGFueW9uZS4gVGhpcyBwZXJtaXRzIHVzIHRvIGZ1
c2UKKyAgICAgICAgLy8gbG9hZHMuIElmIGl0J3MgZmFsc2UsIHRoZW4gd2UgY2Fubm90IGZ1c2Ug
bG9hZHMgYW5kIHdlIGFsc28gbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUKKyAgICAgICAgLy8gY2hp
bGRyZW4gb2YgYW55IHZhbHVlcyB3ZSB0cnkgdG8gZnVzZS1ieS1zaGFyaW5nIGFyZSBub3QgYWxy
ZWFkeSBsb2NrZWQuIFlvdSBkb24ndCBoYXZlIHRvCisgICAgICAgIC8vIHdvcnJ5IGFib3V0IHRo
ZSBjaGlsZHJlbiBsb2NraW5nIHRoaW5nIGlmIHlvdSB1c2UgcHJlcGFyZVRvRnVzZSgpIGJlZm9y
ZSB0cnlpbmcgdG8gZnVzZSBhCisgICAgICAgIC8vIHNoYXJhYmxlIHZhbHVlLiBCdXQsIHlvdSBk
byBuZWVkIHRvIGd1YXJkIGFueSBsb2FkIGZ1c2lvbiBieSBjaGVja2luZyBpZiBjYW5Db21taXRJ
bnRlcm5hbAorICAgICAgICAvLyBpcyB0cnVlLgorICAgICAgICAvLworICAgICAgICAvLyBGdXNp
b25SZXN1bHQgcHJlcGFyZVRvRnVzZSh2YWx1ZSk6IENhbGwgdGhpcyB3aGVuIHlvdSB0aGluZyB0
aGF0IHlvdSB3b3VsZCBsaWtlIHRvIGZ1c2UKKyAgICAgICAgLy8gc29tZSB2YWx1ZSBhbmQgdGhh
dCB2YWx1ZSBpcyBub3QgYSBsb2FkLiBJdCB3aWxsIGF1dG9tYXRpY2FsbHkgaGFuZGxlIHRoZSBz
aGFyZWQtb3ItbG9ja2VkCisgICAgICAgIC8vIGlzc3VlcyBhbmQgaXQgd2lsbCBjbGVhciBjYW5D
b21taXRJbnRlcm5hbCBpZiBuZWNlc3NhcnkuIFRoaXMgd2lsbCByZXR1cm4gQ2Fubm90RnVzZQor
ICAgICAgICAvLyAod2hpY2ggYWN0cyBsaWtlIGZhbHNlKSBpZiB0aGUgdmFsdWUgY2Fubm90IGJl
IGxvY2tlZCBhbmQgaXRzIGNoaWxkcmVuIGFyZSBsb2NrZWQuIFRoYXQncworICAgICAgICAvLyBy
YXJlLCBidXQgeW91IGp1c3QgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UgZG8gc21hcnQgdGhp
bmdzIHdoZW4gdGhpcyBoYXBwZW5zIChpLmUuIGp1c3QKKyAgICAgICAgLy8gdXNlIHRoZSB2YWx1
ZSByYXRoZXIgdGhhbiB0cnlpbmcgdG8gZnVzZSBpdCkuIEFmdGVyIHlvdSBjYWxsIHByZXBhcmVU
b0Z1c2UoKSwgeW91IGNhbgorICAgICAgICAvLyBzdGlsbCBjaGFuZ2UgeW91ciBtaW5kIGFib3V0
IHdoZXRoZXIgeW91IHdpbGwgYWN0dWFsbHkgZnVzZSB0aGUgdmFsdWUuIElmIHlvdSBkbyBmdXNl
IGl0LAorICAgICAgICAvLyB5b3UgbmVlZCB0byBjYWxsIGNvbW1pdEZ1c2lvbih2YWx1ZSwgZnVz
aW9uUmVzdWx0KS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gY29tbWl0RnVzaW9uKHZhbHVlLCBm
dXNpb25SZXN1bHQpOiBIYW5kbGVzIGNhbGxpbmcgY29tbWl0SW50ZXJuYWwodmFsdWUpIGlmIGZ1
c2lvblJlc3VsdAorICAgICAgICAvLyBpcyBGdXNlQW5kQ29tbWl0LgorICAgICAgICAKKyAgICAg
ICAgYm9vbCBjYW5Db21taXRJbnRlcm5hbCA9IHRydWU7CisKKyAgICAgICAgZW51bSBGdXNpb25S
ZXN1bHQgeworICAgICAgICAgICAgQ2Fubm90RnVzZSwKKyAgICAgICAgICAgIEZ1c2VBbmRDb21t
aXQsCisgICAgICAgICAgICBGdXNlCisgICAgICAgIH07CisgICAgICAgIGF1dG8gcHJlcGFyZVRv
RnVzZSA9IFsmXSAoVmFsdWUqIHZhbHVlKSAtPiBGdXNpb25SZXN1bHQgeworICAgICAgICAgICAg
aWYgKHZhbHVlID09IG1fdmFsdWUpIHsKKyAgICAgICAgICAgICAgICAvLyBJdCdzIG5vdCBhY3R1
YWxseSBpbnRlcm5hbC4gSXQncyB0aGUgcm9vdCB2YWx1ZS4gV2UncmUgZ29vZCB0byBnby4KKyAg
ICAgICAgICAgICAgICByZXR1cm4gRnVzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKGNhbkNvbW1pdEludGVybmFsICYmIGNhbkJlSW50ZXJuYWwodmFsdWUpKSB7CisgICAgICAg
ICAgICAgICAgLy8gV2UgYXJlIHRoZSBvbmx5IHVzZXJzIG9mIHRoaXMgdmFsdWUuIFRoaXMgYWxz
byBtZWFucyB0aGF0IHRoZSB2YWx1ZSdzIGNoaWxkcmVuCisgICAgICAgICAgICAgICAgLy8gY291
bGQgbm90IGhhdmUgYmVlbiBsb2NrZWQsIHNpbmNlIHdlIGhhdmUgbm93IHByb3ZlZCB0aGF0IG1f
dmFsdWUgZG9taW5hdGVzIHZhbHVlCisgICAgICAgICAgICAgICAgLy8gaW4gdGhlIGRhdGEgZmxv
dyBncmFwaC4gVG8gb25seSBvdGhlciB3YXkgdG8gdmFsdWUgaXMgZnJvbSBhIHVzZXIgb2YgbV92
YWx1ZS4gSWYKKyAgICAgICAgICAgICAgICAvLyB2YWx1ZSdzIGNoaWxkcmVuIGFyZSBzaGFyZWQg
d2l0aCBvdGhlcnMsIHRoZW4gdGhleSBjb3VsZCBub3QgaGF2ZSBiZWVuIGxvY2tlZAorICAgICAg
ICAgICAgICAgIC8vIGJlY2F1c2UgdGhlaXIgdXNlIGNvdW50IGlzIGdyZWF0ZXIgdGhhbiAxLiBJ
ZiB0aGV5IGFyZSBvbmx5IHVzZWQgZnJvbSB2YWx1ZSwgdGhlbgorICAgICAgICAgICAgICAgIC8v
IGluIG9yZGVyIGZvciB2YWx1ZSdzIGNoaWxkcmVuIHRvIGJlIGxvY2tlZCwgdmFsdWUgd291bGQg
YWxzbyBoYXZlIHRvIGJlIGxvY2tlZCwKKyAgICAgICAgICAgICAgICAvLyBhbmQgd2UganVzdCBw
cm92ZWQgdGhhdCBpdCB3YXNuJ3QuCisgICAgICAgICAgICAgICAgcmV0dXJuIEZ1c2VBbmRDb21t
aXQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFdlJ3JlIGdvaW5nIHRvIHRyeSB0
byBzaGFyZSB2YWx1ZSB3aXRoIG90aGVycy4gSXQncyBwb3NzaWJsZSB0aGF0IHNvbWUgb3RoZXIg
YmFzaWMKKyAgICAgICAgICAgIC8vIGJsb2NrIGhhZCBhbHJlYWR5IGVtaXR0ZWQgY29kZSBmb3Ig
dmFsdWUgYW5kIHRoZW4gbWF0Y2hlZCBvdmVyIGl0cyBjaGlsZHJlbiBhbmQgdGhlbgorICAgICAg
ICAgICAgLy8gbG9ja2VkIHRoZW0sIGluIHdoaWNoIGNhc2Ugd2UganVzdCB3YW50IHRvIHVzZSB2
YWx1ZSBpbnN0ZWFkIG9mIGR1cGxpY2F0aW5nIGl0LiBTbywgd2UKKyAgICAgICAgICAgIC8vIHZh
bGlkYXRlIHRoZSBjaGlsZHJlbi4gTm90ZSB0aGF0IHRoaXMgb25seSBhcmlzZXMgaW4gbGluZWFy
IGNoYWlucyBsaWtlOgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vICAgICBCQiMxOgor
ICAgICAgICAgICAgLy8gICAgICAgICBAMSA9IEZvbyguLi4pCisgICAgICAgICAgICAvLyAgICAg
ICAgIEAyID0gQmFyKEAxKQorICAgICAgICAgICAgLy8gICAgICAgICBKdW1wKCMyKQorICAgICAg
ICAgICAgLy8gICAgIEJCIzI6CisgICAgICAgICAgICAvLyAgICAgICAgIEAzID0gQmF6KEAyKQor
ICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIE5vdGljZSBob3cgd2UgY291bGQgc3RhcnQg
YnkgZ2VuZXJhdGluZyBjb2RlIGZvciBCQiMxIGFuZCB0aGVuIGRlY2lkZSB0byBsb2NrIEAxIHdo
ZW4KKyAgICAgICAgICAgIC8vIGdlbmVyYXRpbmcgY29kZSBmb3IgQDIsIGlmIHdlIGhhdmUgc29t
ZSB3YXkgb2YgZnVzaW5nIEJhciBhbmQgRm9vIGludG8gYSBzaW5nbGUKKyAgICAgICAgICAgIC8v
IGluc3RydWN0aW9uLiBUaGlzIGlzIGxlZ2FsLCBzaW5jZSBpbmRlZWQgQDEgb25seSBoYXMgb25l
IHVzZXIuIFRoZSBmYWN0IHRoYXQgQDIgbm93CisgICAgICAgICAgICAvLyBoYXMgYSB0bXAgKGku
ZS4gQDIgaXMgcGlubmVkKSwgY2FuQmVJbnRlcm5hbChAMikgd2lsbCByZXR1cm4gZmFsc2UsIHdo
aWNoIGJyaW5ncyB1cworICAgICAgICAgICAgLy8gaGVyZS4gSW4gdGhhdCBjYXNlLCB3ZSBjYW5u
b3QgbWF0Y2ggb3ZlciBAMiBiZWNhdXNlIHRoZW4gd2UnZCBoaXQgYSBoYXphcmQgaWYgd2UgZW5k
CisgICAgICAgICAgICAvLyB1cCBkZWNpZGluZyBub3QgdG8gZnVzZSBGb28gaW50byB0aGUgZnVz
ZWQgQmF6L0Jhci4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBIYXBwaWx5LCB0aGVy
ZSBhcmUgb25seSB0d28gcGxhY2VzIHdoZXJlIHRoaXMga2luZCBvZiBjaGlsZCB2YWxpZGF0aW9u
IGhhcHBlbnMgaXMgaW4KKyAgICAgICAgICAgIC8vIHJ1bGVzIHRoYXQgYWRtaXQgc2hhcmluZywg
bGlrZSB0aGlzIGFuZCBlZmZlY3RpdmVBZGRyZXNzKCkuCisgICAgICAgICAgICAvLworICAgICAg
ICAgICAgLy8gTi5CLiBXZSBjb3VsZCBwcm9iYWJseSBhdm9pZCB0aGUgbmVlZCB0byBkbyB2YWx1
ZSBsb2NraW5nIGlmIHdlIGNvbW1pdHRlZCB0byBhIHdlbGwKKyAgICAgICAgICAgIC8vIGNob3Nl
biBjb2RlIGdlbmVyYXRpb24gb3JkZXIuIEZvciBleGFtcGxlLCBpZiB3ZSBndWFyYW50ZWVkIHRo
YXQgYWxsIG9mIHRoZSB1c2VycyBvZgorICAgICAgICAgICAgLy8gYSB2YWx1ZSBnZXQgZ2VuZXJh
dGVkIGJlZm9yZSB0aGF0IHZhbHVlLCB0aGVuIHRoZXJlJ3Mgbm8gd2F5IGZvciB0aGUgbG93ZXJp
bmcgb2YgQDMgdG8KKyAgICAgICAgICAgIC8vIHNlZSBAMSBsb2NrZWQuIEJ1dCB3ZSBkb24ndCB3
YW50IHRvIGRvIHRoYXQsIHNpbmNlIHRoaXMgaXMgYSBncmVlZHkgaW5zdHJ1Y3Rpb24KKyAgICAg
ICAgICAgIC8vIHNlbGVjdG9yIGFuZCBzbyB3ZSB3YW50IHRvIGJlIGFibGUgdG8gcGxheSB3aXRo
IG9yZGVyLgorICAgICAgICAgICAgZm9yIChWYWx1ZSogY2hpbGQgOiB2YWx1ZS0+Y2hpbGRyZW4o
KSkgeworICAgICAgICAgICAgICAgIGlmIChtX2xvY2tlZC5jb250YWlucyhjaGlsZCkpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBDYW5ub3RGdXNlOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAvLyBJdCdzIHNhZmUgdG8gc2hhcmUgdmFsdWUsIGJ1dCBzaW5jZSB3ZSdyZSBzaGFy
aW5nLCBpdCBtZWFucyB0aGF0IHdlIGFyZW4ndCBsb2NraW5nIGl0LgorICAgICAgICAgICAgLy8g
SWYgd2UgZG9uJ3QgbG9jayBpdCwgdGhlbiBmdXNpbmcgbG9hZHMgaXMgb2ZmIGxpbWl0cyBhbmQg
YWxsIG9mIHZhbHVlJ3MgY2hpbGRyZW4gd2lsbAorICAgICAgICAgICAgLy8gaGF2ZSB0byBnbyB0
aHJvdWdoIHRoZSBzaGFyaW5nIHBhdGggYXMgd2VsbC4KKyAgICAgICAgICAgIGNhbkNvbW1pdElu
dGVybmFsID0gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBGdXNlOwor
ICAgICAgICB9OworCisgICAgICAgIGF1dG8gY29tbWl0RnVzaW9uID0gWyZdIChWYWx1ZSogdmFs
dWUsIEZ1c2lvblJlc3VsdCByZXN1bHQpIHsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRnVz
ZUFuZENvbW1pdCkKKyAgICAgICAgICAgICAgICBjb21taXRJbnRlcm5hbCh2YWx1ZSk7CisgICAg
ICAgIH07CisgICAgICAgIAogICAgICAgICAvLyBDaGV3IHRocm91Z2ggYW55IG5lZ2F0aW9ucy4g
SXQncyBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IGZvciB0aGlzIHRvIGJlIGEgbG9vcCwgYnV0IHdl
IGxpa2UKICAgICAgICAgLy8gdG8gZm9sbG93IHRoZSBydWxlIHRoYXQgdGhlIGluc3RydWN0aW9u
IHNlbGVjdG9yIHJlZHVjZXMgc3RyZW5ndGggd2hlbmV2ZXIgaXQgZG9lc24ndAogICAgICAgICAv
LyByZXF1aXJlIG1ha2luZyB0aGluZ3MgbW9yZSBjb21wbGljYXRlZC4KICAgICAgICAgZm9yICg7
OykgewotICAgICAgICAgICAgaWYgKCFjYW5CZUludGVybmFsKHZhbHVlKSAmJiB2YWx1ZSAhPSBt
X3ZhbHVlKQotICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgYm9vbCBzaG91bGRJ
bnZlcnQgPQogICAgICAgICAgICAgICAgICh2YWx1ZS0+b3Bjb2RlKCkgPT0gQml0WG9yICYmIHZh
bHVlLT5jaGlsZCgxKS0+aGFzSW50KCkgJiYgKHZhbHVlLT5jaGlsZCgxKS0+YXNJbnQoKSAmIDEp
ICYmIHZhbHVlLT5jaGlsZCgwKS0+cmV0dXJuc0Jvb2woKSkKICAgICAgICAgICAgICAgICB8fCAo
dmFsdWUtPm9wY29kZSgpID09IEVxdWFsICYmIHZhbHVlLT5jaGlsZCgxKS0+aXNJbnQoMCkpOwog
ICAgICAgICAgICAgaWYgKCFzaG91bGRJbnZlcnQpCiAgICAgICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgICAgIEZ1c2lvblJlc3VsdCBmdXNpb25SZXN1bHQgPSBwcmVwYXJlVG9GdXNlKHZh
bHVlKTsKKyAgICAgICAgICAgIGlmIChmdXNpb25SZXN1bHQgPT0gQ2Fubm90RnVzZSkKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNvbW1pdEZ1c2lvbih2YWx1ZSwgZnVzaW9u
UmVzdWx0KTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS0+Y2hpbGQo
MCk7CiAgICAgICAgICAgICBpbnZlcnRlZCA9ICFpbnZlcnRlZDsKLSAgICAgICAgICAgIGNvbW1p
dEludGVybmFsKHZhbHVlKTsKICAgICAgICAgfQogCiAgICAgICAgIGF1dG8gY3JlYXRlUmVsQ29u
ZCA9IFsmXSAoCkBAIC05MzEsNTEgKzEwNTYsNTUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEluc3QoKTsKICAgICAgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICAg
ICAgLy8gRmlyc3QgaGFuZGxlIGNvbXBhcmVzIHRoYXQgaW52b2x2ZSBmZXdlciBiaXRzIHRoYW4g
QjMncyB0eXBlIHN5c3RlbSBzdXBwb3J0cy4KLSAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHBy
ZXR0eSBpbXBvcnRhbnQuIEZvciBleGFtcGxlLCB3ZSB3YW50IHRoaXMgdG8gYmUgYSBzaW5nbGUg
aW5zdHJ1Y3Rpb246Ci0gICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAvLyAgICAg
QDEgPSBMb2FkOFMoLi4uKQotICAgICAgICAgICAgICAgIC8vICAgICBAMiA9IENvbnN0MzIoLi4u
KQotICAgICAgICAgICAgICAgIC8vICAgICBAMyA9IExlc3NUaGFuKEAxLCBAMikKLSAgICAgICAg
ICAgICAgICAvLyAgICAgQnJhbmNoKEAzKQorICAgICAgICAgICAgICAgIEFyZzo6V2lkdGggd2lk
dGggPSBBcmc6OndpZHRoRm9yQjNUeXBlKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpKTsKICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAocmVsQ29uZC5pc1NpZ25lZENvbmQoKSkg
ewotICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlDb21wYXJlTG9hZElt
bShBcmc6OldpZHRoOCwgTG9hZDhTLCBBcmc6OlNpZ25lZCkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
ZiAoY2FuQ29tbWl0SW50ZXJuYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRmlyc3QgaGFu
ZGxlIGNvbXBhcmVzIHRoYXQgaW52b2x2ZSBmZXdlciBiaXRzIHRoYW4gQjMncyB0eXBlIHN5c3Rl
bSBzdXBwb3J0cy4KKyAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBwcmV0dHkgaW1wb3J0
YW50LiBGb3IgZXhhbXBsZSwgd2Ugd2FudCB0aGlzIHRvIGJlIGEgc2luZ2xlCisgICAgICAgICAg
ICAgICAgICAgIC8vIGluc3RydWN0aW9uOgorICAgICAgICAgICAgICAgICAgICAvLworICAgICAg
ICAgICAgICAgICAgICAvLyAgICAgQDEgPSBMb2FkOFMoLi4uKQorICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgQDIgPSBDb25zdDMyKC4uLikKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIEAz
ID0gTGVzc1RoYW4oQDEsIEAyKQorICAgICAgICAgICAgICAgICAgICAvLyAgICAgQnJhbmNoKEAz
KQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChyZWxDb25kLmlzVW5zaWdu
ZWRDb25kKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5Q29t
cGFyZUxvYWRJbW0oQXJnOjpXaWR0aDgsIExvYWQ4WiwgQXJnOjpVbnNpZ25lZCkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHJlbENvbmQuaXNTaWduZWRDb25kKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeUNvbXBhcmVMb2FkSW1tKEFyZzo6V2lk
dGg4LCBMb2FkOFMsIEFyZzo6U2lnbmVkKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgIGlmIChyZWxDb25kLmlzVW5zaWduZWRDb25kKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeUNvbXBhcmVMb2FkSW1tKEFy
Zzo6V2lkdGg4LCBMb2FkOFosIEFyZzo6VW5zaWduZWQpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgICAgIGlmIChyZWxDb25kLmlzU2lnbmVkQ29uZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChJbnN0IHJlc3VsdCA9IHRyeUNvbXBhcmVMb2FkSW1tKEFyZzo6V2lkdGgxNiwgTG9hZDE2
UywgQXJnOjpTaWduZWQpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChyZWxDb25kLmlzU2ln
bmVkQ29uZCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0
cnlDb21wYXJlTG9hZEltbShBcmc6OldpZHRoMTYsIExvYWQxNlMsIEFyZzo6U2lnbmVkKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKHJlbENvbmQuaXNV
bnNpZ25lZENvbmQoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0
cnlDb21wYXJlTG9hZEltbShBcmc6OldpZHRoMTYsIExvYWQxNlosIEFyZzo6VW5zaWduZWQpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGlmIChyZWxDb25kLmlzVW5zaWduZWRDb25kKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeUNvbXBhcmVMb2FkSW1t
KEFyZzo6V2lkdGgxNiwgTG9hZDE2WiwgQXJnOjpVbnNpZ25lZCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICAgICAgLy8gTm93IGhhbmRsZSBjb21wYXJlcyB0aGF0IGludm9sdmUgYSBsb2FkIGFu
ZCBhbiBpbW1lZGlhdGUuCisgICAgICAgICAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUgY29tcGFy
ZXMgdGhhdCBpbnZvbHZlIGEgbG9hZCBhbmQgYW4gaW1tZWRpYXRlLgogCi0gICAgICAgICAgICAg
ICAgQXJnOjpXaWR0aCB3aWR0aCA9IEFyZzo6d2lkdGhGb3JCM1R5cGUodmFsdWUtPmNoaWxkKDAp
LT50eXBlKCkpOwotICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeUNvbXBhcmVM
b2FkSW1tKHdpZHRoLCBMb2FkLCBBcmc6OlNpZ25lZCkpCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeUNv
bXBhcmVMb2FkSW1tKHdpZHRoLCBMb2FkLCBBcmc6OlNpZ25lZCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgICAgICAgICAgICAgLy8gTm93IGhhbmRsZSBj
b21wYXJlcyB0aGF0IGludm9sdmUgYSBsb2FkLiBJdCdzIG5vdCBvYnZpb3VzIHRoYXQgaXQncyBi
ZXR0ZXIgdG8KLSAgICAgICAgICAgICAgICAvLyBoYW5kbGUgdGhpcyBiZWZvcmUgdGhlIGltbWVk
aWF0ZSBjYXNlcyBvciBub3QuIFByb2JhYmx5IGRvZXNuJ3QgbWF0dGVyLgorICAgICAgICAgICAg
ICAgICAgICAvLyBOb3cgaGFuZGxlIGNvbXBhcmVzIHRoYXQgaW52b2x2ZSBhIGxvYWQuIEl0J3Mg
bm90IG9idmlvdXMgdGhhdCBpdCdzIGJldHRlciB0bworICAgICAgICAgICAgICAgICAgICAvLyBo
YW5kbGUgdGhpcyBiZWZvcmUgdGhlIGltbWVkaWF0ZSBjYXNlcyBvciBub3QuIFByb2JhYmx5IGRv
ZXNuJ3QgbWF0dGVyLgogCi0gICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5Q29t
cGFyZSh3aWR0aCwgbG9hZFByb21pc2UobGVmdCksIHRtcFByb21pc2UocmlnaHQpKSkgewotICAg
ICAgICAgICAgICAgICAgICBjb21taXRJbnRlcm5hbChsZWZ0KTsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGlmIChJbnN0IHJlc3VsdCA9IHRyeUNvbXBhcmUod2lkdGgsIGxvYWRQcm9taXNlKGxlZnQpLCB0
bXBQcm9taXNlKHJpZ2h0KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdEludGVy
bmFsKGxlZnQpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChJ
bnN0IHJlc3VsdCA9IHRyeUNvbXBhcmUod2lkdGgsIHRtcFByb21pc2UobGVmdCksIGxvYWRQcm9t
aXNlKHJpZ2h0KSkpIHsKLSAgICAgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwocmlnaHQp
OwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAg
ICBpZiAoSW5zdCByZXN1bHQgPSB0cnlDb21wYXJlKHdpZHRoLCB0bXBQcm9taXNlKGxlZnQpLCBs
b2FkUHJvbWlzZShyaWdodCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21taXRJbnRl
cm5hbChyaWdodCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAg
Ly8gTm93IGhhbmRsZSBjb21wYXJlcyB0aGF0IGludm9sdmUgYW4gaW1tZWRpYXRlIGFuZCBhIHRt
cC4KQEAgLTEwNjIsMzkgKzExOTEsNDEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIEluc3QoKTsKICAgICAgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgLy8g
Rmlyc3QgaGFuZGxlIHRlc3QncyB0aGF0IGludm9sdmUgZmV3ZXIgYml0cyB0aGFuIEIzJ3MgdHlw
ZSBzeXN0ZW0gc3VwcG9ydHMuCisgICAgICAgICAgICAgICAgaWYgKGNhbkNvbW1pdEludGVybmFs
KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZpcnN0IGhhbmRsZSB0ZXN0J3MgdGhhdCBpbnZv
bHZlIGZld2VyIGJpdHMgdGhhbiBCMydzIHR5cGUgc3lzdGVtIHN1cHBvcnRzLgogCi0gICAgICAg
ICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5VGVzdExvYWRJbW0oQXJnOjpXaWR0aDgsIExv
YWQ4WikpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlUZXN0TG9hZEltbShBcmc6OldpZHRoOCwgTG9hZDhT
KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgICAgICAgICAgICAg
IGlmIChJbnN0IHJlc3VsdCA9IHRyeVRlc3RMb2FkSW1tKEFyZzo6V2lkdGgxNiwgTG9hZDE2Wikp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoSW5zdCByZXN1bHQgPSB0cnlUZXN0TG9hZEltbShBcmc6OldpZHRoMTYsIExvYWQxNlMpKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgICAgICAgICAgICAgLy8g
Tm93IGhhbmRsZSB0ZXN0J3MgdGhhdCBpbnZvbHZlIGEgbG9hZCBhbmQgYW4gaW1tZWRpYXRlLiBO
b3RlIHRoYXQgaW1tZWRpYXRlcyBhcmUKLSAgICAgICAgICAgICAgICAvLyAzMi1iaXQsIGFuZCB3
ZSB3YW50IHplcm8tZXh0ZW5zaW9uLiBIZW5jZSwgdGhlIGltbWVkaWF0ZSBmb3JtIGlzIGNvbXBp
bGVkIGFzIGEKLSAgICAgICAgICAgICAgICAvLyAzMi1iaXQgdGVzdC4gTm90ZSB0aGF0IHRoaXMg
c3BpdHMgb24gdGhlIGdyYXZlIG9mIGluZmVyaW9yIGVuZGlhbnMsIHN1Y2ggYXMgdGhlCi0gICAg
ICAgICAgICAgICAgLy8gYmlnIG9uZS4KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBpZiAoSW5zdCByZXN1bHQgPSB0cnlUZXN0TG9hZEltbShBcmc6OldpZHRoMzIsIExvYWQpKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgICAgICAgICAgICAgLy8g
Tm93IGhhbmRsZSB0ZXN0J3MgdGhhdCBpbnZvbHZlIGEgbG9hZC4KLQotICAgICAgICAgICAgICAg
IEFyZzo6V2lkdGggd2lkdGggPSBBcmc6OndpZHRoRm9yQjNUeXBlKHZhbHVlLT5jaGlsZCgwKS0+
dHlwZSgpKTsKLSAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlUZXN0KHdpZHRo
LCBsb2FkUHJvbWlzZShsZWZ0KSwgdG1wUHJvbWlzZShyaWdodCkpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGNvbW1pdEludGVybmFsKGxlZnQpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3Qg
cmVzdWx0ID0gdHJ5VGVzdExvYWRJbW0oQXJnOjpXaWR0aDgsIExvYWQ4WikpCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5VGVzdExvYWRJbW0oQXJnOjpXaWR0
aDgsIExvYWQ4UykpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0g
dHJ5VGVzdExvYWRJbW0oQXJnOjpXaWR0aDE2LCBMb2FkMTZaKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlUZXN0TG9hZEltbShBcmc6OldpZHRoMTYsIExv
YWQxNlMpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgICAg
ICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeVRlc3Qod2lkdGgsIHRtcFByb21pc2UobGVm
dCksIGxvYWRQcm9taXNlKHJpZ2h0KSkpIHsKLSAgICAgICAgICAgICAgICAgICAgY29tbWl0SW50
ZXJuYWwocmlnaHQpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAg
ICAgICAgICAgICAgICAvLyBOb3cgaGFuZGxlIHRlc3QncyB0aGF0IGludm9sdmUgYSBsb2FkIGFu
ZCBhbiBpbW1lZGlhdGUuIE5vdGUgdGhhdCBpbW1lZGlhdGVzCisgICAgICAgICAgICAgICAgICAg
IC8vIGFyZSAzMi1iaXQsIGFuZCB3ZSB3YW50IHplcm8tZXh0ZW5zaW9uLiBIZW5jZSwgdGhlIGlt
bWVkaWF0ZSBmb3JtIGlzIGNvbXBpbGVkCisgICAgICAgICAgICAgICAgICAgIC8vIGFzIGEgMzIt
Yml0IHRlc3QuIE5vdGUgdGhhdCB0aGlzIHNwaXRzIG9uIHRoZSBncmF2ZSBvZiBpbmZlcmlvciBl
bmRpYW5zLCBzdWNoCisgICAgICAgICAgICAgICAgICAgIC8vIGFzIHRoZSBiaWcgb25lLgorICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0g
dHJ5VGVzdExvYWRJbW0oQXJnOjpXaWR0aDMyLCBMb2FkKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
ICAgICAvLyBOb3cgaGFuZGxlIHRlc3QncyB0aGF0IGludm9sdmUgYSBsb2FkLgorICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCA9IEFyZzo6
d2lkdGhGb3JCM1R5cGUodmFsdWUtPmNoaWxkKDApLT50eXBlKCkpOworICAgICAgICAgICAgICAg
ICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlUZXN0KHdpZHRoLCBsb2FkUHJvbWlzZShsZWZ0KSwg
dG1wUHJvbWlzZShyaWdodCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21taXRJbnRl
cm5hbChsZWZ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeVRlc3Qod2lkdGgsIHRtcFByb21pc2UobGVmdCksIGxv
YWRQcm9taXNlKHJpZ2h0KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdEludGVy
bmFsKHJpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAv
LyBOb3cgaGFuZGxlIHRlc3QncyB0aGF0IGludm9sdmUgYW4gaW1tZWRpYXRlIGFuZCBhIHRtcC4K
QEAgLTExMTcsOSArMTI0OCw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAgICAgICAgIH07
CiAKLSAgICAgICAgaWYgKGNhbkJlSW50ZXJuYWwodmFsdWUpIHx8IHZhbHVlID09IG1fdmFsdWUp
IHsKKyAgICAgICAgaWYgKEZ1c2lvblJlc3VsdCBmdXNpb25SZXN1bHQgPSBwcmVwYXJlVG9GdXNl
KHZhbHVlKSkgewogICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gYXR0ZW1wdEZ1c2VkKCkp
IHsKLSAgICAgICAgICAgICAgICBjb21taXRJbnRlcm5hbCh2YWx1ZSk7CisgICAgICAgICAgICAg
ICAgY29tbWl0RnVzaW9uKHZhbHVlLCBmdXNpb25SZXN1bHQpOwogICAgICAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE0NjMsNiArMTU5NCwy
MSBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBCaXRBbmQ6IHsKKyAgICAg
ICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQoMHhmZikpIHsKKyAgICAgICAgICAg
ICAgICBhcHBlbmRVbk9wPFplcm9FeHRlbmQ4VG8zMiwgWmVyb0V4dGVuZDhUbzMyPihtX3ZhbHVl
LT5jaGlsZCgwKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmlzSW50KDB4ZmZm
ZikpIHsKKyAgICAgICAgICAgICAgICBhcHBlbmRVbk9wPFplcm9FeHRlbmQxNlRvMzIsIFplcm9F
eHRlbmQxNlRvMzI+KG1fdmFsdWUtPmNoaWxkKDApKTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJ
bnQoMHhmZmZmZmZmZikpIHsKKyAgICAgICAgICAgICAgICBhcHBlbmRVbk9wPE1vdmUzMiwgTW92
ZTMyPihtX3ZhbHVlLT5jaGlsZCgwKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAgICBhcHBlbmRCaW5PcDxBbmQzMiwgQW5k
NjQsIEFuZERvdWJsZSwgQW5kRmxvYXQsIENvbW11dGF0aXZlPigKICAgICAgICAgICAgICAgICBt
X3ZhbHVlLT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQoMSkpOwogICAgICAgICAgICAgcmV0dXJu
OwpAQCAtMTU3MiwxOCArMTcxOCwzMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAKKyAgICAgICAgY2FzZSBTRXh0ODogeworICAgICAgICAgICAgYXBwZW5kVW5P
cDxTaWduRXh0ZW5kOFRvMzIsIEFpcjo6T29wcz4obV92YWx1ZS0+Y2hpbGQoMCkpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBTRXh0MTY6IHsKKyAgICAg
ICAgICAgIGFwcGVuZFVuT3A8U2lnbkV4dGVuZDE2VG8zMiwgQWlyOjpPb3BzPihtX3ZhbHVlLT5j
aGlsZCgwKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwogICAgICAgICBjYXNl
IFpFeHQzMjogewogICAgICAgICAgICAgaWYgKGhpZ2hCaXRzQXJlWmVybyhtX3ZhbHVlLT5jaGls
ZCgwKSkpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQodG1wKG1fdmFsdWUtPmNoaWxkKDApKSA9
PSB0bXAobV92YWx1ZSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgYXBwZW5kKE1vdmUzMiwgdG1wKG1fdmFsdWUtPmNoaWxkKDApKSwgdG1w
KG1fdmFsdWUpKTsKKyAgICAgICAgICAgIGFwcGVuZFVuT3A8TW92ZTMyLCBBaXI6Ok9vcHM+KG1f
dmFsdWUtPmNoaWxkKDApKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAg
ICAgIGNhc2UgU0V4dDMyOiB7Ci0gICAgICAgICAgICBhcHBlbmQoU2lnbkV4dGVuZDMyVG9QdHIs
IHRtcChtX3ZhbHVlLT5jaGlsZCgwKSksIHRtcChtX3ZhbHVlKSk7CisgICAgICAgICAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIGhhdmUgc3VwcG9ydCBmb3IgbW92c2JxL21vdnN3cQorICAgICAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjIzMgorICAg
ICAgICAgICAgCisgICAgICAgICAgICBhcHBlbmRVbk9wPFNpZ25FeHRlbmQzMlRvUHRyLCBBaXI6
Ok9vcHM+KG1fdmFsdWUtPmNoaWxkKDApKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGgu
Y3BwCShyZXZpc2lvbiAxOTQwMTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1
Y2VTdHJlbmd0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2Nyw2ICszNjcsMzIgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJpdEFuZChT
RXh0OCh2YWx1ZSksIG1hc2spIHdoZXJlIChtYXNrICYgMHhmZmZmZmYwMCkgPT0gMAorICAgICAg
ICAgICAgLy8gSW50byB0aGlzOiBCaXRBbmQodmFsdWUsIG1hc2spCisgICAgICAgICAgICBpZiAo
bV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IFNFeHQ4ICYmIG1fdmFsdWUtPmNoaWxkKDEp
LT5oYXNJbnQzMigpCisgICAgICAgICAgICAgICAgJiYgIShtX3ZhbHVlLT5jaGlsZCgxKS0+YXNJ
bnQzMigpICYgMHhmZmZmZmYwMCkpIHsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgw
KSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKKyAgICAgICAgICAgICAgICBtX2NoYW5n
ZWQgPSB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJp
dEFuZChTRXh0MTYodmFsdWUpLCBtYXNrKSB3aGVyZSAobWFzayAmIDB4ZmZmZjAwMDApID09IDAK
KyAgICAgICAgICAgIC8vIEludG8gdGhpczogQml0QW5kKHZhbHVlLCBtYXNrKQorICAgICAgICAg
ICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBTRXh0MTYgJiYgbV92YWx1ZS0+
Y2hpbGQoMSktPmhhc0ludDMyKCkKKyAgICAgICAgICAgICAgICAmJiAhKG1fdmFsdWUtPmNoaWxk
KDEpLT5hc0ludDMyKCkgJiAweGZmZmYwMDAwKSkgeworICAgICAgICAgICAgICAgIG1fdmFsdWUt
PmNoaWxkKDApID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApOworICAgICAgICAgICAgICAg
IG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFR1cm4g
dGhpczogQml0QW5kKFNFeHQzMih2YWx1ZSksIG1hc2spIHdoZXJlIChtYXNrICYgMHhmZmZmZmZm
ZjAwMDAwMDAwKSA9PSAwCisgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEJpdEFuZChaRXh0MzIo
dmFsdWUpLCBtYXNrKQorICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUo
KSA9PSBTRXh0MzIgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPmhhc0ludDMyKCkKKyAgICAgICAgICAg
ICAgICAmJiAhKG1fdmFsdWUtPmNoaWxkKDEpLT5hc0ludDMyKCkgJiAweGZmZmZmZmZmMDAwMDAw
MDBsbHUpKSB7CisgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCkgPSBtX2luc2VydGlv
blNldC5pbnNlcnQ8VmFsdWU+KAorICAgICAgICAgICAgICAgICAgICBtX2luZGV4LCBaRXh0MzIs
IG1fdmFsdWUtPm9yaWdpbigpLAorICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgw
KS0+Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKSk7CisgICAgICAgICAgICAg
ICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwog
CiAgICAgICAgIGNhc2UgQml0T3I6CkBAIC01NjQsNiArNTkwLDk3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKIAorICAgICAgICBjYXNlIFNFeHQ4OgorICAg
ICAgICAgICAgLy8gVHVybiB0aGlzOiBTRXh0OChjb25zdGFudCkKKyAgICAgICAgICAgIC8vIElu
dG8gdGhpczogc3RhdGljX2Nhc3Q8aW50OF90Pihjb25zdGFudCkKKyAgICAgICAgICAgIGlmICht
X3ZhbHVlLT5jaGlsZCgwKS0+aGFzSW50MzIoKSkgeworICAgICAgICAgICAgICAgIGludDMyX3Qg
cmVzdWx0ID0gc3RhdGljX2Nhc3Q8aW50OF90PihtX3ZhbHVlLT5jaGlsZCgwKS0+YXNJbnQzMigp
KTsKKyAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKG1fcHJvYy5hZGRJbnRDb25z
dGFudChtX3ZhbHVlLCByZXN1bHQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBTRXh0OChTRXh0OCh2YWx1ZSkpCisg
ICAgICAgICAgICAvLyAgIG9yIHRoaXM6IFNFeHQ4KFNFeHQxNih2YWx1ZSkpCisgICAgICAgICAg
ICAvLyBJbnRvIHRoaXM6IFNFeHQ4KHZhbHVlKQorICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNo
aWxkKDApLT5vcGNvZGUoKSA9PSBTRXh0OCB8fCBtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkg
PT0gU0V4dDE2KSB7CisgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCkgPSBtX3ZhbHVl
LT5jaGlsZCgwKS0+Y2hpbGQoMCk7CisgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNv
ZGUoKSA9PSBCaXRBbmQgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5oYXNJbnQzMigp
KSB7CisgICAgICAgICAgICAgICAgVmFsdWUqIGlucHV0ID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNo
aWxkKDApOworICAgICAgICAgICAgICAgIGludDMyX3QgbWFzayA9IG1fdmFsdWUtPmNoaWxkKDAp
LT5jaGlsZCgxKS0+YXNJbnQzMigpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IC8vIFR1cm4gdGhpczogU0V4dDgoQml0QW5kKGlucHV0LCBtYXNrKSkgd2hlcmUgKG1hc2sgJiAw
eGZmKSA9PSAweGZmCisgICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBTRXh0OChpbnB1dCkK
KyAgICAgICAgICAgICAgICBpZiAoKG1hc2sgJiAweGZmKSA9PSAweGZmKSB7CisgICAgICAgICAg
ICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApID0gaW5wdXQ7CisgICAgICAgICAgICAgICAgICAg
IG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6
IFNFeHQ4KEJpdEFuZChpbnB1dCwgbWFzaykpIHdoZXJlIChtYXNrICYgMHg4MCkgPT0gMAorICAg
ICAgICAgICAgICAgIC8vIEludG8gdGhpczogQml0QW5kKGlucHV0LCBjb25zdCAmIDB4N2YpCisg
ICAgICAgICAgICAgICAgaWYgKCEobWFzayAmIDB4ODApKSB7CisgICAgICAgICAgICAgICAgICAg
IHJlcGxhY2VXaXRoTmV3VmFsdWUoCisgICAgICAgICAgICAgICAgICAgICAgICBtX3Byb2MuYWRk
PFZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaXRBbmQsIG1fdmFsdWUtPm9y
aWdpbigpLCBpbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNl
dC5pbnNlcnQ8Q29uc3QzMlZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9pbmRleCwgbV92YWx1ZS0+b3JpZ2luKCksIG1hc2sgJiAweDdmKSkpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNFeHQxNjoKKyAgICAgICAgICAgIC8vIFR1cm4g
dGhpczogU0V4dDE2KGNvbnN0YW50KQorICAgICAgICAgICAgLy8gSW50byB0aGlzOiBzdGF0aWNf
Y2FzdDxpbnQxNl90Pihjb25zdGFudCkKKyAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgw
KS0+aGFzSW50MzIoKSkgeworICAgICAgICAgICAgICAgIGludDMyX3QgcmVzdWx0ID0gc3RhdGlj
X2Nhc3Q8aW50MTZfdD4obV92YWx1ZS0+Y2hpbGQoMCktPmFzSW50MzIoKSk7CisgICAgICAgICAg
ICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShtX3Byb2MuYWRkSW50Q29uc3RhbnQobV92YWx1ZSwg
cmVzdWx0KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIC8vIFR1cm4gdGhpczogU0V4dDE2KFNFeHQxNih2YWx1ZSkpCisgICAgICAgICAgICAv
LyBJbnRvIHRoaXM6IFNFeHQxNih2YWx1ZSkKKyAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGls
ZCgwKS0+b3Bjb2RlKCkgPT0gU0V4dDE2KSB7CisgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hp
bGQoMCkgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7CisgICAgICAgICAgICAgICAgbV9j
aGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVHVybiB0aGlz
OiBTRXh0MTYoU0V4dDgodmFsdWUpKQorICAgICAgICAgICAgLy8gSW50byB0aGlzOiBTRXh0OCh2
YWx1ZSkKKyAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gU0V4
dDgpIHsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlLT5yZXBsYWNlV2l0aElkZW50aXR5KG1fdmFs
dWUtPmNoaWxkKDApKTsKKyAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobV92YWx1
ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEJpdEFuZCAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hp
bGQoMSktPmhhc0ludDMyKCkpIHsKKyAgICAgICAgICAgICAgICBWYWx1ZSogaW5wdXQgPSBtX3Zh
bHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7CisgICAgICAgICAgICAgICAgaW50MzJfdCBtYXNrID0g
bV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5hc0ludDMyKCk7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBTRXh0MTYoQml0QW5kKGlucHV0LCBtYXNr
KSkgd2hlcmUgKG1hc2sgJiAweGZmZmYpID09IDB4ZmZmZgorICAgICAgICAgICAgICAgIC8vIElu
dG8gdGhpczogU0V4dDE2KGlucHV0KQorICAgICAgICAgICAgICAgIGlmICgobWFzayAmIDB4ZmZm
ZikgPT0gMHhmZmZmKSB7CisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApID0g
aW5wdXQ7CisgICAgICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNFeHQxNihCaXRBbmQoaW5wdXQsIG1hc2spKSB3
aGVyZSAobWFzayAmIDB4ODAwMCkgPT0gMAorICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczog
Qml0QW5kKGlucHV0LCBjb25zdCAmIDB4N2ZmZikKKyAgICAgICAgICAgICAgICBpZiAoIShtYXNr
ICYgMHg4MDAwKSkgeworICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAor
ICAgICAgICAgICAgICAgICAgICAgICAgbV9wcm9jLmFkZDxWYWx1ZT4oCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQml0QW5kLCBtX3ZhbHVlLT5vcmlnaW4oKSwgaW5wdXQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0MzJWYWx1ZT4o
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIG1fdmFsdWUtPm9yaWdp
bigpLCBtYXNrICYgMHg3ZmZmKSkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKwogICAgICAg
ICBjYXNlIFNFeHQzMjoKICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU0V4dDMyKGNvbnN0YW50
KQogICAgICAgICAgICAgLy8gSW50byB0aGlzOiBzdGF0aWNfY2FzdDxpbnQ2NF90Pihjb25zdGFu
dCkKQEAgLTU3MSw2ICs2ODgsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXBsYWNl
V2l0aE5ld1ZhbHVlKG1fcHJvYy5hZGRJbnRDb25zdGFudChtX3ZhbHVlLCBtX3ZhbHVlLT5jaGls
ZCgwKS0+YXNJbnQzMigpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU0V4dDMyKEJpdEFuZChpbnB1dCwgbWFzaykp
IHdoZXJlIChtYXNrICYgMHg4MDAwMDAwMCkgPT0gMAorICAgICAgICAgICAgLy8gSW50byB0aGlz
OiBaRXh0MzIoQml0QW5kKGlucHV0LCBtYXNrKSkKKyAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5j
aGlsZCgwKS0+b3Bjb2RlKCkgPT0gQml0QW5kICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgx
KS0+aGFzSW50MzIoKQorICAgICAgICAgICAgICAgICYmICEobV92YWx1ZS0+Y2hpbGQoMCktPmNo
aWxkKDEpLT5hc0ludDMyKCkgJiAweDgwMDAwMDAwKSkgeworICAgICAgICAgICAgICAgIHJlcGxh
Y2VXaXRoTmV3VmFsdWUoCisgICAgICAgICAgICAgICAgICAgIG1fcHJvYy5hZGQ8VmFsdWU+KAor
ICAgICAgICAgICAgICAgICAgICAgICAgWkV4dDMyLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1
ZS0+Y2hpbGQoMCkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgWkV4dDMyOgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHJldmlzaW9uIDE5NDAxMikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy90ZXN0YjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSw4ICs3MSwxNiBAQCB1
c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKIAogbmFtZXNwYWNlIHsKIAorU3RhdGljTG9jayBjcmFz
aExvY2s7CisKIC8vIE5vdGhpbmcgZmFuY3kgZm9yIG5vdzsgd2UganVzdCB1c2UgdGhlIGV4aXN0
aW5nIFdURiBhc3NlcnRpb24gbWFjaGluZXJ5LgotI2RlZmluZSBDSEVDSyh4KSBSRUxFQVNFX0FT
U0VSVCh4KQorI2RlZmluZSBDSEVDSyh4KSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoISEoeCkpICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg
YnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICBjcmFzaExvY2subG9jaygpOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBXVEZSZXBvcnRBc3NlcnRpb25GYWlsdXJl
KF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgI3gpOyBcCisgICAgICAg
IENSQVNIKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgfSB3aGlsZSAoZmFsc2UpCiAKIFZNKiB2bTsKIApAQCAtNTY5Myw2ICs1
NzAxLDE2MyBAQCB2b2lkIHRlc3RDaGVja01lZ2FDb21ibygpCiAgICAgQ0hFQ0soaW52b2tlPGlu
dD4oKmNvZGUsICZ2YWx1ZSAtIDIsIDEpID09IDQyKTsKIH0KIAordm9pZCB0ZXN0Q2hlY2tUd29N
ZWdhQ29tYm9zKCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290
ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVlKiBiYXNlID0gcm9vdC0+YXBwZW5kTmV3PEFy
Z3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwor
ICAgIFZhbHVlKiBpbmRleCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgIHByb2Ms
IFpFeHQzMiwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAg
ICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmRO
ZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BS
MSkpKTsKKworICAgIFZhbHVlKiBwdHIgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAg
ICBwcm9jLCBBZGQsIE9yaWdpbigpLCBiYXNlLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFs
dWU+KAorICAgICAgICAgICAgcHJvYywgU2hsLCBPcmlnaW4oKSwgaW5kZXgsCisgICAgICAgICAg
ICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMSkpKTsKKwor
ICAgIFZhbHVlKiBwcmVkaWNhdGUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICBw
cm9jLCBMZXNzVGhhbiwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxNZW1vcnlW
YWx1ZT4ocHJvYywgTG9hZDhTLCBPcmlnaW4oKSwgcHRyKSwKKyAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDQyKSk7CisgICAgCisgICAgQ2hlY2tW
YWx1ZSogY2hlY2sgPSByb290LT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4ocHJvYywgQ2hlY2ssIE9y
aWdpbigpLCBwcmVkaWNhdGUpOworICAgIGNoZWNrLT5zZXRHZW5lcmF0b3IoCisgICAgICAgIFsm
XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFy
YW1zKSB7CisgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dT
Y3JhdGNoKGppdCk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuc2l6ZSgpID09IDEpOworCisg
ICAgICAgICAgICAvLyBUaGlzIHNob3VsZCBhbHdheXMgd29yayBiZWNhdXNlIGEgZnVuY3Rpb24g
dGhpcyBzaW1wbGUgc2hvdWxkIG5ldmVyIGhhdmUgY2FsbGVlCisgICAgICAgICAgICAvLyBzYXZl
cy4KKyAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDQyKSwg
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVw
aWxvZ3VlKCk7CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgIENoZWNr
VmFsdWUqIGNoZWNrMiA9IHJvb3QtPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihwcm9jLCBDaGVjaywg
T3JpZ2luKCksIHByZWRpY2F0ZSk7CisgICAgY2hlY2syLT5zZXRHZW5lcmF0b3IoCisgICAgICAg
IFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYg
cGFyYW1zKSB7CisgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxs
b3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuc2l6ZSgpID09IDEpOwor
CisgICAgICAgICAgICAvLyBUaGlzIHNob3VsZCBhbHdheXMgd29yayBiZWNhdXNlIGEgZnVuY3Rp
b24gdGhpcyBzaW1wbGUgc2hvdWxkIG5ldmVyIGhhdmUgY2FsbGVlCisgICAgICAgICAgICAvLyBz
YXZlcy4KKyAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDQz
KSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlv
bkVwaWxvZ3VlKCk7CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgIHJv
b3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdp
bigpLCByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOwor
CisgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKworICAgIGludDhfdCB2YWx1ZTsKKyAg
ICB2YWx1ZSA9IDQyOworICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAmdmFsdWUgLSAyLCAx
KSA9PSAwKTsKKyAgICB2YWx1ZSA9IDEyNzsKKyAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwg
JnZhbHVlIC0gMiwgMSkgPT0gMCk7CisgICAgdmFsdWUgPSA0MTsKKyAgICBDSEVDSyhpbnZva2U8
aW50PigqY29kZSwgJnZhbHVlIC0gMiwgMSkgPT0gNDIpOworICAgIHZhbHVlID0gMDsKKyAgICBD
SEVDSyhpbnZva2U8aW50PigqY29kZSwgJnZhbHVlIC0gMiwgMSkgPT0gNDIpOworICAgIHZhbHVl
ID0gLTE7CisgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsICZ2YWx1ZSAtIDIsIDEpID09IDQy
KTsKK30KKwordm9pZCB0ZXN0Q2hlY2tUd29Ob25SZWR1bmRhbnRNZWdhQ29tYm9zKCkKK3sKKyAg
ICBQcm9jZWR1cmUgcHJvYzsKKyAgICAKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRC
bG9jaygpOworICAgIEJhc2ljQmxvY2sqIHRoZW5DYXNlID0gcHJvYy5hZGRCbG9jaygpOworICAg
IEJhc2ljQmxvY2sqIGVsc2VDYXNlID0gcHJvYy5hZGRCbG9jaygpOworICAgIAorICAgIFZhbHVl
KiBiYXNlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigp
LCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIFZhbHVlKiBpbmRleCA9IHJvb3QtPmFwcGVu
ZE5ldzxWYWx1ZT4oCisgICAgICAgIHByb2MsIFpFeHQzMiwgT3JpZ2luKCksCisgICAgICAgIHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCks
CisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSkpKTsKKyAgICBWYWx1ZSogYnJhbmNoUHJlZGlj
YXRlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgcHJvYywgQml0QW5kLCBPcmln
aW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2Ms
IFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJl
Z1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKSksCisgICAgICAg
IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAweGZmKSk7CisK
KyAgICBWYWx1ZSogcHRyID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgcHJvYywg
QWRkLCBPcmlnaW4oKSwgYmFzZSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAg
ICAgICAgICAgIHByb2MsIFNobCwgT3JpZ2luKCksIGluZGV4LAorICAgICAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDEpKSk7CisKKyAgICBWYWx1
ZSogY2hlY2tQcmVkaWNhdGUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICBwcm9j
LCBMZXNzVGhhbiwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxNZW1vcnlWYWx1
ZT4ocHJvYywgTG9hZDhTLCBPcmlnaW4oKSwgcHRyKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3
PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDQyKSk7CisKKyAgICByb290LT5hcHBlbmRO
ZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgQnJhbmNoLCBPcmlnaW4oKSwgYnJhbmNo
UHJlZGljYXRlLAorICAgICAgICBGcmVxdWVudGVkQmxvY2sodGhlbkNhc2UpLCBGcmVxdWVudGVk
QmxvY2soZWxzZUNhc2UpKTsKKyAgICAKKyAgICBDaGVja1ZhbHVlKiBjaGVjayA9IHRoZW5DYXNl
LT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4ocHJvYywgQ2hlY2ssIE9yaWdpbigpLCBjaGVja1ByZWRp
Y2F0ZSk7CisgICAgY2hlY2stPnNldEdlbmVyYXRvcigKKyAgICAgICAgWyZdIChDQ2FsbEhlbHBl
cnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAg
ICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsK
KyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5zaXplKCkgPT0gMSk7CisKKyAgICAgICAgICAgIC8v
IFRoaXMgc2hvdWxkIGFsd2F5cyB3b3JrIGJlY2F1c2UgYSBmdW5jdGlvbiB0aGlzIHNpbXBsZSBz
aG91bGQgbmV2ZXIgaGF2ZSBjYWxsZWUKKyAgICAgICAgICAgIC8vIHNhdmVzLgorICAgICAgICAg
ICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoNDIpLCBHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUik7CisgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKKyAg
ICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgdGhlbkNhc2UtPmFwcGVuZE5l
dzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCB0aGVuQ2Fz
ZS0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDQzKSk7CisKKyAgICBD
aGVja1ZhbHVlKiBjaGVjazIgPSBlbHNlQ2FzZS0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KHByb2Ms
IENoZWNrLCBPcmlnaW4oKSwgY2hlY2tQcmVkaWNhdGUpOworICAgIGNoZWNrMi0+c2V0R2VuZXJh
dG9yKAorICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVy
YXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdp
c3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnNp
emUoKSA9PSAxKTsKKworICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgYWx3YXlzIHdvcmsgYmVj
YXVzZSBhIGZ1bmN0aW9uIHRoaXMgc2ltcGxlIHNob3VsZCBuZXZlciBoYXZlIGNhbGxlZQorICAg
ICAgICAgICAgLy8gc2F2ZXMuCisgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMig0NCksIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgICAgIGpp
dC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOworICAgICAgICAgICAgaml0LnJldCgpOworICAgICAg
ICB9KTsKKyAgICBlbHNlQ2FzZS0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHBy
b2MsIFJldHVybiwgT3JpZ2luKCksIGVsc2VDYXNlLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgNDUpKTsKKworICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisK
KyAgICBpbnQ4X3QgdmFsdWU7CisKKyAgICB2YWx1ZSA9IDQyOworICAgIENIRUNLKGludm9rZTxp
bnQ+KCpjb2RlLCAmdmFsdWUgLSAyLCAxLCB0cnVlKSA9PSA0Myk7CisgICAgdmFsdWUgPSAxMjc7
CisgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsICZ2YWx1ZSAtIDIsIDEsIHRydWUpID09IDQz
KTsKKyAgICB2YWx1ZSA9IDQxOworICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAmdmFsdWUg
LSAyLCAxLCB0cnVlKSA9PSA0Mik7CisgICAgdmFsdWUgPSAwOworICAgIENIRUNLKGludm9rZTxp
bnQ+KCpjb2RlLCAmdmFsdWUgLSAyLCAxLCB0cnVlKSA9PSA0Mik7CisgICAgdmFsdWUgPSAtMTsK
KyAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgJnZhbHVlIC0gMiwgMSwgdHJ1ZSkgPT0gNDIp
OworCisgICAgdmFsdWUgPSA0MjsKKyAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgJnZhbHVl
IC0gMiwgMSwgZmFsc2UpID09IDQ1KTsKKyAgICB2YWx1ZSA9IDEyNzsKKyAgICBDSEVDSyhpbnZv
a2U8aW50PigqY29kZSwgJnZhbHVlIC0gMiwgMSwgZmFsc2UpID09IDQ1KTsKKyAgICB2YWx1ZSA9
IDQxOworICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAmdmFsdWUgLSAyLCAxLCBmYWxzZSkg
PT0gNDQpOworICAgIHZhbHVlID0gMDsKKyAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgJnZh
bHVlIC0gMiwgMSwgZmFsc2UpID09IDQ0KTsKKyAgICB2YWx1ZSA9IC0xOworICAgIENIRUNLKGlu
dm9rZTxpbnQ+KCpjb2RlLCAmdmFsdWUgLSAyLCAxLCBmYWxzZSkgPT0gNDQpOworfQorCiB2b2lk
IHRlc3RDaGVja0FkZEltbSgpCiB7CiAgICAgUHJvY2VkdXJlIHByb2M7CkBAIC03MjcwLDYgKzc0
MzUsMjM4IEBAIHZvaWQgdGVzdFRydW5jU0V4dDMyKGludDMyX3QgdmFsdWUpCiAgICAgQ0hFQ0so
Y29tcGlsZUFuZFJ1bjxpbnQzMl90Pihwcm9jLCB2YWx1ZSkgPT0gdmFsdWUpOwogfQogCit2b2lk
IHRlc3RTRXh0OChpbnQzMl90IHZhbHVlKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJh
c2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PENv
bnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgIHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBTRXh0OCwgT3JpZ2luKCks
CisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgIHBy
b2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJn
dW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpKSk7
CisKKyAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludDMyX3Q+KHByb2MsIHZhbHVlKSA9PSBzdGF0
aWNfY2FzdDxpbnQzMl90PihzdGF0aWNfY2FzdDxpbnQ4X3Q+KHZhbHVlKSkpOworfQorCit2b2lk
IHRlc3RTRXh0OEZvbGQoaW50MzJfdCB2YWx1ZSkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAg
ICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIHJvb3QtPmFwcGVuZE5l
dzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAg
ICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgU0V4dDgsIE9yaWdp
bigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIHZhbHVlKSkpOworCisgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQzMl90Pihwcm9j
KSA9PSBzdGF0aWNfY2FzdDxpbnQzMl90PihzdGF0aWNfY2FzdDxpbnQ4X3Q+KHZhbHVlKSkpOwor
fQorCit2b2lkIHRlc3RTRXh0OFNFeHQ4KGludDMyX3QgdmFsdWUpCit7CisgICAgUHJvY2VkdXJl
IHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICByb290
LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4o
KSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFNF
eHQ4LCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAg
ICAgICAgICAgICAgcHJvYywgU0V4dDgsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgIHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmln
aW4oKSwKKyAgICAgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKSkpKTsKKworICAgIENI
RUNLKGNvbXBpbGVBbmRSdW48aW50MzJfdD4ocHJvYywgdmFsdWUpID09IHN0YXRpY19jYXN0PGlu
dDMyX3Q+KHN0YXRpY19jYXN0PGludDhfdD4odmFsdWUpKSk7Cit9CisKK3ZvaWQgdGVzdFNFeHQ4
U0V4dDE2KGludDMyX3QgdmFsdWUpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNC
bG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJv
bFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFNFeHQ4LCBPcmlnaW4oKSwKKyAg
ICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywg
U0V4dDE2LCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+
KAorICAgICAgICAgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgICAg
ICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSkpKSk7CisKKyAgICBDSEVDSyhjb21waWxlQW5kUnVu
PGludDMyX3Q+KHByb2MsIHZhbHVlKSA9PSBzdGF0aWNfY2FzdDxpbnQzMl90PihzdGF0aWNfY2Fz
dDxpbnQ4X3Q+KHZhbHVlKSkpOworfQorCit2b2lkIHRlc3RTRXh0OEJpdEFuZChpbnQzMl90IHZh
bHVlLCBpbnQzMl90IG1hc2spCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9j
ayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZh
bHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFNFeHQ4LCBPcmlnaW4oKSwKKyAgICAg
ICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgQml0
QW5kLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAor
ICAgICAgICAgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgICAgICAg
ICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIwKSksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3
PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIG1hc2spKSkpOworCisgICAgQ0hFQ0soY29t
cGlsZUFuZFJ1bjxpbnQzMl90Pihwcm9jLCB2YWx1ZSkgPT0gc3RhdGljX2Nhc3Q8aW50MzJfdD4o
c3RhdGljX2Nhc3Q8aW50OF90Pih2YWx1ZSAmIG1hc2spKSk7Cit9CisKK3ZvaWQgdGVzdEJpdEFu
ZFNFeHQ4KGludDMyX3QgdmFsdWUsIGludDMyX3QgbWFzaykKK3sKKyAgICBQcm9jZWR1cmUgcHJv
YzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIHJvb3QtPmFw
cGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAor
ICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgQml0QW5k
LCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAg
ICAgICAgICAgcHJvYywgU0V4dDgsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4o
KSwKKyAgICAgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+
KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKSksCisgICAgICAgICAgICBy
b290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbWFzaykpKTsKKwor
ICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50MzJfdD4ocHJvYywgdmFsdWUpID09IChzdGF0aWNf
Y2FzdDxpbnQzMl90PihzdGF0aWNfY2FzdDxpbnQ4X3Q+KHZhbHVlKSkgJiBtYXNrKSk7Cit9CisK
K3ZvaWQgdGVzdFNFeHQxNihpbnQzMl90IHZhbHVlKQoreworICAgIFByb2NlZHVyZSBwcm9jOwor
ICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgcm9vdC0+YXBwZW5k
TmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAg
ICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBTRXh0MTYsIE9y
aWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAg
ICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjApKSkpOworCisgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQzMl90Pihwcm9jLCB2YWx1ZSkg
PT0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oc3RhdGljX2Nhc3Q8aW50MTZfdD4odmFsdWUpKSk7Cit9
CisKK3ZvaWQgdGVzdFNFeHQxNkZvbGQoaW50MzJfdCB2YWx1ZSkKK3sKKyAgICBQcm9jZWR1cmUg
cHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIHJvb3Qt
PmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigp
LAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgU0V4
dDE2LCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+
KHByb2MsIE9yaWdpbigpLCB2YWx1ZSkpKTsKKworICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50
MzJfdD4ocHJvYykgPT0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oc3RhdGljX2Nhc3Q8aW50MTZfdD4o
dmFsdWUpKSk7Cit9CisKK3ZvaWQgdGVzdFNFeHQxNlNFeHQxNihpbnQzMl90IHZhbHVlKQorewor
ICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2Nr
KCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJl
dHVybiwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAg
ICAgICBwcm9jLCBTRXh0MTYsIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBTRXh0MTYsIE9yaWdpbigpLAorICAgICAg
ICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgIHBy
b2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3
PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjAp
KSkpKTsKKworICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50MzJfdD4ocHJvYywgdmFsdWUpID09
IHN0YXRpY19jYXN0PGludDMyX3Q+KHN0YXRpY19jYXN0PGludDE2X3Q+KHZhbHVlKSkpOworfQor
Cit2b2lkIHRlc3RTRXh0MTZTRXh0OChpbnQzMl90IHZhbHVlKQoreworICAgIFByb2NlZHVyZSBw
cm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgcm9vdC0+
YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCks
CisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBTRXh0
MTYsIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAg
ICAgICAgICAgICBwcm9jLCBTRXh0OCwgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdp
bigpLAorICAgICAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1
ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpKSkpOworCisgICAgQ0hF
Q0soY29tcGlsZUFuZFJ1bjxpbnQzMl90Pihwcm9jLCB2YWx1ZSkgPT0gc3RhdGljX2Nhc3Q8aW50
MzJfdD4oc3RhdGljX2Nhc3Q8aW50OF90Pih2YWx1ZSkpKTsKK30KKwordm9pZCB0ZXN0U0V4dDE2
Qml0QW5kKGludDMyX3QgdmFsdWUsIGludDMyX3QgbWFzaykKK3sKKyAgICBQcm9jZWR1cmUgcHJv
YzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIHJvb3QtPmFw
cGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAor
ICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgU0V4dDE2
LCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAg
ICAgICAgICAgcHJvYywgQml0QW5kLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICByb290LT5h
cHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2lu
KCksCisgICAgICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSksCisgICAgICAgICAgICAg
ICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIG1hc2spKSkp
OworCisgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQzMl90Pihwcm9jLCB2YWx1ZSkgPT0gc3Rh
dGljX2Nhc3Q8aW50MzJfdD4oc3RhdGljX2Nhc3Q8aW50MTZfdD4odmFsdWUgJiBtYXNrKSkpOwor
fQorCit2b2lkIHRlc3RCaXRBbmRTRXh0MTYoaW50MzJfdCB2YWx1ZSwgaW50MzJfdCBtYXNrKQor
eworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJs
b2NrKCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2Ms
IFJldHVybiwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAg
ICAgICAgICBwcm9jLCBCaXRBbmQsIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBTRXh0MTYsIE9yaWdpbigpLAorICAg
ICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAg
IHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjApKSksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgbWFzaykpKTsKKworICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50MzJfdD4ocHJv
YywgdmFsdWUpID09IChzdGF0aWNfY2FzdDxpbnQzMl90PihzdGF0aWNfY2FzdDxpbnQxNl90Pih2
YWx1ZSkpICYgbWFzaykpOworfQorCit2b2lkIHRlc3RTRXh0MzJCaXRBbmQoaW50MzJfdCB2YWx1
ZSwgaW50MzJfdCBtYXNrKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sq
IHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1
ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBTRXh0MzIsIE9yaWdpbigpLAorICAgICAg
ICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBCaXRB
bmQsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisg
ICAgICAgICAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAg
ICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBH
UFJJbmZvOjphcmd1bWVudEdQUjApKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8
Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbWFzaykpKSk7CisKKyAgICBDSEVDSyhjb21w
aWxlQW5kUnVuPGludDY0X3Q+KHByb2MsIHZhbHVlKSA9PSBzdGF0aWNfY2FzdDxpbnQ2NF90Pih2
YWx1ZSAmIG1hc2spKTsKK30KKwordm9pZCB0ZXN0Qml0QW5kU0V4dDMyKGludDMyX3QgdmFsdWUs
IGludDY0X3QgbWFzaykKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiBy
b290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+
KAorICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmRO
ZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgQml0QW5kLCBPcmlnaW4oKSwKKyAgICAgICAg
ICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgU0V4dDMy
LCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAg
ICAgICAgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgICAgICAgICAg
ICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIwKSkpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0
NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIG1hc2spKSk7CisKKyAgICBDSEVDSyhjb21waWxlQW5k
UnVuPGludDY0X3Q+KHByb2MsIHZhbHVlKSA9PSAoc3RhdGljX2Nhc3Q8aW50NjRfdD4odmFsdWUp
ICYgbWFzaykpOworfQorCiB2b2lkIHRlc3RCYXNpY1NlbGVjdCgpCiB7CiAgICAgUHJvY2VkdXJl
IHByb2M7CkBAIC03OTM3LDYgKzgzMzQsMTIgQEAgdm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVy
KQogICAgIFJVTih0ZXN0Qml0QW5kQXJnSW1tKDQzLCAwKSk7CiAgICAgUlVOKHRlc3RCaXRBbmRB
cmdJbW0oMTAsIDMpKTsKICAgICBSVU4odGVzdEJpdEFuZEFyZ0ltbSg0MiwgMHhmZmZmZmZmZmZm
ZmZmZmZmKSk7CisgICAgUlVOKHRlc3RCaXRBbmRBcmdJbW0oNDIsIDB4ZmYpKTsKKyAgICBSVU4o
dGVzdEJpdEFuZEFyZ0ltbSgzMDAsIDB4ZmYpKTsKKyAgICBSVU4odGVzdEJpdEFuZEFyZ0ltbSgt
MzAwLCAweGZmKSk7CisgICAgUlVOKHRlc3RCaXRBbmRBcmdJbW0oNDIsIDB4ZmZmZikpOworICAg
IFJVTih0ZXN0Qml0QW5kQXJnSW1tKDQwMDAwLCAweGZmZmYpKTsKKyAgICBSVU4odGVzdEJpdEFu
ZEFyZ0ltbSgtNDAwMDAsIDB4ZmZmZikpOwogICAgIFJVTih0ZXN0Qml0QW5kSW1tQXJnKDQzLCA0
MykpOwogICAgIFJVTih0ZXN0Qml0QW5kSW1tQXJnKDQzLCAwKSk7CiAgICAgUlVOKHRlc3RCaXRB
bmRJbW1BcmcoMTAsIDMpKTsKQEAgLTc5NjcsNiArODM3MCwxMiBAQCB2b2lkIHJ1bihjb25zdCBj
aGFyKiBmaWx0ZXIpCiAgICAgUlVOKHRlc3RCaXRBbmRJbW1BcmczMig0MywgMCkpOwogICAgIFJV
Tih0ZXN0Qml0QW5kSW1tQXJnMzIoMTAsIDMpKTsKICAgICBSVU4odGVzdEJpdEFuZEltbUFyZzMy
KDQyLCAweGZmZmZmZmZmKSk7CisgICAgUlVOKHRlc3RCaXRBbmRJbW1BcmczMig0MiwgMHhmZikp
OworICAgIFJVTih0ZXN0Qml0QW5kSW1tQXJnMzIoMzAwLCAweGZmKSk7CisgICAgUlVOKHRlc3RC
aXRBbmRJbW1BcmczMigtMzAwLCAweGZmKSk7CisgICAgUlVOKHRlc3RCaXRBbmRJbW1BcmczMig0
MiwgMHhmZmZmKSk7CisgICAgUlVOKHRlc3RCaXRBbmRJbW1BcmczMig0MDAwMCwgMHhmZmZmKSk7
CisgICAgUlVOKHRlc3RCaXRBbmRJbW1BcmczMigtNDAwMDAsIDB4ZmZmZikpOwogICAgIFJVTih0
ZXN0Qml0QW5kQml0QW5kQXJnSW1tSW1tMzIoMiwgNywgMykpOwogICAgIFJVTih0ZXN0Qml0QW5k
Qml0QW5kQXJnSW1tSW1tMzIoMSwgNiwgNikpOwogICAgIFJVTih0ZXN0Qml0QW5kQml0QW5kQXJn
SW1tSW1tMzIoMHhmZmZmLCAyNCwgNykpOwpAQCAtODM0Niw2ICs4NzU1LDggQEAgdm9pZCBydW4o
Y29uc3QgY2hhciogZmlsdGVyKQogICAgIFJVTih0ZXN0U2ltcGxlQ2hlY2soKSk7CiAgICAgUlVO
KHRlc3RDaGVja0xlc3NUaGFuKCkpOwogICAgIFJVTih0ZXN0Q2hlY2tNZWdhQ29tYm8oKSk7Cisg
ICAgUlVOKHRlc3RDaGVja1R3b01lZ2FDb21ib3MoKSk7CisgICAgUlVOKHRlc3RDaGVja1R3b05v
blJlZHVuZGFudE1lZ2FDb21ib3MoKSk7CiAgICAgUlVOKHRlc3RDaGVja0FkZEltbSgpKTsKICAg
ICBSVU4odGVzdENoZWNrQWRkSW1tQ29tbXV0ZSgpKTsKICAgICBSVU4odGVzdENoZWNrQWRkSW1t
U29tZVJlZ2lzdGVyKCkpOwpAQCAtODU0NSw2ICs4OTU2LDIwMSBAQCB2b2lkIHJ1bihjb25zdCBj
aGFyKiBmaWx0ZXIpCiAgICAgUlVOKHRlc3RUcnVuY1NFeHQzMigxMDAwMDAwMDAwbGwpKTsKICAg
ICBSVU4odGVzdFRydW5jU0V4dDMyKC0xMDAwMDAwMDAwbGwpKTsKIAorICAgIFJVTih0ZXN0U0V4
dDgoMCkpOworICAgIFJVTih0ZXN0U0V4dDgoMSkpOworICAgIFJVTih0ZXN0U0V4dDgoNDIpKTsK
KyAgICBSVU4odGVzdFNFeHQ4KC0xKSk7CisgICAgUlVOKHRlc3RTRXh0OCgweGZmKSk7CisgICAg
UlVOKHRlc3RTRXh0OCgweDEwMCkpOworICAgIFJVTih0ZXN0U0V4dDhGb2xkKDApKTsKKyAgICBS
VU4odGVzdFNFeHQ4Rm9sZCgxKSk7CisgICAgUlVOKHRlc3RTRXh0OEZvbGQoNDIpKTsKKyAgICBS
VU4odGVzdFNFeHQ4Rm9sZCgtMSkpOworICAgIFJVTih0ZXN0U0V4dDhGb2xkKDB4ZmYpKTsKKyAg
ICBSVU4odGVzdFNFeHQ4Rm9sZCgweDEwMCkpOworICAgIFJVTih0ZXN0U0V4dDhTRXh0OCgwKSk7
CisgICAgUlVOKHRlc3RTRXh0OFNFeHQ4KDEpKTsKKyAgICBSVU4odGVzdFNFeHQ4U0V4dDgoNDIp
KTsKKyAgICBSVU4odGVzdFNFeHQ4U0V4dDgoLTEpKTsKKyAgICBSVU4odGVzdFNFeHQ4U0V4dDgo
MHhmZikpOworICAgIFJVTih0ZXN0U0V4dDhTRXh0OCgweDEwMCkpOworICAgIFJVTih0ZXN0U0V4
dDhTRXh0MTYoMCkpOworICAgIFJVTih0ZXN0U0V4dDhTRXh0MTYoMSkpOworICAgIFJVTih0ZXN0
U0V4dDhTRXh0MTYoNDIpKTsKKyAgICBSVU4odGVzdFNFeHQ4U0V4dDE2KC0xKSk7CisgICAgUlVO
KHRlc3RTRXh0OFNFeHQxNigweGZmKSk7CisgICAgUlVOKHRlc3RTRXh0OFNFeHQxNigweDEwMCkp
OworICAgIFJVTih0ZXN0U0V4dDhTRXh0MTYoMHhmZmZmKSk7CisgICAgUlVOKHRlc3RTRXh0OFNF
eHQxNigweDEwMDAwKSk7CisgICAgUlVOKHRlc3RTRXh0OEJpdEFuZCgwLCAwKSk7CisgICAgUlVO
KHRlc3RTRXh0OEJpdEFuZCgxLCAwKSk7CisgICAgUlVOKHRlc3RTRXh0OEJpdEFuZCg0MiwgMCkp
OworICAgIFJVTih0ZXN0U0V4dDhCaXRBbmQoLTEsIDApKTsKKyAgICBSVU4odGVzdFNFeHQ4Qml0
QW5kKDB4ZmYsIDApKTsKKyAgICBSVU4odGVzdFNFeHQ4Qml0QW5kKDB4MTAwLCAwKSk7CisgICAg
UlVOKHRlc3RTRXh0OEJpdEFuZCgweGZmZmYsIDApKTsKKyAgICBSVU4odGVzdFNFeHQ4Qml0QW5k
KDB4MTAwMDAsIDApKTsKKyAgICBSVU4odGVzdFNFeHQ4Qml0QW5kKDAsIDB4ZikpOworICAgIFJV
Tih0ZXN0U0V4dDhCaXRBbmQoMSwgMHhmKSk7CisgICAgUlVOKHRlc3RTRXh0OEJpdEFuZCg0Miwg
MHhmKSk7CisgICAgUlVOKHRlc3RTRXh0OEJpdEFuZCgtMSwgMHhmKSk7CisgICAgUlVOKHRlc3RT
RXh0OEJpdEFuZCgweGZmLCAweGYpKTsKKyAgICBSVU4odGVzdFNFeHQ4Qml0QW5kKDB4MTAwLCAw
eGYpKTsKKyAgICBSVU4odGVzdFNFeHQ4Qml0QW5kKDB4ZmZmZiwgMHhmKSk7CisgICAgUlVOKHRl
c3RTRXh0OEJpdEFuZCgweDEwMDAwLCAweGYpKTsKKyAgICBSVU4odGVzdFNFeHQ4Qml0QW5kKDAs
IDB4ZmYpKTsKKyAgICBSVU4odGVzdFNFeHQ4Qml0QW5kKDEsIDB4ZmYpKTsKKyAgICBSVU4odGVz
dFNFeHQ4Qml0QW5kKDQyLCAweGZmKSk7CisgICAgUlVOKHRlc3RTRXh0OEJpdEFuZCgtMSwgMHhm
ZikpOworICAgIFJVTih0ZXN0U0V4dDhCaXRBbmQoMHhmZiwgMHhmZikpOworICAgIFJVTih0ZXN0
U0V4dDhCaXRBbmQoMHgxMDAsIDB4ZmYpKTsKKyAgICBSVU4odGVzdFNFeHQ4Qml0QW5kKDB4ZmZm
ZiwgMHhmZikpOworICAgIFJVTih0ZXN0U0V4dDhCaXRBbmQoMHgxMDAwMCwgMHhmZikpOworICAg
IFJVTih0ZXN0U0V4dDhCaXRBbmQoMCwgMHg4MCkpOworICAgIFJVTih0ZXN0U0V4dDhCaXRBbmQo
MSwgMHg4MCkpOworICAgIFJVTih0ZXN0U0V4dDhCaXRBbmQoNDIsIDB4ODApKTsKKyAgICBSVU4o
dGVzdFNFeHQ4Qml0QW5kKC0xLCAweDgwKSk7CisgICAgUlVOKHRlc3RTRXh0OEJpdEFuZCgweGZm
LCAweDgwKSk7CisgICAgUlVOKHRlc3RTRXh0OEJpdEFuZCgweDEwMCwgMHg4MCkpOworICAgIFJV
Tih0ZXN0U0V4dDhCaXRBbmQoMHhmZmZmLCAweDgwKSk7CisgICAgUlVOKHRlc3RTRXh0OEJpdEFu
ZCgweDEwMDAwLCAweDgwKSk7CisgICAgUlVOKHRlc3RCaXRBbmRTRXh0OCgwLCAweGYpKTsKKyAg
ICBSVU4odGVzdEJpdEFuZFNFeHQ4KDEsIDB4ZikpOworICAgIFJVTih0ZXN0Qml0QW5kU0V4dDgo
NDIsIDB4ZikpOworICAgIFJVTih0ZXN0Qml0QW5kU0V4dDgoLTEsIDB4ZikpOworICAgIFJVTih0
ZXN0Qml0QW5kU0V4dDgoMHhmZiwgMHhmKSk7CisgICAgUlVOKHRlc3RCaXRBbmRTRXh0OCgweDEw
MCwgMHhmKSk7CisgICAgUlVOKHRlc3RCaXRBbmRTRXh0OCgweGZmZmYsIDB4ZikpOworICAgIFJV
Tih0ZXN0Qml0QW5kU0V4dDgoMHgxMDAwMCwgMHhmKSk7CisgICAgUlVOKHRlc3RCaXRBbmRTRXh0
OCgwLCAweGZmKSk7CisgICAgUlVOKHRlc3RCaXRBbmRTRXh0OCgxLCAweGZmKSk7CisgICAgUlVO
KHRlc3RCaXRBbmRTRXh0OCg0MiwgMHhmZikpOworICAgIFJVTih0ZXN0Qml0QW5kU0V4dDgoLTEs
IDB4ZmYpKTsKKyAgICBSVU4odGVzdEJpdEFuZFNFeHQ4KDB4ZmYsIDB4ZmYpKTsKKyAgICBSVU4o
dGVzdEJpdEFuZFNFeHQ4KDB4MTAwLCAweGZmKSk7CisgICAgUlVOKHRlc3RCaXRBbmRTRXh0OCgw
eGZmZmYsIDB4ZmYpKTsKKyAgICBSVU4odGVzdEJpdEFuZFNFeHQ4KDB4MTAwMDAsIDB4ZmYpKTsK
KyAgICBSVU4odGVzdEJpdEFuZFNFeHQ4KDAsIDB4ZmZmKSk7CisgICAgUlVOKHRlc3RCaXRBbmRT
RXh0OCgxLCAweGZmZikpOworICAgIFJVTih0ZXN0Qml0QW5kU0V4dDgoNDIsIDB4ZmZmKSk7Cisg
ICAgUlVOKHRlc3RCaXRBbmRTRXh0OCgtMSwgMHhmZmYpKTsKKyAgICBSVU4odGVzdEJpdEFuZFNF
eHQ4KDB4ZmYsIDB4ZmZmKSk7CisgICAgUlVOKHRlc3RCaXRBbmRTRXh0OCgweDEwMCwgMHhmZmYp
KTsKKyAgICBSVU4odGVzdEJpdEFuZFNFeHQ4KDB4ZmZmZiwgMHhmZmYpKTsKKyAgICBSVU4odGVz
dEJpdEFuZFNFeHQ4KDB4MTAwMDAsIDB4ZmZmKSk7CisKKyAgICBSVU4odGVzdFNFeHQxNigwKSk7
CisgICAgUlVOKHRlc3RTRXh0MTYoMSkpOworICAgIFJVTih0ZXN0U0V4dDE2KDQyKSk7CisgICAg
UlVOKHRlc3RTRXh0MTYoLTEpKTsKKyAgICBSVU4odGVzdFNFeHQxNigweGZmZmYpKTsKKyAgICBS
VU4odGVzdFNFeHQxNigweDEwMDAwKSk7CisgICAgUlVOKHRlc3RTRXh0MTZGb2xkKDApKTsKKyAg
ICBSVU4odGVzdFNFeHQxNkZvbGQoMSkpOworICAgIFJVTih0ZXN0U0V4dDE2Rm9sZCg0MikpOwor
ICAgIFJVTih0ZXN0U0V4dDE2Rm9sZCgtMSkpOworICAgIFJVTih0ZXN0U0V4dDE2Rm9sZCgweGZm
ZmYpKTsKKyAgICBSVU4odGVzdFNFeHQxNkZvbGQoMHgxMDAwMCkpOworICAgIFJVTih0ZXN0U0V4
dDE2U0V4dDgoMCkpOworICAgIFJVTih0ZXN0U0V4dDE2U0V4dDgoMSkpOworICAgIFJVTih0ZXN0
U0V4dDE2U0V4dDgoNDIpKTsKKyAgICBSVU4odGVzdFNFeHQxNlNFeHQ4KC0xKSk7CisgICAgUlVO
KHRlc3RTRXh0MTZTRXh0OCgweGZmZmYpKTsKKyAgICBSVU4odGVzdFNFeHQxNlNFeHQ4KDB4MTAw
MDApKTsKKyAgICBSVU4odGVzdFNFeHQxNlNFeHQxNigwKSk7CisgICAgUlVOKHRlc3RTRXh0MTZT
RXh0MTYoMSkpOworICAgIFJVTih0ZXN0U0V4dDE2U0V4dDE2KDQyKSk7CisgICAgUlVOKHRlc3RT
RXh0MTZTRXh0MTYoLTEpKTsKKyAgICBSVU4odGVzdFNFeHQxNlNFeHQxNigweGZmZmYpKTsKKyAg
ICBSVU4odGVzdFNFeHQxNlNFeHQxNigweDEwMDAwKSk7CisgICAgUlVOKHRlc3RTRXh0MTZTRXh0
MTYoMHhmZmZmZmYpKTsKKyAgICBSVU4odGVzdFNFeHQxNlNFeHQxNigweDEwMDAwMDApKTsKKyAg
ICBSVU4odGVzdFNFeHQxNkJpdEFuZCgwLCAwKSk7CisgICAgUlVOKHRlc3RTRXh0MTZCaXRBbmQo
MSwgMCkpOworICAgIFJVTih0ZXN0U0V4dDE2Qml0QW5kKDQyLCAwKSk7CisgICAgUlVOKHRlc3RT
RXh0MTZCaXRBbmQoLTEsIDApKTsKKyAgICBSVU4odGVzdFNFeHQxNkJpdEFuZCgweGZmZmYsIDAp
KTsKKyAgICBSVU4odGVzdFNFeHQxNkJpdEFuZCgweDEwMDAwLCAwKSk7CisgICAgUlVOKHRlc3RT
RXh0MTZCaXRBbmQoMHhmZmZmZmYsIDApKTsKKyAgICBSVU4odGVzdFNFeHQxNkJpdEFuZCgweDEw
MDAwMDAsIDApKTsKKyAgICBSVU4odGVzdFNFeHQxNkJpdEFuZCgwLCAweGYpKTsKKyAgICBSVU4o
dGVzdFNFeHQxNkJpdEFuZCgxLCAweGYpKTsKKyAgICBSVU4odGVzdFNFeHQxNkJpdEFuZCg0Miwg
MHhmKSk7CisgICAgUlVOKHRlc3RTRXh0MTZCaXRBbmQoLTEsIDB4ZikpOworICAgIFJVTih0ZXN0
U0V4dDE2Qml0QW5kKDB4ZmZmZiwgMHhmKSk7CisgICAgUlVOKHRlc3RTRXh0MTZCaXRBbmQoMHgx
MDAwMCwgMHhmKSk7CisgICAgUlVOKHRlc3RTRXh0MTZCaXRBbmQoMHhmZmZmZmYsIDB4ZikpOwor
ICAgIFJVTih0ZXN0U0V4dDE2Qml0QW5kKDB4MTAwMDAwMCwgMHhmKSk7CisgICAgUlVOKHRlc3RT
RXh0MTZCaXRBbmQoMCwgMHhmZmZmKSk7CisgICAgUlVOKHRlc3RTRXh0MTZCaXRBbmQoMSwgMHhm
ZmZmKSk7CisgICAgUlVOKHRlc3RTRXh0MTZCaXRBbmQoNDIsIDB4ZmZmZikpOworICAgIFJVTih0
ZXN0U0V4dDE2Qml0QW5kKC0xLCAweGZmZmYpKTsKKyAgICBSVU4odGVzdFNFeHQxNkJpdEFuZCgw
eGZmZmYsIDB4ZmZmZikpOworICAgIFJVTih0ZXN0U0V4dDE2Qml0QW5kKDB4MTAwMDAsIDB4ZmZm
ZikpOworICAgIFJVTih0ZXN0U0V4dDE2Qml0QW5kKDB4ZmZmZmZmLCAweGZmZmYpKTsKKyAgICBS
VU4odGVzdFNFeHQxNkJpdEFuZCgweDEwMDAwMDAsIDB4ZmZmZikpOworICAgIFJVTih0ZXN0U0V4
dDE2Qml0QW5kKDAsIDB4ODAwMCkpOworICAgIFJVTih0ZXN0U0V4dDE2Qml0QW5kKDEsIDB4ODAw
MCkpOworICAgIFJVTih0ZXN0U0V4dDE2Qml0QW5kKDQyLCAweDgwMDApKTsKKyAgICBSVU4odGVz
dFNFeHQxNkJpdEFuZCgtMSwgMHg4MDAwKSk7CisgICAgUlVOKHRlc3RTRXh0MTZCaXRBbmQoMHhm
ZmZmLCAweDgwMDApKTsKKyAgICBSVU4odGVzdFNFeHQxNkJpdEFuZCgweDEwMDAwLCAweDgwMDAp
KTsKKyAgICBSVU4odGVzdFNFeHQxNkJpdEFuZCgweGZmZmZmZiwgMHg4MDAwKSk7CisgICAgUlVO
KHRlc3RTRXh0MTZCaXRBbmQoMHgxMDAwMDAwLCAweDgwMDApKTsKKyAgICBSVU4odGVzdEJpdEFu
ZFNFeHQxNigwLCAweGYpKTsKKyAgICBSVU4odGVzdEJpdEFuZFNFeHQxNigxLCAweGYpKTsKKyAg
ICBSVU4odGVzdEJpdEFuZFNFeHQxNig0MiwgMHhmKSk7CisgICAgUlVOKHRlc3RCaXRBbmRTRXh0
MTYoLTEsIDB4ZikpOworICAgIFJVTih0ZXN0Qml0QW5kU0V4dDE2KDB4ZmZmZiwgMHhmKSk7Cisg
ICAgUlVOKHRlc3RCaXRBbmRTRXh0MTYoMHgxMDAwMCwgMHhmKSk7CisgICAgUlVOKHRlc3RCaXRB
bmRTRXh0MTYoMHhmZmZmZmYsIDB4ZikpOworICAgIFJVTih0ZXN0Qml0QW5kU0V4dDE2KDB4MTAw
MDAwMCwgMHhmKSk7CisgICAgUlVOKHRlc3RCaXRBbmRTRXh0MTYoMCwgMHhmZmZmKSk7CisgICAg
UlVOKHRlc3RCaXRBbmRTRXh0MTYoMSwgMHhmZmZmKSk7CisgICAgUlVOKHRlc3RCaXRBbmRTRXh0
MTYoNDIsIDB4ZmZmZikpOworICAgIFJVTih0ZXN0Qml0QW5kU0V4dDE2KC0xLCAweGZmZmYpKTsK
KyAgICBSVU4odGVzdEJpdEFuZFNFeHQxNigweGZmZmYsIDB4ZmZmZikpOworICAgIFJVTih0ZXN0
Qml0QW5kU0V4dDE2KDB4MTAwMDAsIDB4ZmZmZikpOworICAgIFJVTih0ZXN0Qml0QW5kU0V4dDE2
KDB4ZmZmZmZmLCAweGZmZmYpKTsKKyAgICBSVU4odGVzdEJpdEFuZFNFeHQxNigweDEwMDAwMDAs
IDB4ZmZmZikpOworICAgIFJVTih0ZXN0Qml0QW5kU0V4dDE2KDAsIDB4ZmZmZmYpKTsKKyAgICBS
VU4odGVzdEJpdEFuZFNFeHQxNigxLCAweGZmZmZmKSk7CisgICAgUlVOKHRlc3RCaXRBbmRTRXh0
MTYoNDIsIDB4ZmZmZmYpKTsKKyAgICBSVU4odGVzdEJpdEFuZFNFeHQxNigtMSwgMHhmZmZmZikp
OworICAgIFJVTih0ZXN0Qml0QW5kU0V4dDE2KDB4ZmZmZiwgMHhmZmZmZikpOworICAgIFJVTih0
ZXN0Qml0QW5kU0V4dDE2KDB4MTAwMDAsIDB4ZmZmZmYpKTsKKyAgICBSVU4odGVzdEJpdEFuZFNF
eHQxNigweGZmZmZmZiwgMHhmZmZmZikpOworICAgIFJVTih0ZXN0Qml0QW5kU0V4dDE2KDB4MTAw
MDAwMCwgMHhmZmZmZikpOworCisgICAgUlVOKHRlc3RTRXh0MzJCaXRBbmQoMCwgMCkpOworICAg
IFJVTih0ZXN0U0V4dDMyQml0QW5kKDEsIDApKTsKKyAgICBSVU4odGVzdFNFeHQzMkJpdEFuZCg0
MiwgMCkpOworICAgIFJVTih0ZXN0U0V4dDMyQml0QW5kKC0xLCAwKSk7CisgICAgUlVOKHRlc3RT
RXh0MzJCaXRBbmQoMHg4MDAwMDAwMCwgMCkpOworICAgIFJVTih0ZXN0U0V4dDMyQml0QW5kKDAs
IDB4ZikpOworICAgIFJVTih0ZXN0U0V4dDMyQml0QW5kKDEsIDB4ZikpOworICAgIFJVTih0ZXN0
U0V4dDMyQml0QW5kKDQyLCAweGYpKTsKKyAgICBSVU4odGVzdFNFeHQzMkJpdEFuZCgtMSwgMHhm
KSk7CisgICAgUlVOKHRlc3RTRXh0MzJCaXRBbmQoMHg4MDAwMDAwMCwgMHhmKSk7CisgICAgUlVO
KHRlc3RTRXh0MzJCaXRBbmQoMCwgMHg4MDAwMDAwMCkpOworICAgIFJVTih0ZXN0U0V4dDMyQml0
QW5kKDEsIDB4ODAwMDAwMDApKTsKKyAgICBSVU4odGVzdFNFeHQzMkJpdEFuZCg0MiwgMHg4MDAw
MDAwMCkpOworICAgIFJVTih0ZXN0U0V4dDMyQml0QW5kKC0xLCAweDgwMDAwMDAwKSk7CisgICAg
UlVOKHRlc3RTRXh0MzJCaXRBbmQoMHg4MDAwMDAwMCwgMHg4MDAwMDAwMCkpOworICAgIFJVTih0
ZXN0Qml0QW5kU0V4dDMyKDAsIDB4ZikpOworICAgIFJVTih0ZXN0Qml0QW5kU0V4dDMyKDEsIDB4
ZikpOworICAgIFJVTih0ZXN0Qml0QW5kU0V4dDMyKDQyLCAweGYpKTsKKyAgICBSVU4odGVzdEJp
dEFuZFNFeHQzMigtMSwgMHhmKSk7CisgICAgUlVOKHRlc3RCaXRBbmRTRXh0MzIoMHhmZmZmLCAw
eGYpKTsKKyAgICBSVU4odGVzdEJpdEFuZFNFeHQzMigweDEwMDAwLCAweGYpKTsKKyAgICBSVU4o
dGVzdEJpdEFuZFNFeHQzMigweGZmZmZmZiwgMHhmKSk7CisgICAgUlVOKHRlc3RCaXRBbmRTRXh0
MzIoMHgxMDAwMDAwLCAweGYpKTsKKyAgICBSVU4odGVzdEJpdEFuZFNFeHQzMigwLCAweGZmZmYw
MDAwMDAwMGxsdSkpOworICAgIFJVTih0ZXN0Qml0QW5kU0V4dDMyKDEsIDB4ZmZmZjAwMDAwMDAw
bGx1KSk7CisgICAgUlVOKHRlc3RCaXRBbmRTRXh0MzIoNDIsIDB4ZmZmZjAwMDAwMDAwbGx1KSk7
CisgICAgUlVOKHRlc3RCaXRBbmRTRXh0MzIoLTEsIDB4ZmZmZjAwMDAwMDAwbGx1KSk7CisgICAg
UlVOKHRlc3RCaXRBbmRTRXh0MzIoMHg4MDAwMDAwMCwgMHhmZmZmMDAwMDAwMDBsbHUpKTsKKwog
ICAgIFJVTih0ZXN0QmFzaWNTZWxlY3QoKSk7CiAgICAgUlVOKHRlc3RTZWxlY3RUZXN0KCkpOwog
ICAgIFJVTih0ZXN0U2VsZWN0Q29tcGFyZURvdWJsZSgpKTsKQEAgLTg1ODcsNiArOTE5Myw3IEBA
IHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKIAogICAgIGZvciAoVGhyZWFkSWRlbnRpZmll
ciB0aHJlYWQgOiB0aHJlYWRzKQogICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJl
YWQpOworICAgIGNyYXNoTG9jay5sb2NrKCk7CiB9CiAKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFj
ZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNv
ZGVzCShyZXZpc2lvbiAxOTQwMTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ck9wY29kZS5vcGNvZGVzCSh3b3JraW5nIGNvcHkpCkBAIC0yODgsNiArMjg4LDI2IEBAIE1vdmUz
MiBVOkcsIEQ6RwogU2lnbkV4dGVuZDMyVG9QdHIgVTpHLCBEOkcKICAgICBUbXAsIFRtcAogCita
ZXJvRXh0ZW5kOFRvMzIgVTpHLCBEOkcKKyAgICBUbXAsIFRtcAorICAgIEFkZHIsIFRtcCBhcyBs
b2FkOAorICAgIEluZGV4LCBUbXAgYXMgbG9hZDgKKworU2lnbkV4dGVuZDhUbzMyIFU6RywgRDpH
CisgICAgVG1wLCBUbXAKKyAgICBBZGRyLCBUbXAgYXMgbG9hZDhTaWduZWRFeHRlbmRUbzMyCisg
ICAgSW5kZXgsIFRtcCBhcyBsb2FkOFNpZ25lZEV4dGVuZFRvMzIKKworWmVyb0V4dGVuZDE2VG8z
MiBVOkcsIEQ6RworICAgIFRtcCwgVG1wCisgICAgQWRkciwgVG1wIGFzIGxvYWQxNgorICAgIElu
ZGV4LCBUbXAgYXMgbG9hZDE2CisKK1NpZ25FeHRlbmQxNlRvMzIgVTpHLCBEOkcKKyAgICBUbXAs
IFRtcAorICAgIEFkZHIsIFRtcCBhcyBsb2FkMTZTaWduZWRFeHRlbmRUbzMyCisgICAgSW5kZXgs
IFRtcCBhcyBsb2FkMTZTaWduZWRFeHRlbmRUbzMyCisKIE1vdmVGbG9hdCBVOkYsIEQ6RgogICAg
IFRtcCwgVG1wIGFzIG1vdmVEb3VibGUKICAgICBBZGRyLCBUbXAgYXMgbG9hZEZsb2F0Cg==
</data>
<flag name="review"
          id="292338"
          type_id="1"
          status="+"
          setter="benjamin"
    />
          </attachment>
      

    </bug>

</bugzilla>