<?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>170161</bug_id>
          
          <creation_ts>2017-03-27 20:11:58 -0700</creation_ts>
          <short_desc>Air should support linear scan for optLevel&lt;2</short_desc>
          <delta_ts>2017-03-31 16:28:55 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>buildbot</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1291765</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-27 20:11:58 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291767</commentid>
    <comment_count>1</comment_count>
      <attachid>305548</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-27 20:12:28 -0700</bug_when>
    <thetext>Created attachment 305548
it begins</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291794</commentid>
    <comment_count>2</comment_count>
      <attachid>305558</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-27 21:20:04 -0700</bug_when>
    <thetext>Created attachment 305558
so close</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291801</commentid>
    <comment_count>3</comment_count>
      <attachid>305561</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-27 22:29:50 -0700</bug_when>
    <thetext>Created attachment 305561
the latest

I realized that I stumbled upon a super gnarly situation where linear scan has a bad time with Air&apos;s liberal use of precoloring.

I think I found a megahack to work around this.  I wrote it down in a comment.  I&apos;ll get back to this tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291966</commentid>
    <comment_count>4</comment_count>
      <attachid>305612</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-28 11:16:04 -0700</bug_when>
    <thetext>Created attachment 305612
seems like it might work

Haven&apos;t tested it yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292169</commentid>
    <comment_count>5</comment_count>
      <attachid>305662</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-28 16:19:59 -0700</bug_when>
    <thetext>Created attachment 305662
it linear scanned marsaglia and didn&apos;t crash</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292255</commentid>
    <comment_count>6</comment_count>
      <attachid>305690</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-28 18:34:28 -0700</bug_when>
    <thetext>Created attachment 305690
seems like it&apos;s starting to work

It linear scanned imaging-gaussian-blur</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292261</commentid>
    <comment_count>7</comment_count>
      <attachid>305694</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-28 18:53:11 -0700</bug_when>
    <thetext>Created attachment 305694
passes a few tests here and there</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292271</commentid>
    <comment_count>8</comment_count>
      <attachid>305697</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-28 20:04:30 -0700</bug_when>
    <thetext>Created attachment 305697
passing more tests!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292569</commentid>
    <comment_count>9</comment_count>
      <attachid>305787</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-29 14:16:44 -0700</bug_when>
    <thetext>Created attachment 305787
more things

Added a bunch of debug support, including a way to force linear scan to first spill all the things before proceeding further.  This tests that linear scan&apos;s spiller is sound.

So far it looks like the spiller is sound but the allocator itself is borked.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292650</commentid>
    <comment_count>10</comment_count>
      <attachid>305814</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-29 17:26:02 -0700</bug_when>
    <thetext>Created attachment 305814
fixed another bug

It&apos;s now passing a bunch of tests that it was previously failing.  Rerunning all tests now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292686</commentid>
    <comment_count>11</comment_count>
      <attachid>305825</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-29 20:21:25 -0700</bug_when>
    <thetext>Created attachment 305825
changed the approach to clobbers

Switching to using one of the approaches suggested in the paper.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292692</commentid>
    <comment_count>12</comment_count>
      <attachid>305829</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-29 21:27:03 -0700</bug_when>
    <thetext>Created attachment 305829
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292693</commentid>
    <comment_count>13</comment_count>
      <attachid>305830</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-29 21:31:22 -0700</bug_when>
    <thetext>Created attachment 305830
not failing so many tests anymore

But still failing many tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292696</commentid>
    <comment_count>14</comment_count>
      <attachid>305832</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-29 21:52:43 -0700</bug_when>
    <thetext>Created attachment 305832
another big fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292700</commentid>
    <comment_count>15</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-29 22:22:57 -0700</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #14)
&gt; Created attachment 305832 [details]
&gt; another big fix

With this it passes all JSC tests but I&apos;m still able to get it to crash through fuzz tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292878</commentid>
    <comment_count>16</comment_count>
      <attachid>305885</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-30 13:15:29 -0700</bug_when>
    <thetext>Created attachment 305885
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292892</commentid>
    <comment_count>17</comment_count>
      <attachid>305890</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-30 13:23:04 -0700</bug_when>
    <thetext>Created attachment 305890
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292893</commentid>
    <comment_count>18</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-03-30 13:25:22 -0700</bug_when>
    <thetext>Attachment 305890 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/air/AirAllocateRegistersByLinearScan.cpp:34:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/air/AirAllocateRegistersByLinearScan.cpp:420:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/JavaScriptCore/b3/air/AirAllocateRegistersByLinearScan.cpp:420:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Range.h:88:  Missing spaces around |  [whitespace/operators] [3]
Total errors found: 4 in 65 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>1292917</commentid>
    <comment_count>19</comment_count>
      <attachid>305896</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-30 13:50:15 -0700</bug_when>
    <thetext>Created attachment 305896
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292919</commentid>
    <comment_count>20</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-03-30 13:52:17 -0700</bug_when>
    <thetext>Attachment 305896 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/air/AirAllocateRegistersByLinearScan.cpp:34:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/air/AirAllocateRegistersByLinearScan.cpp:420:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/JavaScriptCore/b3/air/AirAllocateRegistersByLinearScan.cpp:420:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Range.h:88:  Missing spaces around |  [whitespace/operators] [3]
Total errors found: 4 in 65 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>1292983</commentid>
    <comment_count>21</comment_count>
      <attachid>305896</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-30 15:37:48 -0700</bug_when>
    <thetext>Comment on attachment 305896
the patch

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

r=me. Please fix the various places you have OOPS

&gt; Source/JavaScriptCore/b3/air/AirAllocateRegistersByLinearScan.cpp:151
&gt; +            index += block-&gt;size() * 2;

shouldn&apos;t this be block-&gt;size()*2+1 since block-&gt;size()*2 is the tail?
Or is the head of one block OK to be the same as the tail?

&gt; Source/JavaScriptCore/b3/air/AirAllocateRegistersByLinearScan.cpp:407
&gt; +            if (m_active.size() != m_registers.size()) {
&gt; +                bool didAssign = false;
&gt; +                for (Reg reg : m_registers) {
&gt; +                    if (!m_activeRegs.contains(reg) &amp;&amp; entry.possibleRegs.contains(reg)) {
&gt; +                        assign(tmp, reg);
&gt; +                        didAssign = true;
&gt; +                        break;
&gt; +                    }
&gt; +                }
&gt; +                if (didAssign)
&gt; +                    continue;
&gt; +            }

We could totally do biased coloring here to try to remove some extra moves. Should be cheap, and benefit quality of code in some programs. Code gen quality isn&apos;t a priority for this phase, but if we get a throughput progression without slowing this phase down, we should do it. Might be worth a FIXME. I&apos;m happy to hack it up.

&gt; Source/JavaScriptCore/b3/air/AirAllocateRegistersByLinearScan.cpp:422
&gt; +                spill(tmp);

What guarantees !entry.isUnspillable here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292988</commentid>
    <comment_count>22</comment_count>
      <attachid>305896</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-30 15:45:08 -0700</bug_when>
    <thetext>Comment on attachment 305896
the patch

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

&gt; Source/JavaScriptCore/b3/air/AirAllocateRegistersByLinearScan.cpp:61
&gt; +bool verbose() { return Options::airLinearScanVerbose(); }

nit: I&apos;m not sure this really needs to be an option now that the phase works.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292989</commentid>
    <comment_count>23</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-30 15:46:00 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #21)
&gt; Comment on attachment 305896 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=305896&amp;action=review
&gt; 
&gt; r=me. Please fix the various places you have OOPS

Right!  I will!

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/air/AirAllocateRegistersByLinearScan.cpp:151
&gt; &gt; +            index += block-&gt;size() * 2;
&gt; 
&gt; shouldn&apos;t this be block-&gt;size()*2+1 since block-&gt;size()*2 is the tail?
&gt; Or is the head of one block OK to be the same as the tail?

Basic blocks already have &quot;double padding&quot; between them in the sense that we treat the point after the terminal to be distinct from the point before the first instruction in the successor(s). The indexing scheme in this patch means that if you have a block like:

    Foo
    Bar
    Baz

Then it will be indexed as follows:

0
    Foo
1
2
    Bar
3
4
    Baz
5

We don&apos;t need the extra +1, since every block is indexed with padding.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/air/AirAllocateRegistersByLinearScan.cpp:407
&gt; &gt; +            if (m_active.size() != m_registers.size()) {
&gt; &gt; +                bool didAssign = false;
&gt; &gt; +                for (Reg reg : m_registers) {
&gt; &gt; +                    if (!m_activeRegs.contains(reg) &amp;&amp; entry.possibleRegs.contains(reg)) {
&gt; &gt; +                        assign(tmp, reg);
&gt; &gt; +                        didAssign = true;
&gt; &gt; +                        break;
&gt; &gt; +                    }
&gt; &gt; +                }
&gt; &gt; +                if (didAssign)
&gt; &gt; +                    continue;
&gt; &gt; +            }
&gt; 
&gt; We could totally do biased coloring here to try to remove some extra moves.
&gt; Should be cheap, and benefit quality of code in some programs. Code gen
&gt; quality isn&apos;t a priority for this phase, but if we get a throughput
&gt; progression without slowing this phase down, we should do it. Might be worth
&gt; a FIXME. I&apos;m happy to hack it up.

I&apos;ll add a FIXME.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/air/AirAllocateRegistersByLinearScan.cpp:422
&gt; &gt; +                spill(tmp);
&gt; 
&gt; What guarantees !entry.isUnspillable here?

This means that a tmp introduced by the spiller was born at a time when none of the registers that it could legally use are available.  Since spill tmps have minuscule live ranges - literally live either just at the end, or just the beginning, or both, of some instruction - it takes some serious effort to reach this point.

Graph coloring fails on this case also.

It&apos;s like if you created a patchpoint that returns SomeRegister but clobbers the entire register file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292990</commentid>
    <comment_count>24</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-30 15:46:19 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #22)
&gt; Comment on attachment 305896 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=305896&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/air/AirAllocateRegistersByLinearScan.cpp:61
&gt; &gt; +bool verbose() { return Options::airLinearScanVerbose(); }
&gt; 
&gt; nit: I&apos;m not sure this really needs to be an option now that the phase works.

You&apos;re prolly gonna like it when you add biased coloring.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293002</commentid>
    <comment_count>25</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-30 15:56:25 -0700</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/214636/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293014</commentid>
    <comment_count>26</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-30 16:20:57 -0700</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #23)
&gt; (In reply to Saam Barati from comment #21)
&gt; &gt; Comment on attachment 305896 [details]
&gt; &gt; the patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=305896&amp;action=review
&gt; &gt; 
&gt; &gt; r=me. Please fix the various places you have OOPS
&gt; 
&gt; Right!  I will!
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/b3/air/AirAllocateRegistersByLinearScan.cpp:151
&gt; &gt; &gt; +            index += block-&gt;size() * 2;
&gt; &gt; 
&gt; &gt; shouldn&apos;t this be block-&gt;size()*2+1 since block-&gt;size()*2 is the tail?
&gt; &gt; Or is the head of one block OK to be the same as the tail?
&gt; 
&gt; Basic blocks already have &quot;double padding&quot; between them in the sense that we
&gt; treat the point after the terminal to be distinct from the point before the
&gt; first instruction in the successor(s). The indexing scheme in this patch
&gt; means that if you have a block like:
&gt; 
&gt;     Foo
&gt;     Bar
&gt;     Baz
&gt; 
&gt; Then it will be indexed as follows:
&gt; 
&gt; 0
&gt;     Foo
&gt; 1
&gt; 2
&gt;     Bar
&gt; 3
&gt; 4
&gt;     Baz
&gt; 5
&gt; 
&gt; We don&apos;t need the extra +1, since every block is indexed with padding.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/b3/air/AirAllocateRegistersByLinearScan.cpp:407
&gt; &gt; &gt; +            if (m_active.size() != m_registers.size()) {
&gt; &gt; &gt; +                bool didAssign = false;
&gt; &gt; &gt; +                for (Reg reg : m_registers) {
&gt; &gt; &gt; +                    if (!m_activeRegs.contains(reg) &amp;&amp; entry.possibleRegs.contains(reg)) {
&gt; &gt; &gt; +                        assign(tmp, reg);
&gt; &gt; &gt; +                        didAssign = true;
&gt; &gt; &gt; +                        break;
&gt; &gt; &gt; +                    }
&gt; &gt; &gt; +                }
&gt; &gt; &gt; +                if (didAssign)
&gt; &gt; &gt; +                    continue;
&gt; &gt; &gt; +            }
&gt; &gt; 
&gt; &gt; We could totally do biased coloring here to try to remove some extra moves.
&gt; &gt; Should be cheap, and benefit quality of code in some programs. Code gen
&gt; &gt; quality isn&apos;t a priority for this phase, but if we get a throughput
&gt; &gt; progression without slowing this phase down, we should do it. Might be worth
&gt; &gt; a FIXME. I&apos;m happy to hack it up.
&gt; 
&gt; I&apos;ll add a FIXME.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/b3/air/AirAllocateRegistersByLinearScan.cpp:422
&gt; &gt; &gt; +                spill(tmp);
&gt; &gt; 
&gt; &gt; What guarantees !entry.isUnspillable here?
&gt; 
&gt; This means that a tmp introduced by the spiller was born at a time when none
&gt; of the registers that it could legally use are available.  Since spill tmps
&gt; have minuscule live ranges - literally live either just at the end, or just
&gt; the beginning, or both, of some instruction - it takes some serious effort
&gt; to reach this point.
Right. I know that this is the case. I just realized the function you call into has a RELEASE_ASSERT.

&gt; 
&gt; Graph coloring fails on this case also.
&gt; 
&gt; It&apos;s like if you created a patchpoint that returns SomeRegister but clobbers
&gt; the entire register file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293356</commentid>
    <comment_count>27</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-31 16:19:04 -0700</bug_when>
    <thetext>Is there any chance this patch could&apos;ve regressed ARM64? I&apos;m seeing a 4% JetStream regression on iOS perf bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293359</commentid>
    <comment_count>28</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-31 16:28:55 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #27)
&gt; Is there any chance this patch could&apos;ve regressed ARM64? I&apos;m seeing a 4%
&gt; JetStream regression on iOS perf bots.

Anything is possible but I don&apos;t see how this would have done it.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305548</attachid>
            <date>2017-03-27 20:12:28 -0700</date>
            <delta_ts>2017-03-27 21:20:04 -0700</delta_ts>
            <desc>it begins</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>75408</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIxNDQyNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMTQwLDcgKzE0MCw2IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYjMvQjNG
b2xkUGF0aENvbnN0YW50cy5jcHAKICAgICBiMy9CM0ZyZXF1ZW5jeUNsYXNzLmNwcAogICAgIGIz
L0IzR2VuZXJhdGUuY3BwCi0gICAgYjMvQjNIZWFwUmFuZ2UuY3BwCiAgICAgYjMvQjNJbmZlclN3
aXRjaGVzLmNwcAogICAgIGIzL0IzSW5zZXJ0aW9uU2V0LmNwcAogICAgIGIzL0IzS2luZC5jcHAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTgzLDYgKzE4MywxMCBAQAogCQkwRjI1RjFCMjE4MTYz
NUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1RjFBQjE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xv
d1BhdGhDYWxsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEYyNUYxQjMxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1RjFBQzE4
MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5LmNwcCAqLzsgfTsKIAkJMEYyNUYx
QjQxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNUYxQUQxODE2MzVGMzAwNTIyRjM5
IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGMkFDNTY2MUU4QTBCNzcwMDAxRUUzRiAvKiBBaXJGaXhTcGls
bHNBZnRlclRlcm1pbmFscy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjJBQzU2NDFFOEEwQjc2MDAwMUVFM0YgLyogQWlyRml4U3BpbGxzQWZ0ZXJU
ZXJtaW5hbHMuY3BwICovOyB9OworCQkwRjJBQzU2NzFFOEEwQjc5MDAwMUVFM0YgLyogQWlyRml4
U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMkFDNTY1MUU4QTBCNzYwMDAxRUUzRiAvKiBBaXJGaXhTcGlsbHNBZnRl
clRlcm1pbmFscy5oICovOyB9OworCQkwRjJBQzU2QTFFOEEwQkQzMDAwMUVFM0YgLyogQWlyQWxs
b2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQUM1NjgxRThBMEJEMTAwMDFFRTNGIC8qIEFpckFsbG9j
YXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcCAqLzsgfTsKKwkJMEYyQUM1NkIxRThBMEJENTAw
MDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJBQzU2OTFFOEEwQkQxMDAwMUVF
M0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaCAqLzsgfTsKIAkJMEYyQjY2
QUMxN0I2QjUzRjAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBODE3QjZCNTNEMDBBN0FF
M0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJCNjZBRDE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNv
bWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJCNjZBOTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNv
dW50ZWRJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEYyQjY2QUUxN0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVk
U2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJC
NjZBQTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTY5LDcgKzk3Myw2
IEBACiAJCTBGRUM4NUJDMUJFMTQ2MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0cmVuZ3RoLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUI3MUJF
MTQ2MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0cmVuZ3RoLmNwcCAqLzsgfTsKIAkJMEZFQzg1QkQx
QkUxNDYyRjAwODBGRjc0IC8qIEIzUmVkdWNlU3RyZW5ndGguaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUI4MUJFMTQ2MkYwMDgwRkY3NCAvKiBC
M1JlZHVjZVN0cmVuZ3RoLmggKi87IH07CiAJCTBGRUM4NUMxMUJFMTY3QTAwMDgwRkY3NCAvKiBC
M0VmZmVjdHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NUJFMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0VmZmVjdHMuaCAqLzsgfTsKLQkJMEZFQzg1
QzIxQkUxNjdBMDAwODBGRjc0IC8qIEIzSGVhcFJhbmdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUJGMUJFMTY3QTAwMDgwRkY3NCAvKiBC
M0hlYXBSYW5nZS5jcHAgKi87IH07CiAJCTBGRUM4NUMzMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hl
YXBSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg1QzAxQkUxNjdBMDAwODBGRjc0IC8qIEIzSGVhcFJhbmdlLmggKi87IH07CiAJCTBGRUM4
NUM1MUJFMTZGNUEwMDgwRkY3NCAvKiBCM0VmZmVjdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1QzQxQkUxNkY1QTAwODBGRjc0IC8qIEIz
RWZmZWN0cy5jcHAgKi87IH07CiAJCTBGRUQ2N0I5MUIyNjI1NkQwMDY2Q0UxNSAvKiBERkdDb25z
dGFudEhvaXN0aW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFRDY3QjcxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0YW50SG9pc3Rp
bmdQaGFzZS5jcHAgKi87IH07CkBAIC0yNzAzLDYgKzI3MDYsMTAgQEAKIAkJMEYyNUYxQUIxODE2
MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBGVExTbG93UGF0aENhbGwuaDsgcGF0aCA9IGZ0bC9GVExTbG93UGF0aENhbGwu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNUYxQUMxODE2MzVGMzAwNTIyRjM5
IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBGVExTbG93UGF0aENhbGxLZXkuY3BwOyBwYXRoID0gZnRsL0ZUTFNsb3dQYXRoQ2Fs
bEtleS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjVGMUFEMTgxNjM1RjMw
MDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gRlRMU2xvd1BhdGhDYWxsS2V5Lmg7IHBhdGggPSBmdGwvRlRMU2xvd1BhdGhDYWxs
S2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkFDNTY0MUU4QTBCNzYwMDAx
RUUzRiAvKiBBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5jcHA7IHBhdGgg
PSBiMy9haXIvQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjJBQzU2NTFFOEEwQjc2MDAwMUVFM0YgLyogQWlyRml4U3BpbGxzQWZ0
ZXJUZXJtaW5hbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyRml4U3Bp
bGxzQWZ0ZXJUZXJtaW5hbHMuaDsgcGF0aCA9IGIzL2Fpci9BaXJGaXhTcGlsbHNBZnRlclRlcm1p
bmFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJBQzU2ODFFOEEwQkQxMDAw
MUVFM0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNj
YW4uY3BwOyBwYXRoID0gYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQUM1NjkxRThBMEJEMTAwMDFFRTNG
IC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmg7IHBhdGgg
PSBiMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQjY2QTgxN0I2QjUzRDAwQTdBRTNGIC8qIEdDSW5jb21pbmdS
ZWZDb3VudGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5jb21pbmdSZWZDb3VudGVkLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkE5MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0lu
Y29taW5nUmVmQ291bnRlZElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR0NJbmNvbWluZ1JlZkNv
dW50ZWRJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkFBMTdC
NkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMzQ5Niw3ICszNTAzLDYgQEAKIAkJMEZFQzg1QjcxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVk
dWNlU3RyZW5ndGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNS
ZWR1Y2VTdHJlbmd0aC5jcHA7IHBhdGggPSBiMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQzg1QjgxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVk
dWNlU3RyZW5ndGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNSZWR1Y2VT
dHJlbmd0aC5oOyBwYXRoID0gYjMvQjNSZWR1Y2VTdHJlbmd0aC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkVDODVCRTFCRTE2N0EwMDA4MEZGNzQgLyogQjNFZmZlY3RzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzRWZmZWN0cy5oOyBwYXRoID0gYjMvQjNF
ZmZlY3RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGRUM4NUJGMUJFMTY3QTAw
MDgwRkY3NCAvKiBCM0hlYXBSYW5nZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBCM0hlYXBSYW5nZS5jcHA7IHBhdGggPSBiMy9CM0hlYXBSYW5nZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUM4NUMwMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hl
YXBSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0hlYXBSYW5nZS5o
OyBwYXRoID0gYjMvQjNIZWFwUmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZFQzg1QzQxQkUxNkY1QTAwODBGRjc0IC8qIEIzRWZmZWN0cy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0VmZmVjdHMuY3BwOyBwYXRoID0gYjMvQjNFZmZlY3Rz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFRDY3QjcxQjI2MjU2RDAwNjZD
RTE1IC8qIERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuY3BwOyBwYXRoID0gZGZn
L0RGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01NDE5LDcgKzU0MjUsNiBAQAogCQkJCTBGRUM4NENGMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0dlbmVyYXRlLmggKi8sCiAJCQkJMEYyQzYzQjUxRTYzNDNFODAwQzEzODM5IC8qIEIzR2VuZXJp
Y0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi8sCiAJCQkJMEZFQzg0RDAxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oICovLAotCQkJCTBGRUM4NUJGMUJFMTY3QTAwMDgw
RkY3NCAvKiBCM0hlYXBSYW5nZS5jcHAgKi8sCiAJCQkJMEZFQzg1QzAxQkUxNjdBMDAwODBGRjc0
IC8qIEIzSGVhcFJhbmdlLmggKi8sCiAJCQkJREM2OUI5OUExRDE1RjkwRjAwMkUzQzAwIC8qIEIz
SW5mZXJTd2l0Y2hlcy5jcHAgKi8sCiAJCQkJREM2OUI5OUIxRDE1RjkwRjAwMkUzQzAwIC8qIEIz
SW5mZXJTd2l0Y2hlcy5oICovLApAQCAtNTUyOCw2ICs1NTMzLDggQEAKIAkJMEZFQzg0QjMxQkRB
Q0Q4ODAwODBGRjc0IC8qIGFpciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCisJCQkJMEYyQUM1NjgxRThBMEJEMTAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0
ZXJzQnlMaW5lYXJTY2FuLmNwcCAqLywKKwkJCQkwRjJBQzU2OTFFOEEwQkQxMDAwMUVFM0YgLyog
QWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaCAqLywKIAkJCQk3OTY1QzIxNDFFNUQ3
OTk2MDBCNzU5MUQgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuY3BwICov
LAogCQkJCTc5NjVDMjE1MUU1RDc5OTYwMEI3NTkxRCAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5
R3JhcGhDb2xvcmluZy5oICovLAogCQkJCTBGRUM4NTQ4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJB
bGxvY2F0ZVN0YWNrLmNwcCAqLywKQEAgLTU1NjEsNiArNTU2OCw4IEBACiAJCQkJMEY0REUxQ0Qx
QzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCAqLywKIAkJCQkyNjJEODVC
NDFDMEQ2NTBGMDA2QUNCNjEgLyogQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmNwcCAqLywK
IAkJCQkyNjJEODVCNTFDMEQ2NTBGMDA2QUNCNjEgLyogQWlyRml4UGFydGlhbFJlZ2lzdGVyU3Rh
bGxzLmggKi8sCisJCQkJMEYyQUM1NjQxRThBMEI3NjAwMDFFRTNGIC8qIEFpckZpeFNwaWxsc0Fm
dGVyVGVybWluYWxzLmNwcCAqLywKKwkJCQkwRjJBQzU2NTFFOEEwQjc2MDAwMUVFM0YgLyogQWly
Rml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCAqLywKIAkJCQkwRkVDODU1MjFCREFDREM3MDA4MEZG
NzQgLyogQWlyRnJlcXVlbnRlZEJsb2NrLmggKi8sCiAJCQkJMEZFQzg1NTMxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckdlbmVyYXRlLmNwcCAqLywKIAkJCQkwRkVDODU1NDFCREFDREM3MDA4MEZGNzQg
LyogQWlyR2VuZXJhdGUuaCAqLywKQEAgLTgxMzksNiArODE0OCw3IEBACiAJCQkJMEZFQzg1MTAx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkVDODUxMjFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0MzQyMkE2MzFDMTU4RTZEMDBFMkVCOTggLyogQjNDb25zdEZsb2F0VmFsdWUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkFDNTZCMUU4QTBCRDUwMDAxRUUzRiAvKiBBaXJBbGxv
Y2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1QjMx
QkRFRDk1NzAwODBGRjc0IC8qIEIzQ29uc3RQdHJWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYzMzhERjYxQkU5M0Q1NTAwMTNDODhGIC8qIEIzQ29uc3RyYWluZWRWYWx1ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyQzYzQjgxRTYzNDNGNzAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2NrSW5z
ZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKQEAgLTkzNjIsNiArOTM3Miw3IEBACiAJCQkJNzA5
RkI4NkExQUUzMzVDNjAwMzlEMDY5IC8qIFdlYWtTZXRDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMTQxNTAxMzMxNTRCQjEzRjAwNUQ4Qzk4IC8qIFdlYWtTZXRJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3MDlGQjg2QzFBRTMzNUM2MDAzOUQwNjkgLyogV2Vha1NldFByb3Rv
dHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQUM1NjcxRThBMEI3OTAwMDFFRTNGIC8qIEFp
ckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JFRDFE
QjU4REFEMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNDMTYxREI1OUNCMjAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5
Q29tcGlsZUVycm9yQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JF
RjFEQjU4REFEMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90b3R5cGUuaCBp
biBIZWFkZXJzICovLApAQCAtOTk4OCw3ICs5OTk5LDYgQEAKIAkJCQkwRjcyNUNBRjFDNTA2RDNC
MDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkVDODUxNTFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkVDODUxODFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQkwRkVDODVDMjFCRTE2N0EwMDA4MEZGNzQgLyogQjNIZWFwUmFuZ2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJREM2OUI5OUMxRDE1RjkxMjAwMkUzQzAwIC8qIEIzSW5m
ZXJTd2l0Y2hlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVDODVCOTFCRTE0NjJGMDA4MEZG
NzQgLyogQjNJbnNlcnRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZERjY3RDMxRDlD
NkQyQTAwMUI5ODI1IC8qIEIzS2luZC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMTU0LDYgKzEw
MTY0LDcgQEAKIAkJCQlBNzhBOTc3NjE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkJEQzE1MTUxQzVENEQwMENEODkxMCAvKiBERkdGaXh1
cFBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjAxNzdGMURDQURDMzMwMEVBNTk1MCAv
KiBERkdGbG93SW5kZXhpbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQUM1NkExRThBMEJE
MzAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGOUQzMzk2MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRjcxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0ZsdXNo
Rm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNjlDQzg4MTkzQUM2MEEwMDQ1NzU5RSAv
KiBERkdGcm96ZW5WYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMjYzLDYgKzEwMjc0LDcg
QEAKIAkJCQkyQTgzNjM4NTE4RDdEMEVFMDAwMEVCQ0MgLyogRWRlbkdDQWN0aXZpdHlDYWxsYmFj
ay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OUU0NUEyNTE4QTFCMjU5MDAyNkQ4OEYgLyogRW5j
b2RlZFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUM3MTA3RUMzNzYwMDQyN0E0
OCAvKiBFcnJvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJBQzU2NjFFOEEwQjc3MDAwMUVF
M0YgLyogQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQ3RjM5QzgxMDdFQzM3NjAwNDI3QTQ4IC8qIEVycm9yQ29uc3RydWN0b3IuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRkVCNThDMTQxODdCOEIxNjAwOThFRjBCIC8qIEVycm9ySGFuZGxpbmdTY29w
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDOTEwN0VDMzc2MDA0MjdBNDggLyogRXJy
b3JJbnN0YW5jZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrVXRpbHMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTE0LDcgKzExNCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+CiBWZWN0b3I8QmFz
aWNCbG9jayo+IGJsb2Nrc0luUHJlT3JkZXIoQmFzaWNCbG9jayogcm9vdCkKIHsKICAgICBWZWN0
b3I8QmFzaWNCbG9jayo+IHJlc3VsdDsKLSAgICBHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2Nr
KiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IHdvcmtsaXN0OworICAgIEdyYXBoTm9kZVdvcmtsaXN0
PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+IHdvcmtsaXN0OwogICAgIHdvcmts
aXN0LnB1c2gocm9vdCk7CiAgICAgd2hpbGUgKEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3Qu
cG9wKCkpIHsKICAgICAgICAgcmVzdWx0LmFwcGVuZChibG9jayk7CkBAIC0xMjgsNyArMTI4LDcg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KIFZlY3RvcjxCYXNpY0Jsb2NrKj4gYmxv
Y2tzSW5Qb3N0T3JkZXIoQmFzaWNCbG9jayogcm9vdCkKIHsKICAgICBWZWN0b3I8QmFzaWNCbG9j
ayo+IHJlc3VsdDsKLSAgICBQb3N0T3JkZXJHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwg
SW5kZXhTZXQ8QmFzaWNCbG9jaz4+IHdvcmtsaXN0OworICAgIFBvc3RPcmRlckdyYXBoTm9kZVdv
cmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+IHdvcmtsaXN0OwogICAg
IHdvcmtsaXN0LnB1c2gocm9vdCk7CiAgICAgd2hpbGUgKEdyYXBoTm9kZVdpdGhPcmRlcjxCYXNp
Y0Jsb2NrKj4gaXRlbSA9IHdvcmtsaXN0LnBvcCgpKSB7CiAgICAgICAgIHN3aXRjaCAoaXRlbS5v
cmRlcikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tXb3JrbGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrV29ya2xpc3Qu
aAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tX
b3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CiAKIGNsYXNzIEJhc2ljQmxvY2s7CiAKLXR5cGVkZWYgR3JhcGhOb2RlV29y
a2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2s+PiBCbG9ja1dvcmtsaXN0Owor
dHlwZWRlZiBHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9j
ayo+PiBCbG9ja1dvcmtsaXN0OwogCiAvLyBXaGVuIHlvdSBzYXkgQmxvY2tXaXRoPGludD4geW91
IHNob3VsZCByZWFkIGl0IGFzICJibG9jayB3aXRoIGFuIGludCIuCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB1c2luZyBCbG9ja1dpdGggPSBHcmFwaE5vZGVXaXRoPEJhc2ljQmxvY2sqLCBUPjsKQEAg
LTQ0LDEzICs0NCwxMyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBCbG9ja1dpdGggPSBH
CiAvLyBwZXJtaXRzIGZvcmNpYmx5IGVucXVldWVpbmcgdGhpbmdzIGV2ZW4gaWYgdGhlIGJsb2Nr
IGhhcyBhbHJlYWR5IGJlZW4gc2Vlbi4gSXQncyB1c2VmdWwgZm9yCiAvLyB0aGluZ3MgbGlrZSBi
dWlsZGluZyBhIHNwYW5uaW5nIHRyZWUsIGluIHdoaWNoIGNhc2UgVCAodGhlIGF1eGlsaWFyeSBw
YXlsb2FkKSB3b3VsZCBiZSB0aGUKIC8vIHN1Y2Nlc3NvciBpbmRleC4KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3JrbGlzdCA9IEV4dGVuZGVkR3JhcGhOb2RlV29y
a2xpc3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0PEJhc2ljQmxvY2s+PjsKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3JrbGlzdCA9IEV4dGVuZGVkR3JhcGhOb2Rl
V29ya2xpc3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0PEJhc2ljQmxvY2sqPj47CiAKIHR5cGVk
ZWYgR3JhcGhWaXNpdE9yZGVyIFZpc2l0T3JkZXI7CiAKIHR5cGVkZWYgR3JhcGhOb2RlV2l0aE9y
ZGVyPEJhc2ljQmxvY2sqPiBCbG9ja1dpdGhPcmRlcjsKIAotdHlwZWRlZiBQb3N0T3JkZXJHcmFw
aE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IFBvc3RPcmRl
ckJsb2NrV29ya2xpc3Q7Cit0eXBlZGVmIFBvc3RPcmRlckdyYXBoTm9kZVdvcmtsaXN0PEJhc2lj
QmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+IFBvc3RPcmRlckJsb2NrV29ya2xpc3Q7CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDRkcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDRkcu
aAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ0ZHLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzksOCArMzksOCBAQCBjbGFzcyBDRkcgewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIHR5cGVkZWYgQmFzaWNCbG9jayogTm9kZTsKLSAg
ICB0eXBlZGVmIEluZGV4U2V0PEJhc2ljQmxvY2s+IFNldDsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB1c2luZyBNYXAgPSBJbmRleE1hcDxCYXNpY0Jsb2NrLCBUPjsKKyAgICB0eXBlZGVmIElu
ZGV4U2V0PEJhc2ljQmxvY2sqPiBTZXQ7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcg
TWFwID0gSW5kZXhNYXA8QmFzaWNCbG9jayosIFQ+OwogICAgIHR5cGVkZWYgVmVjdG9yPEJhc2lj
QmxvY2sqLCA0PiBMaXN0OwogCiAgICAgQ0ZHKFByb2NlZHVyZSYgcHJvYykKQEAgLTUxLDcgKzUx
LDcgQEAgcHVibGljOgogICAgIE5vZGUgcm9vdCgpIHsgcmV0dXJuIG1fcHJvY1swXTsgfQogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBNYXA8VD4gbmV3TWFwKCkgeyByZXR1cm4gSW5k
ZXhNYXA8SlNDOjpCMzo6QmFzaWNCbG9jaywgVD4obV9wcm9jLnNpemUoKSk7IH0KKyAgICBNYXA8
VD4gbmV3TWFwKCkgeyByZXR1cm4gSW5kZXhNYXA8SlNDOjpCMzo6QmFzaWNCbG9jayosIFQ+KG1f
cHJvYy5zaXplKCkpOyB9CiAKICAgICBTdWNjZXNzb3JDb2xsZWN0aW9uPEJhc2ljQmxvY2ssIEJh
c2ljQmxvY2s6OlN1Y2Nlc3Nvckxpc3Q+IHN1Y2Nlc3NvcnMoTm9kZSBub2RlKSB7IHJldHVybiBu
b2RlLT5zdWNjZXNzb3JCbG9ja3MoKTsgfQogICAgIEJhc2ljQmxvY2s6OlByZWRlY2Vzc29yTGlz
dCYgcHJlZGVjZXNzb3JzKE5vZGUgbm9kZSkgeyByZXR1cm4gbm9kZS0+cHJlZGVjZXNzb3JzKCk7
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0R1cGxpY2F0ZVRhaWxzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNEdXBsaWNhdGVUYWlscy5j
cHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0R1cGxp
Y2F0ZVRhaWxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgsNyBAQCBwdWJsaWM6CiAK
ICAgICAgICAgbV9wcm9jLnJlc2V0VmFsdWVPd25lcnMoKTsKIAotICAgICAgICBJbmRleFNldDxC
YXNpY0Jsb2NrPiBjYW5kaWRhdGVzOworICAgICAgICBJbmRleFNldDxCYXNpY0Jsb2NrKj4gY2Fu
ZGlkYXRlczsKIAogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jKSB7CiAg
ICAgICAgICAgICBpZiAoYmxvY2stPnNpemUoKSA+IG1fbWF4U2l6ZSkKQEAgLTgyLDcgKzgyLDcg
QEAgcHVibGljOgogICAgICAgICB9CiAKICAgICAgICAgLy8gQ29sbGVjdCB0aGUgc2V0IG9mIHZh
bHVlcyB0aGF0IG11c3QgYmUgZGUtU1NBJ2QuCi0gICAgICAgIEluZGV4U2V0PFZhbHVlPiB2YWx1
ZXNUb0RlbW90ZTsKKyAgICAgICAgSW5kZXhTZXQ8VmFsdWUqPiB2YWx1ZXNUb0RlbW90ZTsKICAg
ICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvYykgewogICAgICAgICAgICAgZm9y
IChWYWx1ZSogdmFsdWUgOiAqYmxvY2spIHsKICAgICAgICAgICAgICAgICBpZiAodmFsdWUtPm9w
Y29kZSgpID09IFBoaSAmJiBjYW5kaWRhdGVzLmNvbnRhaW5zKGJsb2NrKSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVDb21tb25T
dWJleHByZXNzaW9ucy5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjgyLDcgKzY4Miw3IEBAIHByaXZhdGU6CiAgICAgRG9taW5hdG9ycyYgbV9kb21pbmF0
b3JzOwogICAgIFB1cmVDU0UgbV9wdXJlQ1NFOwogICAgIAotICAgIEluZGV4TWFwPEJhc2ljQmxv
Y2ssIEltcHVyZUJsb2NrRGF0YT4gbV9pbXB1cmVCbG9ja0RhdGE7CisgICAgSW5kZXhNYXA8QmFz
aWNCbG9jayosIEltcHVyZUJsb2NrRGF0YT4gbV9pbXB1cmVCbG9ja0RhdGE7CiAKICAgICBJbXB1
cmVCbG9ja0RhdGEgbV9kYXRhOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNG
aXhTU0EuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZpeFNT
QS5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Zp
eFNTQS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgbmFtZXNwYWNlIHsKIGNv
bnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKLXZv
aWQgZGVtb3RlVmFsdWVzKFByb2NlZHVyZSYgcHJvYywgY29uc3QgSW5kZXhTZXQ8VmFsdWU+JiB2
YWx1ZXMpCit2b2lkIGRlbW90ZVZhbHVlcyhQcm9jZWR1cmUmIHByb2MsIGNvbnN0IEluZGV4U2V0
PFZhbHVlKj4mIHZhbHVlcykKIHsKICAgICBIYXNoTWFwPFZhbHVlKiwgVmFyaWFibGUqPiBtYXA7
CiAgICAgSGFzaE1hcDxWYWx1ZSosIFZhcmlhYmxlKj4gcGhpTWFwOwpAQCAtMTIxLDcgKzEyMSw3
IEBAIGJvb2wgZml4U1NBKFByb2NlZHVyZSYgcHJvYykKICAgICAvLyBKdXN0IGZvciBzYW5pdHks
IHJlbW92ZSBhbnkgdW51c2VkIHZhcmlhYmxlcyBmaXJzdC4gSXQncyB1bmxpa2VseSB0aGF0IHRo
aXMgY29kZSBoYXMgYW55CiAgICAgLy8gYnVncyBoYXZpbmcgdG8gZG8gd2l0aCBkZWFkIHZhcmlh
YmxlcywgYnV0IGl0IHdvdWxkIGJlIHNpbGx5IHRvIGhhdmUgdG8gZml4IHN1Y2ggYSBidWcgaWYK
ICAgICAvLyBpdCBkaWQgYXJpc2UuCi0gICAgSW5kZXhTZXQ8VmFyaWFibGU+IGxpdmVWYXJpYWJs
ZXM7CisgICAgSW5kZXhTZXQ8VmFyaWFibGUqPiBsaXZlVmFyaWFibGVzOwogICAgIGZvciAoVmFs
dWUqIHZhbHVlIDogcHJvYy52YWx1ZXMoKSkgewogICAgICAgICBpZiAoVmFyaWFibGVWYWx1ZSog
dmFyaWFibGVWYWx1ZSA9IHZhbHVlLT5hczxWYXJpYWJsZVZhbHVlPigpKQogICAgICAgICAgICAg
bGl2ZVZhcmlhYmxlcy5hZGQodmFyaWFibGVWYWx1ZS0+dmFyaWFibGUoKSk7CkBAIC0xNDUsNyAr
MTQ1LDcgQEAgYm9vbCBmaXhTU0EoUHJvY2VkdXJlJiBwcm9jKQogCiAgICAgLy8gQ3JlYXRlIGEg
U1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUgKCJjYWxjVmFyIikgZm9yIGV2ZXJ5IHZhcmlhYmxlLgog
ICAgIFZlY3RvcjxWYXJpYWJsZSo+IGNhbGNWYXJUb1ZhcmlhYmxlOwotICAgIEluZGV4TWFwPFZh
cmlhYmxlLCBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSo+IHZhcmlhYmxlVG9DYWxjVmFyKHByb2Mu
dmFyaWFibGVzKCkuc2l6ZSgpKTsKKyAgICBJbmRleE1hcDxWYXJpYWJsZSosIFNTQUNhbGN1bGF0
b3I6OlZhcmlhYmxlKj4gdmFyaWFibGVUb0NhbGNWYXIocHJvYy52YXJpYWJsZXMoKS5zaXplKCkp
OwogCiAgICAgZm9yIChWYXJpYWJsZSogdmFyaWFibGUgOiBwcm9jLnZhcmlhYmxlcygpKSB7CiAg
ICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiBjYWxjVmFyID0gc3NhLm5ld1ZhcmlhYmxl
KCk7CkBAIC0xODUsNyArMTg1LDcgQEAgYm9vbCBmaXhTU0EoUHJvY2VkdXJlJiBwcm9jKQogCiAg
ICAgLy8gTm93IHBlcmZvcm0gdGhlIGNvbnZlcnNpb24uCiAgICAgSW5zZXJ0aW9uU2V0IGluc2Vy
dGlvblNldChwcm9jKTsKLSAgICBJbmRleE1hcDxWYXJpYWJsZSwgVmFsdWUqPiBtYXBwaW5nKHBy
b2MudmFyaWFibGVzKCkuc2l6ZSgpKTsKKyAgICBJbmRleE1hcDxWYXJpYWJsZSosIFZhbHVlKj4g
bWFwcGluZyhwcm9jLnZhcmlhYmxlcygpLnNpemUoKSk7CiAgICAgZm9yIChCYXNpY0Jsb2NrKiBi
bG9jayA6IHByb2MuYmxvY2tzSW5QcmVPcmRlcigpKSB7CiAgICAgICAgIG1hcHBpbmcuY2xlYXIo
KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJhbmdlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNIZWFwUmFuZ2UuY3BwCShyZXZp
c2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNIZWFwUmFuZ2UuY3Bw
CShub25leGlzdGVudCkKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQjNI
ZWFwUmFuZ2UuaCIKLQotI2lmIEVOQUJMRShCM19KSVQpCi0KLW5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgewotCi12b2lkIEhlYXBSYW5nZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAotewotICAgIGlmICgqdGhpcyA9PSBIZWFwUmFuZ2UoKSkgewotICAgICAgICBvdXQucHJpbnQo
IkJvdHRvbSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICgqdGhpcyA9PSB0b3Ao
KSkgewotICAgICAgICBvdXQucHJpbnQoIlRvcCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIG91dC5wcmludChtX2JlZ2luLCAiLi4uIiwgbV9lbmQpOwotfQotCi19IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKLQotI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCi0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNIZWFwUmFuZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsOTAg
KzI3LDE1IEBACiAKICNpZiBFTkFCTEUoQjNfSklUKQogCi0jaW5jbHVkZSA8bGltaXRzLmg+Ci0j
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4K
KyNpbmNsdWRlIDx3dGYvUmFuZ2UuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CiAKIC8vIEFsaWFzIGFuYWx5c2lzIGluIEIzIGlzIGRvbmUgYnkgY2hlY2tpbmcgaWYgdHdvIGlu
dGVnZXIgcmFuZ2VzIG92ZXJsYXAuIFRoaXMgaXMgcG93ZXJmdWwgZW5vdWdoCiAvLyB0byBiZSB1
c2VkIGZvciBUQkFBLXN0eWxlIGFsaWFzIGFuYWx5c2lzIHVzZWQgYnkgdGhlIERGRywgRlRMLCBh
bmQgTExWTTogeW91IGp1c3QgdHVybiBlYWNoIG5vZGUKIC8vIGluIHRoZSB0cmVlIG9mIGFic3Ry
YWN0IGhlYXBzIGludG8gYSBwcmUvcG9zdCByYW5nZS4KLS8vCi0vLyBOb3RlIHRoYXQgdGhlICdi
ZWdpbicgaXMgaW5jbHVzaXZlLCB3aGlsZSB0aGUgJ2VuZCcgaXMgZXhjbHVzaXZlLiBUaGVzZSB0
d28gcmFuZ2VzIGFyZSBub24tCi0vLyBvdmVybGFwcGluZzoKLS8vCi0vLyAgICAgcmFuZ2VBID0g
MC4uLjgKLS8vICAgICByYW5nZUIgPSA4Li4uMTYKLQotY2xhc3MgSGVhcFJhbmdlIHsKLXB1Ymxp
YzoKLSAgICB0eXBlZGVmIHVuc2lnbmVkIFR5cGU7Ci0gICAgCi0gICAgSGVhcFJhbmdlKCkKLSAg
ICAgICAgOiBtX2JlZ2luKDApCi0gICAgICAgICwgbV9lbmQoMCkKLSAgICB7Ci0gICAgfQotCi0g
ICAgZXhwbGljaXQgSGVhcFJhbmdlKHVuc2lnbmVkIHZhbHVlKQotICAgICAgICA6IG1fYmVnaW4o
dmFsdWUpCi0gICAgICAgICwgbV9lbmQodmFsdWUgKyAxKQotICAgIHsKLSAgICAgICAgQVNTRVJU
KG1fZW5kID49IG1fYmVnaW4pOwotICAgIH0KLQotICAgIEhlYXBSYW5nZSh1bnNpZ25lZCBiZWdp
biwgdW5zaWduZWQgZW5kKQotICAgICAgICA6IG1fYmVnaW4oYmVnaW4pCi0gICAgICAgICwgbV9l
bmQoZW5kKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fZW5kID49IG1fYmVnaW4pOwotICAgICAg
ICBpZiAobV9iZWdpbiA9PSBtX2VuZCkgewotICAgICAgICAgICAgLy8gQ2Fub25pY2FsaXplIGVt
cHR5IHJhbmdlcy4KLSAgICAgICAgICAgIG1fYmVnaW4gPSAwOwotICAgICAgICAgICAgbV9lbmQg
PSAwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIEhlYXBSYW5nZSB0b3AoKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIEhlYXBSYW5nZSgwLCBVSU5UX01BWCk7Ci0gICAgfQotCi0gICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IEhlYXBSYW5nZSYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAg
ICAgICByZXR1cm4gbV9iZWdpbiA9PSBvdGhlci5tX2JlZ2luCi0gICAgICAgICAgICAmJiBtX2Vu
ZCA9PSBvdGhlci5tX2VuZDsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgSGVh
cFJhbmdlJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAhKCp0aGlzID09IG90
aGVyKTsKLSAgICB9Ci0gICAgCi0gICAgSGVhcFJhbmdlIG9wZXJhdG9yfChjb25zdCBIZWFwUmFu
Z2UmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIEhlYXBSYW5nZSgKLSAgICAg
ICAgICAgIHN0ZDo6bWluKG1fYmVnaW4sIG90aGVyLm1fYmVnaW4pLAotICAgICAgICAgICAgc3Rk
OjptYXgobV9lbmQsIG90aGVyLm1fZW5kKSk7Ci0gICAgfQotICAgIAotICAgIGV4cGxpY2l0IG9w
ZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX2JlZ2luICE9IG1fZW5kOyB9Ci0KLSAgICB1
bnNpZ25lZCBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fYmVnaW47IH0KLSAgICB1bnNpZ25lZCBl
bmQoKSBjb25zdCB7IHJldHVybiBtX2VuZDsgfQotCi0gICAgYm9vbCBvdmVybGFwcyhjb25zdCBI
ZWFwUmFuZ2UmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6cmFuZ2Vz
T3ZlcmxhcChtX2JlZ2luLCBtX2VuZCwgb3RoZXIubV9iZWdpbiwgb3RoZXIubV9lbmQpOwotICAg
IH0KLQotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdDsKLQotcHJpdmF0ZToKLSAgICB1bnNpZ25lZCBtX2JlZ2luOwotICAgIHVuc2lnbmVkIG1f
ZW5kOwotfTsKKwordHlwZWRlZiBSYW5nZTx1bnNpZ25lZD4gSGVhcFJhbmdlOwogCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93
ZXJUb0Fpci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93
ZXJUb0Fpci5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0xvd2VyVG9BaXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzc5LDEwICszMzc5LDEwIEBA
IHByaXZhdGU6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQog
ICAgIAotICAgIEluZGV4U2V0PFZhbHVlPiBtX2xvY2tlZDsgLy8gVGhlc2UgYXJlIHZhbHVlcyB0
aGF0IHdpbGwgaGF2ZSBubyBUbXAgaW4gQWlyLgotICAgIEluZGV4TWFwPFZhbHVlLCBUbXA+IG1f
dmFsdWVUb1RtcDsgLy8gVGhlc2UgYXJlIHZhbHVlcyB0aGF0IG11c3QgaGF2ZSBhIFRtcCBpbiBB
aXIuIFdlIHNheSB0aGF0IGEgVmFsdWUqIHdpdGggYSBub24tbnVsbCBUbXAgaXMgInBpbm5lZCIu
Ci0gICAgSW5kZXhNYXA8VmFsdWUsIFRtcD4gbV9waGlUb1RtcDsgLy8gRWFjaCBQaGkgZ2V0cyBp
dHMgb3duIFRtcC4KLSAgICBJbmRleE1hcDxCMzo6QmFzaWNCbG9jaywgQWlyOjpCYXNpY0Jsb2Nr
Kj4gbV9ibG9ja1RvQmxvY2s7CisgICAgSW5kZXhTZXQ8VmFsdWUqPiBtX2xvY2tlZDsgLy8gVGhl
c2UgYXJlIHZhbHVlcyB0aGF0IHdpbGwgaGF2ZSBubyBUbXAgaW4gQWlyLgorICAgIEluZGV4TWFw
PFZhbHVlKiwgVG1wPiBtX3ZhbHVlVG9UbXA7IC8vIFRoZXNlIGFyZSB2YWx1ZXMgdGhhdCBtdXN0
IGhhdmUgYSBUbXAgaW4gQWlyLiBXZSBzYXkgdGhhdCBhIFZhbHVlKiB3aXRoIGEgbm9uLW51bGwg
VG1wIGlzICJwaW5uZWQiLgorICAgIEluZGV4TWFwPFZhbHVlKiwgVG1wPiBtX3BoaVRvVG1wOyAv
LyBFYWNoIFBoaSBnZXRzIGl0cyBvd24gVG1wLgorICAgIEluZGV4TWFwPEIzOjpCYXNpY0Jsb2Nr
KiwgQWlyOjpCYXNpY0Jsb2NrKj4gbV9ibG9ja1RvQmxvY2s7CiAgICAgSGFzaE1hcDxCMzo6U3Rh
Y2tTbG90KiwgQWlyOjpTdGFja1Nsb3QqPiBtX3N0YWNrVG9TdGFjazsKICAgICBIYXNoTWFwPFZh
cmlhYmxlKiwgVG1wPiBtX3ZhcmlhYmxlVG9UbXA7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM01vdmVDb25zdGFudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM01vdmVDb25zdGFudHMuY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNb3ZlQ29uc3RhbnRzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzMsNyArNzMsNyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgRG9taW5hdG9ycyYgZG9t
aW5hdG9ycyA9IG1fcHJvYy5kb21pbmF0b3JzKCk7CiAgICAgICAgIEhhc2hNYXA8VmFsdWVLZXks
IFZhbHVlKj4gdmFsdWVGb3JDb25zdGFudDsKLSAgICAgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywg
VmVjdG9yPFZhbHVlKj4+IG1hdGVyaWFsaXphdGlvbnMobV9wcm9jLnNpemUoKSk7CisgICAgICAg
IEluZGV4TWFwPEJhc2ljQmxvY2sqLCBWZWN0b3I8VmFsdWUqPj4gbWF0ZXJpYWxpemF0aW9ucyht
X3Byb2Muc2l6ZSgpKTsKIAogICAgICAgICAvLyBXZSBkZXRlcm1pbmUgd2hlcmUgdGhpbmdzIGdl
dCBtYXRlcmlhbGl6ZWQgYmFzZWQgb24gd2hlcmUgdGhleSBhcmUgdXNlZC4KICAgICAgICAgZm9y
IChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvYykgewpAQCAtMjc0LDcgKzI3NCw3IEBAIHByaXZh
dGU6CiAgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2NvbnN0VGFibGUpCiAgICAgICAgICAg
ICBtX2RhdGFTZWN0aW9uW2VudHJ5LnZhbHVlXSA9IGVudHJ5LmtleS52YWx1ZSgpOwogCi0gICAg
ICAgIEluZGV4U2V0PFZhbHVlPiBvZmZMaW1pdHM7CisgICAgICAgIEluZGV4U2V0PFZhbHVlKj4g
b2ZmTGltaXRzOwogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jKSB7CiAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHZhbHVlSW5kZXggPSAwOyB2YWx1ZUluZGV4IDwgYmxv
Y2stPnNpemUoKTsgKyt2YWx1ZUluZGV4KSB7CiAgICAgICAgICAgICAgICAgU3RhY2ttYXBWYWx1
ZSogdmFsdWUgPSBibG9jay0+YXQodmFsdWVJbmRleCktPmFzPFN0YWNrbWFwVmFsdWU+KCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQaGlDaGlsZHJlbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoaUNoaWxkcmVuLmgJKHJldmlzaW9uIDIx
NDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoaUNoaWxkcmVuLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE2OCw3ICsxNjgsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgVmVjdG9yPFZh
bHVlKiwgOD4mIHBoaXMoKSBjb25zdCB7IHJldHVybiBtX3BoaXM7IH0KIAogcHJpdmF0ZToKLSAg
ICBJbmRleE1hcDxWYWx1ZSwgVmVjdG9yPFVwc2lsb25WYWx1ZSo+PiBtX3Vwc2lsb25zOworICAg
IEluZGV4TWFwPFZhbHVlKiwgVmVjdG9yPFVwc2lsb25WYWx1ZSo+PiBtX3Vwc2lsb25zOwogICAg
IFZlY3RvcjxWYWx1ZSosIDg+IG1fcGhpczsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg2LDcgKzE4
Niw3IEBAIHZvaWQgUHJvY2VkdXJlOjppbnZhbGlkYXRlQ0ZHKCkKIAogdm9pZCBQcm9jZWR1cmU6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKLSAgICBJbmRleFNldDxWYWx1ZT4gdmFs
dWVzSW5CbG9ja3M7CisgICAgSW5kZXhTZXQ8VmFsdWUqPiB2YWx1ZXNJbkJsb2NrczsKICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogKnRoaXMpIHsKICAgICAgICAgb3V0LnByaW50KGRlZXBE
dW1wKCp0aGlzLCBibG9jaykpOwogICAgICAgICB2YWx1ZXNJbkJsb2Nrcy5hZGRBbGwoKmJsb2Nr
KTsKQEAgLTI0NSw3ICsyNDUsNyBAQCB2b2lkIFByb2NlZHVyZTo6ZGVsZXRlVmFsdWUoVmFsdWUq
IHZhbHVlCiAKIHZvaWQgUHJvY2VkdXJlOjpkZWxldGVPcnBoYW5zKCkKIHsKLSAgICBJbmRleFNl
dDxWYWx1ZT4gdmFsdWVzSW5CbG9ja3M7CisgICAgSW5kZXhTZXQ8VmFsdWUqPiB2YWx1ZXNJbkJs
b2NrczsKICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogKnRoaXMpCiAgICAgICAgIHZhbHVl
c0luQmxvY2tzLmFkZEFsbCgqYmxvY2spOwogCkBAIC0zMzMsNyArMzMzLDcgQEAgVmFsdWUqIFBy
b2NlZHVyZTo6YWRkVmFsdWVJbXBsKFZhbHVlKiB2YQogCiB2b2lkIFByb2NlZHVyZTo6c2V0Qmxv
Y2tPcmRlckltcGwoVmVjdG9yPEJhc2ljQmxvY2sqPiYgYmxvY2tzKQogewotICAgIEluZGV4U2V0
PEJhc2ljQmxvY2s+IGJsb2Nrc1NldDsKKyAgICBJbmRleFNldDxCYXNpY0Jsb2NrKj4gYmxvY2tz
U2V0OwogICAgIGJsb2Nrc1NldC5hZGRBbGwoYmxvY2tzKTsKIAogICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiAqdGhpcykgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVk
dWNlRG91YmxlVG9GbG9hdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzUmVkdWNlRG91YmxlVG9GbG9hdC5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZURvdWJsZVRvRmxvYXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MjQsMTggKzQyNCwxOCBAQCBwcml2YXRlOgogCiAgICAgLy8gU2V0IG9mIGFsbCB0
aGUgRG91YmxlIHZhbHVlcyB0aGF0IGFyZSBhY3R1YWxseSB1c2VkIGFzIERvdWJsZS4KICAgICAv
LyBDb252ZXJ0aW5nIGFueSBvZiB0aGVtIHRvIEZsb2F0IHdvdWxkIGxvc2UgcHJlY2lzaW9uLgot
ICAgIEluZGV4U2V0PFZhbHVlPiBtX3ZhbHVlc1VzZWRBc0RvdWJsZTsKKyAgICBJbmRleFNldDxW
YWx1ZSo+IG1fdmFsdWVzVXNlZEFzRG91YmxlOwogCiAgICAgLy8gU2V0IG9mIGFsbCB0aGUgUGhp
IG9mIHR5cGUgRG91YmxlIHRoYXQgcmVhbGx5IGNvbnRhaW5zIGEgRG91YmxlLgogICAgIC8vIEFu
eSBEb3VibGUgUGhpIG5vdCBpbiB0aGUgc2V0IGNhbiBiZSBjb252ZXJ0ZWQgdG8gRmxvYXQgd2l0
aG91dCBsb3NpbmcgcHJlY2lzaW9uLgotICAgIEluZGV4U2V0PFZhbHVlPiBtX3BoaXNDb250YWlu
aW5nRG91YmxlOworICAgIEluZGV4U2V0PFZhbHVlKj4gbV9waGlzQ29udGFpbmluZ0RvdWJsZTsK
IAogICAgIC8vIEFueSB2YWx1ZSB0aGF0IHdhcyBjb252ZXJ0ZWQgZnJvbSBwcm9kdWNpbmcgYSBE
b3VibGUgdG8gcHJvZHVjaW5nIGEgRmxvYXQuCiAgICAgLy8gVGhpcyBzZXQgZG9lcyBub3QgaW5j
bHVkZSBQaGktVXBzaWxvbnMuCi0gICAgSW5kZXhTZXQ8VmFsdWU+IG1fY29udmVydGVkVmFsdWU7
CisgICAgSW5kZXhTZXQ8VmFsdWUqPiBtX2NvbnZlcnRlZFZhbHVlOwogCiAgICAgLy8gQW55IHZh
bHVlIHRoYXQgcHJldmlvdXNseSBwcm9kdWNlZCBEb3VibGUgYW5kIG5vdyBwcm9kdWNlIEZsb2F0
LgotICAgIEluZGV4U2V0PFZhbHVlPiBtX2NvbnZlcnRlZFBoaXM7CisgICAgSW5kZXhTZXQ8VmFs
dWUqPiBtX2NvbnZlcnRlZFBoaXM7CiB9OwogCiB2b2lkIHByaW50R3JhcGhJZkNvbnZlcnRpbmco
UHJvY2VkdXJlJiBwcm9jZWR1cmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNS
ZWR1Y2VTdHJlbmd0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzUmVkdWNlU3RyZW5ndGguY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzOTIs
NyArMjM5Miw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGtpbGxEZWFkQ29kZSgpCiAgICAgewot
ICAgICAgICBHcmFwaE5vZGVXb3JrbGlzdDxWYWx1ZSosIEluZGV4U2V0PFZhbHVlPj4gd29ya2xp
c3Q7CisgICAgICAgIEdyYXBoTm9kZVdvcmtsaXN0PFZhbHVlKiwgSW5kZXhTZXQ8VmFsdWUqPj4g
d29ya2xpc3Q7CiAgICAgICAgIFZlY3RvcjxVcHNpbG9uVmFsdWUqLCA2ND4gdXBzaWxvbnM7CiAg
ICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2MpIHsKICAgICAgICAgICAgIGZv
ciAoVmFsdWUqIHZhbHVlIDogKmJsb2NrKSB7CkBAIC0yNDI5LDcgKzI0MjksNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgSW5kZXhTZXQ8
VmFyaWFibGU+IGxpdmVWYXJpYWJsZXM7CisgICAgICAgIEluZGV4U2V0PFZhcmlhYmxlKj4gbGl2
ZVZhcmlhYmxlczsKICAgICAgICAgCiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBt
X3Byb2MpIHsKICAgICAgICAgICAgIHNpemVfdCBzb3VyY2VJbmRleCA9IDA7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTU0FDYWxjdWxhdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU1NBQ2FsY3VsYXRvci5oCShyZXZpc2lvbiAyMTQ0Mjcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTU0FDYWxjdWxhdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMTU2LDcgKzE1Niw3IEBAIHByaXZhdGU6CiAgICAgICAgIFZlY3RvcjxEZWYqPiBtX3Bo
aXM7CiAgICAgfTsKICAgICAKLSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBCbG9ja0RhdGE+IG1f
ZGF0YTsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgQmxvY2tEYXRhPiBtX2RhdGE7CiAKICAg
ICBEb21pbmF0b3JzKiBtX2RvbWluYXRvcnMgeyBudWxscHRyIH07CiAgICAgUHJvY2VkdXJlJiBt
X3Byb2M7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVc2VDb3VudHMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVc2VDb3VudHMuaAkocmV2aXNp
b24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXNlQ291bnRzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC00OCw3ICs0OCw3IEBAIHByaXZhdGU6CiAgICAgICAgIHVuc2lnbmVk
IG51bVVzaW5nSW5zdHJ1Y3Rpb25zIHsgMCB9OwogICAgIH07CiAgICAgCi0gICAgSW5kZXhNYXA8
VmFsdWUsIENvdW50cz4gbV9jb3VudHM7CisgICAgSW5kZXhNYXA8VmFsdWUqLCBDb3VudHM+IG1f
Y291bnRzOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRl
UmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmNwcAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmlu
Zy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoQjNfSklU
KQogCiAjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckZpeFNwaWxsc0FmdGVyVGVy
bWluYWxzLmgiCiAjaW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0LmgiCiAjaW5jbHVkZSAiQWlySW5z
dElubGluZXMuaCIKICNpbmNsdWRlICJBaXJMaXZlbmVzcy5oIgpAQCAtMTc5OCw3ICsxNzk5LDcg
QEAgcHVibGljOgogICAgICAgICBtX251bUl0ZXJhdGlvbnMgPSAwOwogICAgICAgICBhbGxvY2F0
ZU9uQmFuazxGUD4oKTsKIAotICAgICAgICBmaXhTcGlsbHNBZnRlclRlcm1pbmFscygpOworICAg
ICAgICBmaXhTcGlsbHNBZnRlclRlcm1pbmFscyhtX2NvZGUpOwogCiAgICAgICAgIGlmIChyZXBv
cnRTdGF0cykKICAgICAgICAgICAgIGRhdGFMb2coIk51bSBpdGVyYXRpb25zID0gIiwgbV9udW1J
dGVyYXRpb25zLCAiXG4iKTsKQEAgLTE5NTQsNyArMTk1NSw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgaW5zdC5mb3JFYWNoVG1wRmFzdChbJl0gKFRt
cCYgdG1wKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSB8fCB0bXAuaXNH
UCgpID09IChiYW5rICE9IEdQKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRtcC5pc1JlZygp
IHx8IHRtcC5iYW5rKCkgIT0gYmFuaykKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
IAogICAgICAgICAgICAgICAgICAgICBUbXAgYWxpYXNUbXAgPSBhbGxvY2F0b3IuZ2V0QWxpYXMo
dG1wKTsKQEAgLTIxODcsNjYgKzIxODgsNiBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQog
Ci0gICAgdm9pZCBmaXhTcGlsbHNBZnRlclRlcm1pbmFscygpCi0gICAgewotICAgICAgICAvLyBC
ZWNhdXNlIHRoZXJlIG1heSBiZSB0ZXJtaW5hbHMgdGhhdCBwcm9kdWNlIHZhbHVlcywgSVJDIG1h
eQotICAgICAgICAvLyB3YW50IHRvIHNwaWxsIHRob3NlIHRlcm1pbmFscy4gSXQnbGwgaGFwcGVu
IHRvIHNwaWxsIGl0IGFmdGVyCi0gICAgICAgIC8vIHRoZSB0ZXJtaW5hbC4gSWYgd2UgbGVmdCB0
aGUgZ3JhcGggaW4gdGhpcyBzdGF0ZSwgaXQnZCBiZSBpbnZhbGlkCi0gICAgICAgIC8vIGJlY2F1
c2UgYSB0ZXJtaW5hbCBtdXN0IGJlIHRoZSBsYXN0IGluc3RydWN0aW9uIGluIGEgYmxvY2suCi0g
ICAgICAgIC8vIFdlIGZpeCB0aGF0IGhlcmUuCi0KLSAgICAgICAgSW5zZXJ0aW9uU2V0IGluc2Vy
dGlvblNldChtX2NvZGUpOwotCi0gICAgICAgIGJvb2wgYWRkZWRCbG9ja3MgPSBmYWxzZTsKLQot
ICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7Ci0gICAgICAgICAgICB1
bnNpZ25lZCB0ZXJtaW5hbEluZGV4ID0gYmxvY2stPnNpemUoKTsKLSAgICAgICAgICAgIGJvb2wg
Zm91bmRUZXJtaW5hbCA9IGZhbHNlOwotICAgICAgICAgICAgd2hpbGUgKHRlcm1pbmFsSW5kZXgt
LSkgewotICAgICAgICAgICAgICAgIGlmIChibG9jay0+YXQodGVybWluYWxJbmRleCkuaXNUZXJt
aW5hbCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvdW5kVGVybWluYWwgPSB0cnVlOwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGZvdW5kVGVybWluYWwsIGZvdW5kVGVybWluYWwp
OwotCi0gICAgICAgICAgICBpZiAodGVybWluYWxJbmRleCA9PSBibG9jay0+c2l6ZSgpIC0gMSkK
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgLy8gVGhlcmUgbXVzdCBi
ZSBpbnN0cnVjdGlvbnMgYWZ0ZXIgdGhlIHRlcm1pbmFsIGJlY2F1c2UgaXQncyBub3QgdGhlIGxh
c3QgaW5zdHJ1Y3Rpb24uCi0gICAgICAgICAgICBBU1NFUlQodGVybWluYWxJbmRleCA8IGJsb2Nr
LT5zaXplKCkgLSAxKTsKLSAgICAgICAgICAgIFZlY3RvcjxJbnN0LCAxPiBpbnN0c1RvTW92ZTsK
LSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHRlcm1pbmFsSW5kZXggKyAxOyBpIDwgYmxv
Y2stPnNpemUoKTsgaSsrKQotICAgICAgICAgICAgICAgIGluc3RzVG9Nb3ZlLmFwcGVuZChibG9j
ay0+YXQoaSkpOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5zdHNUb01vdmUuc2l6ZSgp
KTsKLQotICAgICAgICAgICAgZm9yIChGcmVxdWVudGVkQmxvY2smIGZyZXF1ZW50ZWRTdWNjZXNz
b3IgOiBibG9jay0+c3VjY2Vzc29ycygpKSB7Ci0gICAgICAgICAgICAgICAgQmFzaWNCbG9jayog
c3VjY2Vzc29yID0gZnJlcXVlbnRlZFN1Y2Nlc3Nvci5ibG9jaygpOwotICAgICAgICAgICAgICAg
IC8vIElmIHN1Y2Nlc3NvcidzIG9ubHkgcHJlZGVjZXNzb3IgaXMgYmxvY2ssIHdlIGNhbiBwbGFu
dCB0aGUgc3BpbGwgaW5zaWRlCi0gICAgICAgICAgICAgICAgLy8gdGhlIHN1Y2Nlc3Nvci4gT3Ro
ZXJ3aXNlLCB3ZSBtdXN0IHNwbGl0IHRoZSBjcml0aWNhbCBlZGdlIGFuZCBjcmVhdGUKLSAgICAg
ICAgICAgICAgICAvLyBhIG5ldyBibG9jayBmb3IgdGhlIHNwaWxsLgotICAgICAgICAgICAgICAg
IGlmIChzdWNjZXNzb3ItPm51bVByZWRlY2Vzc29ycygpID09IDEpIHsKLSAgICAgICAgICAgICAg
ICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydEluc3RzKDAsIGluc3RzVG9Nb3ZlKTsKLSAgICAgICAg
ICAgICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoc3VjY2Vzc29yKTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBhZGRlZEJsb2NrcyA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBwcm9iYWJseSB3YW50IGJldHRlciBibG9j
ayBvcmRlcmluZyBoZXJlLgotICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBuZXdCbG9j
ayA9IG1fY29kZS5hZGRCbG9jaygpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IElu
c3QmIGluc3QgOiBpbnN0c1RvTW92ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ld0Jsb2Nr
LT5hcHBlbmRJbnN0KGluc3QpOwotICAgICAgICAgICAgICAgICAgICBuZXdCbG9jay0+YXBwZW5k
SW5zdChJbnN0KEp1bXAsIGluc3RzVG9Nb3ZlLmxhc3QoKS5vcmlnaW4pKTsKLSAgICAgICAgICAg
ICAgICAgICAgbmV3QmxvY2stPnN1Y2Nlc3NvcnMoKS5hcHBlbmQoc3VjY2Vzc29yKTsKLSAgICAg
ICAgICAgICAgICAgICAgZnJlcXVlbnRlZFN1Y2Nlc3Nvci5ibG9jaygpID0gbmV3QmxvY2s7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBibG9jay0+cmVz
aXplKHRlcm1pbmFsSW5kZXggKyAxKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhZGRlZEJs
b2NrcykKLSAgICAgICAgICAgIG1fY29kZS5yZXNldFJlYWNoYWJpbGl0eSgpOwotICAgIH0KLQog
ICAgIENvZGUmIG1fY29kZTsKICAgICBUbXBXaWR0aCBtX3RtcFdpZHRoOwogICAgIFVzZUNvdW50
czxUbXA+JiBtX3VzZUNvdW50czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4u
Y3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxs
b2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJT
Y2FuLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2lu
Y2x1ZGUgIkFpckluc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisj
aW5jbHVkZSAiQWlyTGl2ZW5lc3MuaCIKKyNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCisjaW5j
bHVkZSAiQWlyVG1wSW5saW5lcy5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorI2luY2x1
ZGUgPHd0Zi9SYW5nZS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNw
YWNlIEFpciB7CisKK25hbWVzcGFjZSB7CisKK3R5cGVkZWYgUmFuZ2U8c2l6ZV90PiBJbnRlcnZh
bDsKKworc3RydWN0IFRtcERhdGEgeworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAorICAgIHsKKyAgICAgICAgb3V0LnByaW50KCJ7aW50ZXJ2YWwgPSAiLCBpbnRlcnZhbCwg
Iiwgc3BpbGxlZCA9ICIsIHBvaW50ZXJEdW1wKHNwaWxsZWQpLCAiLCBhc3NpZ25lZCA9ICIsIGFz
c2lnbmVkLCAifSIpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHZhbGlkYXRlKCkKKyAgICB7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKCEoc3BpbGxlZCAmJiBhc3NpZ25lZCkpOworICAgIH0KKyAg
ICAKKyAgICBJbnRlcnZhbCBpbnRlcnZhbDsKKyAgICBTdGFja1Nsb3QqIHNwaWxsZWQ7CisgICAg
UmVnIGFzc2lnbmVkOworfTsKKwordGVtcGxhdGU8QmFuayBiYW5rPgorY2xhc3MgTGluZWFyU2Nh
biB7CitwdWJsaWM6CisgICAgTGluZWFyU2NhbihDb2RlJiBjb2RlKQorICAgICAgICA6IG1fY29k
ZShjb2RlKQorICAgICAgICAsIG1fbWFwKGNvZGUubnVtVG1wcyhiYW5rKSkKKyAgICAgICAgLCBt
X2luc2VydGlvblNldChjb2RlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBydW4oKQor
ICAgIHsKKyAgICAgICAgYnVpbGRJbnRlcnZhbHMoKTsKKyAgICAgICAgd2hpbGUgKCFhdHRlbXB0
U2NhbigpKQorICAgICAgICAgICAgZW1pdFNwaWxsQ29kZSgpOworICAgICAgICBhc3NpZ25SZWdp
c3RlcnMoKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHZvaWQgYnVpbGRJbnRlcnZhbHMo
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgVG1wIGFkZFRtcFdpdGhJbnRlcnZhbChJbnRlcnZh
bCBpbnRlcnZhbCkKKyAgICB7CisgICAgICAgIFRtcERhdGEgZGF0YTsKKyAgICAgICAgZGF0YS5p
bnRlcnZhbCA9IGludGVydmFsOworICAgICAgICAKKyAgICAgICAgVG1wIHRtcCA9IG1fY29kZS5u
ZXdUbXAoYmFuayk7CisgICAgICAgIG1fbWFwLmFwcGVuZCh0bXAsIGRhdGEpOworICAgICAgICBy
ZXR1cm4gdG1wOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0dGVtcHRTY2FuKCkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgYXNzaWduKFRtcCB0bXAsIFJlZyByZWcpCisgICAgeworICAg
ICAgICBhdXRvJiBlbnRyeSA9IG1fbWFwW3RtcF07CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFl
bnRyeS5zcGlsbGVkKTsKKyAgICAgICAgZW50cnkuYXNzaWduZWQgPSByZWc7CisgICAgfQorICAg
IAorICAgIHZvaWQgc3BpbGwoVG1wIHRtcCkKKyAgICB7CisgICAgICAgIGF1dG8mIGVudHJ5ID0g
bV9tYXBbdG1wXTsKKyAgICAgICAgZW50cnkuc3BpbGxlZCA9IG1fY29kZS5hZGRTdGFja1Nsb3Qo
OCwgU3RhY2tTbG90S2luZDo6U3BpbGwpOworICAgICAgICBlbnRyeS5hc3NpZ25lZCA9IFJlZygp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGVtaXRTcGlsbENvZGUoKQorICAgIHsKKyAgICAgICAg
Zm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaW5zdEluZGV4ID0gMDsgaW5zdEluZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbnN0SW5kZXgp
IHsKKyAgICAgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gRmlyc3QgdHJ5IHRvIHNwaWxsIGRp
cmVjdGx5LgorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnN0LmFy
Z3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgQXJnJiBhcmcgPSBpbnN0LmFy
Z3NbaV07CisgICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlzVG1wKCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFyZy5pc1Jl
ZygpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
ICAgIFN0YWNrU2xvdCogc3BpbGxlZCA9IG1fbWFwW2FyZy50bXAoKV0uc3BpbGxlZDsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFzcGlsbGVkKQorICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgICAgIGlmICghaW5zdC5hZG1pdHNTdGFjayhpKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBhcmcg
PSBBcmc6OnN0YWNrKHNwaWxsZWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAvLyBGYWxsIGJhY2sgb24gdGhlIGhhcmQgd2F5LgorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1
dGUoYmxvY2spOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgYXNzaWduUmVnaXN0
ZXJzKCkKKyAgICB7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsK
KyAgICAgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6ICpibG9jaykgeworICAgICAgICAgICAgICAg
IGluc3QuZm9yRWFjaFRtcEZhc3QoCisgICAgICAgICAgICAgICAgICAgIFsmXSAoVG1wJiB0bXAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSB8fCB0bXAuYmFuaygp
ICE9IGJhbmspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBSZWcgcmVnID0gbV9tYXBb
dG1wXS5hc3NpZ25lZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJl
Zyk7CisgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSBUbXAocmVnKTsKKyAgICAgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
Q29kZSYgbV9jb2RlOworICAgIEluZGV4TWFwPFRtcDo6SW5kZXhlZDxiYW5rPiwgVG1wRGF0YT4g
bV9tYXA7CisgICAgSW5zZXJ0aW9uU2V0IG1faW5zZXJ0aW9uU2V0OworfTsKKwordGVtcGxhdGU8
QmFuayBiYW5rPgordm9pZCBydW5MaW5lYXJTY2FuKENvZGUmIGNvZGUpCit7CisgICAgTGluZWFy
U2NhbjxiYW5rPiBsaW5lYXJTY2FuKGNvZGUpOworICAgIGxpbmVhclNjYW4uaW1wbCgpOworfQor
Cit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9pZCBhbGxvY2F0ZVJlZ2lzdGVyc0J5TGlu
ZWFyU2NhbihDb2RlJiBjb2RlKQoreworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAi
YWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4iKTsKKyAgICBydW5MaW5lYXJTY2FuPEdQPihj
b2RlKTsKKyAgICBydW5MaW5lYXJTY2FuPEZQPihjb2RlKTsKK30KKworfSB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRl
UmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNs
dWRlICJDUFUuaCIKKyNpbmNsdWRlICJPcHRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKworLy8gVGhpcyBpbXBs
ZW1lbnRzIHRoZSBQb2xldHRvIGFuZCBTYXJrZXIgcmVnaXN0ZXIgYWxsb2NhdG9yIGNhbGxlZCAi
bGluZWFyIHNjYW4iOgorLy8gaHR0cDovL2RsLmFjbS5vcmcvY2l0YXRpb24uY2ZtP2lkPTMzMDI1
MAorLy8KKy8vIFRoaXMgaXMgbm90IEFpcidzIHByaW1hcnkgcmVnaXN0ZXIgYWxsb2NhdG9yLiBX
ZSB1c2UgaXQgb25seSB3aGVuIHJ1bm5pbmcgYXQgb3B0TGV2ZWw9MC4gVGhhdCdzIG5vdAorLy8g
dGhlIGRlZmF1bHQgbGV2ZWwuIFRoaXMgcmVnaXN0ZXIgYWxsb2NhdG9yIGlzIG9wdGltaXplZCBw
cmltYXJpbHkgZm9yIHJ1bm5pbmcgcXVpY2tseS4gSXQncyBleHBlY3RlZAorLy8gdGhhdCBpbXBy
b3ZlbWVudHMgdG8gdGhpcyByZWdpc3RlciBhbGxvY2F0b3Igc2hvdWxkIGZvY3VzIHByaW1hcmls
eSBvbiBpbXByb3ZpbmcgaXRzIGV4ZWN1dGlvbiB0aW1lCisvLyB3aXRob3V0IG11Y2ggcmVnYXJk
IGZvciB0aGUgcXVhbGl0eSBvZiBnZW5lcmF0ZWQgY29kZS4KKy8vCisvLyBGb3IgQWlyJ3MgcHJp
bWFyeSByZWdpc3RlciBhbGxvY2F0b3IsIHNlZSBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhD
b2xvcmluZy5ofGNwcC4KK3ZvaWQgYWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4oQ29kZSYp
OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0
YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFs
bG9jYXRlU3RhY2suY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjEsNyAr
MTYxLDcgQEAgdm9pZCBhbGxvY2F0ZVN0YWNrKENvZGUmIGNvZGUpCiAKICAgICAvLyBOb3cgd2Ug
aGFuZGxlIHRoZSBzcGlsbCBzbG90cy4KICAgICBTdGFja1Nsb3RMaXZlbmVzcyBsaXZlbmVzcyhj
b2RlKTsKLSAgICBJbmRleE1hcDxTdGFja1Nsb3QsIEhhc2hTZXQ8U3RhY2tTbG90Kj4+IGludGVy
ZmVyZW5jZShjb2RlLnN0YWNrU2xvdHMoKS5zaXplKCkpOworICAgIEluZGV4TWFwPFN0YWNrU2xv
dCosIEhhc2hTZXQ8U3RhY2tTbG90Kj4+IGludGVyZmVyZW5jZShjb2RlLnN0YWNrU2xvdHMoKS5z
aXplKCkpOwogICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBzbG90czsKIAogICAgIC8vIFdlIHdpbGwg
cGVyZm9ybSBzb21lIHNwaWxsIGNvYWxlc2NpbmcuIFRvIG1ha2UgdGhhdCBlZmZlY3RpdmUsIHdl
IG5lZWQgdG8gYmUgYWJsZSB0byBpZGVudGlmeQpAQCAtMzA5LDcgKzMwOSw3IEBAIHZvaWQgYWxs
b2NhdGVTdGFjayhDb2RlJiBjb2RlKQogICAgICAgICAgICAgcmV0dXJuIGEuZnJlcXVlbmN5ID4g
Yi5mcmVxdWVuY3k7CiAgICAgICAgIH0pOwogICAgIAotICAgIEluZGV4TWFwPFN0YWNrU2xvdCwg
U3RhY2tTbG90Kj4gcmVtYXBwZWRTdGFja1Nsb3RzKGNvZGUuc3RhY2tTbG90cygpLnNpemUoKSk7
CisgICAgSW5kZXhNYXA8U3RhY2tTbG90KiwgU3RhY2tTbG90Kj4gcmVtYXBwZWRTdGFja1Nsb3Rz
KGNvZGUuc3RhY2tTbG90cygpLnNpemUoKSk7CiAgICAgYXV0byByZW1hcCA9IFsmXSAoU3RhY2tT
bG90KiBzbG90KSAtPiBTdGFja1Nsb3QqIHsKICAgICAgICAgaWYgKCFzbG90KQogICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckJsb2NrV29ya2xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckJsb2NrV29ya2xpc3QuaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja1dvcmtsaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsNyAr
MzIsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7
CiAKLXR5cGVkZWYgR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2lj
QmxvY2s+PiBCbG9ja1dvcmtsaXN0OwordHlwZWRlZiBHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Js
b2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jayo+PiBCbG9ja1dvcmtsaXN0OwogCiAvLyBXaGVuIHlv
dSBzYXkgQmxvY2tXaXRoPGludD4geW91IHNob3VsZCByZWFkIGl0IGFzICJibG9jayB3aXRoIGFu
IGludCIuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBCbG9ja1dpdGggPSBHcmFwaE5vZGVX
aXRoPEJhc2ljQmxvY2sqLCBUPjsKQEAgLTQxLDExICs0MSwxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB1c2luZyBCbG9ja1dpdGggPSBHCiAvLyBwZXJtaXRzIGZvcmNpYmx5IGVucXVldWVpbmcg
dGhpbmdzIGV2ZW4gaWYgdGhlIGJsb2NrIGhhcyBhbHJlYWR5IGJlZW4gc2Vlbi4gSXQncyB1c2Vm
dWwgZm9yCiAvLyB0aGluZ3MgbGlrZSBidWlsZGluZyBhIHNwYW5uaW5nIHRyZWUsIGluIHdoaWNo
IGNhc2UgVCAodGhlIGF1eGlsaWFyeSBwYXlsb2FkKSB3b3VsZCBiZSB0aGUKIC8vIHN1Y2Nlc3Nv
ciBpbmRleC4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3JrbGlz
dCA9IEV4dGVuZGVkR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0PEJh
c2ljQmxvY2s+PjsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3Jr
bGlzdCA9IEV4dGVuZGVkR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0
PEJhc2ljQmxvY2sqPj47CiAKIHR5cGVkZWYgR3JhcGhOb2RlV2l0aE9yZGVyPEJhc2ljQmxvY2sq
PiBCbG9ja1dpdGhPcmRlcjsKIAotdHlwZWRlZiBQb3N0T3JkZXJHcmFwaE5vZGVXb3JrbGlzdDxC
YXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IFBvc3RPcmRlckJsb2NrV29ya2xpc3Q7
Cit0eXBlZGVmIFBvc3RPcmRlckdyYXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNl
dDxCYXNpY0Jsb2NrKj4+IFBvc3RPcmRlckJsb2NrV29ya2xpc3Q7CiAKIH0gfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzOjpBaXIKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJDRkcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNG
Ry5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckNGRy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw4ICszOSw4IEBAIGNsYXNzIENGRyB7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBCYXNpY0Jsb2Nr
KiBOb2RlOwotICAgIHR5cGVkZWYgSW5kZXhTZXQ8QmFzaWNCbG9jaz4gU2V0OwotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHVzaW5nIE1hcCA9IEluZGV4TWFwPEJhc2ljQmxvY2ssIFQ+OworICAg
IHR5cGVkZWYgSW5kZXhTZXQ8QmFzaWNCbG9jayo+IFNldDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB1c2luZyBNYXAgPSBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgVD47CiAgICAgdHlwZWRlZiBW
ZWN0b3I8QmFzaWNCbG9jayosIDQ+IExpc3Q7CiAKICAgICBDRkcoQ29kZSYgY29kZSkKQEAgLTUx
LDcgKzUxLDcgQEAgcHVibGljOgogICAgIE5vZGUgcm9vdCgpIHsgcmV0dXJuIG1fY29kZVswXTsg
fQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBNYXA8VD4gbmV3TWFwKCkgeyByZXR1
cm4gSW5kZXhNYXA8SlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrLCBUPihtX2NvZGUuc2l6ZSgpKTsg
fQorICAgIE1hcDxUPiBuZXdNYXAoKSB7IHJldHVybiBJbmRleE1hcDxKU0M6OkIzOjpBaXI6OkJh
c2ljQmxvY2sqLCBUPihtX2NvZGUuc2l6ZSgpKTsgfQogCiAgICAgU3VjY2Vzc29yQ29sbGVjdGlv
bjxCYXNpY0Jsb2NrLCBCYXNpY0Jsb2NrOjpTdWNjZXNzb3JMaXN0PiBzdWNjZXNzb3JzKE5vZGUg
bm9kZSkgeyByZXR1cm4gbm9kZS0+c3VjY2Vzc29yQmxvY2tzKCk7IH0KICAgICBCYXNpY0Jsb2Nr
OjpQcmVkZWNlc3Nvckxpc3QmIHByZWRlY2Vzc29ycyhOb2RlIG5vZGUpIHsgcmV0dXJuIG5vZGUt
PnByZWRlY2Vzc29ycygpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckVsaW1pbmF0ZURlYWRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckVsaW1pbmF0ZURlYWRDb2RlLmNwcAkocmV2aXNpb24gMjE0NDI3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbGltaW5hdGVEZWFkQ29kZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgYm9vbCBlbGltaW5hdGVEZWFkQ29kZShDb2Rl
JiBjb2RlKQogICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAiZWxpbWluYXRlRGVhZENv
ZGUiKTsKIAogICAgIEhhc2hTZXQ8VG1wPiBsaXZlVG1wczsKLSAgICBJbmRleFNldDxTdGFja1Ns
b3Q+IGxpdmVTdGFja1Nsb3RzOworICAgIEluZGV4U2V0PFN0YWNrU2xvdCo+IGxpdmVTdGFja1Ns
b3RzOwogICAgIGJvb2wgY2hhbmdlZDsKIAogICAgIGF1dG8gaXNBcmdMaXZlID0gWyZdIChjb25z
dCBBcmcmIGFyZykgLT4gYm9vbCB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckZpeE9idmlvdXNTcGlsbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyRml4T2J2aW91c1NwaWxscy5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4T2J2aW91c1NwaWxscy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU0Nyw3ICs1NDcsNyBAQCBwcml2YXRlOgogICAgIH07CiAKICAgICBD
b2RlJiBtX2NvZGU7Ci0gICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgU3RhdGU+IG1fYXRIZWFkOwor
ICAgIEluZGV4TWFwPEJhc2ljQmxvY2sqLCBTdGF0ZT4gbV9hdEhlYWQ7CiAgICAgU3RhdGUgbV9z
dGF0ZTsKICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrIHsgbnVsbHB0ciB9OwogICAgIHVuc2lnbmVk
IG1faW5zdEluZGV4IHsgMCB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJGaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmNwcAkocmV2aXNp
b24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhQYXJ0aWFs
UmVnaXN0ZXJTdGFsbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsMTAgKzE1NSwxMCBAQCB2
b2lkIGZpeFBhcnRpYWxSZWdpc3RlclN0YWxscyhDb2RlJiBjb2RlCiAKICAgICAvLyBGb3IgZWFj
aCBibG9jaywgdGhpcyBwcm92aWRlcyB0aGUgZGlzdGFuY2UgdG8gdGhlIGxhc3QgaW5zdHJ1Y3Rp
b24gc2V0dGluZyBlYWNoIHJlZ2lzdGVyCiAgICAgLy8gb24gYmxvY2sgKmVudHJ5Ki4KLSAgICBJ
bmRleE1hcDxCYXNpY0Jsb2NrLCBGUERlZkRpc3RhbmNlPiBsYXN0RGVmRGlzdGFuY2UoY29kZS5z
aXplKCkpOworICAgIEluZGV4TWFwPEJhc2ljQmxvY2sqLCBGUERlZkRpc3RhbmNlPiBsYXN0RGVm
RGlzdGFuY2UoY29kZS5zaXplKCkpOwogCiAgICAgLy8gQmxvY2tzIHdpdGggZGlydHkgZGlzdGFu
Y2UgYXQgaGVhZC4KLSAgICBJbmRleFNldDxCYXNpY0Jsb2NrPiBkaXJ0eTsKKyAgICBJbmRleFNl
dDxCYXNpY0Jsb2NrKj4gZGlydHk7CiAKICAgICAvLyBGaXJzdCwgd2UgY29tcHV0ZSB0aGUgbG9j
YWwgZGlzdGFuY2UgZm9yIGVhY2ggYmxvY2sgYW5kIHB1c2ggaXQgdG8gdGhlIHN1Y2Nlc3NvcnMu
CiAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4U3BpbGxzQWZ0ZXJUZXJt
aW5hbHMuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
OTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCIK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJCbG9ja0luc2VydGlvblNldC5o
IgorI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIKKyNp
bmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgorI2luY2x1ZGUgIkFpclRtcElubGluZXMuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIGZp
eFNwaWxsc0FmdGVyVGVybWluYWxzKENvZGUmIGNvZGUpCit7CisgICAgLy8gQmVjYXVzZSB0aGVy
ZSBtYXkgYmUgdGVybWluYWxzIHRoYXQgcHJvZHVjZSB2YWx1ZXMsIElSQyBtYXkKKyAgICAvLyB3
YW50IHRvIHNwaWxsIHRob3NlIHRlcm1pbmFscy4gSXQnbGwgaGFwcGVuIHRvIHNwaWxsIGl0IGFm
dGVyCisgICAgLy8gdGhlIHRlcm1pbmFsLiBJZiB3ZSBsZWZ0IHRoZSBncmFwaCBpbiB0aGlzIHN0
YXRlLCBpdCdkIGJlIGludmFsaWQKKyAgICAvLyBiZWNhdXNlIGEgdGVybWluYWwgbXVzdCBiZSB0
aGUgbGFzdCBpbnN0cnVjdGlvbiBpbiBhIGJsb2NrLgorICAgIC8vIFdlIGZpeCB0aGF0IGhlcmUu
CisKKyAgICBCTG9ja0luc2VydGlvblNldCBibG9ja0luc2VydGlvblNldChjb2RlKTsKKyAgICBJ
bnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KGNvZGUpOworCisgICAgZm9yIChCYXNpY0Jsb2NrKiBi
bG9jayA6IGNvZGUpIHsKKyAgICAgICAgdW5zaWduZWQgdGVybWluYWxJbmRleCA9IGJsb2NrLT5z
aXplKCk7CisgICAgICAgIGJvb2wgZm91bmRUZXJtaW5hbCA9IGZhbHNlOworICAgICAgICB3aGls
ZSAodGVybWluYWxJbmRleC0tKSB7CisgICAgICAgICAgICBpZiAoYmxvY2stPmF0KHRlcm1pbmFs
SW5kZXgpLmlzVGVybWluYWwoKSkgeworICAgICAgICAgICAgICAgIGZvdW5kVGVybWluYWwgPSB0
cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIEFTU0VSVF9VTlVTRUQoZm91bmRUZXJtaW5hbCwgZm91bmRUZXJtaW5hbCk7CisKKyAg
ICAgICAgaWYgKHRlcm1pbmFsSW5kZXggPT0gYmxvY2stPnNpemUoKSAtIDEpCisgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICAvLyBUaGVyZSBtdXN0IGJlIGluc3RydWN0aW9ucyBhZnRl
ciB0aGUgdGVybWluYWwgYmVjYXVzZSBpdCdzIG5vdCB0aGUgbGFzdCBpbnN0cnVjdGlvbi4KKyAg
ICAgICAgQVNTRVJUKHRlcm1pbmFsSW5kZXggPCBibG9jay0+c2l6ZSgpIC0gMSk7CisgICAgICAg
IFZlY3RvcjxJbnN0LCAxPiBpbnN0c1RvTW92ZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
dGVybWluYWxJbmRleCArIDE7IGkgPCBibG9jay0+c2l6ZSgpOyBpKyspCisgICAgICAgICAgICBp
bnN0c1RvTW92ZS5hcHBlbmQoYmxvY2stPmF0KGkpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
aW5zdHNUb01vdmUuc2l6ZSgpKTsKKworICAgICAgICBmb3IgKEZyZXF1ZW50ZWRCbG9jayYgZnJl
cXVlbnRlZFN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgIEJh
c2ljQmxvY2sqIHN1Y2Nlc3NvciA9IGZyZXF1ZW50ZWRTdWNjZXNzb3IuYmxvY2soKTsKKyAgICAg
ICAgICAgIC8vIElmIHN1Y2Nlc3NvcidzIG9ubHkgcHJlZGVjZXNzb3IgaXMgYmxvY2ssIHdlIGNh
biBwbGFudCB0aGUgc3BpbGwgaW5zaWRlCisgICAgICAgICAgICAvLyB0aGUgc3VjY2Vzc29yLiBP
dGhlcndpc2UsIHdlIG11c3Qgc3BsaXQgdGhlIGNyaXRpY2FsIGVkZ2UgYW5kIGNyZWF0ZQorICAg
ICAgICAgICAgLy8gYSBuZXcgYmxvY2sgZm9yIHRoZSBzcGlsbC4KKyAgICAgICAgICAgIGlmIChz
dWNjZXNzb3ItPm51bVByZWRlY2Vzc29ycygpID09IDEpIHsKKyAgICAgICAgICAgICAgICBpbnNl
cnRpb25TZXQuaW5zZXJ0SW5zdHMoMCwgaW5zdHNUb01vdmUpOworICAgICAgICAgICAgICAgIGlu
c2VydGlvblNldC5leGVjdXRlKHN1Y2Nlc3Nvcik7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIEJhc2ljQmxvY2sqIG5ld0Jsb2NrID0gYmxvY2tJbnNlcnRpb25TZXQuaW5z
ZXJ0QmVmb3JlKHN1Y2Nlc3Nvciwgc3VjY2Vzc29yLT5mcmVxdWVuY3koKSk7CisgICAgICAgICAg
ICAgICAgZm9yIChjb25zdCBJbnN0JiBpbnN0IDogaW5zdHNUb01vdmUpCisgICAgICAgICAgICAg
ICAgICAgIG5ld0Jsb2NrLT5hcHBlbmRJbnN0KGluc3QpOworICAgICAgICAgICAgICAgIG5ld0Js
b2NrLT5hcHBlbmRJbnN0KEluc3QoSnVtcCwgaW5zdHNUb01vdmUubGFzdCgpLm9yaWdpbikpOwor
ICAgICAgICAgICAgICAgIG5ld0Jsb2NrLT5zdWNjZXNzb3JzKCkuYXBwZW5kKHN1Y2Nlc3Nvcik7
CisgICAgICAgICAgICAgICAgZnJlcXVlbnRlZFN1Y2Nlc3Nvci5ibG9jaygpID0gbmV3QmxvY2s7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBibG9jay0+cmVzaXplKHRlcm1p
bmFsSW5kZXggKyAxKTsKKyAgICB9CisKKyAgICBpZiAoYmxvY2tJbnNlcnRpb25TZXQuZXhlY3V0
ZSgpKQorICAgICAgICBjb2RlLnJlc2V0UmVhY2hhYmlsaXR5KCk7Cit9CisKK30gfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeFNwaWxs
c0FmdGVyVGVybWluYWxzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKworLy8gQmVjYXVz
ZSB0aGVyZSBtYXkgYmUgdGVybWluYWxzIHRoYXQgcHJvZHVjZSB2YWx1ZXMsIHRoZSByZWdpc3Rl
ciBhbGxvY2F0b3IgbWF5CisvLyB3YW50IHRvIHNwaWxsIHRob3NlIHRlcm1pbmFscy4gSXQnbGwg
aGFwcGVuIHRvIHNwaWxsIGl0IGFmdGVyCisvLyB0aGUgdGVybWluYWwuIElmIHdlIGxlZnQgdGhl
IGdyYXBoIGluIHRoaXMgc3RhdGUsIGl0J2QgYmUgaW52YWxpZAorLy8gYmVjYXVzZSBhIHRlcm1p
bmFsIG11c3QgYmUgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24gaW4gYSBibG9jay4KKy8vIFdlIGZpeCB0
aGF0IGhlcmUuCit2b2lkIGZpeFNwaWxsc0FmdGVyVGVybWluYWxzKENvZGUmKTsKKworfSB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAJKHJl
dmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJh
dGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUsNyArMTY1LDcgQEAgdm9pZCBnZW5lcmF0ZShD
b2RlJiBjb2RlLCBDQ2FsbEhlbHBlcnMmIAogICAgICAgICBpZiAoYmxvY2spCiAgICAgICAgICAg
ICBjb250ZXh0LmJsb2NrTGFiZWxzW2Jsb2NrXSA9IEJveDxDQ2FsbEhlbHBlcnM6OkxhYmVsPjo6
Y3JlYXRlKCk7CiAgICAgfQotICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIENDYWxsSGVscGVyczo6
SnVtcExpc3Q+IGJsb2NrSnVtcHMoY29kZS5zaXplKCkpOworICAgIEluZGV4TWFwPEJhc2ljQmxv
Y2sqLCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0PiBibG9ja0p1bXBzKGNvZGUuc2l6ZSgpKTsKIAog
ICAgIGF1dG8gbGluayA9IFsmXSAoQ0NhbGxIZWxwZXJzOjpKdW1wIGp1bXAsIEJhc2ljQmxvY2sq
IHRhcmdldCkgewogICAgICAgICBpZiAoY29udGV4dC5ibG9ja0xhYmVsc1t0YXJnZXRdLT5pc1Nl
dCgpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRpb25D
b250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJH
ZW5lcmF0aW9uQ29udGV4dC5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckdlbmVyYXRpb25Db250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4
LDcgKzQ4LDcgQEAgcHVibGljOgogICAgIHR5cGVkZWYgU2hhcmVkVGFzazxMYXRlUGF0aEZ1bmN0
aW9uPiBMYXRlUGF0aDsKIAogICAgIFZlY3RvcjxSZWZQdHI8TGF0ZVBhdGg+PiBsYXRlUGF0aHM7
Ci0gICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgQm94PENDYWxsSGVscGVyczo6TGFiZWw+PiBibG9j
a0xhYmVsczsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgQm94PENDYWxsSGVscGVyczo6TGFi
ZWw+PiBibG9ja0xhYmVsczsKICAgICBCYXNpY0Jsb2NrKiBjdXJyZW50QmxvY2sgeyBudWxscHRy
IH07CiAgICAgdW5zaWduZWQgaW5kZXhJbkJsb2NrIHsgVUlOVF9NQVggfTsKICAgICBDb2RlKiBj
b2RlIHsgbnVsbHB0ciB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJM
b3dlckVudHJ5U3dpdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpckxvd2VyRW50cnlTd2l0Y2guY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyRW50cnlTd2l0Y2guY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIHZvaWQgbG93ZXJFbnRyeVN3aXRjaChDb2RlJiBjb2Rl
KQogICAgIC8vIE5vdyBkdXBsaWNhdGUgdGhlbS4KICAgICBWZWN0b3I8RnJlcXVlbnRlZEJsb2Nr
PiBlbnRyeXBvaW50czsKICAgICBlbnRyeXBvaW50cy5hcHBlbmQoRnJlcXVlbnRlZEJsb2NrKGNv
ZGVbMF0sIGVudHJ5cG9pbnRGcmVxdWVuY2llc1swXSkpOwotICAgIEluZGV4TWFwPEJhc2ljQmxv
Y2ssIEJhc2ljQmxvY2sqPiBtYXAoY29kZS5zaXplKCkpOworICAgIEluZGV4TWFwPEJhc2ljQmxv
Y2sqLCBCYXNpY0Jsb2NrKj4gbWFwKGNvZGUuc2l6ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGVu
dHJ5cG9pbnRJbmRleCA9IDE7IGVudHJ5cG9pbnRJbmRleCA8IGNvZGUucHJvYygpLm51bUVudHJ5
cG9pbnRzKCk7ICsrZW50cnlwb2ludEluZGV4KSB7CiAgICAgICAgIG1hcC5jbGVhcigpOwogICAg
ICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogd29ya2xpc3Quc2VlbigpLnZhbHVlcyhjb2Rl
KSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnTGl2ZW5lc3MuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ0xpdmVuZXNz
LmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
UmVnTGl2ZW5lc3MuaAkod29ya2luZyBjb3B5KQpAQCAtODQsOCArODQsOCBAQCBwdWJsaWM6CiAg
ICAgfQogICAgIAogcHJpdmF0ZToKLSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBSZWdpc3RlclNl
dD4gbV9saXZlQXRIZWFkOwotICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIFJlZ2lzdGVyU2V0PiBt
X2xpdmVBdFRhaWw7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jayosIFJlZ2lzdGVyU2V0PiBtX2xp
dmVBdEhlYWQ7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jayosIFJlZ2lzdGVyU2V0PiBtX2xpdmVB
dFRhaWw7CiB9OwogCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3Bw
CShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNw
aWxsRXZlcnl0aGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgdm9pZCBz
cGlsbEV2ZXJ5dGhpbmcoQ29kZSYgY29kZSkKICAgICBwYWRJbnRlcmZlcmVuY2UoY29kZSk7CiAK
ICAgICAvLyBXZSB3YW50IHRvIGtub3cgdGhlIHNldCBvZiByZWdpc3RlcnMgdXNlZCBhdCBldmVy
eSBwb2ludCBpbiBldmVyeSBiYXNpYyBibG9jay4KLSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBW
ZWN0b3I8UmVnaXN0ZXJTZXQ+PiB1c2VkUmVnaXN0ZXJzKGNvZGUuc2l6ZSgpKTsKKyAgICBJbmRl
eE1hcDxCYXNpY0Jsb2NrKiwgVmVjdG9yPFJlZ2lzdGVyU2V0Pj4gdXNlZFJlZ2lzdGVycyhjb2Rl
LnNpemUoKSk7CiAgICAgR1BMaXZlbmVzcyBncExpdmVuZXNzKGNvZGUpOwogICAgIEZQTGl2ZW5l
c3MgZnBMaXZlbmVzcyhjb2RlKTsKICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkg
ewpAQCAtMTg0LDYgKzE4NCw4IEBAIHZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUmIGNvZGUpCiAg
ICAgICAgIH0KICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOwogICAgIH0KKyAg
ICAKKyAgICBmaXhTcGlsbHNBZnRlclRlcm1pbmFscyhjb2RlKTsKIH0KIAogfSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJUbXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
VG1wLmNwcAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJUbXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDYgKzMwLDExIEBACiAKIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKIAorY29uc3QgY2hhciogY29uc3Qg
VG1wOjpJbmRleGVkPEdQPjo6ZHVtcFByZWZpeCA9ICIldG1wIjsKK2NvbnN0IGNoYXIqIGNvbnN0
IFRtcDo6SW5kZXhlZDxGUD46OmR1bXBQcmVmaXggPSAiJWZ0bXAiOworY29uc3QgY2hhciogY29u
c3QgVG1wOjpBYnNvbHV0ZWx5SW5kZXhlZDxHUD46OmR1bXBQcmVmaXggPSAiJWFicyI7Citjb25z
dCBjaGFyKiBjb25zdCBUbXA6OkFic29sdXRlbHlJbmRleGVkPEZQPjo6ZHVtcFByZWZpeCA9ICIl
ZmFicyI7CisKIHZvaWQgVG1wOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAg
aWYgKCEqdGhpcykgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCShy
ZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTE1NCw3ICsxNTQsMTYgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0
dXJuIGdwVG1wSW5kZXgoKTsKICAgICAgICAgcmV0dXJuIGZwVG1wSW5kZXgoKTsKICAgICB9Ci0K
KyAgICAKKyAgICB0ZW1wbGF0ZTxCYW5rIGJhbms+IGNsYXNzIEluZGV4ZWQ7CisgICAgdGVtcGxh
dGU8QmFuayBiYW5rPiBjbGFzcyBBYnNvbHV0ZWx5SW5kZXhlZDsKKyAgICAKKyAgICB0ZW1wbGF0
ZTxCYW5rIGJhbms+CisgICAgSW5kZXhlZDxiYW5rPiBpbmRleGVkKCkgY29uc3Q7CisgICAgCisg
ICAgdGVtcGxhdGU8QmFuayBiYW5rPgorICAgIEFic29sdXRlbHlJbmRleGVkPGJhbms+IGFib2x1
dGVseUluZGV4ZWQoKSBjb25zdDsKKyAgICAKICAgICBib29sIGlzQWxpdmUoKSBjb25zdAogICAg
IHsKICAgICAgICAgcmV0dXJuICEhKnRoaXM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpclRtcElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclRtcElubGluZXMuaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXBJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTky
LDYgKzkyLDUwIEBAIHN0cnVjdCBBYnNvbHV0ZVRtcE1hcHBlcjxGUD4gewogICAgIH0KIH07CiAK
K3RlbXBsYXRlPEJhbmsgYmFuaz4KK2NsYXNzIFRtcDo6SW5kZXhlZCA6IHB1YmxpYyBUbXAgewor
cHVibGljOgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBkdW1wUHJlZml4OworICAgIAor
ICAgIEluZGV4ZWQoVG1wIHRtcCkKKyAgICAgICAgOiBUbXAodG1wKQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRt
cEluZGV4KGJhbmspOworICAgIH0KK307CisKK3RlbXBsYXRlPEJhbmsgYmFuaz4KK2NsYXNzIFRt
cDo6QWJzb2x1dGVseUluZGV4ZWQgOiBwdWJsaWMgVG1wIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
Y29uc3QgY2hhciogY29uc3QgZHVtcFByZWZpeDsKKworICAgIEFic29sdXRlbHlJbmRleGVkKFRt
cCB0bXApCisgICAgICAgIDogVG1wKHRtcCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHVuc2ln
bmVkIGluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBBYnNvbHV0ZVRtcE1hcHBl
cjxiYW5rPjo6YWJzb2x1dGVJbmRleCgqdGhpcyk7CisgICAgfQorfTsKKwordGVtcGxhdGU8QmFu
ayBiYW5rPgorVG1wOjpJbmRleGVkPGJhbms+IFRtcDo6aW5kZXhlZCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIEluZGV4ZWQ8YmFuaz4oKnRoaXMpOworfQorCit0ZW1wbGF0ZTxCYW5rIGJhbms+CitU
bXA6OkFic29sdXRlbHlJbmRleGVkPGJhbms+IFRtcDo6YWJzb2x1dGVseUluZGV4ZWQoKSBjb25z
dAoreworICAgIHJldHVybiBBYnNvbHV0ZWx5SW5kZXhlZDxiYW5rPigqdGhpcyk7Cit9CisKIH0g
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKIAogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDIxNDQyNykKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDggQEAKIC8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBzZWN0
aW9uICovCiAJCTBGMEQ4NUI0MTcyMzRDQzEwMDMzODIxMCAvKiBOb0xvY2suaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEQ4NUIzMTcyMzRDQjEwMDMz
ODIxMCAvKiBOb0xvY2suaCAqLzsgfTsKIAkJMEYwRkNEREUxREQxNjdGOTAwQ0NBQjUzIC8qIExv
Y2tBbGdvcml0aG0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMEZDREREMUREMTY3RjkwMENDQUI1MyAvKiBMb2NrQWxnb3JpdGhtLmggKi87IH07CisJ
CTBGMkFDNTYxMUU4OUY3MEMwMDAxRUUzRiAvKiBSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQUM1NjAxRTg5RjcwQzAwMDFFRTNGIC8qIFJh
bmdlLmggKi87IH07CisJCTBGMkFDNTYzMUU4QTAxNDkwMDAxRUUzRiAvKiBJbmRleEtleVR5cGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkFDNTYy
MUU4QTAxNDkwMDAxRUUzRiAvKiBJbmRleEtleVR5cGUuaCAqLzsgfTsKIAkJMEYyQjY2QTYxN0I2
QjRGQjAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3VudGVkLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBNDE3QjZCNEY3MDBBN0FFM0YgLyog
RGVmZXJyYWJsZVJlZkNvdW50ZWQuaCAqLzsgfTsKIAkJMEYyQjY2QTcxN0I2QjRGRDAwQTdBRTNG
IC8qIEZsaXBCeXRlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyQjY2QTUxN0I2QjRGNzAwQTdBRTNGIC8qIEZsaXBCeXRlcy5oICovOyB9OwogCQkw
RjMwQkE5MDFFNzg3MDhFMDAyQ0E4NDcgLyogR2xvYmFsVmVyc2lvbi5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMwQkE4QTFFNzg3MDhFMDAyQ0E4
NDcgLyogR2xvYmFsVmVyc2lvbi5jcHAgKi87IH07CkBAIC00MDgsNiArNDEwLDggQEAKIC8qIEJl
Z2luIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCQkwRjBEODVCMzE3MjM0Q0IxMDAzMzgy
MTAgLyogTm9Mb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5vTG9jay5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjBGQ0RERDFERDE2N0Y5MDBDQ0FCNTMgLyogTG9ja0FsZ29yaXRobS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2NrQWxnb3JpdGhtLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkFDNTYwMUU4OUY3MEMwMDAxRUUzRiAvKiBSYW5n
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSYW5nZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjJBQzU2MjFFOEEwMTQ5MDAwMUVFM0YgLyogSW5kZXhLZXlU
eXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZGV4S2V5VHlwZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCNjZBNDE3QjZCNEY3MDBBN0FFM0YgLyog
RGVmZXJyYWJsZVJlZkNvdW50ZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVmZXJyYWJsZVJlZkNvdW50
ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQjY2QTUxN0I2QjRGNzAwQTdB
RTNGIC8qIEZsaXBCeXRlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGbGlwQnl0ZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzMDBCN0QxOEFCNDhCNDAwQTZENzJFIC8qIEhhc2hNZXRo
b2QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSGFzaE1ldGhvZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTAxOCwxMCArMTAyMiwxMSBAQAogCQkJCUE4QTQ3MkJBMTUxQTgyNUEwMDQxMjNG
RiAvKiBIYXNoVHJhaXRzLmggKi8sCiAJCQkJQThBNDcyQkIxNTFBODI1QTAwNDEyM0ZGIC8qIEhl
eE51bWJlci5oICovLAogCQkJCUZFODkyNUFGMUQwMERBRUMwMDQ2OTA3RSAvKiBJbmRlbnRlci5o
ICovLAotCQkJCTlDNjdDNTQyNTg5MzQ4RTI4NUI0OTY5OSAvKiBJbmRleGVkQ29udGFpbmVySXRl
cmF0b3IuaCAqLywKKwkJCQkwRjJBQzU2MjFFOEEwMTQ5MDAwMUVFM0YgLyogSW5kZXhLZXlUeXBl
LmggKi8sCiAJCQkJNUI0MzM4M0E1RDBCNDYzQzk0MzNEOTMzIC8qIEluZGV4TWFwLmggKi8sCiAJ
CQkJMzEzN0UxRDdEQkQ4NEFDMzhGQUU0RDM0IC8qIEluZGV4U2V0LmggKi8sCiAJCQkJMjY4NEQ0
MzUxQzAwMEQ0MDAwODFENjYzIC8qIEluZGV4U3BhcnNlU2V0LmggKi8sCisJCQkJOUM2N0M1NDI1
ODkzNDhFMjg1QjQ5Njk5IC8qIEluZGV4ZWRDb250YWluZXJJdGVyYXRvci5oICovLAogCQkJCUE4
QTQ3MkJDMTUxQTgyNUEwMDQxMjNGRiAvKiBJbmxpbmVBU00uaCAqLywKIAkJCQlBNzBEQTA4MjE3
OTlGMDREMDA1MjlBOUIgLyogSW5zZXJ0aW9uLmggKi8sCiAJCQkJN0NERDdGRjcxODZEMjkxRTAw
NzQzM0NEIC8qIEl0ZXJhdG9yQWRhcHRvcnMuaCAqLywKQEAgLTExMDAsNiArMTEwNSw3IEBACiAJ
CQkJQThBNDcyRkIxNTFBODI1QjAwNDEyM0ZGIC8qIFJhbmRvbU51bWJlci5jcHAgKi8sCiAJCQkJ
QThBNDcyRkMxNTFBODI1QjAwNDEyM0ZGIC8qIFJhbmRvbU51bWJlci5oICovLAogCQkJCUE4QTQ3
MkZEMTUxQTgyNUIwMDQxMjNGRiAvKiBSYW5kb21OdW1iZXJTZWVkLmggKi8sCisJCQkJMEYyQUM1
NjAxRTg5RjcwQzAwMDFFRTNGIC8qIFJhbmdlLmggKi8sCiAJCQkJMEY3MjVDQUIxQzUwNDYxNjAw
QUQ5NDNBIC8qIFJhbmdlU2V0LmggKi8sCiAJCQkJMEY4NzEwNTkxNjY0M0YxOTAwOTBCMEFEIC8q
IFJhd1BvaW50ZXIuaCAqLywKIAkJCQkwRkRFODdGNjFERkQwN0NDMDA2NEMzOTAgLyogUmVjdXJz
aXZlTG9ja0FkYXB0ZXIuaCAqLywKQEAgLTE0ODUsNiArMTQ5MSw3IEBACiAJCQkJQzkxNkI5NzVG
MDJGNEY3RThCNEFCMTJEIC8qIEluZGV4TWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlDOEIwRTFB
MUUwMUE0ODZFQjk1RTBEMTEgLyogSW5kZXhTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTI2ODRE
NDM2MUMwMDBENDAwMDgxRDY2MyAvKiBJbmRleFNwYXJzZVNldC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEYyQUM1NjMxRThBMDE0OTAwMDFFRTNGIC8qIEluZGV4S2V5VHlwZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQThBNDczREMxNTFBODI1QjAwNDEyM0ZGIC8qIElubGluZUFTTS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTcwREEwODQxNzk5RjA0RDAwNTI5QTlCIC8qIEluc2VydGlvbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMjYxNDdCMEExNUREQ0NEQzAwRERCOTA3IC8qIEludGVnZXJUb1N0cmlu
Z0NvbnZlcnNpb24uaCBpbiBIZWFkZXJzICovLApAQCAtMTU4Niw2ICsxNTkzLDcgQEAKIAkJCQk0
MzBCNDc4OTFBQUFBQzFBMDAxMjIzREEgLyogU3RyaW5nQ29tbW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBOEE0NzQzRTE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nQ29uY2F0ZW5hdGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTdDRDRDMjcwMUUyQzgyQjkwMDkyOTQ3MCAvKiBTdHJpbmdDb25jYXRl
bmF0ZU51bWJlcnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkFDNTYxMUU4OUY3MEMwMDAxRUUz
RiAvKiBSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0MkMxNTFBODI1QjAwNDEyM0ZG
IC8qIFN0cmluZ0V4dHJhcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0M0YxNTFBODI1QjAw
NDEyM0ZGIC8qIFN0cmluZ0hhc2guaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDg3NDU0MTdBMEJE
QUUwMEZBMDRDQiAvKiBTdHJpbmdIYXNoRHVtcENvbnRleHQuaCBpbiBIZWFkZXJzICovLApJbmRl
eDogU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9XVEYvd3Rm
L0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNiArMTAwLDcgQEAgc2V0KFdU
Rl9IRUFERVJTCiAgICAgUkFNU2l6ZS5oCiAgICAgUmFuZG9tTnVtYmVyLmgKICAgICBSYW5kb21O
dW1iZXJTZWVkLmgKKyAgICBSYW5nZS5oCiAgICAgUmFuZ2VTZXQuaAogICAgIFJhd1BvaW50ZXIu
aAogICAgIFJlY3Vyc2l2ZUxvY2tBZGFwdGVyLmgKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0luZGV4
S2V5VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0luZGV4S2V5VHlwZS5oCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL0luZGV4S2V5VHlwZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorc3RydWN0IEluZGV4S2V5VHlwZSB7CisgICAgc3RhdGljIHNpemVfdCBpbmRl
eChjb25zdCBUJiBrZXkpIGNvbnN0IHsgcmV0dXJuIGtleS5pbmRleCgpOyB9Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IEluZGV4S2V5VHlwZTxUKj4geworICAgIHN0YXRpYyBz
aXplX3QgaW5kZXgoVCoga2V5KSBjb25zdCB7IHJldHVybiBrZXktPmluZGV4KCk7IH0KK307CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9JbmRleE1hcC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0luZGV4TWFwLmgJKHJldmlzaW9uIDIxNDQyNykK
KysrIFNvdXJjZS9XVEYvd3RmL0luZGV4TWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1
LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlIDx3dGYvSW5kZXhLZXlUeXBlLmg+CiAj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTcwLDE0ICs3MSwy
MCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX3ZlY3RvcltpbmRleF07CiAgICAgfQogICAg
IAotICAgIFZhbHVlJiBvcGVyYXRvcltdKEtleSoga2V5KQorICAgIFZhbHVlJiBvcGVyYXRvcltd
KGNvbnN0IEtleSYga2V5KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdmVjdG9yW2tleS0+aW5k
ZXgoKV07CisgICAgICAgIHJldHVybiBtX3ZlY3RvcltJbmRleEtleVR5cGU8S2V5Pjo6aW5kZXgo
a2V5KV07CiAgICAgfQogICAgIAotICAgIGNvbnN0IFZhbHVlJiBvcGVyYXRvcltdKEtleSoga2V5
KSBjb25zdAorICAgIGNvbnN0IFZhbHVlJiBvcGVyYXRvcltdKGNvbnN0IEtleSYga2V5KSBjb25z
dAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdmVjdG9yW2tleS0+aW5kZXgoKV07CisgICAgICAg
IHJldHVybiBtX3ZlY3RvcltJbmRleEtleVR5cGU8S2V5Pjo6aW5kZXgoa2V5KV07CisgICAgfQor
ICAgIAorICAgIHZvaWQgYXBwZW5kKGNvbnN0IEtleSYga2V5LCBWYWx1ZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKEluZGV4S2V5VHlwZTxLZXk+OjppbmRleChrZXkpID09
IG1fdmVjdG9yLnNpemUoKSk7CisgICAgICAgIG1fdmVjdG9yLmFwcGVuZCh2YWx1ZSk7CiAgICAg
fQogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dURi93dGYvSW5kZXhTZXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9JbmRleFNldC5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9JbmRleFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNiArMjcsNyBAQAog
CiAjaW5jbHVkZSA8d3RmL0JpdFZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIu
aD4KKyNpbmNsdWRlIDx3dGYvSW5kZXhLZXlUeXBlLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCkBA
IC00MiwzMCArNDMsMzAgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBib29sIGFkZChU
KiB2YWx1ZSkKKyAgICBib29sIGFkZChjb25zdCBUJiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJl
dHVybiAhbV9zZXQuc2V0KHZhbHVlLT5pbmRleCgpKTsKKyAgICAgICAgcmV0dXJuICFtX3NldC5z
ZXQoSW5kZXhLZXlUeXBlPFQ+OjppbmRleCh2YWx1ZSkpOwogICAgIH0KIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEl0ZXJhYmxlPgogICAgIGJvb2wgYWRkQWxsKGNvbnN0IEl0ZXJhYmxlJiBpdGVy
YWJsZSkKICAgICB7CiAgICAgICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgIGZvciAo
VCogdmFsdWUgOiBpdGVyYWJsZSkKKyAgICAgICAgZm9yIChjb25zdCBUJiB2YWx1ZSA6IGl0ZXJh
YmxlKQogICAgICAgICAgICAgcmVzdWx0IHw9IGFkZCh2YWx1ZSk7CiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgfQogCi0gICAgYm9vbCByZW1vdmUoVCogdmFsdWUpCisgICAgYm9vbCByZW1v
dmUoY29uc3QgVCYgdmFsdWUpCiAgICAgewotICAgICAgICByZXR1cm4gbV9zZXQuY2xlYXIodmFs
dWUtPmluZGV4KCkpOworICAgICAgICByZXR1cm4gbV9zZXQuY2xlYXIoSW5kZXhLZXlUeXBlPFQ+
OjppbmRleCh2YWx1ZSkpOwogICAgIH0KIAotICAgIGJvb2wgY29udGFpbnMoVCogdmFsdWUpIGNv
bnN0CisgICAgYm9vbCBjb250YWlucyhjb25zdCBUJiB2YWx1ZSkgY29uc3QKICAgICB7CiAgICAg
ICAgIGlmICghdmFsdWUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVy
biBtX3NldC5nZXQodmFsdWUtPmluZGV4KCkpOworICAgICAgICByZXR1cm4gbV9zZXQuZ2V0KElu
ZGV4S2V5VHlwZTxUPjo6aW5kZXgodmFsdWUpKTsKICAgICB9CiAKICAgICBzaXplX3Qgc2l6ZSgp
IGNvbnN0CkBAIC0xMDAsNyArMTAxLDcgQEAgcHVibGljOgogICAgICAgICAgICAgewogICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICBUKiBvcGVyYXRvciooKQorICAgICAgICAgICAgVCBvcGVy
YXRvciooKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBtX2NvbGxlY3Rp
b24tPmF0KCptX2l0ZXIpOwogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL1dURi93dGYvUmFu
Z2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9SYW5nZS5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XVEYvd3RmL1JhbmdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0
cmFzLmg+CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgewor
CisvLyBOb3RlIHRoYXQgdGhlICdiZWdpbicgaXMgaW5jbHVzaXZlLCB3aGlsZSB0aGUgJ2VuZCcg
aXMgZXhjbHVzaXZlLiBUaGVzZSB0d28gcmFuZ2VzIGFyZSBub24tCisvLyBvdmVybGFwcGluZzoK
Ky8vCisvLyAgICAgcmFuZ2VBID0gMC4uLjgKKy8vICAgICByYW5nZUIgPSA4Li4uMTYKKwordGVt
cGxhdGU8dHlwZW5hbWUgUGFzc2VkVHlwZT4KK2NsYXNzIFJhbmdlIHsKK3B1YmxpYzoKKyAgICB0
eXBlZGVmIFBhc3NlZFR5cGUgVHlwZTsKKyAgICAKKyAgICBIZWFwUmFuZ2UoKQorICAgICAgICA6
IG1fYmVnaW4oMCkKKyAgICAgICAgLCBtX2VuZCgwKQorICAgIHsKKyAgICB9CisKKyAgICBleHBs
aWNpdCBIZWFwUmFuZ2UoVHlwZSB2YWx1ZSkKKyAgICAgICAgOiBtX2JlZ2luKHZhbHVlKQorICAg
ICAgICAsIG1fZW5kKHZhbHVlICsgMSkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2VuZCA+PSBt
X2JlZ2luKTsKKyAgICB9CisKKyAgICBIZWFwUmFuZ2UoVHlwZSBiZWdpbiwgVHlwZSBlbmQpCisg
ICAgICAgIDogbV9iZWdpbihiZWdpbikKKyAgICAgICAgLCBtX2VuZChlbmQpCisgICAgeworICAg
ICAgICBBU1NFUlQobV9lbmQgPj0gbV9iZWdpbik7CisgICAgICAgIGlmIChtX2JlZ2luID09IG1f
ZW5kKSB7CisgICAgICAgICAgICAvLyBDYW5vbmljYWxpemUgZW1wdHkgcmFuZ2VzLgorICAgICAg
ICAgICAgbV9iZWdpbiA9IDA7CisgICAgICAgICAgICBtX2VuZCA9IDA7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBzdGF0aWMgSGVhcFJhbmdlIHRvcCgpCisgICAgeworICAgICAgICByZXR1cm4g
SGVhcFJhbmdlKHN0ZDo6bnVtZXJpY19saW1pdHM8VHlwZT46Om1pbigpLCBzdGQ6Om51bWVyaWNf
bGltaXRzPFR5cGU+OjptYXgoKSk7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IEhlYXBSYW5nZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9iZWdpbiA9
PSBvdGhlci5tX2JlZ2luCisgICAgICAgICAgICAmJiBtX2VuZCA9PSBvdGhlci5tX2VuZDsKKyAg
ICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgSGVhcFJhbmdlJiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisgICAgCisg
ICAgSGVhcFJhbmdlIG9wZXJhdG9yfChjb25zdCBIZWFwUmFuZ2UmIG90aGVyKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIEhlYXBSYW5nZSgKKyAgICAgICAgICAgIHN0ZDo6bWluKG1fYmVn
aW4sIG90aGVyLm1fYmVnaW4pLAorICAgICAgICAgICAgc3RkOjptYXgobV9lbmQsIG90aGVyLm1f
ZW5kKSk7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7
IHJldHVybiBtX2JlZ2luICE9IG1fZW5kOyB9CisKKyAgICBUeXBlIGJlZ2luKCkgY29uc3QgeyBy
ZXR1cm4gbV9iZWdpbjsgfQorICAgIFR5cGUgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9lbmQ7IH0K
KworICAgIGJvb2wgb3ZlcmxhcHMoY29uc3QgSGVhcFJhbmdlJiBvdGhlcikgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBXVEY6OnJhbmdlc092ZXJsYXAobV9iZWdpbiwgbV9lbmQsIG90aGVy
Lm1fYmVnaW4sIG90aGVyLm1fZW5kKTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICgqdGhpcyA9PSBIZWFwUmFuZ2UoKSkg
eworICAgICAgICAgICAgb3V0LnByaW50KCJCb3R0b20iKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICBpZiAoKnRoaXMgPT0gdG9wKCkpIHsKKyAgICAgICAgICAgIG91
dC5wcmludCgiVG9wIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
aWYgKG1fYmVnaW4gPT0gbV9lbmQgKyAxKSB7CisgICAgICAgICAgICBvdXQucHJpbnQobV9iZWdp
bik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgb3V0LnByaW50KG1f
YmVnaW4sICIuLi4iLCBtX2VuZCk7CisgICAgfQorCitwcml2YXRlOgorICAgIFR5cGUgbV9iZWdp
bjsKKyAgICBUeXBlIG1fZW5kOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdU
Rjo6UmFuZ2U7CisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1JhbmdlU2V0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvUmFuZ2VTZXQuaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNl
L1dURi93dGYvUmFuZ2VTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsNiArNzcsMTAgQEAgcHVi
bGljOgogICAgICAgICBtX2lzQ29tcGFjdCA9IGZhbHNlOwogCiAgICAgICAgIC8vIFdlIGFwcGVu
ZCB3aXRob3V0IGNvbXBhY3Rpbmcgb25seSBpZiBkb2luZyBzbyBpcyBndWFyYW50ZWVkIG5vdCB0
byByZXNpemUgdGhlIHZlY3Rvci4KKyAgICAgICAgLy8gRklYTUU6IFRoaXMgaGV1cmlzdGljIGlz
IGFsbW9zdCBjZXJ0YWlubHkgd3JvbmcsIGJlY2F1c2Ugd2UgZG9uJ3QgY29udHJvbCB0aGUgY2Fw
YWNpdHkuIEkKKyAgICAgICAgLy8gdGhpbmsgdGhhdCB0aGlzIG1lYW5zIHRoYXQgd2Ugd2lsbCBz
b21ldGltZXMgYmUgcmFnZS1jb21wYWN0aW5nIHdoZW4gd2UgYXJlIGp1c3Qgc2h5IG9mIHRoZQor
ICAgICAgICAvLyBjYXBhY2l0eS4KKyAgICAgICAgLy8gT09QUzogbmVlZCBidWcgdXJsCiAgICAg
ICAgIGlmIChtX3Jhbmdlcy5zaXplKCkgKyAxIDwgbV9yYW5nZXMuY2FwYWNpdHkoKSkgewogICAg
ICAgICAgICAgbV9yYW5nZXMuYXBwZW5kKHJhbmdlKTsKICAgICAgICAgICAgIHJldHVybjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305558</attachid>
            <date>2017-03-27 21:20:04 -0700</date>
            <delta_ts>2017-03-27 22:29:50 -0700</delta_ts>
            <desc>so close</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>86096</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIxNDQyNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMTQwLDcgKzE0MCw2IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYjMvQjNG
b2xkUGF0aENvbnN0YW50cy5jcHAKICAgICBiMy9CM0ZyZXF1ZW5jeUNsYXNzLmNwcAogICAgIGIz
L0IzR2VuZXJhdGUuY3BwCi0gICAgYjMvQjNIZWFwUmFuZ2UuY3BwCiAgICAgYjMvQjNJbmZlclN3
aXRjaGVzLmNwcAogICAgIGIzL0IzSW5zZXJ0aW9uU2V0LmNwcAogICAgIGIzL0IzS2luZC5jcHAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTgzLDYgKzE4MywxMCBAQAogCQkwRjI1RjFCMjE4MTYz
NUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1RjFBQjE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xv
d1BhdGhDYWxsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEYyNUYxQjMxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1RjFBQzE4
MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5LmNwcCAqLzsgfTsKIAkJMEYyNUYx
QjQxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNUYxQUQxODE2MzVGMzAwNTIyRjM5
IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGMkFDNTY2MUU4QTBCNzcwMDAxRUUzRiAvKiBBaXJGaXhTcGls
bHNBZnRlclRlcm1pbmFscy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjJBQzU2NDFFOEEwQjc2MDAwMUVFM0YgLyogQWlyRml4U3BpbGxzQWZ0ZXJU
ZXJtaW5hbHMuY3BwICovOyB9OworCQkwRjJBQzU2NzFFOEEwQjc5MDAwMUVFM0YgLyogQWlyRml4
U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMkFDNTY1MUU4QTBCNzYwMDAxRUUzRiAvKiBBaXJGaXhTcGlsbHNBZnRl
clRlcm1pbmFscy5oICovOyB9OworCQkwRjJBQzU2QTFFOEEwQkQzMDAwMUVFM0YgLyogQWlyQWxs
b2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQUM1NjgxRThBMEJEMTAwMDFFRTNGIC8qIEFpckFsbG9j
YXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcCAqLzsgfTsKKwkJMEYyQUM1NkIxRThBMEJENTAw
MDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJBQzU2OTFFOEEwQkQxMDAwMUVF
M0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaCAqLzsgfTsKIAkJMEYyQjY2
QUMxN0I2QjUzRjAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBODE3QjZCNTNEMDBBN0FF
M0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJCNjZBRDE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNv
bWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJCNjZBOTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNv
dW50ZWRJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEYyQjY2QUUxN0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVk
U2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJC
NjZBQTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTY5LDcgKzk3Myw2
IEBACiAJCTBGRUM4NUJDMUJFMTQ2MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0cmVuZ3RoLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUI3MUJF
MTQ2MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0cmVuZ3RoLmNwcCAqLzsgfTsKIAkJMEZFQzg1QkQx
QkUxNDYyRjAwODBGRjc0IC8qIEIzUmVkdWNlU3RyZW5ndGguaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUI4MUJFMTQ2MkYwMDgwRkY3NCAvKiBC
M1JlZHVjZVN0cmVuZ3RoLmggKi87IH07CiAJCTBGRUM4NUMxMUJFMTY3QTAwMDgwRkY3NCAvKiBC
M0VmZmVjdHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NUJFMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0VmZmVjdHMuaCAqLzsgfTsKLQkJMEZFQzg1
QzIxQkUxNjdBMDAwODBGRjc0IC8qIEIzSGVhcFJhbmdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUJGMUJFMTY3QTAwMDgwRkY3NCAvKiBC
M0hlYXBSYW5nZS5jcHAgKi87IH07CiAJCTBGRUM4NUMzMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hl
YXBSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg1QzAxQkUxNjdBMDAwODBGRjc0IC8qIEIzSGVhcFJhbmdlLmggKi87IH07CiAJCTBGRUM4
NUM1MUJFMTZGNUEwMDgwRkY3NCAvKiBCM0VmZmVjdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1QzQxQkUxNkY1QTAwODBGRjc0IC8qIEIz
RWZmZWN0cy5jcHAgKi87IH07CiAJCTBGRUQ2N0I5MUIyNjI1NkQwMDY2Q0UxNSAvKiBERkdDb25z
dGFudEhvaXN0aW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFRDY3QjcxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0YW50SG9pc3Rp
bmdQaGFzZS5jcHAgKi87IH07CkBAIC0yNzAzLDYgKzI3MDYsMTAgQEAKIAkJMEYyNUYxQUIxODE2
MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBGVExTbG93UGF0aENhbGwuaDsgcGF0aCA9IGZ0bC9GVExTbG93UGF0aENhbGwu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNUYxQUMxODE2MzVGMzAwNTIyRjM5
IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBGVExTbG93UGF0aENhbGxLZXkuY3BwOyBwYXRoID0gZnRsL0ZUTFNsb3dQYXRoQ2Fs
bEtleS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjVGMUFEMTgxNjM1RjMw
MDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gRlRMU2xvd1BhdGhDYWxsS2V5Lmg7IHBhdGggPSBmdGwvRlRMU2xvd1BhdGhDYWxs
S2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkFDNTY0MUU4QTBCNzYwMDAx
RUUzRiAvKiBBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5jcHA7IHBhdGgg
PSBiMy9haXIvQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjJBQzU2NTFFOEEwQjc2MDAwMUVFM0YgLyogQWlyRml4U3BpbGxzQWZ0
ZXJUZXJtaW5hbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyRml4U3Bp
bGxzQWZ0ZXJUZXJtaW5hbHMuaDsgcGF0aCA9IGIzL2Fpci9BaXJGaXhTcGlsbHNBZnRlclRlcm1p
bmFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJBQzU2ODFFOEEwQkQxMDAw
MUVFM0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNj
YW4uY3BwOyBwYXRoID0gYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQUM1NjkxRThBMEJEMTAwMDFFRTNG
IC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmg7IHBhdGgg
PSBiMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQjY2QTgxN0I2QjUzRDAwQTdBRTNGIC8qIEdDSW5jb21pbmdS
ZWZDb3VudGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5jb21pbmdSZWZDb3VudGVkLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkE5MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0lu
Y29taW5nUmVmQ291bnRlZElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR0NJbmNvbWluZ1JlZkNv
dW50ZWRJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkFBMTdC
NkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMzQ5Niw3ICszNTAzLDYgQEAKIAkJMEZFQzg1QjcxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVk
dWNlU3RyZW5ndGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNS
ZWR1Y2VTdHJlbmd0aC5jcHA7IHBhdGggPSBiMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQzg1QjgxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVk
dWNlU3RyZW5ndGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNSZWR1Y2VT
dHJlbmd0aC5oOyBwYXRoID0gYjMvQjNSZWR1Y2VTdHJlbmd0aC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkVDODVCRTFCRTE2N0EwMDA4MEZGNzQgLyogQjNFZmZlY3RzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzRWZmZWN0cy5oOyBwYXRoID0gYjMvQjNF
ZmZlY3RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGRUM4NUJGMUJFMTY3QTAw
MDgwRkY3NCAvKiBCM0hlYXBSYW5nZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBCM0hlYXBSYW5nZS5jcHA7IHBhdGggPSBiMy9CM0hlYXBSYW5nZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUM4NUMwMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hl
YXBSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0hlYXBSYW5nZS5o
OyBwYXRoID0gYjMvQjNIZWFwUmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZFQzg1QzQxQkUxNkY1QTAwODBGRjc0IC8qIEIzRWZmZWN0cy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0VmZmVjdHMuY3BwOyBwYXRoID0gYjMvQjNFZmZlY3Rz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFRDY3QjcxQjI2MjU2RDAwNjZD
RTE1IC8qIERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuY3BwOyBwYXRoID0gZGZn
L0RGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01NDE5LDcgKzU0MjUsNiBAQAogCQkJCTBGRUM4NENGMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0dlbmVyYXRlLmggKi8sCiAJCQkJMEYyQzYzQjUxRTYzNDNFODAwQzEzODM5IC8qIEIzR2VuZXJp
Y0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi8sCiAJCQkJMEZFQzg0RDAxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oICovLAotCQkJCTBGRUM4NUJGMUJFMTY3QTAwMDgw
RkY3NCAvKiBCM0hlYXBSYW5nZS5jcHAgKi8sCiAJCQkJMEZFQzg1QzAxQkUxNjdBMDAwODBGRjc0
IC8qIEIzSGVhcFJhbmdlLmggKi8sCiAJCQkJREM2OUI5OUExRDE1RjkwRjAwMkUzQzAwIC8qIEIz
SW5mZXJTd2l0Y2hlcy5jcHAgKi8sCiAJCQkJREM2OUI5OUIxRDE1RjkwRjAwMkUzQzAwIC8qIEIz
SW5mZXJTd2l0Y2hlcy5oICovLApAQCAtNTUyOCw2ICs1NTMzLDggQEAKIAkJMEZFQzg0QjMxQkRB
Q0Q4ODAwODBGRjc0IC8qIGFpciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCisJCQkJMEYyQUM1NjgxRThBMEJEMTAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0
ZXJzQnlMaW5lYXJTY2FuLmNwcCAqLywKKwkJCQkwRjJBQzU2OTFFOEEwQkQxMDAwMUVFM0YgLyog
QWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaCAqLywKIAkJCQk3OTY1QzIxNDFFNUQ3
OTk2MDBCNzU5MUQgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuY3BwICov
LAogCQkJCTc5NjVDMjE1MUU1RDc5OTYwMEI3NTkxRCAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5
R3JhcGhDb2xvcmluZy5oICovLAogCQkJCTBGRUM4NTQ4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJB
bGxvY2F0ZVN0YWNrLmNwcCAqLywKQEAgLTU1NjEsNiArNTU2OCw4IEBACiAJCQkJMEY0REUxQ0Qx
QzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCAqLywKIAkJCQkyNjJEODVC
NDFDMEQ2NTBGMDA2QUNCNjEgLyogQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmNwcCAqLywK
IAkJCQkyNjJEODVCNTFDMEQ2NTBGMDA2QUNCNjEgLyogQWlyRml4UGFydGlhbFJlZ2lzdGVyU3Rh
bGxzLmggKi8sCisJCQkJMEYyQUM1NjQxRThBMEI3NjAwMDFFRTNGIC8qIEFpckZpeFNwaWxsc0Fm
dGVyVGVybWluYWxzLmNwcCAqLywKKwkJCQkwRjJBQzU2NTFFOEEwQjc2MDAwMUVFM0YgLyogQWly
Rml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCAqLywKIAkJCQkwRkVDODU1MjFCREFDREM3MDA4MEZG
NzQgLyogQWlyRnJlcXVlbnRlZEJsb2NrLmggKi8sCiAJCQkJMEZFQzg1NTMxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckdlbmVyYXRlLmNwcCAqLywKIAkJCQkwRkVDODU1NDFCREFDREM3MDA4MEZGNzQg
LyogQWlyR2VuZXJhdGUuaCAqLywKQEAgLTgxMzksNiArODE0OCw3IEBACiAJCQkJMEZFQzg1MTAx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkVDODUxMjFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0MzQyMkE2MzFDMTU4RTZEMDBFMkVCOTggLyogQjNDb25zdEZsb2F0VmFsdWUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkFDNTZCMUU4QTBCRDUwMDAxRUUzRiAvKiBBaXJBbGxv
Y2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1QjMx
QkRFRDk1NzAwODBGRjc0IC8qIEIzQ29uc3RQdHJWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYzMzhERjYxQkU5M0Q1NTAwMTNDODhGIC8qIEIzQ29uc3RyYWluZWRWYWx1ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyQzYzQjgxRTYzNDNGNzAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2NrSW5z
ZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKQEAgLTkzNjIsNiArOTM3Miw3IEBACiAJCQkJNzA5
RkI4NkExQUUzMzVDNjAwMzlEMDY5IC8qIFdlYWtTZXRDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMTQxNTAxMzMxNTRCQjEzRjAwNUQ4Qzk4IC8qIFdlYWtTZXRJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3MDlGQjg2QzFBRTMzNUM2MDAzOUQwNjkgLyogV2Vha1NldFByb3Rv
dHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQUM1NjcxRThBMEI3OTAwMDFFRTNGIC8qIEFp
ckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JFRDFE
QjU4REFEMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNDMTYxREI1OUNCMjAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5
Q29tcGlsZUVycm9yQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JF
RjFEQjU4REFEMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90b3R5cGUuaCBp
biBIZWFkZXJzICovLApAQCAtOTk4OCw3ICs5OTk5LDYgQEAKIAkJCQkwRjcyNUNBRjFDNTA2RDNC
MDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkVDODUxNTFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkVDODUxODFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQkwRkVDODVDMjFCRTE2N0EwMDA4MEZGNzQgLyogQjNIZWFwUmFuZ2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJREM2OUI5OUMxRDE1RjkxMjAwMkUzQzAwIC8qIEIzSW5m
ZXJTd2l0Y2hlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVDODVCOTFCRTE0NjJGMDA4MEZG
NzQgLyogQjNJbnNlcnRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZERjY3RDMxRDlD
NkQyQTAwMUI5ODI1IC8qIEIzS2luZC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMTU0LDYgKzEw
MTY0LDcgQEAKIAkJCQlBNzhBOTc3NjE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkJEQzE1MTUxQzVENEQwMENEODkxMCAvKiBERkdGaXh1
cFBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjAxNzdGMURDQURDMzMwMEVBNTk1MCAv
KiBERkdGbG93SW5kZXhpbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQUM1NkExRThBMEJE
MzAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGOUQzMzk2MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRjcxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0ZsdXNo
Rm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNjlDQzg4MTkzQUM2MEEwMDQ1NzU5RSAv
KiBERkdGcm96ZW5WYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMjYzLDYgKzEwMjc0LDcg
QEAKIAkJCQkyQTgzNjM4NTE4RDdEMEVFMDAwMEVCQ0MgLyogRWRlbkdDQWN0aXZpdHlDYWxsYmFj
ay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OUU0NUEyNTE4QTFCMjU5MDAyNkQ4OEYgLyogRW5j
b2RlZFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUM3MTA3RUMzNzYwMDQyN0E0
OCAvKiBFcnJvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJBQzU2NjFFOEEwQjc3MDAwMUVF
M0YgLyogQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQ3RjM5QzgxMDdFQzM3NjAwNDI3QTQ4IC8qIEVycm9yQ29uc3RydWN0b3IuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRkVCNThDMTQxODdCOEIxNjAwOThFRjBCIC8qIEVycm9ySGFuZGxpbmdTY29w
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDOTEwN0VDMzc2MDA0MjdBNDggLyogRXJy
b3JJbnN0YW5jZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrVXRpbHMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTE0LDcgKzExNCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+CiBWZWN0b3I8QmFz
aWNCbG9jayo+IGJsb2Nrc0luUHJlT3JkZXIoQmFzaWNCbG9jayogcm9vdCkKIHsKICAgICBWZWN0
b3I8QmFzaWNCbG9jayo+IHJlc3VsdDsKLSAgICBHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2Nr
KiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IHdvcmtsaXN0OworICAgIEdyYXBoTm9kZVdvcmtsaXN0
PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+IHdvcmtsaXN0OwogICAgIHdvcmts
aXN0LnB1c2gocm9vdCk7CiAgICAgd2hpbGUgKEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3Qu
cG9wKCkpIHsKICAgICAgICAgcmVzdWx0LmFwcGVuZChibG9jayk7CkBAIC0xMjgsNyArMTI4LDcg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KIFZlY3RvcjxCYXNpY0Jsb2NrKj4gYmxv
Y2tzSW5Qb3N0T3JkZXIoQmFzaWNCbG9jayogcm9vdCkKIHsKICAgICBWZWN0b3I8QmFzaWNCbG9j
ayo+IHJlc3VsdDsKLSAgICBQb3N0T3JkZXJHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwg
SW5kZXhTZXQ8QmFzaWNCbG9jaz4+IHdvcmtsaXN0OworICAgIFBvc3RPcmRlckdyYXBoTm9kZVdv
cmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+IHdvcmtsaXN0OwogICAg
IHdvcmtsaXN0LnB1c2gocm9vdCk7CiAgICAgd2hpbGUgKEdyYXBoTm9kZVdpdGhPcmRlcjxCYXNp
Y0Jsb2NrKj4gaXRlbSA9IHdvcmtsaXN0LnBvcCgpKSB7CiAgICAgICAgIHN3aXRjaCAoaXRlbS5v
cmRlcikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tXb3JrbGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrV29ya2xpc3Qu
aAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tX
b3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CiAKIGNsYXNzIEJhc2ljQmxvY2s7CiAKLXR5cGVkZWYgR3JhcGhOb2RlV29y
a2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2s+PiBCbG9ja1dvcmtsaXN0Owor
dHlwZWRlZiBHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9j
ayo+PiBCbG9ja1dvcmtsaXN0OwogCiAvLyBXaGVuIHlvdSBzYXkgQmxvY2tXaXRoPGludD4geW91
IHNob3VsZCByZWFkIGl0IGFzICJibG9jayB3aXRoIGFuIGludCIuCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB1c2luZyBCbG9ja1dpdGggPSBHcmFwaE5vZGVXaXRoPEJhc2ljQmxvY2sqLCBUPjsKQEAg
LTQ0LDEzICs0NCwxMyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBCbG9ja1dpdGggPSBH
CiAvLyBwZXJtaXRzIGZvcmNpYmx5IGVucXVldWVpbmcgdGhpbmdzIGV2ZW4gaWYgdGhlIGJsb2Nr
IGhhcyBhbHJlYWR5IGJlZW4gc2Vlbi4gSXQncyB1c2VmdWwgZm9yCiAvLyB0aGluZ3MgbGlrZSBi
dWlsZGluZyBhIHNwYW5uaW5nIHRyZWUsIGluIHdoaWNoIGNhc2UgVCAodGhlIGF1eGlsaWFyeSBw
YXlsb2FkKSB3b3VsZCBiZSB0aGUKIC8vIHN1Y2Nlc3NvciBpbmRleC4KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3JrbGlzdCA9IEV4dGVuZGVkR3JhcGhOb2RlV29y
a2xpc3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0PEJhc2ljQmxvY2s+PjsKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3JrbGlzdCA9IEV4dGVuZGVkR3JhcGhOb2Rl
V29ya2xpc3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0PEJhc2ljQmxvY2sqPj47CiAKIHR5cGVk
ZWYgR3JhcGhWaXNpdE9yZGVyIFZpc2l0T3JkZXI7CiAKIHR5cGVkZWYgR3JhcGhOb2RlV2l0aE9y
ZGVyPEJhc2ljQmxvY2sqPiBCbG9ja1dpdGhPcmRlcjsKIAotdHlwZWRlZiBQb3N0T3JkZXJHcmFw
aE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IFBvc3RPcmRl
ckJsb2NrV29ya2xpc3Q7Cit0eXBlZGVmIFBvc3RPcmRlckdyYXBoTm9kZVdvcmtsaXN0PEJhc2lj
QmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+IFBvc3RPcmRlckJsb2NrV29ya2xpc3Q7CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDRkcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDRkcu
aAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ0ZHLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzksOCArMzksOCBAQCBjbGFzcyBDRkcgewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIHR5cGVkZWYgQmFzaWNCbG9jayogTm9kZTsKLSAg
ICB0eXBlZGVmIEluZGV4U2V0PEJhc2ljQmxvY2s+IFNldDsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB1c2luZyBNYXAgPSBJbmRleE1hcDxCYXNpY0Jsb2NrLCBUPjsKKyAgICB0eXBlZGVmIElu
ZGV4U2V0PEJhc2ljQmxvY2sqPiBTZXQ7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcg
TWFwID0gSW5kZXhNYXA8QmFzaWNCbG9jayosIFQ+OwogICAgIHR5cGVkZWYgVmVjdG9yPEJhc2lj
QmxvY2sqLCA0PiBMaXN0OwogCiAgICAgQ0ZHKFByb2NlZHVyZSYgcHJvYykKQEAgLTUxLDcgKzUx
LDcgQEAgcHVibGljOgogICAgIE5vZGUgcm9vdCgpIHsgcmV0dXJuIG1fcHJvY1swXTsgfQogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBNYXA8VD4gbmV3TWFwKCkgeyByZXR1cm4gSW5k
ZXhNYXA8SlNDOjpCMzo6QmFzaWNCbG9jaywgVD4obV9wcm9jLnNpemUoKSk7IH0KKyAgICBNYXA8
VD4gbmV3TWFwKCkgeyByZXR1cm4gSW5kZXhNYXA8SlNDOjpCMzo6QmFzaWNCbG9jayosIFQ+KG1f
cHJvYy5zaXplKCkpOyB9CiAKICAgICBTdWNjZXNzb3JDb2xsZWN0aW9uPEJhc2ljQmxvY2ssIEJh
c2ljQmxvY2s6OlN1Y2Nlc3Nvckxpc3Q+IHN1Y2Nlc3NvcnMoTm9kZSBub2RlKSB7IHJldHVybiBu
b2RlLT5zdWNjZXNzb3JCbG9ja3MoKTsgfQogICAgIEJhc2ljQmxvY2s6OlByZWRlY2Vzc29yTGlz
dCYgcHJlZGVjZXNzb3JzKE5vZGUgbm9kZSkgeyByZXR1cm4gbm9kZS0+cHJlZGVjZXNzb3JzKCk7
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0R1cGxpY2F0ZVRhaWxzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNEdXBsaWNhdGVUYWlscy5j
cHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0R1cGxp
Y2F0ZVRhaWxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgsNyBAQCBwdWJsaWM6CiAK
ICAgICAgICAgbV9wcm9jLnJlc2V0VmFsdWVPd25lcnMoKTsKIAotICAgICAgICBJbmRleFNldDxC
YXNpY0Jsb2NrPiBjYW5kaWRhdGVzOworICAgICAgICBJbmRleFNldDxCYXNpY0Jsb2NrKj4gY2Fu
ZGlkYXRlczsKIAogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jKSB7CiAg
ICAgICAgICAgICBpZiAoYmxvY2stPnNpemUoKSA+IG1fbWF4U2l6ZSkKQEAgLTgyLDcgKzgyLDcg
QEAgcHVibGljOgogICAgICAgICB9CiAKICAgICAgICAgLy8gQ29sbGVjdCB0aGUgc2V0IG9mIHZh
bHVlcyB0aGF0IG11c3QgYmUgZGUtU1NBJ2QuCi0gICAgICAgIEluZGV4U2V0PFZhbHVlPiB2YWx1
ZXNUb0RlbW90ZTsKKyAgICAgICAgSW5kZXhTZXQ8VmFsdWUqPiB2YWx1ZXNUb0RlbW90ZTsKICAg
ICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvYykgewogICAgICAgICAgICAgZm9y
IChWYWx1ZSogdmFsdWUgOiAqYmxvY2spIHsKICAgICAgICAgICAgICAgICBpZiAodmFsdWUtPm9w
Y29kZSgpID09IFBoaSAmJiBjYW5kaWRhdGVzLmNvbnRhaW5zKGJsb2NrKSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVDb21tb25T
dWJleHByZXNzaW9ucy5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjgyLDcgKzY4Miw3IEBAIHByaXZhdGU6CiAgICAgRG9taW5hdG9ycyYgbV9kb21pbmF0
b3JzOwogICAgIFB1cmVDU0UgbV9wdXJlQ1NFOwogICAgIAotICAgIEluZGV4TWFwPEJhc2ljQmxv
Y2ssIEltcHVyZUJsb2NrRGF0YT4gbV9pbXB1cmVCbG9ja0RhdGE7CisgICAgSW5kZXhNYXA8QmFz
aWNCbG9jayosIEltcHVyZUJsb2NrRGF0YT4gbV9pbXB1cmVCbG9ja0RhdGE7CiAKICAgICBJbXB1
cmVCbG9ja0RhdGEgbV9kYXRhOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNG
aXhTU0EuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZpeFNT
QS5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Zp
eFNTQS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgbmFtZXNwYWNlIHsKIGNv
bnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKLXZv
aWQgZGVtb3RlVmFsdWVzKFByb2NlZHVyZSYgcHJvYywgY29uc3QgSW5kZXhTZXQ8VmFsdWU+JiB2
YWx1ZXMpCit2b2lkIGRlbW90ZVZhbHVlcyhQcm9jZWR1cmUmIHByb2MsIGNvbnN0IEluZGV4U2V0
PFZhbHVlKj4mIHZhbHVlcykKIHsKICAgICBIYXNoTWFwPFZhbHVlKiwgVmFyaWFibGUqPiBtYXA7
CiAgICAgSGFzaE1hcDxWYWx1ZSosIFZhcmlhYmxlKj4gcGhpTWFwOwpAQCAtMTIxLDcgKzEyMSw3
IEBAIGJvb2wgZml4U1NBKFByb2NlZHVyZSYgcHJvYykKICAgICAvLyBKdXN0IGZvciBzYW5pdHks
IHJlbW92ZSBhbnkgdW51c2VkIHZhcmlhYmxlcyBmaXJzdC4gSXQncyB1bmxpa2VseSB0aGF0IHRo
aXMgY29kZSBoYXMgYW55CiAgICAgLy8gYnVncyBoYXZpbmcgdG8gZG8gd2l0aCBkZWFkIHZhcmlh
YmxlcywgYnV0IGl0IHdvdWxkIGJlIHNpbGx5IHRvIGhhdmUgdG8gZml4IHN1Y2ggYSBidWcgaWYK
ICAgICAvLyBpdCBkaWQgYXJpc2UuCi0gICAgSW5kZXhTZXQ8VmFyaWFibGU+IGxpdmVWYXJpYWJs
ZXM7CisgICAgSW5kZXhTZXQ8VmFyaWFibGUqPiBsaXZlVmFyaWFibGVzOwogICAgIGZvciAoVmFs
dWUqIHZhbHVlIDogcHJvYy52YWx1ZXMoKSkgewogICAgICAgICBpZiAoVmFyaWFibGVWYWx1ZSog
dmFyaWFibGVWYWx1ZSA9IHZhbHVlLT5hczxWYXJpYWJsZVZhbHVlPigpKQogICAgICAgICAgICAg
bGl2ZVZhcmlhYmxlcy5hZGQodmFyaWFibGVWYWx1ZS0+dmFyaWFibGUoKSk7CkBAIC0xNDUsNyAr
MTQ1LDcgQEAgYm9vbCBmaXhTU0EoUHJvY2VkdXJlJiBwcm9jKQogCiAgICAgLy8gQ3JlYXRlIGEg
U1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUgKCJjYWxjVmFyIikgZm9yIGV2ZXJ5IHZhcmlhYmxlLgog
ICAgIFZlY3RvcjxWYXJpYWJsZSo+IGNhbGNWYXJUb1ZhcmlhYmxlOwotICAgIEluZGV4TWFwPFZh
cmlhYmxlLCBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSo+IHZhcmlhYmxlVG9DYWxjVmFyKHByb2Mu
dmFyaWFibGVzKCkuc2l6ZSgpKTsKKyAgICBJbmRleE1hcDxWYXJpYWJsZSosIFNTQUNhbGN1bGF0
b3I6OlZhcmlhYmxlKj4gdmFyaWFibGVUb0NhbGNWYXIocHJvYy52YXJpYWJsZXMoKS5zaXplKCkp
OwogCiAgICAgZm9yIChWYXJpYWJsZSogdmFyaWFibGUgOiBwcm9jLnZhcmlhYmxlcygpKSB7CiAg
ICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiBjYWxjVmFyID0gc3NhLm5ld1ZhcmlhYmxl
KCk7CkBAIC0xODUsNyArMTg1LDcgQEAgYm9vbCBmaXhTU0EoUHJvY2VkdXJlJiBwcm9jKQogCiAg
ICAgLy8gTm93IHBlcmZvcm0gdGhlIGNvbnZlcnNpb24uCiAgICAgSW5zZXJ0aW9uU2V0IGluc2Vy
dGlvblNldChwcm9jKTsKLSAgICBJbmRleE1hcDxWYXJpYWJsZSwgVmFsdWUqPiBtYXBwaW5nKHBy
b2MudmFyaWFibGVzKCkuc2l6ZSgpKTsKKyAgICBJbmRleE1hcDxWYXJpYWJsZSosIFZhbHVlKj4g
bWFwcGluZyhwcm9jLnZhcmlhYmxlcygpLnNpemUoKSk7CiAgICAgZm9yIChCYXNpY0Jsb2NrKiBi
bG9jayA6IHByb2MuYmxvY2tzSW5QcmVPcmRlcigpKSB7CiAgICAgICAgIG1hcHBpbmcuY2xlYXIo
KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJhbmdlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNIZWFwUmFuZ2UuY3BwCShyZXZp
c2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNIZWFwUmFuZ2UuY3Bw
CShub25leGlzdGVudCkKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQjNI
ZWFwUmFuZ2UuaCIKLQotI2lmIEVOQUJMRShCM19KSVQpCi0KLW5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgewotCi12b2lkIEhlYXBSYW5nZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAotewotICAgIGlmICgqdGhpcyA9PSBIZWFwUmFuZ2UoKSkgewotICAgICAgICBvdXQucHJpbnQo
IkJvdHRvbSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICgqdGhpcyA9PSB0b3Ao
KSkgewotICAgICAgICBvdXQucHJpbnQoIlRvcCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIG91dC5wcmludChtX2JlZ2luLCAiLi4uIiwgbV9lbmQpOwotfQotCi19IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKLQotI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCi0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNIZWFwUmFuZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsOTAg
KzI3LDE1IEBACiAKICNpZiBFTkFCTEUoQjNfSklUKQogCi0jaW5jbHVkZSA8bGltaXRzLmg+Ci0j
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4K
KyNpbmNsdWRlIDx3dGYvUmFuZ2UuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CiAKIC8vIEFsaWFzIGFuYWx5c2lzIGluIEIzIGlzIGRvbmUgYnkgY2hlY2tpbmcgaWYgdHdvIGlu
dGVnZXIgcmFuZ2VzIG92ZXJsYXAuIFRoaXMgaXMgcG93ZXJmdWwgZW5vdWdoCiAvLyB0byBiZSB1
c2VkIGZvciBUQkFBLXN0eWxlIGFsaWFzIGFuYWx5c2lzIHVzZWQgYnkgdGhlIERGRywgRlRMLCBh
bmQgTExWTTogeW91IGp1c3QgdHVybiBlYWNoIG5vZGUKIC8vIGluIHRoZSB0cmVlIG9mIGFic3Ry
YWN0IGhlYXBzIGludG8gYSBwcmUvcG9zdCByYW5nZS4KLS8vCi0vLyBOb3RlIHRoYXQgdGhlICdi
ZWdpbicgaXMgaW5jbHVzaXZlLCB3aGlsZSB0aGUgJ2VuZCcgaXMgZXhjbHVzaXZlLiBUaGVzZSB0
d28gcmFuZ2VzIGFyZSBub24tCi0vLyBvdmVybGFwcGluZzoKLS8vCi0vLyAgICAgcmFuZ2VBID0g
MC4uLjgKLS8vICAgICByYW5nZUIgPSA4Li4uMTYKLQotY2xhc3MgSGVhcFJhbmdlIHsKLXB1Ymxp
YzoKLSAgICB0eXBlZGVmIHVuc2lnbmVkIFR5cGU7Ci0gICAgCi0gICAgSGVhcFJhbmdlKCkKLSAg
ICAgICAgOiBtX2JlZ2luKDApCi0gICAgICAgICwgbV9lbmQoMCkKLSAgICB7Ci0gICAgfQotCi0g
ICAgZXhwbGljaXQgSGVhcFJhbmdlKHVuc2lnbmVkIHZhbHVlKQotICAgICAgICA6IG1fYmVnaW4o
dmFsdWUpCi0gICAgICAgICwgbV9lbmQodmFsdWUgKyAxKQotICAgIHsKLSAgICAgICAgQVNTRVJU
KG1fZW5kID49IG1fYmVnaW4pOwotICAgIH0KLQotICAgIEhlYXBSYW5nZSh1bnNpZ25lZCBiZWdp
biwgdW5zaWduZWQgZW5kKQotICAgICAgICA6IG1fYmVnaW4oYmVnaW4pCi0gICAgICAgICwgbV9l
bmQoZW5kKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fZW5kID49IG1fYmVnaW4pOwotICAgICAg
ICBpZiAobV9iZWdpbiA9PSBtX2VuZCkgewotICAgICAgICAgICAgLy8gQ2Fub25pY2FsaXplIGVt
cHR5IHJhbmdlcy4KLSAgICAgICAgICAgIG1fYmVnaW4gPSAwOwotICAgICAgICAgICAgbV9lbmQg
PSAwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIEhlYXBSYW5nZSB0b3AoKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIEhlYXBSYW5nZSgwLCBVSU5UX01BWCk7Ci0gICAgfQotCi0gICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IEhlYXBSYW5nZSYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAg
ICAgICByZXR1cm4gbV9iZWdpbiA9PSBvdGhlci5tX2JlZ2luCi0gICAgICAgICAgICAmJiBtX2Vu
ZCA9PSBvdGhlci5tX2VuZDsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgSGVh
cFJhbmdlJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAhKCp0aGlzID09IG90
aGVyKTsKLSAgICB9Ci0gICAgCi0gICAgSGVhcFJhbmdlIG9wZXJhdG9yfChjb25zdCBIZWFwUmFu
Z2UmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIEhlYXBSYW5nZSgKLSAgICAg
ICAgICAgIHN0ZDo6bWluKG1fYmVnaW4sIG90aGVyLm1fYmVnaW4pLAotICAgICAgICAgICAgc3Rk
OjptYXgobV9lbmQsIG90aGVyLm1fZW5kKSk7Ci0gICAgfQotICAgIAotICAgIGV4cGxpY2l0IG9w
ZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX2JlZ2luICE9IG1fZW5kOyB9Ci0KLSAgICB1
bnNpZ25lZCBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fYmVnaW47IH0KLSAgICB1bnNpZ25lZCBl
bmQoKSBjb25zdCB7IHJldHVybiBtX2VuZDsgfQotCi0gICAgYm9vbCBvdmVybGFwcyhjb25zdCBI
ZWFwUmFuZ2UmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6cmFuZ2Vz
T3ZlcmxhcChtX2JlZ2luLCBtX2VuZCwgb3RoZXIubV9iZWdpbiwgb3RoZXIubV9lbmQpOwotICAg
IH0KLQotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdDsKLQotcHJpdmF0ZToKLSAgICB1bnNpZ25lZCBtX2JlZ2luOwotICAgIHVuc2lnbmVkIG1f
ZW5kOwotfTsKKwordHlwZWRlZiBSYW5nZTx1bnNpZ25lZD4gSGVhcFJhbmdlOwogCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93
ZXJUb0Fpci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93
ZXJUb0Fpci5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0xvd2VyVG9BaXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzc5LDEwICszMzc5LDEwIEBA
IHByaXZhdGU6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQog
ICAgIAotICAgIEluZGV4U2V0PFZhbHVlPiBtX2xvY2tlZDsgLy8gVGhlc2UgYXJlIHZhbHVlcyB0
aGF0IHdpbGwgaGF2ZSBubyBUbXAgaW4gQWlyLgotICAgIEluZGV4TWFwPFZhbHVlLCBUbXA+IG1f
dmFsdWVUb1RtcDsgLy8gVGhlc2UgYXJlIHZhbHVlcyB0aGF0IG11c3QgaGF2ZSBhIFRtcCBpbiBB
aXIuIFdlIHNheSB0aGF0IGEgVmFsdWUqIHdpdGggYSBub24tbnVsbCBUbXAgaXMgInBpbm5lZCIu
Ci0gICAgSW5kZXhNYXA8VmFsdWUsIFRtcD4gbV9waGlUb1RtcDsgLy8gRWFjaCBQaGkgZ2V0cyBp
dHMgb3duIFRtcC4KLSAgICBJbmRleE1hcDxCMzo6QmFzaWNCbG9jaywgQWlyOjpCYXNpY0Jsb2Nr
Kj4gbV9ibG9ja1RvQmxvY2s7CisgICAgSW5kZXhTZXQ8VmFsdWUqPiBtX2xvY2tlZDsgLy8gVGhl
c2UgYXJlIHZhbHVlcyB0aGF0IHdpbGwgaGF2ZSBubyBUbXAgaW4gQWlyLgorICAgIEluZGV4TWFw
PFZhbHVlKiwgVG1wPiBtX3ZhbHVlVG9UbXA7IC8vIFRoZXNlIGFyZSB2YWx1ZXMgdGhhdCBtdXN0
IGhhdmUgYSBUbXAgaW4gQWlyLiBXZSBzYXkgdGhhdCBhIFZhbHVlKiB3aXRoIGEgbm9uLW51bGwg
VG1wIGlzICJwaW5uZWQiLgorICAgIEluZGV4TWFwPFZhbHVlKiwgVG1wPiBtX3BoaVRvVG1wOyAv
LyBFYWNoIFBoaSBnZXRzIGl0cyBvd24gVG1wLgorICAgIEluZGV4TWFwPEIzOjpCYXNpY0Jsb2Nr
KiwgQWlyOjpCYXNpY0Jsb2NrKj4gbV9ibG9ja1RvQmxvY2s7CiAgICAgSGFzaE1hcDxCMzo6U3Rh
Y2tTbG90KiwgQWlyOjpTdGFja1Nsb3QqPiBtX3N0YWNrVG9TdGFjazsKICAgICBIYXNoTWFwPFZh
cmlhYmxlKiwgVG1wPiBtX3ZhcmlhYmxlVG9UbXA7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM01vdmVDb25zdGFudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM01vdmVDb25zdGFudHMuY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNb3ZlQ29uc3RhbnRzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzMsNyArNzMsNyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgRG9taW5hdG9ycyYgZG9t
aW5hdG9ycyA9IG1fcHJvYy5kb21pbmF0b3JzKCk7CiAgICAgICAgIEhhc2hNYXA8VmFsdWVLZXks
IFZhbHVlKj4gdmFsdWVGb3JDb25zdGFudDsKLSAgICAgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywg
VmVjdG9yPFZhbHVlKj4+IG1hdGVyaWFsaXphdGlvbnMobV9wcm9jLnNpemUoKSk7CisgICAgICAg
IEluZGV4TWFwPEJhc2ljQmxvY2sqLCBWZWN0b3I8VmFsdWUqPj4gbWF0ZXJpYWxpemF0aW9ucyht
X3Byb2Muc2l6ZSgpKTsKIAogICAgICAgICAvLyBXZSBkZXRlcm1pbmUgd2hlcmUgdGhpbmdzIGdl
dCBtYXRlcmlhbGl6ZWQgYmFzZWQgb24gd2hlcmUgdGhleSBhcmUgdXNlZC4KICAgICAgICAgZm9y
IChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvYykgewpAQCAtMjc0LDcgKzI3NCw3IEBAIHByaXZh
dGU6CiAgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2NvbnN0VGFibGUpCiAgICAgICAgICAg
ICBtX2RhdGFTZWN0aW9uW2VudHJ5LnZhbHVlXSA9IGVudHJ5LmtleS52YWx1ZSgpOwogCi0gICAg
ICAgIEluZGV4U2V0PFZhbHVlPiBvZmZMaW1pdHM7CisgICAgICAgIEluZGV4U2V0PFZhbHVlKj4g
b2ZmTGltaXRzOwogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jKSB7CiAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHZhbHVlSW5kZXggPSAwOyB2YWx1ZUluZGV4IDwgYmxv
Y2stPnNpemUoKTsgKyt2YWx1ZUluZGV4KSB7CiAgICAgICAgICAgICAgICAgU3RhY2ttYXBWYWx1
ZSogdmFsdWUgPSBibG9jay0+YXQodmFsdWVJbmRleCktPmFzPFN0YWNrbWFwVmFsdWU+KCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQaGlDaGlsZHJlbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoaUNoaWxkcmVuLmgJKHJldmlzaW9uIDIx
NDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoaUNoaWxkcmVuLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE2OCw3ICsxNjgsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgVmVjdG9yPFZh
bHVlKiwgOD4mIHBoaXMoKSBjb25zdCB7IHJldHVybiBtX3BoaXM7IH0KIAogcHJpdmF0ZToKLSAg
ICBJbmRleE1hcDxWYWx1ZSwgVmVjdG9yPFVwc2lsb25WYWx1ZSo+PiBtX3Vwc2lsb25zOworICAg
IEluZGV4TWFwPFZhbHVlKiwgVmVjdG9yPFVwc2lsb25WYWx1ZSo+PiBtX3Vwc2lsb25zOwogICAg
IFZlY3RvcjxWYWx1ZSosIDg+IG1fcGhpczsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg2LDcgKzE4
Niw3IEBAIHZvaWQgUHJvY2VkdXJlOjppbnZhbGlkYXRlQ0ZHKCkKIAogdm9pZCBQcm9jZWR1cmU6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKLSAgICBJbmRleFNldDxWYWx1ZT4gdmFs
dWVzSW5CbG9ja3M7CisgICAgSW5kZXhTZXQ8VmFsdWUqPiB2YWx1ZXNJbkJsb2NrczsKICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogKnRoaXMpIHsKICAgICAgICAgb3V0LnByaW50KGRlZXBE
dW1wKCp0aGlzLCBibG9jaykpOwogICAgICAgICB2YWx1ZXNJbkJsb2Nrcy5hZGRBbGwoKmJsb2Nr
KTsKQEAgLTI0NSw3ICsyNDUsNyBAQCB2b2lkIFByb2NlZHVyZTo6ZGVsZXRlVmFsdWUoVmFsdWUq
IHZhbHVlCiAKIHZvaWQgUHJvY2VkdXJlOjpkZWxldGVPcnBoYW5zKCkKIHsKLSAgICBJbmRleFNl
dDxWYWx1ZT4gdmFsdWVzSW5CbG9ja3M7CisgICAgSW5kZXhTZXQ8VmFsdWUqPiB2YWx1ZXNJbkJs
b2NrczsKICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogKnRoaXMpCiAgICAgICAgIHZhbHVl
c0luQmxvY2tzLmFkZEFsbCgqYmxvY2spOwogCkBAIC0zMzMsNyArMzMzLDcgQEAgVmFsdWUqIFBy
b2NlZHVyZTo6YWRkVmFsdWVJbXBsKFZhbHVlKiB2YQogCiB2b2lkIFByb2NlZHVyZTo6c2V0Qmxv
Y2tPcmRlckltcGwoVmVjdG9yPEJhc2ljQmxvY2sqPiYgYmxvY2tzKQogewotICAgIEluZGV4U2V0
PEJhc2ljQmxvY2s+IGJsb2Nrc1NldDsKKyAgICBJbmRleFNldDxCYXNpY0Jsb2NrKj4gYmxvY2tz
U2V0OwogICAgIGJsb2Nrc1NldC5hZGRBbGwoYmxvY2tzKTsKIAogICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiAqdGhpcykgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVk
dWNlRG91YmxlVG9GbG9hdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzUmVkdWNlRG91YmxlVG9GbG9hdC5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZURvdWJsZVRvRmxvYXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MjQsMTggKzQyNCwxOCBAQCBwcml2YXRlOgogCiAgICAgLy8gU2V0IG9mIGFsbCB0
aGUgRG91YmxlIHZhbHVlcyB0aGF0IGFyZSBhY3R1YWxseSB1c2VkIGFzIERvdWJsZS4KICAgICAv
LyBDb252ZXJ0aW5nIGFueSBvZiB0aGVtIHRvIEZsb2F0IHdvdWxkIGxvc2UgcHJlY2lzaW9uLgot
ICAgIEluZGV4U2V0PFZhbHVlPiBtX3ZhbHVlc1VzZWRBc0RvdWJsZTsKKyAgICBJbmRleFNldDxW
YWx1ZSo+IG1fdmFsdWVzVXNlZEFzRG91YmxlOwogCiAgICAgLy8gU2V0IG9mIGFsbCB0aGUgUGhp
IG9mIHR5cGUgRG91YmxlIHRoYXQgcmVhbGx5IGNvbnRhaW5zIGEgRG91YmxlLgogICAgIC8vIEFu
eSBEb3VibGUgUGhpIG5vdCBpbiB0aGUgc2V0IGNhbiBiZSBjb252ZXJ0ZWQgdG8gRmxvYXQgd2l0
aG91dCBsb3NpbmcgcHJlY2lzaW9uLgotICAgIEluZGV4U2V0PFZhbHVlPiBtX3BoaXNDb250YWlu
aW5nRG91YmxlOworICAgIEluZGV4U2V0PFZhbHVlKj4gbV9waGlzQ29udGFpbmluZ0RvdWJsZTsK
IAogICAgIC8vIEFueSB2YWx1ZSB0aGF0IHdhcyBjb252ZXJ0ZWQgZnJvbSBwcm9kdWNpbmcgYSBE
b3VibGUgdG8gcHJvZHVjaW5nIGEgRmxvYXQuCiAgICAgLy8gVGhpcyBzZXQgZG9lcyBub3QgaW5j
bHVkZSBQaGktVXBzaWxvbnMuCi0gICAgSW5kZXhTZXQ8VmFsdWU+IG1fY29udmVydGVkVmFsdWU7
CisgICAgSW5kZXhTZXQ8VmFsdWUqPiBtX2NvbnZlcnRlZFZhbHVlOwogCiAgICAgLy8gQW55IHZh
bHVlIHRoYXQgcHJldmlvdXNseSBwcm9kdWNlZCBEb3VibGUgYW5kIG5vdyBwcm9kdWNlIEZsb2F0
LgotICAgIEluZGV4U2V0PFZhbHVlPiBtX2NvbnZlcnRlZFBoaXM7CisgICAgSW5kZXhTZXQ8VmFs
dWUqPiBtX2NvbnZlcnRlZFBoaXM7CiB9OwogCiB2b2lkIHByaW50R3JhcGhJZkNvbnZlcnRpbmco
UHJvY2VkdXJlJiBwcm9jZWR1cmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNS
ZWR1Y2VTdHJlbmd0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzUmVkdWNlU3RyZW5ndGguY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzOTIs
NyArMjM5Miw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGtpbGxEZWFkQ29kZSgpCiAgICAgewot
ICAgICAgICBHcmFwaE5vZGVXb3JrbGlzdDxWYWx1ZSosIEluZGV4U2V0PFZhbHVlPj4gd29ya2xp
c3Q7CisgICAgICAgIEdyYXBoTm9kZVdvcmtsaXN0PFZhbHVlKiwgSW5kZXhTZXQ8VmFsdWUqPj4g
d29ya2xpc3Q7CiAgICAgICAgIFZlY3RvcjxVcHNpbG9uVmFsdWUqLCA2ND4gdXBzaWxvbnM7CiAg
ICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2MpIHsKICAgICAgICAgICAgIGZv
ciAoVmFsdWUqIHZhbHVlIDogKmJsb2NrKSB7CkBAIC0yNDI5LDcgKzI0MjksNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgSW5kZXhTZXQ8
VmFyaWFibGU+IGxpdmVWYXJpYWJsZXM7CisgICAgICAgIEluZGV4U2V0PFZhcmlhYmxlKj4gbGl2
ZVZhcmlhYmxlczsKICAgICAgICAgCiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBt
X3Byb2MpIHsKICAgICAgICAgICAgIHNpemVfdCBzb3VyY2VJbmRleCA9IDA7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTU0FDYWxjdWxhdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU1NBQ2FsY3VsYXRvci5oCShyZXZpc2lvbiAyMTQ0Mjcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTU0FDYWxjdWxhdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMTU2LDcgKzE1Niw3IEBAIHByaXZhdGU6CiAgICAgICAgIFZlY3RvcjxEZWYqPiBtX3Bo
aXM7CiAgICAgfTsKICAgICAKLSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBCbG9ja0RhdGE+IG1f
ZGF0YTsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgQmxvY2tEYXRhPiBtX2RhdGE7CiAKICAg
ICBEb21pbmF0b3JzKiBtX2RvbWluYXRvcnMgeyBudWxscHRyIH07CiAgICAgUHJvY2VkdXJlJiBt
X3Byb2M7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVc2VDb3VudHMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVc2VDb3VudHMuaAkocmV2aXNp
b24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXNlQ291bnRzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC00OCw3ICs0OCw3IEBAIHByaXZhdGU6CiAgICAgICAgIHVuc2lnbmVk
IG51bVVzaW5nSW5zdHJ1Y3Rpb25zIHsgMCB9OwogICAgIH07CiAgICAgCi0gICAgSW5kZXhNYXA8
VmFsdWUsIENvdW50cz4gbV9jb3VudHM7CisgICAgSW5kZXhNYXA8VmFsdWUqLCBDb3VudHM+IG1f
Y291bnRzOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRl
UmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmNwcAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmlu
Zy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoQjNfSklU
KQogCiAjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckZpeFNwaWxsc0FmdGVyVGVy
bWluYWxzLmgiCiAjaW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0LmgiCiAjaW5jbHVkZSAiQWlySW5z
dElubGluZXMuaCIKICNpbmNsdWRlICJBaXJMaXZlbmVzcy5oIgpAQCAtMTU4NSw2ICsxNTg2LDkg
QEAgcHJvdGVjdGVkOgogICAgICAgICBtX2NvYWxlc2NpbmdDYW5kaWRhdGVzLmNsZWFyKCk7CiAg
ICAgICAgIG1fd29ya2xpc3RNb3Zlcy5jbGVhcigpOwogCisgICAgICAgIC8vIEZJWE1FOiBJdCBz
ZWVtcyBsaWtlIHdlIGRvbid0IG5lZWQgdG8gcmVjb21wdXRlIGxpdmVuZXNzLiBXZSBqdXN0IG5l
ZWQgdG8gdXBkYXRlIGl0cyBkYXRhCisgICAgICAgIC8vIHN0cnVjdHVyZXMgc28gdGhhdCBpdCBr
bm93cyB0aGF0IHRoZSBuZXdseSBpbnRyb2R1Y2VkIHRlbXBvcmFyaWVzIGFyZSBub3QgbGl2ZSBh
dCBhbnkgYmFzaWMKKyAgICAgICAgLy8gYmxvY2sgYm91bmRhcnkuIFRoaXMgc2hvdWxkIHRyaXZp
YWxseSBiZSB0cnVlIGZvciBub3cuCiAgICAgICAgIFRtcExpdmVuZXNzPGJhbms+IGxpdmVuZXNz
KG1fY29kZSk7CiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsKICAg
ICAgICAgICAgIHR5cGVuYW1lIFRtcExpdmVuZXNzPGJhbms+OjpMb2NhbENhbGMgbG9jYWxDYWxj
KGxpdmVuZXNzLCBibG9jayk7CkBAIC0xNzk4LDcgKzE4MDIsNyBAQCBwdWJsaWM6CiAgICAgICAg
IG1fbnVtSXRlcmF0aW9ucyA9IDA7CiAgICAgICAgIGFsbG9jYXRlT25CYW5rPEZQPigpOwogCi0g
ICAgICAgIGZpeFNwaWxsc0FmdGVyVGVybWluYWxzKCk7CisgICAgICAgIGZpeFNwaWxsc0FmdGVy
VGVybWluYWxzKG1fY29kZSk7CiAKICAgICAgICAgaWYgKHJlcG9ydFN0YXRzKQogICAgICAgICAg
ICAgZGF0YUxvZygiTnVtIGl0ZXJhdGlvbnMgPSAiLCBtX251bUl0ZXJhdGlvbnMsICJcbiIpOwpA
QCAtMTk1NCw3ICsxOTU4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgICAgICBpbnN0LmZvckVhY2hUbXBGYXN0KFsmXSAoVG1wJiB0bXApIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHRtcC5pc1JlZygpIHx8IHRtcC5pc0dQKCkgPT0gKGJhbmsgIT0gR1Ap
KQorICAgICAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkgfHwgdG1wLmJhbmsoKSAhPSBi
YW5rKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICAgICAg
ICAgIFRtcCBhbGlhc1RtcCA9IGFsbG9jYXRvci5nZXRBbGlhcyh0bXApOwpAQCAtMjE1Myw2ICsy
MTU3LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgICAgICAgICB0bXAgPSBtX2NvZGUubmV3
VG1wKGJhbmspOworICAgICAgICAgICAgICAgICAgICB1bnNwaWxsYWJsZVRtcHMuYWRkKEFic29s
dXRlVG1wTWFwcGVyPGJhbms+OjphYnNvbHV0ZUluZGV4KHRtcCkpOworICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT0gQXJnOjpTY3JhdGNoKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgICAgICAgICAgICAgIFdpZHRo
IHNwaWxsV2lkdGggPSBtX3RtcFdpZHRoLnJlcXVpcmVkV2lkdGgodG1wKTsKICAgICAgICAgICAg
ICAgICAgICAgT3Bjb2RlIG1vdmUgPSBPb3BzOwogICAgICAgICAgICAgICAgICAgICBzd2l0Y2gg
KHN0YWNrU2xvdE1pbmltdW1XaWR0aChzcGlsbFdpZHRoKSkgewpAQCAtMjE2NywxMSArMjE3Nyw4
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIHRtcCA9IG1fY29kZS5uZXdUbXAoYmFu
ayk7Ci0gICAgICAgICAgICAgICAgICAgIHVuc3BpbGxhYmxlVG1wcy5hZGQoQWJzb2x1dGVUbXBN
YXBwZXI8YmFuaz46OmFic29sdXRlSW5kZXgodG1wKSk7Ci0KICAgICAgICAgICAgICAgICAgICAg
QXJnIGFyZyA9IEFyZzo6c3RhY2soc3RhY2tTbG90RW50cnktPnZhbHVlKTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKEFyZzo6aXNBbnlVc2Uocm9sZSkgJiYgcm9sZSAhPSBBcmc6OlNjcmF0Y2gp
CisgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzQW55VXNlKHJvbGUpKQogICAgICAgICAg
ICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydChpbnN0SW5kZXgsIG1vdmUsIGluc3Qu
b3JpZ2luLCBhcmcsIHRtcCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzQW55RGVm
KHJvbGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydChpbnN0
SW5kZXggKyAxLCBtb3ZlLCBpbnN0Lm9yaWdpbiwgdG1wLCBhcmcpOwpAQCAtMjE4Nyw2NiArMjE5
NCw2IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAKLSAgICB2b2lkIGZpeFNwaWxsc0Fm
dGVyVGVybWluYWxzKCkKLSAgICB7Ci0gICAgICAgIC8vIEJlY2F1c2UgdGhlcmUgbWF5IGJlIHRl
cm1pbmFscyB0aGF0IHByb2R1Y2UgdmFsdWVzLCBJUkMgbWF5Ci0gICAgICAgIC8vIHdhbnQgdG8g
c3BpbGwgdGhvc2UgdGVybWluYWxzLiBJdCdsbCBoYXBwZW4gdG8gc3BpbGwgaXQgYWZ0ZXIKLSAg
ICAgICAgLy8gdGhlIHRlcm1pbmFsLiBJZiB3ZSBsZWZ0IHRoZSBncmFwaCBpbiB0aGlzIHN0YXRl
LCBpdCdkIGJlIGludmFsaWQKLSAgICAgICAgLy8gYmVjYXVzZSBhIHRlcm1pbmFsIG11c3QgYmUg
dGhlIGxhc3QgaW5zdHJ1Y3Rpb24gaW4gYSBibG9jay4KLSAgICAgICAgLy8gV2UgZml4IHRoYXQg
aGVyZS4KLQotICAgICAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KG1fY29kZSk7Ci0KLSAg
ICAgICAgYm9vbCBhZGRlZEJsb2NrcyA9IGZhbHNlOwotCi0gICAgICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBtX2NvZGUpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHRlcm1pbmFsSW5kZXgg
PSBibG9jay0+c2l6ZSgpOwotICAgICAgICAgICAgYm9vbCBmb3VuZFRlcm1pbmFsID0gZmFsc2U7
Ci0gICAgICAgICAgICB3aGlsZSAodGVybWluYWxJbmRleC0tKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKGJsb2NrLT5hdCh0ZXJtaW5hbEluZGV4KS5pc1Rlcm1pbmFsKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgZm91bmRUZXJtaW5hbCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEFTU0VSVF9V
TlVTRUQoZm91bmRUZXJtaW5hbCwgZm91bmRUZXJtaW5hbCk7Ci0KLSAgICAgICAgICAgIGlmICh0
ZXJtaW5hbEluZGV4ID09IGJsb2NrLT5zaXplKCkgLSAxKQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgICAgICAvLyBUaGVyZSBtdXN0IGJlIGluc3RydWN0aW9ucyBhZnRlciB0
aGUgdGVybWluYWwgYmVjYXVzZSBpdCdzIG5vdCB0aGUgbGFzdCBpbnN0cnVjdGlvbi4KLSAgICAg
ICAgICAgIEFTU0VSVCh0ZXJtaW5hbEluZGV4IDwgYmxvY2stPnNpemUoKSAtIDEpOwotICAgICAg
ICAgICAgVmVjdG9yPEluc3QsIDE+IGluc3RzVG9Nb3ZlOwotICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gdGVybWluYWxJbmRleCArIDE7IGkgPCBibG9jay0+c2l6ZSgpOyBpKyspCi0gICAg
ICAgICAgICAgICAgaW5zdHNUb01vdmUuYXBwZW5kKGJsb2NrLT5hdChpKSk7Ci0gICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChpbnN0c1RvTW92ZS5zaXplKCkpOwotCi0gICAgICAgICAgICBmb3Ig
KEZyZXF1ZW50ZWRCbG9jayYgZnJlcXVlbnRlZFN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3Jz
KCkpIHsKLSAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBmcmVxdWVudGVk
U3VjY2Vzc29yLmJsb2NrKCk7Ci0gICAgICAgICAgICAgICAgLy8gSWYgc3VjY2Vzc29yJ3Mgb25s
eSBwcmVkZWNlc3NvciBpcyBibG9jaywgd2UgY2FuIHBsYW50IHRoZSBzcGlsbCBpbnNpZGUKLSAg
ICAgICAgICAgICAgICAvLyB0aGUgc3VjY2Vzc29yLiBPdGhlcndpc2UsIHdlIG11c3Qgc3BsaXQg
dGhlIGNyaXRpY2FsIGVkZ2UgYW5kIGNyZWF0ZQotICAgICAgICAgICAgICAgIC8vIGEgbmV3IGJs
b2NrIGZvciB0aGUgc3BpbGwuCi0gICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3Nvci0+bnVtUHJl
ZGVjZXNzb3JzKCkgPT0gMSkgewotICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5z
ZXJ0SW5zdHMoMCwgaW5zdHNUb01vdmUpOwotICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25T
ZXQuZXhlY3V0ZShzdWNjZXNzb3IpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGFkZGVkQmxvY2tzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgLy8g
RklYTUU6IFdlIHByb2JhYmx5IHdhbnQgYmV0dGVyIGJsb2NrIG9yZGVyaW5nIGhlcmUuCi0gICAg
ICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIG5ld0Jsb2NrID0gbV9jb2RlLmFkZEJsb2NrKCk7
Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgSW5zdCYgaW5zdCA6IGluc3RzVG9Nb3Zl
KQotICAgICAgICAgICAgICAgICAgICAgICAgbmV3QmxvY2stPmFwcGVuZEluc3QoaW5zdCk7Ci0g
ICAgICAgICAgICAgICAgICAgIG5ld0Jsb2NrLT5hcHBlbmRJbnN0KEluc3QoSnVtcCwgaW5zdHNU
b01vdmUubGFzdCgpLm9yaWdpbikpOwotICAgICAgICAgICAgICAgICAgICBuZXdCbG9jay0+c3Vj
Y2Vzc29ycygpLmFwcGVuZChzdWNjZXNzb3IpOwotICAgICAgICAgICAgICAgICAgICBmcmVxdWVu
dGVkU3VjY2Vzc29yLmJsb2NrKCkgPSBuZXdCbG9jazsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJsb2NrLT5yZXNpemUodGVybWluYWxJbmRleCArIDEp
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGFkZGVkQmxvY2tzKQotICAgICAgICAgICAgbV9j
b2RlLnJlc2V0UmVhY2hhYmlsaXR5KCk7Ci0gICAgfQotCiAgICAgQ29kZSYgbV9jb2RlOwogICAg
IFRtcFdpZHRoIG1fdG1wV2lkdGg7CiAgICAgVXNlQ291bnRzPFRtcD4mIG1fdXNlQ291bnRzOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5
TGluZWFyU2Nhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5jcHAJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFy
U2Nhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyOTAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaCIKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlyRml4U3BpbGxzQWZ0
ZXJUZXJtaW5hbHMuaCIKKyNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJB
aXJJbnN0SW5saW5lcy5oIgorI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgiCisjaW5jbHVkZSAiQWly
UGhhc2VTY29wZS5oIgorI2luY2x1ZGUgIkFpclRtcElubGluZXMuaCIKKyNpbmNsdWRlIDx3dGYv
TGlzdER1bXAuaD4KKyNpbmNsdWRlIDx3dGYvUmFuZ2UuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCituYW1lc3BhY2UgeworCit0eXBlZGVmIFJh
bmdlPHNpemVfdD4gSW50ZXJ2YWw7CisKK3N0cnVjdCBUbXBEYXRhIHsKKyAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIG91dC5wcmludCgie2ludGVy
dmFsID0gIiwgaW50ZXJ2YWwsICIsIHNwaWxsZWQgPSAiLCBwb2ludGVyRHVtcChzcGlsbGVkKSwg
IiwgYXNzaWduZWQgPSAiLCBhc3NpZ25lZCwgIn0iKTsKKyAgICB9CisgICAgCisgICAgdm9pZCB2
YWxpZGF0ZSgpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCghKHNwaWxsZWQgJiYgYXNz
aWduZWQpKTsKKyAgICB9CisgICAgCisgICAgSW50ZXJ2YWwgaW50ZXJ2YWw7CisgICAgU3RhY2tT
bG90KiBzcGlsbGVkOworICAgIFJlZyBhc3NpZ25lZDsKK307CisKK3RlbXBsYXRlPEJhbmsgYmFu
az4KK2NsYXNzIExpbmVhclNjYW4geworcHVibGljOgorICAgIExpbmVhclNjYW4oQ29kZSYgY29k
ZSkKKyAgICAgICAgOiBtX2NvZGUoY29kZSkKKyAgICAgICAgLCBtX3N0YWNrSW5kZXgoY29kZS5z
aXplKCkpCisgICAgICAgICwgbV9tYXAoY29kZS5udW1UbXBzKGJhbmspKQorICAgICAgICAsIG1f
aW5zZXJ0aW9uU2V0cyhjb2RlLnNpemUoKSwgY29kZSkKKyAgICB7CisgICAgfQorICAgIAorICAg
IHZvaWQgcnVuKCkKKyAgICB7CisgICAgICAgIGJ1aWxkSW5kaWNlcygpOworICAgICAgICBidWls
ZEludGVydmFscygpOworICAgICAgICB3aGlsZSAoIWF0dGVtcHRTY2FuKCkpCisgICAgICAgICAg
ICBlbWl0U3BpbGxDb2RlKCk7CisgICAgICAgIGFzc2lnblJlZ2lzdGVycygpOworICAgICAgICBp
bnNlcnRTcGlsbENvZGUoKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHZvaWQgYnVpbGRJ
bmRpY2VzKCkKKyAgICB7CisgICAgICAgIHNpemVfdCBpbmRleCA9IDA7CisgICAgICAgIGZvciAo
QmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsKKyAgICAgICAgICAgIG1fc3RhcnRJbmRleFti
bG9ja10gPSBpbmRleDsKKyAgICAgICAgICAgIGluZGV4ICs9IGJsb2NrLT5zaXplKCkgKiAyOwor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIHNpemVfdCBpbmRleE9mSGVhZChCYXNpY0Jsb2Nr
KiBibG9jaykKKyAgICB7CisgICAgICAgIHJldHVybiBtX3N0YXJ0SW5kZXhbYmxvY2tdOworICAg
IH0KKyAgICAKKyAgICBzaXplX3QgaW5kZXhPZlRhaWwoQmFzaWNCbG9jayogYmxvY2spCisgICAg
eworICAgICAgICByZXR1cm4gaW5kZXhPZkhlYWQoYmxvY2spICsgYmxvY2stPnNpemUoKSAqIDIg
LSAxOworICAgIH0KKyAgICAKKyAgICBzaXplX3QgaW5kZXhPZihCYXNpY0Jsb2NrKiBibG9jaywg
dW5zaWduZWQgaW5zdEluZGV4LCBBcmc6OlBoYXNlIHBoYXNlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGluZGV4T2ZIZWFkKGJsb2NrKSArIGluc3RJbmRleCAqIDIgKyBwaGFzZTsKKyAgICB9Cisg
ICAgCisgICAgSW50ZXJ2YWwgaW50ZXJ2YWxPZihCYXNpY0Jsb2NrKiBibG9jaywgdW5zaWduZWQg
aW5zdEluZGV4LCBBcmc6OlRpbWluZyB0aW1pbmcpCisgICAgeworICAgICAgICBJbnRlcnZhbCBy
ZXN1bHQ7CisgICAgICAgIEFyZzo6Zm9yRWFjaFBoYXNlKAorICAgICAgICAgICAgdGltaW5nLAor
ICAgICAgICAgICAgWyZdIChQaGFzZSBwaGFzZSkgeworICAgICAgICAgICAgICAgIHJlc3VsdCB8
PSBJbnRlcnZhbChpbmRleE9mKGJsb2NrLCBpbnN0SW5kZXgsIHBoYXNlKSk7CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgdm9pZCBidWls
ZEludGVydmFscygpCisgICAgeworICAgICAgICBUbXBMaXZlbmVzczxiYW5rPiBsaXZlbmVzcyht
X2NvZGUpOworICAgICAgICAKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUp
IHsKKyAgICAgICAgICAgIHNpemVfdCBpbmRleE9mSGVhZCA9IHRoaXMtPmluZGV4T2ZIZWFkKGJs
b2NrKTsKKyAgICAgICAgICAgIHNpemVfdCBpbmRleE9mVGFpbCA9IHRoaXMtPmluZGV4T2ZUYWls
KGJsb2NrKTsKKyAgICAgICAgICAgIGZvciAoVG1wIHRtcCA6IGxpdmVuZXNzLmxpdmVBdEhlYWQo
YmxvY2spKQorICAgICAgICAgICAgICAgIG1fbWFwW3RtcF0uaW50ZXJ2YWwgfD0gSW50ZXJ2YWwo
aW5kZXhPZkhlYWQpOworICAgICAgICAgICAgZm9yIChUbXAgdG1wIDogbGl2ZW5lc3MubGl2ZUF0
VGFpbChibG9jaykpCisgICAgICAgICAgICAgICAgbV9tYXBbdG1wXS5pbnRlcnZhbCB8PSBJbnRl
cnZhbChpbmRleE9mVGFpbCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaW5zdEluZGV4ID0gMDsgaW5zdEluZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbnN0SW5kZXgp
IHsKKyAgICAgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7Cisg
ICAgICAgICAgICAgICAgaW5zdC5mb3JFYWNoVG1wKAorICAgICAgICAgICAgICAgICAgICBbJl0g
KFRtcCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwgQmFuayB0bXBCYW5rLCBXaWR0aCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHRtcC5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXBCYW5rICE9IGJh
bmspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
ICAgICAgICAgbV9tYXBbdG1wXS5pbnRlcnZhbCB8PSBpbnRlcnZhbE9mKGJsb2NrLCBpbnN0SW5k
ZXgsIEFyZzo6dGltaW5nKHJvbGUpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1faW50ZXJ2YWxzLnJlc2VydmVD
YXBhY2l0eShtX2NvZGUubnVtVG1wcyhiYW5rKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgdG1w
SW5kZXggPSAwOyB0bXBJbmRleCA8IG1fY29kZS5udW1UbXBzKGJhbmspOyArK3RtcEluZGV4KSB7
CisgICAgICAgICAgICBUbXAgdG1wID0gVG1wOjp0bXBGb3JJbmRleChiYW5rLCB0bXBJbmRleCk7
CisgICAgICAgICAgICBtX2ludGVydmFscy5hcHBlbmQodG1wKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgc3RkOjpzb3J0KAorICAgICAgICAgICAgbV9pbnRlcnZhbHMuYmVnaW4oKSwg
bV9pbnRlcnZhbHMuZW5kKCksCisgICAgICAgICAgICBbJl0gKFRtcCBhLCBUbXAgYikgeworICAg
ICAgICAgICAgICAgIHJldHVybiBtX21hcFthXS5pbnRlcnZhbC5iZWdpbigpIDwgbV9tYXBbYl0u
aW50ZXJ2YWwuYmVnaW4oKTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKyAgICAKKyAgICBUbXAg
YWRkVG1wV2l0aEludGVydmFsKEludGVydmFsIGludGVydmFsKQorICAgIHsKKyAgICAgICAgVG1w
RGF0YSBkYXRhOworICAgICAgICBkYXRhLmludGVydmFsID0gaW50ZXJ2YWw7CisgICAgICAgIAor
ICAgICAgICBUbXAgdG1wID0gbV9jb2RlLm5ld1RtcChiYW5rKTsKKyAgICAgICAgbV9tYXAuYXBw
ZW5kKHRtcCwgZGF0YSk7CisgICAgICAgIHJldHVybiB0bXA7CisgICAgfQorICAgIAorICAgIGJv
b2wgYXR0ZW1wdFNjYW4oKQorICAgIHsKKyAgICAgICAgYm9vbCBkaWRTcGlsbCA9IGZhbHNlOwor
ICAgICAgICBtX2FjdGl2ZS5jbGVhcigpOworICAgICAgICBmb3IgKFRtcCB0bXAgOiBtX2ludGVy
dmFscykgeworICAgICAgICAgICAgCisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICFkaWRTcGls
bDsKKyAgICB9CisgICAgCisgICAgdm9pZCBhc3NpZ24oVG1wIHRtcCwgUmVnIHJlZykKKyAgICB7
CisgICAgICAgIGF1dG8mIGVudHJ5ID0gbV9tYXBbdG1wXTsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIWVudHJ5LnNwaWxsZWQpOworICAgICAgICBlbnRyeS5hc3NpZ25lZCA9IHJlZzsKKyAgICB9
CisgICAgCisgICAgdm9pZCBzcGlsbChUbXAgdG1wKQorICAgIHsKKyAgICAgICAgYXV0byYgZW50
cnkgPSBtX21hcFt0bXBdOworICAgICAgICBlbnRyeS5zcGlsbGVkID0gbV9jb2RlLmFkZFN0YWNr
U2xvdCg4LCBTdGFja1Nsb3RLaW5kOjpTcGlsbCk7CisgICAgICAgIGVudHJ5LmFzc2lnbmVkID0g
UmVnKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgZW1pdFNwaWxsQ29kZSgpCisgICAgeworICAg
ICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7CisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGluc3RJbmRleCA9IDA7IGluc3RJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsraW5z
dEluZGV4KSB7CisgICAgICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5k
ZXgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIEZpcnN0IHRyeSB0byBz
cGlsbCBkaXJlY3RseS4KKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
aW5zdC5hcmdzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIEFyZyYgYXJnID0g
aW5zdC5hcmdzW2ldOworICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZy5pc1RtcCgpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIGlmIChh
cmcuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgICAgICBpZiAoYXJnLmJhbmsoKSAhPSBiYW5rKQorICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc3BpbGxlZCA9IG1f
bWFwW2FyZy50bXAoKV0uc3BpbGxlZDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFzcGlsbGVk
KQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAg
IGlmICghaW5zdC5hZG1pdHNTdGFjayhpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgICAgICBhcmcgPSBBcmc6OnN0YWNrKHNwaWxsZWQpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBGYWxs
IGJhY2sgb24gdGhlIGhhcmQgd2F5LgorICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcCgK
KyAgICAgICAgICAgICAgICAgICAgWyZdIChUbXAmIHRtcCwgQXJnOjpSb2xlIHJvbGUsIEJhbmsg
dG1wQmFuaywgV2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWco
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAodG1wQmFuayAhPSBiYW5rKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc3BpbGxlZCA9IG1f
bWFwW3RtcF0uc3BpbGxlZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3BpbGxlZCkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIE9wY29kZSBtb3ZlID0gYmFuayA9PSBHUCA/IE1vdmUgOiBNb3ZlRG91YmxlOworICAg
ICAgICAgICAgICAgICAgICAgICAgdG1wID0gYWRkVG1wV2l0aEludGVydmFsKGludGVydmFsT2Yo
YmxvY2ssIGluc3RJbmRleCwgQXJnOjp0aW1pbmcocm9sZSkpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChyb2xlID09IEFyZzo6U2NyYXRjaCkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0FueVVzZShy
b2xlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXRzW2Jsb2NrXS5p
bnNlcnQoaW5zdEluZGV4LCBtb3ZlLCBpbnN0Lm9yZ2luLCBBcmc6OnN0YWNrKHNwaWxsZWQpLCB0
bXApOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlEZWYocm9sZSkpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0c1tibG9ja10uaW5zZXJ0KGlu
c3RJbmRleCArIDEsIG1vdmUsIGluc3Qub3JpZ2luLCB0bXAsIEFyZzo6c3RhY2soc3BpbGxlZCkp
OworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKyAgICAKKyAgICB2b2lkIGFzc2lnblJlZ2lzdGVycygpCisgICAgeworICAgICAgICBmb3Ig
KEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7CisgICAgICAgICAgICBmb3IgKEluc3QmIGlu
c3QgOiAqYmxvY2spIHsKKyAgICAgICAgICAgICAgICBpbnN0LmZvckVhY2hUbXBGYXN0KAorICAg
ICAgICAgICAgICAgICAgICBbJl0gKFRtcCYgdG1wKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAodG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcC5iYW5rKCkgIT0gYmFuaykKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFJlZyByZWcgPSBtX21hcFt0bXBdLmFzc2lnbmVkOworICAg
ICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVnKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRtcCA9IFRtcChyZWcpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGluc2VydFNwaWxsQ29k
ZSgpCisgICAgeworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKQorICAg
ICAgICAgICAgbV9pbnNlcnRpb25TZXRzW2Jsb2NrXS5leGVjdXRlKGJsb2NrKTsKKyAgICB9Cisg
ICAgCisgICAgQ29kZSYgbV9jb2RlOworICAgIEluZGV4TWFwPEJhc2ljQmxvY2sqLCBzaXplX3Q+
IG1fc3RhY2tJbmRleDsKKyAgICBJbmRleE1hcDxUbXA6OkluZGV4ZWQ8YmFuaz4sIFRtcERhdGE+
IG1fbWFwOworICAgIEluZGV4TWFwPEJhc2ljQmxvY2sqLCBJbnNlcnRpb25TZXQ+IG1faW5zZXJ0
aW9uU2V0czsKKyAgICBWZWN0b3I8VG1wPiBtX2ludGVydmFsczsKKyAgICBEZXF1ZTxUbXA+IG1f
YWN0aXZlOworfTsKKwordGVtcGxhdGU8QmFuayBiYW5rPgordm9pZCBydW5MaW5lYXJTY2FuKENv
ZGUmIGNvZGUpCit7CisgICAgTGluZWFyU2NhbjxiYW5rPiBsaW5lYXJTY2FuKGNvZGUpOworICAg
IGxpbmVhclNjYW4uaW1wbCgpOworfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9p
ZCBhbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2NhbihDb2RlJiBjb2RlKQoreworICAgIFBoYXNl
U2NvcGUgcGhhc2VTY29wZShjb2RlLCAiYWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4iKTsK
KyAgICBydW5MaW5lYXJTY2FuPEZQPihjb2RlKTsKKyAgICBydW5MaW5lYXJTY2FuPEdQPihjb2Rl
KTsKKyAgICBmaXhTcGlsbHNBZnRlclRlcm1pbmFscyhjb2RlKTsKK30KKworfSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNj
YW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9j
YXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNp
bmNsdWRlICJDUFUuaCIKKyNpbmNsdWRlICJPcHRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKworLy8gVGhpcyBp
bXBsZW1lbnRzIHRoZSBQb2xldHRvIGFuZCBTYXJrZXIgcmVnaXN0ZXIgYWxsb2NhdG9yIGNhbGxl
ZCAibGluZWFyIHNjYW4iOgorLy8gaHR0cDovL2RsLmFjbS5vcmcvY2l0YXRpb24uY2ZtP2lkPTMz
MDI1MAorLy8KKy8vIFRoaXMgaXMgbm90IEFpcidzIHByaW1hcnkgcmVnaXN0ZXIgYWxsb2NhdG9y
LiBXZSB1c2UgaXQgb25seSB3aGVuIHJ1bm5pbmcgYXQgb3B0TGV2ZWw9MC4gVGhhdCdzIG5vdAor
Ly8gdGhlIGRlZmF1bHQgbGV2ZWwuIFRoaXMgcmVnaXN0ZXIgYWxsb2NhdG9yIGlzIG9wdGltaXpl
ZCBwcmltYXJpbHkgZm9yIHJ1bm5pbmcgcXVpY2tseS4gSXQncyBleHBlY3RlZAorLy8gdGhhdCBp
bXByb3ZlbWVudHMgdG8gdGhpcyByZWdpc3RlciBhbGxvY2F0b3Igc2hvdWxkIGZvY3VzIHByaW1h
cmlseSBvbiBpbXByb3ZpbmcgaXRzIGV4ZWN1dGlvbiB0aW1lCisvLyB3aXRob3V0IG11Y2ggcmVn
YXJkIGZvciB0aGUgcXVhbGl0eSBvZiBnZW5lcmF0ZWQgY29kZS4KKy8vCisvLyBGb3IgQWlyJ3Mg
cHJpbWFyeSByZWdpc3RlciBhbGxvY2F0b3IsIHNlZSBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3Jh
cGhDb2xvcmluZy5ofGNwcC4KK3ZvaWQgYWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4oQ29k
ZSYpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0
ZVN0YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckFsbG9jYXRlU3RhY2suY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjEs
NyArMTYxLDcgQEAgdm9pZCBhbGxvY2F0ZVN0YWNrKENvZGUmIGNvZGUpCiAKICAgICAvLyBOb3cg
d2UgaGFuZGxlIHRoZSBzcGlsbCBzbG90cy4KICAgICBTdGFja1Nsb3RMaXZlbmVzcyBsaXZlbmVz
cyhjb2RlKTsKLSAgICBJbmRleE1hcDxTdGFja1Nsb3QsIEhhc2hTZXQ8U3RhY2tTbG90Kj4+IGlu
dGVyZmVyZW5jZShjb2RlLnN0YWNrU2xvdHMoKS5zaXplKCkpOworICAgIEluZGV4TWFwPFN0YWNr
U2xvdCosIEhhc2hTZXQ8U3RhY2tTbG90Kj4+IGludGVyZmVyZW5jZShjb2RlLnN0YWNrU2xvdHMo
KS5zaXplKCkpOwogICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBzbG90czsKIAogICAgIC8vIFdlIHdp
bGwgcGVyZm9ybSBzb21lIHNwaWxsIGNvYWxlc2NpbmcuIFRvIG1ha2UgdGhhdCBlZmZlY3RpdmUs
IHdlIG5lZWQgdG8gYmUgYWJsZSB0byBpZGVudGlmeQpAQCAtMzA5LDcgKzMwOSw3IEBAIHZvaWQg
YWxsb2NhdGVTdGFjayhDb2RlJiBjb2RlKQogICAgICAgICAgICAgcmV0dXJuIGEuZnJlcXVlbmN5
ID4gYi5mcmVxdWVuY3k7CiAgICAgICAgIH0pOwogICAgIAotICAgIEluZGV4TWFwPFN0YWNrU2xv
dCwgU3RhY2tTbG90Kj4gcmVtYXBwZWRTdGFja1Nsb3RzKGNvZGUuc3RhY2tTbG90cygpLnNpemUo
KSk7CisgICAgSW5kZXhNYXA8U3RhY2tTbG90KiwgU3RhY2tTbG90Kj4gcmVtYXBwZWRTdGFja1Ns
b3RzKGNvZGUuc3RhY2tTbG90cygpLnNpemUoKSk7CiAgICAgYXV0byByZW1hcCA9IFsmXSAoU3Rh
Y2tTbG90KiBzbG90KSAtPiBTdGFja1Nsb3QqIHsKICAgICAgICAgaWYgKCFzbG90KQogICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckFyZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJBcmcuY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckFyZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4Miw2ICsyODIsMjAgQEAgdm9pZCBw
cmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEFyZwogICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiB9CiAKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBB
cmc6OlRpbWluZyB0aW1pbmcpCit7CisgICAgc3dpdGNoICh0aW1pbmcpIHsKKyAgICBjYXNlIEFy
Zzo6RWFybHk6CisgICAgICAgIG91dC5wcmludCgiRWFybHkiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgQXJnOjpMYXRlOgorICAgICAgICBvdXQucHJpbnQoIkxhdGUiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
IHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBcmc6OlJvbGUgcm9sZSkKIHsK
ICAgICBzd2l0Y2ggKHJvbGUpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyQXJnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJB
cmcuaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJBcmcuaAkod29ya2luZyBjb3B5KQpAQCAtOTIsNiArOTIsMTcgQEAgcHVibGljOgogICAgICAg
ICBDb2xkLAogICAgICAgICBXYXJtCiAgICAgfTsKKyAgICAKKyAgICBlbnVtIFBoYXNlIDogaW50
OF90IHsKKyAgICAgICAgRWFybHksCisgICAgICAgIExhdGUKKyAgICB9OworICAgIAorICAgIGVu
dW0gVGltaW5nIDogaW50OF90IHsKKyAgICAgICAgT25seUVhcmx5LAorICAgICAgICBPbmx5TGF0
ZSwKKyAgICAgICAgRWFybHlBbmRMYXRlCisgICAgfTsKIAogICAgIGVudW0gUm9sZSA6IGludDhf
dCB7CiAgICAgICAgIC8vIFVzZSBtZWFucyB0aGF0IHRoZSBJbnN0IHdpbGwgcmVhZCBmcm9tIHRo
aXMgdmFsdWUgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UuCkBAIC0yNTMsNyArMjY0LDgyIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBpc0NvbGRVc2Uocm9sZSkgPyBDb2xkIDog
V2FybTsKICAgICB9Ci0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCBhY3RpdmVBdChSb2xlIHJvbGUs
IFBoYXNlIHBoYXNlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChyb2xlKSB7CisgICAgICAgIGNh
c2UgVXNlOgorICAgICAgICBjYXNlIENvbGRVc2U6CisgICAgICAgIGNhc2UgRWFybHlEZWY6Cisg
ICAgICAgIGNhc2UgRWFybHlaRGVmOgorICAgICAgICBjYXNlIFVzZUFkZHI6CisgICAgICAgICAg
ICByZXR1cm4gcGhhc2UgPT0gRWFybHk7CisgICAgICAgIGNhc2UgTGF0ZVVzZToKKyAgICAgICAg
Y2FzZSBMYXRlQ29sZFVzZToKKyAgICAgICAgY2FzZSBEZWY6CisgICAgICAgIGNhc2UgWkRlZjoK
KyAgICAgICAgICAgIHJldHVybiBwaGFzZSA9PSBMYXRlOworICAgICAgICBjYXNlIFVzZURlZjoK
KyAgICAgICAgY2FzZSBVc2VaRGVmOgorICAgICAgICBjYXNlIFNjcmF0Y2g6CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICB9CisgICAgCisgICAgc3RhdGljIGJvb2wgYWN0aXZlQXQoVGltaW5nIHRpbWluZywgUGhh
c2UgcGhhc2UpCisgICAgeworICAgICAgICBzd2l0Y2ggKHJvbGUpIHsKKyAgICAgICAgY2FzZSBP
bmx5RWFybHk6CisgICAgICAgICAgICByZXR1cm4gcGhhc2UgPT0gRWFybHk7CisgICAgICAgIGNh
c2UgT25seUxhdGU6CisgICAgICAgICAgICByZXR1cm4gcGhhc2UgPT0gTGF0ZTsKKyAgICAgICAg
Y2FzZSBFYXJseUFuZExhdGU6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFRp
bWluZyB0aW1pbmcoUm9sZSByb2xlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChyb2xlKSB7Cisg
ICAgICAgIGNhc2UgVXNlOgorICAgICAgICBjYXNlIENvbGRVc2U6CisgICAgICAgIGNhc2UgRWFy
bHlEZWY6CisgICAgICAgIGNhc2UgRWFybHlaRGVmOgorICAgICAgICBjYXNlIFVzZUFkZHI6Cisg
ICAgICAgICAgICByZXR1cm4gT25seUVhcmx5OworICAgICAgICBjYXNlIExhdGVVc2U6CisgICAg
ICAgIGNhc2UgTGF0ZUNvbGRVc2U6CisgICAgICAgIGNhc2UgRGVmOgorICAgICAgICBjYXNlIFpE
ZWY6CisgICAgICAgICAgICByZXR1cm4gT25seUxhdGU7CisgICAgICAgIGNhc2UgVXNlRGVmOgor
ICAgICAgICBjYXNlIFVzZVpEZWY6CisgICAgICAgIGNhc2UgU2NyYXRjaDoKKyAgICAgICAgICAg
IHJldHVybiBFYXJseUFuZExhdGU7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgc3Rh
dGljIHZvaWQgZm9yRWFjaFBoYXNlKFRpbWluZyB0aW1pbmcsIGNvbnN0IEZ1bmMmIGZ1bmMpCisg
ICAgeworICAgICAgICBpZiAoYWN0aXZlQXQodGltaW5nLCBFYXJseSkpCisgICAgICAgICAgICBm
dW5jKEVhcmx5KTsKKyAgICAgICAgaWYgKGFjdGl2ZUF0KHRpbWluZywgTGF0ZSkpCisgICAgICAg
ICAgICBmdW5jKExhdGUpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
PgorICAgIHN0YXRpYyB2b2lkIGZvckVhY2hQaGFzZShSb2xlIHJvbGUsIGNvbnN0IEZ1bmMmIGZ1
bmMpCisgICAgeworICAgICAgICBpZiAoYWN0aXZlQXQocm9sZSwgRWFybHkpKQorICAgICAgICAg
ICAgZnVuYyhFYXJseSk7CisgICAgICAgIGlmIChhY3RpdmVBdChyb2xlLCBMYXRlKSkKKyAgICAg
ICAgICAgIGZ1bmMoTGF0ZSk7CisgICAgfQorICAgIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0
aGUgUm9sZSBpbXBsaWVzIHRoYXQgdGhlIEluc3Qgd2lsbCBVc2UgdGhlIEFyZyBiZWZvcmUgZG9p
bmcgYW55dGhpbmcgZWxzZS4KICAgICBzdGF0aWMgYm9vbCBpc0Vhcmx5VXNlKFJvbGUgcm9sZSkK
ICAgICB7CkBAIC0xMzU0LDYgKzE0NDAsNyBAQCBuYW1lc3BhY2UgV1RGIHsKIAogSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6QWlyOjpB
cmc6OktpbmQpOwogSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiwgSlNDOjpCMzo6QWlyOjpBcmc6OlRlbXBlcmF0dXJlKTsKK0pTX0VYUE9SVF9QUklWQVRF
IHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OkFpcjo6QXJnOjpUaW1p
bmcpOwogSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwg
SlNDOjpCMzo6QWlyOjpBcmc6OlJvbGUpOwogSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6QWlyOjpBcmc6OlNpZ25lZG5lc3MpOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJsb2NrV29ya2xpc3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJsb2NrV29ya2xpc3Qu
aAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJC
bG9ja1dvcmtsaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsNyArMzIsNyBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CiAKLXR5cGVkZWYgR3JhcGhOb2Rl
V29ya2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2s+PiBCbG9ja1dvcmtsaXN0
OwordHlwZWRlZiBHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNC
bG9jayo+PiBCbG9ja1dvcmtsaXN0OwogCiAvLyBXaGVuIHlvdSBzYXkgQmxvY2tXaXRoPGludD4g
eW91IHNob3VsZCByZWFkIGl0IGFzICJibG9jayB3aXRoIGFuIGludCIuCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiB1c2luZyBCbG9ja1dpdGggPSBHcmFwaE5vZGVXaXRoPEJhc2ljQmxvY2sqLCBUPjsK
QEAgLTQxLDExICs0MSwxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBCbG9ja1dpdGgg
PSBHCiAvLyBwZXJtaXRzIGZvcmNpYmx5IGVucXVldWVpbmcgdGhpbmdzIGV2ZW4gaWYgdGhlIGJs
b2NrIGhhcyBhbHJlYWR5IGJlZW4gc2Vlbi4gSXQncyB1c2VmdWwgZm9yCiAvLyB0aGluZ3MgbGlr
ZSBidWlsZGluZyBhIHNwYW5uaW5nIHRyZWUsIGluIHdoaWNoIGNhc2UgVCAodGhlIGF1eGlsaWFy
eSBwYXlsb2FkKSB3b3VsZCBiZSB0aGUKIC8vIHN1Y2Nlc3NvciBpbmRleC4KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3JrbGlzdCA9IEV4dGVuZGVkR3JhcGhOb2Rl
V29ya2xpc3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0PEJhc2ljQmxvY2s+PjsKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3JrbGlzdCA9IEV4dGVuZGVkR3JhcGhO
b2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0PEJhc2ljQmxvY2sqPj47CiAKIHR5
cGVkZWYgR3JhcGhOb2RlV2l0aE9yZGVyPEJhc2ljQmxvY2sqPiBCbG9ja1dpdGhPcmRlcjsKIAot
dHlwZWRlZiBQb3N0T3JkZXJHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8
QmFzaWNCbG9jaz4+IFBvc3RPcmRlckJsb2NrV29ya2xpc3Q7Cit0eXBlZGVmIFBvc3RPcmRlckdy
YXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+IFBvc3RP
cmRlckJsb2NrV29ya2xpc3Q7CiAKIH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDRkcuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNGRy5oCShyZXZpc2lvbiAyMTQ0Mjcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNGRy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw4ICszOSw4IEBAIGNsYXNzIENGRyB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBCYXNpY0Jsb2NrKiBOb2RlOwotICAgIHR5cGVkZWYg
SW5kZXhTZXQ8QmFzaWNCbG9jaz4gU2V0OwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5n
IE1hcCA9IEluZGV4TWFwPEJhc2ljQmxvY2ssIFQ+OworICAgIHR5cGVkZWYgSW5kZXhTZXQ8QmFz
aWNCbG9jayo+IFNldDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBNYXAgPSBJbmRl
eE1hcDxCYXNpY0Jsb2NrKiwgVD47CiAgICAgdHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9jayosIDQ+
IExpc3Q7CiAKICAgICBDRkcoQ29kZSYgY29kZSkKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgog
ICAgIE5vZGUgcm9vdCgpIHsgcmV0dXJuIG1fY29kZVswXTsgfQogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KLSAgICBNYXA8VD4gbmV3TWFwKCkgeyByZXR1cm4gSW5kZXhNYXA8SlNDOjpCMzo6
QWlyOjpCYXNpY0Jsb2NrLCBUPihtX2NvZGUuc2l6ZSgpKTsgfQorICAgIE1hcDxUPiBuZXdNYXAo
KSB7IHJldHVybiBJbmRleE1hcDxKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2sqLCBUPihtX2NvZGUu
c2l6ZSgpKTsgfQogCiAgICAgU3VjY2Vzc29yQ29sbGVjdGlvbjxCYXNpY0Jsb2NrLCBCYXNpY0Js
b2NrOjpTdWNjZXNzb3JMaXN0PiBzdWNjZXNzb3JzKE5vZGUgbm9kZSkgeyByZXR1cm4gbm9kZS0+
c3VjY2Vzc29yQmxvY2tzKCk7IH0KICAgICBCYXNpY0Jsb2NrOjpQcmVkZWNlc3Nvckxpc3QmIHBy
ZWRlY2Vzc29ycyhOb2RlIG5vZGUpIHsgcmV0dXJuIG5vZGUtPnByZWRlY2Vzc29ycygpOyB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckVsaW1pbmF0ZURlYWRDb2RlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckVsaW1pbmF0
ZURlYWRDb2RlLmNwcAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJFbGltaW5hdGVEZWFkQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcg
KzQwLDcgQEAgYm9vbCBlbGltaW5hdGVEZWFkQ29kZShDb2RlJiBjb2RlKQogICAgIFBoYXNlU2Nv
cGUgcGhhc2VTY29wZShjb2RlLCAiZWxpbWluYXRlRGVhZENvZGUiKTsKIAogICAgIEhhc2hTZXQ8
VG1wPiBsaXZlVG1wczsKLSAgICBJbmRleFNldDxTdGFja1Nsb3Q+IGxpdmVTdGFja1Nsb3RzOwor
ICAgIEluZGV4U2V0PFN0YWNrU2xvdCo+IGxpdmVTdGFja1Nsb3RzOwogICAgIGJvb2wgY2hhbmdl
ZDsKIAogICAgIGF1dG8gaXNBcmdMaXZlID0gWyZdIChjb25zdCBBcmcmIGFyZykgLT4gYm9vbCB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeE9idmlvdXNTcGlsbHMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4T2J2
aW91c1NwaWxscy5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyRml4T2J2aW91c1NwaWxscy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0Nyw3
ICs1NDcsNyBAQCBwcml2YXRlOgogICAgIH07CiAKICAgICBDb2RlJiBtX2NvZGU7Ci0gICAgSW5k
ZXhNYXA8QmFzaWNCbG9jaywgU3RhdGU+IG1fYXRIZWFkOworICAgIEluZGV4TWFwPEJhc2ljQmxv
Y2sqLCBTdGF0ZT4gbV9hdEhlYWQ7CiAgICAgU3RhdGUgbV9zdGF0ZTsKICAgICBCYXNpY0Jsb2Nr
KiBtX2Jsb2NrIHsgbnVsbHB0ciB9OwogICAgIHVuc2lnbmVkIG1faW5zdEluZGV4IHsgMCB9OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhQYXJ0aWFsUmVnaXN0ZXJT
dGFsbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
Rml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmNwcAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTUsMTAgKzE1NSwxMCBAQCB2b2lkIGZpeFBhcnRpYWxSZWdpc3Rl
clN0YWxscyhDb2RlJiBjb2RlCiAKICAgICAvLyBGb3IgZWFjaCBibG9jaywgdGhpcyBwcm92aWRl
cyB0aGUgZGlzdGFuY2UgdG8gdGhlIGxhc3QgaW5zdHJ1Y3Rpb24gc2V0dGluZyBlYWNoIHJlZ2lz
dGVyCiAgICAgLy8gb24gYmxvY2sgKmVudHJ5Ki4KLSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBG
UERlZkRpc3RhbmNlPiBsYXN0RGVmRGlzdGFuY2UoY29kZS5zaXplKCkpOworICAgIEluZGV4TWFw
PEJhc2ljQmxvY2sqLCBGUERlZkRpc3RhbmNlPiBsYXN0RGVmRGlzdGFuY2UoY29kZS5zaXplKCkp
OwogCiAgICAgLy8gQmxvY2tzIHdpdGggZGlydHkgZGlzdGFuY2UgYXQgaGVhZC4KLSAgICBJbmRl
eFNldDxCYXNpY0Jsb2NrPiBkaXJ0eTsKKyAgICBJbmRleFNldDxCYXNpY0Jsb2NrKj4gZGlydHk7
CiAKICAgICAvLyBGaXJzdCwgd2UgY29tcHV0ZSB0aGUgbG9jYWwgZGlzdGFuY2UgZm9yIGVhY2gg
YmxvY2sgYW5kIHB1c2ggaXQgdG8gdGhlIHN1Y2Nlc3NvcnMuCiAgICAgZm9yIChCYXNpY0Jsb2Nr
KiBibG9jayA6IGNvZGUpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
Rml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuY3BwCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4U3BpbGxzQWZ0ZXJUZXJt
aW5hbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCIKKworI2lmIEVOQUJMRShCM19KSVQp
CisKKyNpbmNsdWRlICJBaXJCbG9ja0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkFpckNvZGUu
aCIKKyNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5l
cy5oIgorI2luY2x1ZGUgIkFpclRtcElubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIGZpeFNwaWxsc0FmdGVyVGVybWluYWxz
KENvZGUmIGNvZGUpCit7CisgICAgLy8gQmVjYXVzZSB0aGVyZSBtYXkgYmUgdGVybWluYWxzIHRo
YXQgcHJvZHVjZSB2YWx1ZXMsIElSQyBtYXkKKyAgICAvLyB3YW50IHRvIHNwaWxsIHRob3NlIHRl
cm1pbmFscy4gSXQnbGwgaGFwcGVuIHRvIHNwaWxsIGl0IGFmdGVyCisgICAgLy8gdGhlIHRlcm1p
bmFsLiBJZiB3ZSBsZWZ0IHRoZSBncmFwaCBpbiB0aGlzIHN0YXRlLCBpdCdkIGJlIGludmFsaWQK
KyAgICAvLyBiZWNhdXNlIGEgdGVybWluYWwgbXVzdCBiZSB0aGUgbGFzdCBpbnN0cnVjdGlvbiBp
biBhIGJsb2NrLgorICAgIC8vIFdlIGZpeCB0aGF0IGhlcmUuCisKKyAgICBCTG9ja0luc2VydGlv
blNldCBibG9ja0luc2VydGlvblNldChjb2RlKTsKKyAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9u
U2V0KGNvZGUpOworCisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAg
ICAgdW5zaWduZWQgdGVybWluYWxJbmRleCA9IGJsb2NrLT5zaXplKCk7CisgICAgICAgIGJvb2wg
Zm91bmRUZXJtaW5hbCA9IGZhbHNlOworICAgICAgICB3aGlsZSAodGVybWluYWxJbmRleC0tKSB7
CisgICAgICAgICAgICBpZiAoYmxvY2stPmF0KHRlcm1pbmFsSW5kZXgpLmlzVGVybWluYWwoKSkg
eworICAgICAgICAgICAgICAgIGZvdW5kVGVybWluYWwgPSB0cnVlOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIEFTU0VSVF9VTlVTRUQo
Zm91bmRUZXJtaW5hbCwgZm91bmRUZXJtaW5hbCk7CisKKyAgICAgICAgaWYgKHRlcm1pbmFsSW5k
ZXggPT0gYmxvY2stPnNpemUoKSAtIDEpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICAvLyBUaGVyZSBtdXN0IGJlIGluc3RydWN0aW9ucyBhZnRlciB0aGUgdGVybWluYWwgYmVjYXVz
ZSBpdCdzIG5vdCB0aGUgbGFzdCBpbnN0cnVjdGlvbi4KKyAgICAgICAgQVNTRVJUKHRlcm1pbmFs
SW5kZXggPCBibG9jay0+c2l6ZSgpIC0gMSk7CisgICAgICAgIFZlY3RvcjxJbnN0LCAxPiBpbnN0
c1RvTW92ZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdGVybWluYWxJbmRleCArIDE7IGkg
PCBibG9jay0+c2l6ZSgpOyBpKyspCisgICAgICAgICAgICBpbnN0c1RvTW92ZS5hcHBlbmQoYmxv
Y2stPmF0KGkpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5zdHNUb01vdmUuc2l6ZSgpKTsK
KworICAgICAgICBmb3IgKEZyZXF1ZW50ZWRCbG9jayYgZnJlcXVlbnRlZFN1Y2Nlc3NvciA6IGJs
b2NrLT5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA9
IGZyZXF1ZW50ZWRTdWNjZXNzb3IuYmxvY2soKTsKKyAgICAgICAgICAgIC8vIElmIHN1Y2Nlc3Nv
cidzIG9ubHkgcHJlZGVjZXNzb3IgaXMgYmxvY2ssIHdlIGNhbiBwbGFudCB0aGUgc3BpbGwgaW5z
aWRlCisgICAgICAgICAgICAvLyB0aGUgc3VjY2Vzc29yLiBPdGhlcndpc2UsIHdlIG11c3Qgc3Bs
aXQgdGhlIGNyaXRpY2FsIGVkZ2UgYW5kIGNyZWF0ZQorICAgICAgICAgICAgLy8gYSBuZXcgYmxv
Y2sgZm9yIHRoZSBzcGlsbC4KKyAgICAgICAgICAgIGlmIChzdWNjZXNzb3ItPm51bVByZWRlY2Vz
c29ycygpID09IDEpIHsKKyAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0SW5zdHMo
MCwgaW5zdHNUb01vdmUpOworICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKHN1
Y2Nlc3Nvcik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIG5ld0Jsb2NrID0gYmxvY2tJbnNlcnRpb25TZXQuaW5zZXJ0QmVmb3JlKHN1Y2Nlc3Nvciwg
c3VjY2Vzc29yLT5mcmVxdWVuY3koKSk7CisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBJbnN0
JiBpbnN0IDogaW5zdHNUb01vdmUpCisgICAgICAgICAgICAgICAgICAgIG5ld0Jsb2NrLT5hcHBl
bmRJbnN0KGluc3QpOworICAgICAgICAgICAgICAgIG5ld0Jsb2NrLT5hcHBlbmRJbnN0KEluc3Qo
SnVtcCwgaW5zdHNUb01vdmUubGFzdCgpLm9yaWdpbikpOworICAgICAgICAgICAgICAgIG5ld0Js
b2NrLT5zdWNjZXNzb3JzKCkuYXBwZW5kKHN1Y2Nlc3Nvcik7CisgICAgICAgICAgICAgICAgZnJl
cXVlbnRlZFN1Y2Nlc3Nvci5ibG9jaygpID0gbmV3QmxvY2s7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICBibG9jay0+cmVzaXplKHRlcm1pbmFsSW5kZXggKyAxKTsKKyAgICB9
CisKKyAgICBpZiAoYmxvY2tJbnNlcnRpb25TZXQuZXhlY3V0ZSgpKQorICAgICAgICBjb2RlLnJl
c2V0UmVhY2hhYmlsaXR5KCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmgJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhTcGlsbHNB
ZnRlclRlcm1pbmFscy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3Bh
Y2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKworLy8gQmVjYXVzZSB0aGVyZSBtYXkgYmUgdGVybWlu
YWxzIHRoYXQgcHJvZHVjZSB2YWx1ZXMsIHRoZSByZWdpc3RlciBhbGxvY2F0b3IgbWF5CisvLyB3
YW50IHRvIHNwaWxsIHRob3NlIHRlcm1pbmFscy4gSXQnbGwgaGFwcGVuIHRvIHNwaWxsIGl0IGFm
dGVyCisvLyB0aGUgdGVybWluYWwuIElmIHdlIGxlZnQgdGhlIGdyYXBoIGluIHRoaXMgc3RhdGUs
IGl0J2QgYmUgaW52YWxpZAorLy8gYmVjYXVzZSBhIHRlcm1pbmFsIG11c3QgYmUgdGhlIGxhc3Qg
aW5zdHJ1Y3Rpb24gaW4gYSBibG9jay4KKy8vIFdlIGZpeCB0aGF0IGhlcmUuCit2b2lkIGZpeFNw
aWxsc0FmdGVyVGVybWluYWxzKENvZGUmKTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6
OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjUsNyArMTY1LDcgQEAgdm9pZCBnZW5lcmF0ZShDb2RlJiBjb2RlLCBDQ2FsbEhlbHBl
cnMmIAogICAgICAgICBpZiAoYmxvY2spCiAgICAgICAgICAgICBjb250ZXh0LmJsb2NrTGFiZWxz
W2Jsb2NrXSA9IEJveDxDQ2FsbEhlbHBlcnM6OkxhYmVsPjo6Y3JlYXRlKCk7CiAgICAgfQotICAg
IEluZGV4TWFwPEJhc2ljQmxvY2ssIENDYWxsSGVscGVyczo6SnVtcExpc3Q+IGJsb2NrSnVtcHMo
Y29kZS5zaXplKCkpOworICAgIEluZGV4TWFwPEJhc2ljQmxvY2sqLCBDQ2FsbEhlbHBlcnM6Okp1
bXBMaXN0PiBibG9ja0p1bXBzKGNvZGUuc2l6ZSgpKTsKIAogICAgIGF1dG8gbGluayA9IFsmXSAo
Q0NhbGxIZWxwZXJzOjpKdW1wIGp1bXAsIEJhc2ljQmxvY2sqIHRhcmdldCkgewogICAgICAgICBp
ZiAoY29udGV4dC5ibG9ja0xhYmVsc1t0YXJnZXRdLT5pc1NldCgpKSB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRpb25Db250ZXh0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0aW9uQ29udGV4dC5oCShy
ZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVy
YXRpb25Db250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgog
ICAgIHR5cGVkZWYgU2hhcmVkVGFzazxMYXRlUGF0aEZ1bmN0aW9uPiBMYXRlUGF0aDsKIAogICAg
IFZlY3RvcjxSZWZQdHI8TGF0ZVBhdGg+PiBsYXRlUGF0aHM7Ci0gICAgSW5kZXhNYXA8QmFzaWNC
bG9jaywgQm94PENDYWxsSGVscGVyczo6TGFiZWw+PiBibG9ja0xhYmVsczsKKyAgICBJbmRleE1h
cDxCYXNpY0Jsb2NrKiwgQm94PENDYWxsSGVscGVyczo6TGFiZWw+PiBibG9ja0xhYmVsczsKICAg
ICBCYXNpY0Jsb2NrKiBjdXJyZW50QmxvY2sgeyBudWxscHRyIH07CiAgICAgdW5zaWduZWQgaW5k
ZXhJbkJsb2NrIHsgVUlOVF9NQVggfTsKICAgICBDb2RlKiBjb2RlIHsgbnVsbHB0ciB9OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlckVudHJ5U3dpdGNoLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyRW50cnlT
d2l0Y2guY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpckxvd2VyRW50cnlTd2l0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3
IEBAIHZvaWQgbG93ZXJFbnRyeVN3aXRjaChDb2RlJiBjb2RlKQogICAgIC8vIE5vdyBkdXBsaWNh
dGUgdGhlbS4KICAgICBWZWN0b3I8RnJlcXVlbnRlZEJsb2NrPiBlbnRyeXBvaW50czsKICAgICBl
bnRyeXBvaW50cy5hcHBlbmQoRnJlcXVlbnRlZEJsb2NrKGNvZGVbMF0sIGVudHJ5cG9pbnRGcmVx
dWVuY2llc1swXSkpOwotICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIEJhc2ljQmxvY2sqPiBtYXAo
Y29kZS5zaXplKCkpOworICAgIEluZGV4TWFwPEJhc2ljQmxvY2sqLCBCYXNpY0Jsb2NrKj4gbWFw
KGNvZGUuc2l6ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGVudHJ5cG9pbnRJbmRleCA9IDE7IGVu
dHJ5cG9pbnRJbmRleCA8IGNvZGUucHJvYygpLm51bUVudHJ5cG9pbnRzKCk7ICsrZW50cnlwb2lu
dEluZGV4KSB7CiAgICAgICAgIG1hcC5jbGVhcigpOwogICAgICAgICBmb3IgKEJhc2ljQmxvY2sq
IGJsb2NrIDogd29ya2xpc3Quc2VlbigpLnZhbHVlcyhjb2RlKSkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnTGl2ZW5lc3MuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ0xpdmVuZXNzLmgJKHJldmlzaW9uIDIxNDQyNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnTGl2ZW5lc3MuaAkod29ya2lu
ZyBjb3B5KQpAQCAtODQsOCArODQsOCBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogcHJpdmF0ZToK
LSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBSZWdpc3RlclNldD4gbV9saXZlQXRIZWFkOwotICAg
IEluZGV4TWFwPEJhc2ljQmxvY2ssIFJlZ2lzdGVyU2V0PiBtX2xpdmVBdFRhaWw7CisgICAgSW5k
ZXhNYXA8QmFzaWNCbG9jayosIFJlZ2lzdGVyU2V0PiBtX2xpdmVBdEhlYWQ7CisgICAgSW5kZXhN
YXA8QmFzaWNCbG9jayosIFJlZ2lzdGVyU2V0PiBtX2xpdmVBdFRhaWw7CiB9OwogCiB9IH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgdm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYg
Y29kZSkKICAgICBwYWRJbnRlcmZlcmVuY2UoY29kZSk7CiAKICAgICAvLyBXZSB3YW50IHRvIGtu
b3cgdGhlIHNldCBvZiByZWdpc3RlcnMgdXNlZCBhdCBldmVyeSBwb2ludCBpbiBldmVyeSBiYXNp
YyBibG9jay4KLSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBWZWN0b3I8UmVnaXN0ZXJTZXQ+PiB1
c2VkUmVnaXN0ZXJzKGNvZGUuc2l6ZSgpKTsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgVmVj
dG9yPFJlZ2lzdGVyU2V0Pj4gdXNlZFJlZ2lzdGVycyhjb2RlLnNpemUoKSk7CiAgICAgR1BMaXZl
bmVzcyBncExpdmVuZXNzKGNvZGUpOwogICAgIEZQTGl2ZW5lc3MgZnBMaXZlbmVzcyhjb2RlKTsK
ICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgewpAQCAtMTczLDEwICsxNzMsMTMg
QEAgdm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYgY29kZSkKICAgICAgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoY2hvc2VuUmVnKTsKIAogICAgICAgICAgICAgICAgICAgICB0bXAgPSBU
bXAoY2hvc2VuUmVnKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
IGlmIChhcmcgPT0gQXJnOjpTY3JhdGNoKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwogCiAgICAgICAgICAgICAgICAgICAgIE9wY29kZSBtb3ZlID0gYmFuayA9PSBHUCA/IE1vdmUg
OiBNb3ZlRG91YmxlOwogCi0gICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzQW55VXNlKHJv
bGUpICYmIHJvbGUgIT0gQXJnOjpTY3JhdGNoKQorICAgICAgICAgICAgICAgICAgICBpZiAoQXJn
Ojppc0FueVVzZShyb2xlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5p
bnNlcnQoaW5zdEluZGV4LCBtb3ZlLCBpbnN0Lm9yaWdpbiwgYXJnLCB0bXApOwogICAgICAgICAg
ICAgICAgICAgICBpZiAoQXJnOjppc0FueURlZihyb2xlKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIGluc2VydGlvblNldC5pbnNlcnQoaW5zdEluZGV4ICsgMSwgbW92ZSwgaW5zdC5vcmlnaW4s
IHRtcCwgYXJnKTsKQEAgLTE4NCw2ICsxODcsOCBAQCB2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2Rl
JiBjb2RlKQogICAgICAgICB9CiAgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsK
ICAgICB9CisgICAgCisgICAgZml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMoY29kZSk7CiB9CiAKIH0g
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyVG1wLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpclRtcC5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyVG1wLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw2ICszMCwxMSBAQAogCiBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CiAKK2NvbnN0IGNo
YXIqIGNvbnN0IFRtcDo6SW5kZXhlZDxHUD46OmR1bXBQcmVmaXggPSAiJXRtcCI7Citjb25zdCBj
aGFyKiBjb25zdCBUbXA6OkluZGV4ZWQ8RlA+OjpkdW1wUHJlZml4ID0gIiVmdG1wIjsKK2NvbnN0
IGNoYXIqIGNvbnN0IFRtcDo6QWJzb2x1dGVseUluZGV4ZWQ8R1A+OjpkdW1wUHJlZml4ID0gIiVh
YnMiOworY29uc3QgY2hhciogY29uc3QgVG1wOjpBYnNvbHV0ZWx5SW5kZXhlZDxGUD46OmR1bXBQ
cmVmaXggPSAiJWZhYnMiOworCiB2b2lkIFRtcDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAogewogICAgIGlmICghKnRoaXMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyVG1wLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJUbXAuaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJUbXAuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03NCw2ICs3NCwxNCBAQCBwdWJsaWM6CiAgICAgICAg
IHJlc3VsdC5tX3ZhbHVlID0gZW5jb2RlRlBUbXAoaW5kZXgpOwogICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVG1wIHRtcEZvckluZGV4KEJhbmsgYmFuaywg
dW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBpZiAoYmFuayA9PSBHUCkKKyAgICAgICAg
ICAgIHJldHVybiBncFRtcEZvckluZGV4KGluZGV4KTsKKyAgICAgICAgQVNTRVJUKGJhbmsgPT0g
RlApOworICAgICAgICByZXR1cm4gZnBUbXBGb3JJbmRleChpbmRleCk7CisgICAgfQogCiAgICAg
ZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV92YWx1ZTsgfQogICAg
IApAQCAtMTU0LDcgKzE2MiwxNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gZ3BUbXBJ
bmRleCgpOwogICAgICAgICByZXR1cm4gZnBUbXBJbmRleCgpOwogICAgIH0KLQorICAgIAorICAg
IHRlbXBsYXRlPEJhbmsgYmFuaz4gY2xhc3MgSW5kZXhlZDsKKyAgICB0ZW1wbGF0ZTxCYW5rIGJh
bms+IGNsYXNzIEFic29sdXRlbHlJbmRleGVkOworICAgIAorICAgIHRlbXBsYXRlPEJhbmsgYmFu
az4KKyAgICBJbmRleGVkPGJhbms+IGluZGV4ZWQoKSBjb25zdDsKKyAgICAKKyAgICB0ZW1wbGF0
ZTxCYW5rIGJhbms+CisgICAgQWJzb2x1dGVseUluZGV4ZWQ8YmFuaz4gYWJvbHV0ZWx5SW5kZXhl
ZCgpIGNvbnN0OworICAgIAogICAgIGJvb2wgaXNBbGl2ZSgpIGNvbnN0CiAgICAgewogICAgICAg
ICByZXR1cm4gISEqdGhpczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
VG1wSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyVG1wSW5saW5lcy5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclRtcElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtOTIsNiArOTIsNTAg
QEAgc3RydWN0IEFic29sdXRlVG1wTWFwcGVyPEZQPiB7CiAgICAgfQogfTsKIAordGVtcGxhdGU8
QmFuayBiYW5rPgorY2xhc3MgVG1wOjpJbmRleGVkIDogcHVibGljIFRtcCB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGR1bXBQcmVmaXg7CisgICAgCisgICAgSW5kZXhl
ZChUbXAgdG1wKQorICAgICAgICA6IFRtcCh0bXApCisgICAgeworICAgIH0KKyAgICAKKyAgICB1
bnNpZ25lZCBpbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdG1wSW5kZXgoYmFu
ayk7CisgICAgfQorfTsKKwordGVtcGxhdGU8QmFuayBiYW5rPgorY2xhc3MgVG1wOjpBYnNvbHV0
ZWx5SW5kZXhlZCA6IHB1YmxpYyBUbXAgeworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBjaGFy
KiBjb25zdCBkdW1wUHJlZml4OworCisgICAgQWJzb2x1dGVseUluZGV4ZWQoVG1wIHRtcCkKKyAg
ICAgICAgOiBUbXAodG1wKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgaW5kZXgo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEFic29sdXRlVG1wTWFwcGVyPGJhbms+Ojph
YnNvbHV0ZUluZGV4KCp0aGlzKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTxCYW5rIGJhbms+CitU
bXA6OkluZGV4ZWQ8YmFuaz4gVG1wOjppbmRleGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW5k
ZXhlZDxiYW5rPigqdGhpcyk7Cit9CisKK3RlbXBsYXRlPEJhbmsgYmFuaz4KK1RtcDo6QWJzb2x1
dGVseUluZGV4ZWQ8YmFuaz4gVG1wOjphYnNvbHV0ZWx5SW5kZXhlZCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIEFic29sdXRlbHlJbmRleGVkPGJhbms+KCp0aGlzKTsKK30KKwogfSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcgogCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNv
dXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjE0NDI3KQor
KysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtMjMsNiArMjMsOCBAQAogLyogQmVnaW4gUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KIAkJ
MEYwRDg1QjQxNzIzNENDMTAwMzM4MjEwIC8qIE5vTG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwRDg1QjMxNzIzNENCMTAwMzM4MjEwIC8qIE5v
TG9jay5oICovOyB9OwogCQkwRjBGQ0RERTFERDE2N0Y5MDBDQ0FCNTMgLyogTG9ja0FsZ29yaXRo
bS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwRkNE
REQxREQxNjdGOTAwQ0NBQjUzIC8qIExvY2tBbGdvcml0aG0uaCAqLzsgfTsKKwkJMEYyQUM1NjEx
RTg5RjcwQzAwMDFFRTNGIC8qIFJhbmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjJBQzU2MDFFODlGNzBDMDAwMUVFM0YgLyogUmFuZ2UuaCAqLzsg
fTsKKwkJMEYyQUM1NjMxRThBMDE0OTAwMDFFRTNGIC8qIEluZGV4S2V5VHlwZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQUM1NjIxRThBMDE0OTAw
MDFFRTNGIC8qIEluZGV4S2V5VHlwZS5oICovOyB9OwogCQkwRjJCNjZBNjE3QjZCNEZCMDBBN0FF
M0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE0MTdCNkI0RjcwMEE3QUUzRiAvKiBEZWZlcnJhYmxl
UmVmQ291bnRlZC5oICovOyB9OwogCQkwRjJCNjZBNzE3QjZCNEZEMDBBN0FFM0YgLyogRmxpcEJ5
dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJC
NjZBNTE3QjZCNEY3MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggKi87IH07CiAJCTBGMzBCQTkwMUU3
ODcwOEUwMDJDQTg0NyAvKiBHbG9iYWxWZXJzaW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzBCQThBMUU3ODcwOEUwMDJDQTg0NyAvKiBHbG9i
YWxWZXJzaW9uLmNwcCAqLzsgfTsKQEAgLTQwOCw2ICs0MTAsOCBAQAogLyogQmVnaW4gUEJYRmls
ZVJlZmVyZW5jZSBzZWN0aW9uICovCiAJCTBGMEQ4NUIzMTcyMzRDQjEwMDMzODIxMCAvKiBOb0xv
Y2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTm9Mb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGMEZDREREMUREMTY3RjkwMENDQUI1MyAvKiBMb2NrQWxnb3JpdGhtLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvY2tBbGdvcml0aG0uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEYyQUM1NjAxRTg5RjcwQzAwMDFFRTNGIC8qIFJhbmdlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJhbmdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGMkFDNTYyMUU4QTAxNDkwMDAxRUUzRiAvKiBJbmRleEtleVR5cGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5kZXhLZXlUeXBlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkE0MTdCNkI0RjcwMEE3QUUzRiAvKiBEZWZlcnJhYmxl
UmVmQ291bnRlZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZWZlcnJhYmxlUmVmQ291bnRlZC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCNjZBNTE3QjZCNEY3MDBBN0FFM0YgLyogRmxp
cEJ5dGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZsaXBCeXRlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjMwMEI3RDE4QUI0OEI0MDBBNkQ3MkUgLyogSGFzaE1ldGhvZC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBIYXNoTWV0aG9kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
MDE4LDEwICsxMDIyLDExIEBACiAJCQkJQThBNDcyQkExNTFBODI1QTAwNDEyM0ZGIC8qIEhhc2hU
cmFpdHMuaCAqLywKIAkJCQlBOEE0NzJCQjE1MUE4MjVBMDA0MTIzRkYgLyogSGV4TnVtYmVyLmgg
Ki8sCiAJCQkJRkU4OTI1QUYxRDAwREFFQzAwNDY5MDdFIC8qIEluZGVudGVyLmggKi8sCi0JCQkJ
OUM2N0M1NDI1ODkzNDhFMjg1QjQ5Njk5IC8qIEluZGV4ZWRDb250YWluZXJJdGVyYXRvci5oICov
LAorCQkJCTBGMkFDNTYyMUU4QTAxNDkwMDAxRUUzRiAvKiBJbmRleEtleVR5cGUuaCAqLywKIAkJ
CQk1QjQzMzgzQTVEMEI0NjNDOTQzM0Q5MzMgLyogSW5kZXhNYXAuaCAqLywKIAkJCQkzMTM3RTFE
N0RCRDg0QUMzOEZBRTREMzQgLyogSW5kZXhTZXQuaCAqLywKIAkJCQkyNjg0RDQzNTFDMDAwRDQw
MDA4MUQ2NjMgLyogSW5kZXhTcGFyc2VTZXQuaCAqLywKKwkJCQk5QzY3QzU0MjU4OTM0OEUyODVC
NDk2OTkgLyogSW5kZXhlZENvbnRhaW5lckl0ZXJhdG9yLmggKi8sCiAJCQkJQThBNDcyQkMxNTFB
ODI1QTAwNDEyM0ZGIC8qIElubGluZUFTTS5oICovLAogCQkJCUE3MERBMDgyMTc5OUYwNEQwMDUy
OUE5QiAvKiBJbnNlcnRpb24uaCAqLywKIAkJCQk3Q0REN0ZGNzE4NkQyOTFFMDA3NDMzQ0QgLyog
SXRlcmF0b3JBZGFwdG9ycy5oICovLApAQCAtMTEwMCw2ICsxMTA1LDcgQEAKIAkJCQlBOEE0NzJG
QjE1MUE4MjVCMDA0MTIzRkYgLyogUmFuZG9tTnVtYmVyLmNwcCAqLywKIAkJCQlBOEE0NzJGQzE1
MUE4MjVCMDA0MTIzRkYgLyogUmFuZG9tTnVtYmVyLmggKi8sCiAJCQkJQThBNDcyRkQxNTFBODI1
QjAwNDEyM0ZGIC8qIFJhbmRvbU51bWJlclNlZWQuaCAqLywKKwkJCQkwRjJBQzU2MDFFODlGNzBD
MDAwMUVFM0YgLyogUmFuZ2UuaCAqLywKIAkJCQkwRjcyNUNBQjFDNTA0NjE2MDBBRDk0M0EgLyog
UmFuZ2VTZXQuaCAqLywKIAkJCQkwRjg3MTA1OTE2NjQzRjE5MDA5MEIwQUQgLyogUmF3UG9pbnRl
ci5oICovLAogCQkJCTBGREU4N0Y2MURGRDA3Q0MwMDY0QzM5MCAvKiBSZWN1cnNpdmVMb2NrQWRh
cHRlci5oICovLApAQCAtMTQ4NSw2ICsxNDkxLDcgQEAKIAkJCQlDOTE2Qjk3NUYwMkY0RjdFOEI0
QUIxMkQgLyogSW5kZXhNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUM4QjBFMUExRTAxQTQ4NkVC
OTVFMEQxMSAvKiBJbmRleFNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjY4NEQ0MzYxQzAwMEQ0
MDAwODFENjYzIC8qIEluZGV4U3BhcnNlU2V0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJBQzU2
MzFFOEEwMTQ5MDAwMUVFM0YgLyogSW5kZXhLZXlUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
OEE0NzNEQzE1MUE4MjVCMDA0MTIzRkYgLyogSW5saW5lQVNNLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzBEQTA4NDE3OTlGMDREMDA1MjlBOUIgLyogSW5zZXJ0aW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQkyNjE0N0IwQTE1RERDQ0RDMDBEREI5MDcgLyogSW50ZWdlclRvU3RyaW5nQ29udmVyc2lv
bi5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNTg2LDYgKzE1OTMsNyBAQAogCQkJCTQzMEI0Nzg5MUFB
QUFDMUEwMDEyMjNEQSAvKiBTdHJpbmdDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3
NDNFMTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdDb25jYXRlbmF0ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJN0NENEMyNzAxRTJDODJCOTAwOTI5NDcwIC8qIFN0cmluZ0NvbmNhdGVuYXRlTnVtYmVy
cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQUM1NjExRTg5RjcwQzAwMDFFRTNGIC8qIFJhbmdl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQyQzE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5n
RXh0cmFzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQzRjE1MUE4MjVCMDA0MTIzRkYgLyog
U3RyaW5nSGFzaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0ODc0NTQxN0EwQkRBRTAwRkEwNENC
IC8qIFN0cmluZ0hhc2hEdW1wQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9DTWFr
ZUxpc3RzLnR4dAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL1dURi93dGYvQ01ha2VMaXN0
cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw2ICsxMDAsNyBAQCBzZXQoV1RGX0hFQURFUlMK
ICAgICBSQU1TaXplLmgKICAgICBSYW5kb21OdW1iZXIuaAogICAgIFJhbmRvbU51bWJlclNlZWQu
aAorICAgIFJhbmdlLmgKICAgICBSYW5nZVNldC5oCiAgICAgUmF3UG9pbnRlci5oCiAgICAgUmVj
dXJzaXZlTG9ja0FkYXB0ZXIuaApJbmRleDogU291cmNlL1dURi93dGYvSW5kZXhLZXlUeXBlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSW5kZXhLZXlUeXBlLmgJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL1dURi93dGYvSW5kZXhLZXlUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
CitzdHJ1Y3QgSW5kZXhLZXlUeXBlIHsKKyAgICBzdGF0aWMgc2l6ZV90IGluZGV4KGNvbnN0IFQm
IGtleSkgY29uc3QgeyByZXR1cm4ga2V5LmluZGV4KCk7IH0KK307CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+CitzdHJ1Y3QgSW5kZXhLZXlUeXBlPFQqPiB7CisgICAgc3RhdGljIHNpemVfdCBpbmRl
eChUKiBrZXkpIGNvbnN0IHsgcmV0dXJuIGtleS0+aW5kZXgoKTsgfQorfTsKKworfSAvLyBuYW1l
c3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0luZGV4TWFwLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvSW5kZXhNYXAuaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNl
L1dURi93dGYvSW5kZXhNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAj
cHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgPHd0Zi9JbmRleEtleVR5cGUuaD4KICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtNzAsMTQgKzcxLDIwIEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIG1fdmVjdG9yW2luZGV4XTsKICAgICB9CiAgICAgCi0gICAgVmFs
dWUmIG9wZXJhdG9yW10oS2V5KiBrZXkpCisgICAgVmFsdWUmIG9wZXJhdG9yW10oY29uc3QgS2V5
JiBrZXkpCiAgICAgewotICAgICAgICByZXR1cm4gbV92ZWN0b3Jba2V5LT5pbmRleCgpXTsKKyAg
ICAgICAgcmV0dXJuIG1fdmVjdG9yW0luZGV4S2V5VHlwZTxLZXk+OjppbmRleChrZXkpXTsKICAg
ICB9CiAgICAgCi0gICAgY29uc3QgVmFsdWUmIG9wZXJhdG9yW10oS2V5KiBrZXkpIGNvbnN0Cisg
ICAgY29uc3QgVmFsdWUmIG9wZXJhdG9yW10oY29uc3QgS2V5JiBrZXkpIGNvbnN0CiAgICAgewot
ICAgICAgICByZXR1cm4gbV92ZWN0b3Jba2V5LT5pbmRleCgpXTsKKyAgICAgICAgcmV0dXJuIG1f
dmVjdG9yW0luZGV4S2V5VHlwZTxLZXk+OjppbmRleChrZXkpXTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBhcHBlbmQoY29uc3QgS2V5JiBrZXksIFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoSW5kZXhLZXlUeXBlPEtleT46OmluZGV4KGtleSkgPT0gbV92ZWN0b3Iu
c2l6ZSgpKTsKKyAgICAgICAgbV92ZWN0b3IuYXBwZW5kKHZhbHVlKTsKICAgICB9CiAKIHByaXZh
dGU6CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9JbmRleFNldC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL0luZGV4U2V0LmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9XVEYvd3Rm
L0luZGV4U2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRl
IDx3dGYvQml0VmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorI2luY2x1
ZGUgPHd0Zi9JbmRleEtleVR5cGUuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKQEAgLTQyLDMwICs0
MywzMCBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIGJvb2wgYWRkKFQqIHZhbHVlKQor
ICAgIGJvb2wgYWRkKGNvbnN0IFQmIHZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuICFtX3Nl
dC5zZXQodmFsdWUtPmluZGV4KCkpOworICAgICAgICByZXR1cm4gIW1fc2V0LnNldChJbmRleEtl
eVR5cGU8VD46OmluZGV4KHZhbHVlKSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
SXRlcmFibGU+CiAgICAgYm9vbCBhZGRBbGwoY29uc3QgSXRlcmFibGUmIGl0ZXJhYmxlKQogICAg
IHsKICAgICAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgZm9yIChUKiB2YWx1ZSA6
IGl0ZXJhYmxlKQorICAgICAgICBmb3IgKGNvbnN0IFQmIHZhbHVlIDogaXRlcmFibGUpCiAgICAg
ICAgICAgICByZXN1bHQgfD0gYWRkKHZhbHVlKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICB9CiAKLSAgICBib29sIHJlbW92ZShUKiB2YWx1ZSkKKyAgICBib29sIHJlbW92ZShjb25zdCBU
JiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3NldC5jbGVhcih2YWx1ZS0+aW5kZXgo
KSk7CisgICAgICAgIHJldHVybiBtX3NldC5jbGVhcihJbmRleEtleVR5cGU8VD46OmluZGV4KHZh
bHVlKSk7CiAgICAgfQogCi0gICAgYm9vbCBjb250YWlucyhUKiB2YWx1ZSkgY29uc3QKKyAgICBi
b29sIGNvbnRhaW5zKGNvbnN0IFQmIHZhbHVlKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKCF2
YWx1ZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIG1fc2V0Lmdl
dCh2YWx1ZS0+aW5kZXgoKSk7CisgICAgICAgIHJldHVybiBtX3NldC5nZXQoSW5kZXhLZXlUeXBl
PFQ+OjppbmRleCh2YWx1ZSkpOwogICAgIH0KIAogICAgIHNpemVfdCBzaXplKCkgY29uc3QKQEAg
LTEwMCw3ICsxMDEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIFQqIG9wZXJhdG9yKigpCisgICAgICAgICAgICBUIG9wZXJhdG9yKigpCiAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1fY29sbGVjdGlvbi0+YXQoKm1f
aXRlcik7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9SYW5nZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1JhbmdlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L1dURi93dGYvUmFuZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNp
bmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8vIE5vdGUg
dGhhdCB0aGUgJ2JlZ2luJyBpcyBpbmNsdXNpdmUsIHdoaWxlIHRoZSAnZW5kJyBpcyBleGNsdXNp
dmUuIFRoZXNlIHR3byByYW5nZXMgYXJlIG5vbi0KKy8vIG92ZXJsYXBwaW5nOgorLy8KKy8vICAg
ICByYW5nZUEgPSAwLi4uOAorLy8gICAgIHJhbmdlQiA9IDguLi4xNgorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBQYXNzZWRUeXBlPgorY2xhc3MgUmFuZ2UgeworcHVibGljOgorICAgIHR5cGVkZWYgUGFz
c2VkVHlwZSBUeXBlOworICAgIAorICAgIEhlYXBSYW5nZSgpCisgICAgICAgIDogbV9iZWdpbigw
KQorICAgICAgICAsIG1fZW5kKDApCisgICAgeworICAgIH0KKworICAgIGV4cGxpY2l0IEhlYXBS
YW5nZShUeXBlIHZhbHVlKQorICAgICAgICA6IG1fYmVnaW4odmFsdWUpCisgICAgICAgICwgbV9l
bmQodmFsdWUgKyAxKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZW5kID49IG1fYmVnaW4pOwor
ICAgIH0KKworICAgIEhlYXBSYW5nZShUeXBlIGJlZ2luLCBUeXBlIGVuZCkKKyAgICAgICAgOiBt
X2JlZ2luKGJlZ2luKQorICAgICAgICAsIG1fZW5kKGVuZCkKKyAgICB7CisgICAgICAgIEFTU0VS
VChtX2VuZCA+PSBtX2JlZ2luKTsKKyAgICAgICAgaWYgKG1fYmVnaW4gPT0gbV9lbmQpIHsKKyAg
ICAgICAgICAgIC8vIENhbm9uaWNhbGl6ZSBlbXB0eSByYW5nZXMuCisgICAgICAgICAgICBtX2Jl
Z2luID0gMDsKKyAgICAgICAgICAgIG1fZW5kID0gMDsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHN0YXRpYyBIZWFwUmFuZ2UgdG9wKCkKKyAgICB7CisgICAgICAgIHJldHVybiBIZWFwUmFuZ2Uo
c3RkOjpudW1lcmljX2xpbWl0czxUeXBlPjo6bWluKCksIHN0ZDo6bnVtZXJpY19saW1pdHM8VHlw
ZT46Om1heCgpKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSGVhcFJhbmdl
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2JlZ2luID09IG90aGVyLm1f
YmVnaW4KKyAgICAgICAgICAgICYmIG1fZW5kID09IG90aGVyLm1fZW5kOworICAgIH0KKworICAg
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBIZWFwUmFuZ2UmIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKyAgICAKKyAgICBleHBsaWNp
dCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9iZWdpbiAhPSBtX2VuZDsgfQorCisg
ICAgSGVhcFJhbmdlIG9wZXJhdG9yfChjb25zdCBIZWFwUmFuZ2UmIG90aGVyKSBjb25zdAorICAg
IHsKKyAgICAgICAgaWYgKCEqdGhpcykKKyAgICAgICAgICAgIHJldHVybiBvdGhlcjsKKyAgICAg
ICAgaWYgKCFvdGhlcikKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgcmV0dXJu
IEhlYXBSYW5nZSgKKyAgICAgICAgICAgIHN0ZDo6bWluKG1fYmVnaW4sIG90aGVyLm1fYmVnaW4p
LAorICAgICAgICAgICAgc3RkOjptYXgobV9lbmQsIG90aGVyLm1fZW5kKSk7CisgICAgfQorICAg
IAorICAgIFR5cGUgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2JlZ2luOyB9CisgICAgVHlwZSBl
bmQoKSBjb25zdCB7IHJldHVybiBtX2VuZDsgfQorCisgICAgYm9vbCBvdmVybGFwcyhjb25zdCBI
ZWFwUmFuZ2UmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6cmFuZ2Vz
T3ZlcmxhcChtX2JlZ2luLCBtX2VuZCwgb3RoZXIubV9iZWdpbiwgb3RoZXIubV9lbmQpOworICAg
IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAg
ICAgaWYgKCp0aGlzID09IEhlYXBSYW5nZSgpKSB7CisgICAgICAgICAgICBvdXQucHJpbnQoIkJv
dHRvbSIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICgqdGhp
cyA9PSB0b3AoKSkgeworICAgICAgICAgICAgb3V0LnByaW50KCJUb3AiKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9iZWdpbiA9PSBtX2VuZCArIDEpIHsK
KyAgICAgICAgICAgIG91dC5wcmludChtX2JlZ2luKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICBvdXQucHJpbnQobV9iZWdpbiwgIi4uLiIsIG1fZW5kKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgVHlwZSBtX2JlZ2luOworICAgIFR5cGUgbV9lbmQ7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpSYW5nZTsKKwpJbmRleDogU291cmNlL1dU
Ri93dGYvUmFuZ2VTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9SYW5nZVNldC5o
CShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvV1RGL3d0Zi9SYW5nZVNldC5oCSh3b3JraW5n
IGNvcHkpCkBAIC03Nyw2ICs3NywxMCBAQCBwdWJsaWM6CiAgICAgICAgIG1faXNDb21wYWN0ID0g
ZmFsc2U7CiAKICAgICAgICAgLy8gV2UgYXBwZW5kIHdpdGhvdXQgY29tcGFjdGluZyBvbmx5IGlm
IGRvaW5nIHNvIGlzIGd1YXJhbnRlZWQgbm90IHRvIHJlc2l6ZSB0aGUgdmVjdG9yLgorICAgICAg
ICAvLyBGSVhNRTogVGhpcyBoZXVyaXN0aWMgaXMgYWxtb3N0IGNlcnRhaW5seSB3cm9uZywgYmVj
YXVzZSB3ZSBkb24ndCBjb250cm9sIHRoZSBjYXBhY2l0eS4gSQorICAgICAgICAvLyB0aGluayB0
aGF0IHRoaXMgbWVhbnMgdGhhdCB3ZSB3aWxsIHNvbWV0aW1lcyBiZSByYWdlLWNvbXBhY3Rpbmcg
d2hlbiB3ZSBhcmUganVzdCBzaHkgb2YgdGhlCisgICAgICAgIC8vIGNhcGFjaXR5LgorICAgICAg
ICAvLyBPT1BTOiBuZWVkIGJ1ZyB1cmwKICAgICAgICAgaWYgKG1fcmFuZ2VzLnNpemUoKSArIDEg
PCBtX3Jhbmdlcy5jYXBhY2l0eSgpKSB7CiAgICAgICAgICAgICBtX3Jhbmdlcy5hcHBlbmQocmFu
Z2UpOwogICAgICAgICAgICAgcmV0dXJuOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305561</attachid>
            <date>2017-03-27 22:29:50 -0700</date>
            <delta_ts>2017-03-28 11:16:04 -0700</delta_ts>
            <desc>the latest</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>91619</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIxNDQyNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMTQwLDcgKzE0MCw2IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYjMvQjNG
b2xkUGF0aENvbnN0YW50cy5jcHAKICAgICBiMy9CM0ZyZXF1ZW5jeUNsYXNzLmNwcAogICAgIGIz
L0IzR2VuZXJhdGUuY3BwCi0gICAgYjMvQjNIZWFwUmFuZ2UuY3BwCiAgICAgYjMvQjNJbmZlclN3
aXRjaGVzLmNwcAogICAgIGIzL0IzSW5zZXJ0aW9uU2V0LmNwcAogICAgIGIzL0IzS2luZC5jcHAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTgzLDYgKzE4MywxMCBAQAogCQkwRjI1RjFCMjE4MTYz
NUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1RjFBQjE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xv
d1BhdGhDYWxsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEYyNUYxQjMxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1RjFBQzE4
MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5LmNwcCAqLzsgfTsKIAkJMEYyNUYx
QjQxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNUYxQUQxODE2MzVGMzAwNTIyRjM5
IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGMkFDNTY2MUU4QTBCNzcwMDAxRUUzRiAvKiBBaXJGaXhTcGls
bHNBZnRlclRlcm1pbmFscy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjJBQzU2NDFFOEEwQjc2MDAwMUVFM0YgLyogQWlyRml4U3BpbGxzQWZ0ZXJU
ZXJtaW5hbHMuY3BwICovOyB9OworCQkwRjJBQzU2NzFFOEEwQjc5MDAwMUVFM0YgLyogQWlyRml4
U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMkFDNTY1MUU4QTBCNzYwMDAxRUUzRiAvKiBBaXJGaXhTcGlsbHNBZnRl
clRlcm1pbmFscy5oICovOyB9OworCQkwRjJBQzU2QTFFOEEwQkQzMDAwMUVFM0YgLyogQWlyQWxs
b2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQUM1NjgxRThBMEJEMTAwMDFFRTNGIC8qIEFpckFsbG9j
YXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcCAqLzsgfTsKKwkJMEYyQUM1NkIxRThBMEJENTAw
MDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJBQzU2OTFFOEEwQkQxMDAwMUVF
M0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaCAqLzsgfTsKIAkJMEYyQjY2
QUMxN0I2QjUzRjAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBODE3QjZCNTNEMDBBN0FF
M0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJCNjZBRDE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNv
bWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJCNjZBOTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNv
dW50ZWRJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEYyQjY2QUUxN0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVk
U2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJC
NjZBQTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTY5LDcgKzk3Myw2
IEBACiAJCTBGRUM4NUJDMUJFMTQ2MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0cmVuZ3RoLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUI3MUJF
MTQ2MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0cmVuZ3RoLmNwcCAqLzsgfTsKIAkJMEZFQzg1QkQx
QkUxNDYyRjAwODBGRjc0IC8qIEIzUmVkdWNlU3RyZW5ndGguaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUI4MUJFMTQ2MkYwMDgwRkY3NCAvKiBC
M1JlZHVjZVN0cmVuZ3RoLmggKi87IH07CiAJCTBGRUM4NUMxMUJFMTY3QTAwMDgwRkY3NCAvKiBC
M0VmZmVjdHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NUJFMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0VmZmVjdHMuaCAqLzsgfTsKLQkJMEZFQzg1
QzIxQkUxNjdBMDAwODBGRjc0IC8qIEIzSGVhcFJhbmdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUJGMUJFMTY3QTAwMDgwRkY3NCAvKiBC
M0hlYXBSYW5nZS5jcHAgKi87IH07CiAJCTBGRUM4NUMzMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hl
YXBSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg1QzAxQkUxNjdBMDAwODBGRjc0IC8qIEIzSGVhcFJhbmdlLmggKi87IH07CiAJCTBGRUM4
NUM1MUJFMTZGNUEwMDgwRkY3NCAvKiBCM0VmZmVjdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1QzQxQkUxNkY1QTAwODBGRjc0IC8qIEIz
RWZmZWN0cy5jcHAgKi87IH07CiAJCTBGRUQ2N0I5MUIyNjI1NkQwMDY2Q0UxNSAvKiBERkdDb25z
dGFudEhvaXN0aW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFRDY3QjcxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0YW50SG9pc3Rp
bmdQaGFzZS5jcHAgKi87IH07CkBAIC0yNzAzLDYgKzI3MDYsMTAgQEAKIAkJMEYyNUYxQUIxODE2
MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBGVExTbG93UGF0aENhbGwuaDsgcGF0aCA9IGZ0bC9GVExTbG93UGF0aENhbGwu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNUYxQUMxODE2MzVGMzAwNTIyRjM5
IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBGVExTbG93UGF0aENhbGxLZXkuY3BwOyBwYXRoID0gZnRsL0ZUTFNsb3dQYXRoQ2Fs
bEtleS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjVGMUFEMTgxNjM1RjMw
MDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gRlRMU2xvd1BhdGhDYWxsS2V5Lmg7IHBhdGggPSBmdGwvRlRMU2xvd1BhdGhDYWxs
S2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkFDNTY0MUU4QTBCNzYwMDAx
RUUzRiAvKiBBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5jcHA7IHBhdGgg
PSBiMy9haXIvQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjJBQzU2NTFFOEEwQjc2MDAwMUVFM0YgLyogQWlyRml4U3BpbGxzQWZ0
ZXJUZXJtaW5hbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyRml4U3Bp
bGxzQWZ0ZXJUZXJtaW5hbHMuaDsgcGF0aCA9IGIzL2Fpci9BaXJGaXhTcGlsbHNBZnRlclRlcm1p
bmFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJBQzU2ODFFOEEwQkQxMDAw
MUVFM0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNj
YW4uY3BwOyBwYXRoID0gYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQUM1NjkxRThBMEJEMTAwMDFFRTNG
IC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmg7IHBhdGgg
PSBiMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQjY2QTgxN0I2QjUzRDAwQTdBRTNGIC8qIEdDSW5jb21pbmdS
ZWZDb3VudGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5jb21pbmdSZWZDb3VudGVkLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkE5MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0lu
Y29taW5nUmVmQ291bnRlZElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR0NJbmNvbWluZ1JlZkNv
dW50ZWRJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkFBMTdC
NkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMzQ5Niw3ICszNTAzLDYgQEAKIAkJMEZFQzg1QjcxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVk
dWNlU3RyZW5ndGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNS
ZWR1Y2VTdHJlbmd0aC5jcHA7IHBhdGggPSBiMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQzg1QjgxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVk
dWNlU3RyZW5ndGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNSZWR1Y2VT
dHJlbmd0aC5oOyBwYXRoID0gYjMvQjNSZWR1Y2VTdHJlbmd0aC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkVDODVCRTFCRTE2N0EwMDA4MEZGNzQgLyogQjNFZmZlY3RzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzRWZmZWN0cy5oOyBwYXRoID0gYjMvQjNF
ZmZlY3RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGRUM4NUJGMUJFMTY3QTAw
MDgwRkY3NCAvKiBCM0hlYXBSYW5nZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBCM0hlYXBSYW5nZS5jcHA7IHBhdGggPSBiMy9CM0hlYXBSYW5nZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUM4NUMwMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hl
YXBSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0hlYXBSYW5nZS5o
OyBwYXRoID0gYjMvQjNIZWFwUmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZFQzg1QzQxQkUxNkY1QTAwODBGRjc0IC8qIEIzRWZmZWN0cy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0VmZmVjdHMuY3BwOyBwYXRoID0gYjMvQjNFZmZlY3Rz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFRDY3QjcxQjI2MjU2RDAwNjZD
RTE1IC8qIERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuY3BwOyBwYXRoID0gZGZn
L0RGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01NDE5LDcgKzU0MjUsNiBAQAogCQkJCTBGRUM4NENGMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0dlbmVyYXRlLmggKi8sCiAJCQkJMEYyQzYzQjUxRTYzNDNFODAwQzEzODM5IC8qIEIzR2VuZXJp
Y0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi8sCiAJCQkJMEZFQzg0RDAxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oICovLAotCQkJCTBGRUM4NUJGMUJFMTY3QTAwMDgw
RkY3NCAvKiBCM0hlYXBSYW5nZS5jcHAgKi8sCiAJCQkJMEZFQzg1QzAxQkUxNjdBMDAwODBGRjc0
IC8qIEIzSGVhcFJhbmdlLmggKi8sCiAJCQkJREM2OUI5OUExRDE1RjkwRjAwMkUzQzAwIC8qIEIz
SW5mZXJTd2l0Y2hlcy5jcHAgKi8sCiAJCQkJREM2OUI5OUIxRDE1RjkwRjAwMkUzQzAwIC8qIEIz
SW5mZXJTd2l0Y2hlcy5oICovLApAQCAtNTUyOCw2ICs1NTMzLDggQEAKIAkJMEZFQzg0QjMxQkRB
Q0Q4ODAwODBGRjc0IC8qIGFpciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCisJCQkJMEYyQUM1NjgxRThBMEJEMTAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0
ZXJzQnlMaW5lYXJTY2FuLmNwcCAqLywKKwkJCQkwRjJBQzU2OTFFOEEwQkQxMDAwMUVFM0YgLyog
QWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaCAqLywKIAkJCQk3OTY1QzIxNDFFNUQ3
OTk2MDBCNzU5MUQgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuY3BwICov
LAogCQkJCTc5NjVDMjE1MUU1RDc5OTYwMEI3NTkxRCAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5
R3JhcGhDb2xvcmluZy5oICovLAogCQkJCTBGRUM4NTQ4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJB
bGxvY2F0ZVN0YWNrLmNwcCAqLywKQEAgLTU1NjEsNiArNTU2OCw4IEBACiAJCQkJMEY0REUxQ0Qx
QzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCAqLywKIAkJCQkyNjJEODVC
NDFDMEQ2NTBGMDA2QUNCNjEgLyogQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmNwcCAqLywK
IAkJCQkyNjJEODVCNTFDMEQ2NTBGMDA2QUNCNjEgLyogQWlyRml4UGFydGlhbFJlZ2lzdGVyU3Rh
bGxzLmggKi8sCisJCQkJMEYyQUM1NjQxRThBMEI3NjAwMDFFRTNGIC8qIEFpckZpeFNwaWxsc0Fm
dGVyVGVybWluYWxzLmNwcCAqLywKKwkJCQkwRjJBQzU2NTFFOEEwQjc2MDAwMUVFM0YgLyogQWly
Rml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCAqLywKIAkJCQkwRkVDODU1MjFCREFDREM3MDA4MEZG
NzQgLyogQWlyRnJlcXVlbnRlZEJsb2NrLmggKi8sCiAJCQkJMEZFQzg1NTMxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckdlbmVyYXRlLmNwcCAqLywKIAkJCQkwRkVDODU1NDFCREFDREM3MDA4MEZGNzQg
LyogQWlyR2VuZXJhdGUuaCAqLywKQEAgLTgxMzksNiArODE0OCw3IEBACiAJCQkJMEZFQzg1MTAx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkVDODUxMjFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0MzQyMkE2MzFDMTU4RTZEMDBFMkVCOTggLyogQjNDb25zdEZsb2F0VmFsdWUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkFDNTZCMUU4QTBCRDUwMDAxRUUzRiAvKiBBaXJBbGxv
Y2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1QjMx
QkRFRDk1NzAwODBGRjc0IC8qIEIzQ29uc3RQdHJWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYzMzhERjYxQkU5M0Q1NTAwMTNDODhGIC8qIEIzQ29uc3RyYWluZWRWYWx1ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyQzYzQjgxRTYzNDNGNzAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2NrSW5z
ZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKQEAgLTkzNjIsNiArOTM3Miw3IEBACiAJCQkJNzA5
RkI4NkExQUUzMzVDNjAwMzlEMDY5IC8qIFdlYWtTZXRDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMTQxNTAxMzMxNTRCQjEzRjAwNUQ4Qzk4IC8qIFdlYWtTZXRJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3MDlGQjg2QzFBRTMzNUM2MDAzOUQwNjkgLyogV2Vha1NldFByb3Rv
dHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQUM1NjcxRThBMEI3OTAwMDFFRTNGIC8qIEFp
ckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JFRDFE
QjU4REFEMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNDMTYxREI1OUNCMjAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5
Q29tcGlsZUVycm9yQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JF
RjFEQjU4REFEMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90b3R5cGUuaCBp
biBIZWFkZXJzICovLApAQCAtOTk4OCw3ICs5OTk5LDYgQEAKIAkJCQkwRjcyNUNBRjFDNTA2RDNC
MDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkVDODUxNTFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkVDODUxODFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQkwRkVDODVDMjFCRTE2N0EwMDA4MEZGNzQgLyogQjNIZWFwUmFuZ2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJREM2OUI5OUMxRDE1RjkxMjAwMkUzQzAwIC8qIEIzSW5m
ZXJTd2l0Y2hlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVDODVCOTFCRTE0NjJGMDA4MEZG
NzQgLyogQjNJbnNlcnRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZERjY3RDMxRDlD
NkQyQTAwMUI5ODI1IC8qIEIzS2luZC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMTU0LDYgKzEw
MTY0LDcgQEAKIAkJCQlBNzhBOTc3NjE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkJEQzE1MTUxQzVENEQwMENEODkxMCAvKiBERkdGaXh1
cFBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjAxNzdGMURDQURDMzMwMEVBNTk1MCAv
KiBERkdGbG93SW5kZXhpbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQUM1NkExRThBMEJE
MzAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGOUQzMzk2MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRjcxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0ZsdXNo
Rm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNjlDQzg4MTkzQUM2MEEwMDQ1NzU5RSAv
KiBERkdGcm96ZW5WYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMjYzLDYgKzEwMjc0LDcg
QEAKIAkJCQkyQTgzNjM4NTE4RDdEMEVFMDAwMEVCQ0MgLyogRWRlbkdDQWN0aXZpdHlDYWxsYmFj
ay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OUU0NUEyNTE4QTFCMjU5MDAyNkQ4OEYgLyogRW5j
b2RlZFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUM3MTA3RUMzNzYwMDQyN0E0
OCAvKiBFcnJvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJBQzU2NjFFOEEwQjc3MDAwMUVF
M0YgLyogQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQ3RjM5QzgxMDdFQzM3NjAwNDI3QTQ4IC8qIEVycm9yQ29uc3RydWN0b3IuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRkVCNThDMTQxODdCOEIxNjAwOThFRjBCIC8qIEVycm9ySGFuZGxpbmdTY29w
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDOTEwN0VDMzc2MDA0MjdBNDggLyogRXJy
b3JJbnN0YW5jZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrVXRpbHMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTE0LDcgKzExNCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+CiBWZWN0b3I8QmFz
aWNCbG9jayo+IGJsb2Nrc0luUHJlT3JkZXIoQmFzaWNCbG9jayogcm9vdCkKIHsKICAgICBWZWN0
b3I8QmFzaWNCbG9jayo+IHJlc3VsdDsKLSAgICBHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2Nr
KiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IHdvcmtsaXN0OworICAgIEdyYXBoTm9kZVdvcmtsaXN0
PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+IHdvcmtsaXN0OwogICAgIHdvcmts
aXN0LnB1c2gocm9vdCk7CiAgICAgd2hpbGUgKEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3Qu
cG9wKCkpIHsKICAgICAgICAgcmVzdWx0LmFwcGVuZChibG9jayk7CkBAIC0xMjgsNyArMTI4LDcg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KIFZlY3RvcjxCYXNpY0Jsb2NrKj4gYmxv
Y2tzSW5Qb3N0T3JkZXIoQmFzaWNCbG9jayogcm9vdCkKIHsKICAgICBWZWN0b3I8QmFzaWNCbG9j
ayo+IHJlc3VsdDsKLSAgICBQb3N0T3JkZXJHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwg
SW5kZXhTZXQ8QmFzaWNCbG9jaz4+IHdvcmtsaXN0OworICAgIFBvc3RPcmRlckdyYXBoTm9kZVdv
cmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+IHdvcmtsaXN0OwogICAg
IHdvcmtsaXN0LnB1c2gocm9vdCk7CiAgICAgd2hpbGUgKEdyYXBoTm9kZVdpdGhPcmRlcjxCYXNp
Y0Jsb2NrKj4gaXRlbSA9IHdvcmtsaXN0LnBvcCgpKSB7CiAgICAgICAgIHN3aXRjaCAoaXRlbS5v
cmRlcikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tXb3JrbGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrV29ya2xpc3Qu
aAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tX
b3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CiAKIGNsYXNzIEJhc2ljQmxvY2s7CiAKLXR5cGVkZWYgR3JhcGhOb2RlV29y
a2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2s+PiBCbG9ja1dvcmtsaXN0Owor
dHlwZWRlZiBHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9j
ayo+PiBCbG9ja1dvcmtsaXN0OwogCiAvLyBXaGVuIHlvdSBzYXkgQmxvY2tXaXRoPGludD4geW91
IHNob3VsZCByZWFkIGl0IGFzICJibG9jayB3aXRoIGFuIGludCIuCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB1c2luZyBCbG9ja1dpdGggPSBHcmFwaE5vZGVXaXRoPEJhc2ljQmxvY2sqLCBUPjsKQEAg
LTQ0LDEzICs0NCwxMyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBCbG9ja1dpdGggPSBH
CiAvLyBwZXJtaXRzIGZvcmNpYmx5IGVucXVldWVpbmcgdGhpbmdzIGV2ZW4gaWYgdGhlIGJsb2Nr
IGhhcyBhbHJlYWR5IGJlZW4gc2Vlbi4gSXQncyB1c2VmdWwgZm9yCiAvLyB0aGluZ3MgbGlrZSBi
dWlsZGluZyBhIHNwYW5uaW5nIHRyZWUsIGluIHdoaWNoIGNhc2UgVCAodGhlIGF1eGlsaWFyeSBw
YXlsb2FkKSB3b3VsZCBiZSB0aGUKIC8vIHN1Y2Nlc3NvciBpbmRleC4KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3JrbGlzdCA9IEV4dGVuZGVkR3JhcGhOb2RlV29y
a2xpc3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0PEJhc2ljQmxvY2s+PjsKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3JrbGlzdCA9IEV4dGVuZGVkR3JhcGhOb2Rl
V29ya2xpc3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0PEJhc2ljQmxvY2sqPj47CiAKIHR5cGVk
ZWYgR3JhcGhWaXNpdE9yZGVyIFZpc2l0T3JkZXI7CiAKIHR5cGVkZWYgR3JhcGhOb2RlV2l0aE9y
ZGVyPEJhc2ljQmxvY2sqPiBCbG9ja1dpdGhPcmRlcjsKIAotdHlwZWRlZiBQb3N0T3JkZXJHcmFw
aE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IFBvc3RPcmRl
ckJsb2NrV29ya2xpc3Q7Cit0eXBlZGVmIFBvc3RPcmRlckdyYXBoTm9kZVdvcmtsaXN0PEJhc2lj
QmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+IFBvc3RPcmRlckJsb2NrV29ya2xpc3Q7CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDRkcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDRkcu
aAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ0ZHLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzksOCArMzksOCBAQCBjbGFzcyBDRkcgewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIHR5cGVkZWYgQmFzaWNCbG9jayogTm9kZTsKLSAg
ICB0eXBlZGVmIEluZGV4U2V0PEJhc2ljQmxvY2s+IFNldDsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB1c2luZyBNYXAgPSBJbmRleE1hcDxCYXNpY0Jsb2NrLCBUPjsKKyAgICB0eXBlZGVmIElu
ZGV4U2V0PEJhc2ljQmxvY2sqPiBTZXQ7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcg
TWFwID0gSW5kZXhNYXA8QmFzaWNCbG9jayosIFQ+OwogICAgIHR5cGVkZWYgVmVjdG9yPEJhc2lj
QmxvY2sqLCA0PiBMaXN0OwogCiAgICAgQ0ZHKFByb2NlZHVyZSYgcHJvYykKQEAgLTUxLDcgKzUx
LDcgQEAgcHVibGljOgogICAgIE5vZGUgcm9vdCgpIHsgcmV0dXJuIG1fcHJvY1swXTsgfQogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBNYXA8VD4gbmV3TWFwKCkgeyByZXR1cm4gSW5k
ZXhNYXA8SlNDOjpCMzo6QmFzaWNCbG9jaywgVD4obV9wcm9jLnNpemUoKSk7IH0KKyAgICBNYXA8
VD4gbmV3TWFwKCkgeyByZXR1cm4gSW5kZXhNYXA8SlNDOjpCMzo6QmFzaWNCbG9jayosIFQ+KG1f
cHJvYy5zaXplKCkpOyB9CiAKICAgICBTdWNjZXNzb3JDb2xsZWN0aW9uPEJhc2ljQmxvY2ssIEJh
c2ljQmxvY2s6OlN1Y2Nlc3Nvckxpc3Q+IHN1Y2Nlc3NvcnMoTm9kZSBub2RlKSB7IHJldHVybiBu
b2RlLT5zdWNjZXNzb3JCbG9ja3MoKTsgfQogICAgIEJhc2ljQmxvY2s6OlByZWRlY2Vzc29yTGlz
dCYgcHJlZGVjZXNzb3JzKE5vZGUgbm9kZSkgeyByZXR1cm4gbm9kZS0+cHJlZGVjZXNzb3JzKCk7
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0R1cGxpY2F0ZVRhaWxzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNEdXBsaWNhdGVUYWlscy5j
cHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0R1cGxp
Y2F0ZVRhaWxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgsNyBAQCBwdWJsaWM6CiAK
ICAgICAgICAgbV9wcm9jLnJlc2V0VmFsdWVPd25lcnMoKTsKIAotICAgICAgICBJbmRleFNldDxC
YXNpY0Jsb2NrPiBjYW5kaWRhdGVzOworICAgICAgICBJbmRleFNldDxCYXNpY0Jsb2NrKj4gY2Fu
ZGlkYXRlczsKIAogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jKSB7CiAg
ICAgICAgICAgICBpZiAoYmxvY2stPnNpemUoKSA+IG1fbWF4U2l6ZSkKQEAgLTgyLDcgKzgyLDcg
QEAgcHVibGljOgogICAgICAgICB9CiAKICAgICAgICAgLy8gQ29sbGVjdCB0aGUgc2V0IG9mIHZh
bHVlcyB0aGF0IG11c3QgYmUgZGUtU1NBJ2QuCi0gICAgICAgIEluZGV4U2V0PFZhbHVlPiB2YWx1
ZXNUb0RlbW90ZTsKKyAgICAgICAgSW5kZXhTZXQ8VmFsdWUqPiB2YWx1ZXNUb0RlbW90ZTsKICAg
ICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvYykgewogICAgICAgICAgICAgZm9y
IChWYWx1ZSogdmFsdWUgOiAqYmxvY2spIHsKICAgICAgICAgICAgICAgICBpZiAodmFsdWUtPm9w
Y29kZSgpID09IFBoaSAmJiBjYW5kaWRhdGVzLmNvbnRhaW5zKGJsb2NrKSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVDb21tb25T
dWJleHByZXNzaW9ucy5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjgyLDcgKzY4Miw3IEBAIHByaXZhdGU6CiAgICAgRG9taW5hdG9ycyYgbV9kb21pbmF0
b3JzOwogICAgIFB1cmVDU0UgbV9wdXJlQ1NFOwogICAgIAotICAgIEluZGV4TWFwPEJhc2ljQmxv
Y2ssIEltcHVyZUJsb2NrRGF0YT4gbV9pbXB1cmVCbG9ja0RhdGE7CisgICAgSW5kZXhNYXA8QmFz
aWNCbG9jayosIEltcHVyZUJsb2NrRGF0YT4gbV9pbXB1cmVCbG9ja0RhdGE7CiAKICAgICBJbXB1
cmVCbG9ja0RhdGEgbV9kYXRhOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNG
aXhTU0EuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZpeFNT
QS5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Zp
eFNTQS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgbmFtZXNwYWNlIHsKIGNv
bnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKLXZv
aWQgZGVtb3RlVmFsdWVzKFByb2NlZHVyZSYgcHJvYywgY29uc3QgSW5kZXhTZXQ8VmFsdWU+JiB2
YWx1ZXMpCit2b2lkIGRlbW90ZVZhbHVlcyhQcm9jZWR1cmUmIHByb2MsIGNvbnN0IEluZGV4U2V0
PFZhbHVlKj4mIHZhbHVlcykKIHsKICAgICBIYXNoTWFwPFZhbHVlKiwgVmFyaWFibGUqPiBtYXA7
CiAgICAgSGFzaE1hcDxWYWx1ZSosIFZhcmlhYmxlKj4gcGhpTWFwOwpAQCAtMTIxLDcgKzEyMSw3
IEBAIGJvb2wgZml4U1NBKFByb2NlZHVyZSYgcHJvYykKICAgICAvLyBKdXN0IGZvciBzYW5pdHks
IHJlbW92ZSBhbnkgdW51c2VkIHZhcmlhYmxlcyBmaXJzdC4gSXQncyB1bmxpa2VseSB0aGF0IHRo
aXMgY29kZSBoYXMgYW55CiAgICAgLy8gYnVncyBoYXZpbmcgdG8gZG8gd2l0aCBkZWFkIHZhcmlh
YmxlcywgYnV0IGl0IHdvdWxkIGJlIHNpbGx5IHRvIGhhdmUgdG8gZml4IHN1Y2ggYSBidWcgaWYK
ICAgICAvLyBpdCBkaWQgYXJpc2UuCi0gICAgSW5kZXhTZXQ8VmFyaWFibGU+IGxpdmVWYXJpYWJs
ZXM7CisgICAgSW5kZXhTZXQ8VmFyaWFibGUqPiBsaXZlVmFyaWFibGVzOwogICAgIGZvciAoVmFs
dWUqIHZhbHVlIDogcHJvYy52YWx1ZXMoKSkgewogICAgICAgICBpZiAoVmFyaWFibGVWYWx1ZSog
dmFyaWFibGVWYWx1ZSA9IHZhbHVlLT5hczxWYXJpYWJsZVZhbHVlPigpKQogICAgICAgICAgICAg
bGl2ZVZhcmlhYmxlcy5hZGQodmFyaWFibGVWYWx1ZS0+dmFyaWFibGUoKSk7CkBAIC0xNDUsNyAr
MTQ1LDcgQEAgYm9vbCBmaXhTU0EoUHJvY2VkdXJlJiBwcm9jKQogCiAgICAgLy8gQ3JlYXRlIGEg
U1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUgKCJjYWxjVmFyIikgZm9yIGV2ZXJ5IHZhcmlhYmxlLgog
ICAgIFZlY3RvcjxWYXJpYWJsZSo+IGNhbGNWYXJUb1ZhcmlhYmxlOwotICAgIEluZGV4TWFwPFZh
cmlhYmxlLCBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSo+IHZhcmlhYmxlVG9DYWxjVmFyKHByb2Mu
dmFyaWFibGVzKCkuc2l6ZSgpKTsKKyAgICBJbmRleE1hcDxWYXJpYWJsZSosIFNTQUNhbGN1bGF0
b3I6OlZhcmlhYmxlKj4gdmFyaWFibGVUb0NhbGNWYXIocHJvYy52YXJpYWJsZXMoKS5zaXplKCkp
OwogCiAgICAgZm9yIChWYXJpYWJsZSogdmFyaWFibGUgOiBwcm9jLnZhcmlhYmxlcygpKSB7CiAg
ICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiBjYWxjVmFyID0gc3NhLm5ld1ZhcmlhYmxl
KCk7CkBAIC0xODUsNyArMTg1LDcgQEAgYm9vbCBmaXhTU0EoUHJvY2VkdXJlJiBwcm9jKQogCiAg
ICAgLy8gTm93IHBlcmZvcm0gdGhlIGNvbnZlcnNpb24uCiAgICAgSW5zZXJ0aW9uU2V0IGluc2Vy
dGlvblNldChwcm9jKTsKLSAgICBJbmRleE1hcDxWYXJpYWJsZSwgVmFsdWUqPiBtYXBwaW5nKHBy
b2MudmFyaWFibGVzKCkuc2l6ZSgpKTsKKyAgICBJbmRleE1hcDxWYXJpYWJsZSosIFZhbHVlKj4g
bWFwcGluZyhwcm9jLnZhcmlhYmxlcygpLnNpemUoKSk7CiAgICAgZm9yIChCYXNpY0Jsb2NrKiBi
bG9jayA6IHByb2MuYmxvY2tzSW5QcmVPcmRlcigpKSB7CiAgICAgICAgIG1hcHBpbmcuY2xlYXIo
KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJhbmdlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNIZWFwUmFuZ2UuY3BwCShyZXZp
c2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNIZWFwUmFuZ2UuY3Bw
CShub25leGlzdGVudCkKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQjNI
ZWFwUmFuZ2UuaCIKLQotI2lmIEVOQUJMRShCM19KSVQpCi0KLW5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgewotCi12b2lkIEhlYXBSYW5nZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAotewotICAgIGlmICgqdGhpcyA9PSBIZWFwUmFuZ2UoKSkgewotICAgICAgICBvdXQucHJpbnQo
IkJvdHRvbSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICgqdGhpcyA9PSB0b3Ao
KSkgewotICAgICAgICBvdXQucHJpbnQoIlRvcCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIG91dC5wcmludChtX2JlZ2luLCAiLi4uIiwgbV9lbmQpOwotfQotCi19IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKLQotI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCi0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNIZWFwUmFuZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsOTAg
KzI3LDE1IEBACiAKICNpZiBFTkFCTEUoQjNfSklUKQogCi0jaW5jbHVkZSA8bGltaXRzLmg+Ci0j
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4K
KyNpbmNsdWRlIDx3dGYvUmFuZ2UuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CiAKIC8vIEFsaWFzIGFuYWx5c2lzIGluIEIzIGlzIGRvbmUgYnkgY2hlY2tpbmcgaWYgdHdvIGlu
dGVnZXIgcmFuZ2VzIG92ZXJsYXAuIFRoaXMgaXMgcG93ZXJmdWwgZW5vdWdoCiAvLyB0byBiZSB1
c2VkIGZvciBUQkFBLXN0eWxlIGFsaWFzIGFuYWx5c2lzIHVzZWQgYnkgdGhlIERGRywgRlRMLCBh
bmQgTExWTTogeW91IGp1c3QgdHVybiBlYWNoIG5vZGUKIC8vIGluIHRoZSB0cmVlIG9mIGFic3Ry
YWN0IGhlYXBzIGludG8gYSBwcmUvcG9zdCByYW5nZS4KLS8vCi0vLyBOb3RlIHRoYXQgdGhlICdi
ZWdpbicgaXMgaW5jbHVzaXZlLCB3aGlsZSB0aGUgJ2VuZCcgaXMgZXhjbHVzaXZlLiBUaGVzZSB0
d28gcmFuZ2VzIGFyZSBub24tCi0vLyBvdmVybGFwcGluZzoKLS8vCi0vLyAgICAgcmFuZ2VBID0g
MC4uLjgKLS8vICAgICByYW5nZUIgPSA4Li4uMTYKLQotY2xhc3MgSGVhcFJhbmdlIHsKLXB1Ymxp
YzoKLSAgICB0eXBlZGVmIHVuc2lnbmVkIFR5cGU7Ci0gICAgCi0gICAgSGVhcFJhbmdlKCkKLSAg
ICAgICAgOiBtX2JlZ2luKDApCi0gICAgICAgICwgbV9lbmQoMCkKLSAgICB7Ci0gICAgfQotCi0g
ICAgZXhwbGljaXQgSGVhcFJhbmdlKHVuc2lnbmVkIHZhbHVlKQotICAgICAgICA6IG1fYmVnaW4o
dmFsdWUpCi0gICAgICAgICwgbV9lbmQodmFsdWUgKyAxKQotICAgIHsKLSAgICAgICAgQVNTRVJU
KG1fZW5kID49IG1fYmVnaW4pOwotICAgIH0KLQotICAgIEhlYXBSYW5nZSh1bnNpZ25lZCBiZWdp
biwgdW5zaWduZWQgZW5kKQotICAgICAgICA6IG1fYmVnaW4oYmVnaW4pCi0gICAgICAgICwgbV9l
bmQoZW5kKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fZW5kID49IG1fYmVnaW4pOwotICAgICAg
ICBpZiAobV9iZWdpbiA9PSBtX2VuZCkgewotICAgICAgICAgICAgLy8gQ2Fub25pY2FsaXplIGVt
cHR5IHJhbmdlcy4KLSAgICAgICAgICAgIG1fYmVnaW4gPSAwOwotICAgICAgICAgICAgbV9lbmQg
PSAwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIEhlYXBSYW5nZSB0b3AoKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIEhlYXBSYW5nZSgwLCBVSU5UX01BWCk7Ci0gICAgfQotCi0gICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IEhlYXBSYW5nZSYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAg
ICAgICByZXR1cm4gbV9iZWdpbiA9PSBvdGhlci5tX2JlZ2luCi0gICAgICAgICAgICAmJiBtX2Vu
ZCA9PSBvdGhlci5tX2VuZDsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgSGVh
cFJhbmdlJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAhKCp0aGlzID09IG90
aGVyKTsKLSAgICB9Ci0gICAgCi0gICAgSGVhcFJhbmdlIG9wZXJhdG9yfChjb25zdCBIZWFwUmFu
Z2UmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIEhlYXBSYW5nZSgKLSAgICAg
ICAgICAgIHN0ZDo6bWluKG1fYmVnaW4sIG90aGVyLm1fYmVnaW4pLAotICAgICAgICAgICAgc3Rk
OjptYXgobV9lbmQsIG90aGVyLm1fZW5kKSk7Ci0gICAgfQotICAgIAotICAgIGV4cGxpY2l0IG9w
ZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX2JlZ2luICE9IG1fZW5kOyB9Ci0KLSAgICB1
bnNpZ25lZCBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fYmVnaW47IH0KLSAgICB1bnNpZ25lZCBl
bmQoKSBjb25zdCB7IHJldHVybiBtX2VuZDsgfQotCi0gICAgYm9vbCBvdmVybGFwcyhjb25zdCBI
ZWFwUmFuZ2UmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6cmFuZ2Vz
T3ZlcmxhcChtX2JlZ2luLCBtX2VuZCwgb3RoZXIubV9iZWdpbiwgb3RoZXIubV9lbmQpOwotICAg
IH0KLQotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdDsKLQotcHJpdmF0ZToKLSAgICB1bnNpZ25lZCBtX2JlZ2luOwotICAgIHVuc2lnbmVkIG1f
ZW5kOwotfTsKKwordHlwZWRlZiBSYW5nZTx1bnNpZ25lZD4gSGVhcFJhbmdlOwogCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93
ZXJUb0Fpci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93
ZXJUb0Fpci5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0xvd2VyVG9BaXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzc5LDEwICszMzc5LDEwIEBA
IHByaXZhdGU6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQog
ICAgIAotICAgIEluZGV4U2V0PFZhbHVlPiBtX2xvY2tlZDsgLy8gVGhlc2UgYXJlIHZhbHVlcyB0
aGF0IHdpbGwgaGF2ZSBubyBUbXAgaW4gQWlyLgotICAgIEluZGV4TWFwPFZhbHVlLCBUbXA+IG1f
dmFsdWVUb1RtcDsgLy8gVGhlc2UgYXJlIHZhbHVlcyB0aGF0IG11c3QgaGF2ZSBhIFRtcCBpbiBB
aXIuIFdlIHNheSB0aGF0IGEgVmFsdWUqIHdpdGggYSBub24tbnVsbCBUbXAgaXMgInBpbm5lZCIu
Ci0gICAgSW5kZXhNYXA8VmFsdWUsIFRtcD4gbV9waGlUb1RtcDsgLy8gRWFjaCBQaGkgZ2V0cyBp
dHMgb3duIFRtcC4KLSAgICBJbmRleE1hcDxCMzo6QmFzaWNCbG9jaywgQWlyOjpCYXNpY0Jsb2Nr
Kj4gbV9ibG9ja1RvQmxvY2s7CisgICAgSW5kZXhTZXQ8VmFsdWUqPiBtX2xvY2tlZDsgLy8gVGhl
c2UgYXJlIHZhbHVlcyB0aGF0IHdpbGwgaGF2ZSBubyBUbXAgaW4gQWlyLgorICAgIEluZGV4TWFw
PFZhbHVlKiwgVG1wPiBtX3ZhbHVlVG9UbXA7IC8vIFRoZXNlIGFyZSB2YWx1ZXMgdGhhdCBtdXN0
IGhhdmUgYSBUbXAgaW4gQWlyLiBXZSBzYXkgdGhhdCBhIFZhbHVlKiB3aXRoIGEgbm9uLW51bGwg
VG1wIGlzICJwaW5uZWQiLgorICAgIEluZGV4TWFwPFZhbHVlKiwgVG1wPiBtX3BoaVRvVG1wOyAv
LyBFYWNoIFBoaSBnZXRzIGl0cyBvd24gVG1wLgorICAgIEluZGV4TWFwPEIzOjpCYXNpY0Jsb2Nr
KiwgQWlyOjpCYXNpY0Jsb2NrKj4gbV9ibG9ja1RvQmxvY2s7CiAgICAgSGFzaE1hcDxCMzo6U3Rh
Y2tTbG90KiwgQWlyOjpTdGFja1Nsb3QqPiBtX3N0YWNrVG9TdGFjazsKICAgICBIYXNoTWFwPFZh
cmlhYmxlKiwgVG1wPiBtX3ZhcmlhYmxlVG9UbXA7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM01vdmVDb25zdGFudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM01vdmVDb25zdGFudHMuY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNb3ZlQ29uc3RhbnRzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzMsNyArNzMsNyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgRG9taW5hdG9ycyYgZG9t
aW5hdG9ycyA9IG1fcHJvYy5kb21pbmF0b3JzKCk7CiAgICAgICAgIEhhc2hNYXA8VmFsdWVLZXks
IFZhbHVlKj4gdmFsdWVGb3JDb25zdGFudDsKLSAgICAgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywg
VmVjdG9yPFZhbHVlKj4+IG1hdGVyaWFsaXphdGlvbnMobV9wcm9jLnNpemUoKSk7CisgICAgICAg
IEluZGV4TWFwPEJhc2ljQmxvY2sqLCBWZWN0b3I8VmFsdWUqPj4gbWF0ZXJpYWxpemF0aW9ucyht
X3Byb2Muc2l6ZSgpKTsKIAogICAgICAgICAvLyBXZSBkZXRlcm1pbmUgd2hlcmUgdGhpbmdzIGdl
dCBtYXRlcmlhbGl6ZWQgYmFzZWQgb24gd2hlcmUgdGhleSBhcmUgdXNlZC4KICAgICAgICAgZm9y
IChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvYykgewpAQCAtMjc0LDcgKzI3NCw3IEBAIHByaXZh
dGU6CiAgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2NvbnN0VGFibGUpCiAgICAgICAgICAg
ICBtX2RhdGFTZWN0aW9uW2VudHJ5LnZhbHVlXSA9IGVudHJ5LmtleS52YWx1ZSgpOwogCi0gICAg
ICAgIEluZGV4U2V0PFZhbHVlPiBvZmZMaW1pdHM7CisgICAgICAgIEluZGV4U2V0PFZhbHVlKj4g
b2ZmTGltaXRzOwogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jKSB7CiAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHZhbHVlSW5kZXggPSAwOyB2YWx1ZUluZGV4IDwgYmxv
Y2stPnNpemUoKTsgKyt2YWx1ZUluZGV4KSB7CiAgICAgICAgICAgICAgICAgU3RhY2ttYXBWYWx1
ZSogdmFsdWUgPSBibG9jay0+YXQodmFsdWVJbmRleCktPmFzPFN0YWNrbWFwVmFsdWU+KCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQaGlDaGlsZHJlbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoaUNoaWxkcmVuLmgJKHJldmlzaW9uIDIx
NDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoaUNoaWxkcmVuLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE2OCw3ICsxNjgsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgVmVjdG9yPFZh
bHVlKiwgOD4mIHBoaXMoKSBjb25zdCB7IHJldHVybiBtX3BoaXM7IH0KIAogcHJpdmF0ZToKLSAg
ICBJbmRleE1hcDxWYWx1ZSwgVmVjdG9yPFVwc2lsb25WYWx1ZSo+PiBtX3Vwc2lsb25zOworICAg
IEluZGV4TWFwPFZhbHVlKiwgVmVjdG9yPFVwc2lsb25WYWx1ZSo+PiBtX3Vwc2lsb25zOwogICAg
IFZlY3RvcjxWYWx1ZSosIDg+IG1fcGhpczsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg2LDcgKzE4
Niw3IEBAIHZvaWQgUHJvY2VkdXJlOjppbnZhbGlkYXRlQ0ZHKCkKIAogdm9pZCBQcm9jZWR1cmU6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKLSAgICBJbmRleFNldDxWYWx1ZT4gdmFs
dWVzSW5CbG9ja3M7CisgICAgSW5kZXhTZXQ8VmFsdWUqPiB2YWx1ZXNJbkJsb2NrczsKICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogKnRoaXMpIHsKICAgICAgICAgb3V0LnByaW50KGRlZXBE
dW1wKCp0aGlzLCBibG9jaykpOwogICAgICAgICB2YWx1ZXNJbkJsb2Nrcy5hZGRBbGwoKmJsb2Nr
KTsKQEAgLTI0NSw3ICsyNDUsNyBAQCB2b2lkIFByb2NlZHVyZTo6ZGVsZXRlVmFsdWUoVmFsdWUq
IHZhbHVlCiAKIHZvaWQgUHJvY2VkdXJlOjpkZWxldGVPcnBoYW5zKCkKIHsKLSAgICBJbmRleFNl
dDxWYWx1ZT4gdmFsdWVzSW5CbG9ja3M7CisgICAgSW5kZXhTZXQ8VmFsdWUqPiB2YWx1ZXNJbkJs
b2NrczsKICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogKnRoaXMpCiAgICAgICAgIHZhbHVl
c0luQmxvY2tzLmFkZEFsbCgqYmxvY2spOwogCkBAIC0zMzMsNyArMzMzLDcgQEAgVmFsdWUqIFBy
b2NlZHVyZTo6YWRkVmFsdWVJbXBsKFZhbHVlKiB2YQogCiB2b2lkIFByb2NlZHVyZTo6c2V0Qmxv
Y2tPcmRlckltcGwoVmVjdG9yPEJhc2ljQmxvY2sqPiYgYmxvY2tzKQogewotICAgIEluZGV4U2V0
PEJhc2ljQmxvY2s+IGJsb2Nrc1NldDsKKyAgICBJbmRleFNldDxCYXNpY0Jsb2NrKj4gYmxvY2tz
U2V0OwogICAgIGJsb2Nrc1NldC5hZGRBbGwoYmxvY2tzKTsKIAogICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiAqdGhpcykgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVk
dWNlRG91YmxlVG9GbG9hdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzUmVkdWNlRG91YmxlVG9GbG9hdC5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZURvdWJsZVRvRmxvYXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MjQsMTggKzQyNCwxOCBAQCBwcml2YXRlOgogCiAgICAgLy8gU2V0IG9mIGFsbCB0
aGUgRG91YmxlIHZhbHVlcyB0aGF0IGFyZSBhY3R1YWxseSB1c2VkIGFzIERvdWJsZS4KICAgICAv
LyBDb252ZXJ0aW5nIGFueSBvZiB0aGVtIHRvIEZsb2F0IHdvdWxkIGxvc2UgcHJlY2lzaW9uLgot
ICAgIEluZGV4U2V0PFZhbHVlPiBtX3ZhbHVlc1VzZWRBc0RvdWJsZTsKKyAgICBJbmRleFNldDxW
YWx1ZSo+IG1fdmFsdWVzVXNlZEFzRG91YmxlOwogCiAgICAgLy8gU2V0IG9mIGFsbCB0aGUgUGhp
IG9mIHR5cGUgRG91YmxlIHRoYXQgcmVhbGx5IGNvbnRhaW5zIGEgRG91YmxlLgogICAgIC8vIEFu
eSBEb3VibGUgUGhpIG5vdCBpbiB0aGUgc2V0IGNhbiBiZSBjb252ZXJ0ZWQgdG8gRmxvYXQgd2l0
aG91dCBsb3NpbmcgcHJlY2lzaW9uLgotICAgIEluZGV4U2V0PFZhbHVlPiBtX3BoaXNDb250YWlu
aW5nRG91YmxlOworICAgIEluZGV4U2V0PFZhbHVlKj4gbV9waGlzQ29udGFpbmluZ0RvdWJsZTsK
IAogICAgIC8vIEFueSB2YWx1ZSB0aGF0IHdhcyBjb252ZXJ0ZWQgZnJvbSBwcm9kdWNpbmcgYSBE
b3VibGUgdG8gcHJvZHVjaW5nIGEgRmxvYXQuCiAgICAgLy8gVGhpcyBzZXQgZG9lcyBub3QgaW5j
bHVkZSBQaGktVXBzaWxvbnMuCi0gICAgSW5kZXhTZXQ8VmFsdWU+IG1fY29udmVydGVkVmFsdWU7
CisgICAgSW5kZXhTZXQ8VmFsdWUqPiBtX2NvbnZlcnRlZFZhbHVlOwogCiAgICAgLy8gQW55IHZh
bHVlIHRoYXQgcHJldmlvdXNseSBwcm9kdWNlZCBEb3VibGUgYW5kIG5vdyBwcm9kdWNlIEZsb2F0
LgotICAgIEluZGV4U2V0PFZhbHVlPiBtX2NvbnZlcnRlZFBoaXM7CisgICAgSW5kZXhTZXQ8VmFs
dWUqPiBtX2NvbnZlcnRlZFBoaXM7CiB9OwogCiB2b2lkIHByaW50R3JhcGhJZkNvbnZlcnRpbmco
UHJvY2VkdXJlJiBwcm9jZWR1cmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNS
ZWR1Y2VTdHJlbmd0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzUmVkdWNlU3RyZW5ndGguY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzOTIs
NyArMjM5Miw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGtpbGxEZWFkQ29kZSgpCiAgICAgewot
ICAgICAgICBHcmFwaE5vZGVXb3JrbGlzdDxWYWx1ZSosIEluZGV4U2V0PFZhbHVlPj4gd29ya2xp
c3Q7CisgICAgICAgIEdyYXBoTm9kZVdvcmtsaXN0PFZhbHVlKiwgSW5kZXhTZXQ8VmFsdWUqPj4g
d29ya2xpc3Q7CiAgICAgICAgIFZlY3RvcjxVcHNpbG9uVmFsdWUqLCA2ND4gdXBzaWxvbnM7CiAg
ICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2MpIHsKICAgICAgICAgICAgIGZv
ciAoVmFsdWUqIHZhbHVlIDogKmJsb2NrKSB7CkBAIC0yNDI5LDcgKzI0MjksNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgSW5kZXhTZXQ8
VmFyaWFibGU+IGxpdmVWYXJpYWJsZXM7CisgICAgICAgIEluZGV4U2V0PFZhcmlhYmxlKj4gbGl2
ZVZhcmlhYmxlczsKICAgICAgICAgCiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBt
X3Byb2MpIHsKICAgICAgICAgICAgIHNpemVfdCBzb3VyY2VJbmRleCA9IDA7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTU0FDYWxjdWxhdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU1NBQ2FsY3VsYXRvci5oCShyZXZpc2lvbiAyMTQ0Mjcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTU0FDYWxjdWxhdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMTU2LDcgKzE1Niw3IEBAIHByaXZhdGU6CiAgICAgICAgIFZlY3RvcjxEZWYqPiBtX3Bo
aXM7CiAgICAgfTsKICAgICAKLSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBCbG9ja0RhdGE+IG1f
ZGF0YTsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgQmxvY2tEYXRhPiBtX2RhdGE7CiAKICAg
ICBEb21pbmF0b3JzKiBtX2RvbWluYXRvcnMgeyBudWxscHRyIH07CiAgICAgUHJvY2VkdXJlJiBt
X3Byb2M7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVc2VDb3VudHMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVc2VDb3VudHMuaAkocmV2aXNp
b24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXNlQ291bnRzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC00OCw3ICs0OCw3IEBAIHByaXZhdGU6CiAgICAgICAgIHVuc2lnbmVk
IG51bVVzaW5nSW5zdHJ1Y3Rpb25zIHsgMCB9OwogICAgIH07CiAgICAgCi0gICAgSW5kZXhNYXA8
VmFsdWUsIENvdW50cz4gbV9jb3VudHM7CisgICAgSW5kZXhNYXA8VmFsdWUqLCBDb3VudHM+IG1f
Y291bnRzOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRl
UmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmNwcAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmlu
Zy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoQjNfSklU
KQogCiAjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckZpeFNwaWxsc0FmdGVyVGVy
bWluYWxzLmgiCiAjaW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0LmgiCiAjaW5jbHVkZSAiQWlySW5z
dElubGluZXMuaCIKICNpbmNsdWRlICJBaXJMaXZlbmVzcy5oIgpAQCAtMTU4NSw2ICsxNTg2LDkg
QEAgcHJvdGVjdGVkOgogICAgICAgICBtX2NvYWxlc2NpbmdDYW5kaWRhdGVzLmNsZWFyKCk7CiAg
ICAgICAgIG1fd29ya2xpc3RNb3Zlcy5jbGVhcigpOwogCisgICAgICAgIC8vIEZJWE1FOiBJdCBz
ZWVtcyBsaWtlIHdlIGRvbid0IG5lZWQgdG8gcmVjb21wdXRlIGxpdmVuZXNzLiBXZSBqdXN0IG5l
ZWQgdG8gdXBkYXRlIGl0cyBkYXRhCisgICAgICAgIC8vIHN0cnVjdHVyZXMgc28gdGhhdCBpdCBr
bm93cyB0aGF0IHRoZSBuZXdseSBpbnRyb2R1Y2VkIHRlbXBvcmFyaWVzIGFyZSBub3QgbGl2ZSBh
dCBhbnkgYmFzaWMKKyAgICAgICAgLy8gYmxvY2sgYm91bmRhcnkuIFRoaXMgc2hvdWxkIHRyaXZp
YWxseSBiZSB0cnVlIGZvciBub3cuCiAgICAgICAgIFRtcExpdmVuZXNzPGJhbms+IGxpdmVuZXNz
KG1fY29kZSk7CiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsKICAg
ICAgICAgICAgIHR5cGVuYW1lIFRtcExpdmVuZXNzPGJhbms+OjpMb2NhbENhbGMgbG9jYWxDYWxj
KGxpdmVuZXNzLCBibG9jayk7CkBAIC0xNzk4LDcgKzE4MDIsNyBAQCBwdWJsaWM6CiAgICAgICAg
IG1fbnVtSXRlcmF0aW9ucyA9IDA7CiAgICAgICAgIGFsbG9jYXRlT25CYW5rPEZQPigpOwogCi0g
ICAgICAgIGZpeFNwaWxsc0FmdGVyVGVybWluYWxzKCk7CisgICAgICAgIGZpeFNwaWxsc0FmdGVy
VGVybWluYWxzKG1fY29kZSk7CiAKICAgICAgICAgaWYgKHJlcG9ydFN0YXRzKQogICAgICAgICAg
ICAgZGF0YUxvZygiTnVtIGl0ZXJhdGlvbnMgPSAiLCBtX251bUl0ZXJhdGlvbnMsICJcbiIpOwpA
QCAtMTk1NCw3ICsxOTU4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgICAgICBpbnN0LmZvckVhY2hUbXBGYXN0KFsmXSAoVG1wJiB0bXApIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHRtcC5pc1JlZygpIHx8IHRtcC5pc0dQKCkgPT0gKGJhbmsgIT0gR1Ap
KQorICAgICAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkgfHwgdG1wLmJhbmsoKSAhPSBi
YW5rKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICAgICAg
ICAgIFRtcCBhbGlhc1RtcCA9IGFsbG9jYXRvci5nZXRBbGlhcyh0bXApOwpAQCAtMjE1Myw2ICsy
MTU3LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgICAgICAgICB0bXAgPSBtX2NvZGUubmV3
VG1wKGJhbmspOworICAgICAgICAgICAgICAgICAgICB1bnNwaWxsYWJsZVRtcHMuYWRkKEFic29s
dXRlVG1wTWFwcGVyPGJhbms+OjphYnNvbHV0ZUluZGV4KHRtcCkpOworICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT0gQXJnOjpTY3JhdGNoKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgICAgICAgICAgICAgIFdpZHRo
IHNwaWxsV2lkdGggPSBtX3RtcFdpZHRoLnJlcXVpcmVkV2lkdGgodG1wKTsKICAgICAgICAgICAg
ICAgICAgICAgT3Bjb2RlIG1vdmUgPSBPb3BzOwogICAgICAgICAgICAgICAgICAgICBzd2l0Y2gg
KHN0YWNrU2xvdE1pbmltdW1XaWR0aChzcGlsbFdpZHRoKSkgewpAQCAtMjE2NywxMSArMjE3Nyw4
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIHRtcCA9IG1fY29kZS5uZXdUbXAoYmFu
ayk7Ci0gICAgICAgICAgICAgICAgICAgIHVuc3BpbGxhYmxlVG1wcy5hZGQoQWJzb2x1dGVUbXBN
YXBwZXI8YmFuaz46OmFic29sdXRlSW5kZXgodG1wKSk7Ci0KICAgICAgICAgICAgICAgICAgICAg
QXJnIGFyZyA9IEFyZzo6c3RhY2soc3RhY2tTbG90RW50cnktPnZhbHVlKTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKEFyZzo6aXNBbnlVc2Uocm9sZSkgJiYgcm9sZSAhPSBBcmc6OlNjcmF0Y2gp
CisgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzQW55VXNlKHJvbGUpKQogICAgICAgICAg
ICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydChpbnN0SW5kZXgsIG1vdmUsIGluc3Qu
b3JpZ2luLCBhcmcsIHRtcCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzQW55RGVm
KHJvbGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydChpbnN0
SW5kZXggKyAxLCBtb3ZlLCBpbnN0Lm9yaWdpbiwgdG1wLCBhcmcpOwpAQCAtMjE4Nyw2NiArMjE5
NCw2IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAKLSAgICB2b2lkIGZpeFNwaWxsc0Fm
dGVyVGVybWluYWxzKCkKLSAgICB7Ci0gICAgICAgIC8vIEJlY2F1c2UgdGhlcmUgbWF5IGJlIHRl
cm1pbmFscyB0aGF0IHByb2R1Y2UgdmFsdWVzLCBJUkMgbWF5Ci0gICAgICAgIC8vIHdhbnQgdG8g
c3BpbGwgdGhvc2UgdGVybWluYWxzLiBJdCdsbCBoYXBwZW4gdG8gc3BpbGwgaXQgYWZ0ZXIKLSAg
ICAgICAgLy8gdGhlIHRlcm1pbmFsLiBJZiB3ZSBsZWZ0IHRoZSBncmFwaCBpbiB0aGlzIHN0YXRl
LCBpdCdkIGJlIGludmFsaWQKLSAgICAgICAgLy8gYmVjYXVzZSBhIHRlcm1pbmFsIG11c3QgYmUg
dGhlIGxhc3QgaW5zdHJ1Y3Rpb24gaW4gYSBibG9jay4KLSAgICAgICAgLy8gV2UgZml4IHRoYXQg
aGVyZS4KLQotICAgICAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KG1fY29kZSk7Ci0KLSAg
ICAgICAgYm9vbCBhZGRlZEJsb2NrcyA9IGZhbHNlOwotCi0gICAgICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBtX2NvZGUpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHRlcm1pbmFsSW5kZXgg
PSBibG9jay0+c2l6ZSgpOwotICAgICAgICAgICAgYm9vbCBmb3VuZFRlcm1pbmFsID0gZmFsc2U7
Ci0gICAgICAgICAgICB3aGlsZSAodGVybWluYWxJbmRleC0tKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKGJsb2NrLT5hdCh0ZXJtaW5hbEluZGV4KS5pc1Rlcm1pbmFsKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgZm91bmRUZXJtaW5hbCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEFTU0VSVF9V
TlVTRUQoZm91bmRUZXJtaW5hbCwgZm91bmRUZXJtaW5hbCk7Ci0KLSAgICAgICAgICAgIGlmICh0
ZXJtaW5hbEluZGV4ID09IGJsb2NrLT5zaXplKCkgLSAxKQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgICAgICAvLyBUaGVyZSBtdXN0IGJlIGluc3RydWN0aW9ucyBhZnRlciB0
aGUgdGVybWluYWwgYmVjYXVzZSBpdCdzIG5vdCB0aGUgbGFzdCBpbnN0cnVjdGlvbi4KLSAgICAg
ICAgICAgIEFTU0VSVCh0ZXJtaW5hbEluZGV4IDwgYmxvY2stPnNpemUoKSAtIDEpOwotICAgICAg
ICAgICAgVmVjdG9yPEluc3QsIDE+IGluc3RzVG9Nb3ZlOwotICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gdGVybWluYWxJbmRleCArIDE7IGkgPCBibG9jay0+c2l6ZSgpOyBpKyspCi0gICAg
ICAgICAgICAgICAgaW5zdHNUb01vdmUuYXBwZW5kKGJsb2NrLT5hdChpKSk7Ci0gICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChpbnN0c1RvTW92ZS5zaXplKCkpOwotCi0gICAgICAgICAgICBmb3Ig
KEZyZXF1ZW50ZWRCbG9jayYgZnJlcXVlbnRlZFN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3Jz
KCkpIHsKLSAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBmcmVxdWVudGVk
U3VjY2Vzc29yLmJsb2NrKCk7Ci0gICAgICAgICAgICAgICAgLy8gSWYgc3VjY2Vzc29yJ3Mgb25s
eSBwcmVkZWNlc3NvciBpcyBibG9jaywgd2UgY2FuIHBsYW50IHRoZSBzcGlsbCBpbnNpZGUKLSAg
ICAgICAgICAgICAgICAvLyB0aGUgc3VjY2Vzc29yLiBPdGhlcndpc2UsIHdlIG11c3Qgc3BsaXQg
dGhlIGNyaXRpY2FsIGVkZ2UgYW5kIGNyZWF0ZQotICAgICAgICAgICAgICAgIC8vIGEgbmV3IGJs
b2NrIGZvciB0aGUgc3BpbGwuCi0gICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3Nvci0+bnVtUHJl
ZGVjZXNzb3JzKCkgPT0gMSkgewotICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5z
ZXJ0SW5zdHMoMCwgaW5zdHNUb01vdmUpOwotICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25T
ZXQuZXhlY3V0ZShzdWNjZXNzb3IpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGFkZGVkQmxvY2tzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgLy8g
RklYTUU6IFdlIHByb2JhYmx5IHdhbnQgYmV0dGVyIGJsb2NrIG9yZGVyaW5nIGhlcmUuCi0gICAg
ICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIG5ld0Jsb2NrID0gbV9jb2RlLmFkZEJsb2NrKCk7
Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgSW5zdCYgaW5zdCA6IGluc3RzVG9Nb3Zl
KQotICAgICAgICAgICAgICAgICAgICAgICAgbmV3QmxvY2stPmFwcGVuZEluc3QoaW5zdCk7Ci0g
ICAgICAgICAgICAgICAgICAgIG5ld0Jsb2NrLT5hcHBlbmRJbnN0KEluc3QoSnVtcCwgaW5zdHNU
b01vdmUubGFzdCgpLm9yaWdpbikpOwotICAgICAgICAgICAgICAgICAgICBuZXdCbG9jay0+c3Vj
Y2Vzc29ycygpLmFwcGVuZChzdWNjZXNzb3IpOwotICAgICAgICAgICAgICAgICAgICBmcmVxdWVu
dGVkU3VjY2Vzc29yLmJsb2NrKCkgPSBuZXdCbG9jazsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJsb2NrLT5yZXNpemUodGVybWluYWxJbmRleCArIDEp
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGFkZGVkQmxvY2tzKQotICAgICAgICAgICAgbV9j
b2RlLnJlc2V0UmVhY2hhYmlsaXR5KCk7Ci0gICAgfQotCiAgICAgQ29kZSYgbV9jb2RlOwogICAg
IFRtcFdpZHRoIG1fdG1wV2lkdGg7CiAgICAgVXNlQ291bnRzPFRtcD4mIG1fdXNlQ291bnRzOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5
TGluZWFyU2Nhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5jcHAJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFy
U2Nhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MjMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaCIKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlyRml4U3BpbGxzQWZ0
ZXJUZXJtaW5hbHMuaCIKKyNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJB
aXJJbnN0SW5saW5lcy5oIgorI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgiCisjaW5jbHVkZSAiQWly
UGFkSW50ZXJmZXJlbmNlLmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgorI2luY2x1ZGUg
IkFpclRtcElubGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKyNpbmNsdWRlIDx3
dGYvUmFuZ2UuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBB
aXIgeworCituYW1lc3BhY2UgeworCit0eXBlZGVmIFJhbmdlPHNpemVfdD4gSW50ZXJ2YWw7CisK
K3N0cnVjdCBUbXBEYXRhIHsKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
KyAgICB7CisgICAgICAgIG91dC5wcmludCgie2ludGVydmFsID0gIiwgaW50ZXJ2YWwsICIsIHNw
aWxsZWQgPSAiLCBwb2ludGVyRHVtcChzcGlsbGVkKSwgIiwgYXNzaWduZWQgPSAiLCBhc3NpZ25l
ZCwgIn0iKTsKKyAgICB9CisgICAgCisgICAgdm9pZCB2YWxpZGF0ZSgpCisgICAgeworICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghKHNwaWxsZWQgJiYgYXNzaWduZWQpKTsKKyAgICB9CisgICAgCisg
ICAgSW50ZXJ2YWwgaW50ZXJ2YWw7CisgICAgU3RhY2tTbG90KiBzcGlsbGVkOworICAgIFJlZyBh
c3NpZ25lZDsKK307CisKK3N0cnVjdCBDbG9iYmVyIHsKKyAgICBDbG9iYmVyKCkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIENsb2JiZXIoc2l6ZV90IGluZGV4LCBSZWcgcmVnKQorICAgICAgICA6
IGluZGV4KGluZGV4KQorICAgICAgICAsIHJlZyhyZWcpCisgICAgeworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIG91dC5w
cmludChpbmRleCwgIjoiLCByZWcpOworICAgIH0KKyAgICAKKyAgICBzaXplX3QgaW5kZXggeyAw
IH07CisgICAgUmVnIHJlZzsKK307CisKK2NsYXNzIFRtcE9yQ2xvYmJlciB7CitwdWJsaWM6Cisg
ICAgVG1wT3JDbG9iYmVyKCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFRtcE9yQ2xvYmJlcihD
bG9iYmVyIGNsb2JiZXIpCisgICAgICAgIDogbV9pc0Nsb2JiZXIodHJ1ZSkKKyAgICAgICAgLCBt
X3JlZyhjbG9iYmVyLnJlZykKKyAgICAgICAgLCBtX3ZhbHVlKGNsb2JiZXIuaW5kZXgpCisgICAg
eworICAgIH0KKyAgICAKKyAgICBUbXBPckNsb2JiZXIoVG1wIHRtcCkKKyAgICAgICAgOiBtX2lz
Q2xvYmJlcihmYWxzZSkKKyAgICAgICAgLCBtX3ZhbHVlKHRtcC5pbnRlcnZhbFZhbHVlKCkpCisg
ICAgeworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVG1wT3JDbG9iYmVy
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2lzQ2xvYmJlciA9PSBvdGhl
ci5tX2lzQ2xvYmJlcgorICAgICAgICAgICAgJiYgbV9yZWcgPT0gb3RoZXIubV9yZWcKKyAgICAg
ICAgICAgICYmIG1fdmFsdWUgPT0gb3RoZXIubV92YWx1ZTsKKyAgICB9CisgICAgCisgICAgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IFRtcE9yQ2xvYmJlciYgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1bnIgISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0
IG9wZXJhdG9yIGJvb2woKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzICE9IFRt
cE9yQ2xvYmJlcigpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzVG1wKCkgY29uc3QgeyByZXR1
cm4gKnRoaXMgJiYgIW1faXNDbG9iYmVyOyB9CisgICAgYm9vbCBpc0Nsb2JiZXIoKSBjb25zdCB7
IHJldHVybiAqdGhpcyAmJiBtX2lzQ2xvYmJlcjsgfQorICAgIAorICAgIFRtcCB0bXAoKSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzVG1wKCkpOworICAgICAgICByZXR1cm4gVG1wOjp0
bXBGb3JJbnRlcm5hbFZhbHVlKG1fdmFsdWUpOworICAgIH0KKyAgICBDbG9iYmVyIGNsb2JiZXIo
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzQ2xvYmJlcigpKTsKKyAgICAgICAgcmV0
dXJuIENsb2JiZXIobV92YWx1ZSwgbV9yZWcpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghKnRoaXMpIHsKKyAg
ICAgICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKGlzVG1wKCkpIHsKKyAgICAgICAgICAgIG91dC5wcmludCh0bXAo
KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgb3V0LnByaW50KGNs
b2JiZXIoKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIGJvb2wgbV9pc0Nsb2JiZXIgeyB0
cnVlIH07CisgICAgUmVnIG1fcmVnOworICAgIHNpemVfdCBtX3ZhbHVlIHsgMCB9OworfTsKKwor
dGVtcGxhdGU8QmFuayBiYW5rPgorY2xhc3MgTGluZWFyU2NhbiB7CitwdWJsaWM6CisgICAgTGlu
ZWFyU2NhbihDb2RlJiBjb2RlKQorICAgICAgICA6IG1fY29kZShjb2RlKQorICAgICAgICAsIG1f
c3RhY2tJbmRleChjb2RlLnNpemUoKSkKKyAgICAgICAgLCBtX21hcChjb2RlLm51bVRtcHMoYmFu
aykpCisgICAgICAgICwgbV9pbnNlcnRpb25TZXRzKGNvZGUuc2l6ZSgpLCBjb2RlKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgdm9pZCBydW4oKQorICAgIHsKKyAgICAgICAgYnVpbGRJbmRpY2Vz
KCk7CisgICAgICAgIGJ1aWxkSW50ZXJ2YWxzKCk7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAg
ICAgICAgIHByZXBhcmVJbnRlcnZhbHMoKTsKKyAgICAgICAgICAgIGlmIChhdHRlbXB0U2Nhbigp
KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZW1pdFNwaWxsQ29kZSgpOwor
ICAgICAgICB9CisgICAgICAgIGFzc2lnblJlZ2lzdGVycygpOworICAgICAgICBpbnNlcnRTcGls
bENvZGUoKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHZvaWQgYnVpbGRJbmRpY2VzKCkK
KyAgICB7CisgICAgICAgIHNpemVfdCBpbmRleCA9IDA7CisgICAgICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBtX2NvZGUpIHsKKyAgICAgICAgICAgIG1fc3RhcnRJbmRleFtibG9ja10gPSBp
bmRleDsKKyAgICAgICAgICAgIGluZGV4ICs9IGJsb2NrLT5zaXplKCkgKiAyOworICAgICAgICB9
CisgICAgfQorICAgIAorICAgIHNpemVfdCBpbmRleE9mSGVhZChCYXNpY0Jsb2NrKiBibG9jaykK
KyAgICB7CisgICAgICAgIHJldHVybiBtX3N0YXJ0SW5kZXhbYmxvY2tdOworICAgIH0KKyAgICAK
KyAgICBzaXplX3QgaW5kZXhPZlRhaWwoQmFzaWNCbG9jayogYmxvY2spCisgICAgeworICAgICAg
ICByZXR1cm4gaW5kZXhPZkhlYWQoYmxvY2spICsgYmxvY2stPnNpemUoKSAqIDIgLSAxOworICAg
IH0KKyAgICAKKyAgICBzaXplX3QgaW5kZXhPZihCYXNpY0Jsb2NrKiBibG9jaywgdW5zaWduZWQg
aW5zdEluZGV4LCBBcmc6OlBoYXNlIHBoYXNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGluZGV4
T2ZIZWFkKGJsb2NrKSArIGluc3RJbmRleCAqIDIgKyBwaGFzZTsKKyAgICB9CisgICAgCisgICAg
SW50ZXJ2YWwgaW50ZXJ2YWwoc2l6ZV90IGluZGV4T2ZFYXJseSwgQXJnOjpUaW1pbmcgdGltaW5n
KQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0aW1pbmcpIHsKKyAgICAgICAgY2FzZSBBcmc6Ok9u
bHlFYXJseToKKyAgICAgICAgICAgIHJldHVybiBJbnRlcnZhbChpbmRleE9mRWFybHkpOworICAg
ICAgICBjYXNlIEFyZzo6T25seUxhdGU6CisgICAgICAgICAgICByZXR1cm4gSW50ZXJ2YWwoaW5k
ZXhPZkVhcmx5ICsgMSk7CisgICAgICAgIGNhc2UgQXJnOjpFYXJseUFuZExhdGU6CisgICAgICAg
ICAgICByZXR1cm4gSW50ZXJ2YWwoaW5kZXhPZkVhcmx5LCBpbmRleE9mRWFybHkgKyAyKTsKKyAg
ICAgICAgfQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIElu
dGVydmFsKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgYnVpbGRJbnRlcnZhbHMoKQorICAgIHsK
KyAgICAgICAgVG1wTGl2ZW5lc3M8YmFuaz4gbGl2ZW5lc3MobV9jb2RlKTsKKyAgICAgICAgCisg
ICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgICAgICBzaXpl
X3QgaW5kZXhPZkhlYWQgPSB0aGlzLT5pbmRleE9mSGVhZChibG9jayk7CisgICAgICAgICAgICBz
aXplX3QgaW5kZXhPZlRhaWwgPSB0aGlzLT5pbmRleE9mVGFpbChibG9jayk7CisgICAgICAgICAg
ICBmb3IgKFRtcCB0bXAgOiBsaXZlbmVzcy5saXZlQXRIZWFkKGJsb2NrKSkKKyAgICAgICAgICAg
ICAgICBtX21hcFt0bXBdLmludGVydmFsIHw9IEludGVydmFsKGluZGV4T2ZIZWFkKTsKKyAgICAg
ICAgICAgIGZvciAoVG1wIHRtcCA6IGxpdmVuZXNzLmxpdmVBdFRhaWwoYmxvY2spKQorICAgICAg
ICAgICAgICAgIG1fbWFwW3RtcF0uaW50ZXJ2YWwgfD0gSW50ZXJ2YWwoaW5kZXhPZlRhaWwpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IDA7IGlu
c3RJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsraW5zdEluZGV4KSB7CisgICAgICAgICAgICAgICAg
SW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOworICAgICAgICAgICAgICAgIHNpemVf
dCBpbmRleE9mRWFybHkgPSBpbmRleE9mSGVhZCArIGluc3RJbmRleCAqIDI7CisgICAgICAgICAg
ICAgICAgaW5zdC5mb3JFYWNoVG1wKAorICAgICAgICAgICAgICAgICAgICBbJl0gKFRtcCYgdG1w
LCBBcmc6OlJvbGUgcm9sZSwgQmFuayB0bXBCYW5rLCBXaWR0aCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHRtcC5pc1JlZygpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gRklYTUU6IFdlIG5lZWQgdG8gdHJhY2sgdGhlIHJlZ2lzdGVycyBpbiBzdWNoIGEgd2F5IHRo
YXQgaW50ZXJ2YWxzIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWN0dWFsIGxp
dmVuZXNzIGFyZSByZWNvcmRlZC4gVGhpcyBjYW4ndCBiZSBkb25lIGJ5IHwnaW5nIHRoZSByYW5n
ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2luY2UgdGhhdCB3b3VsZCBjYXVz
ZSBlYWNoIHJlZ2lzdGVyIHRvIGhhdmUgYSByYW5nZSB0aGF0IGV4dGVuZHMgb3ZlcgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSB3aG9sZSBwcm9jZWR1cmUuIEl0IHdvdWxkIG1l
YW4sIGZvciBleGFtcGxlLCB0aGF0IGFsbCB2b2xhdGlsZQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHJlZ2lzdGVycyB3b3VsZCBiZSBvZmYtbGltaXRzIHRvIGFsbCByZWdpc3RlciBh
bGxvY2F0aW9uLiBUaGF0J3Mgbm90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ29p
bmcgdG8gd29yay4gSW5zdGVhZCwgd2UgbmVlZCB0byB0cmFjayB0aGVzZSBsaXR0bGUgaGljY3Vw
cyBvZiByZWdpc3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxpdmVuZXNzIGFz
IGluZGVwZW5kZW50IGxpdmUgcmFuZ2VzLiBXZSBjYW4gY2FsbCB0aGVtICJjbG9iYmVycyIuIFRo
ZXkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlYWNoIGFjdCBhcyB0aGVpciBvd24g
bGl0dGxlIGludGVydmFsLiBUaGUgdHJpY2sgaXMgcmVjb3JkaW5nIHRob3NlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gc2VwYXJhdGUgaW50ZXJ2YWxzLiBUaGlzIGlzIGVhc3kgaWYg
eW91IHNvbWVob3cgdHJhY2sgbGl2ZSByZWdpc3RlcnMKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBzZXBhcmF0ZWx5IGluIHRoZSBsaXZlbmVzcyBhbmFseXNpcywgc28gdGhhdCB5b3Ug
Y291bGQgYWx3YXlzIGl0ZXJhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvdmVy
IHRoZW0uIEkgdGhpbmsgdGhhdCB0aGUgd2F5IHRvIGRvIHRoaXMgaXMgdG8gY2F1c2UgTGl2ZW5l
c3MgdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0ZW1wbGF0aXphYmxlIG92
ZXIgdGhlIHdvcmtzZXQgaXQgdXNlcy4gVGhlbiB3ZSBjYW4gc3dhcCBpbiBvdXIgb3duIHNldAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgc2VncmVnYXRlcyBsaXZlIHJlZ3Mg
YW5kIGxpdmUgdG1wcyBpbnRvIHR3byBzZXBhcmF0ZSB0aGluZ3MuIFdlJ3JlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gbGl0ZXJhbGx5IHRhbGtpbmcgYWJvdXQgcHV0dGluZyB0aGUg
UmVncyBpbnRvIGEgc2VwYXJhdGUgdmFsdWUgbGlzdCBvcgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGJpdHZlY3RvciAtIHdoaWNoZXZlciB3b3JrcyBiZXR0ZXIuIEluIHRoaXMgd29y
bGQsIGVhY2ggQ2xvYmJlciB3b3VsZCBoYXZlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gYSBSZWdpc3RlclNldCBhbmQgYW4gaW5kZXguIEFueXRpbWUgd2UgZW5jb3VudGVyIGFuIElu
c3Qgd2hlcmUgdGhlIGxpdmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWdpc3Rl
clNldCBpcyBub3QgZW1wdHksIHdlIGNhbiBlbnF1ZXVlIGEgQ2xvYmJlci4gUHJvY2Vzc2luZyBD
bG9iYmVycworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpbXVsYXRlcyB0aGUgYmly
dGggYW5kIGRlYXRoIG9mIGFsbCBvZiB0aG9zZSByZWdpc3RlcnMuIFRoaXMgbWVhbnMgdGhhdAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZXkgZ2V0IHBsYWNlZCBpbnRvIHRoZSBh
Y3RpdmUgc2V0IChkaXJlY3RseSBhcyBSZWdzIHdyYXBwZWQgaW4gVG1wKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyB3aGljaCBwcmVjbHVkZXMgdGhlbSBmcm9tIGJlaW5nIHVzZWQg
Zm9yIGFsbG9jYXRpb24gb2YgYW55IG90aGVyIHRtcHMuCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9jbG9iYmVycy5hcHBlbmQoQ2xvYmJlciguLi4pKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXBCYW5rICE9IGJhbmspCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAg
ICAgbV9tYXBbdG1wXS5pbnRlcnZhbCB8PSBpbnRlcnZhbChpbmRleE9mRWFybHksIEFyZzo6dGlt
aW5nKHJvbGUpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBwcmVwYXJlSW50ZXJ2YWxzKCkKKyAgICB7Cisg
ICAgICAgIG1faW50ZXJ2YWxzLnJlc2l6ZSgwKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCB0bXBJ
bmRleCA9IDA7IHRtcEluZGV4IDwgbV9jb2RlLm51bVRtcHMoYmFuayk7ICsrdG1wSW5kZXgpIHsK
KyAgICAgICAgICAgIFRtcCB0bXAgPSBUbXA6OnRtcEZvckluZGV4KGJhbmssIHRtcEluZGV4KTsK
KyAgICAgICAgICAgIGlmIChtX21hcFt0bXBdLnNwaWxsZWQpCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1faW50ZXJ2YWxzLmFwcGVuZCh0bXAp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGQ6OnNvcnQoCisgICAgICAgICAgICBt
X2ludGVydmFscy5iZWdpbigpLCBtX2ludGVydmFscy5lbmQoKSwKKyAgICAgICAgICAgIFsmXSAo
VG1wIGEsIFRtcCBiKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fbWFwW2FdLmludGVydmFs
LmJlZ2luKCkgPCBtX21hcFtiXS5pbnRlcnZhbC5iZWdpbigpOworICAgICAgICAgICAgfSk7Cisg
ICAgfQorICAgIAorICAgIFRtcCBhZGRUbXBXaXRoSW50ZXJ2YWwoSW50ZXJ2YWwgaW50ZXJ2YWwp
CisgICAgeworICAgICAgICBUbXBEYXRhIGRhdGE7CisgICAgICAgIGRhdGEuaW50ZXJ2YWwgPSBp
bnRlcnZhbDsKKyAgICAgICAgCisgICAgICAgIFRtcCB0bXAgPSBtX2NvZGUubmV3VG1wKGJhbmsp
OworICAgICAgICBtX21hcC5hcHBlbmQodG1wLCBkYXRhKTsKKyAgICAgICAgcmV0dXJuIHRtcDsK
KyAgICB9CisgICAgCisgICAgYm9vbCBhdHRlbXB0U2NhbigpCisgICAgeworICAgICAgICBib29s
IGRpZFNwaWxsID0gZmFsc2U7CisgICAgICAgIG1fYWN0aXZlLmNsZWFyKCk7CisgICAgICAgIGNv
bnN0IFZlY3RvcjxSZWc+JiByZWdzID0gbV9jb2RlLnJlZ3NJblByaW9yaXR5T3JkZXIoYmFuayk7
CisgICAgICAgIGZvciAoVG1wIHRtcCA6IG1faW50ZXJ2YWxzKSB7CisgICAgICAgICAgICAvLyBF
eHBpcmUgb2xkIGludGVydmFscy4KKyAgICAgICAgICAgIHdoaWxlICghbV9hY3RpdmUuaXNFbXB0
eSgpKSB7CisgICAgICAgICAgICAgICAgVG1wIHRtcCA9IG1fYWN0aXZlLmZpcnN0KCk7CisgICAg
ICAgICAgICAgICAgVG1wRGF0YSYgZW50cnkgPSBtX2RhdGFbdG1wXTsKKyAgICAgICAgICAgICAg
ICBpZiAoZW50cnkuaW50ZXJ2YWwuZW5kKCkKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gIWRpZFNwaWxsOworICAgIH0KKyAgICAKKyAgICB2b2lkIGFzc2lnbihUbXAg
dG1wLCBSZWcgcmVnKQorICAgIHsKKyAgICAgICAgVG1wRGF0YSYgZW50cnkgPSBtX21hcFt0bXBd
OworICAgICAgICBSRUxFQVNFX0FTU0VSVCghZW50cnkuc3BpbGxlZCk7CisgICAgICAgIGVudHJ5
LmFzc2lnbmVkID0gcmVnOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNwaWxsKFRtcCB0bXApCisg
ICAgeworICAgICAgICBUbXBEYXRhJiBlbnRyeSA9IG1fbWFwW3RtcF07CisgICAgICAgIGVudHJ5
LnNwaWxsZWQgPSBtX2NvZGUuYWRkU3RhY2tTbG90KDgsIFN0YWNrU2xvdEtpbmQ6OlNwaWxsKTsK
KyAgICAgICAgZW50cnkuYXNzaWduZWQgPSBSZWcoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBl
bWl0U3BpbGxDb2RlKCkKKyAgICB7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBt
X2NvZGUpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gMDsgaW5zdElu
ZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbnN0SW5kZXgpIHsKKyAgICAgICAgICAgICAgICBJbnN0
JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgLy8gRmlyc3QgdHJ5IHRvIHNwaWxsIGRpcmVjdGx5LgorICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgICAgICAgICAgICAgQXJnJiBhcmcgPSBpbnN0LmFyZ3NbaV07CisgICAgICAgICAgICAgICAg
ICAgIGlmICghYXJnLmlzVG1wKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGFyZy5pc1JlZygpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIGlmIChhcmcuYmFuaygpICE9IGJh
bmspCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAg
ICAgU3RhY2tTbG90KiBzcGlsbGVkID0gbV9tYXBbYXJnLnRtcCgpXS5zcGlsbGVkOworICAgICAg
ICAgICAgICAgICAgICBpZiAoIXNwaWxsZWQpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpbnN0LmFkbWl0c1N0YWNrKGkpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIGFyZyA9
IEFyZzo6c3RhY2soc3BpbGxlZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIC8vIEZhbGwgYmFjayBvbiB0aGUgaGFyZCB3YXkuCisgICAgICAg
ICAgICAgICAgaW5zdC5mb3JFYWNoVG1wKAorICAgICAgICAgICAgICAgICAgICBbJl0gKFRtcCYg
dG1wLCBBcmc6OlJvbGUgcm9sZSwgQmFuayB0bXBCYW5rLCBXaWR0aCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHRtcC5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXBCYW5rICE9IGJhbmspCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAg
ICAgU3RhY2tTbG90KiBzcGlsbGVkID0gbV9tYXBbdG1wXS5zcGlsbGVkOworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFzcGlsbGVkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgT3Bjb2RlIG1vdmUgPSBiYW5rID09IEdQ
ID8gTW92ZSA6IE1vdmVEb3VibGU7CisgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSBhZGRU
bXBXaXRoSW50ZXJ2YWwoaW50ZXJ2YWxPZihibG9jaywgaW5zdEluZGV4LCBBcmc6OnRpbWluZyhy
b2xlKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT0gQXJnOjpTY3JhdGNo
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChBcmc6OmlzQW55VXNlKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGluc2VydGlvblNldHNbYmxvY2tdLmluc2VydChpbnN0SW5kZXgsIG1vdmUsIGluc3Qub3Jn
aW4sIEFyZzo6c3RhY2soc3BpbGxlZCksIHRtcCk7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoQXJnOjppc0FueURlZihyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNl
cnRpb25TZXRzW2Jsb2NrXS5pbnNlcnQoaW5zdEluZGV4ICsgMSwgbW92ZSwgaW5zdC5vcmlnaW4s
IHRtcCwgQXJnOjpzdGFjayhzcGlsbGVkKSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgYXNzaWduUmVnaXN0
ZXJzKCkKKyAgICB7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsK
KyAgICAgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6ICpibG9jaykgeworICAgICAgICAgICAgICAg
IGluc3QuZm9yRWFjaFRtcEZhc3QoCisgICAgICAgICAgICAgICAgICAgIFsmXSAoVG1wJiB0bXAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1w
LmJhbmsoKSAhPSBiYW5rKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgUmVnIHJlZyA9
IG1fbWFwW3RtcF0uYXNzaWduZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChyZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gVG1wKHJlZyk7CisgICAg
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAg
IAorICAgIHZvaWQgaW5zZXJ0U3BpbGxDb2RlKCkKKyAgICB7CisgICAgICAgIGZvciAoQmFzaWNC
bG9jayogYmxvY2sgOiBtX2NvZGUpCisgICAgICAgICAgICBtX2luc2VydGlvblNldHNbYmxvY2td
LmV4ZWN1dGUoYmxvY2spOworICAgIH0KKyAgICAKKyAgICBDb2RlJiBtX2NvZGU7CisgICAgSW5k
ZXhNYXA8QmFzaWNCbG9jayosIHNpemVfdD4gbV9zdGFja0luZGV4OworICAgIEluZGV4TWFwPFRt
cDo6SW5kZXhlZDxiYW5rPiwgVG1wRGF0YT4gbV9tYXA7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9j
ayosIEluc2VydGlvblNldD4gbV9pbnNlcnRpb25TZXRzOworICAgIFZlY3RvcjxDbG9iYmVyPiBt
X2Nsb2JiZXJzOworICAgIFZlY3RvcjxUbXBPckNsb2JiZXI+IG1faW50ZXJ2YWxzOworICAgIERl
cXVlPFRtcD4gbV9hY3RpdmU7Cit9OworCit0ZW1wbGF0ZTxCYW5rIGJhbms+Cit2b2lkIHJ1bkxp
bmVhclNjYW4oQ29kZSYgY29kZSkKK3sKKyAgICBMaW5lYXJTY2FuPGJhbms+IGxpbmVhclNjYW4o
Y29kZSk7CisgICAgbGluZWFyU2Nhbi5pbXBsKCk7Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVz
cGFjZQorCit2b2lkIGFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuKENvZGUmIGNvZGUpCit7
CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJhbGxvY2F0ZVJlZ2lzdGVyc0J5TGlu
ZWFyU2NhbiIpOworICAgIHBhZEludGVyZmVyZW5jZShjb2RlKTsKKyAgICBydW5MaW5lYXJTY2Fu
PEZQPihjb2RlKTsKKyAgICBydW5MaW5lYXJTY2FuPEdQPihjb2RlKTsKKyAgICBmaXhTcGlsbHNB
ZnRlclRlcm1pbmFscyhjb2RlKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFp
cgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5l
YXJTY2FuLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJDUFUuaCIKKyNp
bmNsdWRlICJPcHRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1l
c3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKworLy8gVGhpcyBpbXBsZW1lbnRzIHRoZSBQb2xl
dHRvIGFuZCBTYXJrZXIgcmVnaXN0ZXIgYWxsb2NhdG9yIGNhbGxlZCAibGluZWFyIHNjYW4iOgor
Ly8gaHR0cDovL2RsLmFjbS5vcmcvY2l0YXRpb24uY2ZtP2lkPTMzMDI1MAorLy8KKy8vIFRoaXMg
aXMgbm90IEFpcidzIHByaW1hcnkgcmVnaXN0ZXIgYWxsb2NhdG9yLiBXZSB1c2UgaXQgb25seSB3
aGVuIHJ1bm5pbmcgYXQgb3B0TGV2ZWw9MC4gVGhhdCdzIG5vdAorLy8gdGhlIGRlZmF1bHQgbGV2
ZWwuIFRoaXMgcmVnaXN0ZXIgYWxsb2NhdG9yIGlzIG9wdGltaXplZCBwcmltYXJpbHkgZm9yIHJ1
bm5pbmcgcXVpY2tseS4gSXQncyBleHBlY3RlZAorLy8gdGhhdCBpbXByb3ZlbWVudHMgdG8gdGhp
cyByZWdpc3RlciBhbGxvY2F0b3Igc2hvdWxkIGZvY3VzIHByaW1hcmlseSBvbiBpbXByb3Zpbmcg
aXRzIGV4ZWN1dGlvbiB0aW1lCisvLyB3aXRob3V0IG11Y2ggcmVnYXJkIGZvciB0aGUgcXVhbGl0
eSBvZiBnZW5lcmF0ZWQgY29kZS4KKy8vCisvLyBGb3IgQWlyJ3MgcHJpbWFyeSByZWdpc3RlciBh
bGxvY2F0b3IsIHNlZSBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5ofGNwcC4K
K3ZvaWQgYWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4oQ29kZSYpOworCit9IH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3Bw
CShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFs
bG9jYXRlU3RhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjEsNyArMTYxLDcgQEAgdm9pZCBh
bGxvY2F0ZVN0YWNrKENvZGUmIGNvZGUpCiAKICAgICAvLyBOb3cgd2UgaGFuZGxlIHRoZSBzcGls
bCBzbG90cy4KICAgICBTdGFja1Nsb3RMaXZlbmVzcyBsaXZlbmVzcyhjb2RlKTsKLSAgICBJbmRl
eE1hcDxTdGFja1Nsb3QsIEhhc2hTZXQ8U3RhY2tTbG90Kj4+IGludGVyZmVyZW5jZShjb2RlLnN0
YWNrU2xvdHMoKS5zaXplKCkpOworICAgIEluZGV4TWFwPFN0YWNrU2xvdCosIEhhc2hTZXQ8U3Rh
Y2tTbG90Kj4+IGludGVyZmVyZW5jZShjb2RlLnN0YWNrU2xvdHMoKS5zaXplKCkpOwogICAgIFZl
Y3RvcjxTdGFja1Nsb3QqPiBzbG90czsKIAogICAgIC8vIFdlIHdpbGwgcGVyZm9ybSBzb21lIHNw
aWxsIGNvYWxlc2NpbmcuIFRvIG1ha2UgdGhhdCBlZmZlY3RpdmUsIHdlIG5lZWQgdG8gYmUgYWJs
ZSB0byBpZGVudGlmeQpAQCAtMzA5LDcgKzMwOSw3IEBAIHZvaWQgYWxsb2NhdGVTdGFjayhDb2Rl
JiBjb2RlKQogICAgICAgICAgICAgcmV0dXJuIGEuZnJlcXVlbmN5ID4gYi5mcmVxdWVuY3k7CiAg
ICAgICAgIH0pOwogICAgIAotICAgIEluZGV4TWFwPFN0YWNrU2xvdCwgU3RhY2tTbG90Kj4gcmVt
YXBwZWRTdGFja1Nsb3RzKGNvZGUuc3RhY2tTbG90cygpLnNpemUoKSk7CisgICAgSW5kZXhNYXA8
U3RhY2tTbG90KiwgU3RhY2tTbG90Kj4gcmVtYXBwZWRTdGFja1Nsb3RzKGNvZGUuc3RhY2tTbG90
cygpLnNpemUoKSk7CiAgICAgYXV0byByZW1hcCA9IFsmXSAoU3RhY2tTbG90KiBzbG90KSAtPiBT
dGFja1Nsb3QqIHsKICAgICAgICAgaWYgKCFzbG90KQogICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCShyZXZpc2lv
biAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI4Miw2ICsyODIsMjAgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50
U3RyZWFtJiBvdXQsIEFyZwogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAK
K3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBcmc6OlRpbWluZyB0aW1pbmcp
Cit7CisgICAgc3dpdGNoICh0aW1pbmcpIHsKKyAgICBjYXNlIEFyZzo6RWFybHk6CisgICAgICAg
IG91dC5wcmludCgiRWFybHkiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJnOjpMYXRl
OgorICAgICAgICBvdXQucHJpbnQoIkxhdGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKIHZvaWQgcHJpbnRJbnRlcm5h
bChQcmludFN0cmVhbSYgb3V0LCBBcmc6OlJvbGUgcm9sZSkKIHsKICAgICBzd2l0Y2ggKHJvbGUp
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAkocmV2aXNpb24gMjE0
NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAkod29ya2luZyBj
b3B5KQpAQCAtOTIsNiArOTIsMTcgQEAgcHVibGljOgogICAgICAgICBDb2xkLAogICAgICAgICBX
YXJtCiAgICAgfTsKKyAgICAKKyAgICBlbnVtIFBoYXNlIDogaW50OF90IHsKKyAgICAgICAgRWFy
bHksCisgICAgICAgIExhdGUKKyAgICB9OworICAgIAorICAgIGVudW0gVGltaW5nIDogaW50OF90
IHsKKyAgICAgICAgT25seUVhcmx5LAorICAgICAgICBPbmx5TGF0ZSwKKyAgICAgICAgRWFybHlB
bmRMYXRlCisgICAgfTsKIAogICAgIGVudW0gUm9sZSA6IGludDhfdCB7CiAgICAgICAgIC8vIFVz
ZSBtZWFucyB0aGF0IHRoZSBJbnN0IHdpbGwgcmVhZCBmcm9tIHRoaXMgdmFsdWUgYmVmb3JlIGRv
aW5nIGFueXRoaW5nIGVsc2UuCkBAIC0yNTMsNyArMjY0LDgyIEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIHJldHVybiBpc0NvbGRVc2Uocm9sZSkgPyBDb2xkIDogV2FybTsKICAgICB9Ci0KKyAg
ICAKKyAgICBzdGF0aWMgYm9vbCBhY3RpdmVBdChSb2xlIHJvbGUsIFBoYXNlIHBoYXNlKQorICAg
IHsKKyAgICAgICAgc3dpdGNoIChyb2xlKSB7CisgICAgICAgIGNhc2UgVXNlOgorICAgICAgICBj
YXNlIENvbGRVc2U6CisgICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAgIGNhc2UgRWFybHla
RGVmOgorICAgICAgICBjYXNlIFVzZUFkZHI6CisgICAgICAgICAgICByZXR1cm4gcGhhc2UgPT0g
RWFybHk7CisgICAgICAgIGNhc2UgTGF0ZVVzZToKKyAgICAgICAgY2FzZSBMYXRlQ29sZFVzZToK
KyAgICAgICAgY2FzZSBEZWY6CisgICAgICAgIGNhc2UgWkRlZjoKKyAgICAgICAgICAgIHJldHVy
biBwaGFzZSA9PSBMYXRlOworICAgICAgICBjYXNlIFVzZURlZjoKKyAgICAgICAgY2FzZSBVc2Va
RGVmOgorICAgICAgICBjYXNlIFNjcmF0Y2g6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAg
c3RhdGljIGJvb2wgYWN0aXZlQXQoVGltaW5nIHRpbWluZywgUGhhc2UgcGhhc2UpCisgICAgewor
ICAgICAgICBzd2l0Y2ggKHJvbGUpIHsKKyAgICAgICAgY2FzZSBPbmx5RWFybHk6CisgICAgICAg
ICAgICByZXR1cm4gcGhhc2UgPT0gRWFybHk7CisgICAgICAgIGNhc2UgT25seUxhdGU6CisgICAg
ICAgICAgICByZXR1cm4gcGhhc2UgPT0gTGF0ZTsKKyAgICAgICAgY2FzZSBFYXJseUFuZExhdGU6
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFRpbWluZyB0aW1pbmcoUm9sZSBy
b2xlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChyb2xlKSB7CisgICAgICAgIGNhc2UgVXNlOgor
ICAgICAgICBjYXNlIENvbGRVc2U6CisgICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAgIGNh
c2UgRWFybHlaRGVmOgorICAgICAgICBjYXNlIFVzZUFkZHI6CisgICAgICAgICAgICByZXR1cm4g
T25seUVhcmx5OworICAgICAgICBjYXNlIExhdGVVc2U6CisgICAgICAgIGNhc2UgTGF0ZUNvbGRV
c2U6CisgICAgICAgIGNhc2UgRGVmOgorICAgICAgICBjYXNlIFpEZWY6CisgICAgICAgICAgICBy
ZXR1cm4gT25seUxhdGU7CisgICAgICAgIGNhc2UgVXNlRGVmOgorICAgICAgICBjYXNlIFVzZVpE
ZWY6CisgICAgICAgIGNhc2UgU2NyYXRjaDoKKyAgICAgICAgICAgIHJldHVybiBFYXJseUFuZExh
dGU7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAg
IAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgc3RhdGljIHZvaWQgZm9yRWFjaFBo
YXNlKFRpbWluZyB0aW1pbmcsIGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgeworICAgICAgICBpZiAo
YWN0aXZlQXQodGltaW5nLCBFYXJseSkpCisgICAgICAgICAgICBmdW5jKEVhcmx5KTsKKyAgICAg
ICAgaWYgKGFjdGl2ZUF0KHRpbWluZywgTGF0ZSkpCisgICAgICAgICAgICBmdW5jKExhdGUpOwor
ICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIHN0YXRpYyB2b2lk
IGZvckVhY2hQaGFzZShSb2xlIHJvbGUsIGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgeworICAgICAg
ICBpZiAoYWN0aXZlQXQocm9sZSwgRWFybHkpKQorICAgICAgICAgICAgZnVuYyhFYXJseSk7Cisg
ICAgICAgIGlmIChhY3RpdmVBdChyb2xlLCBMYXRlKSkKKyAgICAgICAgICAgIGZ1bmMoTGF0ZSk7
CisgICAgfQorICAgIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgUm9sZSBpbXBsaWVzIHRo
YXQgdGhlIEluc3Qgd2lsbCBVc2UgdGhlIEFyZyBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZS4K
ICAgICBzdGF0aWMgYm9vbCBpc0Vhcmx5VXNlKFJvbGUgcm9sZSkKICAgICB7CkBAIC0xMzU0LDYg
KzE0NDAsNyBAQCBuYW1lc3BhY2UgV1RGIHsKIAogSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6QWlyOjpBcmc6OktpbmQpOwogSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6QWly
OjpBcmc6OlRlbXBlcmF0dXJlKTsKK0pTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJpbnRJbnRlcm5h
bChQcmludFN0cmVhbSYsIEpTQzo6QjM6OkFpcjo6QXJnOjpUaW1pbmcpOwogSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6QWlyOjpBcmc6
OlJvbGUpOwogSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFt
JiwgSlNDOjpCMzo6QWlyOjpBcmc6OlNpZ25lZG5lc3MpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckJsb2NrV29ya2xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJsb2NrV29ya2xpc3QuaAkocmV2aXNpb24gMjE0NDI3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja1dvcmtsaXN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzIsNyArMzIsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsgbmFtZXNwYWNlIEFpciB7CiAKLXR5cGVkZWYgR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9j
ayosIEluZGV4U2V0PEJhc2ljQmxvY2s+PiBCbG9ja1dvcmtsaXN0OwordHlwZWRlZiBHcmFwaE5v
ZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jayo+PiBCbG9ja1dvcmts
aXN0OwogCiAvLyBXaGVuIHlvdSBzYXkgQmxvY2tXaXRoPGludD4geW91IHNob3VsZCByZWFkIGl0
IGFzICJibG9jayB3aXRoIGFuIGludCIuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBCbG9j
a1dpdGggPSBHcmFwaE5vZGVXaXRoPEJhc2ljQmxvY2sqLCBUPjsKQEAgLTQxLDExICs0MSwxMSBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBCbG9ja1dpdGggPSBHCiAvLyBwZXJtaXRzIGZv
cmNpYmx5IGVucXVldWVpbmcgdGhpbmdzIGV2ZW4gaWYgdGhlIGJsb2NrIGhhcyBhbHJlYWR5IGJl
ZW4gc2Vlbi4gSXQncyB1c2VmdWwgZm9yCiAvLyB0aGluZ3MgbGlrZSBidWlsZGluZyBhIHNwYW5u
aW5nIHRyZWUsIGluIHdoaWNoIGNhc2UgVCAodGhlIGF1eGlsaWFyeSBwYXlsb2FkKSB3b3VsZCBi
ZSB0aGUKIC8vIHN1Y2Nlc3NvciBpbmRleC4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5nIEV4
dGVuZGVkQmxvY2tXb3JrbGlzdCA9IEV4dGVuZGVkR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9j
ayosIFQsIEluZGV4U2V0PEJhc2ljQmxvY2s+PjsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5n
IEV4dGVuZGVkQmxvY2tXb3JrbGlzdCA9IEV4dGVuZGVkR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNC
bG9jayosIFQsIEluZGV4U2V0PEJhc2ljQmxvY2sqPj47CiAKIHR5cGVkZWYgR3JhcGhOb2RlV2l0
aE9yZGVyPEJhc2ljQmxvY2sqPiBCbG9ja1dpdGhPcmRlcjsKIAotdHlwZWRlZiBQb3N0T3JkZXJH
cmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IFBvc3RP
cmRlckJsb2NrV29ya2xpc3Q7Cit0eXBlZGVmIFBvc3RPcmRlckdyYXBoTm9kZVdvcmtsaXN0PEJh
c2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+IFBvc3RPcmRlckJsb2NrV29ya2xpc3Q7
CiAKIH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJDRkcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckNGRy5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckNGRy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw4ICszOSw4IEBA
IGNsYXNzIENGRyB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAg
dHlwZWRlZiBCYXNpY0Jsb2NrKiBOb2RlOwotICAgIHR5cGVkZWYgSW5kZXhTZXQ8QmFzaWNCbG9j
az4gU2V0OwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5nIE1hcCA9IEluZGV4TWFwPEJh
c2ljQmxvY2ssIFQ+OworICAgIHR5cGVkZWYgSW5kZXhTZXQ8QmFzaWNCbG9jayo+IFNldDsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBNYXAgPSBJbmRleE1hcDxCYXNpY0Jsb2NrKiwg
VD47CiAgICAgdHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9jayosIDQ+IExpc3Q7CiAKICAgICBDRkco
Q29kZSYgY29kZSkKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogICAgIE5vZGUgcm9vdCgpIHsg
cmV0dXJuIG1fY29kZVswXTsgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBNYXA8
VD4gbmV3TWFwKCkgeyByZXR1cm4gSW5kZXhNYXA8SlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrLCBU
PihtX2NvZGUuc2l6ZSgpKTsgfQorICAgIE1hcDxUPiBuZXdNYXAoKSB7IHJldHVybiBJbmRleE1h
cDxKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2sqLCBUPihtX2NvZGUuc2l6ZSgpKTsgfQogCiAgICAg
U3VjY2Vzc29yQ29sbGVjdGlvbjxCYXNpY0Jsb2NrLCBCYXNpY0Jsb2NrOjpTdWNjZXNzb3JMaXN0
PiBzdWNjZXNzb3JzKE5vZGUgbm9kZSkgeyByZXR1cm4gbm9kZS0+c3VjY2Vzc29yQmxvY2tzKCk7
IH0KICAgICBCYXNpY0Jsb2NrOjpQcmVkZWNlc3Nvckxpc3QmIHByZWRlY2Vzc29ycyhOb2RlIG5v
ZGUpIHsgcmV0dXJuIG5vZGUtPnByZWRlY2Vzc29ycygpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckVsaW1pbmF0ZURlYWRDb2RlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckVsaW1pbmF0ZURlYWRDb2RlLmNwcAkocmV2
aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbGltaW5h
dGVEZWFkQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgYm9vbCBlbGlt
aW5hdGVEZWFkQ29kZShDb2RlJiBjb2RlKQogICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2Rl
LCAiZWxpbWluYXRlRGVhZENvZGUiKTsKIAogICAgIEhhc2hTZXQ8VG1wPiBsaXZlVG1wczsKLSAg
ICBJbmRleFNldDxTdGFja1Nsb3Q+IGxpdmVTdGFja1Nsb3RzOworICAgIEluZGV4U2V0PFN0YWNr
U2xvdCo+IGxpdmVTdGFja1Nsb3RzOwogICAgIGJvb2wgY2hhbmdlZDsKIAogICAgIGF1dG8gaXNB
cmdMaXZlID0gWyZdIChjb25zdCBBcmcmIGFyZykgLT4gYm9vbCB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeE9idmlvdXNTcGlsbHMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4T2J2aW91c1NwaWxscy5jcHAJKHJl
dmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4T2J2
aW91c1NwaWxscy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0Nyw3ICs1NDcsNyBAQCBwcml2YXRl
OgogICAgIH07CiAKICAgICBDb2RlJiBtX2NvZGU7Ci0gICAgSW5kZXhNYXA8QmFzaWNCbG9jaywg
U3RhdGU+IG1fYXRIZWFkOworICAgIEluZGV4TWFwPEJhc2ljQmxvY2sqLCBTdGF0ZT4gbV9hdEhl
YWQ7CiAgICAgU3RhdGUgbV9zdGF0ZTsKICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrIHsgbnVsbHB0
ciB9OwogICAgIHVuc2lnbmVkIG1faW5zdEluZGV4IHsgMCB9OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4UGFydGlhbFJlZ2lzdGVy
U3RhbGxzLmNwcAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJGaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTUsMTAgKzE1NSwxMCBAQCB2b2lkIGZpeFBhcnRpYWxSZWdpc3RlclN0YWxscyhDb2RlJiBjb2Rl
CiAKICAgICAvLyBGb3IgZWFjaCBibG9jaywgdGhpcyBwcm92aWRlcyB0aGUgZGlzdGFuY2UgdG8g
dGhlIGxhc3QgaW5zdHJ1Y3Rpb24gc2V0dGluZyBlYWNoIHJlZ2lzdGVyCiAgICAgLy8gb24gYmxv
Y2sgKmVudHJ5Ki4KLSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBGUERlZkRpc3RhbmNlPiBsYXN0
RGVmRGlzdGFuY2UoY29kZS5zaXplKCkpOworICAgIEluZGV4TWFwPEJhc2ljQmxvY2sqLCBGUERl
ZkRpc3RhbmNlPiBsYXN0RGVmRGlzdGFuY2UoY29kZS5zaXplKCkpOwogCiAgICAgLy8gQmxvY2tz
IHdpdGggZGlydHkgZGlzdGFuY2UgYXQgaGVhZC4KLSAgICBJbmRleFNldDxCYXNpY0Jsb2NrPiBk
aXJ0eTsKKyAgICBJbmRleFNldDxCYXNpY0Jsb2NrKj4gZGlydHk7CiAKICAgICAvLyBGaXJzdCwg
d2UgY29tcHV0ZSB0aGUgbG9jYWwgZGlzdGFuY2UgZm9yIGVhY2ggYmxvY2sgYW5kIHB1c2ggaXQg
dG8gdGhlIHN1Y2Nlc3NvcnMuCiAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4U3BpbGxzQWZ0ZXJUZXJt
aW5hbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
Rml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyRml4U3BpbGxz
QWZ0ZXJUZXJtaW5hbHMuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJC
bG9ja0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJJ
bnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgorI2luY2x1ZGUgIkFp
clRtcElubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFj
ZSBBaXIgeworCit2b2lkIGZpeFNwaWxsc0FmdGVyVGVybWluYWxzKENvZGUmIGNvZGUpCit7Cisg
ICAgLy8gQmVjYXVzZSB0aGVyZSBtYXkgYmUgdGVybWluYWxzIHRoYXQgcHJvZHVjZSB2YWx1ZXMs
IElSQyBtYXkKKyAgICAvLyB3YW50IHRvIHNwaWxsIHRob3NlIHRlcm1pbmFscy4gSXQnbGwgaGFw
cGVuIHRvIHNwaWxsIGl0IGFmdGVyCisgICAgLy8gdGhlIHRlcm1pbmFsLiBJZiB3ZSBsZWZ0IHRo
ZSBncmFwaCBpbiB0aGlzIHN0YXRlLCBpdCdkIGJlIGludmFsaWQKKyAgICAvLyBiZWNhdXNlIGEg
dGVybWluYWwgbXVzdCBiZSB0aGUgbGFzdCBpbnN0cnVjdGlvbiBpbiBhIGJsb2NrLgorICAgIC8v
IFdlIGZpeCB0aGF0IGhlcmUuCisKKyAgICBCTG9ja0luc2VydGlvblNldCBibG9ja0luc2VydGlv
blNldChjb2RlKTsKKyAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KGNvZGUpOworCisgICAg
Zm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgdW5zaWduZWQgdGVybWlu
YWxJbmRleCA9IGJsb2NrLT5zaXplKCk7CisgICAgICAgIGJvb2wgZm91bmRUZXJtaW5hbCA9IGZh
bHNlOworICAgICAgICB3aGlsZSAodGVybWluYWxJbmRleC0tKSB7CisgICAgICAgICAgICBpZiAo
YmxvY2stPmF0KHRlcm1pbmFsSW5kZXgpLmlzVGVybWluYWwoKSkgeworICAgICAgICAgICAgICAg
IGZvdW5kVGVybWluYWwgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIEFTU0VSVF9VTlVTRUQoZm91bmRUZXJtaW5hbCwgZm91
bmRUZXJtaW5hbCk7CisKKyAgICAgICAgaWYgKHRlcm1pbmFsSW5kZXggPT0gYmxvY2stPnNpemUo
KSAtIDEpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBUaGVyZSBtdXN0IGJl
IGluc3RydWN0aW9ucyBhZnRlciB0aGUgdGVybWluYWwgYmVjYXVzZSBpdCdzIG5vdCB0aGUgbGFz
dCBpbnN0cnVjdGlvbi4KKyAgICAgICAgQVNTRVJUKHRlcm1pbmFsSW5kZXggPCBibG9jay0+c2l6
ZSgpIC0gMSk7CisgICAgICAgIFZlY3RvcjxJbnN0LCAxPiBpbnN0c1RvTW92ZTsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gdGVybWluYWxJbmRleCArIDE7IGkgPCBibG9jay0+c2l6ZSgpOyBp
KyspCisgICAgICAgICAgICBpbnN0c1RvTW92ZS5hcHBlbmQoYmxvY2stPmF0KGkpKTsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoaW5zdHNUb01vdmUuc2l6ZSgpKTsKKworICAgICAgICBmb3IgKEZy
ZXF1ZW50ZWRCbG9jayYgZnJlcXVlbnRlZFN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JzKCkp
IHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA9IGZyZXF1ZW50ZWRTdWNjZXNz
b3IuYmxvY2soKTsKKyAgICAgICAgICAgIC8vIElmIHN1Y2Nlc3NvcidzIG9ubHkgcHJlZGVjZXNz
b3IgaXMgYmxvY2ssIHdlIGNhbiBwbGFudCB0aGUgc3BpbGwgaW5zaWRlCisgICAgICAgICAgICAv
LyB0aGUgc3VjY2Vzc29yLiBPdGhlcndpc2UsIHdlIG11c3Qgc3BsaXQgdGhlIGNyaXRpY2FsIGVk
Z2UgYW5kIGNyZWF0ZQorICAgICAgICAgICAgLy8gYSBuZXcgYmxvY2sgZm9yIHRoZSBzcGlsbC4K
KyAgICAgICAgICAgIGlmIChzdWNjZXNzb3ItPm51bVByZWRlY2Vzc29ycygpID09IDEpIHsKKyAg
ICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0SW5zdHMoMCwgaW5zdHNUb01vdmUpOwor
ICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKHN1Y2Nlc3Nvcik7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIG5ld0Jsb2NrID0gYmxv
Y2tJbnNlcnRpb25TZXQuaW5zZXJ0QmVmb3JlKHN1Y2Nlc3Nvciwgc3VjY2Vzc29yLT5mcmVxdWVu
Y3koKSk7CisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBJbnN0JiBpbnN0IDogaW5zdHNUb01v
dmUpCisgICAgICAgICAgICAgICAgICAgIG5ld0Jsb2NrLT5hcHBlbmRJbnN0KGluc3QpOworICAg
ICAgICAgICAgICAgIG5ld0Jsb2NrLT5hcHBlbmRJbnN0KEluc3QoSnVtcCwgaW5zdHNUb01vdmUu
bGFzdCgpLm9yaWdpbikpOworICAgICAgICAgICAgICAgIG5ld0Jsb2NrLT5zdWNjZXNzb3JzKCku
YXBwZW5kKHN1Y2Nlc3Nvcik7CisgICAgICAgICAgICAgICAgZnJlcXVlbnRlZFN1Y2Nlc3Nvci5i
bG9jaygpID0gbmV3QmxvY2s7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBi
bG9jay0+cmVzaXplKHRlcm1pbmFsSW5kZXggKyAxKTsKKyAgICB9CisKKyAgICBpZiAoYmxvY2tJ
bnNlcnRpb25TZXQuZXhlY3V0ZSgpKQorICAgICAgICBjb2RlLnJlc2V0UmVhY2hhYmlsaXR5KCk7
Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4U3Bp
bGxzQWZ0ZXJUZXJtaW5hbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmgJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShCM19KSVQpCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3Mg
Q29kZTsKKworLy8gQmVjYXVzZSB0aGVyZSBtYXkgYmUgdGVybWluYWxzIHRoYXQgcHJvZHVjZSB2
YWx1ZXMsIHRoZSByZWdpc3RlciBhbGxvY2F0b3IgbWF5CisvLyB3YW50IHRvIHNwaWxsIHRob3Nl
IHRlcm1pbmFscy4gSXQnbGwgaGFwcGVuIHRvIHNwaWxsIGl0IGFmdGVyCisvLyB0aGUgdGVybWlu
YWwuIElmIHdlIGxlZnQgdGhlIGdyYXBoIGluIHRoaXMgc3RhdGUsIGl0J2QgYmUgaW52YWxpZAor
Ly8gYmVjYXVzZSBhIHRlcm1pbmFsIG11c3QgYmUgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24gaW4gYSBi
bG9jay4KKy8vIFdlIGZpeCB0aGF0IGhlcmUuCit2b2lkIGZpeFNwaWxsc0FmdGVyVGVybWluYWxz
KENvZGUmKTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJH
ZW5lcmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJHZW5lcmF0ZS5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUsNyArMTY1LDcg
QEAgdm9pZCBnZW5lcmF0ZShDb2RlJiBjb2RlLCBDQ2FsbEhlbHBlcnMmIAogICAgICAgICBpZiAo
YmxvY2spCiAgICAgICAgICAgICBjb250ZXh0LmJsb2NrTGFiZWxzW2Jsb2NrXSA9IEJveDxDQ2Fs
bEhlbHBlcnM6OkxhYmVsPjo6Y3JlYXRlKCk7CiAgICAgfQotICAgIEluZGV4TWFwPEJhc2ljQmxv
Y2ssIENDYWxsSGVscGVyczo6SnVtcExpc3Q+IGJsb2NrSnVtcHMoY29kZS5zaXplKCkpOworICAg
IEluZGV4TWFwPEJhc2ljQmxvY2sqLCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0PiBibG9ja0p1bXBz
KGNvZGUuc2l6ZSgpKTsKIAogICAgIGF1dG8gbGluayA9IFsmXSAoQ0NhbGxIZWxwZXJzOjpKdW1w
IGp1bXAsIEJhc2ljQmxvY2sqIHRhcmdldCkgewogICAgICAgICBpZiAoY29udGV4dC5ibG9ja0xh
YmVsc1t0YXJnZXRdLT5pc1NldCgpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckdlbmVyYXRpb25Db250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0aW9uQ29udGV4dC5oCShyZXZpc2lvbiAyMTQ0MjcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRpb25Db250ZXh0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogICAgIHR5cGVkZWYgU2hhcmVk
VGFzazxMYXRlUGF0aEZ1bmN0aW9uPiBMYXRlUGF0aDsKIAogICAgIFZlY3RvcjxSZWZQdHI8TGF0
ZVBhdGg+PiBsYXRlUGF0aHM7Ci0gICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgQm94PENDYWxsSGVs
cGVyczo6TGFiZWw+PiBibG9ja0xhYmVsczsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgQm94
PENDYWxsSGVscGVyczo6TGFiZWw+PiBibG9ja0xhYmVsczsKICAgICBCYXNpY0Jsb2NrKiBjdXJy
ZW50QmxvY2sgeyBudWxscHRyIH07CiAgICAgdW5zaWduZWQgaW5kZXhJbkJsb2NrIHsgVUlOVF9N
QVggfTsKICAgICBDb2RlKiBjb2RlIHsgbnVsbHB0ciB9OwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcAkocmV2
aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlckFm
dGVyUmVnQWxsb2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSwxMiBAQCB2b2lkIGxv
d2VyQWZ0ZXJSZWdBbGxvYyhDb2RlJiBjb2RlKQogCiAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAg
IGRhdGFMb2coIkNvZGUgYmVmb3JlIGxvd2VyQWZ0ZXJSZWdBbGxvYzpcbiIsIGNvZGUpOworICAg
IAorICAgIC8vIEZJWE1FOgorICAgIC8vIDEpIFRoaXMgc2hvdWxkIG5vdCB1c2UgYSBIYXNoTWFw
PD4uIChPT1BTISEgbmVlZCBidWcgdXJsKQorICAgIC8vIDIpIFRoaXMgc2hvdWxkIGJhaWwgZWFy
bHkgaWYgdGhlcmUgYXJlIG5vIFNodWZmbGVzIG9yIENvbGRDQ2FsbHMuIChPT1BTISEgbmVlZCBi
dWcgdXJsKQorICAgIC8vIDMpIFdlIHNob3VsZCBub3QgaW50cm9kdWNlIFNodWZmbGVzIGZvciBu
b3JtYWwgY2FsbHMuIChPT1BTISEgbmVlZCBidWcgdXJsKQorICAgIC8vIDQpIFdlIHNob3VsZCBl
bWl0IENvbGRDQ2FsbCBvbmx5IGF0IG9wdExldmVsPT0xLiAoT09QUyEhIG5lZWQgYnVnIHVybCkK
IAogICAgIEhhc2hNYXA8SW5zdCosIFJlZ2lzdGVyU2V0PiB1c2VkUmVnaXN0ZXJzOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyRW50cnlTd2l0Y2guY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJFbnRyeVN3
aXRjaC5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyTG93ZXJFbnRyeVN3aXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDcg
QEAgdm9pZCBsb3dlckVudHJ5U3dpdGNoKENvZGUmIGNvZGUpCiAgICAgLy8gTm93IGR1cGxpY2F0
ZSB0aGVtLgogICAgIFZlY3RvcjxGcmVxdWVudGVkQmxvY2s+IGVudHJ5cG9pbnRzOwogICAgIGVu
dHJ5cG9pbnRzLmFwcGVuZChGcmVxdWVudGVkQmxvY2soY29kZVswXSwgZW50cnlwb2ludEZyZXF1
ZW5jaWVzWzBdKSk7Ci0gICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgQmFzaWNCbG9jayo+IG1hcChj
b2RlLnNpemUoKSk7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jayosIEJhc2ljQmxvY2sqPiBtYXAo
Y29kZS5zaXplKCkpOwogICAgIGZvciAodW5zaWduZWQgZW50cnlwb2ludEluZGV4ID0gMTsgZW50
cnlwb2ludEluZGV4IDwgY29kZS5wcm9jKCkubnVtRW50cnlwb2ludHMoKTsgKytlbnRyeXBvaW50
SW5kZXgpIHsKICAgICAgICAgbWFwLmNsZWFyKCk7CiAgICAgICAgIGZvciAoQmFzaWNCbG9jayog
YmxvY2sgOiB3b3JrbGlzdC5zZWVuKCkudmFsdWVzKGNvZGUpKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdMaXZlbmVzcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnTGl2ZW5lc3MuaAkocmV2aXNpb24gMjE0NDI3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdMaXZlbmVzcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC04NCw4ICs4NCw4IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiBwcml2YXRlOgot
ICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIFJlZ2lzdGVyU2V0PiBtX2xpdmVBdEhlYWQ7Ci0gICAg
SW5kZXhNYXA8QmFzaWNCbG9jaywgUmVnaXN0ZXJTZXQ+IG1fbGl2ZUF0VGFpbDsKKyAgICBJbmRl
eE1hcDxCYXNpY0Jsb2NrKiwgUmVnaXN0ZXJTZXQ+IG1fbGl2ZUF0SGVhZDsKKyAgICBJbmRleE1h
cDxCYXNpY0Jsb2NrKiwgUmVnaXN0ZXJTZXQ+IG1fbGl2ZUF0VGFpbDsKIH07CiAKIH0gfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCB2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJiBj
b2RlKQogICAgIHBhZEludGVyZmVyZW5jZShjb2RlKTsKIAogICAgIC8vIFdlIHdhbnQgdG8ga25v
dyB0aGUgc2V0IG9mIHJlZ2lzdGVycyB1c2VkIGF0IGV2ZXJ5IHBvaW50IGluIGV2ZXJ5IGJhc2lj
IGJsb2NrLgotICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIFZlY3RvcjxSZWdpc3RlclNldD4+IHVz
ZWRSZWdpc3RlcnMoY29kZS5zaXplKCkpOworICAgIEluZGV4TWFwPEJhc2ljQmxvY2sqLCBWZWN0
b3I8UmVnaXN0ZXJTZXQ+PiB1c2VkUmVnaXN0ZXJzKGNvZGUuc2l6ZSgpKTsKICAgICBHUExpdmVu
ZXNzIGdwTGl2ZW5lc3MoY29kZSk7CiAgICAgRlBMaXZlbmVzcyBmcExpdmVuZXNzKGNvZGUpOwog
ICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CkBAIC0xNzMsMTAgKzE3MywxMyBA
QCB2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJiBjb2RlKQogICAgICAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChjaG9zZW5SZWcpOwogCiAgICAgICAgICAgICAgICAgICAgIHRtcCA9IFRt
cChjaG9zZW5SZWcpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGFyZyA9PSBBcmc6OlNjcmF0Y2gpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47
CiAKICAgICAgICAgICAgICAgICAgICAgT3Bjb2RlIG1vdmUgPSBiYW5rID09IEdQID8gTW92ZSA6
IE1vdmVEb3VibGU7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlVc2Uocm9s
ZSkgJiYgcm9sZSAhPSBBcmc6OlNjcmF0Y2gpCisgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6
OmlzQW55VXNlKHJvbGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmlu
c2VydChpbnN0SW5kZXgsIG1vdmUsIGluc3Qub3JpZ2luLCBhcmcsIHRtcCk7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChBcmc6OmlzQW55RGVmKHJvbGUpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgaW5zZXJ0aW9uU2V0Lmluc2VydChpbnN0SW5kZXggKyAxLCBtb3ZlLCBpbnN0Lm9yaWdpbiwg
dG1wLCBhcmcpOwpAQCAtMTg0LDYgKzE4Nyw4IEBAIHZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUm
IGNvZGUpCiAgICAgICAgIH0KICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOwog
ICAgIH0KKyAgICAKKyAgICBmaXhTcGlsbHNBZnRlclRlcm1pbmFscyhjb2RlKTsKIH0KIAogfSB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJUbXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyVG1wLmNwcAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJUbXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDYgKzMwLDExIEBACiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKIAorY29uc3QgY2hh
ciogY29uc3QgVG1wOjpJbmRleGVkPEdQPjo6ZHVtcFByZWZpeCA9ICIldG1wIjsKK2NvbnN0IGNo
YXIqIGNvbnN0IFRtcDo6SW5kZXhlZDxGUD46OmR1bXBQcmVmaXggPSAiJWZ0bXAiOworY29uc3Qg
Y2hhciogY29uc3QgVG1wOjpBYnNvbHV0ZWx5SW5kZXhlZDxHUD46OmR1bXBQcmVmaXggPSAiJWFi
cyI7Citjb25zdCBjaGFyKiBjb25zdCBUbXA6OkFic29sdXRlbHlJbmRleGVkPEZQPjo6ZHVtcFBy
ZWZpeCA9ICIlZmFicyI7CisKIHZvaWQgVG1wOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
CiB7CiAgICAgaWYgKCEqdGhpcykgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJUbXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clRtcC5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpclRtcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc0LDYgKzc0LDE0IEBAIHB1YmxpYzoKICAgICAgICAg
cmVzdWx0Lm1fdmFsdWUgPSBlbmNvZGVGUFRtcChpbmRleCk7CiAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgfQorICAgIAorICAgIHN0YXRpYyBUbXAgdG1wRm9ySW5kZXgoQmFuayBiYW5rLCB1
bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIGlmIChiYW5rID09IEdQKQorICAgICAgICAg
ICAgcmV0dXJuIGdwVG1wRm9ySW5kZXgoaW5kZXgpOworICAgICAgICBBU1NFUlQoYmFuayA9PSBG
UCk7CisgICAgICAgIHJldHVybiBmcFRtcEZvckluZGV4KGluZGV4KTsKKyAgICB9CiAKICAgICBl
eHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX3ZhbHVlOyB9CiAgICAg
CkBAIC0xNTQsNyArMTYyLDE2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBncFRtcElu
ZGV4KCk7CiAgICAgICAgIHJldHVybiBmcFRtcEluZGV4KCk7CiAgICAgfQotCisgICAgCisgICAg
dGVtcGxhdGU8QmFuayBiYW5rPiBjbGFzcyBJbmRleGVkOworICAgIHRlbXBsYXRlPEJhbmsgYmFu
az4gY2xhc3MgQWJzb2x1dGVseUluZGV4ZWQ7CisgICAgCisgICAgdGVtcGxhdGU8QmFuayBiYW5r
PgorICAgIEluZGV4ZWQ8YmFuaz4gaW5kZXhlZCgpIGNvbnN0OworICAgIAorICAgIHRlbXBsYXRl
PEJhbmsgYmFuaz4KKyAgICBBYnNvbHV0ZWx5SW5kZXhlZDxiYW5rPiBhYm9sdXRlbHlJbmRleGVk
KCkgY29uc3Q7CisgICAgCiAgICAgYm9vbCBpc0FsaXZlKCkgY29uc3QKICAgICB7CiAgICAgICAg
IHJldHVybiAhISp0aGlzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJU
bXBJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJUbXBJbmxpbmVzLmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyVG1wSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC05Miw2ICs5Miw1MCBA
QCBzdHJ1Y3QgQWJzb2x1dGVUbXBNYXBwZXI8RlA+IHsKICAgICB9CiB9OwogCit0ZW1wbGF0ZTxC
YW5rIGJhbms+CitjbGFzcyBUbXA6OkluZGV4ZWQgOiBwdWJsaWMgVG1wIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZHVtcFByZWZpeDsKKyAgICAKKyAgICBJbmRleGVk
KFRtcCB0bXApCisgICAgICAgIDogVG1wKHRtcCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHVu
c2lnbmVkIGluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXBJbmRleChiYW5r
KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTxCYW5rIGJhbms+CitjbGFzcyBUbXA6OkFic29sdXRl
bHlJbmRleGVkIDogcHVibGljIFRtcCB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IGNoYXIq
IGNvbnN0IGR1bXBQcmVmaXg7CisKKyAgICBBYnNvbHV0ZWx5SW5kZXhlZChUbXAgdG1wKQorICAg
ICAgICA6IFRtcCh0bXApCisgICAgeworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBpbmRleCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gQWJzb2x1dGVUbXBNYXBwZXI8YmFuaz46OmFi
c29sdXRlSW5kZXgoKnRoaXMpOworICAgIH0KK307CisKK3RlbXBsYXRlPEJhbmsgYmFuaz4KK1Rt
cDo6SW5kZXhlZDxiYW5rPiBUbXA6OmluZGV4ZWQoKSBjb25zdAoreworICAgIHJldHVybiBJbmRl
eGVkPGJhbms+KCp0aGlzKTsKK30KKwordGVtcGxhdGU8QmFuayBiYW5rPgorVG1wOjpBYnNvbHV0
ZWx5SW5kZXhlZDxiYW5rPiBUbXA6OmFic29sdXRlbHlJbmRleGVkKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gQWJzb2x1dGVseUluZGV4ZWQ8YmFuaz4oKnRoaXMpOworfQorCiB9IH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMzo6QWlyCiAKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291
cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTQ0MjcpCisr
KyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC0yMyw2ICsyMyw4IEBACiAvKiBCZWdpbiBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCQkw
RjBEODVCNDE3MjM0Q0MxMDAzMzgyMTAgLyogTm9Mb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBEODVCMzE3MjM0Q0IxMDAzMzgyMTAgLyogTm9M
b2NrLmggKi87IH07CiAJCTBGMEZDRERFMUREMTY3RjkwMENDQUI1MyAvKiBMb2NrQWxnb3JpdGht
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBGQ0RE
RDFERDE2N0Y5MDBDQ0FCNTMgLyogTG9ja0FsZ29yaXRobS5oICovOyB9OworCQkwRjJBQzU2MTFF
ODlGNzBDMDAwMUVFM0YgLyogUmFuZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMkFDNTYwMUU4OUY3MEMwMDAxRUUzRiAvKiBSYW5nZS5oICovOyB9
OworCQkwRjJBQzU2MzFFOEEwMTQ5MDAwMUVFM0YgLyogSW5kZXhLZXlUeXBlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJBQzU2MjFFOEEwMTQ5MDAw
MUVFM0YgLyogSW5kZXhLZXlUeXBlLmggKi87IH07CiAJCTBGMkI2NkE2MTdCNkI0RkIwMEE3QUUz
RiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QTQxN0I2QjRGNzAwQTdBRTNGIC8qIERlZmVycmFibGVS
ZWZDb3VudGVkLmggKi87IH07CiAJCTBGMkI2NkE3MTdCNkI0RkQwMEE3QUUzRiAvKiBGbGlwQnl0
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2
NkE1MTdCNkI0RjcwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCAqLzsgfTsKIAkJMEYzMEJBOTAxRTc4
NzA4RTAwMkNBODQ3IC8qIEdsb2JhbFZlcnNpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMEJBOEExRTc4NzA4RTAwMkNBODQ3IC8qIEdsb2Jh
bFZlcnNpb24uY3BwICovOyB9OwpAQCAtNDA4LDYgKzQxMCw4IEBACiAvKiBCZWdpbiBQQlhGaWxl
UmVmZXJlbmNlIHNlY3Rpb24gKi8KIAkJMEYwRDg1QjMxNzIzNENCMTAwMzM4MjEwIC8qIE5vTG9j
ay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBOb0xvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYwRkNEREQxREQxNjdGOTAwQ0NBQjUzIC8qIExvY2tBbGdvcml0aG0uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9ja0FsZ29yaXRobS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjJBQzU2MDFFODlGNzBDMDAwMUVFM0YgLyogUmFuZ2UuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYyQUM1NjIxRThBMDE0OTAwMDFFRTNGIC8qIEluZGV4S2V5VHlwZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmRleEtleVR5cGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQjY2QTQxN0I2QjRGNzAwQTdBRTNGIC8qIERlZmVycmFibGVS
ZWZDb3VudGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlZmVycmFibGVSZWZDb3VudGVkLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkE1MTdCNkI0RjcwMEE3QUUzRiAvKiBGbGlw
Qnl0ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmxpcEJ5dGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGMzAwQjdEMThBQjQ4QjQwMEE2RDcyRSAvKiBIYXNoTWV0aG9kLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEhhc2hNZXRob2QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEw
MTgsMTAgKzEwMjIsMTEgQEAKIAkJCQlBOEE0NzJCQTE1MUE4MjVBMDA0MTIzRkYgLyogSGFzaFRy
YWl0cy5oICovLAogCQkJCUE4QTQ3MkJCMTUxQTgyNUEwMDQxMjNGRiAvKiBIZXhOdW1iZXIuaCAq
LywKIAkJCQlGRTg5MjVBRjFEMDBEQUVDMDA0NjkwN0UgLyogSW5kZW50ZXIuaCAqLywKLQkJCQk5
QzY3QzU0MjU4OTM0OEUyODVCNDk2OTkgLyogSW5kZXhlZENvbnRhaW5lckl0ZXJhdG9yLmggKi8s
CisJCQkJMEYyQUM1NjIxRThBMDE0OTAwMDFFRTNGIC8qIEluZGV4S2V5VHlwZS5oICovLAogCQkJ
CTVCNDMzODNBNUQwQjQ2M0M5NDMzRDkzMyAvKiBJbmRleE1hcC5oICovLAogCQkJCTMxMzdFMUQ3
REJEODRBQzM4RkFFNEQzNCAvKiBJbmRleFNldC5oICovLAogCQkJCTI2ODRENDM1MUMwMDBENDAw
MDgxRDY2MyAvKiBJbmRleFNwYXJzZVNldC5oICovLAorCQkJCTlDNjdDNTQyNTg5MzQ4RTI4NUI0
OTY5OSAvKiBJbmRleGVkQ29udGFpbmVySXRlcmF0b3IuaCAqLywKIAkJCQlBOEE0NzJCQzE1MUE4
MjVBMDA0MTIzRkYgLyogSW5saW5lQVNNLmggKi8sCiAJCQkJQTcwREEwODIxNzk5RjA0RDAwNTI5
QTlCIC8qIEluc2VydGlvbi5oICovLAogCQkJCTdDREQ3RkY3MTg2RDI5MUUwMDc0MzNDRCAvKiBJ
dGVyYXRvckFkYXB0b3JzLmggKi8sCkBAIC0xMTAwLDYgKzExMDUsNyBAQAogCQkJCUE4QTQ3MkZC
MTUxQTgyNUIwMDQxMjNGRiAvKiBSYW5kb21OdW1iZXIuY3BwICovLAogCQkJCUE4QTQ3MkZDMTUx
QTgyNUIwMDQxMjNGRiAvKiBSYW5kb21OdW1iZXIuaCAqLywKIAkJCQlBOEE0NzJGRDE1MUE4MjVC
MDA0MTIzRkYgLyogUmFuZG9tTnVtYmVyU2VlZC5oICovLAorCQkJCTBGMkFDNTYwMUU4OUY3MEMw
MDAxRUUzRiAvKiBSYW5nZS5oICovLAogCQkJCTBGNzI1Q0FCMUM1MDQ2MTYwMEFEOTQzQSAvKiBS
YW5nZVNldC5oICovLAogCQkJCTBGODcxMDU5MTY2NDNGMTkwMDkwQjBBRCAvKiBSYXdQb2ludGVy
LmggKi8sCiAJCQkJMEZERTg3RjYxREZEMDdDQzAwNjRDMzkwIC8qIFJlY3Vyc2l2ZUxvY2tBZGFw
dGVyLmggKi8sCkBAIC0xNDg1LDYgKzE0OTEsNyBAQAogCQkJCUM5MTZCOTc1RjAyRjRGN0U4QjRB
QjEyRCAvKiBJbmRleE1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzhCMEUxQTFFMDFBNDg2RUI5
NUUwRDExIC8qIEluZGV4U2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkyNjg0RDQzNjFDMDAwRDQw
MDA4MUQ2NjMgLyogSW5kZXhTcGFyc2VTZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkFDNTYz
MUU4QTAxNDkwMDAxRUUzRiAvKiBJbmRleEtleVR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4
QTQ3M0RDMTUxQTgyNUIwMDQxMjNGRiAvKiBJbmxpbmVBU00uaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3MERBMDg0MTc5OUYwNEQwMDUyOUE5QiAvKiBJbnNlcnRpb24uaCBpbiBIZWFkZXJzICovLAog
CQkJCTI2MTQ3QjBBMTVERENDREMwMEREQjkwNyAvKiBJbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9u
LmggaW4gSGVhZGVycyAqLywKQEAgLTE1ODYsNiArMTU5Myw3IEBACiAJCQkJNDMwQjQ3ODkxQUFB
QUMxQTAwMTIyM0RBIC8qIFN0cmluZ0NvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0
M0UxNTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ0NvbmNhdGVuYXRlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk3Q0Q0QzI3MDFFMkM4MkI5MDA5Mjk0NzAgLyogU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJz
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJBQzU2MTFFODlGNzBDMDAwMUVFM0YgLyogUmFuZ2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDJDMTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdF
eHRyYXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDNGMTUxQTgyNUIwMDQxMjNGRiAvKiBT
dHJpbmdIYXNoLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzQ4NzQ1NDE3QTBCREFFMDBGQTA0Q0Ig
LyogU3RyaW5nSGFzaER1bXBDb250ZXh0LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NNYWtl
TGlzdHMudHh0CShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3Rz
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDYgKzEwMCw3IEBAIHNldChXVEZfSEVBREVSUwog
ICAgIFJBTVNpemUuaAogICAgIFJhbmRvbU51bWJlci5oCiAgICAgUmFuZG9tTnVtYmVyU2VlZC5o
CisgICAgUmFuZ2UuaAogICAgIFJhbmdlU2V0LmgKICAgICBSYXdQb2ludGVyLmgKICAgICBSZWN1
cnNpdmVMb2NrQWRhcHRlci5oCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9JbmRleEtleVR5cGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9JbmRleEtleVR5cGUuaAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvV1RGL3d0Zi9JbmRleEtleVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4K
K3N0cnVjdCBJbmRleEtleVR5cGUgeworICAgIHN0YXRpYyBzaXplX3QgaW5kZXgoY29uc3QgVCYg
a2V5KSBjb25zdCB7IHJldHVybiBrZXkuaW5kZXgoKTsgfQorfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4KK3N0cnVjdCBJbmRleEtleVR5cGU8VCo+IHsKKyAgICBzdGF0aWMgc2l6ZV90IGluZGV4
KFQqIGtleSkgY29uc3QgeyByZXR1cm4ga2V5LT5pbmRleCgpOyB9Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXVEYKKwpJbmRleDogU291cmNlL1dURi93dGYvSW5kZXhNYXAuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9JbmRleE1hcC5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9JbmRleE1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAKICNw
cmFnbWEgb25jZQogCisjaW5jbHVkZSA8d3RmL0luZGV4S2V5VHlwZS5oPgogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdURiB7CkBAIC03MCwxOCArNzEsMjQgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gbV92ZWN0b3JbaW5kZXhdOwogICAgIH0KICAgICAKLSAgICBWYWx1
ZSYgb3BlcmF0b3JbXShLZXkqIGtleSkKKyAgICBWYWx1ZSYgb3BlcmF0b3JbXShjb25zdCBLZXkm
IGtleSkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3ZlY3RvcltrZXktPmluZGV4KCldOworICAg
ICAgICByZXR1cm4gbV92ZWN0b3JbSW5kZXhLZXlUeXBlPEtleT46OmluZGV4KGtleSldOwogICAg
IH0KICAgICAKLSAgICBjb25zdCBWYWx1ZSYgb3BlcmF0b3JbXShLZXkqIGtleSkgY29uc3QKKyAg
ICBjb25zdCBWYWx1ZSYgb3BlcmF0b3JbXShjb25zdCBLZXkmIGtleSkgY29uc3QKICAgICB7Ci0g
ICAgICAgIHJldHVybiBtX3ZlY3RvcltrZXktPmluZGV4KCldOworICAgICAgICByZXR1cm4gbV92
ZWN0b3JbSW5kZXhLZXlUeXBlPEtleT46OmluZGV4KGtleSldOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGFwcGVuZChjb25zdCBLZXkmIGtleSwgVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBS
RUxFQVNFX0FTU0VSVChJbmRleEtleVR5cGU8S2V5Pjo6aW5kZXgoa2V5KSA9PSBtX3ZlY3Rvci5z
aXplKCkpOworICAgICAgICBtX3ZlY3Rvci5hcHBlbmQodmFsdWUpOwogICAgIH0KIAogcHJpdmF0
ZToKLSAgICBWZWN0b3I8VmFsdWU+IG1fdmVjdG9yOworICAgIFZlY3RvcjxWYWx1ZSwgMCwgVW5z
YWZlVmVjdG9yT3ZlcmZsb3c+IG1fdmVjdG9yOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV1RGCklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9JbmRleFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL0luZGV4U2V0LmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9XVEYvd3RmL0luZGV4
U2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlIDx3dGYv
Qml0VmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorI2luY2x1ZGUgPHd0
Zi9JbmRleEtleVR5cGUuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKQEAgLTQyLDMwICs0MywzMCBA
QCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIGJvb2wgYWRkKFQqIHZhbHVlKQorICAgIGJv
b2wgYWRkKGNvbnN0IFQmIHZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuICFtX3NldC5zZXQo
dmFsdWUtPmluZGV4KCkpOworICAgICAgICByZXR1cm4gIW1fc2V0LnNldChJbmRleEtleVR5cGU8
VD46OmluZGV4KHZhbHVlKSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmFi
bGU+CiAgICAgYm9vbCBhZGRBbGwoY29uc3QgSXRlcmFibGUmIGl0ZXJhYmxlKQogICAgIHsKICAg
ICAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgZm9yIChUKiB2YWx1ZSA6IGl0ZXJh
YmxlKQorICAgICAgICBmb3IgKGNvbnN0IFQmIHZhbHVlIDogaXRlcmFibGUpCiAgICAgICAgICAg
ICByZXN1bHQgfD0gYWRkKHZhbHVlKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAK
LSAgICBib29sIHJlbW92ZShUKiB2YWx1ZSkKKyAgICBib29sIHJlbW92ZShjb25zdCBUJiB2YWx1
ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3NldC5jbGVhcih2YWx1ZS0+aW5kZXgoKSk7Cisg
ICAgICAgIHJldHVybiBtX3NldC5jbGVhcihJbmRleEtleVR5cGU8VD46OmluZGV4KHZhbHVlKSk7
CiAgICAgfQogCi0gICAgYm9vbCBjb250YWlucyhUKiB2YWx1ZSkgY29uc3QKKyAgICBib29sIGNv
bnRhaW5zKGNvbnN0IFQmIHZhbHVlKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIG1fc2V0LmdldCh2YWx1
ZS0+aW5kZXgoKSk7CisgICAgICAgIHJldHVybiBtX3NldC5nZXQoSW5kZXhLZXlUeXBlPFQ+Ojpp
bmRleCh2YWx1ZSkpOwogICAgIH0KIAogICAgIHNpemVfdCBzaXplKCkgY29uc3QKQEAgLTEwMCw3
ICsxMDEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIFQqIG9wZXJhdG9yKigpCisgICAgICAgICAgICBUIG9wZXJhdG9yKigpCiAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1fY29sbGVjdGlvbi0+YXQoKm1faXRlcik7
CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9SYW5nZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL1JhbmdlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93
dGYvUmFuZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRl
IDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8vIE5vdGUgdGhhdCB0
aGUgJ2JlZ2luJyBpcyBpbmNsdXNpdmUsIHdoaWxlIHRoZSAnZW5kJyBpcyBleGNsdXNpdmUuIFRo
ZXNlIHR3byByYW5nZXMgYXJlIG5vbi0KKy8vIG92ZXJsYXBwaW5nOgorLy8KKy8vICAgICByYW5n
ZUEgPSAwLi4uOAorLy8gICAgIHJhbmdlQiA9IDguLi4xNgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBQ
YXNzZWRUeXBlPgorY2xhc3MgUmFuZ2UgeworcHVibGljOgorICAgIHR5cGVkZWYgUGFzc2VkVHlw
ZSBUeXBlOworICAgIAorICAgIEhlYXBSYW5nZSgpCisgICAgICAgIDogbV9iZWdpbigwKQorICAg
ICAgICAsIG1fZW5kKDApCisgICAgeworICAgIH0KKworICAgIGV4cGxpY2l0IEhlYXBSYW5nZShU
eXBlIHZhbHVlKQorICAgICAgICA6IG1fYmVnaW4odmFsdWUpCisgICAgICAgICwgbV9lbmQodmFs
dWUgKyAxKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZW5kID49IG1fYmVnaW4pOworICAgIH0K
KworICAgIEhlYXBSYW5nZShUeXBlIGJlZ2luLCBUeXBlIGVuZCkKKyAgICAgICAgOiBtX2JlZ2lu
KGJlZ2luKQorICAgICAgICAsIG1fZW5kKGVuZCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2Vu
ZCA+PSBtX2JlZ2luKTsKKyAgICAgICAgaWYgKG1fYmVnaW4gPT0gbV9lbmQpIHsKKyAgICAgICAg
ICAgIC8vIENhbm9uaWNhbGl6ZSBlbXB0eSByYW5nZXMuCisgICAgICAgICAgICBtX2JlZ2luID0g
MDsKKyAgICAgICAgICAgIG1fZW5kID0gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRp
YyBIZWFwUmFuZ2UgdG9wKCkKKyAgICB7CisgICAgICAgIHJldHVybiBIZWFwUmFuZ2Uoc3RkOjpu
dW1lcmljX2xpbWl0czxUeXBlPjo6bWluKCksIHN0ZDo6bnVtZXJpY19saW1pdHM8VHlwZT46Om1h
eCgpKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSGVhcFJhbmdlJiBvdGhl
cikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2JlZ2luID09IG90aGVyLm1fYmVnaW4K
KyAgICAgICAgICAgICYmIG1fZW5kID09IG90aGVyLm1fZW5kOworICAgIH0KKworICAgIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBIZWFwUmFuZ2UmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBvcGVy
YXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9iZWdpbiAhPSBtX2VuZDsgfQorCisgICAgSGVh
cFJhbmdlIG9wZXJhdG9yfChjb25zdCBIZWFwUmFuZ2UmIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgaWYgKCEqdGhpcykKKyAgICAgICAgICAgIHJldHVybiBvdGhlcjsKKyAgICAgICAgaWYg
KCFvdGhlcikKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgcmV0dXJuIEhlYXBS
YW5nZSgKKyAgICAgICAgICAgIHN0ZDo6bWluKG1fYmVnaW4sIG90aGVyLm1fYmVnaW4pLAorICAg
ICAgICAgICAgc3RkOjptYXgobV9lbmQsIG90aGVyLm1fZW5kKSk7CisgICAgfQorICAgIAorICAg
IFR5cGUgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2JlZ2luOyB9CisgICAgVHlwZSBlbmQoKSBj
b25zdCB7IHJldHVybiBtX2VuZDsgfQorCisgICAgYm9vbCBvdmVybGFwcyhjb25zdCBIZWFwUmFu
Z2UmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6cmFuZ2VzT3Zlcmxh
cChtX2JlZ2luLCBtX2VuZCwgb3RoZXIubV9iZWdpbiwgb3RoZXIubV9lbmQpOworICAgIH0KKwor
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KCp0aGlzID09IEhlYXBSYW5nZSgpKSB7CisgICAgICAgICAgICBvdXQucHJpbnQoIkJvdHRvbSIp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICgqdGhpcyA9PSB0
b3AoKSkgeworICAgICAgICAgICAgb3V0LnByaW50KCJUb3AiKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9iZWdpbiA9PSBtX2VuZCArIDEpIHsKKyAgICAg
ICAgICAgIG91dC5wcmludChtX2JlZ2luKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICBvdXQucHJpbnQobV9iZWdpbiwgIi4uLiIsIG1fZW5kKTsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgVHlwZSBtX2JlZ2luOworICAgIFR5cGUgbV9lbmQ7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpSYW5nZTsKKwpJbmRleDogU291cmNlL1dURi93dGYv
UmFuZ2VTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9SYW5nZVNldC5oCShyZXZp
c2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvV1RGL3d0Zi9SYW5nZVNldC5oCSh3b3JraW5nIGNvcHkp
CkBAIC03Nyw2ICs3NywxMCBAQCBwdWJsaWM6CiAgICAgICAgIG1faXNDb21wYWN0ID0gZmFsc2U7
CiAKICAgICAgICAgLy8gV2UgYXBwZW5kIHdpdGhvdXQgY29tcGFjdGluZyBvbmx5IGlmIGRvaW5n
IHNvIGlzIGd1YXJhbnRlZWQgbm90IHRvIHJlc2l6ZSB0aGUgdmVjdG9yLgorICAgICAgICAvLyBG
SVhNRTogVGhpcyBoZXVyaXN0aWMgaXMgYWxtb3N0IGNlcnRhaW5seSB3cm9uZywgYmVjYXVzZSB3
ZSBkb24ndCBjb250cm9sIHRoZSBjYXBhY2l0eS4gSQorICAgICAgICAvLyB0aGluayB0aGF0IHRo
aXMgbWVhbnMgdGhhdCB3ZSB3aWxsIHNvbWV0aW1lcyBiZSByYWdlLWNvbXBhY3Rpbmcgd2hlbiB3
ZSBhcmUganVzdCBzaHkgb2YgdGhlCisgICAgICAgIC8vIGNhcGFjaXR5LgorICAgICAgICAvLyBP
T1BTOiBuZWVkIGJ1ZyB1cmwKICAgICAgICAgaWYgKG1fcmFuZ2VzLnNpemUoKSArIDEgPCBtX3Jh
bmdlcy5jYXBhY2l0eSgpKSB7CiAgICAgICAgICAgICBtX3Jhbmdlcy5hcHBlbmQocmFuZ2UpOwog
ICAgICAgICAgICAgcmV0dXJuOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305612</attachid>
            <date>2017-03-28 11:16:04 -0700</date>
            <delta_ts>2017-03-28 16:19:59 -0700</delta_ts>
            <desc>seems like it might work</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>98606</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIxNDQyNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMTQwLDcgKzE0MCw2IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYjMvQjNG
b2xkUGF0aENvbnN0YW50cy5jcHAKICAgICBiMy9CM0ZyZXF1ZW5jeUNsYXNzLmNwcAogICAgIGIz
L0IzR2VuZXJhdGUuY3BwCi0gICAgYjMvQjNIZWFwUmFuZ2UuY3BwCiAgICAgYjMvQjNJbmZlclN3
aXRjaGVzLmNwcAogICAgIGIzL0IzSW5zZXJ0aW9uU2V0LmNwcAogICAgIGIzL0IzS2luZC5jcHAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTgzLDYgKzE4MywxMCBAQAogCQkwRjI1RjFCMjE4MTYz
NUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1RjFBQjE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xv
d1BhdGhDYWxsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEYyNUYxQjMxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1RjFBQzE4
MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5LmNwcCAqLzsgfTsKIAkJMEYyNUYx
QjQxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNUYxQUQxODE2MzVGMzAwNTIyRjM5
IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGMkFDNTY2MUU4QTBCNzcwMDAxRUUzRiAvKiBBaXJGaXhTcGls
bHNBZnRlclRlcm1pbmFscy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjJBQzU2NDFFOEEwQjc2MDAwMUVFM0YgLyogQWlyRml4U3BpbGxzQWZ0ZXJU
ZXJtaW5hbHMuY3BwICovOyB9OworCQkwRjJBQzU2NzFFOEEwQjc5MDAwMUVFM0YgLyogQWlyRml4
U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMkFDNTY1MUU4QTBCNzYwMDAxRUUzRiAvKiBBaXJGaXhTcGlsbHNBZnRl
clRlcm1pbmFscy5oICovOyB9OworCQkwRjJBQzU2QTFFOEEwQkQzMDAwMUVFM0YgLyogQWlyQWxs
b2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQUM1NjgxRThBMEJEMTAwMDFFRTNGIC8qIEFpckFsbG9j
YXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcCAqLzsgfTsKKwkJMEYyQUM1NkIxRThBMEJENTAw
MDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJBQzU2OTFFOEEwQkQxMDAwMUVF
M0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaCAqLzsgfTsKIAkJMEYyQjY2
QUMxN0I2QjUzRjAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBODE3QjZCNTNEMDBBN0FF
M0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJCNjZBRDE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNv
bWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJCNjZBOTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNv
dW50ZWRJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEYyQjY2QUUxN0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVk
U2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJC
NjZBQTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTY5LDcgKzk3Myw2
IEBACiAJCTBGRUM4NUJDMUJFMTQ2MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0cmVuZ3RoLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUI3MUJF
MTQ2MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0cmVuZ3RoLmNwcCAqLzsgfTsKIAkJMEZFQzg1QkQx
QkUxNDYyRjAwODBGRjc0IC8qIEIzUmVkdWNlU3RyZW5ndGguaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUI4MUJFMTQ2MkYwMDgwRkY3NCAvKiBC
M1JlZHVjZVN0cmVuZ3RoLmggKi87IH07CiAJCTBGRUM4NUMxMUJFMTY3QTAwMDgwRkY3NCAvKiBC
M0VmZmVjdHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NUJFMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0VmZmVjdHMuaCAqLzsgfTsKLQkJMEZFQzg1
QzIxQkUxNjdBMDAwODBGRjc0IC8qIEIzSGVhcFJhbmdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUJGMUJFMTY3QTAwMDgwRkY3NCAvKiBC
M0hlYXBSYW5nZS5jcHAgKi87IH07CiAJCTBGRUM4NUMzMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hl
YXBSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg1QzAxQkUxNjdBMDAwODBGRjc0IC8qIEIzSGVhcFJhbmdlLmggKi87IH07CiAJCTBGRUM4
NUM1MUJFMTZGNUEwMDgwRkY3NCAvKiBCM0VmZmVjdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1QzQxQkUxNkY1QTAwODBGRjc0IC8qIEIz
RWZmZWN0cy5jcHAgKi87IH07CiAJCTBGRUQ2N0I5MUIyNjI1NkQwMDY2Q0UxNSAvKiBERkdDb25z
dGFudEhvaXN0aW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFRDY3QjcxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0YW50SG9pc3Rp
bmdQaGFzZS5jcHAgKi87IH07CkBAIC0yNzAzLDYgKzI3MDYsMTAgQEAKIAkJMEYyNUYxQUIxODE2
MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBGVExTbG93UGF0aENhbGwuaDsgcGF0aCA9IGZ0bC9GVExTbG93UGF0aENhbGwu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNUYxQUMxODE2MzVGMzAwNTIyRjM5
IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBGVExTbG93UGF0aENhbGxLZXkuY3BwOyBwYXRoID0gZnRsL0ZUTFNsb3dQYXRoQ2Fs
bEtleS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjVGMUFEMTgxNjM1RjMw
MDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gRlRMU2xvd1BhdGhDYWxsS2V5Lmg7IHBhdGggPSBmdGwvRlRMU2xvd1BhdGhDYWxs
S2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkFDNTY0MUU4QTBCNzYwMDAx
RUUzRiAvKiBBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5jcHA7IHBhdGgg
PSBiMy9haXIvQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjJBQzU2NTFFOEEwQjc2MDAwMUVFM0YgLyogQWlyRml4U3BpbGxzQWZ0
ZXJUZXJtaW5hbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyRml4U3Bp
bGxzQWZ0ZXJUZXJtaW5hbHMuaDsgcGF0aCA9IGIzL2Fpci9BaXJGaXhTcGlsbHNBZnRlclRlcm1p
bmFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJBQzU2ODFFOEEwQkQxMDAw
MUVFM0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNj
YW4uY3BwOyBwYXRoID0gYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQUM1NjkxRThBMEJEMTAwMDFFRTNG
IC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmg7IHBhdGgg
PSBiMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQjY2QTgxN0I2QjUzRDAwQTdBRTNGIC8qIEdDSW5jb21pbmdS
ZWZDb3VudGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5jb21pbmdSZWZDb3VudGVkLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkE5MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0lu
Y29taW5nUmVmQ291bnRlZElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR0NJbmNvbWluZ1JlZkNv
dW50ZWRJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkFBMTdC
NkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMzQ5Niw3ICszNTAzLDYgQEAKIAkJMEZFQzg1QjcxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVk
dWNlU3RyZW5ndGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNS
ZWR1Y2VTdHJlbmd0aC5jcHA7IHBhdGggPSBiMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQzg1QjgxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVk
dWNlU3RyZW5ndGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNSZWR1Y2VT
dHJlbmd0aC5oOyBwYXRoID0gYjMvQjNSZWR1Y2VTdHJlbmd0aC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkVDODVCRTFCRTE2N0EwMDA4MEZGNzQgLyogQjNFZmZlY3RzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzRWZmZWN0cy5oOyBwYXRoID0gYjMvQjNF
ZmZlY3RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGRUM4NUJGMUJFMTY3QTAw
MDgwRkY3NCAvKiBCM0hlYXBSYW5nZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBCM0hlYXBSYW5nZS5jcHA7IHBhdGggPSBiMy9CM0hlYXBSYW5nZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUM4NUMwMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hl
YXBSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0hlYXBSYW5nZS5o
OyBwYXRoID0gYjMvQjNIZWFwUmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZFQzg1QzQxQkUxNkY1QTAwODBGRjc0IC8qIEIzRWZmZWN0cy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0VmZmVjdHMuY3BwOyBwYXRoID0gYjMvQjNFZmZlY3Rz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFRDY3QjcxQjI2MjU2RDAwNjZD
RTE1IC8qIERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuY3BwOyBwYXRoID0gZGZn
L0RGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01NDE5LDcgKzU0MjUsNiBAQAogCQkJCTBGRUM4NENGMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0dlbmVyYXRlLmggKi8sCiAJCQkJMEYyQzYzQjUxRTYzNDNFODAwQzEzODM5IC8qIEIzR2VuZXJp
Y0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi8sCiAJCQkJMEZFQzg0RDAxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oICovLAotCQkJCTBGRUM4NUJGMUJFMTY3QTAwMDgw
RkY3NCAvKiBCM0hlYXBSYW5nZS5jcHAgKi8sCiAJCQkJMEZFQzg1QzAxQkUxNjdBMDAwODBGRjc0
IC8qIEIzSGVhcFJhbmdlLmggKi8sCiAJCQkJREM2OUI5OUExRDE1RjkwRjAwMkUzQzAwIC8qIEIz
SW5mZXJTd2l0Y2hlcy5jcHAgKi8sCiAJCQkJREM2OUI5OUIxRDE1RjkwRjAwMkUzQzAwIC8qIEIz
SW5mZXJTd2l0Y2hlcy5oICovLApAQCAtNTUyOCw2ICs1NTMzLDggQEAKIAkJMEZFQzg0QjMxQkRB
Q0Q4ODAwODBGRjc0IC8qIGFpciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCisJCQkJMEYyQUM1NjgxRThBMEJEMTAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0
ZXJzQnlMaW5lYXJTY2FuLmNwcCAqLywKKwkJCQkwRjJBQzU2OTFFOEEwQkQxMDAwMUVFM0YgLyog
QWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaCAqLywKIAkJCQk3OTY1QzIxNDFFNUQ3
OTk2MDBCNzU5MUQgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuY3BwICov
LAogCQkJCTc5NjVDMjE1MUU1RDc5OTYwMEI3NTkxRCAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5
R3JhcGhDb2xvcmluZy5oICovLAogCQkJCTBGRUM4NTQ4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJB
bGxvY2F0ZVN0YWNrLmNwcCAqLywKQEAgLTU1NjEsNiArNTU2OCw4IEBACiAJCQkJMEY0REUxQ0Qx
QzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCAqLywKIAkJCQkyNjJEODVC
NDFDMEQ2NTBGMDA2QUNCNjEgLyogQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmNwcCAqLywK
IAkJCQkyNjJEODVCNTFDMEQ2NTBGMDA2QUNCNjEgLyogQWlyRml4UGFydGlhbFJlZ2lzdGVyU3Rh
bGxzLmggKi8sCisJCQkJMEYyQUM1NjQxRThBMEI3NjAwMDFFRTNGIC8qIEFpckZpeFNwaWxsc0Fm
dGVyVGVybWluYWxzLmNwcCAqLywKKwkJCQkwRjJBQzU2NTFFOEEwQjc2MDAwMUVFM0YgLyogQWly
Rml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCAqLywKIAkJCQkwRkVDODU1MjFCREFDREM3MDA4MEZG
NzQgLyogQWlyRnJlcXVlbnRlZEJsb2NrLmggKi8sCiAJCQkJMEZFQzg1NTMxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckdlbmVyYXRlLmNwcCAqLywKIAkJCQkwRkVDODU1NDFCREFDREM3MDA4MEZGNzQg
LyogQWlyR2VuZXJhdGUuaCAqLywKQEAgLTgxMzksNiArODE0OCw3IEBACiAJCQkJMEZFQzg1MTAx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkVDODUxMjFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0MzQyMkE2MzFDMTU4RTZEMDBFMkVCOTggLyogQjNDb25zdEZsb2F0VmFsdWUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkFDNTZCMUU4QTBCRDUwMDAxRUUzRiAvKiBBaXJBbGxv
Y2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1QjMx
QkRFRDk1NzAwODBGRjc0IC8qIEIzQ29uc3RQdHJWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYzMzhERjYxQkU5M0Q1NTAwMTNDODhGIC8qIEIzQ29uc3RyYWluZWRWYWx1ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyQzYzQjgxRTYzNDNGNzAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2NrSW5z
ZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKQEAgLTkzNjIsNiArOTM3Miw3IEBACiAJCQkJNzA5
RkI4NkExQUUzMzVDNjAwMzlEMDY5IC8qIFdlYWtTZXRDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMTQxNTAxMzMxNTRCQjEzRjAwNUQ4Qzk4IC8qIFdlYWtTZXRJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3MDlGQjg2QzFBRTMzNUM2MDAzOUQwNjkgLyogV2Vha1NldFByb3Rv
dHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQUM1NjcxRThBMEI3OTAwMDFFRTNGIC8qIEFp
ckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JFRDFE
QjU4REFEMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNDMTYxREI1OUNCMjAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5
Q29tcGlsZUVycm9yQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JF
RjFEQjU4REFEMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90b3R5cGUuaCBp
biBIZWFkZXJzICovLApAQCAtOTk4OCw3ICs5OTk5LDYgQEAKIAkJCQkwRjcyNUNBRjFDNTA2RDNC
MDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkVDODUxNTFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkVDODUxODFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQkwRkVDODVDMjFCRTE2N0EwMDA4MEZGNzQgLyogQjNIZWFwUmFuZ2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJREM2OUI5OUMxRDE1RjkxMjAwMkUzQzAwIC8qIEIzSW5m
ZXJTd2l0Y2hlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVDODVCOTFCRTE0NjJGMDA4MEZG
NzQgLyogQjNJbnNlcnRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZERjY3RDMxRDlD
NkQyQTAwMUI5ODI1IC8qIEIzS2luZC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMTU0LDYgKzEw
MTY0LDcgQEAKIAkJCQlBNzhBOTc3NjE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkJEQzE1MTUxQzVENEQwMENEODkxMCAvKiBERkdGaXh1
cFBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjAxNzdGMURDQURDMzMwMEVBNTk1MCAv
KiBERkdGbG93SW5kZXhpbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQUM1NkExRThBMEJE
MzAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGOUQzMzk2MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRjcxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0ZsdXNo
Rm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNjlDQzg4MTkzQUM2MEEwMDQ1NzU5RSAv
KiBERkdGcm96ZW5WYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMjYzLDYgKzEwMjc0LDcg
QEAKIAkJCQkyQTgzNjM4NTE4RDdEMEVFMDAwMEVCQ0MgLyogRWRlbkdDQWN0aXZpdHlDYWxsYmFj
ay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OUU0NUEyNTE4QTFCMjU5MDAyNkQ4OEYgLyogRW5j
b2RlZFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUM3MTA3RUMzNzYwMDQyN0E0
OCAvKiBFcnJvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJBQzU2NjFFOEEwQjc3MDAwMUVF
M0YgLyogQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQ3RjM5QzgxMDdFQzM3NjAwNDI3QTQ4IC8qIEVycm9yQ29uc3RydWN0b3IuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRkVCNThDMTQxODdCOEIxNjAwOThFRjBCIC8qIEVycm9ySGFuZGxpbmdTY29w
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDOTEwN0VDMzc2MDA0MjdBNDggLyogRXJy
b3JJbnN0YW5jZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrVXRpbHMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTE0LDcgKzExNCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+CiBWZWN0b3I8QmFz
aWNCbG9jayo+IGJsb2Nrc0luUHJlT3JkZXIoQmFzaWNCbG9jayogcm9vdCkKIHsKICAgICBWZWN0
b3I8QmFzaWNCbG9jayo+IHJlc3VsdDsKLSAgICBHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2Nr
KiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IHdvcmtsaXN0OworICAgIEdyYXBoTm9kZVdvcmtsaXN0
PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+IHdvcmtsaXN0OwogICAgIHdvcmts
aXN0LnB1c2gocm9vdCk7CiAgICAgd2hpbGUgKEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3Qu
cG9wKCkpIHsKICAgICAgICAgcmVzdWx0LmFwcGVuZChibG9jayk7CkBAIC0xMjgsNyArMTI4LDcg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KIFZlY3RvcjxCYXNpY0Jsb2NrKj4gYmxv
Y2tzSW5Qb3N0T3JkZXIoQmFzaWNCbG9jayogcm9vdCkKIHsKICAgICBWZWN0b3I8QmFzaWNCbG9j
ayo+IHJlc3VsdDsKLSAgICBQb3N0T3JkZXJHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwg
SW5kZXhTZXQ8QmFzaWNCbG9jaz4+IHdvcmtsaXN0OworICAgIFBvc3RPcmRlckdyYXBoTm9kZVdv
cmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+IHdvcmtsaXN0OwogICAg
IHdvcmtsaXN0LnB1c2gocm9vdCk7CiAgICAgd2hpbGUgKEdyYXBoTm9kZVdpdGhPcmRlcjxCYXNp
Y0Jsb2NrKj4gaXRlbSA9IHdvcmtsaXN0LnBvcCgpKSB7CiAgICAgICAgIHN3aXRjaCAoaXRlbS5v
cmRlcikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tXb3JrbGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrV29ya2xpc3Qu
aAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tX
b3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CiAKIGNsYXNzIEJhc2ljQmxvY2s7CiAKLXR5cGVkZWYgR3JhcGhOb2RlV29y
a2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2s+PiBCbG9ja1dvcmtsaXN0Owor
dHlwZWRlZiBHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9j
ayo+PiBCbG9ja1dvcmtsaXN0OwogCiAvLyBXaGVuIHlvdSBzYXkgQmxvY2tXaXRoPGludD4geW91
IHNob3VsZCByZWFkIGl0IGFzICJibG9jayB3aXRoIGFuIGludCIuCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB1c2luZyBCbG9ja1dpdGggPSBHcmFwaE5vZGVXaXRoPEJhc2ljQmxvY2sqLCBUPjsKQEAg
LTQ0LDEzICs0NCwxMyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBCbG9ja1dpdGggPSBH
CiAvLyBwZXJtaXRzIGZvcmNpYmx5IGVucXVldWVpbmcgdGhpbmdzIGV2ZW4gaWYgdGhlIGJsb2Nr
IGhhcyBhbHJlYWR5IGJlZW4gc2Vlbi4gSXQncyB1c2VmdWwgZm9yCiAvLyB0aGluZ3MgbGlrZSBi
dWlsZGluZyBhIHNwYW5uaW5nIHRyZWUsIGluIHdoaWNoIGNhc2UgVCAodGhlIGF1eGlsaWFyeSBw
YXlsb2FkKSB3b3VsZCBiZSB0aGUKIC8vIHN1Y2Nlc3NvciBpbmRleC4KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3JrbGlzdCA9IEV4dGVuZGVkR3JhcGhOb2RlV29y
a2xpc3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0PEJhc2ljQmxvY2s+PjsKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3JrbGlzdCA9IEV4dGVuZGVkR3JhcGhOb2Rl
V29ya2xpc3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0PEJhc2ljQmxvY2sqPj47CiAKIHR5cGVk
ZWYgR3JhcGhWaXNpdE9yZGVyIFZpc2l0T3JkZXI7CiAKIHR5cGVkZWYgR3JhcGhOb2RlV2l0aE9y
ZGVyPEJhc2ljQmxvY2sqPiBCbG9ja1dpdGhPcmRlcjsKIAotdHlwZWRlZiBQb3N0T3JkZXJHcmFw
aE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IFBvc3RPcmRl
ckJsb2NrV29ya2xpc3Q7Cit0eXBlZGVmIFBvc3RPcmRlckdyYXBoTm9kZVdvcmtsaXN0PEJhc2lj
QmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+IFBvc3RPcmRlckJsb2NrV29ya2xpc3Q7CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDRkcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDRkcu
aAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ0ZHLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzksOCArMzksOCBAQCBjbGFzcyBDRkcgewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIHR5cGVkZWYgQmFzaWNCbG9jayogTm9kZTsKLSAg
ICB0eXBlZGVmIEluZGV4U2V0PEJhc2ljQmxvY2s+IFNldDsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB1c2luZyBNYXAgPSBJbmRleE1hcDxCYXNpY0Jsb2NrLCBUPjsKKyAgICB0eXBlZGVmIElu
ZGV4U2V0PEJhc2ljQmxvY2sqPiBTZXQ7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcg
TWFwID0gSW5kZXhNYXA8QmFzaWNCbG9jayosIFQ+OwogICAgIHR5cGVkZWYgVmVjdG9yPEJhc2lj
QmxvY2sqLCA0PiBMaXN0OwogCiAgICAgQ0ZHKFByb2NlZHVyZSYgcHJvYykKQEAgLTUxLDcgKzUx
LDcgQEAgcHVibGljOgogICAgIE5vZGUgcm9vdCgpIHsgcmV0dXJuIG1fcHJvY1swXTsgfQogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBNYXA8VD4gbmV3TWFwKCkgeyByZXR1cm4gSW5k
ZXhNYXA8SlNDOjpCMzo6QmFzaWNCbG9jaywgVD4obV9wcm9jLnNpemUoKSk7IH0KKyAgICBNYXA8
VD4gbmV3TWFwKCkgeyByZXR1cm4gSW5kZXhNYXA8SlNDOjpCMzo6QmFzaWNCbG9jayosIFQ+KG1f
cHJvYy5zaXplKCkpOyB9CiAKICAgICBTdWNjZXNzb3JDb2xsZWN0aW9uPEJhc2ljQmxvY2ssIEJh
c2ljQmxvY2s6OlN1Y2Nlc3Nvckxpc3Q+IHN1Y2Nlc3NvcnMoTm9kZSBub2RlKSB7IHJldHVybiBu
b2RlLT5zdWNjZXNzb3JCbG9ja3MoKTsgfQogICAgIEJhc2ljQmxvY2s6OlByZWRlY2Vzc29yTGlz
dCYgcHJlZGVjZXNzb3JzKE5vZGUgbm9kZSkgeyByZXR1cm4gbm9kZS0+cHJlZGVjZXNzb3JzKCk7
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0R1cGxpY2F0ZVRhaWxzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNEdXBsaWNhdGVUYWlscy5j
cHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0R1cGxp
Y2F0ZVRhaWxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgsNyBAQCBwdWJsaWM6CiAK
ICAgICAgICAgbV9wcm9jLnJlc2V0VmFsdWVPd25lcnMoKTsKIAotICAgICAgICBJbmRleFNldDxC
YXNpY0Jsb2NrPiBjYW5kaWRhdGVzOworICAgICAgICBJbmRleFNldDxCYXNpY0Jsb2NrKj4gY2Fu
ZGlkYXRlczsKIAogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jKSB7CiAg
ICAgICAgICAgICBpZiAoYmxvY2stPnNpemUoKSA+IG1fbWF4U2l6ZSkKQEAgLTgyLDcgKzgyLDcg
QEAgcHVibGljOgogICAgICAgICB9CiAKICAgICAgICAgLy8gQ29sbGVjdCB0aGUgc2V0IG9mIHZh
bHVlcyB0aGF0IG11c3QgYmUgZGUtU1NBJ2QuCi0gICAgICAgIEluZGV4U2V0PFZhbHVlPiB2YWx1
ZXNUb0RlbW90ZTsKKyAgICAgICAgSW5kZXhTZXQ8VmFsdWUqPiB2YWx1ZXNUb0RlbW90ZTsKICAg
ICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvYykgewogICAgICAgICAgICAgZm9y
IChWYWx1ZSogdmFsdWUgOiAqYmxvY2spIHsKICAgICAgICAgICAgICAgICBpZiAodmFsdWUtPm9w
Y29kZSgpID09IFBoaSAmJiBjYW5kaWRhdGVzLmNvbnRhaW5zKGJsb2NrKSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVDb21tb25T
dWJleHByZXNzaW9ucy5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjgyLDcgKzY4Miw3IEBAIHByaXZhdGU6CiAgICAgRG9taW5hdG9ycyYgbV9kb21pbmF0
b3JzOwogICAgIFB1cmVDU0UgbV9wdXJlQ1NFOwogICAgIAotICAgIEluZGV4TWFwPEJhc2ljQmxv
Y2ssIEltcHVyZUJsb2NrRGF0YT4gbV9pbXB1cmVCbG9ja0RhdGE7CisgICAgSW5kZXhNYXA8QmFz
aWNCbG9jayosIEltcHVyZUJsb2NrRGF0YT4gbV9pbXB1cmVCbG9ja0RhdGE7CiAKICAgICBJbXB1
cmVCbG9ja0RhdGEgbV9kYXRhOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNG
aXhTU0EuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZpeFNT
QS5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Zp
eFNTQS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgbmFtZXNwYWNlIHsKIGNv
bnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKLXZv
aWQgZGVtb3RlVmFsdWVzKFByb2NlZHVyZSYgcHJvYywgY29uc3QgSW5kZXhTZXQ8VmFsdWU+JiB2
YWx1ZXMpCit2b2lkIGRlbW90ZVZhbHVlcyhQcm9jZWR1cmUmIHByb2MsIGNvbnN0IEluZGV4U2V0
PFZhbHVlKj4mIHZhbHVlcykKIHsKICAgICBIYXNoTWFwPFZhbHVlKiwgVmFyaWFibGUqPiBtYXA7
CiAgICAgSGFzaE1hcDxWYWx1ZSosIFZhcmlhYmxlKj4gcGhpTWFwOwpAQCAtMTIxLDcgKzEyMSw3
IEBAIGJvb2wgZml4U1NBKFByb2NlZHVyZSYgcHJvYykKICAgICAvLyBKdXN0IGZvciBzYW5pdHks
IHJlbW92ZSBhbnkgdW51c2VkIHZhcmlhYmxlcyBmaXJzdC4gSXQncyB1bmxpa2VseSB0aGF0IHRo
aXMgY29kZSBoYXMgYW55CiAgICAgLy8gYnVncyBoYXZpbmcgdG8gZG8gd2l0aCBkZWFkIHZhcmlh
YmxlcywgYnV0IGl0IHdvdWxkIGJlIHNpbGx5IHRvIGhhdmUgdG8gZml4IHN1Y2ggYSBidWcgaWYK
ICAgICAvLyBpdCBkaWQgYXJpc2UuCi0gICAgSW5kZXhTZXQ8VmFyaWFibGU+IGxpdmVWYXJpYWJs
ZXM7CisgICAgSW5kZXhTZXQ8VmFyaWFibGUqPiBsaXZlVmFyaWFibGVzOwogICAgIGZvciAoVmFs
dWUqIHZhbHVlIDogcHJvYy52YWx1ZXMoKSkgewogICAgICAgICBpZiAoVmFyaWFibGVWYWx1ZSog
dmFyaWFibGVWYWx1ZSA9IHZhbHVlLT5hczxWYXJpYWJsZVZhbHVlPigpKQogICAgICAgICAgICAg
bGl2ZVZhcmlhYmxlcy5hZGQodmFyaWFibGVWYWx1ZS0+dmFyaWFibGUoKSk7CkBAIC0xNDUsNyAr
MTQ1LDcgQEAgYm9vbCBmaXhTU0EoUHJvY2VkdXJlJiBwcm9jKQogCiAgICAgLy8gQ3JlYXRlIGEg
U1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUgKCJjYWxjVmFyIikgZm9yIGV2ZXJ5IHZhcmlhYmxlLgog
ICAgIFZlY3RvcjxWYXJpYWJsZSo+IGNhbGNWYXJUb1ZhcmlhYmxlOwotICAgIEluZGV4TWFwPFZh
cmlhYmxlLCBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSo+IHZhcmlhYmxlVG9DYWxjVmFyKHByb2Mu
dmFyaWFibGVzKCkuc2l6ZSgpKTsKKyAgICBJbmRleE1hcDxWYXJpYWJsZSosIFNTQUNhbGN1bGF0
b3I6OlZhcmlhYmxlKj4gdmFyaWFibGVUb0NhbGNWYXIocHJvYy52YXJpYWJsZXMoKS5zaXplKCkp
OwogCiAgICAgZm9yIChWYXJpYWJsZSogdmFyaWFibGUgOiBwcm9jLnZhcmlhYmxlcygpKSB7CiAg
ICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiBjYWxjVmFyID0gc3NhLm5ld1ZhcmlhYmxl
KCk7CkBAIC0xODUsNyArMTg1LDcgQEAgYm9vbCBmaXhTU0EoUHJvY2VkdXJlJiBwcm9jKQogCiAg
ICAgLy8gTm93IHBlcmZvcm0gdGhlIGNvbnZlcnNpb24uCiAgICAgSW5zZXJ0aW9uU2V0IGluc2Vy
dGlvblNldChwcm9jKTsKLSAgICBJbmRleE1hcDxWYXJpYWJsZSwgVmFsdWUqPiBtYXBwaW5nKHBy
b2MudmFyaWFibGVzKCkuc2l6ZSgpKTsKKyAgICBJbmRleE1hcDxWYXJpYWJsZSosIFZhbHVlKj4g
bWFwcGluZyhwcm9jLnZhcmlhYmxlcygpLnNpemUoKSk7CiAgICAgZm9yIChCYXNpY0Jsb2NrKiBi
bG9jayA6IHByb2MuYmxvY2tzSW5QcmVPcmRlcigpKSB7CiAgICAgICAgIG1hcHBpbmcuY2xlYXIo
KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJhbmdlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNIZWFwUmFuZ2UuY3BwCShyZXZp
c2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNIZWFwUmFuZ2UuY3Bw
CShub25leGlzdGVudCkKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQjNI
ZWFwUmFuZ2UuaCIKLQotI2lmIEVOQUJMRShCM19KSVQpCi0KLW5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgewotCi12b2lkIEhlYXBSYW5nZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAotewotICAgIGlmICgqdGhpcyA9PSBIZWFwUmFuZ2UoKSkgewotICAgICAgICBvdXQucHJpbnQo
IkJvdHRvbSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICgqdGhpcyA9PSB0b3Ao
KSkgewotICAgICAgICBvdXQucHJpbnQoIlRvcCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIG91dC5wcmludChtX2JlZ2luLCAiLi4uIiwgbV9lbmQpOwotfQotCi19IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKLQotI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCi0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNIZWFwUmFuZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsOTAg
KzI3LDE1IEBACiAKICNpZiBFTkFCTEUoQjNfSklUKQogCi0jaW5jbHVkZSA8bGltaXRzLmg+Ci0j
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4K
KyNpbmNsdWRlIDx3dGYvUmFuZ2UuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CiAKIC8vIEFsaWFzIGFuYWx5c2lzIGluIEIzIGlzIGRvbmUgYnkgY2hlY2tpbmcgaWYgdHdvIGlu
dGVnZXIgcmFuZ2VzIG92ZXJsYXAuIFRoaXMgaXMgcG93ZXJmdWwgZW5vdWdoCiAvLyB0byBiZSB1
c2VkIGZvciBUQkFBLXN0eWxlIGFsaWFzIGFuYWx5c2lzIHVzZWQgYnkgdGhlIERGRywgRlRMLCBh
bmQgTExWTTogeW91IGp1c3QgdHVybiBlYWNoIG5vZGUKIC8vIGluIHRoZSB0cmVlIG9mIGFic3Ry
YWN0IGhlYXBzIGludG8gYSBwcmUvcG9zdCByYW5nZS4KLS8vCi0vLyBOb3RlIHRoYXQgdGhlICdi
ZWdpbicgaXMgaW5jbHVzaXZlLCB3aGlsZSB0aGUgJ2VuZCcgaXMgZXhjbHVzaXZlLiBUaGVzZSB0
d28gcmFuZ2VzIGFyZSBub24tCi0vLyBvdmVybGFwcGluZzoKLS8vCi0vLyAgICAgcmFuZ2VBID0g
MC4uLjgKLS8vICAgICByYW5nZUIgPSA4Li4uMTYKLQotY2xhc3MgSGVhcFJhbmdlIHsKLXB1Ymxp
YzoKLSAgICB0eXBlZGVmIHVuc2lnbmVkIFR5cGU7Ci0gICAgCi0gICAgSGVhcFJhbmdlKCkKLSAg
ICAgICAgOiBtX2JlZ2luKDApCi0gICAgICAgICwgbV9lbmQoMCkKLSAgICB7Ci0gICAgfQotCi0g
ICAgZXhwbGljaXQgSGVhcFJhbmdlKHVuc2lnbmVkIHZhbHVlKQotICAgICAgICA6IG1fYmVnaW4o
dmFsdWUpCi0gICAgICAgICwgbV9lbmQodmFsdWUgKyAxKQotICAgIHsKLSAgICAgICAgQVNTRVJU
KG1fZW5kID49IG1fYmVnaW4pOwotICAgIH0KLQotICAgIEhlYXBSYW5nZSh1bnNpZ25lZCBiZWdp
biwgdW5zaWduZWQgZW5kKQotICAgICAgICA6IG1fYmVnaW4oYmVnaW4pCi0gICAgICAgICwgbV9l
bmQoZW5kKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fZW5kID49IG1fYmVnaW4pOwotICAgICAg
ICBpZiAobV9iZWdpbiA9PSBtX2VuZCkgewotICAgICAgICAgICAgLy8gQ2Fub25pY2FsaXplIGVt
cHR5IHJhbmdlcy4KLSAgICAgICAgICAgIG1fYmVnaW4gPSAwOwotICAgICAgICAgICAgbV9lbmQg
PSAwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIEhlYXBSYW5nZSB0b3AoKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIEhlYXBSYW5nZSgwLCBVSU5UX01BWCk7Ci0gICAgfQotCi0gICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IEhlYXBSYW5nZSYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAg
ICAgICByZXR1cm4gbV9iZWdpbiA9PSBvdGhlci5tX2JlZ2luCi0gICAgICAgICAgICAmJiBtX2Vu
ZCA9PSBvdGhlci5tX2VuZDsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgSGVh
cFJhbmdlJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAhKCp0aGlzID09IG90
aGVyKTsKLSAgICB9Ci0gICAgCi0gICAgSGVhcFJhbmdlIG9wZXJhdG9yfChjb25zdCBIZWFwUmFu
Z2UmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIEhlYXBSYW5nZSgKLSAgICAg
ICAgICAgIHN0ZDo6bWluKG1fYmVnaW4sIG90aGVyLm1fYmVnaW4pLAotICAgICAgICAgICAgc3Rk
OjptYXgobV9lbmQsIG90aGVyLm1fZW5kKSk7Ci0gICAgfQotICAgIAotICAgIGV4cGxpY2l0IG9w
ZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX2JlZ2luICE9IG1fZW5kOyB9Ci0KLSAgICB1
bnNpZ25lZCBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fYmVnaW47IH0KLSAgICB1bnNpZ25lZCBl
bmQoKSBjb25zdCB7IHJldHVybiBtX2VuZDsgfQotCi0gICAgYm9vbCBvdmVybGFwcyhjb25zdCBI
ZWFwUmFuZ2UmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6cmFuZ2Vz
T3ZlcmxhcChtX2JlZ2luLCBtX2VuZCwgb3RoZXIubV9iZWdpbiwgb3RoZXIubV9lbmQpOwotICAg
IH0KLQotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdDsKLQotcHJpdmF0ZToKLSAgICB1bnNpZ25lZCBtX2JlZ2luOwotICAgIHVuc2lnbmVkIG1f
ZW5kOwotfTsKKwordHlwZWRlZiBSYW5nZTx1bnNpZ25lZD4gSGVhcFJhbmdlOwogCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93
ZXJUb0Fpci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93
ZXJUb0Fpci5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0xvd2VyVG9BaXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzc5LDEwICszMzc5LDEwIEBA
IHByaXZhdGU6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQog
ICAgIAotICAgIEluZGV4U2V0PFZhbHVlPiBtX2xvY2tlZDsgLy8gVGhlc2UgYXJlIHZhbHVlcyB0
aGF0IHdpbGwgaGF2ZSBubyBUbXAgaW4gQWlyLgotICAgIEluZGV4TWFwPFZhbHVlLCBUbXA+IG1f
dmFsdWVUb1RtcDsgLy8gVGhlc2UgYXJlIHZhbHVlcyB0aGF0IG11c3QgaGF2ZSBhIFRtcCBpbiBB
aXIuIFdlIHNheSB0aGF0IGEgVmFsdWUqIHdpdGggYSBub24tbnVsbCBUbXAgaXMgInBpbm5lZCIu
Ci0gICAgSW5kZXhNYXA8VmFsdWUsIFRtcD4gbV9waGlUb1RtcDsgLy8gRWFjaCBQaGkgZ2V0cyBp
dHMgb3duIFRtcC4KLSAgICBJbmRleE1hcDxCMzo6QmFzaWNCbG9jaywgQWlyOjpCYXNpY0Jsb2Nr
Kj4gbV9ibG9ja1RvQmxvY2s7CisgICAgSW5kZXhTZXQ8VmFsdWUqPiBtX2xvY2tlZDsgLy8gVGhl
c2UgYXJlIHZhbHVlcyB0aGF0IHdpbGwgaGF2ZSBubyBUbXAgaW4gQWlyLgorICAgIEluZGV4TWFw
PFZhbHVlKiwgVG1wPiBtX3ZhbHVlVG9UbXA7IC8vIFRoZXNlIGFyZSB2YWx1ZXMgdGhhdCBtdXN0
IGhhdmUgYSBUbXAgaW4gQWlyLiBXZSBzYXkgdGhhdCBhIFZhbHVlKiB3aXRoIGEgbm9uLW51bGwg
VG1wIGlzICJwaW5uZWQiLgorICAgIEluZGV4TWFwPFZhbHVlKiwgVG1wPiBtX3BoaVRvVG1wOyAv
LyBFYWNoIFBoaSBnZXRzIGl0cyBvd24gVG1wLgorICAgIEluZGV4TWFwPEIzOjpCYXNpY0Jsb2Nr
KiwgQWlyOjpCYXNpY0Jsb2NrKj4gbV9ibG9ja1RvQmxvY2s7CiAgICAgSGFzaE1hcDxCMzo6U3Rh
Y2tTbG90KiwgQWlyOjpTdGFja1Nsb3QqPiBtX3N0YWNrVG9TdGFjazsKICAgICBIYXNoTWFwPFZh
cmlhYmxlKiwgVG1wPiBtX3ZhcmlhYmxlVG9UbXA7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM01vdmVDb25zdGFudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM01vdmVDb25zdGFudHMuY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNb3ZlQ29uc3RhbnRzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzMsNyArNzMsNyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgRG9taW5hdG9ycyYgZG9t
aW5hdG9ycyA9IG1fcHJvYy5kb21pbmF0b3JzKCk7CiAgICAgICAgIEhhc2hNYXA8VmFsdWVLZXks
IFZhbHVlKj4gdmFsdWVGb3JDb25zdGFudDsKLSAgICAgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywg
VmVjdG9yPFZhbHVlKj4+IG1hdGVyaWFsaXphdGlvbnMobV9wcm9jLnNpemUoKSk7CisgICAgICAg
IEluZGV4TWFwPEJhc2ljQmxvY2sqLCBWZWN0b3I8VmFsdWUqPj4gbWF0ZXJpYWxpemF0aW9ucyht
X3Byb2Muc2l6ZSgpKTsKIAogICAgICAgICAvLyBXZSBkZXRlcm1pbmUgd2hlcmUgdGhpbmdzIGdl
dCBtYXRlcmlhbGl6ZWQgYmFzZWQgb24gd2hlcmUgdGhleSBhcmUgdXNlZC4KICAgICAgICAgZm9y
IChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvYykgewpAQCAtMjc0LDcgKzI3NCw3IEBAIHByaXZh
dGU6CiAgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2NvbnN0VGFibGUpCiAgICAgICAgICAg
ICBtX2RhdGFTZWN0aW9uW2VudHJ5LnZhbHVlXSA9IGVudHJ5LmtleS52YWx1ZSgpOwogCi0gICAg
ICAgIEluZGV4U2V0PFZhbHVlPiBvZmZMaW1pdHM7CisgICAgICAgIEluZGV4U2V0PFZhbHVlKj4g
b2ZmTGltaXRzOwogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jKSB7CiAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHZhbHVlSW5kZXggPSAwOyB2YWx1ZUluZGV4IDwgYmxv
Y2stPnNpemUoKTsgKyt2YWx1ZUluZGV4KSB7CiAgICAgICAgICAgICAgICAgU3RhY2ttYXBWYWx1
ZSogdmFsdWUgPSBibG9jay0+YXQodmFsdWVJbmRleCktPmFzPFN0YWNrbWFwVmFsdWU+KCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQaGlDaGlsZHJlbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoaUNoaWxkcmVuLmgJKHJldmlzaW9uIDIx
NDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoaUNoaWxkcmVuLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE2OCw3ICsxNjgsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgVmVjdG9yPFZh
bHVlKiwgOD4mIHBoaXMoKSBjb25zdCB7IHJldHVybiBtX3BoaXM7IH0KIAogcHJpdmF0ZToKLSAg
ICBJbmRleE1hcDxWYWx1ZSwgVmVjdG9yPFVwc2lsb25WYWx1ZSo+PiBtX3Vwc2lsb25zOworICAg
IEluZGV4TWFwPFZhbHVlKiwgVmVjdG9yPFVwc2lsb25WYWx1ZSo+PiBtX3Vwc2lsb25zOwogICAg
IFZlY3RvcjxWYWx1ZSosIDg+IG1fcGhpczsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg2LDcgKzE4
Niw3IEBAIHZvaWQgUHJvY2VkdXJlOjppbnZhbGlkYXRlQ0ZHKCkKIAogdm9pZCBQcm9jZWR1cmU6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKLSAgICBJbmRleFNldDxWYWx1ZT4gdmFs
dWVzSW5CbG9ja3M7CisgICAgSW5kZXhTZXQ8VmFsdWUqPiB2YWx1ZXNJbkJsb2NrczsKICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogKnRoaXMpIHsKICAgICAgICAgb3V0LnByaW50KGRlZXBE
dW1wKCp0aGlzLCBibG9jaykpOwogICAgICAgICB2YWx1ZXNJbkJsb2Nrcy5hZGRBbGwoKmJsb2Nr
KTsKQEAgLTI0NSw3ICsyNDUsNyBAQCB2b2lkIFByb2NlZHVyZTo6ZGVsZXRlVmFsdWUoVmFsdWUq
IHZhbHVlCiAKIHZvaWQgUHJvY2VkdXJlOjpkZWxldGVPcnBoYW5zKCkKIHsKLSAgICBJbmRleFNl
dDxWYWx1ZT4gdmFsdWVzSW5CbG9ja3M7CisgICAgSW5kZXhTZXQ8VmFsdWUqPiB2YWx1ZXNJbkJs
b2NrczsKICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogKnRoaXMpCiAgICAgICAgIHZhbHVl
c0luQmxvY2tzLmFkZEFsbCgqYmxvY2spOwogCkBAIC0zMzMsNyArMzMzLDcgQEAgVmFsdWUqIFBy
b2NlZHVyZTo6YWRkVmFsdWVJbXBsKFZhbHVlKiB2YQogCiB2b2lkIFByb2NlZHVyZTo6c2V0Qmxv
Y2tPcmRlckltcGwoVmVjdG9yPEJhc2ljQmxvY2sqPiYgYmxvY2tzKQogewotICAgIEluZGV4U2V0
PEJhc2ljQmxvY2s+IGJsb2Nrc1NldDsKKyAgICBJbmRleFNldDxCYXNpY0Jsb2NrKj4gYmxvY2tz
U2V0OwogICAgIGJsb2Nrc1NldC5hZGRBbGwoYmxvY2tzKTsKIAogICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiAqdGhpcykgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVk
dWNlRG91YmxlVG9GbG9hdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzUmVkdWNlRG91YmxlVG9GbG9hdC5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZURvdWJsZVRvRmxvYXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MjQsMTggKzQyNCwxOCBAQCBwcml2YXRlOgogCiAgICAgLy8gU2V0IG9mIGFsbCB0
aGUgRG91YmxlIHZhbHVlcyB0aGF0IGFyZSBhY3R1YWxseSB1c2VkIGFzIERvdWJsZS4KICAgICAv
LyBDb252ZXJ0aW5nIGFueSBvZiB0aGVtIHRvIEZsb2F0IHdvdWxkIGxvc2UgcHJlY2lzaW9uLgot
ICAgIEluZGV4U2V0PFZhbHVlPiBtX3ZhbHVlc1VzZWRBc0RvdWJsZTsKKyAgICBJbmRleFNldDxW
YWx1ZSo+IG1fdmFsdWVzVXNlZEFzRG91YmxlOwogCiAgICAgLy8gU2V0IG9mIGFsbCB0aGUgUGhp
IG9mIHR5cGUgRG91YmxlIHRoYXQgcmVhbGx5IGNvbnRhaW5zIGEgRG91YmxlLgogICAgIC8vIEFu
eSBEb3VibGUgUGhpIG5vdCBpbiB0aGUgc2V0IGNhbiBiZSBjb252ZXJ0ZWQgdG8gRmxvYXQgd2l0
aG91dCBsb3NpbmcgcHJlY2lzaW9uLgotICAgIEluZGV4U2V0PFZhbHVlPiBtX3BoaXNDb250YWlu
aW5nRG91YmxlOworICAgIEluZGV4U2V0PFZhbHVlKj4gbV9waGlzQ29udGFpbmluZ0RvdWJsZTsK
IAogICAgIC8vIEFueSB2YWx1ZSB0aGF0IHdhcyBjb252ZXJ0ZWQgZnJvbSBwcm9kdWNpbmcgYSBE
b3VibGUgdG8gcHJvZHVjaW5nIGEgRmxvYXQuCiAgICAgLy8gVGhpcyBzZXQgZG9lcyBub3QgaW5j
bHVkZSBQaGktVXBzaWxvbnMuCi0gICAgSW5kZXhTZXQ8VmFsdWU+IG1fY29udmVydGVkVmFsdWU7
CisgICAgSW5kZXhTZXQ8VmFsdWUqPiBtX2NvbnZlcnRlZFZhbHVlOwogCiAgICAgLy8gQW55IHZh
bHVlIHRoYXQgcHJldmlvdXNseSBwcm9kdWNlZCBEb3VibGUgYW5kIG5vdyBwcm9kdWNlIEZsb2F0
LgotICAgIEluZGV4U2V0PFZhbHVlPiBtX2NvbnZlcnRlZFBoaXM7CisgICAgSW5kZXhTZXQ8VmFs
dWUqPiBtX2NvbnZlcnRlZFBoaXM7CiB9OwogCiB2b2lkIHByaW50R3JhcGhJZkNvbnZlcnRpbmco
UHJvY2VkdXJlJiBwcm9jZWR1cmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNS
ZWR1Y2VTdHJlbmd0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzUmVkdWNlU3RyZW5ndGguY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzOTIs
NyArMjM5Miw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGtpbGxEZWFkQ29kZSgpCiAgICAgewot
ICAgICAgICBHcmFwaE5vZGVXb3JrbGlzdDxWYWx1ZSosIEluZGV4U2V0PFZhbHVlPj4gd29ya2xp
c3Q7CisgICAgICAgIEdyYXBoTm9kZVdvcmtsaXN0PFZhbHVlKiwgSW5kZXhTZXQ8VmFsdWUqPj4g
d29ya2xpc3Q7CiAgICAgICAgIFZlY3RvcjxVcHNpbG9uVmFsdWUqLCA2ND4gdXBzaWxvbnM7CiAg
ICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2MpIHsKICAgICAgICAgICAgIGZv
ciAoVmFsdWUqIHZhbHVlIDogKmJsb2NrKSB7CkBAIC0yNDI5LDcgKzI0MjksNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgSW5kZXhTZXQ8
VmFyaWFibGU+IGxpdmVWYXJpYWJsZXM7CisgICAgICAgIEluZGV4U2V0PFZhcmlhYmxlKj4gbGl2
ZVZhcmlhYmxlczsKICAgICAgICAgCiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBt
X3Byb2MpIHsKICAgICAgICAgICAgIHNpemVfdCBzb3VyY2VJbmRleCA9IDA7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTU0FDYWxjdWxhdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU1NBQ2FsY3VsYXRvci5oCShyZXZpc2lvbiAyMTQ0Mjcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTU0FDYWxjdWxhdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMTU2LDcgKzE1Niw3IEBAIHByaXZhdGU6CiAgICAgICAgIFZlY3RvcjxEZWYqPiBtX3Bo
aXM7CiAgICAgfTsKICAgICAKLSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBCbG9ja0RhdGE+IG1f
ZGF0YTsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgQmxvY2tEYXRhPiBtX2RhdGE7CiAKICAg
ICBEb21pbmF0b3JzKiBtX2RvbWluYXRvcnMgeyBudWxscHRyIH07CiAgICAgUHJvY2VkdXJlJiBt
X3Byb2M7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVc2VDb3VudHMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVc2VDb3VudHMuaAkocmV2aXNp
b24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXNlQ291bnRzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC00OCw3ICs0OCw3IEBAIHByaXZhdGU6CiAgICAgICAgIHVuc2lnbmVk
IG51bVVzaW5nSW5zdHJ1Y3Rpb25zIHsgMCB9OwogICAgIH07CiAgICAgCi0gICAgSW5kZXhNYXA8
VmFsdWUsIENvdW50cz4gbV9jb3VudHM7CisgICAgSW5kZXhNYXA8VmFsdWUqLCBDb3VudHM+IG1f
Y291bnRzOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRl
UmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmNwcAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmlu
Zy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoQjNfSklU
KQogCiAjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckZpeFNwaWxsc0FmdGVyVGVy
bWluYWxzLmgiCiAjaW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0LmgiCiAjaW5jbHVkZSAiQWlySW5z
dElubGluZXMuaCIKICNpbmNsdWRlICJBaXJMaXZlbmVzcy5oIgpAQCAtMTU4NSw2ICsxNTg2LDkg
QEAgcHJvdGVjdGVkOgogICAgICAgICBtX2NvYWxlc2NpbmdDYW5kaWRhdGVzLmNsZWFyKCk7CiAg
ICAgICAgIG1fd29ya2xpc3RNb3Zlcy5jbGVhcigpOwogCisgICAgICAgIC8vIEZJWE1FOiBJdCBz
ZWVtcyBsaWtlIHdlIGRvbid0IG5lZWQgdG8gcmVjb21wdXRlIGxpdmVuZXNzLiBXZSBqdXN0IG5l
ZWQgdG8gdXBkYXRlIGl0cyBkYXRhCisgICAgICAgIC8vIHN0cnVjdHVyZXMgc28gdGhhdCBpdCBr
bm93cyB0aGF0IHRoZSBuZXdseSBpbnRyb2R1Y2VkIHRlbXBvcmFyaWVzIGFyZSBub3QgbGl2ZSBh
dCBhbnkgYmFzaWMKKyAgICAgICAgLy8gYmxvY2sgYm91bmRhcnkuIFRoaXMgc2hvdWxkIHRyaXZp
YWxseSBiZSB0cnVlIGZvciBub3cuCiAgICAgICAgIFRtcExpdmVuZXNzPGJhbms+IGxpdmVuZXNz
KG1fY29kZSk7CiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsKICAg
ICAgICAgICAgIHR5cGVuYW1lIFRtcExpdmVuZXNzPGJhbms+OjpMb2NhbENhbGMgbG9jYWxDYWxj
KGxpdmVuZXNzLCBibG9jayk7CkBAIC0xNzk4LDcgKzE4MDIsNyBAQCBwdWJsaWM6CiAgICAgICAg
IG1fbnVtSXRlcmF0aW9ucyA9IDA7CiAgICAgICAgIGFsbG9jYXRlT25CYW5rPEZQPigpOwogCi0g
ICAgICAgIGZpeFNwaWxsc0FmdGVyVGVybWluYWxzKCk7CisgICAgICAgIGZpeFNwaWxsc0FmdGVy
VGVybWluYWxzKG1fY29kZSk7CiAKICAgICAgICAgaWYgKHJlcG9ydFN0YXRzKQogICAgICAgICAg
ICAgZGF0YUxvZygiTnVtIGl0ZXJhdGlvbnMgPSAiLCBtX251bUl0ZXJhdGlvbnMsICJcbiIpOwpA
QCAtMTk1NCw3ICsxOTU4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgICAgICBpbnN0LmZvckVhY2hUbXBGYXN0KFsmXSAoVG1wJiB0bXApIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHRtcC5pc1JlZygpIHx8IHRtcC5pc0dQKCkgPT0gKGJhbmsgIT0gR1Ap
KQorICAgICAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkgfHwgdG1wLmJhbmsoKSAhPSBi
YW5rKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICAgICAg
ICAgIFRtcCBhbGlhc1RtcCA9IGFsbG9jYXRvci5nZXRBbGlhcyh0bXApOwpAQCAtMjE1Myw2ICsy
MTU3LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgICAgICAgICB0bXAgPSBtX2NvZGUubmV3
VG1wKGJhbmspOworICAgICAgICAgICAgICAgICAgICB1bnNwaWxsYWJsZVRtcHMuYWRkKEFic29s
dXRlVG1wTWFwcGVyPGJhbms+OjphYnNvbHV0ZUluZGV4KHRtcCkpOworICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT0gQXJnOjpTY3JhdGNoKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgICAgICAgICAgICAgIFdpZHRo
IHNwaWxsV2lkdGggPSBtX3RtcFdpZHRoLnJlcXVpcmVkV2lkdGgodG1wKTsKICAgICAgICAgICAg
ICAgICAgICAgT3Bjb2RlIG1vdmUgPSBPb3BzOwogICAgICAgICAgICAgICAgICAgICBzd2l0Y2gg
KHN0YWNrU2xvdE1pbmltdW1XaWR0aChzcGlsbFdpZHRoKSkgewpAQCAtMjE2NywxMSArMjE3Nyw4
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIHRtcCA9IG1fY29kZS5uZXdUbXAoYmFu
ayk7Ci0gICAgICAgICAgICAgICAgICAgIHVuc3BpbGxhYmxlVG1wcy5hZGQoQWJzb2x1dGVUbXBN
YXBwZXI8YmFuaz46OmFic29sdXRlSW5kZXgodG1wKSk7Ci0KICAgICAgICAgICAgICAgICAgICAg
QXJnIGFyZyA9IEFyZzo6c3RhY2soc3RhY2tTbG90RW50cnktPnZhbHVlKTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKEFyZzo6aXNBbnlVc2Uocm9sZSkgJiYgcm9sZSAhPSBBcmc6OlNjcmF0Y2gp
CisgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzQW55VXNlKHJvbGUpKQogICAgICAgICAg
ICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydChpbnN0SW5kZXgsIG1vdmUsIGluc3Qu
b3JpZ2luLCBhcmcsIHRtcCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzQW55RGVm
KHJvbGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydChpbnN0
SW5kZXggKyAxLCBtb3ZlLCBpbnN0Lm9yaWdpbiwgdG1wLCBhcmcpOwpAQCAtMjE4Nyw2NiArMjE5
NCw2IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAKLSAgICB2b2lkIGZpeFNwaWxsc0Fm
dGVyVGVybWluYWxzKCkKLSAgICB7Ci0gICAgICAgIC8vIEJlY2F1c2UgdGhlcmUgbWF5IGJlIHRl
cm1pbmFscyB0aGF0IHByb2R1Y2UgdmFsdWVzLCBJUkMgbWF5Ci0gICAgICAgIC8vIHdhbnQgdG8g
c3BpbGwgdGhvc2UgdGVybWluYWxzLiBJdCdsbCBoYXBwZW4gdG8gc3BpbGwgaXQgYWZ0ZXIKLSAg
ICAgICAgLy8gdGhlIHRlcm1pbmFsLiBJZiB3ZSBsZWZ0IHRoZSBncmFwaCBpbiB0aGlzIHN0YXRl
LCBpdCdkIGJlIGludmFsaWQKLSAgICAgICAgLy8gYmVjYXVzZSBhIHRlcm1pbmFsIG11c3QgYmUg
dGhlIGxhc3QgaW5zdHJ1Y3Rpb24gaW4gYSBibG9jay4KLSAgICAgICAgLy8gV2UgZml4IHRoYXQg
aGVyZS4KLQotICAgICAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KG1fY29kZSk7Ci0KLSAg
ICAgICAgYm9vbCBhZGRlZEJsb2NrcyA9IGZhbHNlOwotCi0gICAgICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBtX2NvZGUpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHRlcm1pbmFsSW5kZXgg
PSBibG9jay0+c2l6ZSgpOwotICAgICAgICAgICAgYm9vbCBmb3VuZFRlcm1pbmFsID0gZmFsc2U7
Ci0gICAgICAgICAgICB3aGlsZSAodGVybWluYWxJbmRleC0tKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKGJsb2NrLT5hdCh0ZXJtaW5hbEluZGV4KS5pc1Rlcm1pbmFsKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgZm91bmRUZXJtaW5hbCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEFTU0VSVF9V
TlVTRUQoZm91bmRUZXJtaW5hbCwgZm91bmRUZXJtaW5hbCk7Ci0KLSAgICAgICAgICAgIGlmICh0
ZXJtaW5hbEluZGV4ID09IGJsb2NrLT5zaXplKCkgLSAxKQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgICAgICAvLyBUaGVyZSBtdXN0IGJlIGluc3RydWN0aW9ucyBhZnRlciB0
aGUgdGVybWluYWwgYmVjYXVzZSBpdCdzIG5vdCB0aGUgbGFzdCBpbnN0cnVjdGlvbi4KLSAgICAg
ICAgICAgIEFTU0VSVCh0ZXJtaW5hbEluZGV4IDwgYmxvY2stPnNpemUoKSAtIDEpOwotICAgICAg
ICAgICAgVmVjdG9yPEluc3QsIDE+IGluc3RzVG9Nb3ZlOwotICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gdGVybWluYWxJbmRleCArIDE7IGkgPCBibG9jay0+c2l6ZSgpOyBpKyspCi0gICAg
ICAgICAgICAgICAgaW5zdHNUb01vdmUuYXBwZW5kKGJsb2NrLT5hdChpKSk7Ci0gICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChpbnN0c1RvTW92ZS5zaXplKCkpOwotCi0gICAgICAgICAgICBmb3Ig
KEZyZXF1ZW50ZWRCbG9jayYgZnJlcXVlbnRlZFN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3Jz
KCkpIHsKLSAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBmcmVxdWVudGVk
U3VjY2Vzc29yLmJsb2NrKCk7Ci0gICAgICAgICAgICAgICAgLy8gSWYgc3VjY2Vzc29yJ3Mgb25s
eSBwcmVkZWNlc3NvciBpcyBibG9jaywgd2UgY2FuIHBsYW50IHRoZSBzcGlsbCBpbnNpZGUKLSAg
ICAgICAgICAgICAgICAvLyB0aGUgc3VjY2Vzc29yLiBPdGhlcndpc2UsIHdlIG11c3Qgc3BsaXQg
dGhlIGNyaXRpY2FsIGVkZ2UgYW5kIGNyZWF0ZQotICAgICAgICAgICAgICAgIC8vIGEgbmV3IGJs
b2NrIGZvciB0aGUgc3BpbGwuCi0gICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3Nvci0+bnVtUHJl
ZGVjZXNzb3JzKCkgPT0gMSkgewotICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5z
ZXJ0SW5zdHMoMCwgaW5zdHNUb01vdmUpOwotICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25T
ZXQuZXhlY3V0ZShzdWNjZXNzb3IpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGFkZGVkQmxvY2tzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgLy8g
RklYTUU6IFdlIHByb2JhYmx5IHdhbnQgYmV0dGVyIGJsb2NrIG9yZGVyaW5nIGhlcmUuCi0gICAg
ICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIG5ld0Jsb2NrID0gbV9jb2RlLmFkZEJsb2NrKCk7
Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgSW5zdCYgaW5zdCA6IGluc3RzVG9Nb3Zl
KQotICAgICAgICAgICAgICAgICAgICAgICAgbmV3QmxvY2stPmFwcGVuZEluc3QoaW5zdCk7Ci0g
ICAgICAgICAgICAgICAgICAgIG5ld0Jsb2NrLT5hcHBlbmRJbnN0KEluc3QoSnVtcCwgaW5zdHNU
b01vdmUubGFzdCgpLm9yaWdpbikpOwotICAgICAgICAgICAgICAgICAgICBuZXdCbG9jay0+c3Vj
Y2Vzc29ycygpLmFwcGVuZChzdWNjZXNzb3IpOwotICAgICAgICAgICAgICAgICAgICBmcmVxdWVu
dGVkU3VjY2Vzc29yLmJsb2NrKCkgPSBuZXdCbG9jazsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJsb2NrLT5yZXNpemUodGVybWluYWxJbmRleCArIDEp
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGFkZGVkQmxvY2tzKQotICAgICAgICAgICAgbV9j
b2RlLnJlc2V0UmVhY2hhYmlsaXR5KCk7Ci0gICAgfQotCiAgICAgQ29kZSYgbV9jb2RlOwogICAg
IFRtcFdpZHRoIG1fdG1wV2lkdGg7CiAgICAgVXNlQ291bnRzPFRtcD4mIG1fdXNlQ291bnRzOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5
TGluZWFyU2Nhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5jcHAJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFy
U2Nhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MzUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaCIKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlyRml4U3BpbGxzQWZ0
ZXJUZXJtaW5hbHMuaCIKKyNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJB
aXJJbnN0SW5saW5lcy5oIgorI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgiCisjaW5jbHVkZSAiQWly
UGFkSW50ZXJmZXJlbmNlLmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgorI2luY2x1ZGUg
IkFpclRtcElubGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKyNpbmNsdWRlIDx3
dGYvUmFuZ2UuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBB
aXIgeworCituYW1lc3BhY2UgeworCit0eXBlZGVmIFJhbmdlPHNpemVfdD4gSW50ZXJ2YWw7CisK
K3N0cnVjdCBUbXBEYXRhIHsKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
KyAgICB7CisgICAgICAgIG91dC5wcmludCgie2ludGVydmFsID0gIiwgaW50ZXJ2YWwsICIsIHNw
aWxsZWQgPSAiLCBwb2ludGVyRHVtcChzcGlsbGVkKSwgIiwgYXNzaWduZWQgPSAiLCBhc3NpZ25l
ZCwgIn0iKTsKKyAgICB9CisgICAgCisgICAgdm9pZCB2YWxpZGF0ZSgpCisgICAgeworICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghKHNwaWxsZWQgJiYgYXNzaWduZWQpKTsKKyAgICB9CisgICAgCisg
ICAgSW50ZXJ2YWwgaW50ZXJ2YWw7CisgICAgU3RhY2tTbG90KiBzcGlsbGVkOworICAgIFJlZyBh
c3NpZ25lZDsKK307CisKK3N0cnVjdCBDbG9iYmVyIHsKKyAgICBDbG9iYmVyKCkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIENsb2JiZXIoc2l6ZV90IGluZGV4LCBSZWdpc3RlclNldCByZWdzKQor
ICAgICAgICA6IGluZGV4KGluZGV4KQorICAgICAgICAsIHJlZ3MocmVncykKKyAgICB7CisgICAg
fQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAg
ICAgICAgb3V0LnByaW50KGluZGV4LCAiOiIsIHJlZ3MpOworICAgIH0KKyAgICAKKyAgICBzaXpl
X3QgaW5kZXggeyAwIH07CisgICAgUmVnaXN0ZXJTZXQgcmVnczsKK307CisKK2NsYXNzIFRtcE9y
Q2xvYmJlciB7CitwdWJsaWM6CisgICAgVG1wT3JDbG9iYmVyKCkKKyAgICB7CisgICAgfQorICAg
IAorICAgIFRtcE9yQ2xvYmJlcihDbG9iYmVyKiBjbG9iYmVyKQorICAgICAgICA6IG1fdmFsdWUo
Yml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2xvYmJlcikpCisgICAgeworICAgIH0KKyAgICAKKyAg
ICBUbXBPckNsb2JiZXIoVG1wIHRtcCkKKyAgICAgICAgOiBtX3ZhbHVlKCh0bXAuaW50ZXJ2YWxW
YWx1ZSgpIDw8IDEpIHwgMSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBUbXBPckNsb2JiZXImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fdmFsdWUgPT0gb3RoZXIubV92YWx1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IFRtcE9yQ2xvYmJlciYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IG9wZXJhdG9y
IGJvb2woKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzICE9IFRtcE9yQ2xvYmJl
cigpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzVG1wKCkgY29uc3QgeyByZXR1cm4gbV92YWx1
ZSAmIDE7IH0KKyAgICBib29sIGlzQ2xvYmJlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUgJiYg
IShtX3ZhbHVlICYgMSk7IH0KKyAgICAKKyAgICBUbXAgdG1wKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVChpc1RtcCgpKTsKKyAgICAgICAgcmV0dXJuIFRtcDo6dG1wRm9ySW50ZXJuYWxW
YWx1ZShtX3ZhbHVlID4+IDEpOworICAgIH0KKyAgICBjb25zdCBDbG9iYmVyJiBjbG9iYmVyKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0Nsb2JiZXIoKSk7CisgICAgICAgIHJldHVy
biAqYml0d2lzZV9jYXN0PENsb2JiZXIqPihtX3ZhbHVlKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoISp0aGlz
KSB7CisgICAgICAgICAgICBvdXQucHJpbnQoIjxudWxsPiIpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIGlmIChpc1RtcCgpKSB7CisgICAgICAgICAgICBvdXQucHJp
bnQodG1wKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG91dC5w
cmludChjbG9iYmVyKCkpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgdWludHB0cl90IG1f
dmFsdWUgeyAwIH07Cit9OworCit0ZW1wbGF0ZTxCYW5rIGJhbms+CitjbGFzcyBMaW5lYXJTY2Fu
IHsKK3B1YmxpYzoKKyAgICBMaW5lYXJTY2FuKENvZGUmIGNvZGUpCisgICAgICAgIDogbV9jb2Rl
KGNvZGUpCisgICAgICAgICwgbV9zdGFja0luZGV4KGNvZGUuc2l6ZSgpKQorICAgICAgICAsIG1f
bWFwKGNvZGUubnVtVG1wcyhiYW5rKSkKKyAgICAgICAgLCBtX2luc2VydGlvblNldHMoY29kZS5z
aXplKCksIGNvZGUpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIHJ1bigpCisgICAgewor
ICAgICAgICBidWlsZFJlZ2lzdGVyU2V0KCk7CisgICAgICAgIGJ1aWxkSW5kaWNlcygpOworICAg
ICAgICBidWlsZEludGVydmFscygpOworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICBw
cmVwYXJlSW50ZXJ2YWxzKCk7CisgICAgICAgICAgICBhdHRlbXB0U2NhbigpOworICAgICAgICAg
ICAgaWYgKCFtX2RpZFNwaWxsKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ZW1pdFNwaWxsQ29kZSgpOworICAgICAgICB9CisgICAgICAgIGFzc2lnblJlZ2lzdGVycygpOwor
ICAgICAgICBpbnNlcnRTcGlsbENvZGUoKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHZv
aWQgYnVpbGRSZWdpc3RlclNldCgpCisgICAgeworICAgICAgICBtX3JlZ2lzdGVycyA9IG1fY29k
ZS5yZWdzSW5Qcmlvcml0eU9yZGVyKGJhbmspOworICAgICAgICBtX3JlZ2lzdGVyU2V0LnNldEFs
bChtX3JlZ2lzdGVycyk7CisgICAgfQorCisgICAgdm9pZCBidWlsZEluZGljZXMoKQorICAgIHsK
KyAgICAgICAgc2l6ZV90IGluZGV4ID0gMDsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9j
ayA6IG1fY29kZSkgeworICAgICAgICAgICAgbV9zdGFydEluZGV4W2Jsb2NrXSA9IGluZGV4Owor
ICAgICAgICAgICAgaW5kZXggKz0gYmxvY2stPnNpemUoKSArIDE7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgc2l6ZV90IGluZGV4T2ZIZWFkKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fc3RhcnRJbmRleFtibG9ja107CisgICAgfQorICAgIAorICAgIHNp
emVfdCBpbmRleE9mVGFpbChCYXNpY0Jsb2NrKiBibG9jaykKKyAgICB7CisgICAgICAgIHJldHVy
biBpbmRleE9mSGVhZChibG9jaykgKyBibG9jay0+c2l6ZSgpOworICAgIH0KKyAgICAKKyAgICBz
aXplX3QgaW5kZXhPZihCYXNpY0Jsb2NrKiBibG9jaywgdW5zaWduZWQgaW5zdEluZGV4LCBBcmc6
OlBoYXNlIHBoYXNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGluZGV4T2ZIZWFkKGJsb2NrKSAr
IGluc3RJbmRleCArIHBoYXNlOworICAgIH0KKyAgICAKKyAgICBJbnRlcnZhbCBpbnRlcnZhbChz
aXplX3QgaW5kZXhPZkVhcmx5LCBBcmc6OlRpbWluZyB0aW1pbmcpCisgICAgeworICAgICAgICBz
d2l0Y2ggKHRpbWluZykgeworICAgICAgICBjYXNlIEFyZzo6T25seUVhcmx5OgorICAgICAgICAg
ICAgcmV0dXJuIEludGVydmFsKGluZGV4T2ZFYXJseSk7CisgICAgICAgIGNhc2UgQXJnOjpPbmx5
TGF0ZToKKyAgICAgICAgICAgIHJldHVybiBJbnRlcnZhbChpbmRleE9mRWFybHkgKyAxKTsKKyAg
ICAgICAgY2FzZSBBcmc6OkVhcmx5QW5kTGF0ZToKKyAgICAgICAgICAgIHJldHVybiBJbnRlcnZh
bChpbmRleE9mRWFybHksIGluZGV4T2ZFYXJseSArIDIpOworICAgICAgICB9CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gSW50ZXJ2YWwoKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBidWlsZEludGVydmFscygpCisgICAgeworICAgICAgICBUbXBMaXZlbmVz
czxiYW5rPiBsaXZlbmVzcyhtX2NvZGUpOworICAgICAgICAKKyAgICAgICAgZm9yIChCYXNpY0Js
b2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgICAgIHNpemVfdCBpbmRleE9mSGVhZCA9IHRo
aXMtPmluZGV4T2ZIZWFkKGJsb2NrKTsKKyAgICAgICAgICAgIHNpemVfdCBpbmRleE9mVGFpbCA9
IHRoaXMtPmluZGV4T2ZUYWlsKGJsb2NrKTsKKyAgICAgICAgICAgIGZvciAoVG1wIHRtcCA6IGxp
dmVuZXNzLmxpdmVBdEhlYWQoYmxvY2spKQorICAgICAgICAgICAgICAgIG1fbWFwW3RtcF0uaW50
ZXJ2YWwgfD0gSW50ZXJ2YWwoaW5kZXhPZkhlYWQpOworICAgICAgICAgICAgZm9yIChUbXAgdG1w
IDogbGl2ZW5lc3MubGl2ZUF0VGFpbChibG9jaykpCisgICAgICAgICAgICAgICAgbV9tYXBbdG1w
XS5pbnRlcnZhbCB8PSBJbnRlcnZhbChpbmRleE9mVGFpbCk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gMDsgaW5zdEluZGV4IDwgYmxvY2stPnNp
emUoKTsgKytpbnN0SW5kZXgpIHsKKyAgICAgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2st
PmF0KGluc3RJbmRleCk7CisgICAgICAgICAgICAgICAgc2l6ZV90IGluZGV4T2ZFYXJseSA9IGlu
ZGV4T2ZIZWFkICsgaW5zdEluZGV4OworICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcCgK
KyAgICAgICAgICAgICAgICAgICAgWyZdIChUbXAmIHRtcCwgQXJnOjpSb2xlIHJvbGUsIEJhbmsg
dG1wQmFuaywgV2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWco
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAodG1wQmFuayAhPSBiYW5rKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fbWFwW3RtcF0uaW50ZXJ2YWwgfD0g
aW50ZXJ2YWwoaW5kZXhPZkVhcmx5LCBBcmc6OnRpbWluZyhyb2xlKSk7CisgICAgICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBSZWdMaXZlbmVzczo6TG9j
YWxDYWxjIGxvY2FsQ2FsYyhsaXZlbmVzcywgYmxvY2spOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBhdXRvIHJlY29yZCA9IFsmXSAodW5zaWduZWQgaW5zdEluZGV4KSB7CisgICAgICAgICAg
ICAgICAgUmVnaXN0ZXJTZXQgcmVncyA9IGxvY2FsQ2FsYy5saXZlKCk7CisgICAgICAgICAgICAg
ICAgaWYgKEluc3QqIHByZXYgPSBibG9jay0+Z2V0KGluc3RJbmRleCAtIDEpKSB7CisgICAgICAg
ICAgICAgICAgICAgIHByZXYtPmZvckVhY2g8UmVnPigKKyAgICAgICAgICAgICAgICAgICAgICAg
IFsmXSAoUmVnJiByZWcsIEFyZzo6Um9sZSByb2xlLCBCYW5rLCBXaWR0aCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzTGF0ZURlZihyb2xlKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVncy5hZGQocmVnKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgICAgICAgICBpZiAocHJldi0+a2luZC5vcGNvZGUgPT0gUGF0
Y2gpCisgICAgICAgICAgICAgICAgICAgICAgICByZWdzLm1lcmdlKHByZXYtPmV4dHJhQ2xvYmJl
cmVkUmVncygpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKEluc3Qq
IG5leHQgPSBibG9jay0+Z2V0KGluc3RJbmRleCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbmV4
dC0+Zm9yRWFjaDxSZWc+KAorICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChSZWcmIHJlZywg
QXJnOjpSb2xlIHJvbGUsIEJhbmssIFdpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKEFyZzo6aXNFYXJseURlZihyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVncy5hZGQocmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgICAgICAgICBpZiAobmV4dC0+a2luZC5vcGNvZGUgPT0gUGF0Y2gpCisgICAgICAgICAg
ICAgICAgICAgICAgICByZWdzLm1lcmdlKG5leHQtPmV4dHJhRWFybHlDbG9iYmVyZWRSZWdzKCkp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBy
ZWdzLmZpbHRlcihtX3JlZ2lzdGVyU2V0KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBpZiAocmVncy5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX2Nsb2JiZXJzLmFwcGVuZChDbG9iYmVy
KGluc3RJbmRleCwgcmVncykpOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgcmVjb3JkKGJsb2NrLT5zaXplKCkpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
bnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTspIHsKKyAgICAgICAgICAgICAg
ICBsb2NhbENhbGMuZXhlY3V0ZShpbnN0SW5kZXgpOworICAgICAgICAgICAgICAgIHJlY29yZChp
bnN0SW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHNp
emVfdCBpbmRleE9mKGNvbnN0IFRtcE9yQ2xvYmJlciYgdGhpbmcpCisgICAgeworICAgICAgICAv
LyBXZSB3YW50IGNsb2JiZXJzIHRvIGNvbWUgYWZ0ZXIgdG1wcy4KKyAgICAgICAgaWYgKHRoaW5n
LmlzVG1wKCkpCisgICAgICAgICAgICByZXR1cm4gbV9tYXBbdGhpbmcudG1wKCldLmludGVydmFs
LmJlZ2luKCkgPDwgMTsKKyAgICAgICAgcmV0dXJuICh0aGluZy5jbG9iYmVyKCkuaW5kZXggPDwg
MSkgfCAxOworICAgIH0KKyAgICAKKyAgICB2b2lkIHByZXBhcmVJbnRlcnZhbHMoKQorICAgIHsK
KyAgICAgICAgbV9pbnRlcnZhbHMucmVzaXplKDApOworICAgICAgICAKKyAgICAgICAgZm9yICh1
bnNpZ25lZCB0bXBJbmRleCA9IDA7IHRtcEluZGV4IDwgbV9jb2RlLm51bVRtcHMoYmFuayk7ICsr
dG1wSW5kZXgpIHsKKyAgICAgICAgICAgIFRtcCB0bXAgPSBUbXA6OnRtcEZvckluZGV4KGJhbmss
IHRtcEluZGV4KTsKKyAgICAgICAgICAgIGlmIChtX21hcFt0bXBdLnNwaWxsZWQpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1faW50ZXJ2YWxz
LmFwcGVuZCh0bXApOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKENsb2JiZXIm
IGNsb2JiZXIgOiBtX2Nsb2JiZXJzKQorICAgICAgICAgICAgbV9pbnRlcnZhbHMuYXBwZW5kKCZj
bG9iYmVyKTsKKyAgICAgICAgCisgICAgICAgIHN0ZDo6c29ydCgKKyAgICAgICAgICAgIG1faW50
ZXJ2YWxzLmJlZ2luKCksIG1faW50ZXJ2YWxzLmVuZCgpLAorICAgICAgICAgICAgWyZdIChUbXBP
ckNsb2JiZXImIGEsIFRtcE9yQ2xvYmJlciYgYikgeworICAgICAgICAgICAgICAgIHJldHVybiBp
bmRleE9mKGEpIDwgaW5kZXhPZihiKTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKyAgICAKKyAg
ICBUbXAgYWRkVG1wV2l0aEludGVydmFsKEludGVydmFsIGludGVydmFsKQorICAgIHsKKyAgICAg
ICAgVG1wRGF0YSBkYXRhOworICAgICAgICBkYXRhLmludGVydmFsID0gaW50ZXJ2YWw7CisgICAg
ICAgIAorICAgICAgICBUbXAgdG1wID0gbV9jb2RlLm5ld1RtcChiYW5rKTsKKyAgICAgICAgbV9t
YXAuYXBwZW5kKHRtcCwgZGF0YSk7CisgICAgICAgIHJldHVybiB0bXA7CisgICAgfQorICAgIAor
ICAgIFJlZyBmaW5kRnJlZVJlZ2lzdGVyKCkKKyAgICB7CisgICAgICAgIGlmIChtX2FjdGl2ZS5z
aXplKCkgPT0gbV9yZWdpc3RlcnMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIFJlZygpOwor
ICAgICAgICBmb3IgKFJlZyByZWcgOiBtX3JlZ2lzdGVycykgeworICAgICAgICAgICAgaWYgKCFt
X2FjdGl2ZVJlZ3MuZ2V0KHJlZykpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlZzsKKyAgICAg
ICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm4gUmVnKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXR0ZW1wdFNjYW4oKQorICAgIHsKKyAg
ICAgICAgLy8gVGhpcyBpcyBtb2RlbGVkIGFmdGVyIExpbmVhclNjYW5SZWdpc3RlckFsbG9jYXRp
b24gaW4gRmlnLiAxIGluCisgICAgICAgIC8vIGh0dHA6Ly9kbC5hY20ub3JnL2NpdGF0aW9uLmNm
bT9pZD0zMzAyNTAuCisKKyAgICAgICAgbV9kaWRTcGlsbCA9IGZhbHNlOworICAgICAgICBtX2Fj
dGl2ZS5jbGVhcigpOworICAgICAgICBtX2FjdGl2ZVJlZ3MuY2xlYXIoKTsKKyAgICAgICAgZm9y
IChUbXBPckNsb2JiZXImIHRoaW5nIDogbV9pbnRlcnZhbHMpIHsKKyAgICAgICAgICAgIHNpemVf
dCBpbmRleCA9IGluZGV4T2YodGhpbmcpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBU
aGlzIGlzIEV4cGlyZU9sZEludGVydmFscyBpbiBGaWcuIDEuCisgICAgICAgICAgICB3aGlsZSAo
IW1fYWN0aXZlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIFRtcCB0bXAgPSBtX2FjdGl2
ZS5maXJzdCgpOworICAgICAgICAgICAgICAgIFRtcERhdGEmIGVudHJ5ID0gbV9kYXRhW3RtcF07
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgYm9vbCBleHBpcmVkID0gZW50cnku
aW50ZXJ2YWwuZW5kKCkgPD0gaW5kZXg7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgaWYgKCFleHBpcmVkKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBtX2FjdGl2ZS5yZW1vdmVGaXJzdCgpOworICAgICAgICAg
ICAgICAgIG1fYWN0aXZlUmVncy5yZW1vdmUoZW50cnkuYXNzaWduZWQpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUaGlzIHBhcnQgaXMgbm90IGluIHRoZSBw
YXBlciBzaW5jZSB3ZSBoYXZlIGEgbW9yZSBwcmVjaXNlIGhhbmRsaW5nIG9mIGNsb2JiZXJzIGFu
ZAorICAgICAgICAgICAgLy8gcHJlY29sb3JlZCByZWdpc3RlcnMuCisgICAgICAgICAgICBpZiAo
dGhpbmcuaXNDbG9iYmVyKCkpIHsKKyAgICAgICAgICAgICAgICBDbG9iYmVyIGNsb2JiZXIgPSB0
aGluZy5jbG9iYmVyKCk7CisgICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgcHJvYmxlbXMgPSBt
X2FjdGl2ZVJlZ3M7CisgICAgICAgICAgICAgICAgcHJvYmxlbXMuZmlsdGVyKGNsb2JiZXIucmVn
cyk7CisgICAgICAgICAgICAgICAgaWYgKCFwcm9ibGVtcy5pc0VtcHR5KCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgbV9hY3RpdmVSZWdzLm1lcmdlKGNsb2JiZXIucmVncyk7CisgICAgICAgICAg
ICAgICAgICAgIG1fYWN0aXZlLnJlbW92ZUFsbE1hdGNoaW5nKAorICAgICAgICAgICAgICAgICAg
ICAgICAgWyZdIChUbXAgdG1wKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBUbXBEYXRhJiBlbnRyeSA9IG1fbWFwW3RtcF07CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoZW50cnkuYXNzaWduZWQpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghcHJvYmxlbXMuY29udGFpbnMoZW50cnkuYXNzaWduZWQpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUmVnIGJldHRlclJlZyA9IGZpbmRGcmVlUmVnaXN0ZXIoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIWJldHRlclJlZykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzcGlsbCh0bXApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYXNzaWduV2l0aG91dEFkZGluZ1RvQWN0aXZlKHRtcCwgYmV0dGVyUmVn
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICBtX2Fj
dGl2ZVJlZ3MuZXhjbHVkZShjbG9iYmVyLnJlZ3MpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgVG1wIHRtcCA9IHRoaW5nLnRtcCgpOworICAgICAgICAgICAgVG1wRGF0YSYgZW50cnkg
PSBtX21hcFt0bXBdOworICAgICAgICAgICAgUmVnIHJlZyA9IGZpbmRGcmVlUmVnaXN0ZXIoKTsK
KyAgICAgICAgICAgIGlmIChyZWcpIHsKKyAgICAgICAgICAgICAgICBhc3NpZ24odG1wLCByZWcp
OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgICAgICAvLyBUaGlzIGlzIFNwaWxsQXRJbnRlcnZhbCBpbiBGaWcuIDEuCisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9hY3RpdmUuaXNFbXB0eSgpKTsKKyAgICAgICAgICAg
IFRtcCBzcGlsbFRtcCA9IG1fYWN0aXZlLmxhc3QoKTsKKyAgICAgICAgICAgIFRtcERhdGEmIHNw
aWxsRW50cnkgPSBtX21hcFtzcGlsbFRtcF07CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChz
cGlsbEVudHJ5LmFzc2lnbmVkKTsKKyAgICAgICAgICAgIGlmIChzcGlsbEVudHJ5LmludGVydmFs
LmVuZCgpIDw9IGVudHJ5LmludGVydmFsLmVuZCgpKSB7CisgICAgICAgICAgICAgICAgc3BpbGwo
dG1wKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgbV9hY3RpdmUucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgYXNz
aWduKHRtcCwgc3BpbGxFbnRyeS5hc3NpZ25lZCk7CisgICAgICAgICAgICBzcGlsbChzcGlsbFRt
cCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBhc3NpZ25XaXRob3V0QWRkaW5n
VG9BY3RpdmUoVG1wIHRtcCwgUmVnIHJlZykKKyAgICB7CisgICAgICAgIFRtcERhdGEmIGVudHJ5
ID0gbV9tYXBbdG1wXTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWVudHJ5LnNwaWxsZWQpOwor
ICAgICAgICBlbnRyeS5hc3NpZ25lZCA9IHJlZzsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9h
Y3RpdmVSZWdzLmFkZChyZWcpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhc3NpZ24oVG1wIHRt
cCwgUmVnIHJlZykKKyAgICB7CisgICAgICAgIGFzc2lnbldpdGhvdXRBZGRpbmdUb0FjdGl2ZSh0
bXAsIHJlZyk7CisgICAgICAgIAorICAgIH0KKyAgICAKKyAgICB2b2lkIHNwaWxsKFRtcCB0bXAp
CisgICAgeworICAgICAgICBUbXBEYXRhJiBlbnRyeSA9IG1fbWFwW3RtcF07CisgICAgICAgIGVu
dHJ5LnNwaWxsZWQgPSBtX2NvZGUuYWRkU3RhY2tTbG90KDgsIFN0YWNrU2xvdEtpbmQ6OlNwaWxs
KTsKKyAgICAgICAgZW50cnkuYXNzaWduZWQgPSBSZWcoKTsKKyAgICAgICAgbV9kaWRTcGlsbCA9
IHRydWU7CisgICAgfQorICAgIAorICAgIHZvaWQgZW1pdFNwaWxsQ29kZSgpCisgICAgeworICAg
ICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7CisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGluc3RJbmRleCA9IDA7IGluc3RJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsraW5z
dEluZGV4KSB7CisgICAgICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5k
ZXgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIEZpcnN0IHRyeSB0byBz
cGlsbCBkaXJlY3RseS4KKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
aW5zdC5hcmdzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIEFyZyYgYXJnID0g
aW5zdC5hcmdzW2ldOworICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZy5pc1RtcCgpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIGlmIChh
cmcuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgICAgICBpZiAoYXJnLmJhbmsoKSAhPSBiYW5rKQorICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc3BpbGxlZCA9IG1f
bWFwW2FyZy50bXAoKV0uc3BpbGxlZDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFzcGlsbGVk
KQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAg
IGlmICghaW5zdC5hZG1pdHNTdGFjayhpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgICAgICBhcmcgPSBBcmc6OnN0YWNrKHNwaWxsZWQpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBGYWxs
IGJhY2sgb24gdGhlIGhhcmQgd2F5LgorICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcCgK
KyAgICAgICAgICAgICAgICAgICAgWyZdIChUbXAmIHRtcCwgQXJnOjpSb2xlIHJvbGUsIEJhbmsg
dG1wQmFuaywgV2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWco
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAodG1wQmFuayAhPSBiYW5rKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc3BpbGxlZCA9IG1f
bWFwW3RtcF0uc3BpbGxlZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3BpbGxlZCkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIE9wY29kZSBtb3ZlID0gYmFuayA9PSBHUCA/IE1vdmUgOiBNb3ZlRG91YmxlOworICAg
ICAgICAgICAgICAgICAgICAgICAgdG1wID0gYWRkVG1wV2l0aEludGVydmFsKGludGVydmFsT2Yo
YmxvY2ssIGluc3RJbmRleCwgQXJnOjp0aW1pbmcocm9sZSkpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChyb2xlID09IEFyZzo6U2NyYXRjaCkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0FueVVzZShy
b2xlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXRzW2Jsb2NrXS5p
bnNlcnQoaW5zdEluZGV4LCBtb3ZlLCBpbnN0Lm9yZ2luLCBBcmc6OnN0YWNrKHNwaWxsZWQpLCB0
bXApOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlEZWYocm9sZSkpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0c1tibG9ja10uaW5zZXJ0KGlu
c3RJbmRleCArIDEsIG1vdmUsIGluc3Qub3JpZ2luLCB0bXAsIEFyZzo6c3RhY2soc3BpbGxlZCkp
OworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKyAgICAKKyAgICB2b2lkIGFzc2lnblJlZ2lzdGVycygpCisgICAgeworICAgICAgICBmb3Ig
KEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7CisgICAgICAgICAgICBmb3IgKEluc3QmIGlu
c3QgOiAqYmxvY2spIHsKKyAgICAgICAgICAgICAgICBpbnN0LmZvckVhY2hUbXBGYXN0KAorICAg
ICAgICAgICAgICAgICAgICBbJl0gKFRtcCYgdG1wKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAodG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcC5iYW5rKCkgIT0gYmFuaykKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFJlZyByZWcgPSBtX21hcFt0bXBdLmFzc2lnbmVkOworICAg
ICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVnKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRtcCA9IFRtcChyZWcpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGluc2VydFNwaWxsQ29k
ZSgpCisgICAgeworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKQorICAg
ICAgICAgICAgbV9pbnNlcnRpb25TZXRzW2Jsb2NrXS5leGVjdXRlKGJsb2NrKTsKKyAgICB9Cisg
ICAgCisgICAgQ29kZSYgbV9jb2RlOworICAgIFZlY3RvcjxSZWc+IG1fcmVnaXN0ZXJzOworICAg
IFJlZ2lzdGVyU2V0IG1fcmVnaXN0ZXJTZXQ7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jayosIHNp
emVfdD4gbV9zdGFja0luZGV4OworICAgIEluZGV4TWFwPFRtcDo6SW5kZXhlZDxiYW5rPiwgVG1w
RGF0YT4gbV9tYXA7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jayosIEluc2VydGlvblNldD4gbV9p
bnNlcnRpb25TZXRzOworICAgIFZlY3RvcjxDbG9iYmVyPiBtX2Nsb2JiZXJzOyAvLyBBZnRlciB3
ZSBhbGxvY2F0ZSB0aGlzLCB3ZSBoYXBwaWx5IHBvaW50IHBvaW50ZXJzIGludG8gaXQuCisgICAg
VmVjdG9yPFRtcE9yQ2xvYmJlcj4gbV9pbnRlcnZhbHM7CisgICAgRGVxdWU8VG1wPiBtX2FjdGl2
ZTsKKyAgICBSZWdpc3RlclNldCBtX2FjdGl2ZVJlZ3M7CisgICAgYm9vbCBtX2RpZFNwaWxsIHsg
ZmFsc2UgfTsKK307CisKK3RlbXBsYXRlPEJhbmsgYmFuaz4KK3ZvaWQgcnVuTGluZWFyU2NhbihD
b2RlJiBjb2RlKQoreworICAgIExpbmVhclNjYW48YmFuaz4gbGluZWFyU2Nhbihjb2RlKTsKKyAg
ICBsaW5lYXJTY2FuLmltcGwoKTsKK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3Zv
aWQgYWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4oQ29kZSYgY29kZSkKK3sKKyAgICBQaGFz
ZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgImFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuIik7
CisgICAgcGFkSW50ZXJmZXJlbmNlKGNvZGUpOworICAgIHJ1bkxpbmVhclNjYW48RlA+KGNvZGUp
OworICAgIHJ1bkxpbmVhclNjYW48R1A+KGNvZGUpOworICAgIGZpeFNwaWxsc0FmdGVyVGVybWlu
YWxzKGNvZGUpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRl
UmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkNQVS5oIgorI2luY2x1ZGUgIk9w
dGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIg
eworCitjbGFzcyBDb2RlOworCisvLyBUaGlzIGltcGxlbWVudHMgdGhlIFBvbGV0dG8gYW5kIFNh
cmtlciByZWdpc3RlciBhbGxvY2F0b3IgY2FsbGVkICJsaW5lYXIgc2NhbiI6CisvLyBodHRwOi8v
ZGwuYWNtLm9yZy9jaXRhdGlvbi5jZm0/aWQ9MzMwMjUwCisvLworLy8gVGhpcyBpcyBub3QgQWly
J3MgcHJpbWFyeSByZWdpc3RlciBhbGxvY2F0b3IuIFdlIHVzZSBpdCBvbmx5IHdoZW4gcnVubmlu
ZyBhdCBvcHRMZXZlbD0wLiBUaGF0J3Mgbm90CisvLyB0aGUgZGVmYXVsdCBsZXZlbC4gVGhpcyBy
ZWdpc3RlciBhbGxvY2F0b3IgaXMgb3B0aW1pemVkIHByaW1hcmlseSBmb3IgcnVubmluZyBxdWlj
a2x5LiBJdCdzIGV4cGVjdGVkCisvLyB0aGF0IGltcHJvdmVtZW50cyB0byB0aGlzIHJlZ2lzdGVy
IGFsbG9jYXRvciBzaG91bGQgZm9jdXMgcHJpbWFyaWx5IG9uIGltcHJvdmluZyBpdHMgZXhlY3V0
aW9uIHRpbWUKKy8vIHdpdGhvdXQgbXVjaCByZWdhcmQgZm9yIHRoZSBxdWFsaXR5IG9mIGdlbmVy
YXRlZCBjb2RlLgorLy8KKy8vIEZvciBBaXIncyBwcmltYXJ5IHJlZ2lzdGVyIGFsbG9jYXRvciwg
c2VlIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmh8Y3BwLgordm9pZCBhbGxv
Y2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2NhbihDb2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAJKHJldmlzaW9u
IDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFj
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MSw3ICsxNjEsNyBAQCB2b2lkIGFsbG9jYXRlU3Rh
Y2soQ29kZSYgY29kZSkKIAogICAgIC8vIE5vdyB3ZSBoYW5kbGUgdGhlIHNwaWxsIHNsb3RzLgog
ICAgIFN0YWNrU2xvdExpdmVuZXNzIGxpdmVuZXNzKGNvZGUpOwotICAgIEluZGV4TWFwPFN0YWNr
U2xvdCwgSGFzaFNldDxTdGFja1Nsb3QqPj4gaW50ZXJmZXJlbmNlKGNvZGUuc3RhY2tTbG90cygp
LnNpemUoKSk7CisgICAgSW5kZXhNYXA8U3RhY2tTbG90KiwgSGFzaFNldDxTdGFja1Nsb3QqPj4g
aW50ZXJmZXJlbmNlKGNvZGUuc3RhY2tTbG90cygpLnNpemUoKSk7CiAgICAgVmVjdG9yPFN0YWNr
U2xvdCo+IHNsb3RzOwogCiAgICAgLy8gV2Ugd2lsbCBwZXJmb3JtIHNvbWUgc3BpbGwgY29hbGVz
Y2luZy4gVG8gbWFrZSB0aGF0IGVmZmVjdGl2ZSwgd2UgbmVlZCB0byBiZSBhYmxlIHRvIGlkZW50
aWZ5CkBAIC0zMDksNyArMzA5LDcgQEAgdm9pZCBhbGxvY2F0ZVN0YWNrKENvZGUmIGNvZGUpCiAg
ICAgICAgICAgICByZXR1cm4gYS5mcmVxdWVuY3kgPiBiLmZyZXF1ZW5jeTsKICAgICAgICAgfSk7
CiAgICAgCi0gICAgSW5kZXhNYXA8U3RhY2tTbG90LCBTdGFja1Nsb3QqPiByZW1hcHBlZFN0YWNr
U2xvdHMoY29kZS5zdGFja1Nsb3RzKCkuc2l6ZSgpKTsKKyAgICBJbmRleE1hcDxTdGFja1Nsb3Qq
LCBTdGFja1Nsb3QqPiByZW1hcHBlZFN0YWNrU2xvdHMoY29kZS5zdGFja1Nsb3RzKCkuc2l6ZSgp
KTsKICAgICBhdXRvIHJlbWFwID0gWyZdIChTdGFja1Nsb3QqIHNsb3QpIC0+IFN0YWNrU2xvdCog
ewogICAgICAgICBpZiAoIXNsb3QpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAJKHJldmlzaW9uIDIxNDQyNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjgyLDYgKzI4MiwyMCBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91
dCwgQXJnCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAordm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEFyZzo6VGltaW5nIHRpbWluZykKK3sKKyAgICBz
d2l0Y2ggKHRpbWluZykgeworICAgIGNhc2UgQXJnOjpFYXJseToKKyAgICAgICAgb3V0LnByaW50
KCJFYXJseSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcmc6OkxhdGU6CisgICAgICAg
IG91dC5wcmludCgiTGF0ZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwogdm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiBvdXQsIEFyZzo6Um9sZSByb2xlKQogewogICAgIHN3aXRjaCAocm9sZSkgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCSh3b3JraW5nIGNvcHkpCkBAIC05
Miw2ICs5MiwxNyBAQCBwdWJsaWM6CiAgICAgICAgIENvbGQsCiAgICAgICAgIFdhcm0KICAgICB9
OworICAgIAorICAgIGVudW0gUGhhc2UgOiBpbnQ4X3QgeworICAgICAgICBFYXJseSwKKyAgICAg
ICAgTGF0ZQorICAgIH07CisgICAgCisgICAgZW51bSBUaW1pbmcgOiBpbnQ4X3QgeworICAgICAg
ICBPbmx5RWFybHksCisgICAgICAgIE9ubHlMYXRlLAorICAgICAgICBFYXJseUFuZExhdGUKKyAg
ICB9OwogCiAgICAgZW51bSBSb2xlIDogaW50OF90IHsKICAgICAgICAgLy8gVXNlIG1lYW5zIHRo
YXQgdGhlIEluc3Qgd2lsbCByZWFkIGZyb20gdGhpcyB2YWx1ZSBiZWZvcmUgZG9pbmcgYW55dGhp
bmcgZWxzZS4KQEAgLTI1Myw3ICsyNjQsODIgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0
dXJuIGlzQ29sZFVzZShyb2xlKSA/IENvbGQgOiBXYXJtOwogICAgIH0KLQorICAgIAorICAgIHN0
YXRpYyBib29sIGFjdGl2ZUF0KFJvbGUgcm9sZSwgUGhhc2UgcGhhc2UpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKHJvbGUpIHsKKyAgICAgICAgY2FzZSBVc2U6CisgICAgICAgIGNhc2UgQ29sZFVz
ZToKKyAgICAgICAgY2FzZSBFYXJseURlZjoKKyAgICAgICAgY2FzZSBFYXJseVpEZWY6CisgICAg
ICAgIGNhc2UgVXNlQWRkcjoKKyAgICAgICAgICAgIHJldHVybiBwaGFzZSA9PSBFYXJseTsKKyAg
ICAgICAgY2FzZSBMYXRlVXNlOgorICAgICAgICBjYXNlIExhdGVDb2xkVXNlOgorICAgICAgICBj
YXNlIERlZjoKKyAgICAgICAgY2FzZSBaRGVmOgorICAgICAgICAgICAgcmV0dXJuIHBoYXNlID09
IExhdGU7CisgICAgICAgIGNhc2UgVXNlRGVmOgorICAgICAgICBjYXNlIFVzZVpEZWY6CisgICAg
ICAgIGNhc2UgU2NyYXRjaDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgYm9v
bCBhY3RpdmVBdChUaW1pbmcgdGltaW5nLCBQaGFzZSBwaGFzZSkKKyAgICB7CisgICAgICAgIHN3
aXRjaCAocm9sZSkgeworICAgICAgICBjYXNlIE9ubHlFYXJseToKKyAgICAgICAgICAgIHJldHVy
biBwaGFzZSA9PSBFYXJseTsKKyAgICAgICAgY2FzZSBPbmx5TGF0ZToKKyAgICAgICAgICAgIHJl
dHVybiBwaGFzZSA9PSBMYXRlOworICAgICAgICBjYXNlIEVhcmx5QW5kTGF0ZToKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVGltaW5nIHRpbWluZyhSb2xlIHJvbGUpCisgICAg
eworICAgICAgICBzd2l0Y2ggKHJvbGUpIHsKKyAgICAgICAgY2FzZSBVc2U6CisgICAgICAgIGNh
c2UgQ29sZFVzZToKKyAgICAgICAgY2FzZSBFYXJseURlZjoKKyAgICAgICAgY2FzZSBFYXJseVpE
ZWY6CisgICAgICAgIGNhc2UgVXNlQWRkcjoKKyAgICAgICAgICAgIHJldHVybiBPbmx5RWFybHk7
CisgICAgICAgIGNhc2UgTGF0ZVVzZToKKyAgICAgICAgY2FzZSBMYXRlQ29sZFVzZToKKyAgICAg
ICAgY2FzZSBEZWY6CisgICAgICAgIGNhc2UgWkRlZjoKKyAgICAgICAgICAgIHJldHVybiBPbmx5
TGF0ZTsKKyAgICAgICAgY2FzZSBVc2VEZWY6CisgICAgICAgIGNhc2UgVXNlWkRlZjoKKyAgICAg
ICAgY2FzZSBTY3JhdGNoOgorICAgICAgICAgICAgcmV0dXJuIEVhcmx5QW5kTGF0ZTsKKyAgICAg
ICAgfQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICBzdGF0aWMgdm9pZCBmb3JFYWNoUGhhc2UoVGltaW5n
IHRpbWluZywgY29uc3QgRnVuYyYgZnVuYykKKyAgICB7CisgICAgICAgIGlmIChhY3RpdmVBdCh0
aW1pbmcsIEVhcmx5KSkKKyAgICAgICAgICAgIGZ1bmMoRWFybHkpOworICAgICAgICBpZiAoYWN0
aXZlQXQodGltaW5nLCBMYXRlKSkKKyAgICAgICAgICAgIGZ1bmMoTGF0ZSk7CisgICAgfQorICAg
IAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgc3RhdGljIHZvaWQgZm9yRWFjaFBo
YXNlKFJvbGUgcm9sZSwgY29uc3QgRnVuYyYgZnVuYykKKyAgICB7CisgICAgICAgIGlmIChhY3Rp
dmVBdChyb2xlLCBFYXJseSkpCisgICAgICAgICAgICBmdW5jKEVhcmx5KTsKKyAgICAgICAgaWYg
KGFjdGl2ZUF0KHJvbGUsIExhdGUpKQorICAgICAgICAgICAgZnVuYyhMYXRlKTsKKyAgICB9Cisg
ICAgCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBSb2xlIGltcGxpZXMgdGhhdCB0aGUgSW5z
dCB3aWxsIFVzZSB0aGUgQXJnIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLgogICAgIHN0YXRp
YyBib29sIGlzRWFybHlVc2UoUm9sZSByb2xlKQogICAgIHsKQEAgLTEzNTQsNiArMTQ0MCw3IEBA
IG5hbWVzcGFjZSBXVEYgewogCiBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHByaW50SW50ZXJuYWwo
UHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpBaXI6OkFyZzo6S2luZCk7CiBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpBaXI6OkFyZzo6VGVt
cGVyYXR1cmUpOworSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiwgSlNDOjpCMzo6QWlyOjpBcmc6OlRpbWluZyk7CiBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpBaXI6OkFyZzo6Um9sZSk7CiBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIz
OjpBaXI6OkFyZzo6U2lnbmVkbmVzcyk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQmxvY2tXb3JrbGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQmxvY2tXb3JrbGlzdC5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJsb2NrV29ya2xpc3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zMiw3ICszMiw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3Bh
Y2UgQWlyIHsKIAotdHlwZWRlZiBHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhT
ZXQ8QmFzaWNCbG9jaz4+IEJsb2NrV29ya2xpc3Q7Cit0eXBlZGVmIEdyYXBoTm9kZVdvcmtsaXN0
PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+IEJsb2NrV29ya2xpc3Q7CiAKIC8v
IFdoZW4geW91IHNheSBCbG9ja1dpdGg8aW50PiB5b3Ugc2hvdWxkIHJlYWQgaXQgYXMgImJsb2Nr
IHdpdGggYW4gaW50Ii4KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5nIEJsb2NrV2l0aCA9IEdy
YXBoTm9kZVdpdGg8QmFzaWNCbG9jayosIFQ+OwpAQCAtNDEsMTEgKzQxLDExIEBAIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHVzaW5nIEJsb2NrV2l0aCA9IEcKIC8vIHBlcm1pdHMgZm9yY2libHkgZW5x
dWV1ZWluZyB0aGluZ3MgZXZlbiBpZiB0aGUgYmxvY2sgaGFzIGFscmVhZHkgYmVlbiBzZWVuLiBJ
dCdzIHVzZWZ1bCBmb3IKIC8vIHRoaW5ncyBsaWtlIGJ1aWxkaW5nIGEgc3Bhbm5pbmcgdHJlZSwg
aW4gd2hpY2ggY2FzZSBUICh0aGUgYXV4aWxpYXJ5IHBheWxvYWQpIHdvdWxkIGJlIHRoZQogLy8g
c3VjY2Vzc29yIGluZGV4LgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcgRXh0ZW5kZWRCbG9j
a1dvcmtsaXN0ID0gRXh0ZW5kZWRHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgVCwgSW5k
ZXhTZXQ8QmFzaWNCbG9jaz4+OwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcgRXh0ZW5kZWRC
bG9ja1dvcmtsaXN0ID0gRXh0ZW5kZWRHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgVCwg
SW5kZXhTZXQ8QmFzaWNCbG9jayo+PjsKIAogdHlwZWRlZiBHcmFwaE5vZGVXaXRoT3JkZXI8QmFz
aWNCbG9jayo+IEJsb2NrV2l0aE9yZGVyOwogCi10eXBlZGVmIFBvc3RPcmRlckdyYXBoTm9kZVdv
cmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrPj4gUG9zdE9yZGVyQmxvY2tX
b3JrbGlzdDsKK3R5cGVkZWYgUG9zdE9yZGVyR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayos
IEluZGV4U2V0PEJhc2ljQmxvY2sqPj4gUG9zdE9yZGVyQmxvY2tXb3JrbGlzdDsKIAogfSB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckNGRy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQ0ZHLmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQ0ZHLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDggKzM5LDggQEAgY2xhc3MgQ0ZH
IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEJh
c2ljQmxvY2sqIE5vZGU7Ci0gICAgdHlwZWRlZiBJbmRleFNldDxCYXNpY0Jsb2NrPiBTZXQ7Ci0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcgTWFwID0gSW5kZXhNYXA8QmFzaWNCbG9jaywg
VD47CisgICAgdHlwZWRlZiBJbmRleFNldDxCYXNpY0Jsb2NrKj4gU2V0OworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHVzaW5nIE1hcCA9IEluZGV4TWFwPEJhc2ljQmxvY2sqLCBUPjsKICAgICB0
eXBlZGVmIFZlY3RvcjxCYXNpY0Jsb2NrKiwgND4gTGlzdDsKIAogICAgIENGRyhDb2RlJiBjb2Rl
KQpAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAgICAgTm9kZSByb290KCkgeyByZXR1cm4gbV9j
b2RlWzBdOyB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIE1hcDxUPiBuZXdNYXAo
KSB7IHJldHVybiBJbmRleE1hcDxKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2ssIFQ+KG1fY29kZS5z
aXplKCkpOyB9CisgICAgTWFwPFQ+IG5ld01hcCgpIHsgcmV0dXJuIEluZGV4TWFwPEpTQzo6QjM6
OkFpcjo6QmFzaWNCbG9jayosIFQ+KG1fY29kZS5zaXplKCkpOyB9CiAKICAgICBTdWNjZXNzb3JD
b2xsZWN0aW9uPEJhc2ljQmxvY2ssIEJhc2ljQmxvY2s6OlN1Y2Nlc3Nvckxpc3Q+IHN1Y2Nlc3Nv
cnMoTm9kZSBub2RlKSB7IHJldHVybiBub2RlLT5zdWNjZXNzb3JCbG9ja3MoKTsgfQogICAgIEJh
c2ljQmxvY2s6OlByZWRlY2Vzc29yTGlzdCYgcHJlZGVjZXNzb3JzKE5vZGUgbm9kZSkgeyByZXR1
cm4gbm9kZS0+cHJlZGVjZXNzb3JzKCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyRWxpbWluYXRlRGVhZENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyRWxpbWluYXRlRGVhZENvZGUuY3BwCShyZXZpc2lvbiAyMTQ0
MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckVsaW1pbmF0ZURlYWRDb2Rl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBib29sIGVsaW1pbmF0ZURlYWRD
b2RlKENvZGUmIGNvZGUpCiAgICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJlbGltaW5h
dGVEZWFkQ29kZSIpOwogCiAgICAgSGFzaFNldDxUbXA+IGxpdmVUbXBzOwotICAgIEluZGV4U2V0
PFN0YWNrU2xvdD4gbGl2ZVN0YWNrU2xvdHM7CisgICAgSW5kZXhTZXQ8U3RhY2tTbG90Kj4gbGl2
ZVN0YWNrU2xvdHM7CiAgICAgYm9vbCBjaGFuZ2VkOwogCiAgICAgYXV0byBpc0FyZ0xpdmUgPSBb
Jl0gKGNvbnN0IEFyZyYgYXJnKSAtPiBib29sIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyRml4T2J2aW91c1NwaWxscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhPYnZpb3VzU3BpbGxzLmNwcAkocmV2aXNpb24gMjE0
NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhPYnZpb3VzU3BpbGxz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQ3LDcgKzU0Nyw3IEBAIHByaXZhdGU6CiAgICAgfTsK
IAogICAgIENvZGUmIG1fY29kZTsKLSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBTdGF0ZT4gbV9h
dEhlYWQ7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jayosIFN0YXRlPiBtX2F0SGVhZDsKICAgICBT
dGF0ZSBtX3N0YXRlOwogICAgIEJhc2ljQmxvY2sqIG1fYmxvY2sgeyBudWxscHRyIH07CiAgICAg
dW5zaWduZWQgbV9pbnN0SW5kZXggeyAwIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckZpeFBhcnRpYWxSZWdpc3RlclN0YWxscy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMuY3Bw
CShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZp
eFBhcnRpYWxSZWdpc3RlclN0YWxscy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NSwxMCArMTU1
LDEwIEBAIHZvaWQgZml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzKENvZGUmIGNvZGUKIAogICAgIC8v
IEZvciBlYWNoIGJsb2NrLCB0aGlzIHByb3ZpZGVzIHRoZSBkaXN0YW5jZSB0byB0aGUgbGFzdCBp
bnN0cnVjdGlvbiBzZXR0aW5nIGVhY2ggcmVnaXN0ZXIKICAgICAvLyBvbiBibG9jayAqZW50cnkq
LgotICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIEZQRGVmRGlzdGFuY2U+IGxhc3REZWZEaXN0YW5j
ZShjb2RlLnNpemUoKSk7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jayosIEZQRGVmRGlzdGFuY2U+
IGxhc3REZWZEaXN0YW5jZShjb2RlLnNpemUoKSk7CiAKICAgICAvLyBCbG9ja3Mgd2l0aCBkaXJ0
eSBkaXN0YW5jZSBhdCBoZWFkLgotICAgIEluZGV4U2V0PEJhc2ljQmxvY2s+IGRpcnR5OworICAg
IEluZGV4U2V0PEJhc2ljQmxvY2sqPiBkaXJ0eTsKIAogICAgIC8vIEZpcnN0LCB3ZSBjb21wdXRl
IHRoZSBsb2NhbCBkaXN0YW5jZSBmb3IgZWFjaCBibG9jayBhbmQgcHVzaCBpdCB0byB0aGUgc3Vj
Y2Vzc29ycy4KICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhTcGlsbHNB
ZnRlclRlcm1pbmFscy5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJGaXhTcGlsbHNBZnRlclRlcm1p
bmFscy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckJsb2NrSW5zZXJ0
aW9uU2V0LmgiCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckluc2VydGlvblNl
dC5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisjaW5jbHVkZSAiQWlyVG1wSW5saW5l
cy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisK
K3ZvaWQgZml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMoQ29kZSYgY29kZSkKK3sKKyAgICAvLyBCZWNh
dXNlIHRoZXJlIG1heSBiZSB0ZXJtaW5hbHMgdGhhdCBwcm9kdWNlIHZhbHVlcywgSVJDIG1heQor
ICAgIC8vIHdhbnQgdG8gc3BpbGwgdGhvc2UgdGVybWluYWxzLiBJdCdsbCBoYXBwZW4gdG8gc3Bp
bGwgaXQgYWZ0ZXIKKyAgICAvLyB0aGUgdGVybWluYWwuIElmIHdlIGxlZnQgdGhlIGdyYXBoIGlu
IHRoaXMgc3RhdGUsIGl0J2QgYmUgaW52YWxpZAorICAgIC8vIGJlY2F1c2UgYSB0ZXJtaW5hbCBt
dXN0IGJlIHRoZSBsYXN0IGluc3RydWN0aW9uIGluIGEgYmxvY2suCisgICAgLy8gV2UgZml4IHRo
YXQgaGVyZS4KKworICAgIEJMb2NrSW5zZXJ0aW9uU2V0IGJsb2NrSW5zZXJ0aW9uU2V0KGNvZGUp
OworICAgIEluc2VydGlvblNldCBpbnNlcnRpb25TZXQoY29kZSk7CisKKyAgICBmb3IgKEJhc2lj
QmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICB1bnNpZ25lZCB0ZXJtaW5hbEluZGV4ID0g
YmxvY2stPnNpemUoKTsKKyAgICAgICAgYm9vbCBmb3VuZFRlcm1pbmFsID0gZmFsc2U7CisgICAg
ICAgIHdoaWxlICh0ZXJtaW5hbEluZGV4LS0pIHsKKyAgICAgICAgICAgIGlmIChibG9jay0+YXQo
dGVybWluYWxJbmRleCkuaXNUZXJtaW5hbCgpKSB7CisgICAgICAgICAgICAgICAgZm91bmRUZXJt
aW5hbCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgQVNTRVJUX1VOVVNFRChmb3VuZFRlcm1pbmFsLCBmb3VuZFRlcm1pbmFs
KTsKKworICAgICAgICBpZiAodGVybWluYWxJbmRleCA9PSBibG9jay0+c2l6ZSgpIC0gMSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8vIFRoZXJlIG11c3QgYmUgaW5zdHJ1Y3Rp
b25zIGFmdGVyIHRoZSB0ZXJtaW5hbCBiZWNhdXNlIGl0J3Mgbm90IHRoZSBsYXN0IGluc3RydWN0
aW9uLgorICAgICAgICBBU1NFUlQodGVybWluYWxJbmRleCA8IGJsb2NrLT5zaXplKCkgLSAxKTsK
KyAgICAgICAgVmVjdG9yPEluc3QsIDE+IGluc3RzVG9Nb3ZlOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSB0ZXJtaW5hbEluZGV4ICsgMTsgaSA8IGJsb2NrLT5zaXplKCk7IGkrKykKKyAgICAg
ICAgICAgIGluc3RzVG9Nb3ZlLmFwcGVuZChibG9jay0+YXQoaSkpOworICAgICAgICBSRUxFQVNF
X0FTU0VSVChpbnN0c1RvTW92ZS5zaXplKCkpOworCisgICAgICAgIGZvciAoRnJlcXVlbnRlZEJs
b2NrJiBmcmVxdWVudGVkU3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3NvcnMoKSkgeworICAgICAg
ICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yID0gZnJlcXVlbnRlZFN1Y2Nlc3Nvci5ibG9jaygp
OworICAgICAgICAgICAgLy8gSWYgc3VjY2Vzc29yJ3Mgb25seSBwcmVkZWNlc3NvciBpcyBibG9j
aywgd2UgY2FuIHBsYW50IHRoZSBzcGlsbCBpbnNpZGUKKyAgICAgICAgICAgIC8vIHRoZSBzdWNj
ZXNzb3IuIE90aGVyd2lzZSwgd2UgbXVzdCBzcGxpdCB0aGUgY3JpdGljYWwgZWRnZSBhbmQgY3Jl
YXRlCisgICAgICAgICAgICAvLyBhIG5ldyBibG9jayBmb3IgdGhlIHNwaWxsLgorICAgICAgICAg
ICAgaWYgKHN1Y2Nlc3Nvci0+bnVtUHJlZGVjZXNzb3JzKCkgPT0gMSkgeworICAgICAgICAgICAg
ICAgIGluc2VydGlvblNldC5pbnNlcnRJbnN0cygwLCBpbnN0c1RvTW92ZSk7CisgICAgICAgICAg
ICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoc3VjY2Vzc29yKTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogbmV3QmxvY2sgPSBibG9ja0luc2VydGlv
blNldC5pbnNlcnRCZWZvcmUoc3VjY2Vzc29yLCBzdWNjZXNzb3ItPmZyZXF1ZW5jeSgpKTsKKyAg
ICAgICAgICAgICAgICBmb3IgKGNvbnN0IEluc3QmIGluc3QgOiBpbnN0c1RvTW92ZSkKKyAgICAg
ICAgICAgICAgICAgICAgbmV3QmxvY2stPmFwcGVuZEluc3QoaW5zdCk7CisgICAgICAgICAgICAg
ICAgbmV3QmxvY2stPmFwcGVuZEluc3QoSW5zdChKdW1wLCBpbnN0c1RvTW92ZS5sYXN0KCkub3Jp
Z2luKSk7CisgICAgICAgICAgICAgICAgbmV3QmxvY2stPnN1Y2Nlc3NvcnMoKS5hcHBlbmQoc3Vj
Y2Vzc29yKTsKKyAgICAgICAgICAgICAgICBmcmVxdWVudGVkU3VjY2Vzc29yLmJsb2NrKCkgPSBu
ZXdCbG9jazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGJsb2NrLT5yZXNp
emUodGVybWluYWxJbmRleCArIDEpOworICAgIH0KKworICAgIGlmIChibG9ja0luc2VydGlvblNl
dC5leGVjdXRlKCkpCisgICAgICAgIGNvZGUucmVzZXRSZWFjaGFiaWxpdHkoKTsKK30KKworfSB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhTcGlsbHNBZnRlclRl
cm1pbmFscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
Rml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCisv
LyBCZWNhdXNlIHRoZXJlIG1heSBiZSB0ZXJtaW5hbHMgdGhhdCBwcm9kdWNlIHZhbHVlcywgdGhl
IHJlZ2lzdGVyIGFsbG9jYXRvciBtYXkKKy8vIHdhbnQgdG8gc3BpbGwgdGhvc2UgdGVybWluYWxz
LiBJdCdsbCBoYXBwZW4gdG8gc3BpbGwgaXQgYWZ0ZXIKKy8vIHRoZSB0ZXJtaW5hbC4gSWYgd2Ug
bGVmdCB0aGUgZ3JhcGggaW4gdGhpcyBzdGF0ZSwgaXQnZCBiZSBpbnZhbGlkCisvLyBiZWNhdXNl
IGEgdGVybWluYWwgbXVzdCBiZSB0aGUgbGFzdCBpbnN0cnVjdGlvbiBpbiBhIGJsb2NrLgorLy8g
V2UgZml4IHRoYXQgaGVyZS4KK3ZvaWQgZml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMoQ29kZSYpOwor
Cit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRl
LmNwcAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJHZW5lcmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NSw3ICsxNjUsNyBAQCB2b2lkIGdl
bmVyYXRlKENvZGUmIGNvZGUsIENDYWxsSGVscGVycyYgCiAgICAgICAgIGlmIChibG9jaykKICAg
ICAgICAgICAgIGNvbnRleHQuYmxvY2tMYWJlbHNbYmxvY2tdID0gQm94PENDYWxsSGVscGVyczo6
TGFiZWw+OjpjcmVhdGUoKTsKICAgICB9Ci0gICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgQ0NhbGxI
ZWxwZXJzOjpKdW1wTGlzdD4gYmxvY2tKdW1wcyhjb2RlLnNpemUoKSk7CisgICAgSW5kZXhNYXA8
QmFzaWNCbG9jayosIENDYWxsSGVscGVyczo6SnVtcExpc3Q+IGJsb2NrSnVtcHMoY29kZS5zaXpl
KCkpOwogCiAgICAgYXV0byBsaW5rID0gWyZdIChDQ2FsbEhlbHBlcnM6Okp1bXAganVtcCwgQmFz
aWNCbG9jayogdGFyZ2V0KSB7CiAgICAgICAgIGlmIChjb250ZXh0LmJsb2NrTGFiZWxzW3Rhcmdl
dF0tPmlzU2V0KCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2Vu
ZXJhdGlvbkNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckdlbmVyYXRpb25Db250ZXh0LmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGlvbkNvbnRleHQuaAkod29ya2luZyBjb3B5
KQpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBTaGFyZWRUYXNrPExhdGVQ
YXRoRnVuY3Rpb24+IExhdGVQYXRoOwogCiAgICAgVmVjdG9yPFJlZlB0cjxMYXRlUGF0aD4+IGxh
dGVQYXRoczsKLSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBCb3g8Q0NhbGxIZWxwZXJzOjpMYWJl
bD4+IGJsb2NrTGFiZWxzOworICAgIEluZGV4TWFwPEJhc2ljQmxvY2sqLCBCb3g8Q0NhbGxIZWxw
ZXJzOjpMYWJlbD4+IGJsb2NrTGFiZWxzOwogICAgIEJhc2ljQmxvY2sqIGN1cnJlbnRCbG9jayB7
IG51bGxwdHIgfTsKICAgICB1bnNpZ25lZCBpbmRleEluQmxvY2sgeyBVSU5UX01BWCB9OwogICAg
IENvZGUqIGNvZGUgeyBudWxscHRyIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwCShyZXZpc2lvbiAyMTQ0
MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxv
Yy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDExIEBAIHZvaWQgbG93ZXJBZnRlclJl
Z0FsbG9jKENvZGUmIGNvZGUpCiAKICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgZGF0YUxvZygi
Q29kZSBiZWZvcmUgbG93ZXJBZnRlclJlZ0FsbG9jOlxuIiwgY29kZSk7CisgICAgCisgICAgLy8g
RklYTUU6CisgICAgLy8gMSkgVGhpcyBzaG91bGQgYmFpbCBlYXJseSBpZiB0aGVyZSBhcmUgbm8g
U2h1ZmZsZXMgb3IgQ29sZENDYWxscy4gKE9PUFMhISBuZWVkIGJ1ZyB1cmwpCisgICAgLy8gMikg
V2Ugc2hvdWxkIG5vdCBpbnRyb2R1Y2UgU2h1ZmZsZXMgZm9yIG5vcm1hbCBjYWxscy4gKE9PUFMh
ISBuZWVkIGJ1ZyB1cmwpCisgICAgLy8gMykgV2Ugc2hvdWxkIGVtaXQgQ29sZENDYWxsIG9ubHkg
YXQgb3B0TGV2ZWw9PTEuIChPT1BTISEgbmVlZCBidWcgdXJsKQogCiAgICAgSGFzaE1hcDxJbnN0
KiwgUmVnaXN0ZXJTZXQ+IHVzZWRSZWdpc3RlcnM7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyTG93ZXJFbnRyeVN3aXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlckVudHJ5U3dpdGNoLmNwcAkocmV2aXNpb24g
MjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlckVudHJ5U3dp
dGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsNyArODIsNyBAQCB2b2lkIGxvd2VyRW50cnlT
d2l0Y2goQ29kZSYgY29kZSkKICAgICAvLyBOb3cgZHVwbGljYXRlIHRoZW0uCiAgICAgVmVjdG9y
PEZyZXF1ZW50ZWRCbG9jaz4gZW50cnlwb2ludHM7CiAgICAgZW50cnlwb2ludHMuYXBwZW5kKEZy
ZXF1ZW50ZWRCbG9jayhjb2RlWzBdLCBlbnRyeXBvaW50RnJlcXVlbmNpZXNbMF0pKTsKLSAgICBJ
bmRleE1hcDxCYXNpY0Jsb2NrLCBCYXNpY0Jsb2NrKj4gbWFwKGNvZGUuc2l6ZSgpKTsKKyAgICBJ
bmRleE1hcDxCYXNpY0Jsb2NrKiwgQmFzaWNCbG9jayo+IG1hcChjb2RlLnNpemUoKSk7CiAgICAg
Zm9yICh1bnNpZ25lZCBlbnRyeXBvaW50SW5kZXggPSAxOyBlbnRyeXBvaW50SW5kZXggPCBjb2Rl
LnByb2MoKS5udW1FbnRyeXBvaW50cygpOyArK2VudHJ5cG9pbnRJbmRleCkgewogICAgICAgICBt
YXAuY2xlYXIoKTsKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IHdvcmtsaXN0LnNl
ZW4oKS52YWx1ZXMoY29kZSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clJlZ0xpdmVuZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJSZWdMaXZlbmVzcy5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpclJlZ0xpdmVuZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0
LDE5IEBAIHB1YmxpYzoKICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICAv
LyBJZiB5b3UgY29tcHV0ZWQgVG1wIGxpdmVuZXNzIGZvciBzb21lIGJhbmssIHlvdSBjYW4gdXNl
IHJlZyBsaXZlbmVzcyB0byBmaWxsIGluIHRoZSBibGFua3MuCisgICAgICAgIC8vIE5vdGUgdGhh
dCB3aGF0IGhhcHBlbnMgdG8gdGhlIHJlZ2lzdGVycyBub3QgYmVsb25naW5nIHRvIHRoZSBiYW5r
IGlzIGFyYml0cmFyeSAtIHRoZXkgbWF5IGdldAorICAgICAgICAvLyBzZXQgb3Igbm90LgorICAg
ICAgICB0ZW1wbGF0ZTxCYW5rIGJhbms+CisgICAgICAgIExvY2FsQ2FsYyhUbXBMaXZlbmVzczxi
YW5rPiYgbGl2ZW5lc3MsIEJhc2ljQmxvY2sqIGJsb2NrKQorICAgICAgICAgICAgOiBtX2Jsb2Nr
KGJsb2NrKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKFRtcCB0bXAgOiBsaXZlbmVzcy5s
aXZlQXRUYWlsKGJsb2NrKSkgeworICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSkKKyAg
ICAgICAgICAgICAgICAgICAgbV93b3Jrc2V0LnNldCh0bXAucmVnKCkpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIAogICAgICAgICBjb25zdCBSZWdpc3RlclNldCYgbGl2ZSgp
IGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBtX3dvcmtzZXQ7CkBAIC04NCw4
ICs5Nyw4IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiBwcml2YXRlOgotICAgIEluZGV4TWFwPEJh
c2ljQmxvY2ssIFJlZ2lzdGVyU2V0PiBtX2xpdmVBdEhlYWQ7Ci0gICAgSW5kZXhNYXA8QmFzaWNC
bG9jaywgUmVnaXN0ZXJTZXQ+IG1fbGl2ZUF0VGFpbDsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2Nr
KiwgUmVnaXN0ZXJTZXQ+IG1fbGl2ZUF0SGVhZDsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwg
UmVnaXN0ZXJTZXQ+IG1fbGl2ZUF0VGFpbDsKIH07CiAKIH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzOjpBaXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVy
eXRoaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clNwaWxsRXZlcnl0aGluZy5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDYsNyArNDYsNyBAQCB2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJiBjb2RlKQogICAgIHBhZElu
dGVyZmVyZW5jZShjb2RlKTsKIAogICAgIC8vIFdlIHdhbnQgdG8ga25vdyB0aGUgc2V0IG9mIHJl
Z2lzdGVycyB1c2VkIGF0IGV2ZXJ5IHBvaW50IGluIGV2ZXJ5IGJhc2ljIGJsb2NrLgotICAgIElu
ZGV4TWFwPEJhc2ljQmxvY2ssIFZlY3RvcjxSZWdpc3RlclNldD4+IHVzZWRSZWdpc3RlcnMoY29k
ZS5zaXplKCkpOworICAgIEluZGV4TWFwPEJhc2ljQmxvY2sqLCBWZWN0b3I8UmVnaXN0ZXJTZXQ+
PiB1c2VkUmVnaXN0ZXJzKGNvZGUuc2l6ZSgpKTsKICAgICBHUExpdmVuZXNzIGdwTGl2ZW5lc3Mo
Y29kZSk7CiAgICAgRlBMaXZlbmVzcyBmcExpdmVuZXNzKGNvZGUpOwogICAgIGZvciAoQmFzaWNC
bG9jayogYmxvY2sgOiBjb2RlKSB7CkBAIC0xNzMsMTAgKzE3MywxMyBAQCB2b2lkIHNwaWxsRXZl
cnl0aGluZyhDb2RlJiBjb2RlKQogICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChj
aG9zZW5SZWcpOwogCiAgICAgICAgICAgICAgICAgICAgIHRtcCA9IFRtcChjaG9zZW5SZWcpOwor
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFyZyA9PSBBcmc6
OlNjcmF0Y2gpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAg
ICAgICAgICAgT3Bjb2RlIG1vdmUgPSBiYW5rID09IEdQID8gTW92ZSA6IE1vdmVEb3VibGU7CiAK
LSAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlVc2Uocm9sZSkgJiYgcm9sZSAhPSBB
cmc6OlNjcmF0Y2gpCisgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzQW55VXNlKHJvbGUp
KQogICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydChpbnN0SW5kZXgs
IG1vdmUsIGluc3Qub3JpZ2luLCBhcmcsIHRtcCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChB
cmc6OmlzQW55RGVmKHJvbGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0
Lmluc2VydChpbnN0SW5kZXggKyAxLCBtb3ZlLCBpbnN0Lm9yaWdpbiwgdG1wLCBhcmcpOwpAQCAt
MTg0LDYgKzE4Nyw4IEBAIHZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUmIGNvZGUpCiAgICAgICAg
IH0KICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOwogICAgIH0KKyAgICAKKyAg
ICBmaXhTcGlsbHNBZnRlclRlcm1pbmFscyhjb2RlKTsKIH0KIAogfSB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjM6OkFpcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmNw
cAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJU
bXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDYgKzMwLDExIEBACiAKIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKIAorY29uc3QgY2hhciogY29uc3QgVG1wOjpJ
bmRleGVkPEdQPjo6ZHVtcFByZWZpeCA9ICIldG1wIjsKK2NvbnN0IGNoYXIqIGNvbnN0IFRtcDo6
SW5kZXhlZDxGUD46OmR1bXBQcmVmaXggPSAiJWZ0bXAiOworY29uc3QgY2hhciogY29uc3QgVG1w
OjpBYnNvbHV0ZWx5SW5kZXhlZDxHUD46OmR1bXBQcmVmaXggPSAiJWFicyI7Citjb25zdCBjaGFy
KiBjb25zdCBUbXA6OkFic29sdXRlbHlJbmRleGVkPEZQPjo6ZHVtcFByZWZpeCA9ICIlZmFicyI7
CisKIHZvaWQgVG1wOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgaWYgKCEq
dGhpcykgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCShyZXZpc2lv
biAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTc0LDYgKzc0LDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmVzdWx0Lm1fdmFsdWUg
PSBlbmNvZGVGUFRtcChpbmRleCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQorICAg
IAorICAgIHN0YXRpYyBUbXAgdG1wRm9ySW5kZXgoQmFuayBiYW5rLCB1bnNpZ25lZCBpbmRleCkK
KyAgICB7CisgICAgICAgIGlmIChiYW5rID09IEdQKQorICAgICAgICAgICAgcmV0dXJuIGdwVG1w
Rm9ySW5kZXgoaW5kZXgpOworICAgICAgICBBU1NFUlQoYmFuayA9PSBGUCk7CisgICAgICAgIHJl
dHVybiBmcFRtcEZvckluZGV4KGluZGV4KTsKKyAgICB9CiAKICAgICBleHBsaWNpdCBvcGVyYXRv
ciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX3ZhbHVlOyB9CiAgICAgCkBAIC0xNTQsNyArMTYy
LDE2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBncFRtcEluZGV4KCk7CiAgICAgICAg
IHJldHVybiBmcFRtcEluZGV4KCk7CiAgICAgfQotCisgICAgCisgICAgdGVtcGxhdGU8QmFuayBi
YW5rPiBjbGFzcyBJbmRleGVkOworICAgIHRlbXBsYXRlPEJhbmsgYmFuaz4gY2xhc3MgQWJzb2x1
dGVseUluZGV4ZWQ7CisgICAgCisgICAgdGVtcGxhdGU8QmFuayBiYW5rPgorICAgIEluZGV4ZWQ8
YmFuaz4gaW5kZXhlZCgpIGNvbnN0OworICAgIAorICAgIHRlbXBsYXRlPEJhbmsgYmFuaz4KKyAg
ICBBYnNvbHV0ZWx5SW5kZXhlZDxiYW5rPiBhYm9sdXRlbHlJbmRleGVkKCkgY29uc3Q7CisgICAg
CiAgICAgYm9vbCBpc0FsaXZlKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiAhISp0aGlz
OwpAQCAtMTk1LDYgKzIxMiw4IEBAIHB1YmxpYzoKICAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSBz
dGF0aWNfY2FzdDxpbnQ+KGluZGV4KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Cisg
ICAgCisgICAgc3RhdGljIFRtcCB0bXBGb3JBYnNvbHV0ZUluZGV4KEJhbmssIHVuc2lnbmVkKTsK
IAogcHJpdmF0ZToKICAgICBzdGF0aWMgaW50IGVuY29kZUdQKHVuc2lnbmVkIGluZGV4KQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXBJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXBJbmxpbmVzLmgJKHJldmlz
aW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wSW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC05Miw2ICs5Miw1OCBAQCBzdHJ1Y3QgQWJzb2x1dGVUbXBN
YXBwZXI8RlA+IHsKICAgICB9CiB9OwogCit0ZW1wbGF0ZTxCYW5rIGJhbms+CitjbGFzcyBUbXA6
OkluZGV4ZWQgOiBwdWJsaWMgVG1wIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgY2hhciog
Y29uc3QgZHVtcFByZWZpeDsKKyAgICAKKyAgICBJbmRleGVkKFRtcCB0bXApCisgICAgICAgIDog
VG1wKHRtcCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiB0bXBJbmRleChiYW5rKTsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTxCYW5rIGJhbms+CitjbGFzcyBUbXA6OkFic29sdXRlbHlJbmRleGVkIDogcHVibGljIFRt
cCB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGR1bXBQcmVmaXg7CisK
KyAgICBBYnNvbHV0ZWx5SW5kZXhlZChUbXAgdG1wKQorICAgICAgICA6IFRtcCh0bXApCisgICAg
eworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gQWJzb2x1dGVUbXBNYXBwZXI8YmFuaz46OmFic29sdXRlSW5kZXgoKnRoaXMpOwor
ICAgIH0KK307CisKK3RlbXBsYXRlPEJhbmsgYmFuaz4KK1RtcDo6SW5kZXhlZDxiYW5rPiBUbXA6
OmluZGV4ZWQoKSBjb25zdAoreworICAgIHJldHVybiBJbmRleGVkPGJhbms+KCp0aGlzKTsKK30K
KwordGVtcGxhdGU8QmFuayBiYW5rPgorVG1wOjpBYnNvbHV0ZWx5SW5kZXhlZDxiYW5rPiBUbXA6
OmFic29sdXRlbHlJbmRleGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gQWJzb2x1dGVseUluZGV4
ZWQ8YmFuaz4oKnRoaXMpOworfQorCitUbXAgVG1wOjp0bXBGb3JBYnNvbHV0ZUluZGV4KEJhbmsg
YmFuaywgdW5zaWduZWQgaW5kZXgpCit7CisgICAgaWYgKGJhbmsgPT0gR1ApCisgICAgICAgIHJl
dHVybiBBYnNvbHV0ZVRtcE1hcHBlcjxHUD46OnRtcEZyb21BYnNvbHV0ZUluZGV4KGluZGV4KTsK
KyAgICBBU1NFUlQoYmFuayA9PSBGUCk7CisgICAgcmV0dXJuIEFic29sdXRlVG1wTWFwcGVyPEZQ
Pjo6dG1wRnJvbUFic29sdXRlSW5kZXgoaW5kZXgpOworfQorCiB9IH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMzo6QWlyCiAKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIs
OCArMTAyLDE2IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgLy8gQWxzbyBhbGxvdyBhZGQv
cmVtb3ZlL2NvbnRhaW5zIHRlcm1pbm9sb2d5LCB3aGljaCBtZWFucyB0aGUgc2FtZSB0aGluZyBh
cyBzZXQvY2xlYXIvZ2V0LgotICAgIHZvaWQgYWRkKFJlZyByZWcpIHsgc2V0KHJlZyk7IH0KLSAg
ICB2b2lkIHJlbW92ZShSZWcgcmVnKSB7IGNsZWFyKHJlZyk7IH0KKyAgICBib29sIGFkZChSZWcg
cmVnKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCEhcmVnKTsKKyAgICAgICAgcmV0dXJuICFtX2Jp
dHMudGVzdEFuZFNldChyZWcuaW5kZXgoKSk7CisgICAgfQorICAgIGJvb2wgcmVtb3ZlKFJlZyBy
ZWcpCisgICAgeworICAgICAgICBBU1NFUlQoISFyZWcpOworICAgICAgICByZXR1cm4gbV9iaXRz
LnRlc3RBbmRDbGVhcihyZWcuaW5kZXgoKSk7CisgICAgfQogICAgIGJvb2wgY29udGFpbnMoUmVn
IHJlZykgY29uc3QgeyByZXR1cm4gZ2V0KHJlZyk7IH0KICAgICAKICAgICB2b2lkIG1lcmdlKGNv
bnN0IFJlZ2lzdGVyU2V0JiBvdGhlcikgeyBtX2JpdHMubWVyZ2Uob3RoZXIubV9iaXRzKTsgfQpJ
bmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAy
MTQ0MjcpCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw4IEBACiAvKiBCZWdpbiBQQlhCdWlsZEZpbGUgc2VjdGlv
biAqLwogCQkwRjBEODVCNDE3MjM0Q0MxMDAzMzgyMTAgLyogTm9Mb2NrLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBEODVCMzE3MjM0Q0IxMDAzMzgy
MTAgLyogTm9Mb2NrLmggKi87IH07CiAJCTBGMEZDRERFMUREMTY3RjkwMENDQUI1MyAvKiBMb2Nr
QWxnb3JpdGhtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjBGQ0RERDFERDE2N0Y5MDBDQ0FCNTMgLyogTG9ja0FsZ29yaXRobS5oICovOyB9OworCQkw
RjJBQzU2MTFFODlGNzBDMDAwMUVFM0YgLyogUmFuZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkFDNTYwMUU4OUY3MEMwMDAxRUUzRiAvKiBSYW5n
ZS5oICovOyB9OworCQkwRjJBQzU2MzFFOEEwMTQ5MDAwMUVFM0YgLyogSW5kZXhLZXlUeXBlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJBQzU2MjFF
OEEwMTQ5MDAwMUVFM0YgLyogSW5kZXhLZXlUeXBlLmggKi87IH07CiAJCTBGMkI2NkE2MTdCNkI0
RkIwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QTQxN0I2QjRGNzAwQTdBRTNGIC8qIERl
ZmVycmFibGVSZWZDb3VudGVkLmggKi87IH07CiAJCTBGMkI2NkE3MTdCNkI0RkQwMEE3QUUzRiAv
KiBGbGlwQnl0ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMkI2NkE1MTdCNkI0RjcwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCAqLzsgfTsKIAkJMEYz
MEJBOTAxRTc4NzA4RTAwMkNBODQ3IC8qIEdsb2JhbFZlcnNpb24uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMEJBOEExRTc4NzA4RTAwMkNBODQ3
IC8qIEdsb2JhbFZlcnNpb24uY3BwICovOyB9OwpAQCAtNDA4LDYgKzQxMCw4IEBACiAvKiBCZWdp
biBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KIAkJMEYwRDg1QjMxNzIzNENCMTAwMzM4MjEw
IC8qIE5vTG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOb0xvY2suaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEYwRkNEREQxREQxNjdGOTAwQ0NBQjUzIC8qIExvY2tBbGdvcml0aG0uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9ja0FsZ29yaXRobS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjJBQzU2MDFFODlGNzBDMDAwMUVFM0YgLyogUmFuZ2Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmFuZ2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQUM1NjIxRThBMDE0OTAwMDFFRTNGIC8qIEluZGV4S2V5VHlw
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmRleEtleVR5cGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQjY2QTQxN0I2QjRGNzAwQTdBRTNGIC8qIERl
ZmVycmFibGVSZWZDb3VudGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlZmVycmFibGVSZWZDb3VudGVk
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkE1MTdCNkI0RjcwMEE3QUUz
RiAvKiBGbGlwQnl0ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmxpcEJ5dGVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMzAwQjdEMThBQjQ4QjQwMEE2RDcyRSAvKiBIYXNoTWV0aG9k
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEhhc2hNZXRob2QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTEwMTgsMTAgKzEwMjIsMTEgQEAKIAkJCQlBOEE0NzJCQTE1MUE4MjVBMDA0MTIzRkYg
LyogSGFzaFRyYWl0cy5oICovLAogCQkJCUE4QTQ3MkJCMTUxQTgyNUEwMDQxMjNGRiAvKiBIZXhO
dW1iZXIuaCAqLywKIAkJCQlGRTg5MjVBRjFEMDBEQUVDMDA0NjkwN0UgLyogSW5kZW50ZXIuaCAq
LywKLQkJCQk5QzY3QzU0MjU4OTM0OEUyODVCNDk2OTkgLyogSW5kZXhlZENvbnRhaW5lckl0ZXJh
dG9yLmggKi8sCisJCQkJMEYyQUM1NjIxRThBMDE0OTAwMDFFRTNGIC8qIEluZGV4S2V5VHlwZS5o
ICovLAogCQkJCTVCNDMzODNBNUQwQjQ2M0M5NDMzRDkzMyAvKiBJbmRleE1hcC5oICovLAogCQkJ
CTMxMzdFMUQ3REJEODRBQzM4RkFFNEQzNCAvKiBJbmRleFNldC5oICovLAogCQkJCTI2ODRENDM1
MUMwMDBENDAwMDgxRDY2MyAvKiBJbmRleFNwYXJzZVNldC5oICovLAorCQkJCTlDNjdDNTQyNTg5
MzQ4RTI4NUI0OTY5OSAvKiBJbmRleGVkQ29udGFpbmVySXRlcmF0b3IuaCAqLywKIAkJCQlBOEE0
NzJCQzE1MUE4MjVBMDA0MTIzRkYgLyogSW5saW5lQVNNLmggKi8sCiAJCQkJQTcwREEwODIxNzk5
RjA0RDAwNTI5QTlCIC8qIEluc2VydGlvbi5oICovLAogCQkJCTdDREQ3RkY3MTg2RDI5MUUwMDc0
MzNDRCAvKiBJdGVyYXRvckFkYXB0b3JzLmggKi8sCkBAIC0xMTAwLDYgKzExMDUsNyBAQAogCQkJ
CUE4QTQ3MkZCMTUxQTgyNUIwMDQxMjNGRiAvKiBSYW5kb21OdW1iZXIuY3BwICovLAogCQkJCUE4
QTQ3MkZDMTUxQTgyNUIwMDQxMjNGRiAvKiBSYW5kb21OdW1iZXIuaCAqLywKIAkJCQlBOEE0NzJG
RDE1MUE4MjVCMDA0MTIzRkYgLyogUmFuZG9tTnVtYmVyU2VlZC5oICovLAorCQkJCTBGMkFDNTYw
MUU4OUY3MEMwMDAxRUUzRiAvKiBSYW5nZS5oICovLAogCQkJCTBGNzI1Q0FCMUM1MDQ2MTYwMEFE
OTQzQSAvKiBSYW5nZVNldC5oICovLAogCQkJCTBGODcxMDU5MTY2NDNGMTkwMDkwQjBBRCAvKiBS
YXdQb2ludGVyLmggKi8sCiAJCQkJMEZERTg3RjYxREZEMDdDQzAwNjRDMzkwIC8qIFJlY3Vyc2l2
ZUxvY2tBZGFwdGVyLmggKi8sCkBAIC0xNDg1LDYgKzE0OTEsNyBAQAogCQkJCUM5MTZCOTc1RjAy
RjRGN0U4QjRBQjEyRCAvKiBJbmRleE1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzhCMEUxQTFF
MDFBNDg2RUI5NUUwRDExIC8qIEluZGV4U2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkyNjg0RDQz
NjFDMDAwRDQwMDA4MUQ2NjMgLyogSW5kZXhTcGFyc2VTZXQuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGMkFDNTYzMUU4QTAxNDkwMDAxRUUzRiAvKiBJbmRleEtleVR5cGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4QTQ3M0RDMTUxQTgyNUIwMDQxMjNGRiAvKiBJbmxpbmVBU00uaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3MERBMDg0MTc5OUYwNEQwMDUyOUE5QiAvKiBJbnNlcnRpb24uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTI2MTQ3QjBBMTVERENDREMwMEREQjkwNyAvKiBJbnRlZ2VyVG9TdHJpbmdD
b252ZXJzaW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTE1ODYsNiArMTU5Myw3IEBACiAJCQkJNDMw
QjQ3ODkxQUFBQUMxQTAwMTIyM0RBIC8qIFN0cmluZ0NvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQThBNDc0M0UxNTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ0NvbmNhdGVuYXRlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk3Q0Q0QzI3MDFFMkM4MkI5MDA5Mjk0NzAgLyogU3RyaW5nQ29uY2F0ZW5h
dGVOdW1iZXJzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJBQzU2MTFFODlGNzBDMDAwMUVFM0Yg
LyogUmFuZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDJDMTUxQTgyNUIwMDQxMjNGRiAv
KiBTdHJpbmdFeHRyYXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDNGMTUxQTgyNUIwMDQx
MjNGRiAvKiBTdHJpbmdIYXNoLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzQ4NzQ1NDE3QTBCREFF
MDBGQTA0Q0IgLyogU3RyaW5nSGFzaER1bXBDb250ZXh0LmggaW4gSGVhZGVycyAqLywKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvV1RGL3d0Zi9D
TWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDYgKzEwMCw3IEBAIHNldChXVEZf
SEVBREVSUwogICAgIFJBTVNpemUuaAogICAgIFJhbmRvbU51bWJlci5oCiAgICAgUmFuZG9tTnVt
YmVyU2VlZC5oCisgICAgUmFuZ2UuaAogICAgIFJhbmdlU2V0LmgKICAgICBSYXdQb2ludGVyLmgK
ICAgICBSZWN1cnNpdmVMb2NrQWRhcHRlci5oCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9EZXF1ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0RlcXVlLmgJKHJldmlzaW9uIDIxNDQyNykK
KysrIFNvdXJjZS9XVEYvd3RmL0RlcXVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtODksNiArODksMTQgQEAgcHVi
bGljOgogICAgIHZvaWQgcmVtb3ZlTGFzdCgpOwogICAgIHZvaWQgcmVtb3ZlKGl0ZXJhdG9yJik7
CiAgICAgdm9pZCByZW1vdmUoY29uc3RfaXRlcmF0b3ImKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jPiB2b2lkIHJlbW92ZUFsbE1hdGNoaW5nKGNvbnN0IEZ1bmMmKTsKKyAgICAK
KyAgICAvLyBUaGlzIGlzIGEgcHJpb3JpdHkgZW5xdWV1ZS4gVGhlIGNhbGxiYWNrIGlzIGdpdmVu
IGEgdmFsdWUsIGFuZCBpZiBpdCByZXR1cm5zIHRydWUsIHRoZW4gdGhpcworICAgIC8vIHdpbGwg
cHV0IHRoZSBhcHBlbmRlZCB2YWx1ZSBiZWZvcmUgdGhhdCB2YWx1ZS4gSXQgd2lsbCBrZWVwIGJ1
YmJsaW5nIHVudGlsIHRoZSBjYWxsYmFjayByZXR1cm5zCisgICAgLy8gZmFsc2Ugb3IgdGhlIHZh
bHVlIGVuZHMgdXAgYXQgdGhlIGhlYWQgb2YgdGhlIHF1ZXVlLgorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFUsIHR5cGVuYW1lIEZ1bmM+CisgICAgdm9pZCBhcHBlbmRBbmRCdWJibGUoVSYmLCBjb25z
dCBGdW5jJik7CiAKICAgICB2b2lkIGNsZWFyKCk7CiAKQEAgLTUyNCw2ICs1MzIsMzYgQEAgaW5s
aW5lIHZvaWQgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+OjpyZQogICAgIGNoZWNrVmFsaWRpdHko
KTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgordGVt
cGxhdGU8dHlwZW5hbWUgRnVuYz4KK2lubGluZSB2b2lkIERlcXVlPFQsIGlubGluZUNhcGFjaXR5
Pjo6cmVtb3ZlQWxsTWF0Y2hpbmcoY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICBzaXplX3QgY291
bnQgPSBzaXplKCk7CisgICAgd2hpbGUgKGNvdW50LS0pIHsKKyAgICAgICAgVCB2YWx1ZSA9IHRh
a2VGaXJzdCgpOworICAgICAgICBpZiAoIWZ1bmModmFsdWUpKQorICAgICAgICAgICAgYXBwZW5k
KFdURk1vdmUodmFsdWUpKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVf
dCBpbmxpbmVDYXBhY2l0eT4KK3RlbXBsYXRlPHR5cGVuYW1lIFUsIHR5cGVuYW1lIEZ1bmM+Citp
bmxpbmUgdm9pZCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OmFwcGVuZEFuZEJ1YmJsZShVJiYg
dmFsdWUsIGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgYXBwZW5kKFdURk1vdmUodmFsdWUpKTsK
KyAgICBpdGVyYXRvciBiZWdpbiA9IGJlZ2luKCk7CisgICAgaXRlcmF0b3IgaXRlciA9IGVuZCgp
OworICAgIC0taXRlcjsKKyAgICB3aGlsZSAoaXRlciAhPSBiZWdpbikgeworICAgICAgICBpdGVy
YXRvciBwcmV2ID0gaXRlcjsKKyAgICAgICAgLS1wcmV2OworICAgICAgICBpZiAoIWZ1bmMoKnBy
ZXYpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBzdGQ6OnN3YXAoKnByZXYsICppdGVy
KTsKKyAgICAgICAgaXRlciA9IHByZXY7CisgICAgfQorfQorCiAjaWZkZWYgTkRFQlVHCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+IGlubGluZSB2b2lkIERlcXVl
SXRlcmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5Pjo6Y2hlY2tWYWxpZGl0eSgpIGNvbnN0IHsg
fQogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBpbmxpbmUgdm9p
ZCBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT46OmNoZWNrVmFsaWRpdHkoY29u
c3QgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+JikgY29uc3QgeyB9CkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9JbmRleEtleVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9JbmRleEtleVR5cGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9JbmRl
eEtleVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3Bh
Y2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBJbmRleEtleVR5cGUgewor
ICAgIHN0YXRpYyBzaXplX3QgaW5kZXgoY29uc3QgVCYga2V5KSBjb25zdCB7IHJldHVybiBrZXku
aW5kZXgoKTsgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBJbmRleEtleVR5
cGU8VCo+IHsKKyAgICBzdGF0aWMgc2l6ZV90IGluZGV4KFQqIGtleSkgY29uc3QgeyByZXR1cm4g
a2V5LT5pbmRleCgpOyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNl
L1dURi93dGYvSW5kZXhNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9JbmRleE1h
cC5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvV1RGL3d0Zi9JbmRleE1hcC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSA8
d3RmL0luZGV4S2V5VHlwZS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNl
IFdURiB7CkBAIC03MCwxOCArNzEsMjQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV92ZWN0
b3JbaW5kZXhdOwogICAgIH0KICAgICAKLSAgICBWYWx1ZSYgb3BlcmF0b3JbXShLZXkqIGtleSkK
KyAgICBWYWx1ZSYgb3BlcmF0b3JbXShjb25zdCBLZXkmIGtleSkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBtX3ZlY3RvcltrZXktPmluZGV4KCldOworICAgICAgICByZXR1cm4gbV92ZWN0b3JbSW5k
ZXhLZXlUeXBlPEtleT46OmluZGV4KGtleSldOwogICAgIH0KICAgICAKLSAgICBjb25zdCBWYWx1
ZSYgb3BlcmF0b3JbXShLZXkqIGtleSkgY29uc3QKKyAgICBjb25zdCBWYWx1ZSYgb3BlcmF0b3Jb
XShjb25zdCBLZXkmIGtleSkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3ZlY3Rvcltr
ZXktPmluZGV4KCldOworICAgICAgICByZXR1cm4gbV92ZWN0b3JbSW5kZXhLZXlUeXBlPEtleT46
OmluZGV4KGtleSldOworICAgIH0KKyAgICAKKyAgICB2b2lkIGFwcGVuZChjb25zdCBLZXkmIGtl
eSwgVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChJbmRleEtleVR5
cGU8S2V5Pjo6aW5kZXgoa2V5KSA9PSBtX3ZlY3Rvci5zaXplKCkpOworICAgICAgICBtX3ZlY3Rv
ci5hcHBlbmQodmFsdWUpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBWZWN0b3I8VmFsdWU+IG1f
dmVjdG9yOworICAgIFZlY3RvcjxWYWx1ZSwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fdmVj
dG9yOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9JbmRl
eFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0luZGV4U2V0LmgJKHJldmlzaW9u
IDIxNDQyNykKKysrIFNvdXJjZS9XVEYvd3RmL0luZGV4U2V0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+CiAjaW5jbHVkZSA8
d3RmL0NvbW1hUHJpbnRlci5oPgorI2luY2x1ZGUgPHd0Zi9JbmRleEtleVR5cGUuaD4KIAogbmFt
ZXNwYWNlIFdURiB7CiAKQEAgLTQyLDMwICs0MywzMCBAQCBwdWJsaWM6CiAgICAgewogICAgIH0K
IAotICAgIGJvb2wgYWRkKFQqIHZhbHVlKQorICAgIGJvb2wgYWRkKGNvbnN0IFQmIHZhbHVlKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuICFtX3NldC5zZXQodmFsdWUtPmluZGV4KCkpOworICAgICAg
ICByZXR1cm4gIW1fc2V0LnNldChJbmRleEtleVR5cGU8VD46OmluZGV4KHZhbHVlKSk7CiAgICAg
fQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmFibGU+CiAgICAgYm9vbCBhZGRBbGwoY29u
c3QgSXRlcmFibGUmIGl0ZXJhYmxlKQogICAgIHsKICAgICAgICAgYm9vbCByZXN1bHQgPSBmYWxz
ZTsKLSAgICAgICAgZm9yIChUKiB2YWx1ZSA6IGl0ZXJhYmxlKQorICAgICAgICBmb3IgKGNvbnN0
IFQmIHZhbHVlIDogaXRlcmFibGUpCiAgICAgICAgICAgICByZXN1bHQgfD0gYWRkKHZhbHVlKTsK
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBib29sIHJlbW92ZShUKiB2YWx1
ZSkKKyAgICBib29sIHJlbW92ZShjb25zdCBUJiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJldHVy
biBtX3NldC5jbGVhcih2YWx1ZS0+aW5kZXgoKSk7CisgICAgICAgIHJldHVybiBtX3NldC5jbGVh
cihJbmRleEtleVR5cGU8VD46OmluZGV4KHZhbHVlKSk7CiAgICAgfQogCi0gICAgYm9vbCBjb250
YWlucyhUKiB2YWx1ZSkgY29uc3QKKyAgICBib29sIGNvbnRhaW5zKGNvbnN0IFQmIHZhbHVlKSBj
b25zdAogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgcmV0dXJuIG1fc2V0LmdldCh2YWx1ZS0+aW5kZXgoKSk7CisgICAgICAgIHJl
dHVybiBtX3NldC5nZXQoSW5kZXhLZXlUeXBlPFQ+OjppbmRleCh2YWx1ZSkpOwogICAgIH0KIAog
ICAgIHNpemVfdCBzaXplKCkgY29uc3QKQEAgLTEwMCw3ICsxMDEsNyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIFQqIG9wZXJhdG9yKigpCisg
ICAgICAgICAgICBUIG9wZXJhdG9yKigpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
cmV0dXJuIG1fY29sbGVjdGlvbi0+YXQoKm1faXRlcik7CiAgICAgICAgICAgICB9CkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9SYW5nZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1Jhbmdl
LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvUmFuZ2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKwor
bmFtZXNwYWNlIFdURiB7CisKKy8vIE5vdGUgdGhhdCB0aGUgJ2JlZ2luJyBpcyBpbmNsdXNpdmUs
IHdoaWxlIHRoZSAnZW5kJyBpcyBleGNsdXNpdmUuIFRoZXNlIHR3byByYW5nZXMgYXJlIG5vbi0K
Ky8vIG92ZXJsYXBwaW5nOgorLy8KKy8vICAgICByYW5nZUEgPSAwLi4uOAorLy8gICAgIHJhbmdl
QiA9IDguLi4xNgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBQYXNzZWRUeXBlPgorY2xhc3MgUmFuZ2Ug
eworcHVibGljOgorICAgIHR5cGVkZWYgUGFzc2VkVHlwZSBUeXBlOworICAgIAorICAgIEhlYXBS
YW5nZSgpCisgICAgICAgIDogbV9iZWdpbigwKQorICAgICAgICAsIG1fZW5kKDApCisgICAgewor
ICAgIH0KKworICAgIGV4cGxpY2l0IEhlYXBSYW5nZShUeXBlIHZhbHVlKQorICAgICAgICA6IG1f
YmVnaW4odmFsdWUpCisgICAgICAgICwgbV9lbmQodmFsdWUgKyAxKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKG1fZW5kID49IG1fYmVnaW4pOworICAgIH0KKworICAgIEhlYXBSYW5nZShUeXBlIGJl
Z2luLCBUeXBlIGVuZCkKKyAgICAgICAgOiBtX2JlZ2luKGJlZ2luKQorICAgICAgICAsIG1fZW5k
KGVuZCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2VuZCA+PSBtX2JlZ2luKTsKKyAgICAgICAg
aWYgKG1fYmVnaW4gPT0gbV9lbmQpIHsKKyAgICAgICAgICAgIC8vIENhbm9uaWNhbGl6ZSBlbXB0
eSByYW5nZXMuCisgICAgICAgICAgICBtX2JlZ2luID0gMDsKKyAgICAgICAgICAgIG1fZW5kID0g
MDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBIZWFwUmFuZ2UgdG9wKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBIZWFwUmFuZ2Uoc3RkOjpudW1lcmljX2xpbWl0czxUeXBlPjo6bWlu
KCksIHN0ZDo6bnVtZXJpY19saW1pdHM8VHlwZT46Om1heCgpKTsKKyAgICB9CisKKyAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgSGVhcFJhbmdlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX2JlZ2luID09IG90aGVyLm1fYmVnaW4KKyAgICAgICAgICAgICYmIG1fZW5kID09
IG90aGVyLm1fZW5kOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBIZWFwUmFu
Z2UmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIp
OworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1
cm4gbV9iZWdpbiAhPSBtX2VuZDsgfQorCisgICAgSGVhcFJhbmdlIG9wZXJhdG9yfChjb25zdCBI
ZWFwUmFuZ2UmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCEqdGhpcykKKyAgICAg
ICAgICAgIHJldHVybiBvdGhlcjsKKyAgICAgICAgaWYgKCFvdGhlcikKKyAgICAgICAgICAgIHJl
dHVybiAqdGhpczsKKyAgICAgICAgcmV0dXJuIEhlYXBSYW5nZSgKKyAgICAgICAgICAgIHN0ZDo6
bWluKG1fYmVnaW4sIG90aGVyLm1fYmVnaW4pLAorICAgICAgICAgICAgc3RkOjptYXgobV9lbmQs
IG90aGVyLm1fZW5kKSk7CisgICAgfQorICAgIAorICAgIFR5cGUgYmVnaW4oKSBjb25zdCB7IHJl
dHVybiBtX2JlZ2luOyB9CisgICAgVHlwZSBlbmQoKSBjb25zdCB7IHJldHVybiBtX2VuZDsgfQor
CisgICAgYm9vbCBvdmVybGFwcyhjb25zdCBIZWFwUmFuZ2UmIG90aGVyKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIFdURjo6cmFuZ2VzT3ZlcmxhcChtX2JlZ2luLCBtX2VuZCwgb3RoZXIu
bV9iZWdpbiwgb3RoZXIubV9lbmQpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCp0aGlzID09IEhlYXBSYW5nZSgpKSB7
CisgICAgICAgICAgICBvdXQucHJpbnQoIkJvdHRvbSIpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIGlmICgqdGhpcyA9PSB0b3AoKSkgeworICAgICAgICAgICAgb3V0
LnByaW50KCJUb3AiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBp
ZiAobV9iZWdpbiA9PSBtX2VuZCArIDEpIHsKKyAgICAgICAgICAgIG91dC5wcmludChtX2JlZ2lu
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBvdXQucHJpbnQobV9i
ZWdpbiwgIi4uLiIsIG1fZW5kKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVHlwZSBtX2JlZ2lu
OworICAgIFR5cGUgbV9lbmQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RG
OjpSYW5nZTsKKwpJbmRleDogU291cmNlL1dURi93dGYvUmFuZ2VTZXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9SYW5nZVNldC5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9SYW5nZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw2ICs3NywxMCBAQCBwdWJs
aWM6CiAgICAgICAgIG1faXNDb21wYWN0ID0gZmFsc2U7CiAKICAgICAgICAgLy8gV2UgYXBwZW5k
IHdpdGhvdXQgY29tcGFjdGluZyBvbmx5IGlmIGRvaW5nIHNvIGlzIGd1YXJhbnRlZWQgbm90IHRv
IHJlc2l6ZSB0aGUgdmVjdG9yLgorICAgICAgICAvLyBGSVhNRTogVGhpcyBoZXVyaXN0aWMgaXMg
YWxtb3N0IGNlcnRhaW5seSB3cm9uZywgYmVjYXVzZSB3ZSBkb24ndCBjb250cm9sIHRoZSBjYXBh
Y2l0eS4gSQorICAgICAgICAvLyB0aGluayB0aGF0IHRoaXMgbWVhbnMgdGhhdCB3ZSB3aWxsIHNv
bWV0aW1lcyBiZSByYWdlLWNvbXBhY3Rpbmcgd2hlbiB3ZSBhcmUganVzdCBzaHkgb2YgdGhlCisg
ICAgICAgIC8vIGNhcGFjaXR5LgorICAgICAgICAvLyBPT1BTOiBuZWVkIGJ1ZyB1cmwKICAgICAg
ICAgaWYgKG1fcmFuZ2VzLnNpemUoKSArIDEgPCBtX3Jhbmdlcy5jYXBhY2l0eSgpKSB7CiAgICAg
ICAgICAgICBtX3Jhbmdlcy5hcHBlbmQocmFuZ2UpOwogICAgICAgICAgICAgcmV0dXJuOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305662</attachid>
            <date>2017-03-28 16:19:59 -0700</date>
            <delta_ts>2017-03-28 18:34:28 -0700</delta_ts>
            <desc>it linear scanned marsaglia and didn&apos;t crash</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>112575</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIxNDQyNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMTQwLDcgKzE0MCw2IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYjMvQjNG
b2xkUGF0aENvbnN0YW50cy5jcHAKICAgICBiMy9CM0ZyZXF1ZW5jeUNsYXNzLmNwcAogICAgIGIz
L0IzR2VuZXJhdGUuY3BwCi0gICAgYjMvQjNIZWFwUmFuZ2UuY3BwCiAgICAgYjMvQjNJbmZlclN3
aXRjaGVzLmNwcAogICAgIGIzL0IzSW5zZXJ0aW9uU2V0LmNwcAogICAgIGIzL0IzS2luZC5jcHAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTgzLDYgKzE4MywxMCBAQAogCQkwRjI1RjFCMjE4MTYz
NUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1RjFBQjE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xv
d1BhdGhDYWxsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEYyNUYxQjMxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1RjFBQzE4
MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5LmNwcCAqLzsgfTsKIAkJMEYyNUYx
QjQxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNUYxQUQxODE2MzVGMzAwNTIyRjM5
IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGMkFDNTY2MUU4QTBCNzcwMDAxRUUzRiAvKiBBaXJGaXhTcGls
bHNBZnRlclRlcm1pbmFscy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjJBQzU2NDFFOEEwQjc2MDAwMUVFM0YgLyogQWlyRml4U3BpbGxzQWZ0ZXJU
ZXJtaW5hbHMuY3BwICovOyB9OworCQkwRjJBQzU2NzFFOEEwQjc5MDAwMUVFM0YgLyogQWlyRml4
U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMkFDNTY1MUU4QTBCNzYwMDAxRUUzRiAvKiBBaXJGaXhTcGlsbHNBZnRl
clRlcm1pbmFscy5oICovOyB9OworCQkwRjJBQzU2QTFFOEEwQkQzMDAwMUVFM0YgLyogQWlyQWxs
b2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQUM1NjgxRThBMEJEMTAwMDFFRTNGIC8qIEFpckFsbG9j
YXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcCAqLzsgfTsKKwkJMEYyQUM1NkIxRThBMEJENTAw
MDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJBQzU2OTFFOEEwQkQxMDAwMUVF
M0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaCAqLzsgfTsKIAkJMEYyQjY2
QUMxN0I2QjUzRjAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBODE3QjZCNTNEMDBBN0FF
M0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJCNjZBRDE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNv
bWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJCNjZBOTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNv
dW50ZWRJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEYyQjY2QUUxN0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVk
U2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJC
NjZBQTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTY5LDcgKzk3Myw2
IEBACiAJCTBGRUM4NUJDMUJFMTQ2MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0cmVuZ3RoLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUI3MUJF
MTQ2MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0cmVuZ3RoLmNwcCAqLzsgfTsKIAkJMEZFQzg1QkQx
QkUxNDYyRjAwODBGRjc0IC8qIEIzUmVkdWNlU3RyZW5ndGguaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUI4MUJFMTQ2MkYwMDgwRkY3NCAvKiBC
M1JlZHVjZVN0cmVuZ3RoLmggKi87IH07CiAJCTBGRUM4NUMxMUJFMTY3QTAwMDgwRkY3NCAvKiBC
M0VmZmVjdHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NUJFMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0VmZmVjdHMuaCAqLzsgfTsKLQkJMEZFQzg1
QzIxQkUxNjdBMDAwODBGRjc0IC8qIEIzSGVhcFJhbmdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUJGMUJFMTY3QTAwMDgwRkY3NCAvKiBC
M0hlYXBSYW5nZS5jcHAgKi87IH07CiAJCTBGRUM4NUMzMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hl
YXBSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg1QzAxQkUxNjdBMDAwODBGRjc0IC8qIEIzSGVhcFJhbmdlLmggKi87IH07CiAJCTBGRUM4
NUM1MUJFMTZGNUEwMDgwRkY3NCAvKiBCM0VmZmVjdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1QzQxQkUxNkY1QTAwODBGRjc0IC8qIEIz
RWZmZWN0cy5jcHAgKi87IH07CiAJCTBGRUQ2N0I5MUIyNjI1NkQwMDY2Q0UxNSAvKiBERkdDb25z
dGFudEhvaXN0aW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFRDY3QjcxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0YW50SG9pc3Rp
bmdQaGFzZS5jcHAgKi87IH07CkBAIC0yNzAzLDYgKzI3MDYsMTAgQEAKIAkJMEYyNUYxQUIxODE2
MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBGVExTbG93UGF0aENhbGwuaDsgcGF0aCA9IGZ0bC9GVExTbG93UGF0aENhbGwu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNUYxQUMxODE2MzVGMzAwNTIyRjM5
IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBGVExTbG93UGF0aENhbGxLZXkuY3BwOyBwYXRoID0gZnRsL0ZUTFNsb3dQYXRoQ2Fs
bEtleS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjVGMUFEMTgxNjM1RjMw
MDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gRlRMU2xvd1BhdGhDYWxsS2V5Lmg7IHBhdGggPSBmdGwvRlRMU2xvd1BhdGhDYWxs
S2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkFDNTY0MUU4QTBCNzYwMDAx
RUUzRiAvKiBBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5jcHA7IHBhdGgg
PSBiMy9haXIvQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjJBQzU2NTFFOEEwQjc2MDAwMUVFM0YgLyogQWlyRml4U3BpbGxzQWZ0
ZXJUZXJtaW5hbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyRml4U3Bp
bGxzQWZ0ZXJUZXJtaW5hbHMuaDsgcGF0aCA9IGIzL2Fpci9BaXJGaXhTcGlsbHNBZnRlclRlcm1p
bmFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJBQzU2ODFFOEEwQkQxMDAw
MUVFM0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNj
YW4uY3BwOyBwYXRoID0gYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQUM1NjkxRThBMEJEMTAwMDFFRTNG
IC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmg7IHBhdGgg
PSBiMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQjY2QTgxN0I2QjUzRDAwQTdBRTNGIC8qIEdDSW5jb21pbmdS
ZWZDb3VudGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5jb21pbmdSZWZDb3VudGVkLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkE5MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0lu
Y29taW5nUmVmQ291bnRlZElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR0NJbmNvbWluZ1JlZkNv
dW50ZWRJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkFBMTdC
NkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMzQ5Niw3ICszNTAzLDYgQEAKIAkJMEZFQzg1QjcxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVk
dWNlU3RyZW5ndGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNS
ZWR1Y2VTdHJlbmd0aC5jcHA7IHBhdGggPSBiMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQzg1QjgxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVk
dWNlU3RyZW5ndGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNSZWR1Y2VT
dHJlbmd0aC5oOyBwYXRoID0gYjMvQjNSZWR1Y2VTdHJlbmd0aC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkVDODVCRTFCRTE2N0EwMDA4MEZGNzQgLyogQjNFZmZlY3RzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzRWZmZWN0cy5oOyBwYXRoID0gYjMvQjNF
ZmZlY3RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGRUM4NUJGMUJFMTY3QTAw
MDgwRkY3NCAvKiBCM0hlYXBSYW5nZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBCM0hlYXBSYW5nZS5jcHA7IHBhdGggPSBiMy9CM0hlYXBSYW5nZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUM4NUMwMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hl
YXBSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0hlYXBSYW5nZS5o
OyBwYXRoID0gYjMvQjNIZWFwUmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZFQzg1QzQxQkUxNkY1QTAwODBGRjc0IC8qIEIzRWZmZWN0cy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0VmZmVjdHMuY3BwOyBwYXRoID0gYjMvQjNFZmZlY3Rz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFRDY3QjcxQjI2MjU2RDAwNjZD
RTE1IC8qIERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuY3BwOyBwYXRoID0gZGZn
L0RGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01NDE5LDcgKzU0MjUsNiBAQAogCQkJCTBGRUM4NENGMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0dlbmVyYXRlLmggKi8sCiAJCQkJMEYyQzYzQjUxRTYzNDNFODAwQzEzODM5IC8qIEIzR2VuZXJp
Y0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi8sCiAJCQkJMEZFQzg0RDAxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oICovLAotCQkJCTBGRUM4NUJGMUJFMTY3QTAwMDgw
RkY3NCAvKiBCM0hlYXBSYW5nZS5jcHAgKi8sCiAJCQkJMEZFQzg1QzAxQkUxNjdBMDAwODBGRjc0
IC8qIEIzSGVhcFJhbmdlLmggKi8sCiAJCQkJREM2OUI5OUExRDE1RjkwRjAwMkUzQzAwIC8qIEIz
SW5mZXJTd2l0Y2hlcy5jcHAgKi8sCiAJCQkJREM2OUI5OUIxRDE1RjkwRjAwMkUzQzAwIC8qIEIz
SW5mZXJTd2l0Y2hlcy5oICovLApAQCAtNTUyOCw2ICs1NTMzLDggQEAKIAkJMEZFQzg0QjMxQkRB
Q0Q4ODAwODBGRjc0IC8qIGFpciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCisJCQkJMEYyQUM1NjgxRThBMEJEMTAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0
ZXJzQnlMaW5lYXJTY2FuLmNwcCAqLywKKwkJCQkwRjJBQzU2OTFFOEEwQkQxMDAwMUVFM0YgLyog
QWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaCAqLywKIAkJCQk3OTY1QzIxNDFFNUQ3
OTk2MDBCNzU5MUQgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuY3BwICov
LAogCQkJCTc5NjVDMjE1MUU1RDc5OTYwMEI3NTkxRCAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5
R3JhcGhDb2xvcmluZy5oICovLAogCQkJCTBGRUM4NTQ4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJB
bGxvY2F0ZVN0YWNrLmNwcCAqLywKQEAgLTU1NjEsNiArNTU2OCw4IEBACiAJCQkJMEY0REUxQ0Qx
QzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCAqLywKIAkJCQkyNjJEODVC
NDFDMEQ2NTBGMDA2QUNCNjEgLyogQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmNwcCAqLywK
IAkJCQkyNjJEODVCNTFDMEQ2NTBGMDA2QUNCNjEgLyogQWlyRml4UGFydGlhbFJlZ2lzdGVyU3Rh
bGxzLmggKi8sCisJCQkJMEYyQUM1NjQxRThBMEI3NjAwMDFFRTNGIC8qIEFpckZpeFNwaWxsc0Fm
dGVyVGVybWluYWxzLmNwcCAqLywKKwkJCQkwRjJBQzU2NTFFOEEwQjc2MDAwMUVFM0YgLyogQWly
Rml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCAqLywKIAkJCQkwRkVDODU1MjFCREFDREM3MDA4MEZG
NzQgLyogQWlyRnJlcXVlbnRlZEJsb2NrLmggKi8sCiAJCQkJMEZFQzg1NTMxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckdlbmVyYXRlLmNwcCAqLywKIAkJCQkwRkVDODU1NDFCREFDREM3MDA4MEZGNzQg
LyogQWlyR2VuZXJhdGUuaCAqLywKQEAgLTgxMzksNiArODE0OCw3IEBACiAJCQkJMEZFQzg1MTAx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkVDODUxMjFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0MzQyMkE2MzFDMTU4RTZEMDBFMkVCOTggLyogQjNDb25zdEZsb2F0VmFsdWUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkFDNTZCMUU4QTBCRDUwMDAxRUUzRiAvKiBBaXJBbGxv
Y2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1QjMx
QkRFRDk1NzAwODBGRjc0IC8qIEIzQ29uc3RQdHJWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYzMzhERjYxQkU5M0Q1NTAwMTNDODhGIC8qIEIzQ29uc3RyYWluZWRWYWx1ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyQzYzQjgxRTYzNDNGNzAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2NrSW5z
ZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKQEAgLTkzNjIsNiArOTM3Miw3IEBACiAJCQkJNzA5
RkI4NkExQUUzMzVDNjAwMzlEMDY5IC8qIFdlYWtTZXRDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMTQxNTAxMzMxNTRCQjEzRjAwNUQ4Qzk4IC8qIFdlYWtTZXRJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3MDlGQjg2QzFBRTMzNUM2MDAzOUQwNjkgLyogV2Vha1NldFByb3Rv
dHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQUM1NjcxRThBMEI3OTAwMDFFRTNGIC8qIEFp
ckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JFRDFE
QjU4REFEMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNDMTYxREI1OUNCMjAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5
Q29tcGlsZUVycm9yQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JF
RjFEQjU4REFEMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90b3R5cGUuaCBp
biBIZWFkZXJzICovLApAQCAtOTk4OCw3ICs5OTk5LDYgQEAKIAkJCQkwRjcyNUNBRjFDNTA2RDNC
MDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkVDODUxNTFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkVDODUxODFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQkwRkVDODVDMjFCRTE2N0EwMDA4MEZGNzQgLyogQjNIZWFwUmFuZ2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJREM2OUI5OUMxRDE1RjkxMjAwMkUzQzAwIC8qIEIzSW5m
ZXJTd2l0Y2hlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVDODVCOTFCRTE0NjJGMDA4MEZG
NzQgLyogQjNJbnNlcnRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZERjY3RDMxRDlD
NkQyQTAwMUI5ODI1IC8qIEIzS2luZC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMTU0LDYgKzEw
MTY0LDcgQEAKIAkJCQlBNzhBOTc3NjE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkJEQzE1MTUxQzVENEQwMENEODkxMCAvKiBERkdGaXh1
cFBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjAxNzdGMURDQURDMzMwMEVBNTk1MCAv
KiBERkdGbG93SW5kZXhpbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQUM1NkExRThBMEJE
MzAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGOUQzMzk2MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRjcxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0ZsdXNo
Rm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNjlDQzg4MTkzQUM2MEEwMDQ1NzU5RSAv
KiBERkdGcm96ZW5WYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMjYzLDYgKzEwMjc0LDcg
QEAKIAkJCQkyQTgzNjM4NTE4RDdEMEVFMDAwMEVCQ0MgLyogRWRlbkdDQWN0aXZpdHlDYWxsYmFj
ay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OUU0NUEyNTE4QTFCMjU5MDAyNkQ4OEYgLyogRW5j
b2RlZFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUM3MTA3RUMzNzYwMDQyN0E0
OCAvKiBFcnJvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJBQzU2NjFFOEEwQjc3MDAwMUVF
M0YgLyogQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQ3RjM5QzgxMDdFQzM3NjAwNDI3QTQ4IC8qIEVycm9yQ29uc3RydWN0b3IuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRkVCNThDMTQxODdCOEIxNjAwOThFRjBCIC8qIEVycm9ySGFuZGxpbmdTY29w
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDOTEwN0VDMzc2MDA0MjdBNDggLyogRXJy
b3JJbnN0YW5jZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrVXRpbHMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTE0LDcgKzExNCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+CiBWZWN0b3I8QmFz
aWNCbG9jayo+IGJsb2Nrc0luUHJlT3JkZXIoQmFzaWNCbG9jayogcm9vdCkKIHsKICAgICBWZWN0
b3I8QmFzaWNCbG9jayo+IHJlc3VsdDsKLSAgICBHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2Nr
KiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IHdvcmtsaXN0OworICAgIEdyYXBoTm9kZVdvcmtsaXN0
PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+IHdvcmtsaXN0OwogICAgIHdvcmts
aXN0LnB1c2gocm9vdCk7CiAgICAgd2hpbGUgKEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3Qu
cG9wKCkpIHsKICAgICAgICAgcmVzdWx0LmFwcGVuZChibG9jayk7CkBAIC0xMjgsNyArMTI4LDcg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KIFZlY3RvcjxCYXNpY0Jsb2NrKj4gYmxv
Y2tzSW5Qb3N0T3JkZXIoQmFzaWNCbG9jayogcm9vdCkKIHsKICAgICBWZWN0b3I8QmFzaWNCbG9j
ayo+IHJlc3VsdDsKLSAgICBQb3N0T3JkZXJHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwg
SW5kZXhTZXQ8QmFzaWNCbG9jaz4+IHdvcmtsaXN0OworICAgIFBvc3RPcmRlckdyYXBoTm9kZVdv
cmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+IHdvcmtsaXN0OwogICAg
IHdvcmtsaXN0LnB1c2gocm9vdCk7CiAgICAgd2hpbGUgKEdyYXBoTm9kZVdpdGhPcmRlcjxCYXNp
Y0Jsb2NrKj4gaXRlbSA9IHdvcmtsaXN0LnBvcCgpKSB7CiAgICAgICAgIHN3aXRjaCAoaXRlbS5v
cmRlcikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tXb3JrbGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrV29ya2xpc3Qu
aAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tX
b3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CiAKIGNsYXNzIEJhc2ljQmxvY2s7CiAKLXR5cGVkZWYgR3JhcGhOb2RlV29y
a2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2s+PiBCbG9ja1dvcmtsaXN0Owor
dHlwZWRlZiBHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9j
ayo+PiBCbG9ja1dvcmtsaXN0OwogCiAvLyBXaGVuIHlvdSBzYXkgQmxvY2tXaXRoPGludD4geW91
IHNob3VsZCByZWFkIGl0IGFzICJibG9jayB3aXRoIGFuIGludCIuCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB1c2luZyBCbG9ja1dpdGggPSBHcmFwaE5vZGVXaXRoPEJhc2ljQmxvY2sqLCBUPjsKQEAg
LTQ0LDEzICs0NCwxMyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBCbG9ja1dpdGggPSBH
CiAvLyBwZXJtaXRzIGZvcmNpYmx5IGVucXVldWVpbmcgdGhpbmdzIGV2ZW4gaWYgdGhlIGJsb2Nr
IGhhcyBhbHJlYWR5IGJlZW4gc2Vlbi4gSXQncyB1c2VmdWwgZm9yCiAvLyB0aGluZ3MgbGlrZSBi
dWlsZGluZyBhIHNwYW5uaW5nIHRyZWUsIGluIHdoaWNoIGNhc2UgVCAodGhlIGF1eGlsaWFyeSBw
YXlsb2FkKSB3b3VsZCBiZSB0aGUKIC8vIHN1Y2Nlc3NvciBpbmRleC4KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3JrbGlzdCA9IEV4dGVuZGVkR3JhcGhOb2RlV29y
a2xpc3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0PEJhc2ljQmxvY2s+PjsKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3JrbGlzdCA9IEV4dGVuZGVkR3JhcGhOb2Rl
V29ya2xpc3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0PEJhc2ljQmxvY2sqPj47CiAKIHR5cGVk
ZWYgR3JhcGhWaXNpdE9yZGVyIFZpc2l0T3JkZXI7CiAKIHR5cGVkZWYgR3JhcGhOb2RlV2l0aE9y
ZGVyPEJhc2ljQmxvY2sqPiBCbG9ja1dpdGhPcmRlcjsKIAotdHlwZWRlZiBQb3N0T3JkZXJHcmFw
aE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IFBvc3RPcmRl
ckJsb2NrV29ya2xpc3Q7Cit0eXBlZGVmIFBvc3RPcmRlckdyYXBoTm9kZVdvcmtsaXN0PEJhc2lj
QmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+IFBvc3RPcmRlckJsb2NrV29ya2xpc3Q7CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDRkcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDRkcu
aAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ0ZHLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzksOCArMzksOCBAQCBjbGFzcyBDRkcgewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIHR5cGVkZWYgQmFzaWNCbG9jayogTm9kZTsKLSAg
ICB0eXBlZGVmIEluZGV4U2V0PEJhc2ljQmxvY2s+IFNldDsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB1c2luZyBNYXAgPSBJbmRleE1hcDxCYXNpY0Jsb2NrLCBUPjsKKyAgICB0eXBlZGVmIElu
ZGV4U2V0PEJhc2ljQmxvY2sqPiBTZXQ7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcg
TWFwID0gSW5kZXhNYXA8QmFzaWNCbG9jayosIFQ+OwogICAgIHR5cGVkZWYgVmVjdG9yPEJhc2lj
QmxvY2sqLCA0PiBMaXN0OwogCiAgICAgQ0ZHKFByb2NlZHVyZSYgcHJvYykKQEAgLTUxLDcgKzUx
LDcgQEAgcHVibGljOgogICAgIE5vZGUgcm9vdCgpIHsgcmV0dXJuIG1fcHJvY1swXTsgfQogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBNYXA8VD4gbmV3TWFwKCkgeyByZXR1cm4gSW5k
ZXhNYXA8SlNDOjpCMzo6QmFzaWNCbG9jaywgVD4obV9wcm9jLnNpemUoKSk7IH0KKyAgICBNYXA8
VD4gbmV3TWFwKCkgeyByZXR1cm4gSW5kZXhNYXA8SlNDOjpCMzo6QmFzaWNCbG9jayosIFQ+KG1f
cHJvYy5zaXplKCkpOyB9CiAKICAgICBTdWNjZXNzb3JDb2xsZWN0aW9uPEJhc2ljQmxvY2ssIEJh
c2ljQmxvY2s6OlN1Y2Nlc3Nvckxpc3Q+IHN1Y2Nlc3NvcnMoTm9kZSBub2RlKSB7IHJldHVybiBu
b2RlLT5zdWNjZXNzb3JCbG9ja3MoKTsgfQogICAgIEJhc2ljQmxvY2s6OlByZWRlY2Vzc29yTGlz
dCYgcHJlZGVjZXNzb3JzKE5vZGUgbm9kZSkgeyByZXR1cm4gbm9kZS0+cHJlZGVjZXNzb3JzKCk7
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCShyZXZpc2lvbiAyMTQ0Mjcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uaAkod29ya2luZyBjb3B5KQpA
QCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShCM19KSVQpCiAKICNpbmNsdWRlICJKU0V4cG9y
dE1hY3Jvcy5oIgorI2luY2x1ZGUgIk9wdGlvbnMuaCIKICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CkBAIC0xNzAsNiArMTcxLDEzIEBA
IHN0YXRpYyBJbnRUeXBlIHJvdGF0ZUxlZnQoSW50VHlwZSB2YWx1ZSwKICAgICByZXR1cm4gKHVW
YWx1ZSA8PCBzaGlmdCkgfCAodVZhbHVlID4+ICgoYml0cyAtIHNoaWZ0KSAmIG1hc2spKTsKIH0K
IAoraW5saW5lIHVuc2lnbmVkIGRlZmF1bHRPcHRMZXZlbCgpCit7CisgICAgLy8gVGhpcyBzaG91
bGQgYWxtb3N0IGFsd2F5cyByZXR1cm4gMiwgYnV0IHdlIGFsbG93IHRoaXMgZGVmYXVsdCB0byBi
ZSBsb3dlcmVkIGZvciB0ZXN0aW5nLiBTb21lCisgICAgLy8gY29tcG9uZW50cyB3aWxsIGRlbGli
ZXJhdGVseSBzZXQgdGhlIG9wdExldmVsLgorICAgIHJldHVybiBPcHRpb25zOjpkZWZhdWx0QjNP
cHRMZXZlbCgpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKIAogI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsZS5oCShyZXZp
c2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShCM19KSVQpCiAKKyNp
bmNsdWRlICJCM0NvbW1vbi5oIgogI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKIAogbmFtZXNw
YWNlIEpTQyB7CkBAIC00NSw3ICs0Niw3IEBAIGNsYXNzIFByb2NlZHVyZTsKIC8vIFRoZW4geW91
IGtlZXAgdGhlIENvbXBpbGF0aW9uIG9iamVjdCBhbGl2ZSBmb3IgYXMgbG9uZyBhcyB5b3Ugd2Fu
dCB0byBiZSBhYmxlIHRvIHJ1biB0aGUgY29kZS4KIC8vIElmIHRoaXMgQVBJIGZlZWxzIHRvbyBo
aWdoLWxldmVsLCB5b3UgY2FuIHVzZSBCMzo6Z2VuZXJhdGUoKSBkaXJlY3RseS4KIAotSlNfRVhQ
T1JUX1BSSVZBVEUgQ29tcGlsYXRpb24gY29tcGlsZShWTSYsIFByb2NlZHVyZSYsIHVuc2lnbmVk
IG9wdExldmVsID0gMSk7CitKU19FWFBPUlRfUFJJVkFURSBDb21waWxhdGlvbiBjb21waWxlKFZN
JiwgUHJvY2VkdXJlJiwgdW5zaWduZWQgb3B0TGV2ZWwgPSBkZWZhdWx0T3B0TGV2ZWwoKSk7CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNEdXBsaWNhdGVUYWlscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzRHVwbGljYXRlVGFpbHMuY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNEdXBsaWNhdGVUYWlscy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY4LDcgKzY4LDcgQEAgcHVibGljOgogCiAgICAgICAgIG1fcHJvYy5yZXNldFZhbHVlT3duZXJz
KCk7CiAKLSAgICAgICAgSW5kZXhTZXQ8QmFzaWNCbG9jaz4gY2FuZGlkYXRlczsKKyAgICAgICAg
SW5kZXhTZXQ8QmFzaWNCbG9jayo+IGNhbmRpZGF0ZXM7CiAKICAgICAgICAgZm9yIChCYXNpY0Js
b2NrKiBibG9jayA6IG1fcHJvYykgewogICAgICAgICAgICAgaWYgKGJsb2NrLT5zaXplKCkgPiBt
X21heFNpemUpCkBAIC04Miw3ICs4Miw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogCiAgICAgICAg
IC8vIENvbGxlY3QgdGhlIHNldCBvZiB2YWx1ZXMgdGhhdCBtdXN0IGJlIGRlLVNTQSdkLgotICAg
ICAgICBJbmRleFNldDxWYWx1ZT4gdmFsdWVzVG9EZW1vdGU7CisgICAgICAgIEluZGV4U2V0PFZh
bHVlKj4gdmFsdWVzVG9EZW1vdGU7CiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBt
X3Byb2MpIHsKICAgICAgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogKmJsb2NrKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSA9PSBQaGkgJiYgY2FuZGlkYXRlcy5jb250
YWlucyhibG9jaykpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVD
b21tb25TdWJleHByZXNzaW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuY3BwCShyZXZpc2lvbiAyMTQ0
MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVDb21tb25TdWJleHBy
ZXNzaW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4Miw3ICs2ODIsNyBAQCBwcml2YXRlOgog
ICAgIERvbWluYXRvcnMmIG1fZG9taW5hdG9yczsKICAgICBQdXJlQ1NFIG1fcHVyZUNTRTsKICAg
ICAKLSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBJbXB1cmVCbG9ja0RhdGE+IG1faW1wdXJlQmxv
Y2tEYXRhOworICAgIEluZGV4TWFwPEJhc2ljQmxvY2sqLCBJbXB1cmVCbG9ja0RhdGE+IG1faW1w
dXJlQmxvY2tEYXRhOwogCiAgICAgSW1wdXJlQmxvY2tEYXRhIG1fZGF0YTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRml4U1NBLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNGaXhTU0EuY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGaXhTU0EuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3
ICs0OSw3IEBAIG5hbWVzcGFjZSB7CiBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIH0gLy8g
YW5vbnltb3VzIG5hbWVzcGFjZQogCi12b2lkIGRlbW90ZVZhbHVlcyhQcm9jZWR1cmUmIHByb2Ms
IGNvbnN0IEluZGV4U2V0PFZhbHVlPiYgdmFsdWVzKQordm9pZCBkZW1vdGVWYWx1ZXMoUHJvY2Vk
dXJlJiBwcm9jLCBjb25zdCBJbmRleFNldDxWYWx1ZSo+JiB2YWx1ZXMpCiB7CiAgICAgSGFzaE1h
cDxWYWx1ZSosIFZhcmlhYmxlKj4gbWFwOwogICAgIEhhc2hNYXA8VmFsdWUqLCBWYXJpYWJsZSo+
IHBoaU1hcDsKQEAgLTEyMSw3ICsxMjEsNyBAQCBib29sIGZpeFNTQShQcm9jZWR1cmUmIHByb2Mp
CiAgICAgLy8gSnVzdCBmb3Igc2FuaXR5LCByZW1vdmUgYW55IHVudXNlZCB2YXJpYWJsZXMgZmly
c3QuIEl0J3MgdW5saWtlbHkgdGhhdCB0aGlzIGNvZGUgaGFzIGFueQogICAgIC8vIGJ1Z3MgaGF2
aW5nIHRvIGRvIHdpdGggZGVhZCB2YXJpYWJsZXMsIGJ1dCBpdCB3b3VsZCBiZSBzaWxseSB0byBo
YXZlIHRvIGZpeCBzdWNoIGEgYnVnIGlmCiAgICAgLy8gaXQgZGlkIGFyaXNlLgotICAgIEluZGV4
U2V0PFZhcmlhYmxlPiBsaXZlVmFyaWFibGVzOworICAgIEluZGV4U2V0PFZhcmlhYmxlKj4gbGl2
ZVZhcmlhYmxlczsKICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IHByb2MudmFsdWVzKCkpIHsKICAg
ICAgICAgaWYgKFZhcmlhYmxlVmFsdWUqIHZhcmlhYmxlVmFsdWUgPSB2YWx1ZS0+YXM8VmFyaWFi
bGVWYWx1ZT4oKSkKICAgICAgICAgICAgIGxpdmVWYXJpYWJsZXMuYWRkKHZhcmlhYmxlVmFsdWUt
PnZhcmlhYmxlKCkpOwpAQCAtMTQ1LDcgKzE0NSw3IEBAIGJvb2wgZml4U1NBKFByb2NlZHVyZSYg
cHJvYykKIAogICAgIC8vIENyZWF0ZSBhIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlICgiY2FsY1Zh
ciIpIGZvciBldmVyeSB2YXJpYWJsZS4KICAgICBWZWN0b3I8VmFyaWFibGUqPiBjYWxjVmFyVG9W
YXJpYWJsZTsKLSAgICBJbmRleE1hcDxWYXJpYWJsZSwgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUq
PiB2YXJpYWJsZVRvQ2FsY1Zhcihwcm9jLnZhcmlhYmxlcygpLnNpemUoKSk7CisgICAgSW5kZXhN
YXA8VmFyaWFibGUqLCBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSo+IHZhcmlhYmxlVG9DYWxjVmFy
KHByb2MudmFyaWFibGVzKCkuc2l6ZSgpKTsKIAogICAgIGZvciAoVmFyaWFibGUqIHZhcmlhYmxl
IDogcHJvYy52YXJpYWJsZXMoKSkgewogICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSog
Y2FsY1ZhciA9IHNzYS5uZXdWYXJpYWJsZSgpOwpAQCAtMTg1LDcgKzE4NSw3IEBAIGJvb2wgZml4
U1NBKFByb2NlZHVyZSYgcHJvYykKIAogICAgIC8vIE5vdyBwZXJmb3JtIHRoZSBjb252ZXJzaW9u
LgogICAgIEluc2VydGlvblNldCBpbnNlcnRpb25TZXQocHJvYyk7Ci0gICAgSW5kZXhNYXA8VmFy
aWFibGUsIFZhbHVlKj4gbWFwcGluZyhwcm9jLnZhcmlhYmxlcygpLnNpemUoKSk7CisgICAgSW5k
ZXhNYXA8VmFyaWFibGUqLCBWYWx1ZSo+IG1hcHBpbmcocHJvYy52YXJpYWJsZXMoKS5zaXplKCkp
OwogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBwcm9jLmJsb2Nrc0luUHJlT3JkZXIoKSkg
ewogICAgICAgICBtYXBwaW5nLmNsZWFyKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0ZpeFNTQS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0ZpeFNTQS5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNGaXhTU0EuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNyw3ICszNyw3IEBAIGNsYXNzIFByb2NlZHVyZTsK
IAogLy8gVHVybnMgYWxsIG1lbnRpb25zIG9mIHRoZSBnaXZlbiB2YWx1ZXMgaW50byBhY2Nlc3Nl
cyB0byB2YXJpYWJsZXMuIFRoaXMgaXMgbWVhbnQgdG8gYmUgdXNlZAogLy8gZnJvbSBwaGFzZXMg
dGhhdCBkb24ndCBsaWtlIFNTQSBmb3Igd2hhdGV2ZXIgcmVhc29uLgotdm9pZCBkZW1vdGVWYWx1
ZXMoUHJvY2VkdXJlJiwgY29uc3QgSW5kZXhTZXQ8VmFsdWU+Jik7Cit2b2lkIGRlbW90ZVZhbHVl
cyhQcm9jZWR1cmUmLCBjb25zdCBJbmRleFNldDxWYWx1ZSo+Jik7CiAKIC8vIFRoaXMgZml4ZXMg
U1NBIGZvciB5b3UuIFVzZSB0aGlzIGFmdGVyIHlvdSBoYXZlIGRvbmUgZGVtb3RlVmFsdWVzKCkg
YW5kIHlvdSBoYXZlIHBlcmZvcm1lZAogLy8gd2hhdGV2ZXIgZXZpbCB0cmFuc2Zvcm1hdGlvbiB5
b3UgbmVlZGVkLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAko
cmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQgcHJlcGFyZUZvckdlbmVy
YXRpb24oUHJvY2VkdXJlJiBwcm8KICAgICBUaW1pbmdTY29wZSB0aW1pbmdTY29wZSgicHJlcGFy
ZUZvckdlbmVyYXRpb24iKTsKIAogICAgIGdlbmVyYXRlVG9BaXIocHJvY2VkdXJlLCBvcHRMZXZl
bCk7Ci0gICAgQWlyOjpwcmVwYXJlRm9yR2VuZXJhdGlvbihwcm9jZWR1cmUuY29kZSgpKTsKKyAg
ICBBaXI6OnByZXBhcmVGb3JHZW5lcmF0aW9uKHByb2NlZHVyZS5jb2RlKCksIG9wdExldmVsKTsK
IH0KIAogdm9pZCBnZW5lcmF0ZShQcm9jZWR1cmUmIHByb2NlZHVyZSwgQ0NhbGxIZWxwZXJzJiBq
aXQpCkBAIC04MCw3ICs4MCw3IEBAIHZvaWQgZ2VuZXJhdGVUb0FpcihQcm9jZWR1cmUmIHByb2Nl
ZHVyZSwKICAgICBpZiAoc2hvdWxkVmFsaWRhdGVJUigpKQogICAgICAgICB2YWxpZGF0ZShwcm9j
ZWR1cmUpOwogCi0gICAgaWYgKG9wdExldmVsID49IDEpIHsKKyAgICBpZiAob3B0TGV2ZWwgPj0g
MikgewogICAgICAgICByZWR1Y2VEb3VibGVUb0Zsb2F0KHByb2NlZHVyZSk7CiAgICAgICAgIHJl
ZHVjZVN0cmVuZ3RoKHByb2NlZHVyZSk7CiAgICAgICAgIGVsaW1pbmF0ZUNvbW1vblN1YmV4cHJl
c3Npb25zKHByb2NlZHVyZSk7CkBAIC05MSwxMiArOTEsMTUgQEAgdm9pZCBnZW5lcmF0ZVRvQWly
KFByb2NlZHVyZSYgcHJvY2VkdXJlLAogICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IEFkZCBt
b3JlIG9wdGltaXphdGlvbnMgaGVyZS4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1MDUwNworICAgIH0gZWxzZSBpZiAob3B0TGV2ZWwgPj0gMSkg
eworICAgICAgICAvLyBGSVhNRTogRXhwbG9yZSBiZXR0ZXIgInF1aWNrIG1vZGUiIG9wdGltaXph
dGlvbnMuCisgICAgICAgIHJlZHVjZVN0cmVuZ3RoKHByb2NlZHVyZSk7CiAgICAgfQogCiAgICAg
Ly8gVGhpcyBwdXRzIHRoZSBJUiBpbiBxdWlya3MgbW9kZS4KICAgICBsb3dlck1hY3Jvcyhwcm9j
ZWR1cmUpOwogCi0gICAgaWYgKG9wdExldmVsID49IDEpIHsKKyAgICBpZiAob3B0TGV2ZWwgPj0g
MikgewogICAgICAgICByZWR1Y2VTdHJlbmd0aChwcm9jZWR1cmUpOwogCiAgICAgICAgIC8vIEZJ
WE1FOiBBZGQgbW9yZSBvcHRpbWl6YXRpb25zIGhlcmUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNHZW5lcmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0dlbmVyYXRlLmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0dlbmVyYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDggQEAKIAog
I2lmIEVOQUJMRShCM19KSVQpCiAKKyNpbmNsdWRlICJCM0NvbW1vbi5oIgorCiBuYW1lc3BhY2Ug
SlNDIHsKIAogY2xhc3MgQ0NhbGxIZWxwZXJzOwpAQCAtMzgsNyArNDAsNyBAQCBuYW1lc3BhY2Ug
QWlyIHsgY2xhc3MgQ29kZTsgfQogCiAvLyBUaGlzIHRha2VzIGEgQjM6OlByb2NlZHVyZSwgb3B0
aW1pemVzIGl0IGluLXBsYWNlLCBsb3dlcnMgaXQgdG8gQWlyLCBhbmQgcHJlcGFyZXMgdGhlIEFp
ciBmb3IKIC8vIGdlbmVyYXRpb24uCi1KU19FWFBPUlRfUFJJVkFURSB2b2lkIHByZXBhcmVGb3JH
ZW5lcmF0aW9uKFByb2NlZHVyZSYsIHVuc2lnbmVkIG9wdExldmVsID0gMSk7CitKU19FWFBPUlRf
UFJJVkFURSB2b2lkIHByZXBhcmVGb3JHZW5lcmF0aW9uKFByb2NlZHVyZSYsIHVuc2lnbmVkIG9w
dExldmVsID0gZGVmYXVsdE9wdExldmVsKCkpOwogCiAvLyBUaGlzIHRha2VzIGEgQjM6OlByb2Nl
ZHVyZSB0aGF0IGhhcyBiZWVuIHByZXBhcmVkIGZvciBnZW5lcmF0aW9uIChpLmUuIGl0IGhhcyBi
ZWVuIGxvd2VyZWQgdG8gQWlyIGFuZAogLy8gdGhlIEFpciBoYXMgYmVlbiBwcmVwYXJlZCBmb3Ig
Z2VuZXJhdGlvbikgYW5kIGdlbmVyYXRlcyBpdC4gVGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvZiBj
YWxsaW5nCkBAIC00OCw3ICs1MCw3IEBAIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZ2VuZXJhdGUo
UHJvY2VkdXIKIC8vIFRoaXMgdGFrZXMgYSBCMzo6UHJvY2VkdXJlLCBvcHRpbWl6ZXMgaXQgaW4t
cGxhY2UsIGFuZCBsb3dlcnMgaXQgdG8gQWlyLiBZb3UgY2FuIHRoZW4gZ2VuZXJhdGUKIC8vIHRo
ZSBBaXIgdG8gbWFjaGluZSBjb2RlIHVzaW5nIEFpcjo6cHJlcGFyZUZvckdlbmVyYXRpb24oKSBh
bmQgQWlyOjpnZW5lcmF0ZSgpIG9uIHRoZSBQcm9jZWR1cmUncwogLy8gY29kZSgpLgotdm9pZCBn
ZW5lcmF0ZVRvQWlyKFByb2NlZHVyZSYsIHVuc2lnbmVkIG9wdExldmVsID0gMSk7Cit2b2lkIGdl
bmVyYXRlVG9BaXIoUHJvY2VkdXJlJiwgdW5zaWduZWQgb3B0TGV2ZWwgPSBkZWZhdWx0T3B0TGV2
ZWwoKSk7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNIZWFwUmFuZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw0OSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJCM0hlYXBSYW5nZS5oIgotCi0jaWYgRU5BQkxF
KEIzX0pJVCkKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7Ci0KLXZvaWQgSGVhcFJh
bmdlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAgaWYgKCp0aGlzID09IEhl
YXBSYW5nZSgpKSB7Ci0gICAgICAgIG91dC5wcmludCgiQm90dG9tIik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgaWYgKCp0aGlzID09IHRvcCgpKSB7Ci0gICAgICAgIG91dC5wcmludCgi
VG9wIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgb3V0LnByaW50KG1fYmVnaW4sICIu
Li4iLCBtX2VuZCk7Ci19Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwotCi0jZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJh
bmdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJhbmdl
LmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBS
YW5nZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw5MCArMjcsMTUgQEAKIAogI2lmIEVOQUJMRShC
M19KSVQpCiAKLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgotI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorI2luY2x1ZGUgPHd0Zi9SYW5nZS5oPgog
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAogLy8gQWxpYXMgYW5hbHlzaXMgaW4g
QjMgaXMgZG9uZSBieSBjaGVja2luZyBpZiB0d28gaW50ZWdlciByYW5nZXMgb3ZlcmxhcC4gVGhp
cyBpcyBwb3dlcmZ1bCBlbm91Z2gKIC8vIHRvIGJlIHVzZWQgZm9yIFRCQUEtc3R5bGUgYWxpYXMg
YW5hbHlzaXMgdXNlZCBieSB0aGUgREZHLCBGVEwsIGFuZCBMTFZNOiB5b3UganVzdCB0dXJuIGVh
Y2ggbm9kZQogLy8gaW4gdGhlIHRyZWUgb2YgYWJzdHJhY3QgaGVhcHMgaW50byBhIHByZS9wb3N0
IHJhbmdlLgotLy8KLS8vIE5vdGUgdGhhdCB0aGUgJ2JlZ2luJyBpcyBpbmNsdXNpdmUsIHdoaWxl
IHRoZSAnZW5kJyBpcyBleGNsdXNpdmUuIFRoZXNlIHR3byByYW5nZXMgYXJlIG5vbi0KLS8vIG92
ZXJsYXBwaW5nOgotLy8KLS8vICAgICByYW5nZUEgPSAwLi4uOAotLy8gICAgIHJhbmdlQiA9IDgu
Li4xNgotCi1jbGFzcyBIZWFwUmFuZ2UgewotcHVibGljOgotICAgIHR5cGVkZWYgdW5zaWduZWQg
VHlwZTsKLSAgICAKLSAgICBIZWFwUmFuZ2UoKQotICAgICAgICA6IG1fYmVnaW4oMCkKLSAgICAg
ICAgLCBtX2VuZCgwKQotICAgIHsKLSAgICB9Ci0KLSAgICBleHBsaWNpdCBIZWFwUmFuZ2UodW5z
aWduZWQgdmFsdWUpCi0gICAgICAgIDogbV9iZWdpbih2YWx1ZSkKLSAgICAgICAgLCBtX2VuZCh2
YWx1ZSArIDEpCi0gICAgewotICAgICAgICBBU1NFUlQobV9lbmQgPj0gbV9iZWdpbik7Ci0gICAg
fQotCi0gICAgSGVhcFJhbmdlKHVuc2lnbmVkIGJlZ2luLCB1bnNpZ25lZCBlbmQpCi0gICAgICAg
IDogbV9iZWdpbihiZWdpbikKLSAgICAgICAgLCBtX2VuZChlbmQpCi0gICAgewotICAgICAgICBB
U1NFUlQobV9lbmQgPj0gbV9iZWdpbik7Ci0gICAgICAgIGlmIChtX2JlZ2luID09IG1fZW5kKSB7
Ci0gICAgICAgICAgICAvLyBDYW5vbmljYWxpemUgZW1wdHkgcmFuZ2VzLgotICAgICAgICAgICAg
bV9iZWdpbiA9IDA7Ci0gICAgICAgICAgICBtX2VuZCA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBzdGF0aWMgSGVhcFJhbmdlIHRvcCgpCi0gICAgewotICAgICAgICByZXR1cm4gSGVhcFJh
bmdlKDAsIFVJTlRfTUFYKTsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSGVh
cFJhbmdlJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2JlZ2luID09IG90
aGVyLm1fYmVnaW4KLSAgICAgICAgICAgICYmIG1fZW5kID09IG90aGVyLm1fZW5kOwotICAgIH0K
LQotICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBIZWFwUmFuZ2UmIG90aGVyKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwotICAgIH0KLSAgICAKLSAgICBI
ZWFwUmFuZ2Ugb3BlcmF0b3J8KGNvbnN0IEhlYXBSYW5nZSYgb3RoZXIpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gSGVhcFJhbmdlKAotICAgICAgICAgICAgc3RkOjptaW4obV9iZWdpbiwg
b3RoZXIubV9iZWdpbiksCi0gICAgICAgICAgICBzdGQ6Om1heChtX2VuZCwgb3RoZXIubV9lbmQp
KTsKLSAgICB9Ci0gICAgCi0gICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0
dXJuIG1fYmVnaW4gIT0gbV9lbmQ7IH0KLQotICAgIHVuc2lnbmVkIGJlZ2luKCkgY29uc3QgeyBy
ZXR1cm4gbV9iZWdpbjsgfQotICAgIHVuc2lnbmVkIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5k
OyB9Ci0KLSAgICBib29sIG92ZXJsYXBzKGNvbnN0IEhlYXBSYW5nZSYgb3RoZXIpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gV1RGOjpyYW5nZXNPdmVybGFwKG1fYmVnaW4sIG1fZW5kLCBv
dGhlci5tX2JlZ2luLCBvdGhlci5tX2VuZCk7Ci0gICAgfQotCi0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIHVu
c2lnbmVkIG1fYmVnaW47Ci0gICAgdW5zaWduZWQgbV9lbmQ7Ci19OworCit0eXBlZGVmIFJhbmdl
PHVuc2lnbmVkPiBIZWFwUmFuZ2U7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2aXNpb24gMjE0
NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMzNzksMTAgKzMzNzksMTAgQEAgcHJpdmF0ZToKICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAgICAgCi0gICAgSW5kZXhTZXQ8VmFsdWU+
IG1fbG9ja2VkOyAvLyBUaGVzZSBhcmUgdmFsdWVzIHRoYXQgd2lsbCBoYXZlIG5vIFRtcCBpbiBB
aXIuCi0gICAgSW5kZXhNYXA8VmFsdWUsIFRtcD4gbV92YWx1ZVRvVG1wOyAvLyBUaGVzZSBhcmUg
dmFsdWVzIHRoYXQgbXVzdCBoYXZlIGEgVG1wIGluIEFpci4gV2Ugc2F5IHRoYXQgYSBWYWx1ZSog
d2l0aCBhIG5vbi1udWxsIFRtcCBpcyAicGlubmVkIi4KLSAgICBJbmRleE1hcDxWYWx1ZSwgVG1w
PiBtX3BoaVRvVG1wOyAvLyBFYWNoIFBoaSBnZXRzIGl0cyBvd24gVG1wLgotICAgIEluZGV4TWFw
PEIzOjpCYXNpY0Jsb2NrLCBBaXI6OkJhc2ljQmxvY2sqPiBtX2Jsb2NrVG9CbG9jazsKKyAgICBJ
bmRleFNldDxWYWx1ZSo+IG1fbG9ja2VkOyAvLyBUaGVzZSBhcmUgdmFsdWVzIHRoYXQgd2lsbCBo
YXZlIG5vIFRtcCBpbiBBaXIuCisgICAgSW5kZXhNYXA8VmFsdWUqLCBUbXA+IG1fdmFsdWVUb1Rt
cDsgLy8gVGhlc2UgYXJlIHZhbHVlcyB0aGF0IG11c3QgaGF2ZSBhIFRtcCBpbiBBaXIuIFdlIHNh
eSB0aGF0IGEgVmFsdWUqIHdpdGggYSBub24tbnVsbCBUbXAgaXMgInBpbm5lZCIuCisgICAgSW5k
ZXhNYXA8VmFsdWUqLCBUbXA+IG1fcGhpVG9UbXA7IC8vIEVhY2ggUGhpIGdldHMgaXRzIG93biBU
bXAuCisgICAgSW5kZXhNYXA8QjM6OkJhc2ljQmxvY2sqLCBBaXI6OkJhc2ljQmxvY2sqPiBtX2Js
b2NrVG9CbG9jazsKICAgICBIYXNoTWFwPEIzOjpTdGFja1Nsb3QqLCBBaXI6OlN0YWNrU2xvdCo+
IG1fc3RhY2tUb1N0YWNrOwogICAgIEhhc2hNYXA8VmFyaWFibGUqLCBUbXA+IG1fdmFyaWFibGVU
b1RtcDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTW92ZUNvbnN0YW50cy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTW92ZUNvbnN0YW50
cy5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01v
dmVDb25zdGFudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHByaXZhdGU6
CiAgICAgewogICAgICAgICBEb21pbmF0b3JzJiBkb21pbmF0b3JzID0gbV9wcm9jLmRvbWluYXRv
cnMoKTsKICAgICAgICAgSGFzaE1hcDxWYWx1ZUtleSwgVmFsdWUqPiB2YWx1ZUZvckNvbnN0YW50
OwotICAgICAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBWZWN0b3I8VmFsdWUqPj4gbWF0ZXJpYWxp
emF0aW9ucyhtX3Byb2Muc2l6ZSgpKTsKKyAgICAgICAgSW5kZXhNYXA8QmFzaWNCbG9jayosIFZl
Y3RvcjxWYWx1ZSo+PiBtYXRlcmlhbGl6YXRpb25zKG1fcHJvYy5zaXplKCkpOwogCiAgICAgICAg
IC8vIFdlIGRldGVybWluZSB3aGVyZSB0aGluZ3MgZ2V0IG1hdGVyaWFsaXplZCBiYXNlZCBvbiB3
aGVyZSB0aGV5IGFyZSB1c2VkLgogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9w
cm9jKSB7CkBAIC0yNzQsNyArMjc0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgZm9yIChhdXRvJiBl
bnRyeSA6IG1fY29uc3RUYWJsZSkKICAgICAgICAgICAgIG1fZGF0YVNlY3Rpb25bZW50cnkudmFs
dWVdID0gZW50cnkua2V5LnZhbHVlKCk7CiAKLSAgICAgICAgSW5kZXhTZXQ8VmFsdWU+IG9mZkxp
bWl0czsKKyAgICAgICAgSW5kZXhTZXQ8VmFsdWUqPiBvZmZMaW1pdHM7CiAgICAgICAgIGZvciAo
QmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2MpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
dmFsdWVJbmRleCA9IDA7IHZhbHVlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK3ZhbHVlSW5kZXgp
IHsKICAgICAgICAgICAgICAgICBTdGFja21hcFZhbHVlKiB2YWx1ZSA9IGJsb2NrLT5hdCh2YWx1
ZUluZGV4KS0+YXM8U3RhY2ttYXBWYWx1ZT4oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1BoaUNoaWxkcmVuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzUGhpQ2hpbGRyZW4uaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzUGhpQ2hpbGRyZW4uaAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDcgKzE2OCw3
IEBAIHB1YmxpYzoKICAgICBjb25zdCBWZWN0b3I8VmFsdWUqLCA4PiYgcGhpcygpIGNvbnN0IHsg
cmV0dXJuIG1fcGhpczsgfQogCiBwcml2YXRlOgotICAgIEluZGV4TWFwPFZhbHVlLCBWZWN0b3I8
VXBzaWxvblZhbHVlKj4+IG1fdXBzaWxvbnM7CisgICAgSW5kZXhNYXA8VmFsdWUqLCBWZWN0b3I8
VXBzaWxvblZhbHVlKj4+IG1fdXBzaWxvbnM7CiAgICAgVmVjdG9yPFZhbHVlKiwgOD4gbV9waGlz
OwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCShy
ZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBQcm9jZWR1cmU6Omlu
dmFsaWRhdGVDRkcoKQogCiB2b2lkIFByb2NlZHVyZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAogewotICAgIEluZGV4U2V0PFZhbHVlPiB2YWx1ZXNJbkJsb2NrczsKKyAgICBJbmRleFNl
dDxWYWx1ZSo+IHZhbHVlc0luQmxvY2tzOwogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiAq
dGhpcykgewogICAgICAgICBvdXQucHJpbnQoZGVlcER1bXAoKnRoaXMsIGJsb2NrKSk7CiAgICAg
ICAgIHZhbHVlc0luQmxvY2tzLmFkZEFsbCgqYmxvY2spOwpAQCAtMjQ1LDcgKzI0NSw3IEBAIHZv
aWQgUHJvY2VkdXJlOjpkZWxldGVWYWx1ZShWYWx1ZSogdmFsdWUKIAogdm9pZCBQcm9jZWR1cmU6
OmRlbGV0ZU9ycGhhbnMoKQogewotICAgIEluZGV4U2V0PFZhbHVlPiB2YWx1ZXNJbkJsb2NrczsK
KyAgICBJbmRleFNldDxWYWx1ZSo+IHZhbHVlc0luQmxvY2tzOwogICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiAqdGhpcykKICAgICAgICAgdmFsdWVzSW5CbG9ja3MuYWRkQWxsKCpibG9jayk7
CiAKQEAgLTMzMyw3ICszMzMsNyBAQCBWYWx1ZSogUHJvY2VkdXJlOjphZGRWYWx1ZUltcGwoVmFs
dWUqIHZhCiAKIHZvaWQgUHJvY2VkdXJlOjpzZXRCbG9ja09yZGVySW1wbChWZWN0b3I8QmFzaWNC
bG9jayo+JiBibG9ja3MpCiB7Ci0gICAgSW5kZXhTZXQ8QmFzaWNCbG9jaz4gYmxvY2tzU2V0Owor
ICAgIEluZGV4U2V0PEJhc2ljQmxvY2sqPiBibG9ja3NTZXQ7CiAgICAgYmxvY2tzU2V0LmFkZEFs
bChibG9ja3MpOwogCiAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6ICp0aGlzKSB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VEb3VibGVUb0Zsb2F0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VEb3VibGVUb0Zsb2F0
LmNwcAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVk
dWNlRG91YmxlVG9GbG9hdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyNCwxOCArNDI0LDE4IEBA
IHByaXZhdGU6CiAKICAgICAvLyBTZXQgb2YgYWxsIHRoZSBEb3VibGUgdmFsdWVzIHRoYXQgYXJl
IGFjdHVhbGx5IHVzZWQgYXMgRG91YmxlLgogICAgIC8vIENvbnZlcnRpbmcgYW55IG9mIHRoZW0g
dG8gRmxvYXQgd291bGQgbG9zZSBwcmVjaXNpb24uCi0gICAgSW5kZXhTZXQ8VmFsdWU+IG1fdmFs
dWVzVXNlZEFzRG91YmxlOworICAgIEluZGV4U2V0PFZhbHVlKj4gbV92YWx1ZXNVc2VkQXNEb3Vi
bGU7CiAKICAgICAvLyBTZXQgb2YgYWxsIHRoZSBQaGkgb2YgdHlwZSBEb3VibGUgdGhhdCByZWFs
bHkgY29udGFpbnMgYSBEb3VibGUuCiAgICAgLy8gQW55IERvdWJsZSBQaGkgbm90IGluIHRoZSBz
ZXQgY2FuIGJlIGNvbnZlcnRlZCB0byBGbG9hdCB3aXRob3V0IGxvc2luZyBwcmVjaXNpb24uCi0g
ICAgSW5kZXhTZXQ8VmFsdWU+IG1fcGhpc0NvbnRhaW5pbmdEb3VibGU7CisgICAgSW5kZXhTZXQ8
VmFsdWUqPiBtX3BoaXNDb250YWluaW5nRG91YmxlOwogCiAgICAgLy8gQW55IHZhbHVlIHRoYXQg
d2FzIGNvbnZlcnRlZCBmcm9tIHByb2R1Y2luZyBhIERvdWJsZSB0byBwcm9kdWNpbmcgYSBGbG9h
dC4KICAgICAvLyBUaGlzIHNldCBkb2VzIG5vdCBpbmNsdWRlIFBoaS1VcHNpbG9ucy4KLSAgICBJ
bmRleFNldDxWYWx1ZT4gbV9jb252ZXJ0ZWRWYWx1ZTsKKyAgICBJbmRleFNldDxWYWx1ZSo+IG1f
Y29udmVydGVkVmFsdWU7CiAKICAgICAvLyBBbnkgdmFsdWUgdGhhdCBwcmV2aW91c2x5IHByb2R1
Y2VkIERvdWJsZSBhbmQgbm93IHByb2R1Y2UgRmxvYXQuCi0gICAgSW5kZXhTZXQ8VmFsdWU+IG1f
Y29udmVydGVkUGhpczsKKyAgICBJbmRleFNldDxWYWx1ZSo+IG1fY29udmVydGVkUGhpczsKIH07
CiAKIHZvaWQgcHJpbnRHcmFwaElmQ29udmVydGluZyhQcm9jZWR1cmUmIHByb2NlZHVyZSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHJl
dmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVu
Z3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM5Miw3ICsyMzkyLDcgQEAgcHJpdmF0ZToKIAog
ICAgIHZvaWQga2lsbERlYWRDb2RlKCkKICAgICB7Ci0gICAgICAgIEdyYXBoTm9kZVdvcmtsaXN0
PFZhbHVlKiwgSW5kZXhTZXQ8VmFsdWU+PiB3b3JrbGlzdDsKKyAgICAgICAgR3JhcGhOb2RlV29y
a2xpc3Q8VmFsdWUqLCBJbmRleFNldDxWYWx1ZSo+PiB3b3JrbGlzdDsKICAgICAgICAgVmVjdG9y
PFVwc2lsb25WYWx1ZSosIDY0PiB1cHNpbG9uczsKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBi
bG9jayA6IG1fcHJvYykgewogICAgICAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiAqYmxvY2sp
IHsKQEAgLTI0MjksNyArMjQyOSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KIAotICAgICAgICBJbmRleFNldDxWYXJpYWJsZT4gbGl2ZVZhcmlhYmxlczsK
KyAgICAgICAgSW5kZXhTZXQ8VmFyaWFibGUqPiBsaXZlVmFyaWFibGVzOwogICAgICAgICAKICAg
ICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvYykgewogICAgICAgICAgICAgc2l6
ZV90IHNvdXJjZUluZGV4ID0gMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1NT
QUNhbGN1bGF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
U0FDYWxjdWxhdG9yLmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1NTQUNhbGN1bGF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTYsNyArMTU2LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgVmVjdG9yPERlZio+IG1fcGhpczsKICAgICB9OwogICAgIAotICAgIElu
ZGV4TWFwPEJhc2ljQmxvY2ssIEJsb2NrRGF0YT4gbV9kYXRhOworICAgIEluZGV4TWFwPEJhc2lj
QmxvY2sqLCBCbG9ja0RhdGE+IG1fZGF0YTsKIAogICAgIERvbWluYXRvcnMqIG1fZG9taW5hdG9y
cyB7IG51bGxwdHIgfTsKICAgICBQcm9jZWR1cmUmIG1fcHJvYzsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1VzZUNvdW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1VzZUNvdW50cy5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNVc2VDb3VudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ4LDcgKzQ4
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgdW5zaWduZWQgbnVtVXNpbmdJbnN0cnVjdGlvbnMgeyAw
IH07CiAgICAgfTsKICAgICAKLSAgICBJbmRleE1hcDxWYWx1ZSwgQ291bnRzPiBtX2NvdW50czsK
KyAgICBJbmRleE1hcDxWYWx1ZSosIENvdW50cz4gbV9jb3VudHM7CiB9OwogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCShyZXZp
c2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTIwLDcgKzEyMCw3IEBAIFN0YXRpY0xvY2sgY3Jhc2hMb2NrOwogCiBW
TSogdm07CiAKLXN0ZDo6dW5pcXVlX3B0cjxDb21waWxhdGlvbj4gY29tcGlsZShQcm9jZWR1cmUm
IHByb2NlZHVyZSwgdW5zaWduZWQgb3B0TGV2ZWwgPSAxKQorc3RkOjp1bmlxdWVfcHRyPENvbXBp
bGF0aW9uPiBjb21waWxlKFByb2NlZHVyZSYgcHJvY2VkdXJlLCB1bnNpZ25lZCBvcHRMZXZlbCA9
IGRlZmF1bHRPcHRMZXZlbCgpKQogewogICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPENvbXBp
bGF0aW9uPihCMzo6Y29tcGlsZSgqdm0sIHByb2NlZHVyZSwgb3B0TGV2ZWwpKTsKIH0KQEAgLTk5
MCw2ICs5OTAsNyBAQCB2b2lkIHRlc3RNdWxMb2FkVHdpY2UoKQogCiAgICAgdGVzdCgwKTsKICAg
ICB0ZXN0KDEpOworICAgIHRlc3QoMik7CiB9CiAKIHZvaWQgdGVzdE11bEFkZEFyZ3NMZWZ0KCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNC
eUdyYXBoQ29sb3JpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuY3BwCShyZXZpc2lvbiAy
MTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0
ZXJzQnlHcmFwaENvbG9yaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAog
I2lmIEVOQUJMRShCM19KSVQpCiAKICNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWly
Rml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCIKICNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIK
ICNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgiCkBA
IC0xNTg1LDYgKzE1ODYsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIG1fY29hbGVzY2luZ0NhbmRp
ZGF0ZXMuY2xlYXIoKTsKICAgICAgICAgbV93b3JrbGlzdE1vdmVzLmNsZWFyKCk7CiAKKyAgICAg
ICAgLy8gRklYTUU6IEl0IHNlZW1zIGxpa2Ugd2UgZG9uJ3QgbmVlZCB0byByZWNvbXB1dGUgbGl2
ZW5lc3MuIFdlIGp1c3QgbmVlZCB0byB1cGRhdGUgaXRzIGRhdGEKKyAgICAgICAgLy8gc3RydWN0
dXJlcyBzbyB0aGF0IGl0IGtub3dzIHRoYXQgdGhlIG5ld2x5IGludHJvZHVjZWQgdGVtcG9yYXJp
ZXMgYXJlIG5vdCBsaXZlIGF0IGFueSBiYXNpYworICAgICAgICAvLyBibG9jayBib3VuZGFyeS4g
VGhpcyBzaG91bGQgdHJpdmlhbGx5IGJlIHRydWUgZm9yIG5vdy4KICAgICAgICAgVG1wTGl2ZW5l
c3M8YmFuaz4gbGl2ZW5lc3MobV9jb2RlKTsKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9j
ayA6IG1fY29kZSkgewogICAgICAgICAgICAgdHlwZW5hbWUgVG1wTGl2ZW5lc3M8YmFuaz46Okxv
Y2FsQ2FsYyBsb2NhbENhbGMobGl2ZW5lc3MsIGJsb2NrKTsKQEAgLTE3OTgsNyArMTgwMiw3IEBA
IHB1YmxpYzoKICAgICAgICAgbV9udW1JdGVyYXRpb25zID0gMDsKICAgICAgICAgYWxsb2NhdGVP
bkJhbms8RlA+KCk7CiAKLSAgICAgICAgZml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMoKTsKKyAgICAg
ICAgZml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMobV9jb2RlKTsKIAogICAgICAgICBpZiAocmVwb3J0
U3RhdHMpCiAgICAgICAgICAgICBkYXRhTG9nKCJOdW0gaXRlcmF0aW9ucyA9ICIsIG1fbnVtSXRl
cmF0aW9ucywgIlxuIik7CkBAIC0xOTU0LDcgKzE5NTgsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcEZhc3QoWyZdIChUbXAm
IHRtcCkgewotICAgICAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkgfHwgdG1wLmlzR1Ao
KSA9PSAoYmFuayAhPSBHUCkpCisgICAgICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSB8
fCB0bXAuYmFuaygpICE9IGJhbmspCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAK
ICAgICAgICAgICAgICAgICAgICAgVG1wIGFsaWFzVG1wID0gYWxsb2NhdG9yLmdldEFsaWFzKHRt
cCk7CkBAIC0yMTUzLDYgKzIxNTcsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgfQogCisgICAgICAgICAgICAgICAgICAg
IHRtcCA9IG1fY29kZS5uZXdUbXAoYmFuayk7CisgICAgICAgICAgICAgICAgICAgIHVuc3BpbGxh
YmxlVG1wcy5hZGQoQWJzb2x1dGVUbXBNYXBwZXI8YmFuaz46OmFic29sdXRlSW5kZXgodG1wKSk7
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAocm9sZSA9PSBB
cmc6OlNjcmF0Y2gpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKICAgICAgICAg
ICAgICAgICAgICAgV2lkdGggc3BpbGxXaWR0aCA9IG1fdG1wV2lkdGgucmVxdWlyZWRXaWR0aCh0
bXApOwogICAgICAgICAgICAgICAgICAgICBPcGNvZGUgbW92ZSA9IE9vcHM7CiAgICAgICAgICAg
ICAgICAgICAgIHN3aXRjaCAoc3RhY2tTbG90TWluaW11bVdpZHRoKHNwaWxsV2lkdGgpKSB7CkBA
IC0yMTY3LDExICsyMTc3LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgdG1wID0g
bV9jb2RlLm5ld1RtcChiYW5rKTsKLSAgICAgICAgICAgICAgICAgICAgdW5zcGlsbGFibGVUbXBz
LmFkZChBYnNvbHV0ZVRtcE1hcHBlcjxiYW5rPjo6YWJzb2x1dGVJbmRleCh0bXApKTsKLQogICAg
ICAgICAgICAgICAgICAgICBBcmcgYXJnID0gQXJnOjpzdGFjayhzdGFja1Nsb3RFbnRyeS0+dmFs
dWUpOwotICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0FueVVzZShyb2xlKSAmJiByb2xl
ICE9IEFyZzo6U2NyYXRjaCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlVc2Uo
cm9sZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KGluc3RJ
bmRleCwgbW92ZSwgaW5zdC5vcmlnaW4sIGFyZywgdG1wKTsKICAgICAgICAgICAgICAgICAgICAg
aWYgKEFyZzo6aXNBbnlEZWYocm9sZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRp
b25TZXQuaW5zZXJ0KGluc3RJbmRleCArIDEsIG1vdmUsIGluc3Qub3JpZ2luLCB0bXAsIGFyZyk7
CkBAIC0yMTg3LDY2ICsyMTk0LDYgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KIAotICAg
IHZvaWQgZml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMoKQotICAgIHsKLSAgICAgICAgLy8gQmVjYXVz
ZSB0aGVyZSBtYXkgYmUgdGVybWluYWxzIHRoYXQgcHJvZHVjZSB2YWx1ZXMsIElSQyBtYXkKLSAg
ICAgICAgLy8gd2FudCB0byBzcGlsbCB0aG9zZSB0ZXJtaW5hbHMuIEl0J2xsIGhhcHBlbiB0byBz
cGlsbCBpdCBhZnRlcgotICAgICAgICAvLyB0aGUgdGVybWluYWwuIElmIHdlIGxlZnQgdGhlIGdy
YXBoIGluIHRoaXMgc3RhdGUsIGl0J2QgYmUgaW52YWxpZAotICAgICAgICAvLyBiZWNhdXNlIGEg
dGVybWluYWwgbXVzdCBiZSB0aGUgbGFzdCBpbnN0cnVjdGlvbiBpbiBhIGJsb2NrLgotICAgICAg
ICAvLyBXZSBmaXggdGhhdCBoZXJlLgotCi0gICAgICAgIEluc2VydGlvblNldCBpbnNlcnRpb25T
ZXQobV9jb2RlKTsKLQotICAgICAgICBib29sIGFkZGVkQmxvY2tzID0gZmFsc2U7Ci0KLSAgICAg
ICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fY29kZSkgewotICAgICAgICAgICAgdW5zaWdu
ZWQgdGVybWluYWxJbmRleCA9IGJsb2NrLT5zaXplKCk7Ci0gICAgICAgICAgICBib29sIGZvdW5k
VGVybWluYWwgPSBmYWxzZTsKLSAgICAgICAgICAgIHdoaWxlICh0ZXJtaW5hbEluZGV4LS0pIHsK
LSAgICAgICAgICAgICAgICBpZiAoYmxvY2stPmF0KHRlcm1pbmFsSW5kZXgpLmlzVGVybWluYWwo
KSkgewotICAgICAgICAgICAgICAgICAgICBmb3VuZFRlcm1pbmFsID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgQVNTRVJUX1VOVVNFRChmb3VuZFRlcm1pbmFsLCBmb3VuZFRlcm1pbmFsKTsKLQot
ICAgICAgICAgICAgaWYgKHRlcm1pbmFsSW5kZXggPT0gYmxvY2stPnNpemUoKSAtIDEpCi0gICAg
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIC8vIFRoZXJlIG11c3QgYmUgaW5z
dHJ1Y3Rpb25zIGFmdGVyIHRoZSB0ZXJtaW5hbCBiZWNhdXNlIGl0J3Mgbm90IHRoZSBsYXN0IGlu
c3RydWN0aW9uLgotICAgICAgICAgICAgQVNTRVJUKHRlcm1pbmFsSW5kZXggPCBibG9jay0+c2l6
ZSgpIC0gMSk7Ci0gICAgICAgICAgICBWZWN0b3I8SW5zdCwgMT4gaW5zdHNUb01vdmU7Ci0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB0ZXJtaW5hbEluZGV4ICsgMTsgaSA8IGJsb2NrLT5z
aXplKCk7IGkrKykKLSAgICAgICAgICAgICAgICBpbnN0c1RvTW92ZS5hcHBlbmQoYmxvY2stPmF0
KGkpKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluc3RzVG9Nb3ZlLnNpemUoKSk7Ci0K
LSAgICAgICAgICAgIGZvciAoRnJlcXVlbnRlZEJsb2NrJiBmcmVxdWVudGVkU3VjY2Vzc29yIDog
YmxvY2stPnN1Y2Nlc3NvcnMoKSkgewotICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHN1Y2Nl
c3NvciA9IGZyZXF1ZW50ZWRTdWNjZXNzb3IuYmxvY2soKTsKLSAgICAgICAgICAgICAgICAvLyBJ
ZiBzdWNjZXNzb3IncyBvbmx5IHByZWRlY2Vzc29yIGlzIGJsb2NrLCB3ZSBjYW4gcGxhbnQgdGhl
IHNwaWxsIGluc2lkZQotICAgICAgICAgICAgICAgIC8vIHRoZSBzdWNjZXNzb3IuIE90aGVyd2lz
ZSwgd2UgbXVzdCBzcGxpdCB0aGUgY3JpdGljYWwgZWRnZSBhbmQgY3JlYXRlCi0gICAgICAgICAg
ICAgICAgLy8gYSBuZXcgYmxvY2sgZm9yIHRoZSBzcGlsbC4KLSAgICAgICAgICAgICAgICBpZiAo
c3VjY2Vzc29yLT5udW1QcmVkZWNlc3NvcnMoKSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGluc2VydGlvblNldC5pbnNlcnRJbnN0cygwLCBpbnN0c1RvTW92ZSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKHN1Y2Nlc3Nvcik7Ci0gICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgYWRkZWRCbG9ja3MgPSB0cnVlOwotICAgICAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogV2UgcHJvYmFibHkgd2FudCBiZXR0ZXIgYmxvY2sgb3Jk
ZXJpbmcgaGVyZS4KLSAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogbmV3QmxvY2sgPSBt
X2NvZGUuYWRkQmxvY2soKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBJbnN0JiBp
bnN0IDogaW5zdHNUb01vdmUpCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXdCbG9jay0+YXBw
ZW5kSW5zdChpbnN0KTsKLSAgICAgICAgICAgICAgICAgICAgbmV3QmxvY2stPmFwcGVuZEluc3Qo
SW5zdChKdW1wLCBpbnN0c1RvTW92ZS5sYXN0KCkub3JpZ2luKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIG5ld0Jsb2NrLT5zdWNjZXNzb3JzKCkuYXBwZW5kKHN1Y2Nlc3Nvcik7Ci0gICAgICAgICAg
ICAgICAgICAgIGZyZXF1ZW50ZWRTdWNjZXNzb3IuYmxvY2soKSA9IG5ld0Jsb2NrOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYmxvY2stPnJlc2l6ZSh0
ZXJtaW5hbEluZGV4ICsgMSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYWRkZWRCbG9ja3Mp
Ci0gICAgICAgICAgICBtX2NvZGUucmVzZXRSZWFjaGFiaWxpdHkoKTsKLSAgICB9Ci0KICAgICBD
b2RlJiBtX2NvZGU7CiAgICAgVG1wV2lkdGggbV90bXBXaWR0aDsKICAgICBVc2VDb3VudHM8VG1w
PiYgbV91c2VDb3VudHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFs
bG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRl
UmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5o
IgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckFyZ0lubGluZXMuaCIKKyNp
bmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMu
aCIKKyNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5l
cy5oIgorI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgiCisjaW5jbHVkZSAiQWlyUGFkSW50ZXJmZXJl
bmNlLmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgorI2luY2x1ZGUgIkFpclJlZ0xpdmVu
ZXNzLmgiCisjaW5jbHVkZSAiQWlyVG1wSW5saW5lcy5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVt
cC5oPgorI2luY2x1ZGUgPHd0Zi9SYW5nZS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK25hbWVzcGFjZSB7CisKK2NvbnN0IGJvb2wgdmVyYm9z
ZSA9IGZhbHNlOworCit0eXBlZGVmIFJhbmdlPHNpemVfdD4gSW50ZXJ2YWw7CisKK3N0cnVjdCBU
bXBEYXRhIHsKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIG91dC5wcmludCgie2ludGVydmFsID0gIiwgaW50ZXJ2YWwsICIsIHNwaWxsZWQgPSAi
LCBwb2ludGVyRHVtcChzcGlsbGVkKSwgIiwgYXNzaWduZWQgPSAiLCBhc3NpZ25lZCwgIiwgYWRq
YWNlbnQgPSAiLCBhZGphY2VudCwgIn0iKTsKKyAgICB9CisgICAgCisgICAgdm9pZCB2YWxpZGF0
ZSgpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCghKHNwaWxsZWQgJiYgYXNzaWduZWQp
KTsKKyAgICB9CisgICAgCisgICAgSW50ZXJ2YWwgaW50ZXJ2YWw7CisgICAgU3RhY2tTbG90KiBz
cGlsbGVkOworICAgIFJlZyBhc3NpZ25lZDsKKyAgICBSZWdpc3RlclNldCBhZGphY2VudDsKK307
CisKK3N0cnVjdCBDbG9iYmVyIHsKKyAgICBDbG9iYmVyKCkKKyAgICB7CisgICAgfQorICAgIAor
ICAgIENsb2JiZXIoc2l6ZV90IGluZGV4LCBSZWdpc3RlclNldCByZWdzKQorICAgICAgICA6IGlu
ZGV4KGluZGV4KQorICAgICAgICAsIHJlZ3MocmVncykKKyAgICB7CisgICAgfQorICAgIAorICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgb3V0LnBy
aW50KGluZGV4LCAiOiIsIHJlZ3MpOworICAgIH0KKyAgICAKKyAgICBzaXplX3QgaW5kZXggeyAw
IH07CisgICAgUmVnaXN0ZXJTZXQgcmVnczsKK307CisKK2NsYXNzIFRtcE9yQ2xvYmJlciB7Citw
dWJsaWM6CisgICAgVG1wT3JDbG9iYmVyKCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFRtcE9y
Q2xvYmJlcihDbG9iYmVyKiBjbG9iYmVyKQorICAgICAgICA6IG1fdmFsdWUoYml0d2lzZV9jYXN0
PHVpbnRwdHJfdD4oY2xvYmJlcikpCisgICAgeworICAgIH0KKyAgICAKKyAgICBUbXBPckNsb2Ji
ZXIoVG1wIHRtcCkKKyAgICAgICAgOiBtX3ZhbHVlKChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KHRt
cC5pbnRlcm5hbFZhbHVlKCkpIDw8IDEpIHwgMSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBUbXBPckNsb2JiZXImIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fdmFsdWUgPT0gb3RoZXIubV92YWx1ZTsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IFRtcE9yQ2xvYmJlciYgb3RoZXIpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorICAgIAorICAgIGV4cGxp
Y2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzICE9
IFRtcE9yQ2xvYmJlcigpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzVG1wKCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZSAmIDE7IH0KKyAgICBib29sIGlzQ2xvYmJlcigpIGNvbnN0IHsgcmV0dXJu
IG1fdmFsdWUgJiYgIShtX3ZhbHVlICYgMSk7IH0KKyAgICAKKyAgICBUbXAgdG1wKCkgY29uc3QK
KyAgICB7CisgICAgICAgIEFTU0VSVChpc1RtcCgpKTsKKyAgICAgICAgcmV0dXJuIFRtcDo6dG1w
Rm9ySW50ZXJuYWxWYWx1ZShtX3ZhbHVlID4+IDEpOworICAgIH0KKyAgICBjb25zdCBDbG9iYmVy
JiBjbG9iYmVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0Nsb2JiZXIoKSk7Cisg
ICAgICAgIHJldHVybiAqYml0d2lzZV9jYXN0PENsb2JiZXIqPihtX3ZhbHVlKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAg
ICBpZiAoISp0aGlzKSB7CisgICAgICAgICAgICBvdXQucHJpbnQoIjxudWxsPiIpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChpc1RtcCgpKSB7CisgICAgICAg
ICAgICBvdXQucHJpbnQodG1wKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIG91dC5wcmludChjbG9iYmVyKCkpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAg
dWludHB0cl90IG1fdmFsdWUgeyAwIH07Cit9OworCit0ZW1wbGF0ZTxCYW5rIGJhbms+CitjbGFz
cyBMaW5lYXJTY2FuIHsKK3B1YmxpYzoKKyAgICBMaW5lYXJTY2FuKENvZGUmIGNvZGUpCisgICAg
ICAgIDogbV9jb2RlKGNvZGUpCisgICAgICAgICwgbV9zdGFydEluZGV4KGNvZGUuc2l6ZSgpKQor
ICAgICAgICAsIG1fbWFwKGNvZGUubnVtVG1wcyhiYW5rKSkKKyAgICAgICAgLCBtX2luc2VydGlv
blNldHMoY29kZS5zaXplKCksIGNvZGUpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIHJ1
bigpCisgICAgeworICAgICAgICBidWlsZFJlZ2lzdGVyU2V0KCk7CisgICAgICAgIGJ1aWxkSW5k
aWNlcygpOworICAgICAgICBidWlsZEludGVydmFscygpOworICAgICAgICBmb3IgKDs7KSB7Cisg
ICAgICAgICAgICBwcmVwYXJlSW50ZXJ2YWxzKCk7CisgICAgICAgICAgICBhdHRlbXB0U2Nhbigp
OworICAgICAgICAgICAgaWYgKCFtX2RpZFNwaWxsKQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgZW1pdFNwaWxsQ29kZSgpOworICAgICAgICB9CisgICAgICAgIGFzc2lnblJl
Z2lzdGVycygpOworICAgICAgICBpbnNlcnRTcGlsbENvZGUoKTsKKyAgICB9CisgICAgCitwcml2
YXRlOgorICAgIHZvaWQgYnVpbGRSZWdpc3RlclNldCgpCisgICAgeworICAgICAgICBtX3JlZ2lz
dGVycyA9IG1fY29kZS5yZWdzSW5Qcmlvcml0eU9yZGVyKGJhbmspOworICAgICAgICBtX3JlZ2lz
dGVyU2V0LnNldEFsbChtX3JlZ2lzdGVycyk7CisgICAgfQorCisgICAgdm9pZCBidWlsZEluZGlj
ZXMoKQorICAgIHsKKyAgICAgICAgc2l6ZV90IGluZGV4ID0gMDsKKyAgICAgICAgZm9yIChCYXNp
Y0Jsb2NrKiBibG9jayA6IG1fY29kZSkgeworICAgICAgICAgICAgbV9zdGFydEluZGV4W2Jsb2Nr
XSA9IGluZGV4OworICAgICAgICAgICAgaW5kZXggKz0gYmxvY2stPnNpemUoKSArIDE7CisgICAg
ICAgIH0KKyAgICB9CisgICAgCisgICAgc2l6ZV90IGluZGV4T2ZIZWFkKEJhc2ljQmxvY2sqIGJs
b2NrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc3RhcnRJbmRleFtibG9ja107CisgICAgfQor
ICAgIAorICAgIHNpemVfdCBpbmRleE9mVGFpbChCYXNpY0Jsb2NrKiBibG9jaykKKyAgICB7Cisg
ICAgICAgIHJldHVybiBpbmRleE9mSGVhZChibG9jaykgKyBibG9jay0+c2l6ZSgpOworICAgIH0K
KyAgICAKKyAgICBzaXplX3QgaW5kZXhPZihCYXNpY0Jsb2NrKiBibG9jaywgdW5zaWduZWQgaW5z
dEluZGV4LCBBcmc6OlBoYXNlIHBoYXNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGluZGV4T2ZI
ZWFkKGJsb2NrKSArIGluc3RJbmRleCArIHBoYXNlOworICAgIH0KKyAgICAKKyAgICBJbnRlcnZh
bCBpbnRlcnZhbChzaXplX3QgaW5kZXhPZkVhcmx5LCBBcmc6OlRpbWluZyB0aW1pbmcpCisgICAg
eworICAgICAgICBzd2l0Y2ggKHRpbWluZykgeworICAgICAgICBjYXNlIEFyZzo6T25seUVhcmx5
OgorICAgICAgICAgICAgcmV0dXJuIEludGVydmFsKGluZGV4T2ZFYXJseSk7CisgICAgICAgIGNh
c2UgQXJnOjpPbmx5TGF0ZToKKyAgICAgICAgICAgIHJldHVybiBJbnRlcnZhbChpbmRleE9mRWFy
bHkgKyAxKTsKKyAgICAgICAgY2FzZSBBcmc6OkVhcmx5QW5kTGF0ZToKKyAgICAgICAgICAgIHJl
dHVybiBJbnRlcnZhbChpbmRleE9mRWFybHksIGluZGV4T2ZFYXJseSArIDIpOworICAgICAgICB9
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gSW50ZXJ2YWwo
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBidWlsZEludGVydmFscygpCisgICAgeworICAgICAg
ICBUbXBMaXZlbmVzczxiYW5rPiBsaXZlbmVzcyhtX2NvZGUpOworICAgICAgICAKKyAgICAgICAg
Zm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fY29kZSkgeworICAgICAgICAgICAgc2l6ZV90IGlu
ZGV4T2ZIZWFkID0gdGhpcy0+aW5kZXhPZkhlYWQoYmxvY2spOworICAgICAgICAgICAgc2l6ZV90
IGluZGV4T2ZUYWlsID0gdGhpcy0+aW5kZXhPZlRhaWwoYmxvY2spOworICAgICAgICAgICAgZm9y
IChUbXAgdG1wIDogbGl2ZW5lc3MubGl2ZUF0SGVhZChibG9jaykpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoIXRtcC5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICBtX21hcFt0bXBdLmludGVy
dmFsIHw9IEludGVydmFsKGluZGV4T2ZIZWFkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGZvciAoVG1wIHRtcCA6IGxpdmVuZXNzLmxpdmVBdFRhaWwoYmxvY2spKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCF0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9tYXBbdG1wXS5p
bnRlcnZhbCB8PSBJbnRlcnZhbChpbmRleE9mVGFpbCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gMDsgaW5zdEluZGV4
IDwgYmxvY2stPnNpemUoKTsgKytpbnN0SW5kZXgpIHsKKyAgICAgICAgICAgICAgICBJbnN0JiBp
bnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7CisgICAgICAgICAgICAgICAgc2l6ZV90IGluZGV4
T2ZFYXJseSA9IGluZGV4T2ZIZWFkICsgaW5zdEluZGV4OworICAgICAgICAgICAgICAgIGluc3Qu
Zm9yRWFjaFRtcCgKKyAgICAgICAgICAgICAgICAgICAgWyZdIChUbXAmIHRtcCwgQXJnOjpSb2xl
IHJvbGUsIEJhbmsgdG1wQmFuaywgV2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAodG1wQmFuayAhPSBiYW5rKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fbWFwW3RtcF0u
aW50ZXJ2YWwgfD0gaW50ZXJ2YWwoaW5kZXhPZkVhcmx5LCBBcmc6OnRpbWluZyhyb2xlKSk7Cisg
ICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBSZWdM
aXZlbmVzczo6TG9jYWxDYWxjIGxvY2FsQ2FsYyhsaXZlbmVzcywgYmxvY2spOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBhdXRvIHJlY29yZCA9IFsmXSAodW5zaWduZWQgaW5zdEluZGV4KSB7
CisgICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgcmVncyA9IGxvY2FsQ2FsYy5saXZlKCk7Cisg
ICAgICAgICAgICAgICAgaWYgKEluc3QqIHByZXYgPSBibG9jay0+Z2V0KGluc3RJbmRleCAtIDEp
KSB7CisgICAgICAgICAgICAgICAgICAgIHByZXYtPmZvckVhY2g8UmVnPigKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFsmXSAoUmVnJiByZWcsIEFyZzo6Um9sZSByb2xlLCBCYW5rLCBXaWR0aCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzTGF0ZURlZihyb2xlKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVncy5hZGQocmVnKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICBpZiAocHJldi0+a2luZC5v
cGNvZGUgPT0gUGF0Y2gpCisgICAgICAgICAgICAgICAgICAgICAgICByZWdzLm1lcmdlKHByZXYt
PmV4dHJhQ2xvYmJlcmVkUmVncygpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgaWYgKEluc3QqIG5leHQgPSBibG9jay0+Z2V0KGluc3RJbmRleCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgbmV4dC0+Zm9yRWFjaDxSZWc+KAorICAgICAgICAgICAgICAgICAgICAgICAgWyZd
IChSZWcmIHJlZywgQXJnOjpSb2xlIHJvbGUsIEJhbmssIFdpZHRoKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNFYXJseURlZihyb2xlKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVncy5hZGQocmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgICAgICAgICBpZiAobmV4dC0+a2luZC5vcGNvZGUgPT0gUGF0Y2gp
CisgICAgICAgICAgICAgICAgICAgICAgICByZWdzLm1lcmdlKG5leHQtPmV4dHJhRWFybHlDbG9i
YmVyZWRSZWdzKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICByZWdzLmZpbHRlcihtX3JlZ2lzdGVyU2V0KTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBpZiAocmVncy5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX2Nsb2JiZXJzLmFw
cGVuZChDbG9iYmVyKGluZGV4T2ZIZWFkICsgaW5zdEluZGV4LCByZWdzKSk7CisgICAgICAgICAg
ICB9OworICAgICAgICAgICAgCisgICAgICAgICAgICByZWNvcmQoYmxvY2stPnNpemUoKSk7Cisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJ
bmRleC0tOykgeworICAgICAgICAgICAgICAgIGxvY2FsQ2FsYy5leGVjdXRlKGluc3RJbmRleCk7
CisgICAgICAgICAgICAgICAgcmVjb3JkKGluc3RJbmRleCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICBkYXRh
TG9nKCJJbnRlcnZhbHM6XG4iKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgdG1wSW5kZXgg
PSAwOyB0bXBJbmRleCA8IG1fY29kZS5udW1UbXBzKGJhbmspOyArK3RtcEluZGV4KSB7CisgICAg
ICAgICAgICAgICAgVG1wIHRtcCA9IFRtcDo6dG1wRm9ySW5kZXgoYmFuaywgdG1wSW5kZXgpOwor
ICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAiLCB0bXAsICI6ICIsIG1fbWFwW3RtcF0sICJc
biIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHNpemVfdCBz
b3J0aW5nSW5kZXhPZihjb25zdCBUbXBPckNsb2JiZXImIHRoaW5nKQorICAgIHsKKyAgICAgICAg
Ly8gV2Ugd2FudCBjbG9iYmVycyB0byBjb21lIGFmdGVyIHRtcHMuCisgICAgICAgIGlmICh0aGlu
Zy5pc1RtcCgpKQorICAgICAgICAgICAgcmV0dXJuIG1fbWFwW3RoaW5nLnRtcCgpXS5pbnRlcnZh
bC5iZWdpbigpIDw8IDE7CisgICAgICAgIHJldHVybiAodGhpbmcuY2xvYmJlcigpLmluZGV4IDw8
IDEpIHwgMTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IGluZGV4T2YoY29uc3QgVG1wT3JDbG9i
YmVyJiB0aGluZykKKyAgICB7CisgICAgICAgIC8vIFdlIHdhbnQgY2xvYmJlcnMgdG8gY29tZSBh
ZnRlciB0bXBzLgorICAgICAgICBpZiAodGhpbmcuaXNUbXAoKSkKKyAgICAgICAgICAgIHJldHVy
biBtX21hcFt0aGluZy50bXAoKV0uaW50ZXJ2YWwuYmVnaW4oKTsKKyAgICAgICAgcmV0dXJuIHRo
aW5nLmNsb2JiZXIoKS5pbmRleDsKKyAgICB9CisgICAgCisgICAgdm9pZCBwcmVwYXJlSW50ZXJ2
YWxzKCkKKyAgICB7CisgICAgICAgIG1faW50ZXJ2YWxzLnJlc2l6ZSgwKTsKKyAgICAgICAgCisg
ICAgICAgIGZvciAodW5zaWduZWQgdG1wSW5kZXggPSAwOyB0bXBJbmRleCA8IG1fY29kZS5udW1U
bXBzKGJhbmspOyArK3RtcEluZGV4KSB7CisgICAgICAgICAgICBUbXAgdG1wID0gVG1wOjp0bXBG
b3JJbmRleChiYW5rLCB0bXBJbmRleCk7CisgICAgICAgICAgICBpZiAobV9tYXBbdG1wXS5zcGls
bGVkKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBtX2ludGVydmFscy5hcHBlbmQodG1wKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
Zm9yIChDbG9iYmVyJiBjbG9iYmVyIDogbV9jbG9iYmVycykKKyAgICAgICAgICAgIG1faW50ZXJ2
YWxzLmFwcGVuZCgmY2xvYmJlcik7CisgICAgICAgIAorICAgICAgICBzdGQ6OnNvcnQoCisgICAg
ICAgICAgICBtX2ludGVydmFscy5iZWdpbigpLCBtX2ludGVydmFscy5lbmQoKSwKKyAgICAgICAg
ICAgIFsmXSAoVG1wT3JDbG9iYmVyJiBhLCBUbXBPckNsb2JiZXImIGIpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gc29ydGluZ0luZGV4T2YoYSkgPCBzb3J0aW5nSW5kZXhPZihiKTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBk
YXRhTG9nKCJJbnRlcnZhbHM6ICIsIGxpc3REdW1wKG1faW50ZXJ2YWxzKSwgIlxuIik7CisgICAg
fQorICAgIAorICAgIFRtcCBhZGRUbXBXaXRoSW50ZXJ2YWwoSW50ZXJ2YWwgaW50ZXJ2YWwpCisg
ICAgeworICAgICAgICBUbXBEYXRhIGRhdGE7CisgICAgICAgIGRhdGEuaW50ZXJ2YWwgPSBpbnRl
cnZhbDsKKyAgICAgICAgCisgICAgICAgIFRtcCB0bXAgPSBtX2NvZGUubmV3VG1wKGJhbmspOwor
ICAgICAgICBtX21hcC5hcHBlbmQodG1wLCBkYXRhKTsKKyAgICAgICAgcmV0dXJuIHRtcDsKKyAg
ICB9CisgICAgCisgICAgUmVnIGZpbmRGcmVlUmVnaXN0ZXIoVG1wIHRtcCkKKyAgICB7CisgICAg
ICAgIGlmIChtX2FjdGl2ZS5zaXplKCkgPT0gbV9yZWdpc3RlcnMuc2l6ZSgpKQorICAgICAgICAg
ICAgcmV0dXJuIFJlZygpOworICAgICAgICBUbXBEYXRhJiBkYXRhID0gbV9tYXBbdG1wXTsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoZGF0YS5hZGphY2VudC5zdWJzdW1lcyhtX2FjdGl2ZVJlZ3Mp
KTsKKyAgICAgICAgZm9yIChSZWcgcmVnIDogbV9yZWdpc3RlcnMpIHsKKyAgICAgICAgICAgIGlm
ICghZGF0YS5hZGphY2VudC5nZXQocmVnKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVnOwor
ICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybiBSZWcoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdHRlbXB0U2NhbigpCisgICAg
eworICAgICAgICAvLyBUaGlzIGlzIG1vZGVsZWQgYWZ0ZXIgTGluZWFyU2NhblJlZ2lzdGVyQWxs
b2NhdGlvbiBpbiBGaWcuIDEgaW4KKyAgICAgICAgLy8gaHR0cDovL2RsLmFjbS5vcmcvY2l0YXRp
b24uY2ZtP2lkPTMzMDI1MC4KKworICAgICAgICBtX2RpZFNwaWxsID0gZmFsc2U7CisgICAgICAg
IG1fYWN0aXZlLmNsZWFyKCk7CisgICAgICAgIG1fYWN0aXZlUmVncyA9IFJlZ2lzdGVyU2V0KCk7
CisgICAgICAgIGZvciAoVG1wT3JDbG9iYmVyJiB0aGluZyA6IG1faW50ZXJ2YWxzKSB7CisgICAg
ICAgICAgICBzaXplX3QgaW5kZXggPSBpbmRleE9mKHRoaW5nKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJJbmRleCAj
IiwgaW5kZXgsICI6ICIsIHRoaW5nLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIg
IEFjdGl2ZTpcbiIpOworICAgICAgICAgICAgICAgIGZvciAoVG1wIHRtcCA6IG1fYWN0aXZlKQor
ICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgIiwgdG1wLCAiOiAiLCBtX21hcFt0bXBd
LCAiXG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIC8v
IFRoaXMgaXMgRXhwaXJlT2xkSW50ZXJ2YWxzIGluIEZpZy4gMS4KKyAgICAgICAgICAgIHdoaWxl
ICghbV9hY3RpdmUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgVG1wIHRtcCA9IG1fYWN0
aXZlLmZpcnN0KCk7CisgICAgICAgICAgICAgICAgVG1wRGF0YSYgZW50cnkgPSBtX21hcFt0bXBd
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGJvb2wgZXhwaXJlZCA9IGVudHJ5
LmludGVydmFsLmVuZCgpIDw9IGluZGV4OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGlmICghZXhwaXJlZCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgbV9hY3RpdmUucmVtb3ZlRmlyc3QoKTsKKyAgICAgICAg
ICAgICAgICBtX2FjdGl2ZVJlZ3MucmVtb3ZlKGVudHJ5LmFzc2lnbmVkKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVGhpcyBwYXJ0IGlzIG5vdCBpbiB0aGUg
cGFwZXIgc2luY2Ugd2UgaGF2ZSBhIG1vcmUgcHJlY2lzZSBoYW5kbGluZyBvZiBjbG9iYmVycyBh
bmQKKyAgICAgICAgICAgIC8vIHByZWNvbG9yZWQgcmVnaXN0ZXJzLgorICAgICAgICAgICAgaWYg
KHRoaW5nLmlzQ2xvYmJlcigpKSB7CisgICAgICAgICAgICAgICAgQ2xvYmJlciBjbG9iYmVyID0g
dGhpbmcuY2xvYmJlcigpOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFjbG9iYmVy
LnJlZ3MuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgICAgICBmb3IgKFRtcCB0bXAgOiBtX2FjdGl2
ZSkKKyAgICAgICAgICAgICAgICAgICAgbV9tYXBbdG1wXS5hZGphY2VudC5tZXJnZShjbG9iYmVy
LnJlZ3MpOworICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHByb2JsZW1zID0gbV9hY3RpdmVS
ZWdzOworICAgICAgICAgICAgICAgIHByb2JsZW1zLmZpbHRlcihjbG9iYmVyLnJlZ3MpOworICAg
ICAgICAgICAgICAgIGlmICghcHJvYmxlbXMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIG1fYWN0aXZlUmVncy5tZXJnZShjbG9iYmVyLnJlZ3MpOworICAgICAgICAgICAgICAgICAg
ICBtX2FjdGl2ZS5yZW1vdmVBbGxNYXRjaGluZygKKyAgICAgICAgICAgICAgICAgICAgICAgIFsm
XSAoVG1wIHRtcCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG1wRGF0
YSYgZW50cnkgPSBtX21hcFt0bXBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGVudHJ5LmFzc2lnbmVkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIXByb2JsZW1zLmNvbnRhaW5zKGVudHJ5LmFzc2lnbmVkKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFJlZyBiZXR0ZXJSZWcgPSBmaW5kRnJlZVJlZ2lzdGVyKHRtcCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFiZXR0ZXJSZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3BpbGwodG1wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFzc2lnbldpdGhvdXRBZGRpbmdUb0FjdGl2ZSh0bXAsIGJldHRlclJlZyk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIG1fYWN0aXZlUmVncy5leGNsdWRlKGNs
b2JiZXIucmVncyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBUbXAgdG1wID0gdGhp
bmcudG1wKCk7CisgICAgICAgICAgICBUbXBEYXRhJiBlbnRyeSA9IG1fbWFwW3RtcF07CisgICAg
ICAgICAgICBlbnRyeS5hZGphY2VudCA9IG1fYWN0aXZlUmVnczsKKyAgICAgICAgICAgIFJlZyBy
ZWcgPSBmaW5kRnJlZVJlZ2lzdGVyKHRtcCk7CisgICAgICAgICAgICBpZiAocmVnKSB7CisgICAg
ICAgICAgICAgICAgYXNzaWduKHRtcCwgcmVnKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVGhpcyBpcyBTcGls
bEF0SW50ZXJ2YWwgaW4gRmlnLiAxLgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fYWN0
aXZlLmlzRW1wdHkoKSk7CisgICAgICAgICAgICBUbXAgc3BpbGxUbXAgPSBtX2FjdGl2ZS5sYXN0
KCk7CisgICAgICAgICAgICBUbXBEYXRhJiBzcGlsbEVudHJ5ID0gbV9tYXBbc3BpbGxUbXBdOwor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3BpbGxFbnRyeS5hc3NpZ25lZCk7CisgICAgICAg
ICAgICBpZiAoc3BpbGxFbnRyeS5pbnRlcnZhbC5lbmQoKSA8PSBlbnRyeS5pbnRlcnZhbC5lbmQo
KSkgeworICAgICAgICAgICAgICAgIHNwaWxsKHRtcCk7CisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fYWN0aXZlLnJl
bW92ZUxhc3QoKTsKKyAgICAgICAgICAgIGFzc2lnbih0bXAsIHNwaWxsRW50cnkuYXNzaWduZWQp
OworICAgICAgICAgICAgc3BpbGwoc3BpbGxUbXApOworICAgICAgICB9CisgICAgfQorICAgIAor
ICAgIHZvaWQgYXNzaWduV2l0aG91dEFkZGluZ1RvQWN0aXZlKFRtcCB0bXAsIFJlZyByZWcpCisg
ICAgeworICAgICAgICBUbXBEYXRhJiBlbnRyeSA9IG1fbWFwW3RtcF07CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKCFlbnRyeS5zcGlsbGVkKTsKKyAgICAgICAgZW50cnkuYXNzaWduZWQgPSByZWc7
CisgICAgICAgIGVudHJ5LmFkamFjZW50ID0gbV9hY3RpdmVSZWdzOworICAgICAgICBSRUxFQVNF
X0FTU0VSVChtX2FjdGl2ZVJlZ3MuYWRkKHJlZykpOworICAgICAgICBmb3IgKFRtcCBvdGhlclRt
cCA6IG1fYWN0aXZlKSB7CisgICAgICAgICAgICBpZiAob3RoZXJUbXAgIT0gdG1wKQorICAgICAg
ICAgICAgICAgIG1fbWFwW290aGVyVG1wXS5hZGphY2VudC5hZGQocmVnKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGFzc2lnbihUbXAgdG1wLCBSZWcgcmVnKQorICAgIHsKKyAg
ICAgICAgYXNzaWduV2l0aG91dEFkZGluZ1RvQWN0aXZlKHRtcCwgcmVnKTsKKyAgICAgICAgbV9h
Y3RpdmUuYXBwZW5kQW5kQnViYmxlKAorICAgICAgICAgICAgdG1wLAorICAgICAgICAgICAgWyZd
IChUbXAgb3RoZXJUbXApIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIHJldHVybiBtX21hcFtv
dGhlclRtcF0uaW50ZXJ2YWwuZW5kKCkgPiBtX21hcFt0bXBdLmludGVydmFsLmVuZCgpOworICAg
ICAgICAgICAgfSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3BpbGwoVG1wIHRtcCkKKyAgICB7
CisgICAgICAgIFRtcERhdGEmIGVudHJ5ID0gbV9tYXBbdG1wXTsKKyAgICAgICAgZW50cnkuc3Bp
bGxlZCA9IG1fY29kZS5hZGRTdGFja1Nsb3QoOCwgU3RhY2tTbG90S2luZDo6U3BpbGwpOworICAg
ICAgICBlbnRyeS5hc3NpZ25lZCA9IFJlZygpOworICAgICAgICBtX2RpZFNwaWxsID0gdHJ1ZTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBlbWl0U3BpbGxDb2RlKCkKKyAgICB7CisgICAgICAgIGZv
ciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsKKyAgICAgICAgICAgIHNpemVfdCBpbmRl
eE9mSGVhZCA9IHRoaXMtPmluZGV4T2ZIZWFkKGJsb2NrKTsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaW5zdEluZGV4ID0gMDsgaW5zdEluZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbnN0SW5k
ZXgpIHsKKyAgICAgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7
CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXhPZkVhcmx5ID0gaW5kZXhPZkhlYWQgKyBp
bnN0SW5kZXg7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gRmlyc3QgdHJ5
IHRvIHNwaWxsIGRpcmVjdGx5LgorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgQXJnJiBh
cmcgPSBpbnN0LmFyZ3NbaV07CisgICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlzVG1wKCkp
CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGFyZy5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChhcmcuYmFuaygpICE9IGJhbmspCisgICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzcGlsbGVk
ID0gbV9tYXBbYXJnLnRtcCgpXS5zcGlsbGVkOworICAgICAgICAgICAgICAgICAgICBpZiAoIXNw
aWxsZWQpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFpbnN0LmFkbWl0c1N0YWNrKGkpKQorICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgICAgIGFyZyA9IEFyZzo6c3RhY2soc3BpbGxlZCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8v
IEZhbGwgYmFjayBvbiB0aGUgaGFyZCB3YXkuCisgICAgICAgICAgICAgICAgaW5zdC5mb3JFYWNo
VG1wKAorICAgICAgICAgICAgICAgICAgICBbJl0gKFRtcCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwg
QmFuayB0bXBCYW5rLCBXaWR0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcC5p
c1JlZygpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh0bXBCYW5rICE9IGJhbmspCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzcGlsbGVk
ID0gbV9tYXBbdG1wXS5zcGlsbGVkOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzcGls
bGVkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIE9wY29kZSBtb3ZlID0gYmFuayA9PSBHUCA/IE1vdmUgOiBNb3ZlRG91YmxlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gYWRkVG1wV2l0aEludGVydmFsKGludGVydmFs
KGluZGV4T2ZFYXJseSwgQXJnOjp0aW1pbmcocm9sZSkpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChyb2xlID09IEFyZzo6U2NyYXRjaCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0FueVVzZShyb2xl
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldHNbYmxvY2tdLmlu
c2VydChpbnN0SW5kZXgsIG1vdmUsIGluc3Qub3JpZ2luLCBBcmc6OnN0YWNrKHNwaWxsZWQpLCB0
bXApOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlEZWYocm9sZSkpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXRzW2Jsb2NrXS5pbnNlcnQo
aW5zdEluZGV4ICsgMSwgbW92ZSwgaW5zdC5vcmlnaW4sIHRtcCwgQXJnOjpzdGFjayhzcGlsbGVk
KSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIHZvaWQgYXNzaWduUmVnaXN0ZXJzKCkKKyAgICB7CisgICAgICAgIGZv
ciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsKKyAgICAgICAgICAgIGZvciAoSW5zdCYg
aW5zdCA6ICpibG9jaykgeworICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcEZhc3QoCisg
ICAgICAgICAgICAgICAgICAgIFsmXSAoVG1wJiB0bXApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wLmJhbmsoKSAhPSBiYW5rKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgICAgICAgICAgUmVnIHJlZyA9IG1fbWFwW3RtcF0uYXNzaWduZWQ7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZWcpOworICAgICAgICAgICAg
ICAgICAgICAgICAgdG1wID0gVG1wKHJlZyk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgaW5zZXJ0U3BpbGxD
b2RlKCkKKyAgICB7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpCisg
ICAgICAgICAgICBtX2luc2VydGlvblNldHNbYmxvY2tdLmV4ZWN1dGUoYmxvY2spOworICAgIH0K
KyAgICAKKyAgICBDb2RlJiBtX2NvZGU7CisgICAgVmVjdG9yPFJlZz4gbV9yZWdpc3RlcnM7Cisg
ICAgUmVnaXN0ZXJTZXQgbV9yZWdpc3RlclNldDsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwg
c2l6ZV90PiBtX3N0YXJ0SW5kZXg7CisgICAgSW5kZXhNYXA8VG1wOjpJbmRleGVkPGJhbms+LCBU
bXBEYXRhPiBtX21hcDsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgSW5zZXJ0aW9uU2V0PiBt
X2luc2VydGlvblNldHM7CisgICAgVmVjdG9yPENsb2JiZXI+IG1fY2xvYmJlcnM7IC8vIEFmdGVy
IHdlIGFsbG9jYXRlIHRoaXMsIHdlIGhhcHBpbHkgcG9pbnQgcG9pbnRlcnMgaW50byBpdC4KKyAg
ICBWZWN0b3I8VG1wT3JDbG9iYmVyPiBtX2ludGVydmFsczsKKyAgICBEZXF1ZTxUbXA+IG1fYWN0
aXZlOworICAgIFJlZ2lzdGVyU2V0IG1fYWN0aXZlUmVnczsKKyAgICBib29sIG1fZGlkU3BpbGwg
eyBmYWxzZSB9OworfTsKKwordGVtcGxhdGU8QmFuayBiYW5rPgordm9pZCBydW5MaW5lYXJTY2Fu
KENvZGUmIGNvZGUpCit7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIkFpciBi
ZWZvcmUgbGluZWFyIHNjYW4gZm9yICIsIGJhbmssICI6XG4iLCBjb2RlKTsKKyAgICBMaW5lYXJT
Y2FuPGJhbms+IGxpbmVhclNjYW4oY29kZSk7CisgICAgbGluZWFyU2Nhbi5ydW4oKTsKK30KKwor
fSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgYWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVh
clNjYW4oQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgImFs
bG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuIik7CisgICAgcGFkSW50ZXJmZXJlbmNlKGNvZGUp
OworICAgIHJ1bkxpbmVhclNjYW48RlA+KGNvZGUpOworICAgIHJ1bkxpbmVhclNjYW48R1A+KGNv
ZGUpOworICAgIGZpeFNwaWxsc0FmdGVyVGVybWluYWxzKGNvZGUpOworfQorCit9IH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFy
U2Nhbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxs
b2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIkNQVS5oIgorI2luY2x1ZGUgIk9wdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCisvLyBUaGlz
IGltcGxlbWVudHMgdGhlIFBvbGV0dG8gYW5kIFNhcmtlciByZWdpc3RlciBhbGxvY2F0b3IgY2Fs
bGVkICJsaW5lYXIgc2NhbiI6CisvLyBodHRwOi8vZGwuYWNtLm9yZy9jaXRhdGlvbi5jZm0/aWQ9
MzMwMjUwCisvLworLy8gVGhpcyBpcyBub3QgQWlyJ3MgcHJpbWFyeSByZWdpc3RlciBhbGxvY2F0
b3IuIFdlIHVzZSBpdCBvbmx5IHdoZW4gcnVubmluZyBhdCBvcHRMZXZlbD0wLiBUaGF0J3Mgbm90
CisvLyB0aGUgZGVmYXVsdCBsZXZlbC4gVGhpcyByZWdpc3RlciBhbGxvY2F0b3IgaXMgb3B0aW1p
emVkIHByaW1hcmlseSBmb3IgcnVubmluZyBxdWlja2x5LiBJdCdzIGV4cGVjdGVkCisvLyB0aGF0
IGltcHJvdmVtZW50cyB0byB0aGlzIHJlZ2lzdGVyIGFsbG9jYXRvciBzaG91bGQgZm9jdXMgcHJp
bWFyaWx5IG9uIGltcHJvdmluZyBpdHMgZXhlY3V0aW9uIHRpbWUKKy8vIHdpdGhvdXQgbXVjaCBy
ZWdhcmQgZm9yIHRoZSBxdWFsaXR5IG9mIGdlbmVyYXRlZCBjb2RlLgorLy8KKy8vIEZvciBBaXIn
cyBwcmltYXJ5IHJlZ2lzdGVyIGFsbG9jYXRvciwgc2VlIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlH
cmFwaENvbG9yaW5nLmh8Y3BwLgordm9pZCBhbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2NhbihD
b2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9j
YXRlU3RhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyQWxsb2NhdGVTdGFjay5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2
MSw3ICsxNjEsNyBAQCB2b2lkIGFsbG9jYXRlU3RhY2soQ29kZSYgY29kZSkKIAogICAgIC8vIE5v
dyB3ZSBoYW5kbGUgdGhlIHNwaWxsIHNsb3RzLgogICAgIFN0YWNrU2xvdExpdmVuZXNzIGxpdmVu
ZXNzKGNvZGUpOwotICAgIEluZGV4TWFwPFN0YWNrU2xvdCwgSGFzaFNldDxTdGFja1Nsb3QqPj4g
aW50ZXJmZXJlbmNlKGNvZGUuc3RhY2tTbG90cygpLnNpemUoKSk7CisgICAgSW5kZXhNYXA8U3Rh
Y2tTbG90KiwgSGFzaFNldDxTdGFja1Nsb3QqPj4gaW50ZXJmZXJlbmNlKGNvZGUuc3RhY2tTbG90
cygpLnNpemUoKSk7CiAgICAgVmVjdG9yPFN0YWNrU2xvdCo+IHNsb3RzOwogCiAgICAgLy8gV2Ug
d2lsbCBwZXJmb3JtIHNvbWUgc3BpbGwgY29hbGVzY2luZy4gVG8gbWFrZSB0aGF0IGVmZmVjdGl2
ZSwgd2UgbmVlZCB0byBiZSBhYmxlIHRvIGlkZW50aWZ5CkBAIC0zMDksNyArMzA5LDcgQEAgdm9p
ZCBhbGxvY2F0ZVN0YWNrKENvZGUmIGNvZGUpCiAgICAgICAgICAgICByZXR1cm4gYS5mcmVxdWVu
Y3kgPiBiLmZyZXF1ZW5jeTsKICAgICAgICAgfSk7CiAgICAgCi0gICAgSW5kZXhNYXA8U3RhY2tT
bG90LCBTdGFja1Nsb3QqPiByZW1hcHBlZFN0YWNrU2xvdHMoY29kZS5zdGFja1Nsb3RzKCkuc2l6
ZSgpKTsKKyAgICBJbmRleE1hcDxTdGFja1Nsb3QqLCBTdGFja1Nsb3QqPiByZW1hcHBlZFN0YWNr
U2xvdHMoY29kZS5zdGFja1Nsb3RzKCkuc2l6ZSgpKTsKICAgICBhdXRvIHJlbWFwID0gWyZdIChT
dGFja1Nsb3QqIHNsb3QpIC0+IFN0YWNrU2xvdCogewogICAgICAgICBpZiAoIXNsb3QpCiAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQXJnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckFyZy5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQXJnLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgyLDYgKzI4MiwzNyBAQCB2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQXJnCiAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKIH0KIAordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQs
IEFyZzo6UGhhc2UgcGhhc2UpCit7CisgICAgc3dpdGNoIChwaGFzZSkgeworICAgIGNhc2UgQXJn
OjpFYXJseToKKyAgICAgICAgb3V0LnByaW50KCJFYXJseSIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBBcmc6OkxhdGU6CisgICAgICAgIG91dC5wcmludCgiTGF0ZSIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwor
dm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEFyZzo6VGltaW5nIHRpbWluZykK
K3sKKyAgICBzd2l0Y2ggKHRpbWluZykgeworICAgIGNhc2UgQXJnOjpPbmx5RWFybHk6CisgICAg
ICAgIG91dC5wcmludCgiT25seUVhcmx5Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFy
Zzo6T25seUxhdGU6CisgICAgICAgIG91dC5wcmludCgiT25seUxhdGUiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgQXJnOjpFYXJseUFuZExhdGU6CisgICAgICAgIG91dC5wcmludCgiRWFy
bHlBbmRMYXRlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworfQorCiB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91
dCwgQXJnOjpSb2xlIHJvbGUpCiB7CiAgICAgc3dpdGNoIChyb2xlKSB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHdvcmtpbmcgY29weSkKQEAgLTkyLDYgKzky
LDE3IEBAIHB1YmxpYzoKICAgICAgICAgQ29sZCwKICAgICAgICAgV2FybQogICAgIH07CisgICAg
CisgICAgZW51bSBQaGFzZSA6IGludDhfdCB7CisgICAgICAgIEVhcmx5LAorICAgICAgICBMYXRl
CisgICAgfTsKKyAgICAKKyAgICBlbnVtIFRpbWluZyA6IGludDhfdCB7CisgICAgICAgIE9ubHlF
YXJseSwKKyAgICAgICAgT25seUxhdGUsCisgICAgICAgIEVhcmx5QW5kTGF0ZQorICAgIH07CiAK
ICAgICBlbnVtIFJvbGUgOiBpbnQ4X3QgewogICAgICAgICAvLyBVc2UgbWVhbnMgdGhhdCB0aGUg
SW5zdCB3aWxsIHJlYWQgZnJvbSB0aGlzIHZhbHVlIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNl
LgpAQCAtMjUzLDcgKzI2NCw4MiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gaXND
b2xkVXNlKHJvbGUpID8gQ29sZCA6IFdhcm07CiAgICAgfQotCisgICAgCisgICAgc3RhdGljIGJv
b2wgYWN0aXZlQXQoUm9sZSByb2xlLCBQaGFzZSBwaGFzZSkKKyAgICB7CisgICAgICAgIHN3aXRj
aCAocm9sZSkgeworICAgICAgICBjYXNlIFVzZToKKyAgICAgICAgY2FzZSBDb2xkVXNlOgorICAg
ICAgICBjYXNlIEVhcmx5RGVmOgorICAgICAgICBjYXNlIEVhcmx5WkRlZjoKKyAgICAgICAgY2Fz
ZSBVc2VBZGRyOgorICAgICAgICAgICAgcmV0dXJuIHBoYXNlID09IEVhcmx5OworICAgICAgICBj
YXNlIExhdGVVc2U6CisgICAgICAgIGNhc2UgTGF0ZUNvbGRVc2U6CisgICAgICAgIGNhc2UgRGVm
OgorICAgICAgICBjYXNlIFpEZWY6CisgICAgICAgICAgICByZXR1cm4gcGhhc2UgPT0gTGF0ZTsK
KyAgICAgICAgY2FzZSBVc2VEZWY6CisgICAgICAgIGNhc2UgVXNlWkRlZjoKKyAgICAgICAgY2Fz
ZSBTY3JhdGNoOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBib29sIGFjdGl2
ZUF0KFRpbWluZyB0aW1pbmcsIFBoYXNlIHBoYXNlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0
aW1pbmcpIHsKKyAgICAgICAgY2FzZSBPbmx5RWFybHk6CisgICAgICAgICAgICByZXR1cm4gcGhh
c2UgPT0gRWFybHk7CisgICAgICAgIGNhc2UgT25seUxhdGU6CisgICAgICAgICAgICByZXR1cm4g
cGhhc2UgPT0gTGF0ZTsKKyAgICAgICAgY2FzZSBFYXJseUFuZExhdGU6CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICB9CisgICAgCisgICAgc3RhdGljIFRpbWluZyB0aW1pbmcoUm9sZSByb2xlKQorICAgIHsKKyAg
ICAgICAgc3dpdGNoIChyb2xlKSB7CisgICAgICAgIGNhc2UgVXNlOgorICAgICAgICBjYXNlIENv
bGRVc2U6CisgICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAgIGNhc2UgRWFybHlaRGVmOgor
ICAgICAgICBjYXNlIFVzZUFkZHI6CisgICAgICAgICAgICByZXR1cm4gT25seUVhcmx5OworICAg
ICAgICBjYXNlIExhdGVVc2U6CisgICAgICAgIGNhc2UgTGF0ZUNvbGRVc2U6CisgICAgICAgIGNh
c2UgRGVmOgorICAgICAgICBjYXNlIFpEZWY6CisgICAgICAgICAgICByZXR1cm4gT25seUxhdGU7
CisgICAgICAgIGNhc2UgVXNlRGVmOgorICAgICAgICBjYXNlIFVzZVpEZWY6CisgICAgICAgIGNh
c2UgU2NyYXRjaDoKKyAgICAgICAgICAgIHJldHVybiBFYXJseUFuZExhdGU7CisgICAgICAgIH0K
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmM+CisgICAgc3RhdGljIHZvaWQgZm9yRWFjaFBoYXNlKFRpbWluZyB0aW1p
bmcsIGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgeworICAgICAgICBpZiAoYWN0aXZlQXQodGltaW5n
LCBFYXJseSkpCisgICAgICAgICAgICBmdW5jKEVhcmx5KTsKKyAgICAgICAgaWYgKGFjdGl2ZUF0
KHRpbWluZywgTGF0ZSkpCisgICAgICAgICAgICBmdW5jKExhdGUpOworICAgIH0KKyAgICAKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIHN0YXRpYyB2b2lkIGZvckVhY2hQaGFzZShS
b2xlIHJvbGUsIGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgeworICAgICAgICBpZiAoYWN0aXZlQXQo
cm9sZSwgRWFybHkpKQorICAgICAgICAgICAgZnVuYyhFYXJseSk7CisgICAgICAgIGlmIChhY3Rp
dmVBdChyb2xlLCBMYXRlKSkKKyAgICAgICAgICAgIGZ1bmMoTGF0ZSk7CisgICAgfQorICAgIAog
ICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgUm9sZSBpbXBsaWVzIHRoYXQgdGhlIEluc3Qgd2ls
bCBVc2UgdGhlIEFyZyBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZS4KICAgICBzdGF0aWMgYm9v
bCBpc0Vhcmx5VXNlKFJvbGUgcm9sZSkKICAgICB7CkBAIC0xMzU0LDYgKzE0NDAsOCBAQCBuYW1l
c3BhY2UgV1RGIHsKIAogSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmludEludGVybmFsKFByaW50
U3RyZWFtJiwgSlNDOjpCMzo6QWlyOjpBcmc6OktpbmQpOwogSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6QWlyOjpBcmc6OlRlbXBlcmF0
dXJlKTsKK0pTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYs
IEpTQzo6QjM6OkFpcjo6QXJnOjpQaGFzZSk7CitKU19FWFBPUlRfUFJJVkFURSB2b2lkIHByaW50
SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpBaXI6OkFyZzo6VGltaW5nKTsKIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OkFp
cjo6QXJnOjpSb2xlKTsKIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJpbnRJbnRlcm5hbChQcmlu
dFN0cmVhbSYsIEpTQzo6QjM6OkFpcjo6QXJnOjpTaWduZWRuZXNzKTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja1dvcmtsaXN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja1dvcmtsaXN0LmgJKHJldmlzaW9u
IDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmxvY2tXb3JrbGlz
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewogCi10eXBlZGVmIEdyYXBoTm9kZVdvcmtsaXN0PEJh
c2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrPj4gQmxvY2tXb3JrbGlzdDsKK3R5cGVkZWYg
R3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2sqPj4gQmxv
Y2tXb3JrbGlzdDsKIAogLy8gV2hlbiB5b3Ugc2F5IEJsb2NrV2l0aDxpbnQ+IHlvdSBzaG91bGQg
cmVhZCBpdCBhcyAiYmxvY2sgd2l0aCBhbiBpbnQiLgogdGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNp
bmcgQmxvY2tXaXRoID0gR3JhcGhOb2RlV2l0aDxCYXNpY0Jsb2NrKiwgVD47CkBAIC00MSwxMSAr
NDEsMTEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcgQmxvY2tXaXRoID0gRwogLy8gcGVy
bWl0cyBmb3JjaWJseSBlbnF1ZXVlaW5nIHRoaW5ncyBldmVuIGlmIHRoZSBibG9jayBoYXMgYWxy
ZWFkeSBiZWVuIHNlZW4uIEl0J3MgdXNlZnVsIGZvcgogLy8gdGhpbmdzIGxpa2UgYnVpbGRpbmcg
YSBzcGFubmluZyB0cmVlLCBpbiB3aGljaCBjYXNlIFQgKHRoZSBhdXhpbGlhcnkgcGF5bG9hZCkg
d291bGQgYmUgdGhlCiAvLyBzdWNjZXNzb3IgaW5kZXguCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1
c2luZyBFeHRlbmRlZEJsb2NrV29ya2xpc3QgPSBFeHRlbmRlZEdyYXBoTm9kZVdvcmtsaXN0PEJh
c2ljQmxvY2sqLCBULCBJbmRleFNldDxCYXNpY0Jsb2NrPj47Cit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiB1c2luZyBFeHRlbmRlZEJsb2NrV29ya2xpc3QgPSBFeHRlbmRlZEdyYXBoTm9kZVdvcmtsaXN0
PEJhc2ljQmxvY2sqLCBULCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+OwogCiB0eXBlZGVmIEdyYXBo
Tm9kZVdpdGhPcmRlcjxCYXNpY0Jsb2NrKj4gQmxvY2tXaXRoT3JkZXI7CiAKLXR5cGVkZWYgUG9z
dE9yZGVyR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2s+
PiBQb3N0T3JkZXJCbG9ja1dvcmtsaXN0OwordHlwZWRlZiBQb3N0T3JkZXJHcmFwaE5vZGVXb3Jr
bGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jayo+PiBQb3N0T3JkZXJCbG9ja1dv
cmtsaXN0OwogCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0ZHLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDRkcuaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDRkcuaAkod29ya2luZyBjb3B5KQpAQCAtMzksOCAr
MzksOCBAQCBjbGFzcyBDRkcgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGlj
OgogICAgIHR5cGVkZWYgQmFzaWNCbG9jayogTm9kZTsKLSAgICB0eXBlZGVmIEluZGV4U2V0PEJh
c2ljQmxvY2s+IFNldDsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBNYXAgPSBJbmRl
eE1hcDxCYXNpY0Jsb2NrLCBUPjsKKyAgICB0eXBlZGVmIEluZGV4U2V0PEJhc2ljQmxvY2sqPiBT
ZXQ7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcgTWFwID0gSW5kZXhNYXA8QmFzaWNC
bG9jayosIFQ+OwogICAgIHR5cGVkZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCA0PiBMaXN0OwogCiAg
ICAgQ0ZHKENvZGUmIGNvZGUpCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICBOb2RlIHJv
b3QoKSB7IHJldHVybiBtX2NvZGVbMF07IH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0g
ICAgTWFwPFQ+IG5ld01hcCgpIHsgcmV0dXJuIEluZGV4TWFwPEpTQzo6QjM6OkFpcjo6QmFzaWNC
bG9jaywgVD4obV9jb2RlLnNpemUoKSk7IH0KKyAgICBNYXA8VD4gbmV3TWFwKCkgeyByZXR1cm4g
SW5kZXhNYXA8SlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrKiwgVD4obV9jb2RlLnNpemUoKSk7IH0K
IAogICAgIFN1Y2Nlc3NvckNvbGxlY3Rpb248QmFzaWNCbG9jaywgQmFzaWNCbG9jazo6U3VjY2Vz
c29yTGlzdD4gc3VjY2Vzc29ycyhOb2RlIG5vZGUpIHsgcmV0dXJuIG5vZGUtPnN1Y2Nlc3NvckJs
b2NrcygpOyB9CiAgICAgQmFzaWNCbG9jazo6UHJlZGVjZXNzb3JMaXN0JiBwcmVkZWNlc3NvcnMo
Tm9kZSBub2RlKSB7IHJldHVybiBub2RlLT5wcmVkZWNlc3NvcnMoKTsgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbGltaW5hdGVEZWFkQ29kZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbGltaW5hdGVEZWFkQ29kZS5j
cHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
RWxpbWluYXRlRGVhZENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIGJv
b2wgZWxpbWluYXRlRGVhZENvZGUoQ29kZSYgY29kZSkKICAgICBQaGFzZVNjb3BlIHBoYXNlU2Nv
cGUoY29kZSwgImVsaW1pbmF0ZURlYWRDb2RlIik7CiAKICAgICBIYXNoU2V0PFRtcD4gbGl2ZVRt
cHM7Ci0gICAgSW5kZXhTZXQ8U3RhY2tTbG90PiBsaXZlU3RhY2tTbG90czsKKyAgICBJbmRleFNl
dDxTdGFja1Nsb3QqPiBsaXZlU3RhY2tTbG90czsKICAgICBib29sIGNoYW5nZWQ7CiAKICAgICBh
dXRvIGlzQXJnTGl2ZSA9IFsmXSAoY29uc3QgQXJnJiBhcmcpIC0+IGJvb2wgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhPYnZpb3VzU3BpbGxzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeE9idmlvdXNTcGlsbHMu
Y3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckZpeE9idmlvdXNTcGlsbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NDcsNyArNTQ3LDcgQEAg
cHJpdmF0ZToKICAgICB9OwogCiAgICAgQ29kZSYgbV9jb2RlOwotICAgIEluZGV4TWFwPEJhc2lj
QmxvY2ssIFN0YXRlPiBtX2F0SGVhZDsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgU3RhdGU+
IG1fYXRIZWFkOwogICAgIFN0YXRlIG1fc3RhdGU7CiAgICAgQmFzaWNCbG9jayogbV9ibG9jayB7
IG51bGxwdHIgfTsKICAgICB1bnNpZ25lZCBtX2luc3RJbmRleCB7IDAgfTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeFBhcnRpYWxS
ZWdpc3RlclN0YWxscy5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTU1LDEwICsxNTUsMTAgQEAgdm9pZCBmaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMoQ29k
ZSYgY29kZQogCiAgICAgLy8gRm9yIGVhY2ggYmxvY2ssIHRoaXMgcHJvdmlkZXMgdGhlIGRpc3Rh
bmNlIHRvIHRoZSBsYXN0IGluc3RydWN0aW9uIHNldHRpbmcgZWFjaCByZWdpc3RlcgogICAgIC8v
IG9uIGJsb2NrICplbnRyeSouCi0gICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgRlBEZWZEaXN0YW5j
ZT4gbGFzdERlZkRpc3RhbmNlKGNvZGUuc2l6ZSgpKTsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2Nr
KiwgRlBEZWZEaXN0YW5jZT4gbGFzdERlZkRpc3RhbmNlKGNvZGUuc2l6ZSgpKTsKIAogICAgIC8v
IEJsb2NrcyB3aXRoIGRpcnR5IGRpc3RhbmNlIGF0IGhlYWQuCi0gICAgSW5kZXhTZXQ8QmFzaWNC
bG9jaz4gZGlydHk7CisgICAgSW5kZXhTZXQ8QmFzaWNCbG9jayo+IGRpcnR5OwogCiAgICAgLy8g
Rmlyc3QsIHdlIGNvbXB1dGUgdGhlIGxvY2FsIGRpc3RhbmNlIGZvciBlYWNoIGJsb2NrIGFuZCBw
dXNoIGl0IHRvIHRoZSBzdWNjZXNzb3JzLgogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBj
b2RlKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeFNwaWxsc0Fm
dGVyVGVybWluYWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckZp
eFNwaWxsc0FmdGVyVGVybWluYWxzLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVk
ZSAiQWlyQmxvY2tJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVk
ZSAiQWlySW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKKyNpbmNs
dWRlICJBaXJUbXBJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBu
YW1lc3BhY2UgQWlyIHsKKwordm9pZCBmaXhTcGlsbHNBZnRlclRlcm1pbmFscyhDb2RlJiBjb2Rl
KQoreworICAgIC8vIEJlY2F1c2UgdGhlcmUgbWF5IGJlIHRlcm1pbmFscyB0aGF0IHByb2R1Y2Ug
dmFsdWVzLCBJUkMgbWF5CisgICAgLy8gd2FudCB0byBzcGlsbCB0aG9zZSB0ZXJtaW5hbHMuIEl0
J2xsIGhhcHBlbiB0byBzcGlsbCBpdCBhZnRlcgorICAgIC8vIHRoZSB0ZXJtaW5hbC4gSWYgd2Ug
bGVmdCB0aGUgZ3JhcGggaW4gdGhpcyBzdGF0ZSwgaXQnZCBiZSBpbnZhbGlkCisgICAgLy8gYmVj
YXVzZSBhIHRlcm1pbmFsIG11c3QgYmUgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24gaW4gYSBibG9jay4K
KyAgICAvLyBXZSBmaXggdGhhdCBoZXJlLgorCisgICAgQmxvY2tJbnNlcnRpb25TZXQgYmxvY2tJ
bnNlcnRpb25TZXQoY29kZSk7CisgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChjb2RlKTsK
KworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIHVuc2lnbmVk
IHRlcm1pbmFsSW5kZXggPSBibG9jay0+c2l6ZSgpOworICAgICAgICBib29sIGZvdW5kVGVybWlu
YWwgPSBmYWxzZTsKKyAgICAgICAgd2hpbGUgKHRlcm1pbmFsSW5kZXgtLSkgeworICAgICAgICAg
ICAgaWYgKGJsb2NrLT5hdCh0ZXJtaW5hbEluZGV4KS5pc1Rlcm1pbmFsKCkpIHsKKyAgICAgICAg
ICAgICAgICBmb3VuZFRlcm1pbmFsID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfVU5VU0VEKGZvdW5kVGVybWlu
YWwsIGZvdW5kVGVybWluYWwpOworCisgICAgICAgIGlmICh0ZXJtaW5hbEluZGV4ID09IGJsb2Nr
LT5zaXplKCkgLSAxKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8gVGhlcmUg
bXVzdCBiZSBpbnN0cnVjdGlvbnMgYWZ0ZXIgdGhlIHRlcm1pbmFsIGJlY2F1c2UgaXQncyBub3Qg
dGhlIGxhc3QgaW5zdHJ1Y3Rpb24uCisgICAgICAgIEFTU0VSVCh0ZXJtaW5hbEluZGV4IDwgYmxv
Y2stPnNpemUoKSAtIDEpOworICAgICAgICBWZWN0b3I8SW5zdCwgMT4gaW5zdHNUb01vdmU7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IHRlcm1pbmFsSW5kZXggKyAxOyBpIDwgYmxvY2stPnNp
emUoKTsgaSsrKQorICAgICAgICAgICAgaW5zdHNUb01vdmUuYXBwZW5kKGJsb2NrLT5hdChpKSk7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluc3RzVG9Nb3ZlLnNpemUoKSk7CisKKyAgICAgICAg
Zm9yIChGcmVxdWVudGVkQmxvY2smIGZyZXF1ZW50ZWRTdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vz
c29ycygpKSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBmcmVxdWVudGVk
U3VjY2Vzc29yLmJsb2NrKCk7CisgICAgICAgICAgICAvLyBJZiBzdWNjZXNzb3IncyBvbmx5IHBy
ZWRlY2Vzc29yIGlzIGJsb2NrLCB3ZSBjYW4gcGxhbnQgdGhlIHNwaWxsIGluc2lkZQorICAgICAg
ICAgICAgLy8gdGhlIHN1Y2Nlc3Nvci4gT3RoZXJ3aXNlLCB3ZSBtdXN0IHNwbGl0IHRoZSBjcml0
aWNhbCBlZGdlIGFuZCBjcmVhdGUKKyAgICAgICAgICAgIC8vIGEgbmV3IGJsb2NrIGZvciB0aGUg
c3BpbGwuCisgICAgICAgICAgICBpZiAoc3VjY2Vzc29yLT5udW1QcmVkZWNlc3NvcnMoKSA9PSAx
KSB7CisgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydEluc3RzKDAsIGluc3RzVG9N
b3ZlKTsKKyAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShzdWNjZXNzb3IpOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBuZXdCbG9j
ayA9IGJsb2NrSW5zZXJ0aW9uU2V0Lmluc2VydEJlZm9yZShzdWNjZXNzb3IsIHN1Y2Nlc3Nvci0+
ZnJlcXVlbmN5KCkpOworICAgICAgICAgICAgICAgIGZvciAoY29uc3QgSW5zdCYgaW5zdCA6IGlu
c3RzVG9Nb3ZlKQorICAgICAgICAgICAgICAgICAgICBuZXdCbG9jay0+YXBwZW5kSW5zdChpbnN0
KTsKKyAgICAgICAgICAgICAgICBuZXdCbG9jay0+YXBwZW5kSW5zdChJbnN0KEp1bXAsIGluc3Rz
VG9Nb3ZlLmxhc3QoKS5vcmlnaW4pKTsKKyAgICAgICAgICAgICAgICBuZXdCbG9jay0+c3VjY2Vz
c29ycygpLmFwcGVuZChzdWNjZXNzb3IpOworICAgICAgICAgICAgICAgIGZyZXF1ZW50ZWRTdWNj
ZXNzb3IuYmxvY2soKSA9IG5ld0Jsb2NrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgYmxvY2stPnJlc2l6ZSh0ZXJtaW5hbEluZGV4ICsgMSk7CisgICAgfQorCisgICAgaWYg
KGJsb2NrSW5zZXJ0aW9uU2V0LmV4ZWN1dGUoKSkKKyAgICAgICAgY29kZS5yZXNldFJlYWNoYWJp
bGl0eSgpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5h
bHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisK
K2NsYXNzIENvZGU7CisKKy8vIEJlY2F1c2UgdGhlcmUgbWF5IGJlIHRlcm1pbmFscyB0aGF0IHBy
b2R1Y2UgdmFsdWVzLCB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yIG1heQorLy8gd2FudCB0byBzcGls
bCB0aG9zZSB0ZXJtaW5hbHMuIEl0J2xsIGhhcHBlbiB0byBzcGlsbCBpdCBhZnRlcgorLy8gdGhl
IHRlcm1pbmFsLiBJZiB3ZSBsZWZ0IHRoZSBncmFwaCBpbiB0aGlzIHN0YXRlLCBpdCdkIGJlIGlu
dmFsaWQKKy8vIGJlY2F1c2UgYSB0ZXJtaW5hbCBtdXN0IGJlIHRoZSBsYXN0IGluc3RydWN0aW9u
IGluIGEgYmxvY2suCisvLyBXZSBmaXggdGhhdCBoZXJlLgordm9pZCBmaXhTcGlsbHNBZnRlclRl
cm1pbmFscyhDb2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyR2VuZXJhdGUuY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiAr
MjksNyBAQAogI2lmIEVOQUJMRShCM19KSVQpCiAKICNpbmNsdWRlICJBaXJBbGxvY2F0ZVJlZ2lz
dGVyc0J5R3JhcGhDb2xvcmluZy5oIgorI2luY2x1ZGUgIkFpckFsbG9jYXRlUmVnaXN0ZXJzQnlM
aW5lYXJTY2FuLmgiCiAjaW5jbHVkZSAiQWlyQWxsb2NhdGVTdGFjay5oIgogI2luY2x1ZGUgIkFp
ckNvZGUuaCIKICNpbmNsdWRlICJBaXJFbGltaW5hdGVEZWFkQ29kZS5oIgpAQCAtNTcsNyArNTgs
NyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CiAK
LXZvaWQgcHJlcGFyZUZvckdlbmVyYXRpb24oQ29kZSYgY29kZSkKK3ZvaWQgcHJlcGFyZUZvckdl
bmVyYXRpb24oQ29kZSYgY29kZSwgdW5zaWduZWQgb3B0TGV2ZWwpCiB7CiAgICAgVGltaW5nU2Nv
cGUgdGltaW5nU2NvcGUoIkFpcjo6cHJlcGFyZUZvckdlbmVyYXRpb24iKTsKICAgICAKQEAgLTg5
LDE4ICs5MCwyMiBAQCB2b2lkIHByZXBhcmVGb3JHZW5lcmF0aW9uKENvZGUmIGNvZGUpCiAgICAg
Ly8gRm9yIGRlYnVnZ2luZywgeW91IGNhbiB1c2Ugc3BpbGxFdmVyeXRoaW5nKCkgdG8gcHV0IGV2
ZXJ5dGhpbmcgdG8gdGhlIHN0YWNrIGJldHdlZW4gZWFjaCBJbnN0LgogICAgIGlmIChPcHRpb25z
OjphaXJTcGlsbHNFdmVyeXRoaW5nKCkpCiAgICAgICAgIHNwaWxsRXZlcnl0aGluZyhjb2RlKTsK
LSAgICBlbHNlCisgICAgZWxzZSBpZiAob3B0TGV2ZWwgPj0gMikKICAgICAgICAgYWxsb2NhdGVS
ZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcoY29kZSk7CisgICAgZWxzZQorICAgICAgICBhbGxvY2F0
ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbihjb2RlKTsKIAogICAgIGlmIChPcHRpb25zOjpsb2dBaXJS
ZWdpc3RlclByZXNzdXJlKCkpIHsKICAgICAgICAgZGF0YUxvZygiUmVnaXN0ZXIgcHJlc3N1cmUg
YWZ0ZXIgcmVnaXN0ZXIgYWxsb2NhdGlvbjpcbiIpOwogICAgICAgICBsb2dSZWdpc3RlclByZXNz
dXJlKGNvZGUpOwogICAgIH0KLQotICAgIC8vIFRoaXMgcmVwbGFjZXMgdXNlcyBvZiBzcGlsbCBz
bG90cyB3aXRoIHJlZ2lzdGVycyBvciBjb25zdGFudHMgaWYgcG9zc2libGUuIEl0IGRvZXMgdGhp
cyBieQotICAgIC8vIG1pbmltaXppbmcgdGhlIGFtb3VudCB0aGF0IHdlIHBlcnR1cmIgdGhlIGFs
cmVhZHktY2hvc2VuIHJlZ2lzdGVyIGFsbG9jYXRpb24uIEl0IG1heSBleHRlbmQKLSAgICAvLyB0
aGUgbGl2ZSByYW5nZXMgb2YgcmVnaXN0ZXJzIHRob3VnaC4KLSAgICBmaXhPYnZpb3VzU3BpbGxz
KGNvZGUpOworICAgIAorICAgIGlmIChvcHRMZXZlbCA+PSAyKSB7CisgICAgICAgIC8vIFRoaXMg
cmVwbGFjZXMgdXNlcyBvZiBzcGlsbCBzbG90cyB3aXRoIHJlZ2lzdGVycyBvciBjb25zdGFudHMg
aWYgcG9zc2libGUuIEl0IGRvZXMgdGhpcyBieQorICAgICAgICAvLyBtaW5pbWl6aW5nIHRoZSBh
bW91bnQgdGhhdCB3ZSBwZXJ0dXJiIHRoZSBhbHJlYWR5LWNob3NlbiByZWdpc3RlciBhbGxvY2F0
aW9uLiBJdCBtYXkgZXh0ZW5kCisgICAgICAgIC8vIHRoZSBsaXZlIHJhbmdlcyBvZiByZWdpc3Rl
cnMgdGhvdWdoLgorICAgICAgICBmaXhPYnZpb3VzU3BpbGxzKGNvZGUpOworICAgIH0KIAogICAg
IGxvd2VyQWZ0ZXJSZWdBbGxvYyhjb2RlKTsKIApAQCAtMTY1LDcgKzE3MCw3IEBAIHZvaWQgZ2Vu
ZXJhdGUoQ29kZSYgY29kZSwgQ0NhbGxIZWxwZXJzJiAKICAgICAgICAgaWYgKGJsb2NrKQogICAg
ICAgICAgICAgY29udGV4dC5ibG9ja0xhYmVsc1tibG9ja10gPSBCb3g8Q0NhbGxIZWxwZXJzOjpM
YWJlbD46OmNyZWF0ZSgpOwogICAgIH0KLSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBDQ2FsbEhl
bHBlcnM6Okp1bXBMaXN0PiBibG9ja0p1bXBzKGNvZGUuc2l6ZSgpKTsKKyAgICBJbmRleE1hcDxC
YXNpY0Jsb2NrKiwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdD4gYmxvY2tKdW1wcyhjb2RlLnNpemUo
KSk7CiAKICAgICBhdXRvIGxpbmsgPSBbJl0gKENDYWxsSGVscGVyczo6SnVtcCBqdW1wLCBCYXNp
Y0Jsb2NrKiB0YXJnZXQpIHsKICAgICAgICAgaWYgKGNvbnRleHQuYmxvY2tMYWJlbHNbdGFyZ2V0
XS0+aXNTZXQoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5l
cmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2Vu
ZXJhdGUuaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJHZW5lcmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNiArMjcsOCBAQAogCiAjaWYg
RU5BQkxFKEIzX0pJVCkKIAorI2luY2x1ZGUgIkIzQ29tbW9uLmgiCisKIG5hbWVzcGFjZSBKU0Mg
ewogCiBjbGFzcyBDQ2FsbEhlbHBlcnM7CkBAIC0zNyw3ICszOSw3IEBAIGNsYXNzIENvZGU7CiAK
IC8vIFRoaXMgdGFrZXMgYW4gQWlyOjpDb2RlIHRoYXQgaGFzbid0IGhhZCBhbnkgc3RhY2sgYWxs
b2NhdGlvbiBhbmQgb3B0aW9uYWxseSBoYXNuJ3QgaGFkIGFueQogLy8gcmVnaXN0ZXIgYWxsb2Nh
dGlvbiBhbmQgZG9lcyBib3RoIG9mIHRob3NlIHRoaW5ncy4KLUpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgcHJlcGFyZUZvckdlbmVyYXRpb24oQ29kZSYpOworSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBw
cmVwYXJlRm9yR2VuZXJhdGlvbihDb2RlJiwgdW5zaWduZWQgb3B0TGV2ZWwgPSBkZWZhdWx0T3B0
TGV2ZWwoKSk7CiAKIC8vIFRoaXMgZ2VuZXJhdGVzIHRoZSBjb2RlIHVzaW5nIHRoZSBnaXZlbiBD
Q2FsbEhlbHBlcnMgaW5zdGFuY2UuIE5vdGUgdGhhdCB0aGlzIG1heSBjYWxsIGNhbGxiYWNrcwog
Ly8gaW4gdGhlIHN1cHBsaWVkIGNvZGUgYXMgaXQgaXMgZ2VuZXJhdGluZy4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGlvbkNvbnRleHQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRpb25Db250ZXh0LmgJ
KHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2Vu
ZXJhdGlvbkNvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6
CiAgICAgdHlwZWRlZiBTaGFyZWRUYXNrPExhdGVQYXRoRnVuY3Rpb24+IExhdGVQYXRoOwogCiAg
ICAgVmVjdG9yPFJlZlB0cjxMYXRlUGF0aD4+IGxhdGVQYXRoczsKLSAgICBJbmRleE1hcDxCYXNp
Y0Jsb2NrLCBCb3g8Q0NhbGxIZWxwZXJzOjpMYWJlbD4+IGJsb2NrTGFiZWxzOworICAgIEluZGV4
TWFwPEJhc2ljQmxvY2sqLCBCb3g8Q0NhbGxIZWxwZXJzOjpMYWJlbD4+IGJsb2NrTGFiZWxzOwog
ICAgIEJhc2ljQmxvY2sqIGN1cnJlbnRCbG9jayB7IG51bGxwdHIgfTsKICAgICB1bnNpZ25lZCBp
bmRleEluQmxvY2sgeyBVSU5UX01BWCB9OwogICAgIENvZGUqIGNvZGUgeyBudWxscHRyIH07Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlckFm
dGVyUmVnQWxsb2MuY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1
LDYgKzU1LDExIEBAIHZvaWQgbG93ZXJBZnRlclJlZ0FsbG9jKENvZGUmIGNvZGUpCiAKICAgICBp
ZiAodmVyYm9zZSkKICAgICAgICAgZGF0YUxvZygiQ29kZSBiZWZvcmUgbG93ZXJBZnRlclJlZ0Fs
bG9jOlxuIiwgY29kZSk7CisgICAgCisgICAgLy8gRklYTUU6CisgICAgLy8gMSkgVGhpcyBzaG91
bGQgYmFpbCBlYXJseSBpZiB0aGVyZSBhcmUgbm8gU2h1ZmZsZXMgb3IgQ29sZENDYWxscy4gKE9P
UFMhISBuZWVkIGJ1ZyB1cmwpCisgICAgLy8gMikgV2Ugc2hvdWxkIG5vdCBpbnRyb2R1Y2UgU2h1
ZmZsZXMgZm9yIG5vcm1hbCBjYWxscy4gKE9PUFMhISBuZWVkIGJ1ZyB1cmwpCisgICAgLy8gMykg
V2Ugc2hvdWxkIGVtaXQgQ29sZENDYWxsIG9ubHkgYXQgb3B0TGV2ZWw9PTEuIChPT1BTISEgbmVl
ZCBidWcgdXJsKQogCiAgICAgSGFzaE1hcDxJbnN0KiwgUmVnaXN0ZXJTZXQ+IHVzZWRSZWdpc3Rl
cnM7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJFbnRyeVN3
aXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJM
b3dlckVudHJ5U3dpdGNoLmNwcAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJMb3dlckVudHJ5U3dpdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODIsNyArODIsNyBAQCB2b2lkIGxvd2VyRW50cnlTd2l0Y2goQ29kZSYgY29kZSkKICAgICAvLyBO
b3cgZHVwbGljYXRlIHRoZW0uCiAgICAgVmVjdG9yPEZyZXF1ZW50ZWRCbG9jaz4gZW50cnlwb2lu
dHM7CiAgICAgZW50cnlwb2ludHMuYXBwZW5kKEZyZXF1ZW50ZWRCbG9jayhjb2RlWzBdLCBlbnRy
eXBvaW50RnJlcXVlbmNpZXNbMF0pKTsKLSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBCYXNpY0Js
b2NrKj4gbWFwKGNvZGUuc2l6ZSgpKTsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgQmFzaWNC
bG9jayo+IG1hcChjb2RlLnNpemUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBlbnRyeXBvaW50SW5k
ZXggPSAxOyBlbnRyeXBvaW50SW5kZXggPCBjb2RlLnByb2MoKS5udW1FbnRyeXBvaW50cygpOyAr
K2VudHJ5cG9pbnRJbmRleCkgewogICAgICAgICBtYXAuY2xlYXIoKTsKICAgICAgICAgZm9yIChC
YXNpY0Jsb2NrKiBibG9jayA6IHdvcmtsaXN0LnNlZW4oKS52YWx1ZXMoY29kZSkpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ0xpdmVuZXNzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdMaXZlbmVzcy5oCShyZXZpc2lv
biAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ0xpdmVuZXNz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJBaXJCYXNpY0Js
b2NrLmgiCiAjaW5jbHVkZSAiQWlyQ29kZS5oIgogI2luY2x1ZGUgIkFpckluc3QuaCIKKyNpbmNs
dWRlICJBaXJMaXZlbmVzcy5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCiAKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKQEAgLTU0LDYgKzU1LDE5IEBA
IHB1YmxpYzoKICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICAvLyBJZiB5
b3UgY29tcHV0ZWQgVG1wIGxpdmVuZXNzIGZvciBzb21lIGJhbmssIHlvdSBjYW4gdXNlIHJlZyBs
aXZlbmVzcyB0byBmaWxsIGluIHRoZSBibGFua3MuCisgICAgICAgIC8vIE5vdGUgdGhhdCB3aGF0
IGhhcHBlbnMgdG8gdGhlIHJlZ2lzdGVycyBub3QgYmVsb25naW5nIHRvIHRoZSBiYW5rIGlzIGFy
Yml0cmFyeSAtIHRoZXkgbWF5IGdldAorICAgICAgICAvLyBzZXQgb3Igbm90LgorICAgICAgICB0
ZW1wbGF0ZTxCYW5rIGJhbms+CisgICAgICAgIExvY2FsQ2FsYyhUbXBMaXZlbmVzczxiYW5rPiYg
bGl2ZW5lc3MsIEJhc2ljQmxvY2sqIGJsb2NrKQorICAgICAgICAgICAgOiBtX2Jsb2NrKGJsb2Nr
KQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKFRtcCB0bXAgOiBsaXZlbmVzcy5saXZlQXRU
YWlsKGJsb2NrKSkgeworICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSkKKyAgICAgICAg
ICAgICAgICAgICAgbV93b3Jrc2V0LnNldCh0bXAucmVnKCkpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIAogICAgICAgICBjb25zdCBSZWdpc3RlclNldCYgbGl2ZSgpIGNvbnN0
CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBtX3dvcmtzZXQ7CkBAIC04NCw4ICs5OCw4
IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiBwcml2YXRlOgotICAgIEluZGV4TWFwPEJhc2ljQmxv
Y2ssIFJlZ2lzdGVyU2V0PiBtX2xpdmVBdEhlYWQ7Ci0gICAgSW5kZXhNYXA8QmFzaWNCbG9jaywg
UmVnaXN0ZXJTZXQ+IG1fbGl2ZUF0VGFpbDsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgUmVn
aXN0ZXJTZXQ+IG1fbGl2ZUF0SGVhZDsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgUmVnaXN0
ZXJTZXQ+IG1fbGl2ZUF0VGFpbDsKIH07CiAKIH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpB
aXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5n
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxs
RXZlcnl0aGluZy5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiAr
MzAsNyBAQAogCiAjaW5jbHVkZSAiQWlyQXJnSW5saW5lcy5oIgogI2luY2x1ZGUgIkFpckNvZGUu
aCIKKyNpbmNsdWRlICJBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5oIgogI2luY2x1ZGUgIkFp
ckluc2VydGlvblNldC5oIgogI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
QWlyTGl2ZW5lc3MuaCIKQEAgLTQ2LDcgKzQ3LDcgQEAgdm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29k
ZSYgY29kZSkKICAgICBwYWRJbnRlcmZlcmVuY2UoY29kZSk7CiAKICAgICAvLyBXZSB3YW50IHRv
IGtub3cgdGhlIHNldCBvZiByZWdpc3RlcnMgdXNlZCBhdCBldmVyeSBwb2ludCBpbiBldmVyeSBi
YXNpYyBibG9jay4KLSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBWZWN0b3I8UmVnaXN0ZXJTZXQ+
PiB1c2VkUmVnaXN0ZXJzKGNvZGUuc2l6ZSgpKTsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwg
VmVjdG9yPFJlZ2lzdGVyU2V0Pj4gdXNlZFJlZ2lzdGVycyhjb2RlLnNpemUoKSk7CiAgICAgR1BM
aXZlbmVzcyBncExpdmVuZXNzKGNvZGUpOwogICAgIEZQTGl2ZW5lc3MgZnBMaXZlbmVzcyhjb2Rl
KTsKICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgewpAQCAtMTczLDEwICsxNzQs
MTMgQEAgdm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYgY29kZSkKICAgICAgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoY2hvc2VuUmVnKTsKIAogICAgICAgICAgICAgICAgICAgICB0bXAg
PSBUbXAoY2hvc2VuUmVnKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgIGlmIChyb2xlID09IEFyZzo6U2NyYXRjaCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKIAogICAgICAgICAgICAgICAgICAgICBPcGNvZGUgbW92ZSA9IGJhbmsgPT0gR1AgPyBN
b3ZlIDogTW92ZURvdWJsZTsKIAotICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0FueVVz
ZShyb2xlKSAmJiByb2xlICE9IEFyZzo6U2NyYXRjaCkKKyAgICAgICAgICAgICAgICAgICAgaWYg
KEFyZzo6aXNBbnlVc2Uocm9sZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25T
ZXQuaW5zZXJ0KGluc3RJbmRleCwgbW92ZSwgaW5zdC5vcmlnaW4sIGFyZywgdG1wKTsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlEZWYocm9sZSkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KGluc3RJbmRleCArIDEsIG1vdmUsIGluc3Qub3Jp
Z2luLCB0bXAsIGFyZyk7CkBAIC0xODQsNiArMTg4LDggQEAgdm9pZCBzcGlsbEV2ZXJ5dGhpbmco
Q29kZSYgY29kZSkKICAgICAgICAgfQogICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9j
ayk7CiAgICAgfQorICAgIAorICAgIGZpeFNwaWxsc0FmdGVyVGVybWluYWxzKGNvZGUpOwogfQog
CiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpclRtcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJUbXAuY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclRtcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsOCArMjgsMTUgQEAK
IAogI2lmIEVOQUJMRShCM19KSVQpCiAKKyNpbmNsdWRlICJBaXJUbXBJbmxpbmVzLmgiCisKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKIAordGVtcGxhdGU8
PiBjb25zdCBjaGFyKiBjb25zdCBUbXA6OkluZGV4ZWQ8R1A+OjpkdW1wUHJlZml4ID0gIiV0bXAi
OwordGVtcGxhdGU8PiBjb25zdCBjaGFyKiBjb25zdCBUbXA6OkluZGV4ZWQ8RlA+OjpkdW1wUHJl
Zml4ID0gIiVmdG1wIjsKK3RlbXBsYXRlPD4gY29uc3QgY2hhciogY29uc3QgVG1wOjpBYnNvbHV0
ZWx5SW5kZXhlZDxHUD46OmR1bXBQcmVmaXggPSAiJWFicyI7Cit0ZW1wbGF0ZTw+IGNvbnN0IGNo
YXIqIGNvbnN0IFRtcDo6QWJzb2x1dGVseUluZGV4ZWQ8RlA+OjpkdW1wUHJlZml4ID0gIiVmYWJz
IjsKKwogdm9pZCBUbXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBpZiAo
ISp0aGlzKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmgJKHJldmlz
aW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNzQsNiArNzQsMTQgQEAgcHVibGljOgogICAgICAgICByZXN1bHQubV92YWx1
ZSA9IGVuY29kZUZQVG1wKGluZGV4KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Cisg
ICAgCisgICAgc3RhdGljIFRtcCB0bXBGb3JJbmRleChCYW5rIGJhbmssIHVuc2lnbmVkIGluZGV4
KQorICAgIHsKKyAgICAgICAgaWYgKGJhbmsgPT0gR1ApCisgICAgICAgICAgICByZXR1cm4gZ3BU
bXBGb3JJbmRleChpbmRleCk7CisgICAgICAgIEFTU0VSVChiYW5rID09IEZQKTsKKyAgICAgICAg
cmV0dXJuIGZwVG1wRm9ySW5kZXgoaW5kZXgpOworICAgIH0KIAogICAgIGV4cGxpY2l0IG9wZXJh
dG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fdmFsdWU7IH0KICAgICAKQEAgLTE1NCw3ICsx
NjIsMTYgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIGdwVG1wSW5kZXgoKTsKICAgICAg
ICAgcmV0dXJuIGZwVG1wSW5kZXgoKTsKICAgICB9Ci0KKyAgICAKKyAgICB0ZW1wbGF0ZTxCYW5r
IGJhbms+IGNsYXNzIEluZGV4ZWQ7CisgICAgdGVtcGxhdGU8QmFuayBiYW5rPiBjbGFzcyBBYnNv
bHV0ZWx5SW5kZXhlZDsKKyAgICAKKyAgICB0ZW1wbGF0ZTxCYW5rIGJhbms+CisgICAgSW5kZXhl
ZDxiYW5rPiBpbmRleGVkKCkgY29uc3Q7CisgICAgCisgICAgdGVtcGxhdGU8QmFuayBiYW5rPgor
ICAgIEFic29sdXRlbHlJbmRleGVkPGJhbms+IGFic29sdXRlbHlJbmRleGVkKCkgY29uc3Q7Cisg
ICAgCiAgICAgYm9vbCBpc0FsaXZlKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiAhISp0
aGlzOwpAQCAtMTk1LDYgKzIxMiw4IEBAIHB1YmxpYzoKICAgICAgICAgcmVzdWx0Lm1fdmFsdWUg
PSBzdGF0aWNfY2FzdDxpbnQ+KGluZGV4KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9
CisgICAgCisgICAgc3RhdGljIFRtcCB0bXBGb3JBYnNvbHV0ZUluZGV4KEJhbmssIHVuc2lnbmVk
KTsKIAogcHJpdmF0ZToKICAgICBzdGF0aWMgaW50IGVuY29kZUdQKHVuc2lnbmVkIGluZGV4KQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXBJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXBJbmxpbmVzLmgJKHJl
dmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wSW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC05Miw2ICs5Miw1OCBAQCBzdHJ1Y3QgQWJzb2x1dGVU
bXBNYXBwZXI8RlA+IHsKICAgICB9CiB9OwogCit0ZW1wbGF0ZTxCYW5rIHRoZUJhbms+CitjbGFz
cyBUbXA6OkluZGV4ZWQgOiBwdWJsaWMgVG1wIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3Qg
Y2hhciogY29uc3QgZHVtcFByZWZpeDsKKyAgICAKKyAgICBJbmRleGVkKFRtcCB0bXApCisgICAg
ICAgIDogVG1wKHRtcCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4KCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXBJbmRleCh0aGVCYW5rKTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTxCYW5rIHRoZUJhbms+CitjbGFzcyBUbXA6OkFic29sdXRlbHlJbmRleGVk
IDogcHVibGljIFRtcCB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGR1
bXBQcmVmaXg7CisKKyAgICBBYnNvbHV0ZWx5SW5kZXhlZChUbXAgdG1wKQorICAgICAgICA6IFRt
cCh0bXApCisgICAgeworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gQWJzb2x1dGVUbXBNYXBwZXI8dGhlQmFuaz46OmFic29sdXRl
SW5kZXgoKnRoaXMpOworICAgIH0KK307CisKK3RlbXBsYXRlPEJhbmsgdGhlQmFuaz4KK1RtcDo6
SW5kZXhlZDx0aGVCYW5rPiBUbXA6OmluZGV4ZWQoKSBjb25zdAoreworICAgIHJldHVybiBJbmRl
eGVkPHRoZUJhbms+KCp0aGlzKTsKK30KKwordGVtcGxhdGU8QmFuayB0aGVCYW5rPgorVG1wOjpB
YnNvbHV0ZWx5SW5kZXhlZDx0aGVCYW5rPiBUbXA6OmFic29sdXRlbHlJbmRleGVkKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gQWJzb2x1dGVseUluZGV4ZWQ8dGhlQmFuaz4oKnRoaXMpOworfQorCitU
bXAgVG1wOjp0bXBGb3JBYnNvbHV0ZUluZGV4KEJhbmsgYmFuaywgdW5zaWduZWQgaW5kZXgpCit7
CisgICAgaWYgKGJhbmsgPT0gR1ApCisgICAgICAgIHJldHVybiBBYnNvbHV0ZVRtcE1hcHBlcjxH
UD46OnRtcEZyb21BYnNvbHV0ZUluZGV4KGluZGV4KTsKKyAgICBBU1NFUlQoYmFuayA9PSBGUCk7
CisgICAgcmV0dXJuIEFic29sdXRlVG1wTWFwcGVyPEZQPjo6dG1wRnJvbUFic29sdXRlSW5kZXgo
aW5kZXgpOworfQorCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCiAKICNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rl
clNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJT
ZXQuaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdp
c3RlclNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsOCArMTAyLDE2IEBAIHB1YmxpYzoKICAg
ICB9CiAgICAgCiAgICAgLy8gQWxzbyBhbGxvdyBhZGQvcmVtb3ZlL2NvbnRhaW5zIHRlcm1pbm9s
b2d5LCB3aGljaCBtZWFucyB0aGUgc2FtZSB0aGluZyBhcyBzZXQvY2xlYXIvZ2V0LgotICAgIHZv
aWQgYWRkKFJlZyByZWcpIHsgc2V0KHJlZyk7IH0KLSAgICB2b2lkIHJlbW92ZShSZWcgcmVnKSB7
IGNsZWFyKHJlZyk7IH0KKyAgICBib29sIGFkZChSZWcgcmVnKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKCEhcmVnKTsKKyAgICAgICAgcmV0dXJuICFtX2JpdHMudGVzdEFuZFNldChyZWcuaW5kZXgo
KSk7CisgICAgfQorICAgIGJvb2wgcmVtb3ZlKFJlZyByZWcpCisgICAgeworICAgICAgICBBU1NF
UlQoISFyZWcpOworICAgICAgICByZXR1cm4gbV9iaXRzLnRlc3RBbmRDbGVhcihyZWcuaW5kZXgo
KSk7CisgICAgfQogICAgIGJvb2wgY29udGFpbnMoUmVnIHJlZykgY29uc3QgeyByZXR1cm4gZ2V0
KHJlZyk7IH0KICAgICAKICAgICB2b2lkIG1lcmdlKGNvbnN0IFJlZ2lzdGVyU2V0JiBvdGhlcikg
eyBtX2JpdHMubWVyZ2Uob3RoZXIubV9iaXRzKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjUsNiArMjI1LDcg
QEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgdihib29sLCB1c2VGVExK
SVQsIHRydWUsIE5vcm1hbCwgImFsbG93cyB0aGUgRlRMIEpJVCB0byBiZSB1c2VkIGlmIHRydWUi
KSBcCiAgICAgdihib29sLCB1c2VGVExUQkFBLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAg
ICB2KGJvb2wsIHZhbGlkYXRlRlRMT1NSRXhpdExpdmVuZXNzLCBmYWxzZSwgTm9ybWFsLCBudWxs
cHRyKSBcCisgICAgdih1bnNpZ25lZCwgZGVmYXVsdEIzT3B0TGV2ZWwsIDIsIE5vcm1hbCwgbnVs
bHB0cikgXAogICAgIHYoYm9vbCwgYjNBbHdheXNGYWlsc0JlZm9yZUNvbXBpbGUsIGZhbHNlLCBO
b3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGIzQWx3YXlzRmFpbHNCZWZvcmVMaW5rLCBm
YWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCBmdGxDcmFzaGVzLCBmYWxzZSwg
Tm9ybWFsLCBudWxscHRyKSAvKiBmb29sLXByb29mIHdheSBvZiBjaGVja2luZyB0aGF0IHlvdSBl
bmRlZCB1cCBpbiB0aGUgRlRMLiA7LSkgKi9cCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjcsNiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCisjaW5jbHVkZSAiQjND
b21tb24uaCIKICNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCiAjaW5jbHVkZSAiQ0NhbGxIZWxw
ZXJzLmgiCiAjaW5jbHVkZSAiVk0uaCIKQEAgLTQ3LDcgKzQ4LDcgQEAgc3RydWN0IENvbXBpbGF0
aW9uQ29udGV4dCB7CiAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGpzRW50cnlwb2ludFRvV2FzbUVu
dHJ5cG9pbnRDYWxsOwogfTsKIAotRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5h
bEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoVk0mLCBDb21waWxhdGlvbkNvbnRl
eHQmLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBTaWduYXR1cmUqLCBWZWN0b3I8VW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIGNvbnN0IFZl
Y3RvcjxTaWduYXR1cmVJbmRleD4mLCB1bnNpZ25lZCBvcHRMZXZlbCA9IDEpOworRXhwZWN0ZWQ8
c3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENv
bXBpbGUoVk0mLCBDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBj
b25zdCBTaWduYXR1cmUqLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBN
b2R1bGVJbmZvcm1hdGlvbiYsIGNvbnN0IFZlY3RvcjxTaWduYXR1cmVJbmRleD4mLCB1bnNpZ25l
ZCBvcHRMZXZlbCA9IEIzOjpkZWZhdWx0T3B0TGV2ZWwoKSk7CiAKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpXYXNtCiAKSW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsOCBAQAogLyogQmVnaW4gUEJYQnVp
bGRGaWxlIHNlY3Rpb24gKi8KIAkJMEYwRDg1QjQxNzIzNENDMTAwMzM4MjEwIC8qIE5vTG9jay5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwRDg1QjMx
NzIzNENCMTAwMzM4MjEwIC8qIE5vTG9jay5oICovOyB9OwogCQkwRjBGQ0RERTFERDE2N0Y5MDBD
Q0FCNTMgLyogTG9ja0FsZ29yaXRobS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYwRkNEREQxREQxNjdGOTAwQ0NBQjUzIC8qIExvY2tBbGdvcml0aG0u
aCAqLzsgfTsKKwkJMEYyQUM1NjExRTg5RjcwQzAwMDFFRTNGIC8qIFJhbmdlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJBQzU2MDFFODlGNzBDMDAw
MUVFM0YgLyogUmFuZ2UuaCAqLzsgfTsKKwkJMEYyQUM1NjMxRThBMDE0OTAwMDFFRTNGIC8qIElu
ZGV4S2V5VHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYyQUM1NjIxRThBMDE0OTAwMDFFRTNGIC8qIEluZGV4S2V5VHlwZS5oICovOyB9OwogCQkw
RjJCNjZBNjE3QjZCNEZCMDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE0MTdCNkI0Rjcw
MEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5oICovOyB9OwogCQkwRjJCNjZBNzE3QjZC
NEZEMDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBNTE3QjZCNEY3MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmgg
Ki87IH07CiAJCTBGMzBCQTkwMUU3ODcwOEUwMDJDQTg0NyAvKiBHbG9iYWxWZXJzaW9uLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzBCQThBMUU3
ODcwOEUwMDJDQTg0NyAvKiBHbG9iYWxWZXJzaW9uLmNwcCAqLzsgfTsKQEAgLTQwOCw2ICs0MTAs
OCBAQAogLyogQmVnaW4gUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCiAJCTBGMEQ4NUIzMTcy
MzRDQjEwMDMzODIxMCAvKiBOb0xvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm9Mb2NrLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMEZDREREMUREMTY3RjkwMENDQUI1MyAvKiBMb2Nr
QWxnb3JpdGhtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvY2tBbGdvcml0
aG0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQUM1NjAxRTg5RjcwQzAwMDFF
RTNGIC8qIFJhbmdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJhbmdlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkFDNTYyMUU4QTAxNDkwMDAxRUUzRiAv
KiBJbmRleEtleVR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5kZXhL
ZXlUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkE0MTdCNkI0Rjcw
MEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZWZlcnJh
YmxlUmVmQ291bnRlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCNjZBNTE3
QjZCNEY3MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZsaXBCeXRlcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjMwMEI3RDE4QUI0OEI0MDBBNkQ3MkUg
LyogSGFzaE1ldGhvZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIYXNoTWV0aG9kLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xMDE4LDEwICsxMDIyLDExIEBACiAJCQkJQThBNDcyQkExNTFB
ODI1QTAwNDEyM0ZGIC8qIEhhc2hUcmFpdHMuaCAqLywKIAkJCQlBOEE0NzJCQjE1MUE4MjVBMDA0
MTIzRkYgLyogSGV4TnVtYmVyLmggKi8sCiAJCQkJRkU4OTI1QUYxRDAwREFFQzAwNDY5MDdFIC8q
IEluZGVudGVyLmggKi8sCi0JCQkJOUM2N0M1NDI1ODkzNDhFMjg1QjQ5Njk5IC8qIEluZGV4ZWRD
b250YWluZXJJdGVyYXRvci5oICovLAorCQkJCTBGMkFDNTYyMUU4QTAxNDkwMDAxRUUzRiAvKiBJ
bmRleEtleVR5cGUuaCAqLywKIAkJCQk1QjQzMzgzQTVEMEI0NjNDOTQzM0Q5MzMgLyogSW5kZXhN
YXAuaCAqLywKIAkJCQkzMTM3RTFEN0RCRDg0QUMzOEZBRTREMzQgLyogSW5kZXhTZXQuaCAqLywK
IAkJCQkyNjg0RDQzNTFDMDAwRDQwMDA4MUQ2NjMgLyogSW5kZXhTcGFyc2VTZXQuaCAqLywKKwkJ
CQk5QzY3QzU0MjU4OTM0OEUyODVCNDk2OTkgLyogSW5kZXhlZENvbnRhaW5lckl0ZXJhdG9yLmgg
Ki8sCiAJCQkJQThBNDcyQkMxNTFBODI1QTAwNDEyM0ZGIC8qIElubGluZUFTTS5oICovLAogCQkJ
CUE3MERBMDgyMTc5OUYwNEQwMDUyOUE5QiAvKiBJbnNlcnRpb24uaCAqLywKIAkJCQk3Q0REN0ZG
NzE4NkQyOTFFMDA3NDMzQ0QgLyogSXRlcmF0b3JBZGFwdG9ycy5oICovLApAQCAtMTEwMCw2ICsx
MTA1LDcgQEAKIAkJCQlBOEE0NzJGQjE1MUE4MjVCMDA0MTIzRkYgLyogUmFuZG9tTnVtYmVyLmNw
cCAqLywKIAkJCQlBOEE0NzJGQzE1MUE4MjVCMDA0MTIzRkYgLyogUmFuZG9tTnVtYmVyLmggKi8s
CiAJCQkJQThBNDcyRkQxNTFBODI1QjAwNDEyM0ZGIC8qIFJhbmRvbU51bWJlclNlZWQuaCAqLywK
KwkJCQkwRjJBQzU2MDFFODlGNzBDMDAwMUVFM0YgLyogUmFuZ2UuaCAqLywKIAkJCQkwRjcyNUNB
QjFDNTA0NjE2MDBBRDk0M0EgLyogUmFuZ2VTZXQuaCAqLywKIAkJCQkwRjg3MTA1OTE2NjQzRjE5
MDA5MEIwQUQgLyogUmF3UG9pbnRlci5oICovLAogCQkJCTBGREU4N0Y2MURGRDA3Q0MwMDY0QzM5
MCAvKiBSZWN1cnNpdmVMb2NrQWRhcHRlci5oICovLApAQCAtMTQ4NSw2ICsxNDkxLDcgQEAKIAkJ
CQlDOTE2Qjk3NUYwMkY0RjdFOEI0QUIxMkQgLyogSW5kZXhNYXAuaCBpbiBIZWFkZXJzICovLAog
CQkJCUM4QjBFMUExRTAxQTQ4NkVCOTVFMEQxMSAvKiBJbmRleFNldC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMjY4NEQ0MzYxQzAwMEQ0MDAwODFENjYzIC8qIEluZGV4U3BhcnNlU2V0LmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjJBQzU2MzFFOEEwMTQ5MDAwMUVFM0YgLyogSW5kZXhLZXlUeXBlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNEQzE1MUE4MjVCMDA0MTIzRkYgLyogSW5saW5lQVNN
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzBEQTA4NDE3OTlGMDREMDA1MjlBOUIgLyogSW5zZXJ0
aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkyNjE0N0IwQTE1RERDQ0RDMDBEREI5MDcgLyogSW50
ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNTg2LDYgKzE1OTMs
NyBAQAogCQkJCTQzMEI0Nzg5MUFBQUFDMUEwMDEyMjNEQSAvKiBTdHJpbmdDb21tb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4QTQ3NDNFMTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdDb25jYXRl
bmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0NENEMyNzAxRTJDODJCOTAwOTI5NDcwIC8qIFN0
cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQUM1NjExRTg5
RjcwQzAwMDFFRTNGIC8qIFJhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQyQzE1MUE4
MjVCMDA0MTIzRkYgLyogU3RyaW5nRXh0cmFzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQz
RjE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nSGFzaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0
ODc0NTQxN0EwQkRBRTAwRkEwNENCIC8qIFN0cmluZ0hhc2hEdW1wQ29udGV4dC5oIGluIEhlYWRl
cnMgKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjE0NDI3KQorKysgU291
cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw2ICsxMDAs
NyBAQCBzZXQoV1RGX0hFQURFUlMKICAgICBSQU1TaXplLmgKICAgICBSYW5kb21OdW1iZXIuaAog
ICAgIFJhbmRvbU51bWJlclNlZWQuaAorICAgIFJhbmdlLmgKICAgICBSYW5nZVNldC5oCiAgICAg
UmF3UG9pbnRlci5oCiAgICAgUmVjdXJzaXZlTG9ja0FkYXB0ZXIuaApJbmRleDogU291cmNlL1dU
Ri93dGYvRGVxdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9EZXF1ZS5oCShyZXZp
c2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvV1RGL3d0Zi9EZXF1ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTg5LDYg
Kzg5LDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZUxhc3QoKTsKICAgICB2b2lkIHJlbW92
ZShpdGVyYXRvciYpOwogICAgIHZvaWQgcmVtb3ZlKGNvbnN0X2l0ZXJhdG9yJik7CisgICAgCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4gdm9pZCByZW1vdmVBbGxNYXRjaGluZyhjb25zdCBG
dW5jJik7CisgICAgCisgICAgLy8gVGhpcyBpcyBhIHByaW9yaXR5IGVucXVldWUuIFRoZSBjYWxs
YmFjayBpcyBnaXZlbiBhIHZhbHVlLCBhbmQgaWYgaXQgcmV0dXJucyB0cnVlLCB0aGVuIHRoaXMK
KyAgICAvLyB3aWxsIHB1dCB0aGUgYXBwZW5kZWQgdmFsdWUgYmVmb3JlIHRoYXQgdmFsdWUuIEl0
IHdpbGwga2VlcCBidWJibGluZyB1bnRpbCB0aGUgY2FsbGJhY2sgcmV0dXJucworICAgIC8vIGZh
bHNlIG9yIHRoZSB2YWx1ZSBlbmRzIHVwIGF0IHRoZSBoZWFkIG9mIHRoZSBxdWV1ZS4KKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBVLCB0eXBlbmFtZSBGdW5jPgorICAgIHZvaWQgYXBwZW5kQW5kQnVi
YmxlKFUmJiwgY29uc3QgRnVuYyYpOwogCiAgICAgdm9pZCBjbGVhcigpOwogCkBAIC01MjQsNiAr
NTMyLDM2IEBAIGlubGluZSB2b2lkIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6cmUKICAgICBj
aGVja1ZhbGlkaXR5KCk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVD
YXBhY2l0eT4KK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CitpbmxpbmUgdm9pZCBEZXF1ZTxULCBp
bmxpbmVDYXBhY2l0eT46OnJlbW92ZUFsbE1hdGNoaW5nKGNvbnN0IEZ1bmMmIGZ1bmMpCit7Cisg
ICAgc2l6ZV90IGNvdW50ID0gc2l6ZSgpOworICAgIHdoaWxlIChjb3VudC0tKSB7CisgICAgICAg
IFQgdmFsdWUgPSB0YWtlRmlyc3QoKTsKKyAgICAgICAgaWYgKCFmdW5jKHZhbHVlKSkKKyAgICAg
ICAgICAgIGFwcGVuZChXVEZNb3ZlKHZhbHVlKSk7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBVLCB0eXBl
bmFtZSBGdW5jPgoraW5saW5lIHZvaWQgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+OjphcHBlbmRB
bmRCdWJibGUoVSYmIHZhbHVlLCBjb25zdCBGdW5jJiBmdW5jKQoreworICAgIGFwcGVuZChXVEZN
b3ZlKHZhbHVlKSk7CisgICAgaXRlcmF0b3IgYmVnaW4gPSB0aGlzLT5iZWdpbigpOworICAgIGl0
ZXJhdG9yIGl0ZXIgPSBlbmQoKTsKKyAgICAtLWl0ZXI7CisgICAgd2hpbGUgKGl0ZXIgIT0gYmVn
aW4pIHsKKyAgICAgICAgaXRlcmF0b3IgcHJldiA9IGl0ZXI7CisgICAgICAgIC0tcHJldjsKKyAg
ICAgICAgaWYgKCFmdW5jKCpwcmV2KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgc3Rk
Ojpzd2FwKCpwcmV2LCAqaXRlcik7CisgICAgICAgIGl0ZXIgPSBwcmV2OworICAgIH0KK30KKwog
I2lmZGVmIE5ERUJVRwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5
PiBpbmxpbmUgdm9pZCBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT46OmNoZWNr
VmFsaWRpdHkoKSBjb25zdCB7IH0KIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVD
YXBhY2l0eT4gaW5saW5lIHZvaWQgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+
OjpjaGVja1ZhbGlkaXR5KGNvbnN0IERlcXVlSXRlcmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5
PiYpIGNvbnN0IHsgfQpJbmRleDogU291cmNlL1dURi93dGYvSW5kZXhLZXlUeXBlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvSW5kZXhLZXlUeXBlLmgJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL1dURi93dGYvSW5kZXhLZXlUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJh
Z21hIG9uY2UKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1
Y3QgSW5kZXhLZXlUeXBlIHsKKyAgICBzdGF0aWMgc2l6ZV90IGluZGV4KGNvbnN0IFQmIGtleSkg
eyByZXR1cm4ga2V5LmluZGV4KCk7IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1
Y3QgSW5kZXhLZXlUeXBlPFQqPiB7CisgICAgc3RhdGljIHNpemVfdCBpbmRleChUKiBrZXkpIHsg
cmV0dXJuIGtleS0+aW5kZXgoKTsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL0luZGV4TWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
SW5kZXhNYXAuaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL1dURi93dGYvSW5kZXhNYXAu
aAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2lu
Y2x1ZGUgPHd0Zi9JbmRleEtleVR5cGUuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5h
bWVzcGFjZSBXVEYgewpAQCAtNzAsMTggKzcxLDI0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IG1fdmVjdG9yW2luZGV4XTsKICAgICB9CiAgICAgCi0gICAgVmFsdWUmIG9wZXJhdG9yW10oS2V5
KiBrZXkpCisgICAgVmFsdWUmIG9wZXJhdG9yW10oY29uc3QgS2V5JiBrZXkpCiAgICAgewotICAg
ICAgICByZXR1cm4gbV92ZWN0b3Jba2V5LT5pbmRleCgpXTsKKyAgICAgICAgcmV0dXJuIG1fdmVj
dG9yW0luZGV4S2V5VHlwZTxLZXk+OjppbmRleChrZXkpXTsKICAgICB9CiAgICAgCi0gICAgY29u
c3QgVmFsdWUmIG9wZXJhdG9yW10oS2V5KiBrZXkpIGNvbnN0CisgICAgY29uc3QgVmFsdWUmIG9w
ZXJhdG9yW10oY29uc3QgS2V5JiBrZXkpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV92
ZWN0b3Jba2V5LT5pbmRleCgpXTsKKyAgICAgICAgcmV0dXJuIG1fdmVjdG9yW0luZGV4S2V5VHlw
ZTxLZXk+OjppbmRleChrZXkpXTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhcHBlbmQoY29uc3Qg
S2V5JiBrZXksIFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoSW5k
ZXhLZXlUeXBlPEtleT46OmluZGV4KGtleSkgPT0gbV92ZWN0b3Iuc2l6ZSgpKTsKKyAgICAgICAg
bV92ZWN0b3IuYXBwZW5kKHZhbHVlKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgVmVjdG9yPFZh
bHVlPiBtX3ZlY3RvcjsKKyAgICBWZWN0b3I8VmFsdWUsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93
PiBtX3ZlY3RvcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL1dURi93
dGYvSW5kZXhTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9JbmRleFNldC5oCShy
ZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvV1RGL3d0Zi9JbmRleFNldC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSA8d3RmL0JpdFZlY3Rvci5oPgogI2lu
Y2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSW5kZXhLZXlUeXBlLmg+
CiAKIG5hbWVzcGFjZSBXVEYgewogCkBAIC00MiwzMCArNDMsMzAgQEAgcHVibGljOgogICAgIHsK
ICAgICB9CiAKLSAgICBib29sIGFkZChUKiB2YWx1ZSkKKyAgICBib29sIGFkZChjb25zdCBUJiB2
YWx1ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiAhbV9zZXQuc2V0KHZhbHVlLT5pbmRleCgpKTsK
KyAgICAgICAgcmV0dXJuICFtX3NldC5zZXQoSW5kZXhLZXlUeXBlPFQ+OjppbmRleCh2YWx1ZSkp
OwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhYmxlPgogICAgIGJvb2wgYWRk
QWxsKGNvbnN0IEl0ZXJhYmxlJiBpdGVyYWJsZSkKICAgICB7CiAgICAgICAgIGJvb2wgcmVzdWx0
ID0gZmFsc2U7Ci0gICAgICAgIGZvciAoVCogdmFsdWUgOiBpdGVyYWJsZSkKKyAgICAgICAgZm9y
IChjb25zdCBUJiB2YWx1ZSA6IGl0ZXJhYmxlKQogICAgICAgICAgICAgcmVzdWx0IHw9IGFkZCh2
YWx1ZSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgYm9vbCByZW1vdmUo
VCogdmFsdWUpCisgICAgYm9vbCByZW1vdmUoY29uc3QgVCYgdmFsdWUpCiAgICAgewotICAgICAg
ICByZXR1cm4gbV9zZXQuY2xlYXIodmFsdWUtPmluZGV4KCkpOworICAgICAgICByZXR1cm4gbV9z
ZXQuY2xlYXIoSW5kZXhLZXlUeXBlPFQ+OjppbmRleCh2YWx1ZSkpOwogICAgIH0KIAotICAgIGJv
b2wgY29udGFpbnMoVCogdmFsdWUpIGNvbnN0CisgICAgYm9vbCBjb250YWlucyhjb25zdCBUJiB2
YWx1ZSkgY29uc3QKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBtX3NldC5nZXQodmFsdWUtPmluZGV4KCkpOworICAg
ICAgICByZXR1cm4gbV9zZXQuZ2V0KEluZGV4S2V5VHlwZTxUPjo6aW5kZXgodmFsdWUpKTsKICAg
ICB9CiAKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0CkBAIC0xMDAsNyArMTAxLDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgewogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBUKiBvcGVyYXRv
ciooKQorICAgICAgICAgICAgVCBvcGVyYXRvciooKQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIHJldHVybiBtX2NvbGxlY3Rpb24tPmF0KCptX2l0ZXIpOwogICAgICAgICAgICAgfQpJ
bmRleDogU291cmNlL1dURi93dGYvUmFuZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9SYW5nZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL1JhbmdlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPGxpbWl0cy5o
PgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFt
Lmg+CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBOb3RlIHRoYXQgdGhlICdiZWdpbicgaXMgaW5j
bHVzaXZlLCB3aGlsZSB0aGUgJ2VuZCcgaXMgZXhjbHVzaXZlLiBUaGVzZSB0d28gcmFuZ2VzIGFy
ZSBub24tCisvLyBvdmVybGFwcGluZzoKKy8vCisvLyAgICAgcmFuZ2VBID0gMC4uLjgKKy8vICAg
ICByYW5nZUIgPSA4Li4uMTYKKwordGVtcGxhdGU8dHlwZW5hbWUgUGFzc2VkVHlwZT4KK2NsYXNz
IFJhbmdlIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFBhc3NlZFR5cGUgVHlwZTsKKyAgICAKKyAg
ICBSYW5nZSgpCisgICAgICAgIDogbV9iZWdpbigwKQorICAgICAgICAsIG1fZW5kKDApCisgICAg
eworICAgIH0KKworICAgIGV4cGxpY2l0IFJhbmdlKFR5cGUgdmFsdWUpCisgICAgICAgIDogbV9i
ZWdpbih2YWx1ZSkKKyAgICAgICAgLCBtX2VuZCh2YWx1ZSArIDEpCisgICAgeworICAgICAgICBB
U1NFUlQobV9lbmQgPj0gbV9iZWdpbik7CisgICAgfQorCisgICAgUmFuZ2UoVHlwZSBiZWdpbiwg
VHlwZSBlbmQpCisgICAgICAgIDogbV9iZWdpbihiZWdpbikKKyAgICAgICAgLCBtX2VuZChlbmQp
CisgICAgeworICAgICAgICBBU1NFUlQobV9lbmQgPj0gbV9iZWdpbik7CisgICAgICAgIGlmICht
X2JlZ2luID09IG1fZW5kKSB7CisgICAgICAgICAgICAvLyBDYW5vbmljYWxpemUgZW1wdHkgcmFu
Z2VzLgorICAgICAgICAgICAgbV9iZWdpbiA9IDA7CisgICAgICAgICAgICBtX2VuZCA9IDA7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgUmFuZ2UgdG9wKCkKKyAgICB7CisgICAgICAg
IHJldHVybiBSYW5nZShzdGQ6Om51bWVyaWNfbGltaXRzPFR5cGU+OjptaW4oKSwgc3RkOjpudW1l
cmljX2xpbWl0czxUeXBlPjo6bWF4KCkpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBSYW5nZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9iZWdpbiA9
PSBvdGhlci5tX2JlZ2luCisgICAgICAgICAgICAmJiBtX2VuZCA9PSBvdGhlci5tX2VuZDsKKyAg
ICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgUmFuZ2UmIG90aGVyKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKyAgICAKKyAgICBl
eHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9iZWdpbiAhPSBtX2VuZDsg
fQorCisgICAgUmFuZ2Ugb3BlcmF0b3J8KGNvbnN0IFJhbmdlJiBvdGhlcikgY29uc3QKKyAgICB7
CisgICAgICAgIGlmICghKnRoaXMpCisgICAgICAgICAgICByZXR1cm4gb3RoZXI7CisgICAgICAg
IGlmICghb3RoZXIpCisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIHJldHVybiBS
YW5nZSgKKyAgICAgICAgICAgIHN0ZDo6bWluKG1fYmVnaW4sIG90aGVyLm1fYmVnaW4pLAorICAg
ICAgICAgICAgc3RkOjptYXgobV9lbmQsIG90aGVyLm1fZW5kKSk7CisgICAgfQorICAgIAorICAg
IFJhbmdlJiBvcGVyYXRvcnw9KGNvbnN0IFJhbmdlJiBvdGhlcikKKyAgICB7CisgICAgICAgIHJl
dHVybiAqdGhpcyA9ICp0aGlzIHwgb3RoZXI7CisgICAgfQorICAgIAorICAgIFR5cGUgYmVnaW4o
KSBjb25zdCB7IHJldHVybiBtX2JlZ2luOyB9CisgICAgVHlwZSBlbmQoKSBjb25zdCB7IHJldHVy
biBtX2VuZDsgfQorCisgICAgYm9vbCBvdmVybGFwcyhjb25zdCBSYW5nZSYgb3RoZXIpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpyYW5nZXNPdmVybGFwKG1fYmVnaW4sIG1fZW5k
LCBvdGhlci5tX2JlZ2luLCBvdGhlci5tX2VuZCk7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoKnRoaXMgPT0gUmFuZ2Uo
KSkgeworICAgICAgICAgICAgb3V0LnByaW50KCJCb3R0b20iKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBpZiAoKnRoaXMgPT0gdG9wKCkpIHsKKyAgICAgICAgICAg
IG91dC5wcmludCgiVG9wIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKG1fYmVnaW4gPT0gbV9lbmQgKyAxKSB7CisgICAgICAgICAgICBvdXQucHJpbnQobV9i
ZWdpbik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgb3V0LnByaW50
KG1fYmVnaW4sICIuLi4iLCBtX2VuZCk7CisgICAgfQorCitwcml2YXRlOgorICAgIFR5cGUgbV9i
ZWdpbjsKKyAgICBUeXBlIG1fZW5kOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5n
IFdURjo6UmFuZ2U7CisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1JhbmdlU2V0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvUmFuZ2VTZXQuaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291
cmNlL1dURi93dGYvUmFuZ2VTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsNiArNzcsMTAgQEAg
cHVibGljOgogICAgICAgICBtX2lzQ29tcGFjdCA9IGZhbHNlOwogCiAgICAgICAgIC8vIFdlIGFw
cGVuZCB3aXRob3V0IGNvbXBhY3Rpbmcgb25seSBpZiBkb2luZyBzbyBpcyBndWFyYW50ZWVkIG5v
dCB0byByZXNpemUgdGhlIHZlY3Rvci4KKyAgICAgICAgLy8gRklYTUU6IFRoaXMgaGV1cmlzdGlj
IGlzIGFsbW9zdCBjZXJ0YWlubHkgd3JvbmcsIGJlY2F1c2Ugd2UgZG9uJ3QgY29udHJvbCB0aGUg
Y2FwYWNpdHkuIEkKKyAgICAgICAgLy8gdGhpbmsgdGhhdCB0aGlzIG1lYW5zIHRoYXQgd2Ugd2ls
bCBzb21ldGltZXMgYmUgcmFnZS1jb21wYWN0aW5nIHdoZW4gd2UgYXJlIGp1c3Qgc2h5IG9mIHRo
ZQorICAgICAgICAvLyBjYXBhY2l0eS4KKyAgICAgICAgLy8gT09QUzogbmVlZCBidWcgdXJsCiAg
ICAgICAgIGlmIChtX3Jhbmdlcy5zaXplKCkgKyAxIDwgbV9yYW5nZXMuY2FwYWNpdHkoKSkgewog
ICAgICAgICAgICAgbV9yYW5nZXMuYXBwZW5kKHJhbmdlKTsKICAgICAgICAgICAgIHJldHVybjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305690</attachid>
            <date>2017-03-28 18:34:28 -0700</date>
            <delta_ts>2017-03-28 18:53:11 -0700</delta_ts>
            <desc>seems like it&apos;s starting to work</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>112347</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIxNDQyNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMTQwLDcgKzE0MCw2IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYjMvQjNG
b2xkUGF0aENvbnN0YW50cy5jcHAKICAgICBiMy9CM0ZyZXF1ZW5jeUNsYXNzLmNwcAogICAgIGIz
L0IzR2VuZXJhdGUuY3BwCi0gICAgYjMvQjNIZWFwUmFuZ2UuY3BwCiAgICAgYjMvQjNJbmZlclN3
aXRjaGVzLmNwcAogICAgIGIzL0IzSW5zZXJ0aW9uU2V0LmNwcAogICAgIGIzL0IzS2luZC5jcHAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTgzLDYgKzE4MywxMCBAQAogCQkwRjI1RjFCMjE4MTYz
NUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1RjFBQjE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xv
d1BhdGhDYWxsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEYyNUYxQjMxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1RjFBQzE4
MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5LmNwcCAqLzsgfTsKIAkJMEYyNUYx
QjQxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNUYxQUQxODE2MzVGMzAwNTIyRjM5
IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGMkFDNTY2MUU4QTBCNzcwMDAxRUUzRiAvKiBBaXJGaXhTcGls
bHNBZnRlclRlcm1pbmFscy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjJBQzU2NDFFOEEwQjc2MDAwMUVFM0YgLyogQWlyRml4U3BpbGxzQWZ0ZXJU
ZXJtaW5hbHMuY3BwICovOyB9OworCQkwRjJBQzU2NzFFOEEwQjc5MDAwMUVFM0YgLyogQWlyRml4
U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMkFDNTY1MUU4QTBCNzYwMDAxRUUzRiAvKiBBaXJGaXhTcGlsbHNBZnRl
clRlcm1pbmFscy5oICovOyB9OworCQkwRjJBQzU2QTFFOEEwQkQzMDAwMUVFM0YgLyogQWlyQWxs
b2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQUM1NjgxRThBMEJEMTAwMDFFRTNGIC8qIEFpckFsbG9j
YXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcCAqLzsgfTsKKwkJMEYyQUM1NkIxRThBMEJENTAw
MDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJBQzU2OTFFOEEwQkQxMDAwMUVF
M0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaCAqLzsgfTsKIAkJMEYyQjY2
QUMxN0I2QjUzRjAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBODE3QjZCNTNEMDBBN0FF
M0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJCNjZBRDE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNv
bWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJCNjZBOTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNv
dW50ZWRJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEYyQjY2QUUxN0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVk
U2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJC
NjZBQTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTY5LDcgKzk3Myw2
IEBACiAJCTBGRUM4NUJDMUJFMTQ2MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0cmVuZ3RoLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUI3MUJF
MTQ2MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0cmVuZ3RoLmNwcCAqLzsgfTsKIAkJMEZFQzg1QkQx
QkUxNDYyRjAwODBGRjc0IC8qIEIzUmVkdWNlU3RyZW5ndGguaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUI4MUJFMTQ2MkYwMDgwRkY3NCAvKiBC
M1JlZHVjZVN0cmVuZ3RoLmggKi87IH07CiAJCTBGRUM4NUMxMUJFMTY3QTAwMDgwRkY3NCAvKiBC
M0VmZmVjdHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NUJFMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0VmZmVjdHMuaCAqLzsgfTsKLQkJMEZFQzg1
QzIxQkUxNjdBMDAwODBGRjc0IC8qIEIzSGVhcFJhbmdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUJGMUJFMTY3QTAwMDgwRkY3NCAvKiBC
M0hlYXBSYW5nZS5jcHAgKi87IH07CiAJCTBGRUM4NUMzMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hl
YXBSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg1QzAxQkUxNjdBMDAwODBGRjc0IC8qIEIzSGVhcFJhbmdlLmggKi87IH07CiAJCTBGRUM4
NUM1MUJFMTZGNUEwMDgwRkY3NCAvKiBCM0VmZmVjdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1QzQxQkUxNkY1QTAwODBGRjc0IC8qIEIz
RWZmZWN0cy5jcHAgKi87IH07CiAJCTBGRUQ2N0I5MUIyNjI1NkQwMDY2Q0UxNSAvKiBERkdDb25z
dGFudEhvaXN0aW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFRDY3QjcxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0YW50SG9pc3Rp
bmdQaGFzZS5jcHAgKi87IH07CkBAIC0yNzAzLDYgKzI3MDYsMTAgQEAKIAkJMEYyNUYxQUIxODE2
MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBGVExTbG93UGF0aENhbGwuaDsgcGF0aCA9IGZ0bC9GVExTbG93UGF0aENhbGwu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNUYxQUMxODE2MzVGMzAwNTIyRjM5
IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBGVExTbG93UGF0aENhbGxLZXkuY3BwOyBwYXRoID0gZnRsL0ZUTFNsb3dQYXRoQ2Fs
bEtleS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjVGMUFEMTgxNjM1RjMw
MDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gRlRMU2xvd1BhdGhDYWxsS2V5Lmg7IHBhdGggPSBmdGwvRlRMU2xvd1BhdGhDYWxs
S2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkFDNTY0MUU4QTBCNzYwMDAx
RUUzRiAvKiBBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5jcHA7IHBhdGgg
PSBiMy9haXIvQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjJBQzU2NTFFOEEwQjc2MDAwMUVFM0YgLyogQWlyRml4U3BpbGxzQWZ0
ZXJUZXJtaW5hbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyRml4U3Bp
bGxzQWZ0ZXJUZXJtaW5hbHMuaDsgcGF0aCA9IGIzL2Fpci9BaXJGaXhTcGlsbHNBZnRlclRlcm1p
bmFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJBQzU2ODFFOEEwQkQxMDAw
MUVFM0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNj
YW4uY3BwOyBwYXRoID0gYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQUM1NjkxRThBMEJEMTAwMDFFRTNG
IC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmg7IHBhdGgg
PSBiMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQjY2QTgxN0I2QjUzRDAwQTdBRTNGIC8qIEdDSW5jb21pbmdS
ZWZDb3VudGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5jb21pbmdSZWZDb3VudGVkLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkE5MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0lu
Y29taW5nUmVmQ291bnRlZElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR0NJbmNvbWluZ1JlZkNv
dW50ZWRJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkFBMTdC
NkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMzQ5Niw3ICszNTAzLDYgQEAKIAkJMEZFQzg1QjcxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVk
dWNlU3RyZW5ndGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNS
ZWR1Y2VTdHJlbmd0aC5jcHA7IHBhdGggPSBiMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQzg1QjgxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVk
dWNlU3RyZW5ndGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNSZWR1Y2VT
dHJlbmd0aC5oOyBwYXRoID0gYjMvQjNSZWR1Y2VTdHJlbmd0aC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkVDODVCRTFCRTE2N0EwMDA4MEZGNzQgLyogQjNFZmZlY3RzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzRWZmZWN0cy5oOyBwYXRoID0gYjMvQjNF
ZmZlY3RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGRUM4NUJGMUJFMTY3QTAw
MDgwRkY3NCAvKiBCM0hlYXBSYW5nZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBCM0hlYXBSYW5nZS5jcHA7IHBhdGggPSBiMy9CM0hlYXBSYW5nZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUM4NUMwMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hl
YXBSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0hlYXBSYW5nZS5o
OyBwYXRoID0gYjMvQjNIZWFwUmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZFQzg1QzQxQkUxNkY1QTAwODBGRjc0IC8qIEIzRWZmZWN0cy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0VmZmVjdHMuY3BwOyBwYXRoID0gYjMvQjNFZmZlY3Rz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFRDY3QjcxQjI2MjU2RDAwNjZD
RTE1IC8qIERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuY3BwOyBwYXRoID0gZGZn
L0RGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01NDE5LDcgKzU0MjUsNiBAQAogCQkJCTBGRUM4NENGMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0dlbmVyYXRlLmggKi8sCiAJCQkJMEYyQzYzQjUxRTYzNDNFODAwQzEzODM5IC8qIEIzR2VuZXJp
Y0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi8sCiAJCQkJMEZFQzg0RDAxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oICovLAotCQkJCTBGRUM4NUJGMUJFMTY3QTAwMDgw
RkY3NCAvKiBCM0hlYXBSYW5nZS5jcHAgKi8sCiAJCQkJMEZFQzg1QzAxQkUxNjdBMDAwODBGRjc0
IC8qIEIzSGVhcFJhbmdlLmggKi8sCiAJCQkJREM2OUI5OUExRDE1RjkwRjAwMkUzQzAwIC8qIEIz
SW5mZXJTd2l0Y2hlcy5jcHAgKi8sCiAJCQkJREM2OUI5OUIxRDE1RjkwRjAwMkUzQzAwIC8qIEIz
SW5mZXJTd2l0Y2hlcy5oICovLApAQCAtNTUyOCw2ICs1NTMzLDggQEAKIAkJMEZFQzg0QjMxQkRB
Q0Q4ODAwODBGRjc0IC8qIGFpciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCisJCQkJMEYyQUM1NjgxRThBMEJEMTAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0
ZXJzQnlMaW5lYXJTY2FuLmNwcCAqLywKKwkJCQkwRjJBQzU2OTFFOEEwQkQxMDAwMUVFM0YgLyog
QWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaCAqLywKIAkJCQk3OTY1QzIxNDFFNUQ3
OTk2MDBCNzU5MUQgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuY3BwICov
LAogCQkJCTc5NjVDMjE1MUU1RDc5OTYwMEI3NTkxRCAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5
R3JhcGhDb2xvcmluZy5oICovLAogCQkJCTBGRUM4NTQ4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJB
bGxvY2F0ZVN0YWNrLmNwcCAqLywKQEAgLTU1NjEsNiArNTU2OCw4IEBACiAJCQkJMEY0REUxQ0Qx
QzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCAqLywKIAkJCQkyNjJEODVC
NDFDMEQ2NTBGMDA2QUNCNjEgLyogQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmNwcCAqLywK
IAkJCQkyNjJEODVCNTFDMEQ2NTBGMDA2QUNCNjEgLyogQWlyRml4UGFydGlhbFJlZ2lzdGVyU3Rh
bGxzLmggKi8sCisJCQkJMEYyQUM1NjQxRThBMEI3NjAwMDFFRTNGIC8qIEFpckZpeFNwaWxsc0Fm
dGVyVGVybWluYWxzLmNwcCAqLywKKwkJCQkwRjJBQzU2NTFFOEEwQjc2MDAwMUVFM0YgLyogQWly
Rml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCAqLywKIAkJCQkwRkVDODU1MjFCREFDREM3MDA4MEZG
NzQgLyogQWlyRnJlcXVlbnRlZEJsb2NrLmggKi8sCiAJCQkJMEZFQzg1NTMxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckdlbmVyYXRlLmNwcCAqLywKIAkJCQkwRkVDODU1NDFCREFDREM3MDA4MEZGNzQg
LyogQWlyR2VuZXJhdGUuaCAqLywKQEAgLTgxMzksNiArODE0OCw3IEBACiAJCQkJMEZFQzg1MTAx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkVDODUxMjFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0MzQyMkE2MzFDMTU4RTZEMDBFMkVCOTggLyogQjNDb25zdEZsb2F0VmFsdWUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkFDNTZCMUU4QTBCRDUwMDAxRUUzRiAvKiBBaXJBbGxv
Y2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1QjMx
QkRFRDk1NzAwODBGRjc0IC8qIEIzQ29uc3RQdHJWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYzMzhERjYxQkU5M0Q1NTAwMTNDODhGIC8qIEIzQ29uc3RyYWluZWRWYWx1ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyQzYzQjgxRTYzNDNGNzAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2NrSW5z
ZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKQEAgLTkzNjIsNiArOTM3Miw3IEBACiAJCQkJNzA5
RkI4NkExQUUzMzVDNjAwMzlEMDY5IC8qIFdlYWtTZXRDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMTQxNTAxMzMxNTRCQjEzRjAwNUQ4Qzk4IC8qIFdlYWtTZXRJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3MDlGQjg2QzFBRTMzNUM2MDAzOUQwNjkgLyogV2Vha1NldFByb3Rv
dHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQUM1NjcxRThBMEI3OTAwMDFFRTNGIC8qIEFp
ckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JFRDFE
QjU4REFEMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNDMTYxREI1OUNCMjAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5
Q29tcGlsZUVycm9yQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JF
RjFEQjU4REFEMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90b3R5cGUuaCBp
biBIZWFkZXJzICovLApAQCAtOTk4OCw3ICs5OTk5LDYgQEAKIAkJCQkwRjcyNUNBRjFDNTA2RDNC
MDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkVDODUxNTFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkVDODUxODFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQkwRkVDODVDMjFCRTE2N0EwMDA4MEZGNzQgLyogQjNIZWFwUmFuZ2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJREM2OUI5OUMxRDE1RjkxMjAwMkUzQzAwIC8qIEIzSW5m
ZXJTd2l0Y2hlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVDODVCOTFCRTE0NjJGMDA4MEZG
NzQgLyogQjNJbnNlcnRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZERjY3RDMxRDlD
NkQyQTAwMUI5ODI1IC8qIEIzS2luZC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMTU0LDYgKzEw
MTY0LDcgQEAKIAkJCQlBNzhBOTc3NjE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkJEQzE1MTUxQzVENEQwMENEODkxMCAvKiBERkdGaXh1
cFBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjAxNzdGMURDQURDMzMwMEVBNTk1MCAv
KiBERkdGbG93SW5kZXhpbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQUM1NkExRThBMEJE
MzAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGOUQzMzk2MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRjcxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0ZsdXNo
Rm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNjlDQzg4MTkzQUM2MEEwMDQ1NzU5RSAv
KiBERkdGcm96ZW5WYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMjYzLDYgKzEwMjc0LDcg
QEAKIAkJCQkyQTgzNjM4NTE4RDdEMEVFMDAwMEVCQ0MgLyogRWRlbkdDQWN0aXZpdHlDYWxsYmFj
ay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OUU0NUEyNTE4QTFCMjU5MDAyNkQ4OEYgLyogRW5j
b2RlZFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUM3MTA3RUMzNzYwMDQyN0E0
OCAvKiBFcnJvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJBQzU2NjFFOEEwQjc3MDAwMUVF
M0YgLyogQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQ3RjM5QzgxMDdFQzM3NjAwNDI3QTQ4IC8qIEVycm9yQ29uc3RydWN0b3IuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRkVCNThDMTQxODdCOEIxNjAwOThFRjBCIC8qIEVycm9ySGFuZGxpbmdTY29w
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDOTEwN0VDMzc2MDA0MjdBNDggLyogRXJy
b3JJbnN0YW5jZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrVXRpbHMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTE0LDcgKzExNCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+CiBWZWN0b3I8QmFz
aWNCbG9jayo+IGJsb2Nrc0luUHJlT3JkZXIoQmFzaWNCbG9jayogcm9vdCkKIHsKICAgICBWZWN0
b3I8QmFzaWNCbG9jayo+IHJlc3VsdDsKLSAgICBHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2Nr
KiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IHdvcmtsaXN0OworICAgIEdyYXBoTm9kZVdvcmtsaXN0
PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+IHdvcmtsaXN0OwogICAgIHdvcmts
aXN0LnB1c2gocm9vdCk7CiAgICAgd2hpbGUgKEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3Qu
cG9wKCkpIHsKICAgICAgICAgcmVzdWx0LmFwcGVuZChibG9jayk7CkBAIC0xMjgsNyArMTI4LDcg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KIFZlY3RvcjxCYXNpY0Jsb2NrKj4gYmxv
Y2tzSW5Qb3N0T3JkZXIoQmFzaWNCbG9jayogcm9vdCkKIHsKICAgICBWZWN0b3I8QmFzaWNCbG9j
ayo+IHJlc3VsdDsKLSAgICBQb3N0T3JkZXJHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwg
SW5kZXhTZXQ8QmFzaWNCbG9jaz4+IHdvcmtsaXN0OworICAgIFBvc3RPcmRlckdyYXBoTm9kZVdv
cmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+IHdvcmtsaXN0OwogICAg
IHdvcmtsaXN0LnB1c2gocm9vdCk7CiAgICAgd2hpbGUgKEdyYXBoTm9kZVdpdGhPcmRlcjxCYXNp
Y0Jsb2NrKj4gaXRlbSA9IHdvcmtsaXN0LnBvcCgpKSB7CiAgICAgICAgIHN3aXRjaCAoaXRlbS5v
cmRlcikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tXb3JrbGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrV29ya2xpc3Qu
aAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tX
b3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CiAKIGNsYXNzIEJhc2ljQmxvY2s7CiAKLXR5cGVkZWYgR3JhcGhOb2RlV29y
a2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2s+PiBCbG9ja1dvcmtsaXN0Owor
dHlwZWRlZiBHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9j
ayo+PiBCbG9ja1dvcmtsaXN0OwogCiAvLyBXaGVuIHlvdSBzYXkgQmxvY2tXaXRoPGludD4geW91
IHNob3VsZCByZWFkIGl0IGFzICJibG9jayB3aXRoIGFuIGludCIuCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB1c2luZyBCbG9ja1dpdGggPSBHcmFwaE5vZGVXaXRoPEJhc2ljQmxvY2sqLCBUPjsKQEAg
LTQ0LDEzICs0NCwxMyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBCbG9ja1dpdGggPSBH
CiAvLyBwZXJtaXRzIGZvcmNpYmx5IGVucXVldWVpbmcgdGhpbmdzIGV2ZW4gaWYgdGhlIGJsb2Nr
IGhhcyBhbHJlYWR5IGJlZW4gc2Vlbi4gSXQncyB1c2VmdWwgZm9yCiAvLyB0aGluZ3MgbGlrZSBi
dWlsZGluZyBhIHNwYW5uaW5nIHRyZWUsIGluIHdoaWNoIGNhc2UgVCAodGhlIGF1eGlsaWFyeSBw
YXlsb2FkKSB3b3VsZCBiZSB0aGUKIC8vIHN1Y2Nlc3NvciBpbmRleC4KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3JrbGlzdCA9IEV4dGVuZGVkR3JhcGhOb2RlV29y
a2xpc3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0PEJhc2ljQmxvY2s+PjsKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3JrbGlzdCA9IEV4dGVuZGVkR3JhcGhOb2Rl
V29ya2xpc3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0PEJhc2ljQmxvY2sqPj47CiAKIHR5cGVk
ZWYgR3JhcGhWaXNpdE9yZGVyIFZpc2l0T3JkZXI7CiAKIHR5cGVkZWYgR3JhcGhOb2RlV2l0aE9y
ZGVyPEJhc2ljQmxvY2sqPiBCbG9ja1dpdGhPcmRlcjsKIAotdHlwZWRlZiBQb3N0T3JkZXJHcmFw
aE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IFBvc3RPcmRl
ckJsb2NrV29ya2xpc3Q7Cit0eXBlZGVmIFBvc3RPcmRlckdyYXBoTm9kZVdvcmtsaXN0PEJhc2lj
QmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+IFBvc3RPcmRlckJsb2NrV29ya2xpc3Q7CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDRkcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDRkcu
aAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ0ZHLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzksOCArMzksOCBAQCBjbGFzcyBDRkcgewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIHR5cGVkZWYgQmFzaWNCbG9jayogTm9kZTsKLSAg
ICB0eXBlZGVmIEluZGV4U2V0PEJhc2ljQmxvY2s+IFNldDsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB1c2luZyBNYXAgPSBJbmRleE1hcDxCYXNpY0Jsb2NrLCBUPjsKKyAgICB0eXBlZGVmIElu
ZGV4U2V0PEJhc2ljQmxvY2sqPiBTZXQ7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcg
TWFwID0gSW5kZXhNYXA8QmFzaWNCbG9jayosIFQ+OwogICAgIHR5cGVkZWYgVmVjdG9yPEJhc2lj
QmxvY2sqLCA0PiBMaXN0OwogCiAgICAgQ0ZHKFByb2NlZHVyZSYgcHJvYykKQEAgLTUxLDcgKzUx
LDcgQEAgcHVibGljOgogICAgIE5vZGUgcm9vdCgpIHsgcmV0dXJuIG1fcHJvY1swXTsgfQogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBNYXA8VD4gbmV3TWFwKCkgeyByZXR1cm4gSW5k
ZXhNYXA8SlNDOjpCMzo6QmFzaWNCbG9jaywgVD4obV9wcm9jLnNpemUoKSk7IH0KKyAgICBNYXA8
VD4gbmV3TWFwKCkgeyByZXR1cm4gSW5kZXhNYXA8SlNDOjpCMzo6QmFzaWNCbG9jayosIFQ+KG1f
cHJvYy5zaXplKCkpOyB9CiAKICAgICBTdWNjZXNzb3JDb2xsZWN0aW9uPEJhc2ljQmxvY2ssIEJh
c2ljQmxvY2s6OlN1Y2Nlc3Nvckxpc3Q+IHN1Y2Nlc3NvcnMoTm9kZSBub2RlKSB7IHJldHVybiBu
b2RlLT5zdWNjZXNzb3JCbG9ja3MoKTsgfQogICAgIEJhc2ljQmxvY2s6OlByZWRlY2Vzc29yTGlz
dCYgcHJlZGVjZXNzb3JzKE5vZGUgbm9kZSkgeyByZXR1cm4gbm9kZS0+cHJlZGVjZXNzb3JzKCk7
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCShyZXZpc2lvbiAyMTQ0Mjcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uaAkod29ya2luZyBjb3B5KQpA
QCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShCM19KSVQpCiAKICNpbmNsdWRlICJKU0V4cG9y
dE1hY3Jvcy5oIgorI2luY2x1ZGUgIk9wdGlvbnMuaCIKICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CkBAIC0xNzAsNiArMTcxLDEzIEBA
IHN0YXRpYyBJbnRUeXBlIHJvdGF0ZUxlZnQoSW50VHlwZSB2YWx1ZSwKICAgICByZXR1cm4gKHVW
YWx1ZSA8PCBzaGlmdCkgfCAodVZhbHVlID4+ICgoYml0cyAtIHNoaWZ0KSAmIG1hc2spKTsKIH0K
IAoraW5saW5lIHVuc2lnbmVkIGRlZmF1bHRPcHRMZXZlbCgpCit7CisgICAgLy8gVGhpcyBzaG91
bGQgYWxtb3N0IGFsd2F5cyByZXR1cm4gMiwgYnV0IHdlIGFsbG93IHRoaXMgZGVmYXVsdCB0byBi
ZSBsb3dlcmVkIGZvciB0ZXN0aW5nLiBTb21lCisgICAgLy8gY29tcG9uZW50cyB3aWxsIGRlbGli
ZXJhdGVseSBzZXQgdGhlIG9wdExldmVsLgorICAgIHJldHVybiBPcHRpb25zOjpkZWZhdWx0QjNP
cHRMZXZlbCgpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKIAogI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsZS5oCShyZXZp
c2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShCM19KSVQpCiAKKyNp
bmNsdWRlICJCM0NvbW1vbi5oIgogI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKIAogbmFtZXNw
YWNlIEpTQyB7CkBAIC00NSw3ICs0Niw3IEBAIGNsYXNzIFByb2NlZHVyZTsKIC8vIFRoZW4geW91
IGtlZXAgdGhlIENvbXBpbGF0aW9uIG9iamVjdCBhbGl2ZSBmb3IgYXMgbG9uZyBhcyB5b3Ugd2Fu
dCB0byBiZSBhYmxlIHRvIHJ1biB0aGUgY29kZS4KIC8vIElmIHRoaXMgQVBJIGZlZWxzIHRvbyBo
aWdoLWxldmVsLCB5b3UgY2FuIHVzZSBCMzo6Z2VuZXJhdGUoKSBkaXJlY3RseS4KIAotSlNfRVhQ
T1JUX1BSSVZBVEUgQ29tcGlsYXRpb24gY29tcGlsZShWTSYsIFByb2NlZHVyZSYsIHVuc2lnbmVk
IG9wdExldmVsID0gMSk7CitKU19FWFBPUlRfUFJJVkFURSBDb21waWxhdGlvbiBjb21waWxlKFZN
JiwgUHJvY2VkdXJlJiwgdW5zaWduZWQgb3B0TGV2ZWwgPSBkZWZhdWx0T3B0TGV2ZWwoKSk7CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNEdXBsaWNhdGVUYWlscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzRHVwbGljYXRlVGFpbHMuY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNEdXBsaWNhdGVUYWlscy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY4LDcgKzY4LDcgQEAgcHVibGljOgogCiAgICAgICAgIG1fcHJvYy5yZXNldFZhbHVlT3duZXJz
KCk7CiAKLSAgICAgICAgSW5kZXhTZXQ8QmFzaWNCbG9jaz4gY2FuZGlkYXRlczsKKyAgICAgICAg
SW5kZXhTZXQ8QmFzaWNCbG9jayo+IGNhbmRpZGF0ZXM7CiAKICAgICAgICAgZm9yIChCYXNpY0Js
b2NrKiBibG9jayA6IG1fcHJvYykgewogICAgICAgICAgICAgaWYgKGJsb2NrLT5zaXplKCkgPiBt
X21heFNpemUpCkBAIC04Miw3ICs4Miw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogCiAgICAgICAg
IC8vIENvbGxlY3QgdGhlIHNldCBvZiB2YWx1ZXMgdGhhdCBtdXN0IGJlIGRlLVNTQSdkLgotICAg
ICAgICBJbmRleFNldDxWYWx1ZT4gdmFsdWVzVG9EZW1vdGU7CisgICAgICAgIEluZGV4U2V0PFZh
bHVlKj4gdmFsdWVzVG9EZW1vdGU7CiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBt
X3Byb2MpIHsKICAgICAgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogKmJsb2NrKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSA9PSBQaGkgJiYgY2FuZGlkYXRlcy5jb250
YWlucyhibG9jaykpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVD
b21tb25TdWJleHByZXNzaW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuY3BwCShyZXZpc2lvbiAyMTQ0
MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVDb21tb25TdWJleHBy
ZXNzaW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4Miw3ICs2ODIsNyBAQCBwcml2YXRlOgog
ICAgIERvbWluYXRvcnMmIG1fZG9taW5hdG9yczsKICAgICBQdXJlQ1NFIG1fcHVyZUNTRTsKICAg
ICAKLSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBJbXB1cmVCbG9ja0RhdGE+IG1faW1wdXJlQmxv
Y2tEYXRhOworICAgIEluZGV4TWFwPEJhc2ljQmxvY2sqLCBJbXB1cmVCbG9ja0RhdGE+IG1faW1w
dXJlQmxvY2tEYXRhOwogCiAgICAgSW1wdXJlQmxvY2tEYXRhIG1fZGF0YTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRml4U1NBLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNGaXhTU0EuY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGaXhTU0EuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3
ICs0OSw3IEBAIG5hbWVzcGFjZSB7CiBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIH0gLy8g
YW5vbnltb3VzIG5hbWVzcGFjZQogCi12b2lkIGRlbW90ZVZhbHVlcyhQcm9jZWR1cmUmIHByb2Ms
IGNvbnN0IEluZGV4U2V0PFZhbHVlPiYgdmFsdWVzKQordm9pZCBkZW1vdGVWYWx1ZXMoUHJvY2Vk
dXJlJiBwcm9jLCBjb25zdCBJbmRleFNldDxWYWx1ZSo+JiB2YWx1ZXMpCiB7CiAgICAgSGFzaE1h
cDxWYWx1ZSosIFZhcmlhYmxlKj4gbWFwOwogICAgIEhhc2hNYXA8VmFsdWUqLCBWYXJpYWJsZSo+
IHBoaU1hcDsKQEAgLTEyMSw3ICsxMjEsNyBAQCBib29sIGZpeFNTQShQcm9jZWR1cmUmIHByb2Mp
CiAgICAgLy8gSnVzdCBmb3Igc2FuaXR5LCByZW1vdmUgYW55IHVudXNlZCB2YXJpYWJsZXMgZmly
c3QuIEl0J3MgdW5saWtlbHkgdGhhdCB0aGlzIGNvZGUgaGFzIGFueQogICAgIC8vIGJ1Z3MgaGF2
aW5nIHRvIGRvIHdpdGggZGVhZCB2YXJpYWJsZXMsIGJ1dCBpdCB3b3VsZCBiZSBzaWxseSB0byBo
YXZlIHRvIGZpeCBzdWNoIGEgYnVnIGlmCiAgICAgLy8gaXQgZGlkIGFyaXNlLgotICAgIEluZGV4
U2V0PFZhcmlhYmxlPiBsaXZlVmFyaWFibGVzOworICAgIEluZGV4U2V0PFZhcmlhYmxlKj4gbGl2
ZVZhcmlhYmxlczsKICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IHByb2MudmFsdWVzKCkpIHsKICAg
ICAgICAgaWYgKFZhcmlhYmxlVmFsdWUqIHZhcmlhYmxlVmFsdWUgPSB2YWx1ZS0+YXM8VmFyaWFi
bGVWYWx1ZT4oKSkKICAgICAgICAgICAgIGxpdmVWYXJpYWJsZXMuYWRkKHZhcmlhYmxlVmFsdWUt
PnZhcmlhYmxlKCkpOwpAQCAtMTQ1LDcgKzE0NSw3IEBAIGJvb2wgZml4U1NBKFByb2NlZHVyZSYg
cHJvYykKIAogICAgIC8vIENyZWF0ZSBhIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlICgiY2FsY1Zh
ciIpIGZvciBldmVyeSB2YXJpYWJsZS4KICAgICBWZWN0b3I8VmFyaWFibGUqPiBjYWxjVmFyVG9W
YXJpYWJsZTsKLSAgICBJbmRleE1hcDxWYXJpYWJsZSwgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUq
PiB2YXJpYWJsZVRvQ2FsY1Zhcihwcm9jLnZhcmlhYmxlcygpLnNpemUoKSk7CisgICAgSW5kZXhN
YXA8VmFyaWFibGUqLCBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSo+IHZhcmlhYmxlVG9DYWxjVmFy
KHByb2MudmFyaWFibGVzKCkuc2l6ZSgpKTsKIAogICAgIGZvciAoVmFyaWFibGUqIHZhcmlhYmxl
IDogcHJvYy52YXJpYWJsZXMoKSkgewogICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSog
Y2FsY1ZhciA9IHNzYS5uZXdWYXJpYWJsZSgpOwpAQCAtMTg1LDcgKzE4NSw3IEBAIGJvb2wgZml4
U1NBKFByb2NlZHVyZSYgcHJvYykKIAogICAgIC8vIE5vdyBwZXJmb3JtIHRoZSBjb252ZXJzaW9u
LgogICAgIEluc2VydGlvblNldCBpbnNlcnRpb25TZXQocHJvYyk7Ci0gICAgSW5kZXhNYXA8VmFy
aWFibGUsIFZhbHVlKj4gbWFwcGluZyhwcm9jLnZhcmlhYmxlcygpLnNpemUoKSk7CisgICAgSW5k
ZXhNYXA8VmFyaWFibGUqLCBWYWx1ZSo+IG1hcHBpbmcocHJvYy52YXJpYWJsZXMoKS5zaXplKCkp
OwogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBwcm9jLmJsb2Nrc0luUHJlT3JkZXIoKSkg
ewogICAgICAgICBtYXBwaW5nLmNsZWFyKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0ZpeFNTQS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0ZpeFNTQS5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNGaXhTU0EuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNyw3ICszNyw3IEBAIGNsYXNzIFByb2NlZHVyZTsK
IAogLy8gVHVybnMgYWxsIG1lbnRpb25zIG9mIHRoZSBnaXZlbiB2YWx1ZXMgaW50byBhY2Nlc3Nl
cyB0byB2YXJpYWJsZXMuIFRoaXMgaXMgbWVhbnQgdG8gYmUgdXNlZAogLy8gZnJvbSBwaGFzZXMg
dGhhdCBkb24ndCBsaWtlIFNTQSBmb3Igd2hhdGV2ZXIgcmVhc29uLgotdm9pZCBkZW1vdGVWYWx1
ZXMoUHJvY2VkdXJlJiwgY29uc3QgSW5kZXhTZXQ8VmFsdWU+Jik7Cit2b2lkIGRlbW90ZVZhbHVl
cyhQcm9jZWR1cmUmLCBjb25zdCBJbmRleFNldDxWYWx1ZSo+Jik7CiAKIC8vIFRoaXMgZml4ZXMg
U1NBIGZvciB5b3UuIFVzZSB0aGlzIGFmdGVyIHlvdSBoYXZlIGRvbmUgZGVtb3RlVmFsdWVzKCkg
YW5kIHlvdSBoYXZlIHBlcmZvcm1lZAogLy8gd2hhdGV2ZXIgZXZpbCB0cmFuc2Zvcm1hdGlvbiB5
b3UgbmVlZGVkLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAko
cmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQgcHJlcGFyZUZvckdlbmVy
YXRpb24oUHJvY2VkdXJlJiBwcm8KICAgICBUaW1pbmdTY29wZSB0aW1pbmdTY29wZSgicHJlcGFy
ZUZvckdlbmVyYXRpb24iKTsKIAogICAgIGdlbmVyYXRlVG9BaXIocHJvY2VkdXJlLCBvcHRMZXZl
bCk7Ci0gICAgQWlyOjpwcmVwYXJlRm9yR2VuZXJhdGlvbihwcm9jZWR1cmUuY29kZSgpKTsKKyAg
ICBBaXI6OnByZXBhcmVGb3JHZW5lcmF0aW9uKHByb2NlZHVyZS5jb2RlKCksIG9wdExldmVsKTsK
IH0KIAogdm9pZCBnZW5lcmF0ZShQcm9jZWR1cmUmIHByb2NlZHVyZSwgQ0NhbGxIZWxwZXJzJiBq
aXQpCkBAIC04MCw3ICs4MCw3IEBAIHZvaWQgZ2VuZXJhdGVUb0FpcihQcm9jZWR1cmUmIHByb2Nl
ZHVyZSwKICAgICBpZiAoc2hvdWxkVmFsaWRhdGVJUigpKQogICAgICAgICB2YWxpZGF0ZShwcm9j
ZWR1cmUpOwogCi0gICAgaWYgKG9wdExldmVsID49IDEpIHsKKyAgICBpZiAob3B0TGV2ZWwgPj0g
MikgewogICAgICAgICByZWR1Y2VEb3VibGVUb0Zsb2F0KHByb2NlZHVyZSk7CiAgICAgICAgIHJl
ZHVjZVN0cmVuZ3RoKHByb2NlZHVyZSk7CiAgICAgICAgIGVsaW1pbmF0ZUNvbW1vblN1YmV4cHJl
c3Npb25zKHByb2NlZHVyZSk7CkBAIC05MSwxMiArOTEsMTUgQEAgdm9pZCBnZW5lcmF0ZVRvQWly
KFByb2NlZHVyZSYgcHJvY2VkdXJlLAogICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IEFkZCBt
b3JlIG9wdGltaXphdGlvbnMgaGVyZS4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1MDUwNworICAgIH0gZWxzZSBpZiAob3B0TGV2ZWwgPj0gMSkg
eworICAgICAgICAvLyBGSVhNRTogRXhwbG9yZSBiZXR0ZXIgInF1aWNrIG1vZGUiIG9wdGltaXph
dGlvbnMuCisgICAgICAgIHJlZHVjZVN0cmVuZ3RoKHByb2NlZHVyZSk7CiAgICAgfQogCiAgICAg
Ly8gVGhpcyBwdXRzIHRoZSBJUiBpbiBxdWlya3MgbW9kZS4KICAgICBsb3dlck1hY3Jvcyhwcm9j
ZWR1cmUpOwogCi0gICAgaWYgKG9wdExldmVsID49IDEpIHsKKyAgICBpZiAob3B0TGV2ZWwgPj0g
MikgewogICAgICAgICByZWR1Y2VTdHJlbmd0aChwcm9jZWR1cmUpOwogCiAgICAgICAgIC8vIEZJ
WE1FOiBBZGQgbW9yZSBvcHRpbWl6YXRpb25zIGhlcmUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNHZW5lcmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0dlbmVyYXRlLmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0dlbmVyYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDggQEAKIAog
I2lmIEVOQUJMRShCM19KSVQpCiAKKyNpbmNsdWRlICJCM0NvbW1vbi5oIgorCiBuYW1lc3BhY2Ug
SlNDIHsKIAogY2xhc3MgQ0NhbGxIZWxwZXJzOwpAQCAtMzgsNyArNDAsNyBAQCBuYW1lc3BhY2Ug
QWlyIHsgY2xhc3MgQ29kZTsgfQogCiAvLyBUaGlzIHRha2VzIGEgQjM6OlByb2NlZHVyZSwgb3B0
aW1pemVzIGl0IGluLXBsYWNlLCBsb3dlcnMgaXQgdG8gQWlyLCBhbmQgcHJlcGFyZXMgdGhlIEFp
ciBmb3IKIC8vIGdlbmVyYXRpb24uCi1KU19FWFBPUlRfUFJJVkFURSB2b2lkIHByZXBhcmVGb3JH
ZW5lcmF0aW9uKFByb2NlZHVyZSYsIHVuc2lnbmVkIG9wdExldmVsID0gMSk7CitKU19FWFBPUlRf
UFJJVkFURSB2b2lkIHByZXBhcmVGb3JHZW5lcmF0aW9uKFByb2NlZHVyZSYsIHVuc2lnbmVkIG9w
dExldmVsID0gZGVmYXVsdE9wdExldmVsKCkpOwogCiAvLyBUaGlzIHRha2VzIGEgQjM6OlByb2Nl
ZHVyZSB0aGF0IGhhcyBiZWVuIHByZXBhcmVkIGZvciBnZW5lcmF0aW9uIChpLmUuIGl0IGhhcyBi
ZWVuIGxvd2VyZWQgdG8gQWlyIGFuZAogLy8gdGhlIEFpciBoYXMgYmVlbiBwcmVwYXJlZCBmb3Ig
Z2VuZXJhdGlvbikgYW5kIGdlbmVyYXRlcyBpdC4gVGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvZiBj
YWxsaW5nCkBAIC00OCw3ICs1MCw3IEBAIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZ2VuZXJhdGUo
UHJvY2VkdXIKIC8vIFRoaXMgdGFrZXMgYSBCMzo6UHJvY2VkdXJlLCBvcHRpbWl6ZXMgaXQgaW4t
cGxhY2UsIGFuZCBsb3dlcnMgaXQgdG8gQWlyLiBZb3UgY2FuIHRoZW4gZ2VuZXJhdGUKIC8vIHRo
ZSBBaXIgdG8gbWFjaGluZSBjb2RlIHVzaW5nIEFpcjo6cHJlcGFyZUZvckdlbmVyYXRpb24oKSBh
bmQgQWlyOjpnZW5lcmF0ZSgpIG9uIHRoZSBQcm9jZWR1cmUncwogLy8gY29kZSgpLgotdm9pZCBn
ZW5lcmF0ZVRvQWlyKFByb2NlZHVyZSYsIHVuc2lnbmVkIG9wdExldmVsID0gMSk7Cit2b2lkIGdl
bmVyYXRlVG9BaXIoUHJvY2VkdXJlJiwgdW5zaWduZWQgb3B0TGV2ZWwgPSBkZWZhdWx0T3B0TGV2
ZWwoKSk7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNIZWFwUmFuZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw0OSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJCM0hlYXBSYW5nZS5oIgotCi0jaWYgRU5BQkxF
KEIzX0pJVCkKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7Ci0KLXZvaWQgSGVhcFJh
bmdlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAgaWYgKCp0aGlzID09IEhl
YXBSYW5nZSgpKSB7Ci0gICAgICAgIG91dC5wcmludCgiQm90dG9tIik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgaWYgKCp0aGlzID09IHRvcCgpKSB7Ci0gICAgICAgIG91dC5wcmludCgi
VG9wIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgb3V0LnByaW50KG1fYmVnaW4sICIu
Li4iLCBtX2VuZCk7Ci19Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwotCi0jZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJh
bmdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJhbmdl
LmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBS
YW5nZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw5MCArMjcsMTUgQEAKIAogI2lmIEVOQUJMRShC
M19KSVQpCiAKLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgotI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorI2luY2x1ZGUgPHd0Zi9SYW5nZS5oPgog
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAogLy8gQWxpYXMgYW5hbHlzaXMgaW4g
QjMgaXMgZG9uZSBieSBjaGVja2luZyBpZiB0d28gaW50ZWdlciByYW5nZXMgb3ZlcmxhcC4gVGhp
cyBpcyBwb3dlcmZ1bCBlbm91Z2gKIC8vIHRvIGJlIHVzZWQgZm9yIFRCQUEtc3R5bGUgYWxpYXMg
YW5hbHlzaXMgdXNlZCBieSB0aGUgREZHLCBGVEwsIGFuZCBMTFZNOiB5b3UganVzdCB0dXJuIGVh
Y2ggbm9kZQogLy8gaW4gdGhlIHRyZWUgb2YgYWJzdHJhY3QgaGVhcHMgaW50byBhIHByZS9wb3N0
IHJhbmdlLgotLy8KLS8vIE5vdGUgdGhhdCB0aGUgJ2JlZ2luJyBpcyBpbmNsdXNpdmUsIHdoaWxl
IHRoZSAnZW5kJyBpcyBleGNsdXNpdmUuIFRoZXNlIHR3byByYW5nZXMgYXJlIG5vbi0KLS8vIG92
ZXJsYXBwaW5nOgotLy8KLS8vICAgICByYW5nZUEgPSAwLi4uOAotLy8gICAgIHJhbmdlQiA9IDgu
Li4xNgotCi1jbGFzcyBIZWFwUmFuZ2UgewotcHVibGljOgotICAgIHR5cGVkZWYgdW5zaWduZWQg
VHlwZTsKLSAgICAKLSAgICBIZWFwUmFuZ2UoKQotICAgICAgICA6IG1fYmVnaW4oMCkKLSAgICAg
ICAgLCBtX2VuZCgwKQotICAgIHsKLSAgICB9Ci0KLSAgICBleHBsaWNpdCBIZWFwUmFuZ2UodW5z
aWduZWQgdmFsdWUpCi0gICAgICAgIDogbV9iZWdpbih2YWx1ZSkKLSAgICAgICAgLCBtX2VuZCh2
YWx1ZSArIDEpCi0gICAgewotICAgICAgICBBU1NFUlQobV9lbmQgPj0gbV9iZWdpbik7Ci0gICAg
fQotCi0gICAgSGVhcFJhbmdlKHVuc2lnbmVkIGJlZ2luLCB1bnNpZ25lZCBlbmQpCi0gICAgICAg
IDogbV9iZWdpbihiZWdpbikKLSAgICAgICAgLCBtX2VuZChlbmQpCi0gICAgewotICAgICAgICBB
U1NFUlQobV9lbmQgPj0gbV9iZWdpbik7Ci0gICAgICAgIGlmIChtX2JlZ2luID09IG1fZW5kKSB7
Ci0gICAgICAgICAgICAvLyBDYW5vbmljYWxpemUgZW1wdHkgcmFuZ2VzLgotICAgICAgICAgICAg
bV9iZWdpbiA9IDA7Ci0gICAgICAgICAgICBtX2VuZCA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBzdGF0aWMgSGVhcFJhbmdlIHRvcCgpCi0gICAgewotICAgICAgICByZXR1cm4gSGVhcFJh
bmdlKDAsIFVJTlRfTUFYKTsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSGVh
cFJhbmdlJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2JlZ2luID09IG90
aGVyLm1fYmVnaW4KLSAgICAgICAgICAgICYmIG1fZW5kID09IG90aGVyLm1fZW5kOwotICAgIH0K
LQotICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBIZWFwUmFuZ2UmIG90aGVyKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwotICAgIH0KLSAgICAKLSAgICBI
ZWFwUmFuZ2Ugb3BlcmF0b3J8KGNvbnN0IEhlYXBSYW5nZSYgb3RoZXIpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gSGVhcFJhbmdlKAotICAgICAgICAgICAgc3RkOjptaW4obV9iZWdpbiwg
b3RoZXIubV9iZWdpbiksCi0gICAgICAgICAgICBzdGQ6Om1heChtX2VuZCwgb3RoZXIubV9lbmQp
KTsKLSAgICB9Ci0gICAgCi0gICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0
dXJuIG1fYmVnaW4gIT0gbV9lbmQ7IH0KLQotICAgIHVuc2lnbmVkIGJlZ2luKCkgY29uc3QgeyBy
ZXR1cm4gbV9iZWdpbjsgfQotICAgIHVuc2lnbmVkIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5k
OyB9Ci0KLSAgICBib29sIG92ZXJsYXBzKGNvbnN0IEhlYXBSYW5nZSYgb3RoZXIpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gV1RGOjpyYW5nZXNPdmVybGFwKG1fYmVnaW4sIG1fZW5kLCBv
dGhlci5tX2JlZ2luLCBvdGhlci5tX2VuZCk7Ci0gICAgfQotCi0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIHVu
c2lnbmVkIG1fYmVnaW47Ci0gICAgdW5zaWduZWQgbV9lbmQ7Ci19OworCit0eXBlZGVmIFJhbmdl
PHVuc2lnbmVkPiBIZWFwUmFuZ2U7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2aXNpb24gMjE0
NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMzNzksMTAgKzMzNzksMTAgQEAgcHJpdmF0ZToKICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAgICAgCi0gICAgSW5kZXhTZXQ8VmFsdWU+
IG1fbG9ja2VkOyAvLyBUaGVzZSBhcmUgdmFsdWVzIHRoYXQgd2lsbCBoYXZlIG5vIFRtcCBpbiBB
aXIuCi0gICAgSW5kZXhNYXA8VmFsdWUsIFRtcD4gbV92YWx1ZVRvVG1wOyAvLyBUaGVzZSBhcmUg
dmFsdWVzIHRoYXQgbXVzdCBoYXZlIGEgVG1wIGluIEFpci4gV2Ugc2F5IHRoYXQgYSBWYWx1ZSog
d2l0aCBhIG5vbi1udWxsIFRtcCBpcyAicGlubmVkIi4KLSAgICBJbmRleE1hcDxWYWx1ZSwgVG1w
PiBtX3BoaVRvVG1wOyAvLyBFYWNoIFBoaSBnZXRzIGl0cyBvd24gVG1wLgotICAgIEluZGV4TWFw
PEIzOjpCYXNpY0Jsb2NrLCBBaXI6OkJhc2ljQmxvY2sqPiBtX2Jsb2NrVG9CbG9jazsKKyAgICBJ
bmRleFNldDxWYWx1ZSo+IG1fbG9ja2VkOyAvLyBUaGVzZSBhcmUgdmFsdWVzIHRoYXQgd2lsbCBo
YXZlIG5vIFRtcCBpbiBBaXIuCisgICAgSW5kZXhNYXA8VmFsdWUqLCBUbXA+IG1fdmFsdWVUb1Rt
cDsgLy8gVGhlc2UgYXJlIHZhbHVlcyB0aGF0IG11c3QgaGF2ZSBhIFRtcCBpbiBBaXIuIFdlIHNh
eSB0aGF0IGEgVmFsdWUqIHdpdGggYSBub24tbnVsbCBUbXAgaXMgInBpbm5lZCIuCisgICAgSW5k
ZXhNYXA8VmFsdWUqLCBUbXA+IG1fcGhpVG9UbXA7IC8vIEVhY2ggUGhpIGdldHMgaXRzIG93biBU
bXAuCisgICAgSW5kZXhNYXA8QjM6OkJhc2ljQmxvY2sqLCBBaXI6OkJhc2ljQmxvY2sqPiBtX2Js
b2NrVG9CbG9jazsKICAgICBIYXNoTWFwPEIzOjpTdGFja1Nsb3QqLCBBaXI6OlN0YWNrU2xvdCo+
IG1fc3RhY2tUb1N0YWNrOwogICAgIEhhc2hNYXA8VmFyaWFibGUqLCBUbXA+IG1fdmFyaWFibGVU
b1RtcDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTW92ZUNvbnN0YW50cy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTW92ZUNvbnN0YW50
cy5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01v
dmVDb25zdGFudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHByaXZhdGU6
CiAgICAgewogICAgICAgICBEb21pbmF0b3JzJiBkb21pbmF0b3JzID0gbV9wcm9jLmRvbWluYXRv
cnMoKTsKICAgICAgICAgSGFzaE1hcDxWYWx1ZUtleSwgVmFsdWUqPiB2YWx1ZUZvckNvbnN0YW50
OwotICAgICAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBWZWN0b3I8VmFsdWUqPj4gbWF0ZXJpYWxp
emF0aW9ucyhtX3Byb2Muc2l6ZSgpKTsKKyAgICAgICAgSW5kZXhNYXA8QmFzaWNCbG9jayosIFZl
Y3RvcjxWYWx1ZSo+PiBtYXRlcmlhbGl6YXRpb25zKG1fcHJvYy5zaXplKCkpOwogCiAgICAgICAg
IC8vIFdlIGRldGVybWluZSB3aGVyZSB0aGluZ3MgZ2V0IG1hdGVyaWFsaXplZCBiYXNlZCBvbiB3
aGVyZSB0aGV5IGFyZSB1c2VkLgogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9w
cm9jKSB7CkBAIC0yNzQsNyArMjc0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgZm9yIChhdXRvJiBl
bnRyeSA6IG1fY29uc3RUYWJsZSkKICAgICAgICAgICAgIG1fZGF0YVNlY3Rpb25bZW50cnkudmFs
dWVdID0gZW50cnkua2V5LnZhbHVlKCk7CiAKLSAgICAgICAgSW5kZXhTZXQ8VmFsdWU+IG9mZkxp
bWl0czsKKyAgICAgICAgSW5kZXhTZXQ8VmFsdWUqPiBvZmZMaW1pdHM7CiAgICAgICAgIGZvciAo
QmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2MpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
dmFsdWVJbmRleCA9IDA7IHZhbHVlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK3ZhbHVlSW5kZXgp
IHsKICAgICAgICAgICAgICAgICBTdGFja21hcFZhbHVlKiB2YWx1ZSA9IGJsb2NrLT5hdCh2YWx1
ZUluZGV4KS0+YXM8U3RhY2ttYXBWYWx1ZT4oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1BoaUNoaWxkcmVuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzUGhpQ2hpbGRyZW4uaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzUGhpQ2hpbGRyZW4uaAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDcgKzE2OCw3
IEBAIHB1YmxpYzoKICAgICBjb25zdCBWZWN0b3I8VmFsdWUqLCA4PiYgcGhpcygpIGNvbnN0IHsg
cmV0dXJuIG1fcGhpczsgfQogCiBwcml2YXRlOgotICAgIEluZGV4TWFwPFZhbHVlLCBWZWN0b3I8
VXBzaWxvblZhbHVlKj4+IG1fdXBzaWxvbnM7CisgICAgSW5kZXhNYXA8VmFsdWUqLCBWZWN0b3I8
VXBzaWxvblZhbHVlKj4+IG1fdXBzaWxvbnM7CiAgICAgVmVjdG9yPFZhbHVlKiwgOD4gbV9waGlz
OwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCShy
ZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBQcm9jZWR1cmU6Omlu
dmFsaWRhdGVDRkcoKQogCiB2b2lkIFByb2NlZHVyZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAogewotICAgIEluZGV4U2V0PFZhbHVlPiB2YWx1ZXNJbkJsb2NrczsKKyAgICBJbmRleFNl
dDxWYWx1ZSo+IHZhbHVlc0luQmxvY2tzOwogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiAq
dGhpcykgewogICAgICAgICBvdXQucHJpbnQoZGVlcER1bXAoKnRoaXMsIGJsb2NrKSk7CiAgICAg
ICAgIHZhbHVlc0luQmxvY2tzLmFkZEFsbCgqYmxvY2spOwpAQCAtMjQ1LDcgKzI0NSw3IEBAIHZv
aWQgUHJvY2VkdXJlOjpkZWxldGVWYWx1ZShWYWx1ZSogdmFsdWUKIAogdm9pZCBQcm9jZWR1cmU6
OmRlbGV0ZU9ycGhhbnMoKQogewotICAgIEluZGV4U2V0PFZhbHVlPiB2YWx1ZXNJbkJsb2NrczsK
KyAgICBJbmRleFNldDxWYWx1ZSo+IHZhbHVlc0luQmxvY2tzOwogICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiAqdGhpcykKICAgICAgICAgdmFsdWVzSW5CbG9ja3MuYWRkQWxsKCpibG9jayk7
CiAKQEAgLTMzMyw3ICszMzMsNyBAQCBWYWx1ZSogUHJvY2VkdXJlOjphZGRWYWx1ZUltcGwoVmFs
dWUqIHZhCiAKIHZvaWQgUHJvY2VkdXJlOjpzZXRCbG9ja09yZGVySW1wbChWZWN0b3I8QmFzaWNC
bG9jayo+JiBibG9ja3MpCiB7Ci0gICAgSW5kZXhTZXQ8QmFzaWNCbG9jaz4gYmxvY2tzU2V0Owor
ICAgIEluZGV4U2V0PEJhc2ljQmxvY2sqPiBibG9ja3NTZXQ7CiAgICAgYmxvY2tzU2V0LmFkZEFs
bChibG9ja3MpOwogCiAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6ICp0aGlzKSB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VEb3VibGVUb0Zsb2F0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VEb3VibGVUb0Zsb2F0
LmNwcAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVk
dWNlRG91YmxlVG9GbG9hdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyNCwxOCArNDI0LDE4IEBA
IHByaXZhdGU6CiAKICAgICAvLyBTZXQgb2YgYWxsIHRoZSBEb3VibGUgdmFsdWVzIHRoYXQgYXJl
IGFjdHVhbGx5IHVzZWQgYXMgRG91YmxlLgogICAgIC8vIENvbnZlcnRpbmcgYW55IG9mIHRoZW0g
dG8gRmxvYXQgd291bGQgbG9zZSBwcmVjaXNpb24uCi0gICAgSW5kZXhTZXQ8VmFsdWU+IG1fdmFs
dWVzVXNlZEFzRG91YmxlOworICAgIEluZGV4U2V0PFZhbHVlKj4gbV92YWx1ZXNVc2VkQXNEb3Vi
bGU7CiAKICAgICAvLyBTZXQgb2YgYWxsIHRoZSBQaGkgb2YgdHlwZSBEb3VibGUgdGhhdCByZWFs
bHkgY29udGFpbnMgYSBEb3VibGUuCiAgICAgLy8gQW55IERvdWJsZSBQaGkgbm90IGluIHRoZSBz
ZXQgY2FuIGJlIGNvbnZlcnRlZCB0byBGbG9hdCB3aXRob3V0IGxvc2luZyBwcmVjaXNpb24uCi0g
ICAgSW5kZXhTZXQ8VmFsdWU+IG1fcGhpc0NvbnRhaW5pbmdEb3VibGU7CisgICAgSW5kZXhTZXQ8
VmFsdWUqPiBtX3BoaXNDb250YWluaW5nRG91YmxlOwogCiAgICAgLy8gQW55IHZhbHVlIHRoYXQg
d2FzIGNvbnZlcnRlZCBmcm9tIHByb2R1Y2luZyBhIERvdWJsZSB0byBwcm9kdWNpbmcgYSBGbG9h
dC4KICAgICAvLyBUaGlzIHNldCBkb2VzIG5vdCBpbmNsdWRlIFBoaS1VcHNpbG9ucy4KLSAgICBJ
bmRleFNldDxWYWx1ZT4gbV9jb252ZXJ0ZWRWYWx1ZTsKKyAgICBJbmRleFNldDxWYWx1ZSo+IG1f
Y29udmVydGVkVmFsdWU7CiAKICAgICAvLyBBbnkgdmFsdWUgdGhhdCBwcmV2aW91c2x5IHByb2R1
Y2VkIERvdWJsZSBhbmQgbm93IHByb2R1Y2UgRmxvYXQuCi0gICAgSW5kZXhTZXQ8VmFsdWU+IG1f
Y29udmVydGVkUGhpczsKKyAgICBJbmRleFNldDxWYWx1ZSo+IG1fY29udmVydGVkUGhpczsKIH07
CiAKIHZvaWQgcHJpbnRHcmFwaElmQ29udmVydGluZyhQcm9jZWR1cmUmIHByb2NlZHVyZSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHJl
dmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVu
Z3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM5Miw3ICsyMzkyLDcgQEAgcHJpdmF0ZToKIAog
ICAgIHZvaWQga2lsbERlYWRDb2RlKCkKICAgICB7Ci0gICAgICAgIEdyYXBoTm9kZVdvcmtsaXN0
PFZhbHVlKiwgSW5kZXhTZXQ8VmFsdWU+PiB3b3JrbGlzdDsKKyAgICAgICAgR3JhcGhOb2RlV29y
a2xpc3Q8VmFsdWUqLCBJbmRleFNldDxWYWx1ZSo+PiB3b3JrbGlzdDsKICAgICAgICAgVmVjdG9y
PFVwc2lsb25WYWx1ZSosIDY0PiB1cHNpbG9uczsKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBi
bG9jayA6IG1fcHJvYykgewogICAgICAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiAqYmxvY2sp
IHsKQEAgLTI0MjksNyArMjQyOSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KIAotICAgICAgICBJbmRleFNldDxWYXJpYWJsZT4gbGl2ZVZhcmlhYmxlczsK
KyAgICAgICAgSW5kZXhTZXQ8VmFyaWFibGUqPiBsaXZlVmFyaWFibGVzOwogICAgICAgICAKICAg
ICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvYykgewogICAgICAgICAgICAgc2l6
ZV90IHNvdXJjZUluZGV4ID0gMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1NT
QUNhbGN1bGF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
U0FDYWxjdWxhdG9yLmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1NTQUNhbGN1bGF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTYsNyArMTU2LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgVmVjdG9yPERlZio+IG1fcGhpczsKICAgICB9OwogICAgIAotICAgIElu
ZGV4TWFwPEJhc2ljQmxvY2ssIEJsb2NrRGF0YT4gbV9kYXRhOworICAgIEluZGV4TWFwPEJhc2lj
QmxvY2sqLCBCbG9ja0RhdGE+IG1fZGF0YTsKIAogICAgIERvbWluYXRvcnMqIG1fZG9taW5hdG9y
cyB7IG51bGxwdHIgfTsKICAgICBQcm9jZWR1cmUmIG1fcHJvYzsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1VzZUNvdW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1VzZUNvdW50cy5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNVc2VDb3VudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ4LDcgKzQ4
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgdW5zaWduZWQgbnVtVXNpbmdJbnN0cnVjdGlvbnMgeyAw
IH07CiAgICAgfTsKICAgICAKLSAgICBJbmRleE1hcDxWYWx1ZSwgQ291bnRzPiBtX2NvdW50czsK
KyAgICBJbmRleE1hcDxWYWx1ZSosIENvdW50cz4gbV9jb3VudHM7CiB9OwogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCShyZXZp
c2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTIwLDcgKzEyMCw3IEBAIFN0YXRpY0xvY2sgY3Jhc2hMb2NrOwogCiBW
TSogdm07CiAKLXN0ZDo6dW5pcXVlX3B0cjxDb21waWxhdGlvbj4gY29tcGlsZShQcm9jZWR1cmUm
IHByb2NlZHVyZSwgdW5zaWduZWQgb3B0TGV2ZWwgPSAxKQorc3RkOjp1bmlxdWVfcHRyPENvbXBp
bGF0aW9uPiBjb21waWxlKFByb2NlZHVyZSYgcHJvY2VkdXJlLCB1bnNpZ25lZCBvcHRMZXZlbCA9
IGRlZmF1bHRPcHRMZXZlbCgpKQogewogICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPENvbXBp
bGF0aW9uPihCMzo6Y29tcGlsZSgqdm0sIHByb2NlZHVyZSwgb3B0TGV2ZWwpKTsKIH0KQEAgLTk5
MCw2ICs5OTAsNyBAQCB2b2lkIHRlc3RNdWxMb2FkVHdpY2UoKQogCiAgICAgdGVzdCgwKTsKICAg
ICB0ZXN0KDEpOworICAgIHRlc3QoMik7CiB9CiAKIHZvaWQgdGVzdE11bEFkZEFyZ3NMZWZ0KCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNC
eUdyYXBoQ29sb3JpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuY3BwCShyZXZpc2lvbiAy
MTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0
ZXJzQnlHcmFwaENvbG9yaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAog
I2lmIEVOQUJMRShCM19KSVQpCiAKICNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWly
Rml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCIKICNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIK
ICNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgiCkBA
IC0xNTg1LDYgKzE1ODYsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIG1fY29hbGVzY2luZ0NhbmRp
ZGF0ZXMuY2xlYXIoKTsKICAgICAgICAgbV93b3JrbGlzdE1vdmVzLmNsZWFyKCk7CiAKKyAgICAg
ICAgLy8gRklYTUU6IEl0IHNlZW1zIGxpa2Ugd2UgZG9uJ3QgbmVlZCB0byByZWNvbXB1dGUgbGl2
ZW5lc3MuIFdlIGp1c3QgbmVlZCB0byB1cGRhdGUgaXRzIGRhdGEKKyAgICAgICAgLy8gc3RydWN0
dXJlcyBzbyB0aGF0IGl0IGtub3dzIHRoYXQgdGhlIG5ld2x5IGludHJvZHVjZWQgdGVtcG9yYXJp
ZXMgYXJlIG5vdCBsaXZlIGF0IGFueSBiYXNpYworICAgICAgICAvLyBibG9jayBib3VuZGFyeS4g
VGhpcyBzaG91bGQgdHJpdmlhbGx5IGJlIHRydWUgZm9yIG5vdy4KICAgICAgICAgVG1wTGl2ZW5l
c3M8YmFuaz4gbGl2ZW5lc3MobV9jb2RlKTsKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9j
ayA6IG1fY29kZSkgewogICAgICAgICAgICAgdHlwZW5hbWUgVG1wTGl2ZW5lc3M8YmFuaz46Okxv
Y2FsQ2FsYyBsb2NhbENhbGMobGl2ZW5lc3MsIGJsb2NrKTsKQEAgLTE3OTgsNyArMTgwMiw3IEBA
IHB1YmxpYzoKICAgICAgICAgbV9udW1JdGVyYXRpb25zID0gMDsKICAgICAgICAgYWxsb2NhdGVP
bkJhbms8RlA+KCk7CiAKLSAgICAgICAgZml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMoKTsKKyAgICAg
ICAgZml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMobV9jb2RlKTsKIAogICAgICAgICBpZiAocmVwb3J0
U3RhdHMpCiAgICAgICAgICAgICBkYXRhTG9nKCJOdW0gaXRlcmF0aW9ucyA9ICIsIG1fbnVtSXRl
cmF0aW9ucywgIlxuIik7CkBAIC0xOTU0LDcgKzE5NTgsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcEZhc3QoWyZdIChUbXAm
IHRtcCkgewotICAgICAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkgfHwgdG1wLmlzR1Ao
KSA9PSAoYmFuayAhPSBHUCkpCisgICAgICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSB8
fCB0bXAuYmFuaygpICE9IGJhbmspCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAK
ICAgICAgICAgICAgICAgICAgICAgVG1wIGFsaWFzVG1wID0gYWxsb2NhdG9yLmdldEFsaWFzKHRt
cCk7CkBAIC0yMTY5LDkgKzIxNzMsMTIgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAgICAg
ICB0bXAgPSBtX2NvZGUubmV3VG1wKGJhbmspOwogICAgICAgICAgICAgICAgICAgICB1bnNwaWxs
YWJsZVRtcHMuYWRkKEFic29sdXRlVG1wTWFwcGVyPGJhbms+OjphYnNvbHV0ZUluZGV4KHRtcCkp
OworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT0g
QXJnOjpTY3JhdGNoKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAg
ICAgICAgICAgICAgIEFyZyBhcmcgPSBBcmc6OnN0YWNrKHN0YWNrU2xvdEVudHJ5LT52YWx1ZSk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzQW55VXNlKHJvbGUpICYmIHJvbGUgIT0g
QXJnOjpTY3JhdGNoKQorICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0FueVVzZShyb2xl
KSkKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoaW5zdEluZGV4
LCBtb3ZlLCBpbnN0Lm9yaWdpbiwgYXJnLCB0bXApOwogICAgICAgICAgICAgICAgICAgICBpZiAo
QXJnOjppc0FueURlZihyb2xlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNl
dC5pbnNlcnQoaW5zdEluZGV4ICsgMSwgbW92ZSwgaW5zdC5vcmlnaW4sIHRtcCwgYXJnKTsKQEAg
LTIxODcsNjYgKzIxOTQsNiBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQogCi0gICAgdm9p
ZCBmaXhTcGlsbHNBZnRlclRlcm1pbmFscygpCi0gICAgewotICAgICAgICAvLyBCZWNhdXNlIHRo
ZXJlIG1heSBiZSB0ZXJtaW5hbHMgdGhhdCBwcm9kdWNlIHZhbHVlcywgSVJDIG1heQotICAgICAg
ICAvLyB3YW50IHRvIHNwaWxsIHRob3NlIHRlcm1pbmFscy4gSXQnbGwgaGFwcGVuIHRvIHNwaWxs
IGl0IGFmdGVyCi0gICAgICAgIC8vIHRoZSB0ZXJtaW5hbC4gSWYgd2UgbGVmdCB0aGUgZ3JhcGgg
aW4gdGhpcyBzdGF0ZSwgaXQnZCBiZSBpbnZhbGlkCi0gICAgICAgIC8vIGJlY2F1c2UgYSB0ZXJt
aW5hbCBtdXN0IGJlIHRoZSBsYXN0IGluc3RydWN0aW9uIGluIGEgYmxvY2suCi0gICAgICAgIC8v
IFdlIGZpeCB0aGF0IGhlcmUuCi0KLSAgICAgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldCht
X2NvZGUpOwotCi0gICAgICAgIGJvb2wgYWRkZWRCbG9ja3MgPSBmYWxzZTsKLQotICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCB0
ZXJtaW5hbEluZGV4ID0gYmxvY2stPnNpemUoKTsKLSAgICAgICAgICAgIGJvb2wgZm91bmRUZXJt
aW5hbCA9IGZhbHNlOwotICAgICAgICAgICAgd2hpbGUgKHRlcm1pbmFsSW5kZXgtLSkgewotICAg
ICAgICAgICAgICAgIGlmIChibG9jay0+YXQodGVybWluYWxJbmRleCkuaXNUZXJtaW5hbCgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGZvdW5kVGVybWluYWwgPSB0cnVlOwotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBBU1NFUlRfVU5VU0VEKGZvdW5kVGVybWluYWwsIGZvdW5kVGVybWluYWwpOwotCi0gICAg
ICAgICAgICBpZiAodGVybWluYWxJbmRleCA9PSBibG9jay0+c2l6ZSgpIC0gMSkKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgLy8gVGhlcmUgbXVzdCBiZSBpbnN0cnVj
dGlvbnMgYWZ0ZXIgdGhlIHRlcm1pbmFsIGJlY2F1c2UgaXQncyBub3QgdGhlIGxhc3QgaW5zdHJ1
Y3Rpb24uCi0gICAgICAgICAgICBBU1NFUlQodGVybWluYWxJbmRleCA8IGJsb2NrLT5zaXplKCkg
LSAxKTsKLSAgICAgICAgICAgIFZlY3RvcjxJbnN0LCAxPiBpbnN0c1RvTW92ZTsKLSAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IHRlcm1pbmFsSW5kZXggKyAxOyBpIDwgYmxvY2stPnNpemUo
KTsgaSsrKQotICAgICAgICAgICAgICAgIGluc3RzVG9Nb3ZlLmFwcGVuZChibG9jay0+YXQoaSkp
OwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5zdHNUb01vdmUuc2l6ZSgpKTsKLQotICAg
ICAgICAgICAgZm9yIChGcmVxdWVudGVkQmxvY2smIGZyZXF1ZW50ZWRTdWNjZXNzb3IgOiBibG9j
ay0+c3VjY2Vzc29ycygpKSB7Ci0gICAgICAgICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29y
ID0gZnJlcXVlbnRlZFN1Y2Nlc3Nvci5ibG9jaygpOwotICAgICAgICAgICAgICAgIC8vIElmIHN1
Y2Nlc3NvcidzIG9ubHkgcHJlZGVjZXNzb3IgaXMgYmxvY2ssIHdlIGNhbiBwbGFudCB0aGUgc3Bp
bGwgaW5zaWRlCi0gICAgICAgICAgICAgICAgLy8gdGhlIHN1Y2Nlc3Nvci4gT3RoZXJ3aXNlLCB3
ZSBtdXN0IHNwbGl0IHRoZSBjcml0aWNhbCBlZGdlIGFuZCBjcmVhdGUKLSAgICAgICAgICAgICAg
ICAvLyBhIG5ldyBibG9jayBmb3IgdGhlIHNwaWxsLgotICAgICAgICAgICAgICAgIGlmIChzdWNj
ZXNzb3ItPm51bVByZWRlY2Vzc29ycygpID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgaW5z
ZXJ0aW9uU2V0Lmluc2VydEluc3RzKDAsIGluc3RzVG9Nb3ZlKTsKLSAgICAgICAgICAgICAgICAg
ICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoc3VjY2Vzc29yKTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICBhZGRlZEJsb2NrcyA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBXZSBwcm9iYWJseSB3YW50IGJldHRlciBibG9jayBvcmRlcmlu
ZyBoZXJlLgotICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBuZXdCbG9jayA9IG1fY29k
ZS5hZGRCbG9jaygpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IEluc3QmIGluc3Qg
OiBpbnN0c1RvTW92ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ld0Jsb2NrLT5hcHBlbmRJ
bnN0KGluc3QpOwotICAgICAgICAgICAgICAgICAgICBuZXdCbG9jay0+YXBwZW5kSW5zdChJbnN0
KEp1bXAsIGluc3RzVG9Nb3ZlLmxhc3QoKS5vcmlnaW4pKTsKLSAgICAgICAgICAgICAgICAgICAg
bmV3QmxvY2stPnN1Y2Nlc3NvcnMoKS5hcHBlbmQoc3VjY2Vzc29yKTsKLSAgICAgICAgICAgICAg
ICAgICAgZnJlcXVlbnRlZFN1Y2Nlc3Nvci5ibG9jaygpID0gbmV3QmxvY2s7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBibG9jay0+cmVzaXplKHRlcm1p
bmFsSW5kZXggKyAxKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhZGRlZEJsb2NrcykKLSAg
ICAgICAgICAgIG1fY29kZS5yZXNldFJlYWNoYWJpbGl0eSgpOwotICAgIH0KLQogICAgIENvZGUm
IG1fY29kZTsKICAgICBUbXBXaWR0aCBtX3RtcFdpZHRoOwogICAgIFVzZUNvdW50czxUbXA+JiBt
X3VzZUNvdW50czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2Nh
dGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdp
c3RlcnNCeUxpbmVhclNjYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTk1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmgiCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQXJnSW5saW5lcy5oIgorI2luY2x1
ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5oIgor
I2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgi
CisjaW5jbHVkZSAiQWlyTGl2ZW5lc3MuaCIKKyNpbmNsdWRlICJBaXJQYWRJbnRlcmZlcmVuY2Uu
aCIKKyNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCisjaW5jbHVkZSAiQWlyUmVnTGl2ZW5lc3Mu
aCIKKyNpbmNsdWRlICJBaXJUbXBJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+
CisjaW5jbHVkZSA8d3RmL1JhbmdlLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eyBuYW1lc3BhY2UgQWlyIHsKKworbmFtZXNwYWNlIHsKKworY29uc3QgYm9vbCB2ZXJib3NlID0g
ZmFsc2U7CisKK3R5cGVkZWYgUmFuZ2U8c2l6ZV90PiBJbnRlcnZhbDsKKworc3RydWN0IFRtcERh
dGEgeworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAg
ICAgb3V0LnByaW50KCJ7aW50ZXJ2YWwgPSAiLCBpbnRlcnZhbCwgIiwgc3BpbGxlZCA9ICIsIHBv
aW50ZXJEdW1wKHNwaWxsZWQpLCAiLCBhc3NpZ25lZCA9ICIsIGFzc2lnbmVkLCAiLCBhZGphY2Vu
dCA9ICIsIGFkamFjZW50LCAifSIpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHZhbGlkYXRlKCkK
KyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEoc3BpbGxlZCAmJiBhc3NpZ25lZCkpOwor
ICAgIH0KKyAgICAKKyAgICBJbnRlcnZhbCBpbnRlcnZhbDsKKyAgICBTdGFja1Nsb3QqIHNwaWxs
ZWQgeyBudWxscHRyIH07CisgICAgUmVnIGFzc2lnbmVkOworICAgIFJlZ2lzdGVyU2V0IGFkamFj
ZW50OworfTsKKworc3RydWN0IENsb2JiZXIgeworICAgIENsb2JiZXIoKQorICAgIHsKKyAgICB9
CisgICAgCisgICAgQ2xvYmJlcihzaXplX3QgaW5kZXgsIFJlZ2lzdGVyU2V0IHJlZ3MpCisgICAg
ICAgIDogaW5kZXgoaW5kZXgpCisgICAgICAgICwgcmVncyhyZWdzKQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAg
ICBvdXQucHJpbnQoaW5kZXgsICI6IiwgcmVncyk7CisgICAgfQorICAgIAorICAgIHNpemVfdCBp
bmRleCB7IDAgfTsKKyAgICBSZWdpc3RlclNldCByZWdzOworfTsKKworY2xhc3MgVG1wT3JDbG9i
YmVyIHsKK3B1YmxpYzoKKyAgICBUbXBPckNsb2JiZXIoKQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgVG1wT3JDbG9iYmVyKENsb2JiZXIqIGNsb2JiZXIpCisgICAgICAgIDogbV92YWx1ZShiaXR3
aXNlX2Nhc3Q8dWludHB0cl90PihjbG9iYmVyKSkKKyAgICB7CisgICAgfQorICAgIAorICAgIFRt
cE9yQ2xvYmJlcihUbXAgdG1wKQorICAgICAgICA6IG1fdmFsdWUoKHN0YXRpY19jYXN0PHVpbnRw
dHJfdD4odG1wLmludGVybmFsVmFsdWUoKSkgPDwgMSkgfCAxKQorICAgIHsKKyAgICB9CisgICAg
CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRtcE9yQ2xvYmJlciYgb3RoZXIpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSA9PSBvdGhlci5tX3ZhbHVlOworICAgIH0KKyAg
ICAKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVG1wT3JDbG9iYmVyJiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisgICAgCisg
ICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
KnRoaXMgIT0gVG1wT3JDbG9iYmVyKCk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNUbXAoKSBj
b25zdCB7IHJldHVybiBtX3ZhbHVlICYgMTsgfQorICAgIGJvb2wgaXNDbG9iYmVyKCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZSAmJiAhKG1fdmFsdWUgJiAxKTsgfQorICAgIAorICAgIFRtcCB0bXAo
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzVG1wKCkpOworICAgICAgICByZXR1cm4g
VG1wOjp0bXBGb3JJbnRlcm5hbFZhbHVlKG1fdmFsdWUgPj4gMSk7CisgICAgfQorICAgIGNvbnN0
IENsb2JiZXImIGNsb2JiZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzQ2xvYmJl
cigpKTsKKyAgICAgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8Q2xvYmJlcio+KG1fdmFsdWUpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7
CisgICAgICAgIGlmICghKnRoaXMpIHsKKyAgICAgICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzVG1wKCkpIHsK
KyAgICAgICAgICAgIG91dC5wcmludCh0bXAoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgb3V0LnByaW50KGNsb2JiZXIoKSk7CisgICAgfQorICAgIAorcHJpdmF0
ZToKKyAgICB1aW50cHRyX3QgbV92YWx1ZSB7IDAgfTsKK307CisKK3RlbXBsYXRlPEJhbmsgYmFu
az4KK2NsYXNzIExpbmVhclNjYW4geworcHVibGljOgorICAgIExpbmVhclNjYW4oQ29kZSYgY29k
ZSkKKyAgICAgICAgOiBtX2NvZGUoY29kZSkKKyAgICAgICAgLCBtX3N0YXJ0SW5kZXgoY29kZS5z
aXplKCkpCisgICAgICAgICwgbV9tYXAoY29kZS5udW1UbXBzKGJhbmspKQorICAgICAgICAsIG1f
aW5zZXJ0aW9uU2V0cyhjb2RlLnNpemUoKSwgY29kZSkKKyAgICB7CisgICAgfQorICAgIAorICAg
IHZvaWQgcnVuKCkKKyAgICB7CisgICAgICAgIGJ1aWxkUmVnaXN0ZXJTZXQoKTsKKyAgICAgICAg
YnVpbGRJbmRpY2VzKCk7CisgICAgICAgIGJ1aWxkSW50ZXJ2YWxzKCk7CisgICAgICAgIGZvciAo
OzspIHsKKyAgICAgICAgICAgIHByZXBhcmVJbnRlcnZhbHMoKTsKKyAgICAgICAgICAgIGF0dGVt
cHRTY2FuKCk7CisgICAgICAgICAgICBpZiAoIW1fZGlkU3BpbGwpCisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBlbWl0U3BpbGxDb2RlKCk7CisgICAgICAgIH0KKyAgICAgICAg
aW5zZXJ0U3BpbGxDb2RlKCk7CisgICAgICAgIGFzc2lnblJlZ2lzdGVycygpOworICAgIH0KKyAg
ICAKK3ByaXZhdGU6CisgICAgdm9pZCBidWlsZFJlZ2lzdGVyU2V0KCkKKyAgICB7CisgICAgICAg
IG1fcmVnaXN0ZXJzID0gbV9jb2RlLnJlZ3NJblByaW9yaXR5T3JkZXIoYmFuayk7CisgICAgICAg
IG1fcmVnaXN0ZXJTZXQuc2V0QWxsKG1fcmVnaXN0ZXJzKTsKKyAgICB9CisKKyAgICB2b2lkIGJ1
aWxkSW5kaWNlcygpCisgICAgeworICAgICAgICBzaXplX3QgaW5kZXggPSAwOworICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7CisgICAgICAgICAgICBtX3N0YXJ0SW5k
ZXhbYmxvY2tdID0gaW5kZXg7CisgICAgICAgICAgICBpbmRleCArPSBibG9jay0+c2l6ZSgpICsg
MTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBzaXplX3QgaW5kZXhPZkhlYWQoQmFzaWNC
bG9jayogYmxvY2spCisgICAgeworICAgICAgICByZXR1cm4gbV9zdGFydEluZGV4W2Jsb2NrXTsK
KyAgICB9CisgICAgCisgICAgc2l6ZV90IGluZGV4T2ZUYWlsKEJhc2ljQmxvY2sqIGJsb2NrKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGluZGV4T2ZIZWFkKGJsb2NrKSArIGJsb2NrLT5zaXplKCk7
CisgICAgfQorICAgIAorICAgIHNpemVfdCBpbmRleE9mKEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNp
Z25lZCBpbnN0SW5kZXgsIEFyZzo6UGhhc2UgcGhhc2UpCisgICAgeworICAgICAgICByZXR1cm4g
aW5kZXhPZkhlYWQoYmxvY2spICsgaW5zdEluZGV4ICsgcGhhc2U7CisgICAgfQorICAgIAorICAg
IEludGVydmFsIGludGVydmFsKHNpemVfdCBpbmRleE9mRWFybHksIEFyZzo6VGltaW5nIHRpbWlu
ZykKKyAgICB7CisgICAgICAgIHN3aXRjaCAodGltaW5nKSB7CisgICAgICAgIGNhc2UgQXJnOjpP
bmx5RWFybHk6CisgICAgICAgICAgICByZXR1cm4gSW50ZXJ2YWwoaW5kZXhPZkVhcmx5KTsKKyAg
ICAgICAgY2FzZSBBcmc6Ok9ubHlMYXRlOgorICAgICAgICAgICAgcmV0dXJuIEludGVydmFsKGlu
ZGV4T2ZFYXJseSArIDEpOworICAgICAgICBjYXNlIEFyZzo6RWFybHlBbmRMYXRlOgorICAgICAg
ICAgICAgcmV0dXJuIEludGVydmFsKGluZGV4T2ZFYXJseSwgaW5kZXhPZkVhcmx5ICsgMik7Cisg
ICAgICAgIH0KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBJ
bnRlcnZhbCgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGJ1aWxkSW50ZXJ2YWxzKCkKKyAgICB7
CisgICAgICAgIFRtcExpdmVuZXNzPGJhbms+IGxpdmVuZXNzKG1fY29kZSk7CisgICAgICAgIAor
ICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7CisgICAgICAgICAgICBz
aXplX3QgaW5kZXhPZkhlYWQgPSB0aGlzLT5pbmRleE9mSGVhZChibG9jayk7CisgICAgICAgICAg
ICBzaXplX3QgaW5kZXhPZlRhaWwgPSB0aGlzLT5pbmRleE9mVGFpbChibG9jayk7CisgICAgICAg
ICAgICBmb3IgKFRtcCB0bXAgOiBsaXZlbmVzcy5saXZlQXRIZWFkKGJsb2NrKSkgeworICAgICAg
ICAgICAgICAgIGlmICghdG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgIG1fbWFwW3Rt
cF0uaW50ZXJ2YWwgfD0gSW50ZXJ2YWwoaW5kZXhPZkhlYWQpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZm9yIChUbXAgdG1wIDogbGl2ZW5lc3MubGl2ZUF0VGFpbChibG9jaykpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoIXRtcC5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICBtX21h
cFt0bXBdLmludGVydmFsIHw9IEludGVydmFsKGluZGV4T2ZUYWlsKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSAwOyBp
bnN0SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK2luc3RJbmRleCkgeworICAgICAgICAgICAgICAg
IEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKKyAgICAgICAgICAgICAgICBzaXpl
X3QgaW5kZXhPZkVhcmx5ID0gaW5kZXhPZkhlYWQgKyBpbnN0SW5kZXg7CisgICAgICAgICAgICAg
ICAgaW5zdC5mb3JFYWNoVG1wKAorICAgICAgICAgICAgICAgICAgICBbJl0gKFRtcCYgdG1wLCBB
cmc6OlJvbGUgcm9sZSwgQmFuayB0bXBCYW5rLCBXaWR0aCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHRtcC5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXBCYW5rICE9IGJhbmspCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgbV9t
YXBbdG1wXS5pbnRlcnZhbCB8PSBpbnRlcnZhbChpbmRleE9mRWFybHksIEFyZzo6dGltaW5nKHJv
bGUpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIFJlZ0xpdmVuZXNzOjpMb2NhbENhbGMgbG9jYWxDYWxjKGxpdmVuZXNzLCBibG9jayk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGF1dG8gcmVjb3JkID0gWyZdICh1bnNpZ25lZCBpbnN0
SW5kZXgpIHsKKyAgICAgICAgICAgICAgICBSZWdpc3RlclNldCByZWdzID0gbG9jYWxDYWxjLmxp
dmUoKTsKKyAgICAgICAgICAgICAgICBpZiAoSW5zdCogcHJldiA9IGJsb2NrLT5nZXQoaW5zdElu
ZGV4IC0gMSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJldi0+Zm9yRWFjaDxSZWc+KAorICAg
ICAgICAgICAgICAgICAgICAgICAgWyZdIChSZWcmIHJlZywgQXJnOjpSb2xlIHJvbGUsIEJhbmss
IFdpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNMYXRlRGVm
KHJvbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdzLmFkZChyZWcpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2
LT5raW5kLm9wY29kZSA9PSBQYXRjaCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZ3MubWVy
Z2UocHJldi0+ZXh0cmFDbG9iYmVyZWRSZWdzKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBpZiAoSW5zdCogbmV4dCA9IGJsb2NrLT5nZXQoaW5zdEluZGV4KSkgeworICAg
ICAgICAgICAgICAgICAgICBuZXh0LT5mb3JFYWNoPFJlZz4oCisgICAgICAgICAgICAgICAgICAg
ICAgICBbJl0gKFJlZyYgcmVnLCBBcmc6OlJvbGUgcm9sZSwgQmFuaywgV2lkdGgpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0Vhcmx5RGVmKHJvbGUpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZWdzLmFkZChyZWcpOworICAgICAgICAgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0LT5raW5kLm9wY29kZSA9
PSBQYXRjaCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZ3MubWVyZ2UobmV4dC0+ZXh0cmFF
YXJseUNsb2JiZXJlZFJlZ3MoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIHJlZ3MuZmlsdGVyKG1fcmVnaXN0ZXJTZXQpOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChyZWdzLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fY2xv
YmJlcnMuYXBwZW5kKENsb2JiZXIoaW5kZXhPZkhlYWQgKyBpbnN0SW5kZXgsIHJlZ3MpKTsKKyAg
ICAgICAgICAgIH07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJlY29yZChibG9jay0+c2l6
ZSgpKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gYmxvY2stPnNpemUo
KTsgaW5zdEluZGV4LS07KSB7CisgICAgICAgICAgICAgICAgbG9jYWxDYWxjLmV4ZWN1dGUoaW5z
dEluZGV4KTsKKyAgICAgICAgICAgICAgICByZWNvcmQoaW5zdEluZGV4KTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAg
ICAgIGRhdGFMb2coIkludGVydmFsczpcbiIpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB0
bXBJbmRleCA9IDA7IHRtcEluZGV4IDwgbV9jb2RlLm51bVRtcHMoYmFuayk7ICsrdG1wSW5kZXgp
IHsKKyAgICAgICAgICAgICAgICBUbXAgdG1wID0gVG1wOjp0bXBGb3JJbmRleChiYW5rLCB0bXBJ
bmRleCk7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICIsIHRtcCwgIjogIiwgbV9tYXBb
dG1wXSwgIlxuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
c2l6ZV90IHNvcnRpbmdJbmRleE9mKGNvbnN0IFRtcE9yQ2xvYmJlciYgdGhpbmcpCisgICAgewor
ICAgICAgICAvLyBXZSB3YW50IGNsb2JiZXJzIHRvIGNvbWUgYWZ0ZXIgdG1wcy4KKyAgICAgICAg
aWYgKHRoaW5nLmlzVG1wKCkpCisgICAgICAgICAgICByZXR1cm4gbV9tYXBbdGhpbmcudG1wKCld
LmludGVydmFsLmJlZ2luKCkgPDwgMTsKKyAgICAgICAgcmV0dXJuICh0aGluZy5jbG9iYmVyKCku
aW5kZXggPDwgMSkgfCAxOworICAgIH0KKyAgICAKKyAgICBzaXplX3QgaW5kZXhPZihjb25zdCBU
bXBPckNsb2JiZXImIHRoaW5nKQorICAgIHsKKyAgICAgICAgLy8gV2Ugd2FudCBjbG9iYmVycyB0
byBjb21lIGFmdGVyIHRtcHMuCisgICAgICAgIGlmICh0aGluZy5pc1RtcCgpKQorICAgICAgICAg
ICAgcmV0dXJuIG1fbWFwW3RoaW5nLnRtcCgpXS5pbnRlcnZhbC5iZWdpbigpOworICAgICAgICBy
ZXR1cm4gdGhpbmcuY2xvYmJlcigpLmluZGV4OworICAgIH0KKyAgICAKKyAgICB2b2lkIHByZXBh
cmVJbnRlcnZhbHMoKQorICAgIHsKKyAgICAgICAgbV9pbnRlcnZhbHMucmVzaXplKDApOworICAg
ICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCB0bXBJbmRleCA9IDA7IHRtcEluZGV4IDwgbV9j
b2RlLm51bVRtcHMoYmFuayk7ICsrdG1wSW5kZXgpIHsKKyAgICAgICAgICAgIFRtcCB0bXAgPSBU
bXA6OnRtcEZvckluZGV4KGJhbmssIHRtcEluZGV4KTsKKyAgICAgICAgICAgIFRtcERhdGEmIGRh
dGEgPSBtX21hcFt0bXBdOworICAgICAgICAgICAgaWYgKGRhdGEuc3BpbGxlZCkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZGF0YS5hc3NpZ25l
ZCA9IFJlZygpOworICAgICAgICAgICAgZGF0YS5hZGphY2VudCA9IFJlZ2lzdGVyU2V0KCk7Cisg
ICAgICAgICAgICBtX2ludGVydmFscy5hcHBlbmQodG1wKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgZm9yIChDbG9iYmVyJiBjbG9iYmVyIDogbV9jbG9iYmVycykKKyAgICAgICAgICAg
IG1faW50ZXJ2YWxzLmFwcGVuZCgmY2xvYmJlcik7CisgICAgICAgIAorICAgICAgICBzdGQ6OnNv
cnQoCisgICAgICAgICAgICBtX2ludGVydmFscy5iZWdpbigpLCBtX2ludGVydmFscy5lbmQoKSwK
KyAgICAgICAgICAgIFsmXSAoVG1wT3JDbG9iYmVyJiBhLCBUbXBPckNsb2JiZXImIGIpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gc29ydGluZ0luZGV4T2YoYSkgPCBzb3J0aW5nSW5kZXhPZihi
KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgICAgICBkYXRhTG9nKCJJbnRlcnZhbHM6ICIsIGxpc3REdW1wKG1faW50ZXJ2YWxzKSwgIlxu
Iik7CisgICAgfQorICAgIAorICAgIFRtcCBhZGRUbXBXaXRoSW50ZXJ2YWwoSW50ZXJ2YWwgaW50
ZXJ2YWwpCisgICAgeworICAgICAgICBUbXBEYXRhIGRhdGE7CisgICAgICAgIGRhdGEuaW50ZXJ2
YWwgPSBpbnRlcnZhbDsKKyAgICAgICAgCisgICAgICAgIFRtcCB0bXAgPSBtX2NvZGUubmV3VG1w
KGJhbmspOworICAgICAgICBtX21hcC5hcHBlbmQodG1wLCBkYXRhKTsKKyAgICAgICAgcmV0dXJu
IHRtcDsKKyAgICB9CisgICAgCisgICAgUmVnIGZpbmRGcmVlUmVnaXN0ZXIoVG1wIHRtcCkKKyAg
ICB7CisgICAgICAgIGlmIChtX2FjdGl2ZS5zaXplKCkgPT0gbV9yZWdpc3RlcnMuc2l6ZSgpKQor
ICAgICAgICAgICAgcmV0dXJuIFJlZygpOworICAgICAgICBUbXBEYXRhJiBkYXRhID0gbV9tYXBb
dG1wXTsKKyAgICAgICAgZm9yIChSZWcgcmVnIDogbV9yZWdpc3RlcnMpIHsKKyAgICAgICAgICAg
IGlmICghZGF0YS5hZGphY2VudC5nZXQocmVnKSAmJiAhbV9hY3RpdmVSZWdzLmdldChyZWcpKQor
ICAgICAgICAgICAgICAgIHJldHVybiByZWc7CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFJlZygpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGF0dGVtcHRTY2FuKCkKKyAgICB7CisgICAgICAgIC8vIFRoaXMgaXMgbW9kZWxl
ZCBhZnRlciBMaW5lYXJTY2FuUmVnaXN0ZXJBbGxvY2F0aW9uIGluIEZpZy4gMSBpbgorICAgICAg
ICAvLyBodHRwOi8vZGwuYWNtLm9yZy9jaXRhdGlvbi5jZm0/aWQ9MzMwMjUwLgorCisgICAgICAg
IG1fZGlkU3BpbGwgPSBmYWxzZTsKKyAgICAgICAgbV9hY3RpdmUuY2xlYXIoKTsKKyAgICAgICAg
bV9hY3RpdmVSZWdzID0gUmVnaXN0ZXJTZXQoKTsKKyAgICAgICAgZm9yIChUbXBPckNsb2JiZXIm
IHRoaW5nIDogbV9pbnRlcnZhbHMpIHsKKyAgICAgICAgICAgIHNpemVfdCBpbmRleCA9IGluZGV4
T2YodGhpbmcpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAodmVyYm9zZSkgeworICAg
ICAgICAgICAgICAgIGRhdGFMb2coIkluZGV4ICMiLCBpbmRleCwgIjogIiwgdGhpbmcsICJcbiIp
OworICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgQWN0aXZlOlxuIik7CisgICAgICAgICAgICAg
ICAgZm9yIChUbXAgdG1wIDogbV9hY3RpdmUpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2co
IiAgICAiLCB0bXAsICI6ICIsIG1fbWFwW3RtcF0sICJcbiIpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVGhpcyBpcyBFeHBpcmVPbGRJbnRlcnZhbHMg
aW4gRmlnLiAxLgorICAgICAgICAgICAgd2hpbGUgKCFtX2FjdGl2ZS5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgICAgICAgICBUbXAgdG1wID0gbV9hY3RpdmUuZmlyc3QoKTsKKyAgICAgICAgICAgICAg
ICBUbXBEYXRhJiBlbnRyeSA9IG1fbWFwW3RtcF07CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgYm9vbCBleHBpcmVkID0gZW50cnkuaW50ZXJ2YWwuZW5kKCkgPD0gaW5kZXg7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCFleHBpcmVkKQorICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX2Fj
dGl2ZS5yZW1vdmVGaXJzdCgpOworICAgICAgICAgICAgICAgIG1fYWN0aXZlUmVncy5yZW1vdmUo
ZW50cnkuYXNzaWduZWQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAg
ICAvLyBUaGlzIHBhcnQgaXMgbm90IGluIHRoZSBwYXBlciBzaW5jZSB3ZSBoYXZlIGEgbW9yZSBw
cmVjaXNlIGhhbmRsaW5nIG9mIGNsb2JiZXJzIGFuZAorICAgICAgICAgICAgLy8gcHJlY29sb3Jl
ZCByZWdpc3RlcnMuCisgICAgICAgICAgICBpZiAodGhpbmcuaXNDbG9iYmVyKCkpIHsKKyAgICAg
ICAgICAgICAgICBDbG9iYmVyIGNsb2JiZXIgPSB0aGluZy5jbG9iYmVyKCk7CisgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoIWNsb2JiZXIucmVncy5pc0VtcHR5KCkpOworICAgICAgICAg
ICAgICAgIGZvciAoVG1wIHRtcCA6IG1fYWN0aXZlKQorICAgICAgICAgICAgICAgICAgICBtX21h
cFt0bXBdLmFkamFjZW50Lm1lcmdlKGNsb2JiZXIucmVncyk7CisgICAgICAgICAgICAgICAgUmVn
aXN0ZXJTZXQgcHJvYmxlbXMgPSBtX2FjdGl2ZVJlZ3M7CisgICAgICAgICAgICAgICAgcHJvYmxl
bXMuZmlsdGVyKGNsb2JiZXIucmVncyk7CisgICAgICAgICAgICAgICAgaWYgKCFwcm9ibGVtcy5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9hY3RpdmVSZWdzLm1lcmdlKGNsb2Ji
ZXIucmVncyk7CisgICAgICAgICAgICAgICAgICAgIG1fYWN0aXZlLnJlbW92ZUFsbE1hdGNoaW5n
KAorICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChUbXAgdG1wKSAtPiBib29sIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBUbXBEYXRhJiBlbnRyeSA9IG1fbWFwW3RtcF07CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZW50cnkuYXNzaWduZWQpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJvYmxlbXMuY29udGFpbnMoZW50cnku
YXNzaWduZWQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnIGJldHRlclJlZyA9IGZpbmRGcmVlUmVn
aXN0ZXIodG1wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWJldHRlclJlZykg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGlsbCh0bXApOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzaWduV2l0aG91dEFkZGlu
Z1RvQWN0aXZlKHRtcCwgYmV0dGVyUmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAg
ICAgICAgbV9hY3RpdmVSZWdzLmV4Y2x1ZGUoY2xvYmJlci5yZWdzKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIFRtcCB0bXAgPSB0aGluZy50bXAoKTsKKyAgICAgICAgICAgIFRtcERh
dGEmIGVudHJ5ID0gbV9tYXBbdG1wXTsKKyAgICAgICAgICAgIGVudHJ5LmFkamFjZW50ID0gbV9h
Y3RpdmVSZWdzOworICAgICAgICAgICAgUmVnIHJlZyA9IGZpbmRGcmVlUmVnaXN0ZXIodG1wKTsK
KyAgICAgICAgICAgIGlmIChyZWcpIHsKKyAgICAgICAgICAgICAgICBhc3NpZ24odG1wLCByZWcp
OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgICAgICAvLyBUaGlzIGlzIFNwaWxsQXRJbnRlcnZhbCBpbiBGaWcuIDEuCisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9hY3RpdmUuaXNFbXB0eSgpKTsKKyAgICAgICAgICAg
IFRtcCBzcGlsbFRtcCA9IG1fYWN0aXZlLmxhc3QoKTsKKyAgICAgICAgICAgIFRtcERhdGEmIHNw
aWxsRW50cnkgPSBtX21hcFtzcGlsbFRtcF07CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChz
cGlsbEVudHJ5LmFzc2lnbmVkKTsKKyAgICAgICAgICAgIGlmIChzcGlsbEVudHJ5LmludGVydmFs
LmVuZCgpIDw9IGVudHJ5LmludGVydmFsLmVuZCgpKSB7CisgICAgICAgICAgICAgICAgc3BpbGwo
dG1wKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgbV9hY3RpdmUucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgYXNz
aWduKHRtcCwgc3BpbGxFbnRyeS5hc3NpZ25lZCk7CisgICAgICAgICAgICBzcGlsbChzcGlsbFRt
cCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBhc3NpZ25XaXRob3V0QWRkaW5n
VG9BY3RpdmUoVG1wIHRtcCwgUmVnIHJlZykKKyAgICB7CisgICAgICAgIFRtcERhdGEmIGVudHJ5
ID0gbV9tYXBbdG1wXTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWVudHJ5LnNwaWxsZWQpOwor
ICAgICAgICBlbnRyeS5hc3NpZ25lZCA9IHJlZzsKKyAgICAgICAgZW50cnkuYWRqYWNlbnQgPSBt
X2FjdGl2ZVJlZ3M7CisgICAgICAgIG1fYWN0aXZlUmVncy5hZGQocmVnKTsKKyAgICAgICAgZm9y
IChUbXAgb3RoZXJUbXAgOiBtX2FjdGl2ZSkgeworICAgICAgICAgICAgaWYgKG90aGVyVG1wICE9
IHRtcCkKKyAgICAgICAgICAgICAgICBtX21hcFtvdGhlclRtcF0uYWRqYWNlbnQuYWRkKHJlZyk7
CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBhc3NpZ24oVG1wIHRtcCwgUmVnIHJl
ZykKKyAgICB7CisgICAgICAgIGFzc2lnbldpdGhvdXRBZGRpbmdUb0FjdGl2ZSh0bXAsIHJlZyk7
CisgICAgICAgIG1fYWN0aXZlLmFwcGVuZEFuZEJ1YmJsZSgKKyAgICAgICAgICAgIHRtcCwKKyAg
ICAgICAgICAgIFsmXSAoVG1wIG90aGVyVG1wKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbV9tYXBbb3RoZXJUbXBdLmludGVydmFsLmVuZCgpID4gbV9tYXBbdG1wXS5pbnRlcnZh
bC5lbmQoKTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNwaWxsKFRt
cCB0bXApCisgICAgeworICAgICAgICBUbXBEYXRhJiBlbnRyeSA9IG1fbWFwW3RtcF07CisgICAg
ICAgIGVudHJ5LnNwaWxsZWQgPSBtX2NvZGUuYWRkU3RhY2tTbG90KDgsIFN0YWNrU2xvdEtpbmQ6
OlNwaWxsKTsKKyAgICAgICAgZW50cnkuYXNzaWduZWQgPSBSZWcoKTsKKyAgICAgICAgbV9kaWRT
cGlsbCA9IHRydWU7CisgICAgfQorICAgIAorICAgIHZvaWQgZW1pdFNwaWxsQ29kZSgpCisgICAg
eworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7CisgICAgICAgICAg
ICBzaXplX3QgaW5kZXhPZkhlYWQgPSB0aGlzLT5pbmRleE9mSGVhZChibG9jayk7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IDA7IGluc3RJbmRleCA8IGJsb2NrLT5zaXpl
KCk7ICsraW5zdEluZGV4KSB7CisgICAgICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5h
dChpbnN0SW5kZXgpOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4T2ZFYXJseSA9IGlu
ZGV4T2ZIZWFkICsgaW5zdEluZGV4OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IC8vIEZpcnN0IHRyeSB0byBzcGlsbCBkaXJlY3RseS4KKyAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgaW5zdC5hcmdzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAg
ICAgICAgIEFyZyYgYXJnID0gaW5zdC5hcmdzW2ldOworICAgICAgICAgICAgICAgICAgICBpZiAo
IWFyZy5pc1RtcCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChhcmcuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgICAgICBpZiAoYXJnLmJhbmsoKSAhPSBiYW5rKQorICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIFN0YWNr
U2xvdCogc3BpbGxlZCA9IG1fbWFwW2FyZy50bXAoKV0uc3BpbGxlZDsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFzcGlsbGVkKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICghaW5zdC5hZG1pdHNTdGFjayhpKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBhcmcgPSBBcmc6OnN0
YWNrKHNwaWxsZWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAvLyBGYWxsIGJhY2sgb24gdGhlIGhhcmQgd2F5LgorICAgICAgICAgICAgICAg
IGluc3QuZm9yRWFjaFRtcCgKKyAgICAgICAgICAgICAgICAgICAgWyZdIChUbXAmIHRtcCwgQXJn
OjpSb2xlIHJvbGUsIEJhbmsgdG1wQmFuaywgV2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wQmFuayAhPSBiYW5rKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNr
U2xvdCogc3BpbGxlZCA9IG1fbWFwW3RtcF0uc3BpbGxlZDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghc3BpbGxlZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgICAgICAgICBPcGNvZGUgbW92ZSA9IGJhbmsgPT0gR1AgPyBNb3ZlIDog
TW92ZURvdWJsZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IGFkZFRtcFdpdGhJbnRl
cnZhbChpbnRlcnZhbChpbmRleE9mRWFybHksIEFyZzo6dGltaW5nKHJvbGUpKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAocm9sZSA9PSBBcmc6OlNjcmF0Y2gpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6
aXNBbnlVc2Uocm9sZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25T
ZXRzW2Jsb2NrXS5pbnNlcnQoaW5zdEluZGV4LCBtb3ZlLCBpbnN0Lm9yaWdpbiwgQXJnOjpzdGFj
ayhzcGlsbGVkKSwgdG1wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzQW55
RGVmKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0c1ti
bG9ja10uaW5zZXJ0KGluc3RJbmRleCArIDEsIG1vdmUsIGluc3Qub3JpZ2luLCB0bXAsIEFyZzo6
c3RhY2soc3BpbGxlZCkpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGluc2VydFNwaWxsQ29kZSgpCisgICAg
eworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKQorICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXRzW2Jsb2NrXS5leGVjdXRlKGJsb2NrKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBhc3NpZ25SZWdpc3RlcnMoKQorICAgIHsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBi
bG9jayA6IG1fY29kZSkgeworICAgICAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogKmJsb2NrKSB7
CisgICAgICAgICAgICAgICAgaW5zdC5mb3JFYWNoVG1wRmFzdCgKKyAgICAgICAgICAgICAgICAg
ICAgWyZdIChUbXAmIHRtcCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcC5pc1Jl
ZygpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh0bXAuYmFuaygpICE9IGJhbmspCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgICAgICBSZWcgcmVnID0gbV9tYXBbdG1wXS5hc3NpZ25lZDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghcmVnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygi
RmFpbGVkIHRvIGFsbG9jYXRlIHJlZyBmb3I6ICIsIHRtcCwgIlxuIik7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IFRtcChyZWcpOwor
ICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KyAgICAKKyAgICBDb2RlJiBtX2NvZGU7CisgICAgVmVjdG9yPFJlZz4gbV9yZWdpc3RlcnM7Cisg
ICAgUmVnaXN0ZXJTZXQgbV9yZWdpc3RlclNldDsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwg
c2l6ZV90PiBtX3N0YXJ0SW5kZXg7CisgICAgSW5kZXhNYXA8VG1wOjpJbmRleGVkPGJhbms+LCBU
bXBEYXRhPiBtX21hcDsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgSW5zZXJ0aW9uU2V0PiBt
X2luc2VydGlvblNldHM7CisgICAgVmVjdG9yPENsb2JiZXI+IG1fY2xvYmJlcnM7IC8vIEFmdGVy
IHdlIGFsbG9jYXRlIHRoaXMsIHdlIGhhcHBpbHkgcG9pbnQgcG9pbnRlcnMgaW50byBpdC4KKyAg
ICBWZWN0b3I8VG1wT3JDbG9iYmVyPiBtX2ludGVydmFsczsKKyAgICBEZXF1ZTxUbXA+IG1fYWN0
aXZlOworICAgIFJlZ2lzdGVyU2V0IG1fYWN0aXZlUmVnczsKKyAgICBib29sIG1fZGlkU3BpbGwg
eyBmYWxzZSB9OworfTsKKwordGVtcGxhdGU8QmFuayBiYW5rPgordm9pZCBydW5MaW5lYXJTY2Fu
KENvZGUmIGNvZGUpCit7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIkFpciBi
ZWZvcmUgbGluZWFyIHNjYW4gZm9yICIsIGJhbmssICI6XG4iLCBjb2RlKTsKKyAgICBMaW5lYXJT
Y2FuPGJhbms+IGxpbmVhclNjYW4oY29kZSk7CisgICAgbGluZWFyU2Nhbi5ydW4oKTsKK30KKwor
fSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgYWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVh
clNjYW4oQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgImFs
bG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuIik7CisgICAgcGFkSW50ZXJmZXJlbmNlKGNvZGUp
OworICAgIHJ1bkxpbmVhclNjYW48RlA+KGNvZGUpOworICAgIHJ1bkxpbmVhclNjYW48R1A+KGNv
ZGUpOworICAgIGZpeFNwaWxsc0FmdGVyVGVybWluYWxzKGNvZGUpOworfQorCit9IH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFy
U2Nhbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxs
b2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIkNQVS5oIgorI2luY2x1ZGUgIk9wdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCisvLyBUaGlz
IGltcGxlbWVudHMgdGhlIFBvbGV0dG8gYW5kIFNhcmtlciByZWdpc3RlciBhbGxvY2F0b3IgY2Fs
bGVkICJsaW5lYXIgc2NhbiI6CisvLyBodHRwOi8vZGwuYWNtLm9yZy9jaXRhdGlvbi5jZm0/aWQ9
MzMwMjUwCisvLworLy8gVGhpcyBpcyBub3QgQWlyJ3MgcHJpbWFyeSByZWdpc3RlciBhbGxvY2F0
b3IuIFdlIHVzZSBpdCBvbmx5IHdoZW4gcnVubmluZyBhdCBvcHRMZXZlbD0wLiBUaGF0J3Mgbm90
CisvLyB0aGUgZGVmYXVsdCBsZXZlbC4gVGhpcyByZWdpc3RlciBhbGxvY2F0b3IgaXMgb3B0aW1p
emVkIHByaW1hcmlseSBmb3IgcnVubmluZyBxdWlja2x5LiBJdCdzIGV4cGVjdGVkCisvLyB0aGF0
IGltcHJvdmVtZW50cyB0byB0aGlzIHJlZ2lzdGVyIGFsbG9jYXRvciBzaG91bGQgZm9jdXMgcHJp
bWFyaWx5IG9uIGltcHJvdmluZyBpdHMgZXhlY3V0aW9uIHRpbWUKKy8vIHdpdGhvdXQgbXVjaCBy
ZWdhcmQgZm9yIHRoZSBxdWFsaXR5IG9mIGdlbmVyYXRlZCBjb2RlLgorLy8KKy8vIEZvciBBaXIn
cyBwcmltYXJ5IHJlZ2lzdGVyIGFsbG9jYXRvciwgc2VlIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlH
cmFwaENvbG9yaW5nLmh8Y3BwLgordm9pZCBhbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2NhbihD
b2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9j
YXRlU3RhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyQWxsb2NhdGVTdGFjay5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2
MSw3ICsxNjEsNyBAQCB2b2lkIGFsbG9jYXRlU3RhY2soQ29kZSYgY29kZSkKIAogICAgIC8vIE5v
dyB3ZSBoYW5kbGUgdGhlIHNwaWxsIHNsb3RzLgogICAgIFN0YWNrU2xvdExpdmVuZXNzIGxpdmVu
ZXNzKGNvZGUpOwotICAgIEluZGV4TWFwPFN0YWNrU2xvdCwgSGFzaFNldDxTdGFja1Nsb3QqPj4g
aW50ZXJmZXJlbmNlKGNvZGUuc3RhY2tTbG90cygpLnNpemUoKSk7CisgICAgSW5kZXhNYXA8U3Rh
Y2tTbG90KiwgSGFzaFNldDxTdGFja1Nsb3QqPj4gaW50ZXJmZXJlbmNlKGNvZGUuc3RhY2tTbG90
cygpLnNpemUoKSk7CiAgICAgVmVjdG9yPFN0YWNrU2xvdCo+IHNsb3RzOwogCiAgICAgLy8gV2Ug
d2lsbCBwZXJmb3JtIHNvbWUgc3BpbGwgY29hbGVzY2luZy4gVG8gbWFrZSB0aGF0IGVmZmVjdGl2
ZSwgd2UgbmVlZCB0byBiZSBhYmxlIHRvIGlkZW50aWZ5CkBAIC0zMDksNyArMzA5LDcgQEAgdm9p
ZCBhbGxvY2F0ZVN0YWNrKENvZGUmIGNvZGUpCiAgICAgICAgICAgICByZXR1cm4gYS5mcmVxdWVu
Y3kgPiBiLmZyZXF1ZW5jeTsKICAgICAgICAgfSk7CiAgICAgCi0gICAgSW5kZXhNYXA8U3RhY2tT
bG90LCBTdGFja1Nsb3QqPiByZW1hcHBlZFN0YWNrU2xvdHMoY29kZS5zdGFja1Nsb3RzKCkuc2l6
ZSgpKTsKKyAgICBJbmRleE1hcDxTdGFja1Nsb3QqLCBTdGFja1Nsb3QqPiByZW1hcHBlZFN0YWNr
U2xvdHMoY29kZS5zdGFja1Nsb3RzKCkuc2l6ZSgpKTsKICAgICBhdXRvIHJlbWFwID0gWyZdIChT
dGFja1Nsb3QqIHNsb3QpIC0+IFN0YWNrU2xvdCogewogICAgICAgICBpZiAoIXNsb3QpCiAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQXJnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckFyZy5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQXJnLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgyLDYgKzI4MiwzNyBAQCB2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQXJnCiAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKIH0KIAordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQs
IEFyZzo6UGhhc2UgcGhhc2UpCit7CisgICAgc3dpdGNoIChwaGFzZSkgeworICAgIGNhc2UgQXJn
OjpFYXJseToKKyAgICAgICAgb3V0LnByaW50KCJFYXJseSIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBBcmc6OkxhdGU6CisgICAgICAgIG91dC5wcmludCgiTGF0ZSIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwor
dm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEFyZzo6VGltaW5nIHRpbWluZykK
K3sKKyAgICBzd2l0Y2ggKHRpbWluZykgeworICAgIGNhc2UgQXJnOjpPbmx5RWFybHk6CisgICAg
ICAgIG91dC5wcmludCgiT25seUVhcmx5Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFy
Zzo6T25seUxhdGU6CisgICAgICAgIG91dC5wcmludCgiT25seUxhdGUiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgQXJnOjpFYXJseUFuZExhdGU6CisgICAgICAgIG91dC5wcmludCgiRWFy
bHlBbmRMYXRlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworfQorCiB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91
dCwgQXJnOjpSb2xlIHJvbGUpCiB7CiAgICAgc3dpdGNoIChyb2xlKSB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHdvcmtpbmcgY29weSkKQEAgLTkyLDYgKzky
LDE3IEBAIHB1YmxpYzoKICAgICAgICAgQ29sZCwKICAgICAgICAgV2FybQogICAgIH07CisgICAg
CisgICAgZW51bSBQaGFzZSA6IGludDhfdCB7CisgICAgICAgIEVhcmx5LAorICAgICAgICBMYXRl
CisgICAgfTsKKyAgICAKKyAgICBlbnVtIFRpbWluZyA6IGludDhfdCB7CisgICAgICAgIE9ubHlF
YXJseSwKKyAgICAgICAgT25seUxhdGUsCisgICAgICAgIEVhcmx5QW5kTGF0ZQorICAgIH07CiAK
ICAgICBlbnVtIFJvbGUgOiBpbnQ4X3QgewogICAgICAgICAvLyBVc2UgbWVhbnMgdGhhdCB0aGUg
SW5zdCB3aWxsIHJlYWQgZnJvbSB0aGlzIHZhbHVlIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNl
LgpAQCAtMjUzLDcgKzI2NCw4MiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gaXND
b2xkVXNlKHJvbGUpID8gQ29sZCA6IFdhcm07CiAgICAgfQotCisgICAgCisgICAgc3RhdGljIGJv
b2wgYWN0aXZlQXQoUm9sZSByb2xlLCBQaGFzZSBwaGFzZSkKKyAgICB7CisgICAgICAgIHN3aXRj
aCAocm9sZSkgeworICAgICAgICBjYXNlIFVzZToKKyAgICAgICAgY2FzZSBDb2xkVXNlOgorICAg
ICAgICBjYXNlIEVhcmx5RGVmOgorICAgICAgICBjYXNlIEVhcmx5WkRlZjoKKyAgICAgICAgY2Fz
ZSBVc2VBZGRyOgorICAgICAgICAgICAgcmV0dXJuIHBoYXNlID09IEVhcmx5OworICAgICAgICBj
YXNlIExhdGVVc2U6CisgICAgICAgIGNhc2UgTGF0ZUNvbGRVc2U6CisgICAgICAgIGNhc2UgRGVm
OgorICAgICAgICBjYXNlIFpEZWY6CisgICAgICAgICAgICByZXR1cm4gcGhhc2UgPT0gTGF0ZTsK
KyAgICAgICAgY2FzZSBVc2VEZWY6CisgICAgICAgIGNhc2UgVXNlWkRlZjoKKyAgICAgICAgY2Fz
ZSBTY3JhdGNoOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBib29sIGFjdGl2
ZUF0KFRpbWluZyB0aW1pbmcsIFBoYXNlIHBoYXNlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0
aW1pbmcpIHsKKyAgICAgICAgY2FzZSBPbmx5RWFybHk6CisgICAgICAgICAgICByZXR1cm4gcGhh
c2UgPT0gRWFybHk7CisgICAgICAgIGNhc2UgT25seUxhdGU6CisgICAgICAgICAgICByZXR1cm4g
cGhhc2UgPT0gTGF0ZTsKKyAgICAgICAgY2FzZSBFYXJseUFuZExhdGU6CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICB9CisgICAgCisgICAgc3RhdGljIFRpbWluZyB0aW1pbmcoUm9sZSByb2xlKQorICAgIHsKKyAg
ICAgICAgc3dpdGNoIChyb2xlKSB7CisgICAgICAgIGNhc2UgVXNlOgorICAgICAgICBjYXNlIENv
bGRVc2U6CisgICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAgIGNhc2UgRWFybHlaRGVmOgor
ICAgICAgICBjYXNlIFVzZUFkZHI6CisgICAgICAgICAgICByZXR1cm4gT25seUVhcmx5OworICAg
ICAgICBjYXNlIExhdGVVc2U6CisgICAgICAgIGNhc2UgTGF0ZUNvbGRVc2U6CisgICAgICAgIGNh
c2UgRGVmOgorICAgICAgICBjYXNlIFpEZWY6CisgICAgICAgICAgICByZXR1cm4gT25seUxhdGU7
CisgICAgICAgIGNhc2UgVXNlRGVmOgorICAgICAgICBjYXNlIFVzZVpEZWY6CisgICAgICAgIGNh
c2UgU2NyYXRjaDoKKyAgICAgICAgICAgIHJldHVybiBFYXJseUFuZExhdGU7CisgICAgICAgIH0K
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmM+CisgICAgc3RhdGljIHZvaWQgZm9yRWFjaFBoYXNlKFRpbWluZyB0aW1p
bmcsIGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgeworICAgICAgICBpZiAoYWN0aXZlQXQodGltaW5n
LCBFYXJseSkpCisgICAgICAgICAgICBmdW5jKEVhcmx5KTsKKyAgICAgICAgaWYgKGFjdGl2ZUF0
KHRpbWluZywgTGF0ZSkpCisgICAgICAgICAgICBmdW5jKExhdGUpOworICAgIH0KKyAgICAKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIHN0YXRpYyB2b2lkIGZvckVhY2hQaGFzZShS
b2xlIHJvbGUsIGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgeworICAgICAgICBpZiAoYWN0aXZlQXQo
cm9sZSwgRWFybHkpKQorICAgICAgICAgICAgZnVuYyhFYXJseSk7CisgICAgICAgIGlmIChhY3Rp
dmVBdChyb2xlLCBMYXRlKSkKKyAgICAgICAgICAgIGZ1bmMoTGF0ZSk7CisgICAgfQorICAgIAog
ICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgUm9sZSBpbXBsaWVzIHRoYXQgdGhlIEluc3Qgd2ls
bCBVc2UgdGhlIEFyZyBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZS4KICAgICBzdGF0aWMgYm9v
bCBpc0Vhcmx5VXNlKFJvbGUgcm9sZSkKICAgICB7CkBAIC0xMzU0LDYgKzE0NDAsOCBAQCBuYW1l
c3BhY2UgV1RGIHsKIAogSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmludEludGVybmFsKFByaW50
U3RyZWFtJiwgSlNDOjpCMzo6QWlyOjpBcmc6OktpbmQpOwogSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6QWlyOjpBcmc6OlRlbXBlcmF0
dXJlKTsKK0pTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYs
IEpTQzo6QjM6OkFpcjo6QXJnOjpQaGFzZSk7CitKU19FWFBPUlRfUFJJVkFURSB2b2lkIHByaW50
SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpBaXI6OkFyZzo6VGltaW5nKTsKIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OkFp
cjo6QXJnOjpSb2xlKTsKIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJpbnRJbnRlcm5hbChQcmlu
dFN0cmVhbSYsIEpTQzo6QjM6OkFpcjo6QXJnOjpTaWduZWRuZXNzKTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja1dvcmtsaXN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja1dvcmtsaXN0LmgJKHJldmlzaW9u
IDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmxvY2tXb3JrbGlz
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewogCi10eXBlZGVmIEdyYXBoTm9kZVdvcmtsaXN0PEJh
c2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrPj4gQmxvY2tXb3JrbGlzdDsKK3R5cGVkZWYg
R3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2sqPj4gQmxv
Y2tXb3JrbGlzdDsKIAogLy8gV2hlbiB5b3Ugc2F5IEJsb2NrV2l0aDxpbnQ+IHlvdSBzaG91bGQg
cmVhZCBpdCBhcyAiYmxvY2sgd2l0aCBhbiBpbnQiLgogdGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNp
bmcgQmxvY2tXaXRoID0gR3JhcGhOb2RlV2l0aDxCYXNpY0Jsb2NrKiwgVD47CkBAIC00MSwxMSAr
NDEsMTEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcgQmxvY2tXaXRoID0gRwogLy8gcGVy
bWl0cyBmb3JjaWJseSBlbnF1ZXVlaW5nIHRoaW5ncyBldmVuIGlmIHRoZSBibG9jayBoYXMgYWxy
ZWFkeSBiZWVuIHNlZW4uIEl0J3MgdXNlZnVsIGZvcgogLy8gdGhpbmdzIGxpa2UgYnVpbGRpbmcg
YSBzcGFubmluZyB0cmVlLCBpbiB3aGljaCBjYXNlIFQgKHRoZSBhdXhpbGlhcnkgcGF5bG9hZCkg
d291bGQgYmUgdGhlCiAvLyBzdWNjZXNzb3IgaW5kZXguCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1
c2luZyBFeHRlbmRlZEJsb2NrV29ya2xpc3QgPSBFeHRlbmRlZEdyYXBoTm9kZVdvcmtsaXN0PEJh
c2ljQmxvY2sqLCBULCBJbmRleFNldDxCYXNpY0Jsb2NrPj47Cit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiB1c2luZyBFeHRlbmRlZEJsb2NrV29ya2xpc3QgPSBFeHRlbmRlZEdyYXBoTm9kZVdvcmtsaXN0
PEJhc2ljQmxvY2sqLCBULCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+OwogCiB0eXBlZGVmIEdyYXBo
Tm9kZVdpdGhPcmRlcjxCYXNpY0Jsb2NrKj4gQmxvY2tXaXRoT3JkZXI7CiAKLXR5cGVkZWYgUG9z
dE9yZGVyR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2s+
PiBQb3N0T3JkZXJCbG9ja1dvcmtsaXN0OwordHlwZWRlZiBQb3N0T3JkZXJHcmFwaE5vZGVXb3Jr
bGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jayo+PiBQb3N0T3JkZXJCbG9ja1dv
cmtsaXN0OwogCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0ZHLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDRkcuaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDRkcuaAkod29ya2luZyBjb3B5KQpAQCAtMzksOCAr
MzksOCBAQCBjbGFzcyBDRkcgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGlj
OgogICAgIHR5cGVkZWYgQmFzaWNCbG9jayogTm9kZTsKLSAgICB0eXBlZGVmIEluZGV4U2V0PEJh
c2ljQmxvY2s+IFNldDsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBNYXAgPSBJbmRl
eE1hcDxCYXNpY0Jsb2NrLCBUPjsKKyAgICB0eXBlZGVmIEluZGV4U2V0PEJhc2ljQmxvY2sqPiBT
ZXQ7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcgTWFwID0gSW5kZXhNYXA8QmFzaWNC
bG9jayosIFQ+OwogICAgIHR5cGVkZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCA0PiBMaXN0OwogCiAg
ICAgQ0ZHKENvZGUmIGNvZGUpCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICBOb2RlIHJv
b3QoKSB7IHJldHVybiBtX2NvZGVbMF07IH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0g
ICAgTWFwPFQ+IG5ld01hcCgpIHsgcmV0dXJuIEluZGV4TWFwPEpTQzo6QjM6OkFpcjo6QmFzaWNC
bG9jaywgVD4obV9jb2RlLnNpemUoKSk7IH0KKyAgICBNYXA8VD4gbmV3TWFwKCkgeyByZXR1cm4g
SW5kZXhNYXA8SlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrKiwgVD4obV9jb2RlLnNpemUoKSk7IH0K
IAogICAgIFN1Y2Nlc3NvckNvbGxlY3Rpb248QmFzaWNCbG9jaywgQmFzaWNCbG9jazo6U3VjY2Vz
c29yTGlzdD4gc3VjY2Vzc29ycyhOb2RlIG5vZGUpIHsgcmV0dXJuIG5vZGUtPnN1Y2Nlc3NvckJs
b2NrcygpOyB9CiAgICAgQmFzaWNCbG9jazo6UHJlZGVjZXNzb3JMaXN0JiBwcmVkZWNlc3NvcnMo
Tm9kZSBub2RlKSB7IHJldHVybiBub2RlLT5wcmVkZWNlc3NvcnMoKTsgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbGltaW5hdGVEZWFkQ29kZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbGltaW5hdGVEZWFkQ29kZS5j
cHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
RWxpbWluYXRlRGVhZENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIGJv
b2wgZWxpbWluYXRlRGVhZENvZGUoQ29kZSYgY29kZSkKICAgICBQaGFzZVNjb3BlIHBoYXNlU2Nv
cGUoY29kZSwgImVsaW1pbmF0ZURlYWRDb2RlIik7CiAKICAgICBIYXNoU2V0PFRtcD4gbGl2ZVRt
cHM7Ci0gICAgSW5kZXhTZXQ8U3RhY2tTbG90PiBsaXZlU3RhY2tTbG90czsKKyAgICBJbmRleFNl
dDxTdGFja1Nsb3QqPiBsaXZlU3RhY2tTbG90czsKICAgICBib29sIGNoYW5nZWQ7CiAKICAgICBh
dXRvIGlzQXJnTGl2ZSA9IFsmXSAoY29uc3QgQXJnJiBhcmcpIC0+IGJvb2wgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhPYnZpb3VzU3BpbGxzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeE9idmlvdXNTcGlsbHMu
Y3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckZpeE9idmlvdXNTcGlsbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NDcsNyArNTQ3LDcgQEAg
cHJpdmF0ZToKICAgICB9OwogCiAgICAgQ29kZSYgbV9jb2RlOwotICAgIEluZGV4TWFwPEJhc2lj
QmxvY2ssIFN0YXRlPiBtX2F0SGVhZDsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgU3RhdGU+
IG1fYXRIZWFkOwogICAgIFN0YXRlIG1fc3RhdGU7CiAgICAgQmFzaWNCbG9jayogbV9ibG9jayB7
IG51bGxwdHIgfTsKICAgICB1bnNpZ25lZCBtX2luc3RJbmRleCB7IDAgfTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeFBhcnRpYWxS
ZWdpc3RlclN0YWxscy5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTU1LDEwICsxNTUsMTAgQEAgdm9pZCBmaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMoQ29k
ZSYgY29kZQogCiAgICAgLy8gRm9yIGVhY2ggYmxvY2ssIHRoaXMgcHJvdmlkZXMgdGhlIGRpc3Rh
bmNlIHRvIHRoZSBsYXN0IGluc3RydWN0aW9uIHNldHRpbmcgZWFjaCByZWdpc3RlcgogICAgIC8v
IG9uIGJsb2NrICplbnRyeSouCi0gICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgRlBEZWZEaXN0YW5j
ZT4gbGFzdERlZkRpc3RhbmNlKGNvZGUuc2l6ZSgpKTsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2Nr
KiwgRlBEZWZEaXN0YW5jZT4gbGFzdERlZkRpc3RhbmNlKGNvZGUuc2l6ZSgpKTsKIAogICAgIC8v
IEJsb2NrcyB3aXRoIGRpcnR5IGRpc3RhbmNlIGF0IGhlYWQuCi0gICAgSW5kZXhTZXQ8QmFzaWNC
bG9jaz4gZGlydHk7CisgICAgSW5kZXhTZXQ8QmFzaWNCbG9jayo+IGRpcnR5OwogCiAgICAgLy8g
Rmlyc3QsIHdlIGNvbXB1dGUgdGhlIGxvY2FsIGRpc3RhbmNlIGZvciBlYWNoIGJsb2NrIGFuZCBw
dXNoIGl0IHRvIHRoZSBzdWNjZXNzb3JzLgogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBj
b2RlKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeFNwaWxsc0Fm
dGVyVGVybWluYWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckZp
eFNwaWxsc0FmdGVyVGVybWluYWxzLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVk
ZSAiQWlyQmxvY2tJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVk
ZSAiQWlySW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKKyNpbmNs
dWRlICJBaXJUbXBJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBu
YW1lc3BhY2UgQWlyIHsKKwordm9pZCBmaXhTcGlsbHNBZnRlclRlcm1pbmFscyhDb2RlJiBjb2Rl
KQoreworICAgIC8vIEJlY2F1c2UgdGhlcmUgbWF5IGJlIHRlcm1pbmFscyB0aGF0IHByb2R1Y2Ug
dmFsdWVzLCBJUkMgbWF5CisgICAgLy8gd2FudCB0byBzcGlsbCB0aG9zZSB0ZXJtaW5hbHMuIEl0
J2xsIGhhcHBlbiB0byBzcGlsbCBpdCBhZnRlcgorICAgIC8vIHRoZSB0ZXJtaW5hbC4gSWYgd2Ug
bGVmdCB0aGUgZ3JhcGggaW4gdGhpcyBzdGF0ZSwgaXQnZCBiZSBpbnZhbGlkCisgICAgLy8gYmVj
YXVzZSBhIHRlcm1pbmFsIG11c3QgYmUgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24gaW4gYSBibG9jay4K
KyAgICAvLyBXZSBmaXggdGhhdCBoZXJlLgorCisgICAgQmxvY2tJbnNlcnRpb25TZXQgYmxvY2tJ
bnNlcnRpb25TZXQoY29kZSk7CisgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChjb2RlKTsK
KworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIHVuc2lnbmVk
IHRlcm1pbmFsSW5kZXggPSBibG9jay0+c2l6ZSgpOworICAgICAgICBib29sIGZvdW5kVGVybWlu
YWwgPSBmYWxzZTsKKyAgICAgICAgd2hpbGUgKHRlcm1pbmFsSW5kZXgtLSkgeworICAgICAgICAg
ICAgaWYgKGJsb2NrLT5hdCh0ZXJtaW5hbEluZGV4KS5pc1Rlcm1pbmFsKCkpIHsKKyAgICAgICAg
ICAgICAgICBmb3VuZFRlcm1pbmFsID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfVU5VU0VEKGZvdW5kVGVybWlu
YWwsIGZvdW5kVGVybWluYWwpOworCisgICAgICAgIGlmICh0ZXJtaW5hbEluZGV4ID09IGJsb2Nr
LT5zaXplKCkgLSAxKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8gVGhlcmUg
bXVzdCBiZSBpbnN0cnVjdGlvbnMgYWZ0ZXIgdGhlIHRlcm1pbmFsIGJlY2F1c2UgaXQncyBub3Qg
dGhlIGxhc3QgaW5zdHJ1Y3Rpb24uCisgICAgICAgIEFTU0VSVCh0ZXJtaW5hbEluZGV4IDwgYmxv
Y2stPnNpemUoKSAtIDEpOworICAgICAgICBWZWN0b3I8SW5zdCwgMT4gaW5zdHNUb01vdmU7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IHRlcm1pbmFsSW5kZXggKyAxOyBpIDwgYmxvY2stPnNp
emUoKTsgaSsrKQorICAgICAgICAgICAgaW5zdHNUb01vdmUuYXBwZW5kKGJsb2NrLT5hdChpKSk7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluc3RzVG9Nb3ZlLnNpemUoKSk7CisKKyAgICAgICAg
Zm9yIChGcmVxdWVudGVkQmxvY2smIGZyZXF1ZW50ZWRTdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vz
c29ycygpKSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBmcmVxdWVudGVk
U3VjY2Vzc29yLmJsb2NrKCk7CisgICAgICAgICAgICAvLyBJZiBzdWNjZXNzb3IncyBvbmx5IHBy
ZWRlY2Vzc29yIGlzIGJsb2NrLCB3ZSBjYW4gcGxhbnQgdGhlIHNwaWxsIGluc2lkZQorICAgICAg
ICAgICAgLy8gdGhlIHN1Y2Nlc3Nvci4gT3RoZXJ3aXNlLCB3ZSBtdXN0IHNwbGl0IHRoZSBjcml0
aWNhbCBlZGdlIGFuZCBjcmVhdGUKKyAgICAgICAgICAgIC8vIGEgbmV3IGJsb2NrIGZvciB0aGUg
c3BpbGwuCisgICAgICAgICAgICBpZiAoc3VjY2Vzc29yLT5udW1QcmVkZWNlc3NvcnMoKSA9PSAx
KSB7CisgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydEluc3RzKDAsIGluc3RzVG9N
b3ZlKTsKKyAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShzdWNjZXNzb3IpOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBuZXdCbG9j
ayA9IGJsb2NrSW5zZXJ0aW9uU2V0Lmluc2VydEJlZm9yZShzdWNjZXNzb3IsIHN1Y2Nlc3Nvci0+
ZnJlcXVlbmN5KCkpOworICAgICAgICAgICAgICAgIGZvciAoY29uc3QgSW5zdCYgaW5zdCA6IGlu
c3RzVG9Nb3ZlKQorICAgICAgICAgICAgICAgICAgICBuZXdCbG9jay0+YXBwZW5kSW5zdChpbnN0
KTsKKyAgICAgICAgICAgICAgICBuZXdCbG9jay0+YXBwZW5kSW5zdChJbnN0KEp1bXAsIGluc3Rz
VG9Nb3ZlLmxhc3QoKS5vcmlnaW4pKTsKKyAgICAgICAgICAgICAgICBuZXdCbG9jay0+c3VjY2Vz
c29ycygpLmFwcGVuZChzdWNjZXNzb3IpOworICAgICAgICAgICAgICAgIGZyZXF1ZW50ZWRTdWNj
ZXNzb3IuYmxvY2soKSA9IG5ld0Jsb2NrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgYmxvY2stPnJlc2l6ZSh0ZXJtaW5hbEluZGV4ICsgMSk7CisgICAgfQorCisgICAgaWYg
KGJsb2NrSW5zZXJ0aW9uU2V0LmV4ZWN1dGUoKSkKKyAgICAgICAgY29kZS5yZXNldFJlYWNoYWJp
bGl0eSgpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5h
bHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisK
K2NsYXNzIENvZGU7CisKKy8vIEJlY2F1c2UgdGhlcmUgbWF5IGJlIHRlcm1pbmFscyB0aGF0IHBy
b2R1Y2UgdmFsdWVzLCB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yIG1heQorLy8gd2FudCB0byBzcGls
bCB0aG9zZSB0ZXJtaW5hbHMuIEl0J2xsIGhhcHBlbiB0byBzcGlsbCBpdCBhZnRlcgorLy8gdGhl
IHRlcm1pbmFsLiBJZiB3ZSBsZWZ0IHRoZSBncmFwaCBpbiB0aGlzIHN0YXRlLCBpdCdkIGJlIGlu
dmFsaWQKKy8vIGJlY2F1c2UgYSB0ZXJtaW5hbCBtdXN0IGJlIHRoZSBsYXN0IGluc3RydWN0aW9u
IGluIGEgYmxvY2suCisvLyBXZSBmaXggdGhhdCBoZXJlLgordm9pZCBmaXhTcGlsbHNBZnRlclRl
cm1pbmFscyhDb2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyR2VuZXJhdGUuY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiAr
MjksNyBAQAogI2lmIEVOQUJMRShCM19KSVQpCiAKICNpbmNsdWRlICJBaXJBbGxvY2F0ZVJlZ2lz
dGVyc0J5R3JhcGhDb2xvcmluZy5oIgorI2luY2x1ZGUgIkFpckFsbG9jYXRlUmVnaXN0ZXJzQnlM
aW5lYXJTY2FuLmgiCiAjaW5jbHVkZSAiQWlyQWxsb2NhdGVTdGFjay5oIgogI2luY2x1ZGUgIkFp
ckNvZGUuaCIKICNpbmNsdWRlICJBaXJFbGltaW5hdGVEZWFkQ29kZS5oIgpAQCAtNTcsNyArNTgs
NyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CiAK
LXZvaWQgcHJlcGFyZUZvckdlbmVyYXRpb24oQ29kZSYgY29kZSkKK3ZvaWQgcHJlcGFyZUZvckdl
bmVyYXRpb24oQ29kZSYgY29kZSwgdW5zaWduZWQgb3B0TGV2ZWwpCiB7CiAgICAgVGltaW5nU2Nv
cGUgdGltaW5nU2NvcGUoIkFpcjo6cHJlcGFyZUZvckdlbmVyYXRpb24iKTsKICAgICAKQEAgLTg5
LDE4ICs5MCwyMiBAQCB2b2lkIHByZXBhcmVGb3JHZW5lcmF0aW9uKENvZGUmIGNvZGUpCiAgICAg
Ly8gRm9yIGRlYnVnZ2luZywgeW91IGNhbiB1c2Ugc3BpbGxFdmVyeXRoaW5nKCkgdG8gcHV0IGV2
ZXJ5dGhpbmcgdG8gdGhlIHN0YWNrIGJldHdlZW4gZWFjaCBJbnN0LgogICAgIGlmIChPcHRpb25z
OjphaXJTcGlsbHNFdmVyeXRoaW5nKCkpCiAgICAgICAgIHNwaWxsRXZlcnl0aGluZyhjb2RlKTsK
LSAgICBlbHNlCisgICAgZWxzZSBpZiAob3B0TGV2ZWwgPj0gMikKICAgICAgICAgYWxsb2NhdGVS
ZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcoY29kZSk7CisgICAgZWxzZQorICAgICAgICBhbGxvY2F0
ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbihjb2RlKTsKIAogICAgIGlmIChPcHRpb25zOjpsb2dBaXJS
ZWdpc3RlclByZXNzdXJlKCkpIHsKICAgICAgICAgZGF0YUxvZygiUmVnaXN0ZXIgcHJlc3N1cmUg
YWZ0ZXIgcmVnaXN0ZXIgYWxsb2NhdGlvbjpcbiIpOwogICAgICAgICBsb2dSZWdpc3RlclByZXNz
dXJlKGNvZGUpOwogICAgIH0KLQotICAgIC8vIFRoaXMgcmVwbGFjZXMgdXNlcyBvZiBzcGlsbCBz
bG90cyB3aXRoIHJlZ2lzdGVycyBvciBjb25zdGFudHMgaWYgcG9zc2libGUuIEl0IGRvZXMgdGhp
cyBieQotICAgIC8vIG1pbmltaXppbmcgdGhlIGFtb3VudCB0aGF0IHdlIHBlcnR1cmIgdGhlIGFs
cmVhZHktY2hvc2VuIHJlZ2lzdGVyIGFsbG9jYXRpb24uIEl0IG1heSBleHRlbmQKLSAgICAvLyB0
aGUgbGl2ZSByYW5nZXMgb2YgcmVnaXN0ZXJzIHRob3VnaC4KLSAgICBmaXhPYnZpb3VzU3BpbGxz
KGNvZGUpOworICAgIAorICAgIGlmIChvcHRMZXZlbCA+PSAyKSB7CisgICAgICAgIC8vIFRoaXMg
cmVwbGFjZXMgdXNlcyBvZiBzcGlsbCBzbG90cyB3aXRoIHJlZ2lzdGVycyBvciBjb25zdGFudHMg
aWYgcG9zc2libGUuIEl0IGRvZXMgdGhpcyBieQorICAgICAgICAvLyBtaW5pbWl6aW5nIHRoZSBh
bW91bnQgdGhhdCB3ZSBwZXJ0dXJiIHRoZSBhbHJlYWR5LWNob3NlbiByZWdpc3RlciBhbGxvY2F0
aW9uLiBJdCBtYXkgZXh0ZW5kCisgICAgICAgIC8vIHRoZSBsaXZlIHJhbmdlcyBvZiByZWdpc3Rl
cnMgdGhvdWdoLgorICAgICAgICBmaXhPYnZpb3VzU3BpbGxzKGNvZGUpOworICAgIH0KIAogICAg
IGxvd2VyQWZ0ZXJSZWdBbGxvYyhjb2RlKTsKIApAQCAtMTY1LDcgKzE3MCw3IEBAIHZvaWQgZ2Vu
ZXJhdGUoQ29kZSYgY29kZSwgQ0NhbGxIZWxwZXJzJiAKICAgICAgICAgaWYgKGJsb2NrKQogICAg
ICAgICAgICAgY29udGV4dC5ibG9ja0xhYmVsc1tibG9ja10gPSBCb3g8Q0NhbGxIZWxwZXJzOjpM
YWJlbD46OmNyZWF0ZSgpOwogICAgIH0KLSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBDQ2FsbEhl
bHBlcnM6Okp1bXBMaXN0PiBibG9ja0p1bXBzKGNvZGUuc2l6ZSgpKTsKKyAgICBJbmRleE1hcDxC
YXNpY0Jsb2NrKiwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdD4gYmxvY2tKdW1wcyhjb2RlLnNpemUo
KSk7CiAKICAgICBhdXRvIGxpbmsgPSBbJl0gKENDYWxsSGVscGVyczo6SnVtcCBqdW1wLCBCYXNp
Y0Jsb2NrKiB0YXJnZXQpIHsKICAgICAgICAgaWYgKGNvbnRleHQuYmxvY2tMYWJlbHNbdGFyZ2V0
XS0+aXNTZXQoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5l
cmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2Vu
ZXJhdGUuaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJHZW5lcmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNiArMjcsOCBAQAogCiAjaWYg
RU5BQkxFKEIzX0pJVCkKIAorI2luY2x1ZGUgIkIzQ29tbW9uLmgiCisKIG5hbWVzcGFjZSBKU0Mg
ewogCiBjbGFzcyBDQ2FsbEhlbHBlcnM7CkBAIC0zNyw3ICszOSw3IEBAIGNsYXNzIENvZGU7CiAK
IC8vIFRoaXMgdGFrZXMgYW4gQWlyOjpDb2RlIHRoYXQgaGFzbid0IGhhZCBhbnkgc3RhY2sgYWxs
b2NhdGlvbiBhbmQgb3B0aW9uYWxseSBoYXNuJ3QgaGFkIGFueQogLy8gcmVnaXN0ZXIgYWxsb2Nh
dGlvbiBhbmQgZG9lcyBib3RoIG9mIHRob3NlIHRoaW5ncy4KLUpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgcHJlcGFyZUZvckdlbmVyYXRpb24oQ29kZSYpOworSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBw
cmVwYXJlRm9yR2VuZXJhdGlvbihDb2RlJiwgdW5zaWduZWQgb3B0TGV2ZWwgPSBkZWZhdWx0T3B0
TGV2ZWwoKSk7CiAKIC8vIFRoaXMgZ2VuZXJhdGVzIHRoZSBjb2RlIHVzaW5nIHRoZSBnaXZlbiBD
Q2FsbEhlbHBlcnMgaW5zdGFuY2UuIE5vdGUgdGhhdCB0aGlzIG1heSBjYWxsIGNhbGxiYWNrcwog
Ly8gaW4gdGhlIHN1cHBsaWVkIGNvZGUgYXMgaXQgaXMgZ2VuZXJhdGluZy4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGlvbkNvbnRleHQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRpb25Db250ZXh0LmgJ
KHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2Vu
ZXJhdGlvbkNvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6
CiAgICAgdHlwZWRlZiBTaGFyZWRUYXNrPExhdGVQYXRoRnVuY3Rpb24+IExhdGVQYXRoOwogCiAg
ICAgVmVjdG9yPFJlZlB0cjxMYXRlUGF0aD4+IGxhdGVQYXRoczsKLSAgICBJbmRleE1hcDxCYXNp
Y0Jsb2NrLCBCb3g8Q0NhbGxIZWxwZXJzOjpMYWJlbD4+IGJsb2NrTGFiZWxzOworICAgIEluZGV4
TWFwPEJhc2ljQmxvY2sqLCBCb3g8Q0NhbGxIZWxwZXJzOjpMYWJlbD4+IGJsb2NrTGFiZWxzOwog
ICAgIEJhc2ljQmxvY2sqIGN1cnJlbnRCbG9jayB7IG51bGxwdHIgfTsKICAgICB1bnNpZ25lZCBp
bmRleEluQmxvY2sgeyBVSU5UX01BWCB9OwogICAgIENvZGUqIGNvZGUgeyBudWxscHRyIH07Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlckFm
dGVyUmVnQWxsb2MuY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1
LDYgKzU1LDExIEBAIHZvaWQgbG93ZXJBZnRlclJlZ0FsbG9jKENvZGUmIGNvZGUpCiAKICAgICBp
ZiAodmVyYm9zZSkKICAgICAgICAgZGF0YUxvZygiQ29kZSBiZWZvcmUgbG93ZXJBZnRlclJlZ0Fs
bG9jOlxuIiwgY29kZSk7CisgICAgCisgICAgLy8gRklYTUU6CisgICAgLy8gMSkgVGhpcyBzaG91
bGQgYmFpbCBlYXJseSBpZiB0aGVyZSBhcmUgbm8gU2h1ZmZsZXMgb3IgQ29sZENDYWxscy4gKE9P
UFMhISBuZWVkIGJ1ZyB1cmwpCisgICAgLy8gMikgV2Ugc2hvdWxkIG5vdCBpbnRyb2R1Y2UgU2h1
ZmZsZXMgZm9yIG5vcm1hbCBjYWxscy4gKE9PUFMhISBuZWVkIGJ1ZyB1cmwpCisgICAgLy8gMykg
V2Ugc2hvdWxkIGVtaXQgQ29sZENDYWxsIG9ubHkgYXQgb3B0TGV2ZWw9PTEuIChPT1BTISEgbmVl
ZCBidWcgdXJsKQogCiAgICAgSGFzaE1hcDxJbnN0KiwgUmVnaXN0ZXJTZXQ+IHVzZWRSZWdpc3Rl
cnM7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJFbnRyeVN3
aXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJM
b3dlckVudHJ5U3dpdGNoLmNwcAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJMb3dlckVudHJ5U3dpdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODIsNyArODIsNyBAQCB2b2lkIGxvd2VyRW50cnlTd2l0Y2goQ29kZSYgY29kZSkKICAgICAvLyBO
b3cgZHVwbGljYXRlIHRoZW0uCiAgICAgVmVjdG9yPEZyZXF1ZW50ZWRCbG9jaz4gZW50cnlwb2lu
dHM7CiAgICAgZW50cnlwb2ludHMuYXBwZW5kKEZyZXF1ZW50ZWRCbG9jayhjb2RlWzBdLCBlbnRy
eXBvaW50RnJlcXVlbmNpZXNbMF0pKTsKLSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBCYXNpY0Js
b2NrKj4gbWFwKGNvZGUuc2l6ZSgpKTsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgQmFzaWNC
bG9jayo+IG1hcChjb2RlLnNpemUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBlbnRyeXBvaW50SW5k
ZXggPSAxOyBlbnRyeXBvaW50SW5kZXggPCBjb2RlLnByb2MoKS5udW1FbnRyeXBvaW50cygpOyAr
K2VudHJ5cG9pbnRJbmRleCkgewogICAgICAgICBtYXAuY2xlYXIoKTsKICAgICAgICAgZm9yIChC
YXNpY0Jsb2NrKiBibG9jayA6IHdvcmtsaXN0LnNlZW4oKS52YWx1ZXMoY29kZSkpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ0xpdmVuZXNzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdMaXZlbmVzcy5oCShyZXZpc2lv
biAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ0xpdmVuZXNz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJBaXJCYXNpY0Js
b2NrLmgiCiAjaW5jbHVkZSAiQWlyQ29kZS5oIgogI2luY2x1ZGUgIkFpckluc3QuaCIKKyNpbmNs
dWRlICJBaXJMaXZlbmVzcy5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCiAKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKQEAgLTU0LDYgKzU1LDE5IEBA
IHB1YmxpYzoKICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICAvLyBJZiB5
b3UgY29tcHV0ZWQgVG1wIGxpdmVuZXNzIGZvciBzb21lIGJhbmssIHlvdSBjYW4gdXNlIHJlZyBs
aXZlbmVzcyB0byBmaWxsIGluIHRoZSBibGFua3MuCisgICAgICAgIC8vIE5vdGUgdGhhdCB3aGF0
IGhhcHBlbnMgdG8gdGhlIHJlZ2lzdGVycyBub3QgYmVsb25naW5nIHRvIHRoZSBiYW5rIGlzIGFy
Yml0cmFyeSAtIHRoZXkgbWF5IGdldAorICAgICAgICAvLyBzZXQgb3Igbm90LgorICAgICAgICB0
ZW1wbGF0ZTxCYW5rIGJhbms+CisgICAgICAgIExvY2FsQ2FsYyhUbXBMaXZlbmVzczxiYW5rPiYg
bGl2ZW5lc3MsIEJhc2ljQmxvY2sqIGJsb2NrKQorICAgICAgICAgICAgOiBtX2Jsb2NrKGJsb2Nr
KQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKFRtcCB0bXAgOiBsaXZlbmVzcy5saXZlQXRU
YWlsKGJsb2NrKSkgeworICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSkKKyAgICAgICAg
ICAgICAgICAgICAgbV93b3Jrc2V0LnNldCh0bXAucmVnKCkpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIAogICAgICAgICBjb25zdCBSZWdpc3RlclNldCYgbGl2ZSgpIGNvbnN0
CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBtX3dvcmtzZXQ7CkBAIC04NCw4ICs5OCw4
IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiBwcml2YXRlOgotICAgIEluZGV4TWFwPEJhc2ljQmxv
Y2ssIFJlZ2lzdGVyU2V0PiBtX2xpdmVBdEhlYWQ7Ci0gICAgSW5kZXhNYXA8QmFzaWNCbG9jaywg
UmVnaXN0ZXJTZXQ+IG1fbGl2ZUF0VGFpbDsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgUmVn
aXN0ZXJTZXQ+IG1fbGl2ZUF0SGVhZDsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgUmVnaXN0
ZXJTZXQ+IG1fbGl2ZUF0VGFpbDsKIH07CiAKIH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpB
aXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5n
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxs
RXZlcnl0aGluZy5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiAr
MzAsNyBAQAogCiAjaW5jbHVkZSAiQWlyQXJnSW5saW5lcy5oIgogI2luY2x1ZGUgIkFpckNvZGUu
aCIKKyNpbmNsdWRlICJBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5oIgogI2luY2x1ZGUgIkFp
ckluc2VydGlvblNldC5oIgogI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
QWlyTGl2ZW5lc3MuaCIKQEAgLTQ2LDcgKzQ3LDcgQEAgdm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29k
ZSYgY29kZSkKICAgICBwYWRJbnRlcmZlcmVuY2UoY29kZSk7CiAKICAgICAvLyBXZSB3YW50IHRv
IGtub3cgdGhlIHNldCBvZiByZWdpc3RlcnMgdXNlZCBhdCBldmVyeSBwb2ludCBpbiBldmVyeSBi
YXNpYyBibG9jay4KLSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBWZWN0b3I8UmVnaXN0ZXJTZXQ+
PiB1c2VkUmVnaXN0ZXJzKGNvZGUuc2l6ZSgpKTsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwg
VmVjdG9yPFJlZ2lzdGVyU2V0Pj4gdXNlZFJlZ2lzdGVycyhjb2RlLnNpemUoKSk7CiAgICAgR1BM
aXZlbmVzcyBncExpdmVuZXNzKGNvZGUpOwogICAgIEZQTGl2ZW5lc3MgZnBMaXZlbmVzcyhjb2Rl
KTsKICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgewpAQCAtMTczLDEwICsxNzQs
MTMgQEAgdm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYgY29kZSkKICAgICAgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoY2hvc2VuUmVnKTsKIAogICAgICAgICAgICAgICAgICAgICB0bXAg
PSBUbXAoY2hvc2VuUmVnKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgIGlmIChyb2xlID09IEFyZzo6U2NyYXRjaCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKIAogICAgICAgICAgICAgICAgICAgICBPcGNvZGUgbW92ZSA9IGJhbmsgPT0gR1AgPyBN
b3ZlIDogTW92ZURvdWJsZTsKIAotICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0FueVVz
ZShyb2xlKSAmJiByb2xlICE9IEFyZzo6U2NyYXRjaCkKKyAgICAgICAgICAgICAgICAgICAgaWYg
KEFyZzo6aXNBbnlVc2Uocm9sZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25T
ZXQuaW5zZXJ0KGluc3RJbmRleCwgbW92ZSwgaW5zdC5vcmlnaW4sIGFyZywgdG1wKTsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlEZWYocm9sZSkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KGluc3RJbmRleCArIDEsIG1vdmUsIGluc3Qub3Jp
Z2luLCB0bXAsIGFyZyk7CkBAIC0xODQsNiArMTg4LDggQEAgdm9pZCBzcGlsbEV2ZXJ5dGhpbmco
Q29kZSYgY29kZSkKICAgICAgICAgfQogICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9j
ayk7CiAgICAgfQorICAgIAorICAgIGZpeFNwaWxsc0FmdGVyVGVybWluYWxzKGNvZGUpOwogfQog
CiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpclRtcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJUbXAuY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclRtcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsOCArMjgsMTUgQEAK
IAogI2lmIEVOQUJMRShCM19KSVQpCiAKKyNpbmNsdWRlICJBaXJUbXBJbmxpbmVzLmgiCisKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKIAordGVtcGxhdGU8
PiBjb25zdCBjaGFyKiBjb25zdCBUbXA6OkluZGV4ZWQ8R1A+OjpkdW1wUHJlZml4ID0gIiV0bXAi
OwordGVtcGxhdGU8PiBjb25zdCBjaGFyKiBjb25zdCBUbXA6OkluZGV4ZWQ8RlA+OjpkdW1wUHJl
Zml4ID0gIiVmdG1wIjsKK3RlbXBsYXRlPD4gY29uc3QgY2hhciogY29uc3QgVG1wOjpBYnNvbHV0
ZWx5SW5kZXhlZDxHUD46OmR1bXBQcmVmaXggPSAiJWFicyI7Cit0ZW1wbGF0ZTw+IGNvbnN0IGNo
YXIqIGNvbnN0IFRtcDo6QWJzb2x1dGVseUluZGV4ZWQ8RlA+OjpkdW1wUHJlZml4ID0gIiVmYWJz
IjsKKwogdm9pZCBUbXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBpZiAo
ISp0aGlzKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmgJKHJldmlz
aW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNzQsNiArNzQsMTQgQEAgcHVibGljOgogICAgICAgICByZXN1bHQubV92YWx1
ZSA9IGVuY29kZUZQVG1wKGluZGV4KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Cisg
ICAgCisgICAgc3RhdGljIFRtcCB0bXBGb3JJbmRleChCYW5rIGJhbmssIHVuc2lnbmVkIGluZGV4
KQorICAgIHsKKyAgICAgICAgaWYgKGJhbmsgPT0gR1ApCisgICAgICAgICAgICByZXR1cm4gZ3BU
bXBGb3JJbmRleChpbmRleCk7CisgICAgICAgIEFTU0VSVChiYW5rID09IEZQKTsKKyAgICAgICAg
cmV0dXJuIGZwVG1wRm9ySW5kZXgoaW5kZXgpOworICAgIH0KIAogICAgIGV4cGxpY2l0IG9wZXJh
dG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fdmFsdWU7IH0KICAgICAKQEAgLTE1NCw3ICsx
NjIsMTYgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIGdwVG1wSW5kZXgoKTsKICAgICAg
ICAgcmV0dXJuIGZwVG1wSW5kZXgoKTsKICAgICB9Ci0KKyAgICAKKyAgICB0ZW1wbGF0ZTxCYW5r
IGJhbms+IGNsYXNzIEluZGV4ZWQ7CisgICAgdGVtcGxhdGU8QmFuayBiYW5rPiBjbGFzcyBBYnNv
bHV0ZWx5SW5kZXhlZDsKKyAgICAKKyAgICB0ZW1wbGF0ZTxCYW5rIGJhbms+CisgICAgSW5kZXhl
ZDxiYW5rPiBpbmRleGVkKCkgY29uc3Q7CisgICAgCisgICAgdGVtcGxhdGU8QmFuayBiYW5rPgor
ICAgIEFic29sdXRlbHlJbmRleGVkPGJhbms+IGFic29sdXRlbHlJbmRleGVkKCkgY29uc3Q7Cisg
ICAgCiAgICAgYm9vbCBpc0FsaXZlKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiAhISp0
aGlzOwpAQCAtMTk1LDYgKzIxMiw4IEBAIHB1YmxpYzoKICAgICAgICAgcmVzdWx0Lm1fdmFsdWUg
PSBzdGF0aWNfY2FzdDxpbnQ+KGluZGV4KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9
CisgICAgCisgICAgc3RhdGljIFRtcCB0bXBGb3JBYnNvbHV0ZUluZGV4KEJhbmssIHVuc2lnbmVk
KTsKIAogcHJpdmF0ZToKICAgICBzdGF0aWMgaW50IGVuY29kZUdQKHVuc2lnbmVkIGluZGV4KQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXBJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXBJbmxpbmVzLmgJKHJl
dmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wSW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC05Miw2ICs5Miw1OCBAQCBzdHJ1Y3QgQWJzb2x1dGVU
bXBNYXBwZXI8RlA+IHsKICAgICB9CiB9OwogCit0ZW1wbGF0ZTxCYW5rIHRoZUJhbms+CitjbGFz
cyBUbXA6OkluZGV4ZWQgOiBwdWJsaWMgVG1wIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3Qg
Y2hhciogY29uc3QgZHVtcFByZWZpeDsKKyAgICAKKyAgICBJbmRleGVkKFRtcCB0bXApCisgICAg
ICAgIDogVG1wKHRtcCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4KCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXBJbmRleCh0aGVCYW5rKTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTxCYW5rIHRoZUJhbms+CitjbGFzcyBUbXA6OkFic29sdXRlbHlJbmRleGVk
IDogcHVibGljIFRtcCB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGR1
bXBQcmVmaXg7CisKKyAgICBBYnNvbHV0ZWx5SW5kZXhlZChUbXAgdG1wKQorICAgICAgICA6IFRt
cCh0bXApCisgICAgeworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gQWJzb2x1dGVUbXBNYXBwZXI8dGhlQmFuaz46OmFic29sdXRl
SW5kZXgoKnRoaXMpOworICAgIH0KK307CisKK3RlbXBsYXRlPEJhbmsgdGhlQmFuaz4KK1RtcDo6
SW5kZXhlZDx0aGVCYW5rPiBUbXA6OmluZGV4ZWQoKSBjb25zdAoreworICAgIHJldHVybiBJbmRl
eGVkPHRoZUJhbms+KCp0aGlzKTsKK30KKwordGVtcGxhdGU8QmFuayB0aGVCYW5rPgorVG1wOjpB
YnNvbHV0ZWx5SW5kZXhlZDx0aGVCYW5rPiBUbXA6OmFic29sdXRlbHlJbmRleGVkKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gQWJzb2x1dGVseUluZGV4ZWQ8dGhlQmFuaz4oKnRoaXMpOworfQorCitU
bXAgVG1wOjp0bXBGb3JBYnNvbHV0ZUluZGV4KEJhbmsgYmFuaywgdW5zaWduZWQgaW5kZXgpCit7
CisgICAgaWYgKGJhbmsgPT0gR1ApCisgICAgICAgIHJldHVybiBBYnNvbHV0ZVRtcE1hcHBlcjxH
UD46OnRtcEZyb21BYnNvbHV0ZUluZGV4KGluZGV4KTsKKyAgICBBU1NFUlQoYmFuayA9PSBGUCk7
CisgICAgcmV0dXJuIEFic29sdXRlVG1wTWFwcGVyPEZQPjo6dG1wRnJvbUFic29sdXRlSW5kZXgo
aW5kZXgpOworfQorCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCiAKICNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rl
clNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJT
ZXQuaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdp
c3RlclNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsOCArMTAyLDE2IEBAIHB1YmxpYzoKICAg
ICB9CiAgICAgCiAgICAgLy8gQWxzbyBhbGxvdyBhZGQvcmVtb3ZlL2NvbnRhaW5zIHRlcm1pbm9s
b2d5LCB3aGljaCBtZWFucyB0aGUgc2FtZSB0aGluZyBhcyBzZXQvY2xlYXIvZ2V0LgotICAgIHZv
aWQgYWRkKFJlZyByZWcpIHsgc2V0KHJlZyk7IH0KLSAgICB2b2lkIHJlbW92ZShSZWcgcmVnKSB7
IGNsZWFyKHJlZyk7IH0KKyAgICBib29sIGFkZChSZWcgcmVnKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKCEhcmVnKTsKKyAgICAgICAgcmV0dXJuICFtX2JpdHMudGVzdEFuZFNldChyZWcuaW5kZXgo
KSk7CisgICAgfQorICAgIGJvb2wgcmVtb3ZlKFJlZyByZWcpCisgICAgeworICAgICAgICBBU1NF
UlQoISFyZWcpOworICAgICAgICByZXR1cm4gbV9iaXRzLnRlc3RBbmRDbGVhcihyZWcuaW5kZXgo
KSk7CisgICAgfQogICAgIGJvb2wgY29udGFpbnMoUmVnIHJlZykgY29uc3QgeyByZXR1cm4gZ2V0
KHJlZyk7IH0KICAgICAKICAgICB2b2lkIG1lcmdlKGNvbnN0IFJlZ2lzdGVyU2V0JiBvdGhlcikg
eyBtX2JpdHMubWVyZ2Uob3RoZXIubV9iaXRzKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjUsNiArMjI1LDcg
QEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgdihib29sLCB1c2VGVExK
SVQsIHRydWUsIE5vcm1hbCwgImFsbG93cyB0aGUgRlRMIEpJVCB0byBiZSB1c2VkIGlmIHRydWUi
KSBcCiAgICAgdihib29sLCB1c2VGVExUQkFBLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAg
ICB2KGJvb2wsIHZhbGlkYXRlRlRMT1NSRXhpdExpdmVuZXNzLCBmYWxzZSwgTm9ybWFsLCBudWxs
cHRyKSBcCisgICAgdih1bnNpZ25lZCwgZGVmYXVsdEIzT3B0TGV2ZWwsIDIsIE5vcm1hbCwgbnVs
bHB0cikgXAogICAgIHYoYm9vbCwgYjNBbHdheXNGYWlsc0JlZm9yZUNvbXBpbGUsIGZhbHNlLCBO
b3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGIzQWx3YXlzRmFpbHNCZWZvcmVMaW5rLCBm
YWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCBmdGxDcmFzaGVzLCBmYWxzZSwg
Tm9ybWFsLCBudWxscHRyKSAvKiBmb29sLXByb29mIHdheSBvZiBjaGVja2luZyB0aGF0IHlvdSBl
bmRlZCB1cCBpbiB0aGUgRlRMLiA7LSkgKi9cCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjcsNiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCisjaW5jbHVkZSAiQjND
b21tb24uaCIKICNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCiAjaW5jbHVkZSAiQ0NhbGxIZWxw
ZXJzLmgiCiAjaW5jbHVkZSAiVk0uaCIKQEAgLTQ3LDcgKzQ4LDcgQEAgc3RydWN0IENvbXBpbGF0
aW9uQ29udGV4dCB7CiAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGpzRW50cnlwb2ludFRvV2FzbUVu
dHJ5cG9pbnRDYWxsOwogfTsKIAotRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5h
bEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoVk0mLCBDb21waWxhdGlvbkNvbnRl
eHQmLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBTaWduYXR1cmUqLCBWZWN0b3I8VW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIGNvbnN0IFZl
Y3RvcjxTaWduYXR1cmVJbmRleD4mLCB1bnNpZ25lZCBvcHRMZXZlbCA9IDEpOworRXhwZWN0ZWQ8
c3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENv
bXBpbGUoVk0mLCBDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBj
b25zdCBTaWduYXR1cmUqLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBN
b2R1bGVJbmZvcm1hdGlvbiYsIGNvbnN0IFZlY3RvcjxTaWduYXR1cmVJbmRleD4mLCB1bnNpZ25l
ZCBvcHRMZXZlbCA9IEIzOjpkZWZhdWx0T3B0TGV2ZWwoKSk7CiAKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpXYXNtCiAKSW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsOCBAQAogLyogQmVnaW4gUEJYQnVp
bGRGaWxlIHNlY3Rpb24gKi8KIAkJMEYwRDg1QjQxNzIzNENDMTAwMzM4MjEwIC8qIE5vTG9jay5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwRDg1QjMx
NzIzNENCMTAwMzM4MjEwIC8qIE5vTG9jay5oICovOyB9OwogCQkwRjBGQ0RERTFERDE2N0Y5MDBD
Q0FCNTMgLyogTG9ja0FsZ29yaXRobS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYwRkNEREQxREQxNjdGOTAwQ0NBQjUzIC8qIExvY2tBbGdvcml0aG0u
aCAqLzsgfTsKKwkJMEYyQUM1NjExRTg5RjcwQzAwMDFFRTNGIC8qIFJhbmdlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJBQzU2MDFFODlGNzBDMDAw
MUVFM0YgLyogUmFuZ2UuaCAqLzsgfTsKKwkJMEYyQUM1NjMxRThBMDE0OTAwMDFFRTNGIC8qIElu
ZGV4S2V5VHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYyQUM1NjIxRThBMDE0OTAwMDFFRTNGIC8qIEluZGV4S2V5VHlwZS5oICovOyB9OwogCQkw
RjJCNjZBNjE3QjZCNEZCMDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE0MTdCNkI0Rjcw
MEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5oICovOyB9OwogCQkwRjJCNjZBNzE3QjZC
NEZEMDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBNTE3QjZCNEY3MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmgg
Ki87IH07CiAJCTBGMzBCQTkwMUU3ODcwOEUwMDJDQTg0NyAvKiBHbG9iYWxWZXJzaW9uLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzBCQThBMUU3
ODcwOEUwMDJDQTg0NyAvKiBHbG9iYWxWZXJzaW9uLmNwcCAqLzsgfTsKQEAgLTQwOCw2ICs0MTAs
OCBAQAogLyogQmVnaW4gUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCiAJCTBGMEQ4NUIzMTcy
MzRDQjEwMDMzODIxMCAvKiBOb0xvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm9Mb2NrLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMEZDREREMUREMTY3RjkwMENDQUI1MyAvKiBMb2Nr
QWxnb3JpdGhtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvY2tBbGdvcml0
aG0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQUM1NjAxRTg5RjcwQzAwMDFF
RTNGIC8qIFJhbmdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJhbmdlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkFDNTYyMUU4QTAxNDkwMDAxRUUzRiAv
KiBJbmRleEtleVR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5kZXhL
ZXlUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkE0MTdCNkI0Rjcw
MEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZWZlcnJh
YmxlUmVmQ291bnRlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCNjZBNTE3
QjZCNEY3MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZsaXBCeXRlcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjMwMEI3RDE4QUI0OEI0MDBBNkQ3MkUg
LyogSGFzaE1ldGhvZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIYXNoTWV0aG9kLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xMDE4LDEwICsxMDIyLDExIEBACiAJCQkJQThBNDcyQkExNTFB
ODI1QTAwNDEyM0ZGIC8qIEhhc2hUcmFpdHMuaCAqLywKIAkJCQlBOEE0NzJCQjE1MUE4MjVBMDA0
MTIzRkYgLyogSGV4TnVtYmVyLmggKi8sCiAJCQkJRkU4OTI1QUYxRDAwREFFQzAwNDY5MDdFIC8q
IEluZGVudGVyLmggKi8sCi0JCQkJOUM2N0M1NDI1ODkzNDhFMjg1QjQ5Njk5IC8qIEluZGV4ZWRD
b250YWluZXJJdGVyYXRvci5oICovLAorCQkJCTBGMkFDNTYyMUU4QTAxNDkwMDAxRUUzRiAvKiBJ
bmRleEtleVR5cGUuaCAqLywKIAkJCQk1QjQzMzgzQTVEMEI0NjNDOTQzM0Q5MzMgLyogSW5kZXhN
YXAuaCAqLywKIAkJCQkzMTM3RTFEN0RCRDg0QUMzOEZBRTREMzQgLyogSW5kZXhTZXQuaCAqLywK
IAkJCQkyNjg0RDQzNTFDMDAwRDQwMDA4MUQ2NjMgLyogSW5kZXhTcGFyc2VTZXQuaCAqLywKKwkJ
CQk5QzY3QzU0MjU4OTM0OEUyODVCNDk2OTkgLyogSW5kZXhlZENvbnRhaW5lckl0ZXJhdG9yLmgg
Ki8sCiAJCQkJQThBNDcyQkMxNTFBODI1QTAwNDEyM0ZGIC8qIElubGluZUFTTS5oICovLAogCQkJ
CUE3MERBMDgyMTc5OUYwNEQwMDUyOUE5QiAvKiBJbnNlcnRpb24uaCAqLywKIAkJCQk3Q0REN0ZG
NzE4NkQyOTFFMDA3NDMzQ0QgLyogSXRlcmF0b3JBZGFwdG9ycy5oICovLApAQCAtMTEwMCw2ICsx
MTA1LDcgQEAKIAkJCQlBOEE0NzJGQjE1MUE4MjVCMDA0MTIzRkYgLyogUmFuZG9tTnVtYmVyLmNw
cCAqLywKIAkJCQlBOEE0NzJGQzE1MUE4MjVCMDA0MTIzRkYgLyogUmFuZG9tTnVtYmVyLmggKi8s
CiAJCQkJQThBNDcyRkQxNTFBODI1QjAwNDEyM0ZGIC8qIFJhbmRvbU51bWJlclNlZWQuaCAqLywK
KwkJCQkwRjJBQzU2MDFFODlGNzBDMDAwMUVFM0YgLyogUmFuZ2UuaCAqLywKIAkJCQkwRjcyNUNB
QjFDNTA0NjE2MDBBRDk0M0EgLyogUmFuZ2VTZXQuaCAqLywKIAkJCQkwRjg3MTA1OTE2NjQzRjE5
MDA5MEIwQUQgLyogUmF3UG9pbnRlci5oICovLAogCQkJCTBGREU4N0Y2MURGRDA3Q0MwMDY0QzM5
MCAvKiBSZWN1cnNpdmVMb2NrQWRhcHRlci5oICovLApAQCAtMTQ4NSw2ICsxNDkxLDcgQEAKIAkJ
CQlDOTE2Qjk3NUYwMkY0RjdFOEI0QUIxMkQgLyogSW5kZXhNYXAuaCBpbiBIZWFkZXJzICovLAog
CQkJCUM4QjBFMUExRTAxQTQ4NkVCOTVFMEQxMSAvKiBJbmRleFNldC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMjY4NEQ0MzYxQzAwMEQ0MDAwODFENjYzIC8qIEluZGV4U3BhcnNlU2V0LmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjJBQzU2MzFFOEEwMTQ5MDAwMUVFM0YgLyogSW5kZXhLZXlUeXBlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNEQzE1MUE4MjVCMDA0MTIzRkYgLyogSW5saW5lQVNN
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzBEQTA4NDE3OTlGMDREMDA1MjlBOUIgLyogSW5zZXJ0
aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkyNjE0N0IwQTE1RERDQ0RDMDBEREI5MDcgLyogSW50
ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNTg2LDYgKzE1OTMs
NyBAQAogCQkJCTQzMEI0Nzg5MUFBQUFDMUEwMDEyMjNEQSAvKiBTdHJpbmdDb21tb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4QTQ3NDNFMTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdDb25jYXRl
bmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0NENEMyNzAxRTJDODJCOTAwOTI5NDcwIC8qIFN0
cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQUM1NjExRTg5
RjcwQzAwMDFFRTNGIC8qIFJhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQyQzE1MUE4
MjVCMDA0MTIzRkYgLyogU3RyaW5nRXh0cmFzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQz
RjE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nSGFzaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0
ODc0NTQxN0EwQkRBRTAwRkEwNENCIC8qIFN0cmluZ0hhc2hEdW1wQ29udGV4dC5oIGluIEhlYWRl
cnMgKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjE0NDI3KQorKysgU291
cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw2ICsxMDAs
NyBAQCBzZXQoV1RGX0hFQURFUlMKICAgICBSQU1TaXplLmgKICAgICBSYW5kb21OdW1iZXIuaAog
ICAgIFJhbmRvbU51bWJlclNlZWQuaAorICAgIFJhbmdlLmgKICAgICBSYW5nZVNldC5oCiAgICAg
UmF3UG9pbnRlci5oCiAgICAgUmVjdXJzaXZlTG9ja0FkYXB0ZXIuaApJbmRleDogU291cmNlL1dU
Ri93dGYvRGVxdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9EZXF1ZS5oCShyZXZp
c2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvV1RGL3d0Zi9EZXF1ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTg5LDYg
Kzg5LDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZUxhc3QoKTsKICAgICB2b2lkIHJlbW92
ZShpdGVyYXRvciYpOwogICAgIHZvaWQgcmVtb3ZlKGNvbnN0X2l0ZXJhdG9yJik7CisgICAgCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4gdm9pZCByZW1vdmVBbGxNYXRjaGluZyhjb25zdCBG
dW5jJik7CisgICAgCisgICAgLy8gVGhpcyBpcyBhIHByaW9yaXR5IGVucXVldWUuIFRoZSBjYWxs
YmFjayBpcyBnaXZlbiBhIHZhbHVlLCBhbmQgaWYgaXQgcmV0dXJucyB0cnVlLCB0aGVuIHRoaXMK
KyAgICAvLyB3aWxsIHB1dCB0aGUgYXBwZW5kZWQgdmFsdWUgYmVmb3JlIHRoYXQgdmFsdWUuIEl0
IHdpbGwga2VlcCBidWJibGluZyB1bnRpbCB0aGUgY2FsbGJhY2sgcmV0dXJucworICAgIC8vIGZh
bHNlIG9yIHRoZSB2YWx1ZSBlbmRzIHVwIGF0IHRoZSBoZWFkIG9mIHRoZSBxdWV1ZS4KKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBVLCB0eXBlbmFtZSBGdW5jPgorICAgIHZvaWQgYXBwZW5kQW5kQnVi
YmxlKFUmJiwgY29uc3QgRnVuYyYpOwogCiAgICAgdm9pZCBjbGVhcigpOwogCkBAIC01MjQsNiAr
NTMyLDM2IEBAIGlubGluZSB2b2lkIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6cmUKICAgICBj
aGVja1ZhbGlkaXR5KCk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVD
YXBhY2l0eT4KK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CitpbmxpbmUgdm9pZCBEZXF1ZTxULCBp
bmxpbmVDYXBhY2l0eT46OnJlbW92ZUFsbE1hdGNoaW5nKGNvbnN0IEZ1bmMmIGZ1bmMpCit7Cisg
ICAgc2l6ZV90IGNvdW50ID0gc2l6ZSgpOworICAgIHdoaWxlIChjb3VudC0tKSB7CisgICAgICAg
IFQgdmFsdWUgPSB0YWtlRmlyc3QoKTsKKyAgICAgICAgaWYgKCFmdW5jKHZhbHVlKSkKKyAgICAg
ICAgICAgIGFwcGVuZChXVEZNb3ZlKHZhbHVlKSk7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBVLCB0eXBl
bmFtZSBGdW5jPgoraW5saW5lIHZvaWQgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+OjphcHBlbmRB
bmRCdWJibGUoVSYmIHZhbHVlLCBjb25zdCBGdW5jJiBmdW5jKQoreworICAgIGFwcGVuZChXVEZN
b3ZlKHZhbHVlKSk7CisgICAgaXRlcmF0b3IgYmVnaW4gPSB0aGlzLT5iZWdpbigpOworICAgIGl0
ZXJhdG9yIGl0ZXIgPSBlbmQoKTsKKyAgICAtLWl0ZXI7CisgICAgd2hpbGUgKGl0ZXIgIT0gYmVn
aW4pIHsKKyAgICAgICAgaXRlcmF0b3IgcHJldiA9IGl0ZXI7CisgICAgICAgIC0tcHJldjsKKyAg
ICAgICAgaWYgKCFmdW5jKCpwcmV2KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgc3Rk
Ojpzd2FwKCpwcmV2LCAqaXRlcik7CisgICAgICAgIGl0ZXIgPSBwcmV2OworICAgIH0KK30KKwog
I2lmZGVmIE5ERUJVRwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5
PiBpbmxpbmUgdm9pZCBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT46OmNoZWNr
VmFsaWRpdHkoKSBjb25zdCB7IH0KIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVD
YXBhY2l0eT4gaW5saW5lIHZvaWQgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+
OjpjaGVja1ZhbGlkaXR5KGNvbnN0IERlcXVlSXRlcmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5
PiYpIGNvbnN0IHsgfQpJbmRleDogU291cmNlL1dURi93dGYvSW5kZXhLZXlUeXBlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvSW5kZXhLZXlUeXBlLmgJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL1dURi93dGYvSW5kZXhLZXlUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJh
Z21hIG9uY2UKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1
Y3QgSW5kZXhLZXlUeXBlIHsKKyAgICBzdGF0aWMgc2l6ZV90IGluZGV4KGNvbnN0IFQmIGtleSkg
eyByZXR1cm4ga2V5LmluZGV4KCk7IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1
Y3QgSW5kZXhLZXlUeXBlPFQqPiB7CisgICAgc3RhdGljIHNpemVfdCBpbmRleChUKiBrZXkpIHsg
cmV0dXJuIGtleS0+aW5kZXgoKTsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL0luZGV4TWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
SW5kZXhNYXAuaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL1dURi93dGYvSW5kZXhNYXAu
aAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2lu
Y2x1ZGUgPHd0Zi9JbmRleEtleVR5cGUuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5h
bWVzcGFjZSBXVEYgewpAQCAtNzAsMTggKzcxLDI0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IG1fdmVjdG9yW2luZGV4XTsKICAgICB9CiAgICAgCi0gICAgVmFsdWUmIG9wZXJhdG9yW10oS2V5
KiBrZXkpCisgICAgVmFsdWUmIG9wZXJhdG9yW10oY29uc3QgS2V5JiBrZXkpCiAgICAgewotICAg
ICAgICByZXR1cm4gbV92ZWN0b3Jba2V5LT5pbmRleCgpXTsKKyAgICAgICAgcmV0dXJuIG1fdmVj
dG9yW0luZGV4S2V5VHlwZTxLZXk+OjppbmRleChrZXkpXTsKICAgICB9CiAgICAgCi0gICAgY29u
c3QgVmFsdWUmIG9wZXJhdG9yW10oS2V5KiBrZXkpIGNvbnN0CisgICAgY29uc3QgVmFsdWUmIG9w
ZXJhdG9yW10oY29uc3QgS2V5JiBrZXkpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV92
ZWN0b3Jba2V5LT5pbmRleCgpXTsKKyAgICAgICAgcmV0dXJuIG1fdmVjdG9yW0luZGV4S2V5VHlw
ZTxLZXk+OjppbmRleChrZXkpXTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhcHBlbmQoY29uc3Qg
S2V5JiBrZXksIFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoSW5k
ZXhLZXlUeXBlPEtleT46OmluZGV4KGtleSkgPT0gbV92ZWN0b3Iuc2l6ZSgpKTsKKyAgICAgICAg
bV92ZWN0b3IuYXBwZW5kKHZhbHVlKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgVmVjdG9yPFZh
bHVlPiBtX3ZlY3RvcjsKKyAgICBWZWN0b3I8VmFsdWUsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93
PiBtX3ZlY3RvcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL1dURi93
dGYvSW5kZXhTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9JbmRleFNldC5oCShy
ZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvV1RGL3d0Zi9JbmRleFNldC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSA8d3RmL0JpdFZlY3Rvci5oPgogI2lu
Y2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSW5kZXhLZXlUeXBlLmg+
CiAKIG5hbWVzcGFjZSBXVEYgewogCkBAIC00MiwzMCArNDMsMzAgQEAgcHVibGljOgogICAgIHsK
ICAgICB9CiAKLSAgICBib29sIGFkZChUKiB2YWx1ZSkKKyAgICBib29sIGFkZChjb25zdCBUJiB2
YWx1ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiAhbV9zZXQuc2V0KHZhbHVlLT5pbmRleCgpKTsK
KyAgICAgICAgcmV0dXJuICFtX3NldC5zZXQoSW5kZXhLZXlUeXBlPFQ+OjppbmRleCh2YWx1ZSkp
OwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhYmxlPgogICAgIGJvb2wgYWRk
QWxsKGNvbnN0IEl0ZXJhYmxlJiBpdGVyYWJsZSkKICAgICB7CiAgICAgICAgIGJvb2wgcmVzdWx0
ID0gZmFsc2U7Ci0gICAgICAgIGZvciAoVCogdmFsdWUgOiBpdGVyYWJsZSkKKyAgICAgICAgZm9y
IChjb25zdCBUJiB2YWx1ZSA6IGl0ZXJhYmxlKQogICAgICAgICAgICAgcmVzdWx0IHw9IGFkZCh2
YWx1ZSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgYm9vbCByZW1vdmUo
VCogdmFsdWUpCisgICAgYm9vbCByZW1vdmUoY29uc3QgVCYgdmFsdWUpCiAgICAgewotICAgICAg
ICByZXR1cm4gbV9zZXQuY2xlYXIodmFsdWUtPmluZGV4KCkpOworICAgICAgICByZXR1cm4gbV9z
ZXQuY2xlYXIoSW5kZXhLZXlUeXBlPFQ+OjppbmRleCh2YWx1ZSkpOwogICAgIH0KIAotICAgIGJv
b2wgY29udGFpbnMoVCogdmFsdWUpIGNvbnN0CisgICAgYm9vbCBjb250YWlucyhjb25zdCBUJiB2
YWx1ZSkgY29uc3QKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBtX3NldC5nZXQodmFsdWUtPmluZGV4KCkpOworICAg
ICAgICByZXR1cm4gbV9zZXQuZ2V0KEluZGV4S2V5VHlwZTxUPjo6aW5kZXgodmFsdWUpKTsKICAg
ICB9CiAKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0CkBAIC0xMDAsNyArMTAxLDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgewogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBUKiBvcGVyYXRv
ciooKQorICAgICAgICAgICAgVCBvcGVyYXRvciooKQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIHJldHVybiBtX2NvbGxlY3Rpb24tPmF0KCptX2l0ZXIpOwogICAgICAgICAgICAgfQpJ
bmRleDogU291cmNlL1dURi93dGYvUmFuZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9SYW5nZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL1JhbmdlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPGxpbWl0cy5o
PgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFt
Lmg+CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBOb3RlIHRoYXQgdGhlICdiZWdpbicgaXMgaW5j
bHVzaXZlLCB3aGlsZSB0aGUgJ2VuZCcgaXMgZXhjbHVzaXZlLiBUaGVzZSB0d28gcmFuZ2VzIGFy
ZSBub24tCisvLyBvdmVybGFwcGluZzoKKy8vCisvLyAgICAgcmFuZ2VBID0gMC4uLjgKKy8vICAg
ICByYW5nZUIgPSA4Li4uMTYKKwordGVtcGxhdGU8dHlwZW5hbWUgUGFzc2VkVHlwZT4KK2NsYXNz
IFJhbmdlIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFBhc3NlZFR5cGUgVHlwZTsKKyAgICAKKyAg
ICBSYW5nZSgpCisgICAgICAgIDogbV9iZWdpbigwKQorICAgICAgICAsIG1fZW5kKDApCisgICAg
eworICAgIH0KKworICAgIGV4cGxpY2l0IFJhbmdlKFR5cGUgdmFsdWUpCisgICAgICAgIDogbV9i
ZWdpbih2YWx1ZSkKKyAgICAgICAgLCBtX2VuZCh2YWx1ZSArIDEpCisgICAgeworICAgICAgICBB
U1NFUlQobV9lbmQgPj0gbV9iZWdpbik7CisgICAgfQorCisgICAgUmFuZ2UoVHlwZSBiZWdpbiwg
VHlwZSBlbmQpCisgICAgICAgIDogbV9iZWdpbihiZWdpbikKKyAgICAgICAgLCBtX2VuZChlbmQp
CisgICAgeworICAgICAgICBBU1NFUlQobV9lbmQgPj0gbV9iZWdpbik7CisgICAgICAgIGlmICht
X2JlZ2luID09IG1fZW5kKSB7CisgICAgICAgICAgICAvLyBDYW5vbmljYWxpemUgZW1wdHkgcmFu
Z2VzLgorICAgICAgICAgICAgbV9iZWdpbiA9IDA7CisgICAgICAgICAgICBtX2VuZCA9IDA7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgUmFuZ2UgdG9wKCkKKyAgICB7CisgICAgICAg
IHJldHVybiBSYW5nZShzdGQ6Om51bWVyaWNfbGltaXRzPFR5cGU+OjptaW4oKSwgc3RkOjpudW1l
cmljX2xpbWl0czxUeXBlPjo6bWF4KCkpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBSYW5nZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9iZWdpbiA9
PSBvdGhlci5tX2JlZ2luCisgICAgICAgICAgICAmJiBtX2VuZCA9PSBvdGhlci5tX2VuZDsKKyAg
ICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgUmFuZ2UmIG90aGVyKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKyAgICAKKyAgICBl
eHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9iZWdpbiAhPSBtX2VuZDsg
fQorCisgICAgUmFuZ2Ugb3BlcmF0b3J8KGNvbnN0IFJhbmdlJiBvdGhlcikgY29uc3QKKyAgICB7
CisgICAgICAgIGlmICghKnRoaXMpCisgICAgICAgICAgICByZXR1cm4gb3RoZXI7CisgICAgICAg
IGlmICghb3RoZXIpCisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIHJldHVybiBS
YW5nZSgKKyAgICAgICAgICAgIHN0ZDo6bWluKG1fYmVnaW4sIG90aGVyLm1fYmVnaW4pLAorICAg
ICAgICAgICAgc3RkOjptYXgobV9lbmQsIG90aGVyLm1fZW5kKSk7CisgICAgfQorICAgIAorICAg
IFJhbmdlJiBvcGVyYXRvcnw9KGNvbnN0IFJhbmdlJiBvdGhlcikKKyAgICB7CisgICAgICAgIHJl
dHVybiAqdGhpcyA9ICp0aGlzIHwgb3RoZXI7CisgICAgfQorICAgIAorICAgIFR5cGUgYmVnaW4o
KSBjb25zdCB7IHJldHVybiBtX2JlZ2luOyB9CisgICAgVHlwZSBlbmQoKSBjb25zdCB7IHJldHVy
biBtX2VuZDsgfQorCisgICAgYm9vbCBvdmVybGFwcyhjb25zdCBSYW5nZSYgb3RoZXIpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpyYW5nZXNPdmVybGFwKG1fYmVnaW4sIG1fZW5k
LCBvdGhlci5tX2JlZ2luLCBvdGhlci5tX2VuZCk7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoKnRoaXMgPT0gUmFuZ2Uo
KSkgeworICAgICAgICAgICAgb3V0LnByaW50KCJCb3R0b20iKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBpZiAoKnRoaXMgPT0gdG9wKCkpIHsKKyAgICAgICAgICAg
IG91dC5wcmludCgiVG9wIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKG1fYmVnaW4gPT0gbV9lbmQgKyAxKSB7CisgICAgICAgICAgICBvdXQucHJpbnQobV9i
ZWdpbik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgb3V0LnByaW50
KG1fYmVnaW4sICIuLi4iLCBtX2VuZCk7CisgICAgfQorCitwcml2YXRlOgorICAgIFR5cGUgbV9i
ZWdpbjsKKyAgICBUeXBlIG1fZW5kOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5n
IFdURjo6UmFuZ2U7CisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1JhbmdlU2V0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvUmFuZ2VTZXQuaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291
cmNlL1dURi93dGYvUmFuZ2VTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsNiArNzcsMTAgQEAg
cHVibGljOgogICAgICAgICBtX2lzQ29tcGFjdCA9IGZhbHNlOwogCiAgICAgICAgIC8vIFdlIGFw
cGVuZCB3aXRob3V0IGNvbXBhY3Rpbmcgb25seSBpZiBkb2luZyBzbyBpcyBndWFyYW50ZWVkIG5v
dCB0byByZXNpemUgdGhlIHZlY3Rvci4KKyAgICAgICAgLy8gRklYTUU6IFRoaXMgaGV1cmlzdGlj
IGlzIGFsbW9zdCBjZXJ0YWlubHkgd3JvbmcsIGJlY2F1c2Ugd2UgZG9uJ3QgY29udHJvbCB0aGUg
Y2FwYWNpdHkuIEkKKyAgICAgICAgLy8gdGhpbmsgdGhhdCB0aGlzIG1lYW5zIHRoYXQgd2Ugd2ls
bCBzb21ldGltZXMgYmUgcmFnZS1jb21wYWN0aW5nIHdoZW4gd2UgYXJlIGp1c3Qgc2h5IG9mIHRo
ZQorICAgICAgICAvLyBjYXBhY2l0eS4KKyAgICAgICAgLy8gT09QUzogbmVlZCBidWcgdXJsCiAg
ICAgICAgIGlmIChtX3Jhbmdlcy5zaXplKCkgKyAxIDwgbV9yYW5nZXMuY2FwYWNpdHkoKSkgewog
ICAgICAgICAgICAgbV9yYW5nZXMuYXBwZW5kKHJhbmdlKTsKICAgICAgICAgICAgIHJldHVybjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305694</attachid>
            <date>2017-03-28 18:53:11 -0700</date>
            <delta_ts>2017-03-28 20:04:30 -0700</delta_ts>
            <desc>passes a few tests here and there</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>112317</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIxNDQyNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMTQwLDcgKzE0MCw2IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYjMvQjNG
b2xkUGF0aENvbnN0YW50cy5jcHAKICAgICBiMy9CM0ZyZXF1ZW5jeUNsYXNzLmNwcAogICAgIGIz
L0IzR2VuZXJhdGUuY3BwCi0gICAgYjMvQjNIZWFwUmFuZ2UuY3BwCiAgICAgYjMvQjNJbmZlclN3
aXRjaGVzLmNwcAogICAgIGIzL0IzSW5zZXJ0aW9uU2V0LmNwcAogICAgIGIzL0IzS2luZC5jcHAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTgzLDYgKzE4MywxMCBAQAogCQkwRjI1RjFCMjE4MTYz
NUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1RjFBQjE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xv
d1BhdGhDYWxsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEYyNUYxQjMxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1RjFBQzE4
MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5LmNwcCAqLzsgfTsKIAkJMEYyNUYx
QjQxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNUYxQUQxODE2MzVGMzAwNTIyRjM5
IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGMkFDNTY2MUU4QTBCNzcwMDAxRUUzRiAvKiBBaXJGaXhTcGls
bHNBZnRlclRlcm1pbmFscy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjJBQzU2NDFFOEEwQjc2MDAwMUVFM0YgLyogQWlyRml4U3BpbGxzQWZ0ZXJU
ZXJtaW5hbHMuY3BwICovOyB9OworCQkwRjJBQzU2NzFFOEEwQjc5MDAwMUVFM0YgLyogQWlyRml4
U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMkFDNTY1MUU4QTBCNzYwMDAxRUUzRiAvKiBBaXJGaXhTcGlsbHNBZnRl
clRlcm1pbmFscy5oICovOyB9OworCQkwRjJBQzU2QTFFOEEwQkQzMDAwMUVFM0YgLyogQWlyQWxs
b2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQUM1NjgxRThBMEJEMTAwMDFFRTNGIC8qIEFpckFsbG9j
YXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcCAqLzsgfTsKKwkJMEYyQUM1NkIxRThBMEJENTAw
MDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJBQzU2OTFFOEEwQkQxMDAwMUVF
M0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaCAqLzsgfTsKIAkJMEYyQjY2
QUMxN0I2QjUzRjAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBODE3QjZCNTNEMDBBN0FF
M0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJCNjZBRDE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNv
bWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJCNjZBOTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNv
dW50ZWRJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEYyQjY2QUUxN0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVk
U2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJC
NjZBQTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTY5LDcgKzk3Myw2
IEBACiAJCTBGRUM4NUJDMUJFMTQ2MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0cmVuZ3RoLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUI3MUJF
MTQ2MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0cmVuZ3RoLmNwcCAqLzsgfTsKIAkJMEZFQzg1QkQx
QkUxNDYyRjAwODBGRjc0IC8qIEIzUmVkdWNlU3RyZW5ndGguaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUI4MUJFMTQ2MkYwMDgwRkY3NCAvKiBC
M1JlZHVjZVN0cmVuZ3RoLmggKi87IH07CiAJCTBGRUM4NUMxMUJFMTY3QTAwMDgwRkY3NCAvKiBC
M0VmZmVjdHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NUJFMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0VmZmVjdHMuaCAqLzsgfTsKLQkJMEZFQzg1
QzIxQkUxNjdBMDAwODBGRjc0IC8qIEIzSGVhcFJhbmdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUJGMUJFMTY3QTAwMDgwRkY3NCAvKiBC
M0hlYXBSYW5nZS5jcHAgKi87IH07CiAJCTBGRUM4NUMzMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hl
YXBSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg1QzAxQkUxNjdBMDAwODBGRjc0IC8qIEIzSGVhcFJhbmdlLmggKi87IH07CiAJCTBGRUM4
NUM1MUJFMTZGNUEwMDgwRkY3NCAvKiBCM0VmZmVjdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1QzQxQkUxNkY1QTAwODBGRjc0IC8qIEIz
RWZmZWN0cy5jcHAgKi87IH07CiAJCTBGRUQ2N0I5MUIyNjI1NkQwMDY2Q0UxNSAvKiBERkdDb25z
dGFudEhvaXN0aW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFRDY3QjcxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0YW50SG9pc3Rp
bmdQaGFzZS5jcHAgKi87IH07CkBAIC0yNzAzLDYgKzI3MDYsMTAgQEAKIAkJMEYyNUYxQUIxODE2
MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBGVExTbG93UGF0aENhbGwuaDsgcGF0aCA9IGZ0bC9GVExTbG93UGF0aENhbGwu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNUYxQUMxODE2MzVGMzAwNTIyRjM5
IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBGVExTbG93UGF0aENhbGxLZXkuY3BwOyBwYXRoID0gZnRsL0ZUTFNsb3dQYXRoQ2Fs
bEtleS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjVGMUFEMTgxNjM1RjMw
MDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gRlRMU2xvd1BhdGhDYWxsS2V5Lmg7IHBhdGggPSBmdGwvRlRMU2xvd1BhdGhDYWxs
S2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkFDNTY0MUU4QTBCNzYwMDAx
RUUzRiAvKiBBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5jcHA7IHBhdGgg
PSBiMy9haXIvQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjJBQzU2NTFFOEEwQjc2MDAwMUVFM0YgLyogQWlyRml4U3BpbGxzQWZ0
ZXJUZXJtaW5hbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyRml4U3Bp
bGxzQWZ0ZXJUZXJtaW5hbHMuaDsgcGF0aCA9IGIzL2Fpci9BaXJGaXhTcGlsbHNBZnRlclRlcm1p
bmFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJBQzU2ODFFOEEwQkQxMDAw
MUVFM0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNj
YW4uY3BwOyBwYXRoID0gYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQUM1NjkxRThBMEJEMTAwMDFFRTNG
IC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmg7IHBhdGgg
PSBiMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQjY2QTgxN0I2QjUzRDAwQTdBRTNGIC8qIEdDSW5jb21pbmdS
ZWZDb3VudGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5jb21pbmdSZWZDb3VudGVkLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkE5MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0lu
Y29taW5nUmVmQ291bnRlZElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR0NJbmNvbWluZ1JlZkNv
dW50ZWRJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkFBMTdC
NkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMzQ5Niw3ICszNTAzLDYgQEAKIAkJMEZFQzg1QjcxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVk
dWNlU3RyZW5ndGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNS
ZWR1Y2VTdHJlbmd0aC5jcHA7IHBhdGggPSBiMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQzg1QjgxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVk
dWNlU3RyZW5ndGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNSZWR1Y2VT
dHJlbmd0aC5oOyBwYXRoID0gYjMvQjNSZWR1Y2VTdHJlbmd0aC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkVDODVCRTFCRTE2N0EwMDA4MEZGNzQgLyogQjNFZmZlY3RzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzRWZmZWN0cy5oOyBwYXRoID0gYjMvQjNF
ZmZlY3RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGRUM4NUJGMUJFMTY3QTAw
MDgwRkY3NCAvKiBCM0hlYXBSYW5nZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBCM0hlYXBSYW5nZS5jcHA7IHBhdGggPSBiMy9CM0hlYXBSYW5nZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUM4NUMwMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hl
YXBSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0hlYXBSYW5nZS5o
OyBwYXRoID0gYjMvQjNIZWFwUmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZFQzg1QzQxQkUxNkY1QTAwODBGRjc0IC8qIEIzRWZmZWN0cy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0VmZmVjdHMuY3BwOyBwYXRoID0gYjMvQjNFZmZlY3Rz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFRDY3QjcxQjI2MjU2RDAwNjZD
RTE1IC8qIERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuY3BwOyBwYXRoID0gZGZn
L0RGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01NDE5LDcgKzU0MjUsNiBAQAogCQkJCTBGRUM4NENGMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0dlbmVyYXRlLmggKi8sCiAJCQkJMEYyQzYzQjUxRTYzNDNFODAwQzEzODM5IC8qIEIzR2VuZXJp
Y0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi8sCiAJCQkJMEZFQzg0RDAxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oICovLAotCQkJCTBGRUM4NUJGMUJFMTY3QTAwMDgw
RkY3NCAvKiBCM0hlYXBSYW5nZS5jcHAgKi8sCiAJCQkJMEZFQzg1QzAxQkUxNjdBMDAwODBGRjc0
IC8qIEIzSGVhcFJhbmdlLmggKi8sCiAJCQkJREM2OUI5OUExRDE1RjkwRjAwMkUzQzAwIC8qIEIz
SW5mZXJTd2l0Y2hlcy5jcHAgKi8sCiAJCQkJREM2OUI5OUIxRDE1RjkwRjAwMkUzQzAwIC8qIEIz
SW5mZXJTd2l0Y2hlcy5oICovLApAQCAtNTUyOCw2ICs1NTMzLDggQEAKIAkJMEZFQzg0QjMxQkRB
Q0Q4ODAwODBGRjc0IC8qIGFpciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCisJCQkJMEYyQUM1NjgxRThBMEJEMTAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0
ZXJzQnlMaW5lYXJTY2FuLmNwcCAqLywKKwkJCQkwRjJBQzU2OTFFOEEwQkQxMDAwMUVFM0YgLyog
QWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaCAqLywKIAkJCQk3OTY1QzIxNDFFNUQ3
OTk2MDBCNzU5MUQgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuY3BwICov
LAogCQkJCTc5NjVDMjE1MUU1RDc5OTYwMEI3NTkxRCAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5
R3JhcGhDb2xvcmluZy5oICovLAogCQkJCTBGRUM4NTQ4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJB
bGxvY2F0ZVN0YWNrLmNwcCAqLywKQEAgLTU1NjEsNiArNTU2OCw4IEBACiAJCQkJMEY0REUxQ0Qx
QzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCAqLywKIAkJCQkyNjJEODVC
NDFDMEQ2NTBGMDA2QUNCNjEgLyogQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmNwcCAqLywK
IAkJCQkyNjJEODVCNTFDMEQ2NTBGMDA2QUNCNjEgLyogQWlyRml4UGFydGlhbFJlZ2lzdGVyU3Rh
bGxzLmggKi8sCisJCQkJMEYyQUM1NjQxRThBMEI3NjAwMDFFRTNGIC8qIEFpckZpeFNwaWxsc0Fm
dGVyVGVybWluYWxzLmNwcCAqLywKKwkJCQkwRjJBQzU2NTFFOEEwQjc2MDAwMUVFM0YgLyogQWly
Rml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCAqLywKIAkJCQkwRkVDODU1MjFCREFDREM3MDA4MEZG
NzQgLyogQWlyRnJlcXVlbnRlZEJsb2NrLmggKi8sCiAJCQkJMEZFQzg1NTMxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckdlbmVyYXRlLmNwcCAqLywKIAkJCQkwRkVDODU1NDFCREFDREM3MDA4MEZGNzQg
LyogQWlyR2VuZXJhdGUuaCAqLywKQEAgLTgxMzksNiArODE0OCw3IEBACiAJCQkJMEZFQzg1MTAx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkVDODUxMjFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0MzQyMkE2MzFDMTU4RTZEMDBFMkVCOTggLyogQjNDb25zdEZsb2F0VmFsdWUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkFDNTZCMUU4QTBCRDUwMDAxRUUzRiAvKiBBaXJBbGxv
Y2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1QjMx
QkRFRDk1NzAwODBGRjc0IC8qIEIzQ29uc3RQdHJWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYzMzhERjYxQkU5M0Q1NTAwMTNDODhGIC8qIEIzQ29uc3RyYWluZWRWYWx1ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyQzYzQjgxRTYzNDNGNzAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2NrSW5z
ZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKQEAgLTkzNjIsNiArOTM3Miw3IEBACiAJCQkJNzA5
RkI4NkExQUUzMzVDNjAwMzlEMDY5IC8qIFdlYWtTZXRDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMTQxNTAxMzMxNTRCQjEzRjAwNUQ4Qzk4IC8qIFdlYWtTZXRJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3MDlGQjg2QzFBRTMzNUM2MDAzOUQwNjkgLyogV2Vha1NldFByb3Rv
dHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQUM1NjcxRThBMEI3OTAwMDFFRTNGIC8qIEFp
ckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JFRDFE
QjU4REFEMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNDMTYxREI1OUNCMjAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5
Q29tcGlsZUVycm9yQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JF
RjFEQjU4REFEMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90b3R5cGUuaCBp
biBIZWFkZXJzICovLApAQCAtOTk4OCw3ICs5OTk5LDYgQEAKIAkJCQkwRjcyNUNBRjFDNTA2RDNC
MDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkVDODUxNTFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkVDODUxODFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQkwRkVDODVDMjFCRTE2N0EwMDA4MEZGNzQgLyogQjNIZWFwUmFuZ2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJREM2OUI5OUMxRDE1RjkxMjAwMkUzQzAwIC8qIEIzSW5m
ZXJTd2l0Y2hlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVDODVCOTFCRTE0NjJGMDA4MEZG
NzQgLyogQjNJbnNlcnRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZERjY3RDMxRDlD
NkQyQTAwMUI5ODI1IC8qIEIzS2luZC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMTU0LDYgKzEw
MTY0LDcgQEAKIAkJCQlBNzhBOTc3NjE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkJEQzE1MTUxQzVENEQwMENEODkxMCAvKiBERkdGaXh1
cFBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjAxNzdGMURDQURDMzMwMEVBNTk1MCAv
KiBERkdGbG93SW5kZXhpbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQUM1NkExRThBMEJE
MzAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGOUQzMzk2MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRjcxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0ZsdXNo
Rm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNjlDQzg4MTkzQUM2MEEwMDQ1NzU5RSAv
KiBERkdGcm96ZW5WYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMjYzLDYgKzEwMjc0LDcg
QEAKIAkJCQkyQTgzNjM4NTE4RDdEMEVFMDAwMEVCQ0MgLyogRWRlbkdDQWN0aXZpdHlDYWxsYmFj
ay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OUU0NUEyNTE4QTFCMjU5MDAyNkQ4OEYgLyogRW5j
b2RlZFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUM3MTA3RUMzNzYwMDQyN0E0
OCAvKiBFcnJvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJBQzU2NjFFOEEwQjc3MDAwMUVF
M0YgLyogQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQ3RjM5QzgxMDdFQzM3NjAwNDI3QTQ4IC8qIEVycm9yQ29uc3RydWN0b3IuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRkVCNThDMTQxODdCOEIxNjAwOThFRjBCIC8qIEVycm9ySGFuZGxpbmdTY29w
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDOTEwN0VDMzc2MDA0MjdBNDggLyogRXJy
b3JJbnN0YW5jZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrVXRpbHMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTE0LDcgKzExNCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+CiBWZWN0b3I8QmFz
aWNCbG9jayo+IGJsb2Nrc0luUHJlT3JkZXIoQmFzaWNCbG9jayogcm9vdCkKIHsKICAgICBWZWN0
b3I8QmFzaWNCbG9jayo+IHJlc3VsdDsKLSAgICBHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2Nr
KiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IHdvcmtsaXN0OworICAgIEdyYXBoTm9kZVdvcmtsaXN0
PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+IHdvcmtsaXN0OwogICAgIHdvcmts
aXN0LnB1c2gocm9vdCk7CiAgICAgd2hpbGUgKEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3Qu
cG9wKCkpIHsKICAgICAgICAgcmVzdWx0LmFwcGVuZChibG9jayk7CkBAIC0xMjgsNyArMTI4LDcg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KIFZlY3RvcjxCYXNpY0Jsb2NrKj4gYmxv
Y2tzSW5Qb3N0T3JkZXIoQmFzaWNCbG9jayogcm9vdCkKIHsKICAgICBWZWN0b3I8QmFzaWNCbG9j
ayo+IHJlc3VsdDsKLSAgICBQb3N0T3JkZXJHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwg
SW5kZXhTZXQ8QmFzaWNCbG9jaz4+IHdvcmtsaXN0OworICAgIFBvc3RPcmRlckdyYXBoTm9kZVdv
cmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+IHdvcmtsaXN0OwogICAg
IHdvcmtsaXN0LnB1c2gocm9vdCk7CiAgICAgd2hpbGUgKEdyYXBoTm9kZVdpdGhPcmRlcjxCYXNp
Y0Jsb2NrKj4gaXRlbSA9IHdvcmtsaXN0LnBvcCgpKSB7CiAgICAgICAgIHN3aXRjaCAoaXRlbS5v
cmRlcikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tXb3JrbGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrV29ya2xpc3Qu
aAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tX
b3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CiAKIGNsYXNzIEJhc2ljQmxvY2s7CiAKLXR5cGVkZWYgR3JhcGhOb2RlV29y
a2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2s+PiBCbG9ja1dvcmtsaXN0Owor
dHlwZWRlZiBHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9j
ayo+PiBCbG9ja1dvcmtsaXN0OwogCiAvLyBXaGVuIHlvdSBzYXkgQmxvY2tXaXRoPGludD4geW91
IHNob3VsZCByZWFkIGl0IGFzICJibG9jayB3aXRoIGFuIGludCIuCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB1c2luZyBCbG9ja1dpdGggPSBHcmFwaE5vZGVXaXRoPEJhc2ljQmxvY2sqLCBUPjsKQEAg
LTQ0LDEzICs0NCwxMyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBCbG9ja1dpdGggPSBH
CiAvLyBwZXJtaXRzIGZvcmNpYmx5IGVucXVldWVpbmcgdGhpbmdzIGV2ZW4gaWYgdGhlIGJsb2Nr
IGhhcyBhbHJlYWR5IGJlZW4gc2Vlbi4gSXQncyB1c2VmdWwgZm9yCiAvLyB0aGluZ3MgbGlrZSBi
dWlsZGluZyBhIHNwYW5uaW5nIHRyZWUsIGluIHdoaWNoIGNhc2UgVCAodGhlIGF1eGlsaWFyeSBw
YXlsb2FkKSB3b3VsZCBiZSB0aGUKIC8vIHN1Y2Nlc3NvciBpbmRleC4KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3JrbGlzdCA9IEV4dGVuZGVkR3JhcGhOb2RlV29y
a2xpc3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0PEJhc2ljQmxvY2s+PjsKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3JrbGlzdCA9IEV4dGVuZGVkR3JhcGhOb2Rl
V29ya2xpc3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0PEJhc2ljQmxvY2sqPj47CiAKIHR5cGVk
ZWYgR3JhcGhWaXNpdE9yZGVyIFZpc2l0T3JkZXI7CiAKIHR5cGVkZWYgR3JhcGhOb2RlV2l0aE9y
ZGVyPEJhc2ljQmxvY2sqPiBCbG9ja1dpdGhPcmRlcjsKIAotdHlwZWRlZiBQb3N0T3JkZXJHcmFw
aE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IFBvc3RPcmRl
ckJsb2NrV29ya2xpc3Q7Cit0eXBlZGVmIFBvc3RPcmRlckdyYXBoTm9kZVdvcmtsaXN0PEJhc2lj
QmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+IFBvc3RPcmRlckJsb2NrV29ya2xpc3Q7CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDRkcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDRkcu
aAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ0ZHLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzksOCArMzksOCBAQCBjbGFzcyBDRkcgewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIHR5cGVkZWYgQmFzaWNCbG9jayogTm9kZTsKLSAg
ICB0eXBlZGVmIEluZGV4U2V0PEJhc2ljQmxvY2s+IFNldDsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB1c2luZyBNYXAgPSBJbmRleE1hcDxCYXNpY0Jsb2NrLCBUPjsKKyAgICB0eXBlZGVmIElu
ZGV4U2V0PEJhc2ljQmxvY2sqPiBTZXQ7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcg
TWFwID0gSW5kZXhNYXA8QmFzaWNCbG9jayosIFQ+OwogICAgIHR5cGVkZWYgVmVjdG9yPEJhc2lj
QmxvY2sqLCA0PiBMaXN0OwogCiAgICAgQ0ZHKFByb2NlZHVyZSYgcHJvYykKQEAgLTUxLDcgKzUx
LDcgQEAgcHVibGljOgogICAgIE5vZGUgcm9vdCgpIHsgcmV0dXJuIG1fcHJvY1swXTsgfQogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBNYXA8VD4gbmV3TWFwKCkgeyByZXR1cm4gSW5k
ZXhNYXA8SlNDOjpCMzo6QmFzaWNCbG9jaywgVD4obV9wcm9jLnNpemUoKSk7IH0KKyAgICBNYXA8
VD4gbmV3TWFwKCkgeyByZXR1cm4gSW5kZXhNYXA8SlNDOjpCMzo6QmFzaWNCbG9jayosIFQ+KG1f
cHJvYy5zaXplKCkpOyB9CiAKICAgICBTdWNjZXNzb3JDb2xsZWN0aW9uPEJhc2ljQmxvY2ssIEJh
c2ljQmxvY2s6OlN1Y2Nlc3Nvckxpc3Q+IHN1Y2Nlc3NvcnMoTm9kZSBub2RlKSB7IHJldHVybiBu
b2RlLT5zdWNjZXNzb3JCbG9ja3MoKTsgfQogICAgIEJhc2ljQmxvY2s6OlByZWRlY2Vzc29yTGlz
dCYgcHJlZGVjZXNzb3JzKE5vZGUgbm9kZSkgeyByZXR1cm4gbm9kZS0+cHJlZGVjZXNzb3JzKCk7
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCShyZXZpc2lvbiAyMTQ0Mjcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uaAkod29ya2luZyBjb3B5KQpA
QCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShCM19KSVQpCiAKICNpbmNsdWRlICJKU0V4cG9y
dE1hY3Jvcy5oIgorI2luY2x1ZGUgIk9wdGlvbnMuaCIKICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CkBAIC0xNzAsNiArMTcxLDEzIEBA
IHN0YXRpYyBJbnRUeXBlIHJvdGF0ZUxlZnQoSW50VHlwZSB2YWx1ZSwKICAgICByZXR1cm4gKHVW
YWx1ZSA8PCBzaGlmdCkgfCAodVZhbHVlID4+ICgoYml0cyAtIHNoaWZ0KSAmIG1hc2spKTsKIH0K
IAoraW5saW5lIHVuc2lnbmVkIGRlZmF1bHRPcHRMZXZlbCgpCit7CisgICAgLy8gVGhpcyBzaG91
bGQgYWxtb3N0IGFsd2F5cyByZXR1cm4gMiwgYnV0IHdlIGFsbG93IHRoaXMgZGVmYXVsdCB0byBi
ZSBsb3dlcmVkIGZvciB0ZXN0aW5nLiBTb21lCisgICAgLy8gY29tcG9uZW50cyB3aWxsIGRlbGli
ZXJhdGVseSBzZXQgdGhlIG9wdExldmVsLgorICAgIHJldHVybiBPcHRpb25zOjpkZWZhdWx0QjNP
cHRMZXZlbCgpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKIAogI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsZS5oCShyZXZp
c2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShCM19KSVQpCiAKKyNp
bmNsdWRlICJCM0NvbW1vbi5oIgogI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKIAogbmFtZXNw
YWNlIEpTQyB7CkBAIC00NSw3ICs0Niw3IEBAIGNsYXNzIFByb2NlZHVyZTsKIC8vIFRoZW4geW91
IGtlZXAgdGhlIENvbXBpbGF0aW9uIG9iamVjdCBhbGl2ZSBmb3IgYXMgbG9uZyBhcyB5b3Ugd2Fu
dCB0byBiZSBhYmxlIHRvIHJ1biB0aGUgY29kZS4KIC8vIElmIHRoaXMgQVBJIGZlZWxzIHRvbyBo
aWdoLWxldmVsLCB5b3UgY2FuIHVzZSBCMzo6Z2VuZXJhdGUoKSBkaXJlY3RseS4KIAotSlNfRVhQ
T1JUX1BSSVZBVEUgQ29tcGlsYXRpb24gY29tcGlsZShWTSYsIFByb2NlZHVyZSYsIHVuc2lnbmVk
IG9wdExldmVsID0gMSk7CitKU19FWFBPUlRfUFJJVkFURSBDb21waWxhdGlvbiBjb21waWxlKFZN
JiwgUHJvY2VkdXJlJiwgdW5zaWduZWQgb3B0TGV2ZWwgPSBkZWZhdWx0T3B0TGV2ZWwoKSk7CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNEdXBsaWNhdGVUYWlscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzRHVwbGljYXRlVGFpbHMuY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNEdXBsaWNhdGVUYWlscy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY4LDcgKzY4LDcgQEAgcHVibGljOgogCiAgICAgICAgIG1fcHJvYy5yZXNldFZhbHVlT3duZXJz
KCk7CiAKLSAgICAgICAgSW5kZXhTZXQ8QmFzaWNCbG9jaz4gY2FuZGlkYXRlczsKKyAgICAgICAg
SW5kZXhTZXQ8QmFzaWNCbG9jayo+IGNhbmRpZGF0ZXM7CiAKICAgICAgICAgZm9yIChCYXNpY0Js
b2NrKiBibG9jayA6IG1fcHJvYykgewogICAgICAgICAgICAgaWYgKGJsb2NrLT5zaXplKCkgPiBt
X21heFNpemUpCkBAIC04Miw3ICs4Miw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogCiAgICAgICAg
IC8vIENvbGxlY3QgdGhlIHNldCBvZiB2YWx1ZXMgdGhhdCBtdXN0IGJlIGRlLVNTQSdkLgotICAg
ICAgICBJbmRleFNldDxWYWx1ZT4gdmFsdWVzVG9EZW1vdGU7CisgICAgICAgIEluZGV4U2V0PFZh
bHVlKj4gdmFsdWVzVG9EZW1vdGU7CiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBt
X3Byb2MpIHsKICAgICAgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogKmJsb2NrKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSA9PSBQaGkgJiYgY2FuZGlkYXRlcy5jb250
YWlucyhibG9jaykpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVD
b21tb25TdWJleHByZXNzaW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuY3BwCShyZXZpc2lvbiAyMTQ0
MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVDb21tb25TdWJleHBy
ZXNzaW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4Miw3ICs2ODIsNyBAQCBwcml2YXRlOgog
ICAgIERvbWluYXRvcnMmIG1fZG9taW5hdG9yczsKICAgICBQdXJlQ1NFIG1fcHVyZUNTRTsKICAg
ICAKLSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBJbXB1cmVCbG9ja0RhdGE+IG1faW1wdXJlQmxv
Y2tEYXRhOworICAgIEluZGV4TWFwPEJhc2ljQmxvY2sqLCBJbXB1cmVCbG9ja0RhdGE+IG1faW1w
dXJlQmxvY2tEYXRhOwogCiAgICAgSW1wdXJlQmxvY2tEYXRhIG1fZGF0YTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRml4U1NBLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNGaXhTU0EuY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGaXhTU0EuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3
ICs0OSw3IEBAIG5hbWVzcGFjZSB7CiBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIH0gLy8g
YW5vbnltb3VzIG5hbWVzcGFjZQogCi12b2lkIGRlbW90ZVZhbHVlcyhQcm9jZWR1cmUmIHByb2Ms
IGNvbnN0IEluZGV4U2V0PFZhbHVlPiYgdmFsdWVzKQordm9pZCBkZW1vdGVWYWx1ZXMoUHJvY2Vk
dXJlJiBwcm9jLCBjb25zdCBJbmRleFNldDxWYWx1ZSo+JiB2YWx1ZXMpCiB7CiAgICAgSGFzaE1h
cDxWYWx1ZSosIFZhcmlhYmxlKj4gbWFwOwogICAgIEhhc2hNYXA8VmFsdWUqLCBWYXJpYWJsZSo+
IHBoaU1hcDsKQEAgLTEyMSw3ICsxMjEsNyBAQCBib29sIGZpeFNTQShQcm9jZWR1cmUmIHByb2Mp
CiAgICAgLy8gSnVzdCBmb3Igc2FuaXR5LCByZW1vdmUgYW55IHVudXNlZCB2YXJpYWJsZXMgZmly
c3QuIEl0J3MgdW5saWtlbHkgdGhhdCB0aGlzIGNvZGUgaGFzIGFueQogICAgIC8vIGJ1Z3MgaGF2
aW5nIHRvIGRvIHdpdGggZGVhZCB2YXJpYWJsZXMsIGJ1dCBpdCB3b3VsZCBiZSBzaWxseSB0byBo
YXZlIHRvIGZpeCBzdWNoIGEgYnVnIGlmCiAgICAgLy8gaXQgZGlkIGFyaXNlLgotICAgIEluZGV4
U2V0PFZhcmlhYmxlPiBsaXZlVmFyaWFibGVzOworICAgIEluZGV4U2V0PFZhcmlhYmxlKj4gbGl2
ZVZhcmlhYmxlczsKICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IHByb2MudmFsdWVzKCkpIHsKICAg
ICAgICAgaWYgKFZhcmlhYmxlVmFsdWUqIHZhcmlhYmxlVmFsdWUgPSB2YWx1ZS0+YXM8VmFyaWFi
bGVWYWx1ZT4oKSkKICAgICAgICAgICAgIGxpdmVWYXJpYWJsZXMuYWRkKHZhcmlhYmxlVmFsdWUt
PnZhcmlhYmxlKCkpOwpAQCAtMTQ1LDcgKzE0NSw3IEBAIGJvb2wgZml4U1NBKFByb2NlZHVyZSYg
cHJvYykKIAogICAgIC8vIENyZWF0ZSBhIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlICgiY2FsY1Zh
ciIpIGZvciBldmVyeSB2YXJpYWJsZS4KICAgICBWZWN0b3I8VmFyaWFibGUqPiBjYWxjVmFyVG9W
YXJpYWJsZTsKLSAgICBJbmRleE1hcDxWYXJpYWJsZSwgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUq
PiB2YXJpYWJsZVRvQ2FsY1Zhcihwcm9jLnZhcmlhYmxlcygpLnNpemUoKSk7CisgICAgSW5kZXhN
YXA8VmFyaWFibGUqLCBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSo+IHZhcmlhYmxlVG9DYWxjVmFy
KHByb2MudmFyaWFibGVzKCkuc2l6ZSgpKTsKIAogICAgIGZvciAoVmFyaWFibGUqIHZhcmlhYmxl
IDogcHJvYy52YXJpYWJsZXMoKSkgewogICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSog
Y2FsY1ZhciA9IHNzYS5uZXdWYXJpYWJsZSgpOwpAQCAtMTg1LDcgKzE4NSw3IEBAIGJvb2wgZml4
U1NBKFByb2NlZHVyZSYgcHJvYykKIAogICAgIC8vIE5vdyBwZXJmb3JtIHRoZSBjb252ZXJzaW9u
LgogICAgIEluc2VydGlvblNldCBpbnNlcnRpb25TZXQocHJvYyk7Ci0gICAgSW5kZXhNYXA8VmFy
aWFibGUsIFZhbHVlKj4gbWFwcGluZyhwcm9jLnZhcmlhYmxlcygpLnNpemUoKSk7CisgICAgSW5k
ZXhNYXA8VmFyaWFibGUqLCBWYWx1ZSo+IG1hcHBpbmcocHJvYy52YXJpYWJsZXMoKS5zaXplKCkp
OwogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBwcm9jLmJsb2Nrc0luUHJlT3JkZXIoKSkg
ewogICAgICAgICBtYXBwaW5nLmNsZWFyKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0ZpeFNTQS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0ZpeFNTQS5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNGaXhTU0EuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNyw3ICszNyw3IEBAIGNsYXNzIFByb2NlZHVyZTsK
IAogLy8gVHVybnMgYWxsIG1lbnRpb25zIG9mIHRoZSBnaXZlbiB2YWx1ZXMgaW50byBhY2Nlc3Nl
cyB0byB2YXJpYWJsZXMuIFRoaXMgaXMgbWVhbnQgdG8gYmUgdXNlZAogLy8gZnJvbSBwaGFzZXMg
dGhhdCBkb24ndCBsaWtlIFNTQSBmb3Igd2hhdGV2ZXIgcmVhc29uLgotdm9pZCBkZW1vdGVWYWx1
ZXMoUHJvY2VkdXJlJiwgY29uc3QgSW5kZXhTZXQ8VmFsdWU+Jik7Cit2b2lkIGRlbW90ZVZhbHVl
cyhQcm9jZWR1cmUmLCBjb25zdCBJbmRleFNldDxWYWx1ZSo+Jik7CiAKIC8vIFRoaXMgZml4ZXMg
U1NBIGZvciB5b3UuIFVzZSB0aGlzIGFmdGVyIHlvdSBoYXZlIGRvbmUgZGVtb3RlVmFsdWVzKCkg
YW5kIHlvdSBoYXZlIHBlcmZvcm1lZAogLy8gd2hhdGV2ZXIgZXZpbCB0cmFuc2Zvcm1hdGlvbiB5
b3UgbmVlZGVkLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAko
cmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQgcHJlcGFyZUZvckdlbmVy
YXRpb24oUHJvY2VkdXJlJiBwcm8KICAgICBUaW1pbmdTY29wZSB0aW1pbmdTY29wZSgicHJlcGFy
ZUZvckdlbmVyYXRpb24iKTsKIAogICAgIGdlbmVyYXRlVG9BaXIocHJvY2VkdXJlLCBvcHRMZXZl
bCk7Ci0gICAgQWlyOjpwcmVwYXJlRm9yR2VuZXJhdGlvbihwcm9jZWR1cmUuY29kZSgpKTsKKyAg
ICBBaXI6OnByZXBhcmVGb3JHZW5lcmF0aW9uKHByb2NlZHVyZS5jb2RlKCksIG9wdExldmVsKTsK
IH0KIAogdm9pZCBnZW5lcmF0ZShQcm9jZWR1cmUmIHByb2NlZHVyZSwgQ0NhbGxIZWxwZXJzJiBq
aXQpCkBAIC04MCw3ICs4MCw3IEBAIHZvaWQgZ2VuZXJhdGVUb0FpcihQcm9jZWR1cmUmIHByb2Nl
ZHVyZSwKICAgICBpZiAoc2hvdWxkVmFsaWRhdGVJUigpKQogICAgICAgICB2YWxpZGF0ZShwcm9j
ZWR1cmUpOwogCi0gICAgaWYgKG9wdExldmVsID49IDEpIHsKKyAgICBpZiAob3B0TGV2ZWwgPj0g
MikgewogICAgICAgICByZWR1Y2VEb3VibGVUb0Zsb2F0KHByb2NlZHVyZSk7CiAgICAgICAgIHJl
ZHVjZVN0cmVuZ3RoKHByb2NlZHVyZSk7CiAgICAgICAgIGVsaW1pbmF0ZUNvbW1vblN1YmV4cHJl
c3Npb25zKHByb2NlZHVyZSk7CkBAIC05MSwxMiArOTEsMTUgQEAgdm9pZCBnZW5lcmF0ZVRvQWly
KFByb2NlZHVyZSYgcHJvY2VkdXJlLAogICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IEFkZCBt
b3JlIG9wdGltaXphdGlvbnMgaGVyZS4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1MDUwNworICAgIH0gZWxzZSBpZiAob3B0TGV2ZWwgPj0gMSkg
eworICAgICAgICAvLyBGSVhNRTogRXhwbG9yZSBiZXR0ZXIgInF1aWNrIG1vZGUiIG9wdGltaXph
dGlvbnMuCisgICAgICAgIHJlZHVjZVN0cmVuZ3RoKHByb2NlZHVyZSk7CiAgICAgfQogCiAgICAg
Ly8gVGhpcyBwdXRzIHRoZSBJUiBpbiBxdWlya3MgbW9kZS4KICAgICBsb3dlck1hY3Jvcyhwcm9j
ZWR1cmUpOwogCi0gICAgaWYgKG9wdExldmVsID49IDEpIHsKKyAgICBpZiAob3B0TGV2ZWwgPj0g
MikgewogICAgICAgICByZWR1Y2VTdHJlbmd0aChwcm9jZWR1cmUpOwogCiAgICAgICAgIC8vIEZJ
WE1FOiBBZGQgbW9yZSBvcHRpbWl6YXRpb25zIGhlcmUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNHZW5lcmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0dlbmVyYXRlLmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0dlbmVyYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDggQEAKIAog
I2lmIEVOQUJMRShCM19KSVQpCiAKKyNpbmNsdWRlICJCM0NvbW1vbi5oIgorCiBuYW1lc3BhY2Ug
SlNDIHsKIAogY2xhc3MgQ0NhbGxIZWxwZXJzOwpAQCAtMzgsNyArNDAsNyBAQCBuYW1lc3BhY2Ug
QWlyIHsgY2xhc3MgQ29kZTsgfQogCiAvLyBUaGlzIHRha2VzIGEgQjM6OlByb2NlZHVyZSwgb3B0
aW1pemVzIGl0IGluLXBsYWNlLCBsb3dlcnMgaXQgdG8gQWlyLCBhbmQgcHJlcGFyZXMgdGhlIEFp
ciBmb3IKIC8vIGdlbmVyYXRpb24uCi1KU19FWFBPUlRfUFJJVkFURSB2b2lkIHByZXBhcmVGb3JH
ZW5lcmF0aW9uKFByb2NlZHVyZSYsIHVuc2lnbmVkIG9wdExldmVsID0gMSk7CitKU19FWFBPUlRf
UFJJVkFURSB2b2lkIHByZXBhcmVGb3JHZW5lcmF0aW9uKFByb2NlZHVyZSYsIHVuc2lnbmVkIG9w
dExldmVsID0gZGVmYXVsdE9wdExldmVsKCkpOwogCiAvLyBUaGlzIHRha2VzIGEgQjM6OlByb2Nl
ZHVyZSB0aGF0IGhhcyBiZWVuIHByZXBhcmVkIGZvciBnZW5lcmF0aW9uIChpLmUuIGl0IGhhcyBi
ZWVuIGxvd2VyZWQgdG8gQWlyIGFuZAogLy8gdGhlIEFpciBoYXMgYmVlbiBwcmVwYXJlZCBmb3Ig
Z2VuZXJhdGlvbikgYW5kIGdlbmVyYXRlcyBpdC4gVGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvZiBj
YWxsaW5nCkBAIC00OCw3ICs1MCw3IEBAIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZ2VuZXJhdGUo
UHJvY2VkdXIKIC8vIFRoaXMgdGFrZXMgYSBCMzo6UHJvY2VkdXJlLCBvcHRpbWl6ZXMgaXQgaW4t
cGxhY2UsIGFuZCBsb3dlcnMgaXQgdG8gQWlyLiBZb3UgY2FuIHRoZW4gZ2VuZXJhdGUKIC8vIHRo
ZSBBaXIgdG8gbWFjaGluZSBjb2RlIHVzaW5nIEFpcjo6cHJlcGFyZUZvckdlbmVyYXRpb24oKSBh
bmQgQWlyOjpnZW5lcmF0ZSgpIG9uIHRoZSBQcm9jZWR1cmUncwogLy8gY29kZSgpLgotdm9pZCBn
ZW5lcmF0ZVRvQWlyKFByb2NlZHVyZSYsIHVuc2lnbmVkIG9wdExldmVsID0gMSk7Cit2b2lkIGdl
bmVyYXRlVG9BaXIoUHJvY2VkdXJlJiwgdW5zaWduZWQgb3B0TGV2ZWwgPSBkZWZhdWx0T3B0TGV2
ZWwoKSk7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNIZWFwUmFuZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw0OSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJCM0hlYXBSYW5nZS5oIgotCi0jaWYgRU5BQkxF
KEIzX0pJVCkKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7Ci0KLXZvaWQgSGVhcFJh
bmdlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAgaWYgKCp0aGlzID09IEhl
YXBSYW5nZSgpKSB7Ci0gICAgICAgIG91dC5wcmludCgiQm90dG9tIik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgaWYgKCp0aGlzID09IHRvcCgpKSB7Ci0gICAgICAgIG91dC5wcmludCgi
VG9wIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgb3V0LnByaW50KG1fYmVnaW4sICIu
Li4iLCBtX2VuZCk7Ci19Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwotCi0jZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJh
bmdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJhbmdl
LmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBS
YW5nZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw5MCArMjcsMTUgQEAKIAogI2lmIEVOQUJMRShC
M19KSVQpCiAKLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgotI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorI2luY2x1ZGUgPHd0Zi9SYW5nZS5oPgog
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAogLy8gQWxpYXMgYW5hbHlzaXMgaW4g
QjMgaXMgZG9uZSBieSBjaGVja2luZyBpZiB0d28gaW50ZWdlciByYW5nZXMgb3ZlcmxhcC4gVGhp
cyBpcyBwb3dlcmZ1bCBlbm91Z2gKIC8vIHRvIGJlIHVzZWQgZm9yIFRCQUEtc3R5bGUgYWxpYXMg
YW5hbHlzaXMgdXNlZCBieSB0aGUgREZHLCBGVEwsIGFuZCBMTFZNOiB5b3UganVzdCB0dXJuIGVh
Y2ggbm9kZQogLy8gaW4gdGhlIHRyZWUgb2YgYWJzdHJhY3QgaGVhcHMgaW50byBhIHByZS9wb3N0
IHJhbmdlLgotLy8KLS8vIE5vdGUgdGhhdCB0aGUgJ2JlZ2luJyBpcyBpbmNsdXNpdmUsIHdoaWxl
IHRoZSAnZW5kJyBpcyBleGNsdXNpdmUuIFRoZXNlIHR3byByYW5nZXMgYXJlIG5vbi0KLS8vIG92
ZXJsYXBwaW5nOgotLy8KLS8vICAgICByYW5nZUEgPSAwLi4uOAotLy8gICAgIHJhbmdlQiA9IDgu
Li4xNgotCi1jbGFzcyBIZWFwUmFuZ2UgewotcHVibGljOgotICAgIHR5cGVkZWYgdW5zaWduZWQg
VHlwZTsKLSAgICAKLSAgICBIZWFwUmFuZ2UoKQotICAgICAgICA6IG1fYmVnaW4oMCkKLSAgICAg
ICAgLCBtX2VuZCgwKQotICAgIHsKLSAgICB9Ci0KLSAgICBleHBsaWNpdCBIZWFwUmFuZ2UodW5z
aWduZWQgdmFsdWUpCi0gICAgICAgIDogbV9iZWdpbih2YWx1ZSkKLSAgICAgICAgLCBtX2VuZCh2
YWx1ZSArIDEpCi0gICAgewotICAgICAgICBBU1NFUlQobV9lbmQgPj0gbV9iZWdpbik7Ci0gICAg
fQotCi0gICAgSGVhcFJhbmdlKHVuc2lnbmVkIGJlZ2luLCB1bnNpZ25lZCBlbmQpCi0gICAgICAg
IDogbV9iZWdpbihiZWdpbikKLSAgICAgICAgLCBtX2VuZChlbmQpCi0gICAgewotICAgICAgICBB
U1NFUlQobV9lbmQgPj0gbV9iZWdpbik7Ci0gICAgICAgIGlmIChtX2JlZ2luID09IG1fZW5kKSB7
Ci0gICAgICAgICAgICAvLyBDYW5vbmljYWxpemUgZW1wdHkgcmFuZ2VzLgotICAgICAgICAgICAg
bV9iZWdpbiA9IDA7Ci0gICAgICAgICAgICBtX2VuZCA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBzdGF0aWMgSGVhcFJhbmdlIHRvcCgpCi0gICAgewotICAgICAgICByZXR1cm4gSGVhcFJh
bmdlKDAsIFVJTlRfTUFYKTsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSGVh
cFJhbmdlJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2JlZ2luID09IG90
aGVyLm1fYmVnaW4KLSAgICAgICAgICAgICYmIG1fZW5kID09IG90aGVyLm1fZW5kOwotICAgIH0K
LQotICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBIZWFwUmFuZ2UmIG90aGVyKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwotICAgIH0KLSAgICAKLSAgICBI
ZWFwUmFuZ2Ugb3BlcmF0b3J8KGNvbnN0IEhlYXBSYW5nZSYgb3RoZXIpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gSGVhcFJhbmdlKAotICAgICAgICAgICAgc3RkOjptaW4obV9iZWdpbiwg
b3RoZXIubV9iZWdpbiksCi0gICAgICAgICAgICBzdGQ6Om1heChtX2VuZCwgb3RoZXIubV9lbmQp
KTsKLSAgICB9Ci0gICAgCi0gICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0
dXJuIG1fYmVnaW4gIT0gbV9lbmQ7IH0KLQotICAgIHVuc2lnbmVkIGJlZ2luKCkgY29uc3QgeyBy
ZXR1cm4gbV9iZWdpbjsgfQotICAgIHVuc2lnbmVkIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5k
OyB9Ci0KLSAgICBib29sIG92ZXJsYXBzKGNvbnN0IEhlYXBSYW5nZSYgb3RoZXIpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gV1RGOjpyYW5nZXNPdmVybGFwKG1fYmVnaW4sIG1fZW5kLCBv
dGhlci5tX2JlZ2luLCBvdGhlci5tX2VuZCk7Ci0gICAgfQotCi0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIHVu
c2lnbmVkIG1fYmVnaW47Ci0gICAgdW5zaWduZWQgbV9lbmQ7Ci19OworCit0eXBlZGVmIFJhbmdl
PHVuc2lnbmVkPiBIZWFwUmFuZ2U7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2aXNpb24gMjE0
NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMzNzksMTAgKzMzNzksMTAgQEAgcHJpdmF0ZToKICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAgICAgCi0gICAgSW5kZXhTZXQ8VmFsdWU+
IG1fbG9ja2VkOyAvLyBUaGVzZSBhcmUgdmFsdWVzIHRoYXQgd2lsbCBoYXZlIG5vIFRtcCBpbiBB
aXIuCi0gICAgSW5kZXhNYXA8VmFsdWUsIFRtcD4gbV92YWx1ZVRvVG1wOyAvLyBUaGVzZSBhcmUg
dmFsdWVzIHRoYXQgbXVzdCBoYXZlIGEgVG1wIGluIEFpci4gV2Ugc2F5IHRoYXQgYSBWYWx1ZSog
d2l0aCBhIG5vbi1udWxsIFRtcCBpcyAicGlubmVkIi4KLSAgICBJbmRleE1hcDxWYWx1ZSwgVG1w
PiBtX3BoaVRvVG1wOyAvLyBFYWNoIFBoaSBnZXRzIGl0cyBvd24gVG1wLgotICAgIEluZGV4TWFw
PEIzOjpCYXNpY0Jsb2NrLCBBaXI6OkJhc2ljQmxvY2sqPiBtX2Jsb2NrVG9CbG9jazsKKyAgICBJ
bmRleFNldDxWYWx1ZSo+IG1fbG9ja2VkOyAvLyBUaGVzZSBhcmUgdmFsdWVzIHRoYXQgd2lsbCBo
YXZlIG5vIFRtcCBpbiBBaXIuCisgICAgSW5kZXhNYXA8VmFsdWUqLCBUbXA+IG1fdmFsdWVUb1Rt
cDsgLy8gVGhlc2UgYXJlIHZhbHVlcyB0aGF0IG11c3QgaGF2ZSBhIFRtcCBpbiBBaXIuIFdlIHNh
eSB0aGF0IGEgVmFsdWUqIHdpdGggYSBub24tbnVsbCBUbXAgaXMgInBpbm5lZCIuCisgICAgSW5k
ZXhNYXA8VmFsdWUqLCBUbXA+IG1fcGhpVG9UbXA7IC8vIEVhY2ggUGhpIGdldHMgaXRzIG93biBU
bXAuCisgICAgSW5kZXhNYXA8QjM6OkJhc2ljQmxvY2sqLCBBaXI6OkJhc2ljQmxvY2sqPiBtX2Js
b2NrVG9CbG9jazsKICAgICBIYXNoTWFwPEIzOjpTdGFja1Nsb3QqLCBBaXI6OlN0YWNrU2xvdCo+
IG1fc3RhY2tUb1N0YWNrOwogICAgIEhhc2hNYXA8VmFyaWFibGUqLCBUbXA+IG1fdmFyaWFibGVU
b1RtcDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTW92ZUNvbnN0YW50cy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTW92ZUNvbnN0YW50
cy5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01v
dmVDb25zdGFudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHByaXZhdGU6
CiAgICAgewogICAgICAgICBEb21pbmF0b3JzJiBkb21pbmF0b3JzID0gbV9wcm9jLmRvbWluYXRv
cnMoKTsKICAgICAgICAgSGFzaE1hcDxWYWx1ZUtleSwgVmFsdWUqPiB2YWx1ZUZvckNvbnN0YW50
OwotICAgICAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBWZWN0b3I8VmFsdWUqPj4gbWF0ZXJpYWxp
emF0aW9ucyhtX3Byb2Muc2l6ZSgpKTsKKyAgICAgICAgSW5kZXhNYXA8QmFzaWNCbG9jayosIFZl
Y3RvcjxWYWx1ZSo+PiBtYXRlcmlhbGl6YXRpb25zKG1fcHJvYy5zaXplKCkpOwogCiAgICAgICAg
IC8vIFdlIGRldGVybWluZSB3aGVyZSB0aGluZ3MgZ2V0IG1hdGVyaWFsaXplZCBiYXNlZCBvbiB3
aGVyZSB0aGV5IGFyZSB1c2VkLgogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9w
cm9jKSB7CkBAIC0yNzQsNyArMjc0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgZm9yIChhdXRvJiBl
bnRyeSA6IG1fY29uc3RUYWJsZSkKICAgICAgICAgICAgIG1fZGF0YVNlY3Rpb25bZW50cnkudmFs
dWVdID0gZW50cnkua2V5LnZhbHVlKCk7CiAKLSAgICAgICAgSW5kZXhTZXQ8VmFsdWU+IG9mZkxp
bWl0czsKKyAgICAgICAgSW5kZXhTZXQ8VmFsdWUqPiBvZmZMaW1pdHM7CiAgICAgICAgIGZvciAo
QmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2MpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
dmFsdWVJbmRleCA9IDA7IHZhbHVlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK3ZhbHVlSW5kZXgp
IHsKICAgICAgICAgICAgICAgICBTdGFja21hcFZhbHVlKiB2YWx1ZSA9IGJsb2NrLT5hdCh2YWx1
ZUluZGV4KS0+YXM8U3RhY2ttYXBWYWx1ZT4oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1BoaUNoaWxkcmVuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzUGhpQ2hpbGRyZW4uaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzUGhpQ2hpbGRyZW4uaAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDcgKzE2OCw3
IEBAIHB1YmxpYzoKICAgICBjb25zdCBWZWN0b3I8VmFsdWUqLCA4PiYgcGhpcygpIGNvbnN0IHsg
cmV0dXJuIG1fcGhpczsgfQogCiBwcml2YXRlOgotICAgIEluZGV4TWFwPFZhbHVlLCBWZWN0b3I8
VXBzaWxvblZhbHVlKj4+IG1fdXBzaWxvbnM7CisgICAgSW5kZXhNYXA8VmFsdWUqLCBWZWN0b3I8
VXBzaWxvblZhbHVlKj4+IG1fdXBzaWxvbnM7CiAgICAgVmVjdG9yPFZhbHVlKiwgOD4gbV9waGlz
OwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCShy
ZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBQcm9jZWR1cmU6Omlu
dmFsaWRhdGVDRkcoKQogCiB2b2lkIFByb2NlZHVyZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAogewotICAgIEluZGV4U2V0PFZhbHVlPiB2YWx1ZXNJbkJsb2NrczsKKyAgICBJbmRleFNl
dDxWYWx1ZSo+IHZhbHVlc0luQmxvY2tzOwogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiAq
dGhpcykgewogICAgICAgICBvdXQucHJpbnQoZGVlcER1bXAoKnRoaXMsIGJsb2NrKSk7CiAgICAg
ICAgIHZhbHVlc0luQmxvY2tzLmFkZEFsbCgqYmxvY2spOwpAQCAtMjQ1LDcgKzI0NSw3IEBAIHZv
aWQgUHJvY2VkdXJlOjpkZWxldGVWYWx1ZShWYWx1ZSogdmFsdWUKIAogdm9pZCBQcm9jZWR1cmU6
OmRlbGV0ZU9ycGhhbnMoKQogewotICAgIEluZGV4U2V0PFZhbHVlPiB2YWx1ZXNJbkJsb2NrczsK
KyAgICBJbmRleFNldDxWYWx1ZSo+IHZhbHVlc0luQmxvY2tzOwogICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiAqdGhpcykKICAgICAgICAgdmFsdWVzSW5CbG9ja3MuYWRkQWxsKCpibG9jayk7
CiAKQEAgLTMzMyw3ICszMzMsNyBAQCBWYWx1ZSogUHJvY2VkdXJlOjphZGRWYWx1ZUltcGwoVmFs
dWUqIHZhCiAKIHZvaWQgUHJvY2VkdXJlOjpzZXRCbG9ja09yZGVySW1wbChWZWN0b3I8QmFzaWNC
bG9jayo+JiBibG9ja3MpCiB7Ci0gICAgSW5kZXhTZXQ8QmFzaWNCbG9jaz4gYmxvY2tzU2V0Owor
ICAgIEluZGV4U2V0PEJhc2ljQmxvY2sqPiBibG9ja3NTZXQ7CiAgICAgYmxvY2tzU2V0LmFkZEFs
bChibG9ja3MpOwogCiAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6ICp0aGlzKSB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VEb3VibGVUb0Zsb2F0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VEb3VibGVUb0Zsb2F0
LmNwcAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVk
dWNlRG91YmxlVG9GbG9hdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyNCwxOCArNDI0LDE4IEBA
IHByaXZhdGU6CiAKICAgICAvLyBTZXQgb2YgYWxsIHRoZSBEb3VibGUgdmFsdWVzIHRoYXQgYXJl
IGFjdHVhbGx5IHVzZWQgYXMgRG91YmxlLgogICAgIC8vIENvbnZlcnRpbmcgYW55IG9mIHRoZW0g
dG8gRmxvYXQgd291bGQgbG9zZSBwcmVjaXNpb24uCi0gICAgSW5kZXhTZXQ8VmFsdWU+IG1fdmFs
dWVzVXNlZEFzRG91YmxlOworICAgIEluZGV4U2V0PFZhbHVlKj4gbV92YWx1ZXNVc2VkQXNEb3Vi
bGU7CiAKICAgICAvLyBTZXQgb2YgYWxsIHRoZSBQaGkgb2YgdHlwZSBEb3VibGUgdGhhdCByZWFs
bHkgY29udGFpbnMgYSBEb3VibGUuCiAgICAgLy8gQW55IERvdWJsZSBQaGkgbm90IGluIHRoZSBz
ZXQgY2FuIGJlIGNvbnZlcnRlZCB0byBGbG9hdCB3aXRob3V0IGxvc2luZyBwcmVjaXNpb24uCi0g
ICAgSW5kZXhTZXQ8VmFsdWU+IG1fcGhpc0NvbnRhaW5pbmdEb3VibGU7CisgICAgSW5kZXhTZXQ8
VmFsdWUqPiBtX3BoaXNDb250YWluaW5nRG91YmxlOwogCiAgICAgLy8gQW55IHZhbHVlIHRoYXQg
d2FzIGNvbnZlcnRlZCBmcm9tIHByb2R1Y2luZyBhIERvdWJsZSB0byBwcm9kdWNpbmcgYSBGbG9h
dC4KICAgICAvLyBUaGlzIHNldCBkb2VzIG5vdCBpbmNsdWRlIFBoaS1VcHNpbG9ucy4KLSAgICBJ
bmRleFNldDxWYWx1ZT4gbV9jb252ZXJ0ZWRWYWx1ZTsKKyAgICBJbmRleFNldDxWYWx1ZSo+IG1f
Y29udmVydGVkVmFsdWU7CiAKICAgICAvLyBBbnkgdmFsdWUgdGhhdCBwcmV2aW91c2x5IHByb2R1
Y2VkIERvdWJsZSBhbmQgbm93IHByb2R1Y2UgRmxvYXQuCi0gICAgSW5kZXhTZXQ8VmFsdWU+IG1f
Y29udmVydGVkUGhpczsKKyAgICBJbmRleFNldDxWYWx1ZSo+IG1fY29udmVydGVkUGhpczsKIH07
CiAKIHZvaWQgcHJpbnRHcmFwaElmQ29udmVydGluZyhQcm9jZWR1cmUmIHByb2NlZHVyZSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHJl
dmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVu
Z3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM5Miw3ICsyMzkyLDcgQEAgcHJpdmF0ZToKIAog
ICAgIHZvaWQga2lsbERlYWRDb2RlKCkKICAgICB7Ci0gICAgICAgIEdyYXBoTm9kZVdvcmtsaXN0
PFZhbHVlKiwgSW5kZXhTZXQ8VmFsdWU+PiB3b3JrbGlzdDsKKyAgICAgICAgR3JhcGhOb2RlV29y
a2xpc3Q8VmFsdWUqLCBJbmRleFNldDxWYWx1ZSo+PiB3b3JrbGlzdDsKICAgICAgICAgVmVjdG9y
PFVwc2lsb25WYWx1ZSosIDY0PiB1cHNpbG9uczsKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBi
bG9jayA6IG1fcHJvYykgewogICAgICAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiAqYmxvY2sp
IHsKQEAgLTI0MjksNyArMjQyOSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KIAotICAgICAgICBJbmRleFNldDxWYXJpYWJsZT4gbGl2ZVZhcmlhYmxlczsK
KyAgICAgICAgSW5kZXhTZXQ8VmFyaWFibGUqPiBsaXZlVmFyaWFibGVzOwogICAgICAgICAKICAg
ICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvYykgewogICAgICAgICAgICAgc2l6
ZV90IHNvdXJjZUluZGV4ID0gMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1NT
QUNhbGN1bGF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
U0FDYWxjdWxhdG9yLmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1NTQUNhbGN1bGF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTYsNyArMTU2LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgVmVjdG9yPERlZio+IG1fcGhpczsKICAgICB9OwogICAgIAotICAgIElu
ZGV4TWFwPEJhc2ljQmxvY2ssIEJsb2NrRGF0YT4gbV9kYXRhOworICAgIEluZGV4TWFwPEJhc2lj
QmxvY2sqLCBCbG9ja0RhdGE+IG1fZGF0YTsKIAogICAgIERvbWluYXRvcnMqIG1fZG9taW5hdG9y
cyB7IG51bGxwdHIgfTsKICAgICBQcm9jZWR1cmUmIG1fcHJvYzsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1VzZUNvdW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1VzZUNvdW50cy5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNVc2VDb3VudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ4LDcgKzQ4
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgdW5zaWduZWQgbnVtVXNpbmdJbnN0cnVjdGlvbnMgeyAw
IH07CiAgICAgfTsKICAgICAKLSAgICBJbmRleE1hcDxWYWx1ZSwgQ291bnRzPiBtX2NvdW50czsK
KyAgICBJbmRleE1hcDxWYWx1ZSosIENvdW50cz4gbV9jb3VudHM7CiB9OwogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCShyZXZp
c2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTIwLDcgKzEyMCw3IEBAIFN0YXRpY0xvY2sgY3Jhc2hMb2NrOwogCiBW
TSogdm07CiAKLXN0ZDo6dW5pcXVlX3B0cjxDb21waWxhdGlvbj4gY29tcGlsZShQcm9jZWR1cmUm
IHByb2NlZHVyZSwgdW5zaWduZWQgb3B0TGV2ZWwgPSAxKQorc3RkOjp1bmlxdWVfcHRyPENvbXBp
bGF0aW9uPiBjb21waWxlKFByb2NlZHVyZSYgcHJvY2VkdXJlLCB1bnNpZ25lZCBvcHRMZXZlbCA9
IGRlZmF1bHRPcHRMZXZlbCgpKQogewogICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPENvbXBp
bGF0aW9uPihCMzo6Y29tcGlsZSgqdm0sIHByb2NlZHVyZSwgb3B0TGV2ZWwpKTsKIH0KQEAgLTk5
MCw2ICs5OTAsNyBAQCB2b2lkIHRlc3RNdWxMb2FkVHdpY2UoKQogCiAgICAgdGVzdCgwKTsKICAg
ICB0ZXN0KDEpOworICAgIHRlc3QoMik7CiB9CiAKIHZvaWQgdGVzdE11bEFkZEFyZ3NMZWZ0KCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNC
eUdyYXBoQ29sb3JpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuY3BwCShyZXZpc2lvbiAy
MTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0
ZXJzQnlHcmFwaENvbG9yaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAog
I2lmIEVOQUJMRShCM19KSVQpCiAKICNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWly
Rml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCIKICNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIK
ICNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgiCkBA
IC0xNTg1LDYgKzE1ODYsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIG1fY29hbGVzY2luZ0NhbmRp
ZGF0ZXMuY2xlYXIoKTsKICAgICAgICAgbV93b3JrbGlzdE1vdmVzLmNsZWFyKCk7CiAKKyAgICAg
ICAgLy8gRklYTUU6IEl0IHNlZW1zIGxpa2Ugd2UgZG9uJ3QgbmVlZCB0byByZWNvbXB1dGUgbGl2
ZW5lc3MuIFdlIGp1c3QgbmVlZCB0byB1cGRhdGUgaXRzIGRhdGEKKyAgICAgICAgLy8gc3RydWN0
dXJlcyBzbyB0aGF0IGl0IGtub3dzIHRoYXQgdGhlIG5ld2x5IGludHJvZHVjZWQgdGVtcG9yYXJp
ZXMgYXJlIG5vdCBsaXZlIGF0IGFueSBiYXNpYworICAgICAgICAvLyBibG9jayBib3VuZGFyeS4g
VGhpcyBzaG91bGQgdHJpdmlhbGx5IGJlIHRydWUgZm9yIG5vdy4KICAgICAgICAgVG1wTGl2ZW5l
c3M8YmFuaz4gbGl2ZW5lc3MobV9jb2RlKTsKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9j
ayA6IG1fY29kZSkgewogICAgICAgICAgICAgdHlwZW5hbWUgVG1wTGl2ZW5lc3M8YmFuaz46Okxv
Y2FsQ2FsYyBsb2NhbENhbGMobGl2ZW5lc3MsIGJsb2NrKTsKQEAgLTE3OTgsNyArMTgwMiw3IEBA
IHB1YmxpYzoKICAgICAgICAgbV9udW1JdGVyYXRpb25zID0gMDsKICAgICAgICAgYWxsb2NhdGVP
bkJhbms8RlA+KCk7CiAKLSAgICAgICAgZml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMoKTsKKyAgICAg
ICAgZml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMobV9jb2RlKTsKIAogICAgICAgICBpZiAocmVwb3J0
U3RhdHMpCiAgICAgICAgICAgICBkYXRhTG9nKCJOdW0gaXRlcmF0aW9ucyA9ICIsIG1fbnVtSXRl
cmF0aW9ucywgIlxuIik7CkBAIC0xOTU0LDcgKzE5NTgsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcEZhc3QoWyZdIChUbXAm
IHRtcCkgewotICAgICAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkgfHwgdG1wLmlzR1Ao
KSA9PSAoYmFuayAhPSBHUCkpCisgICAgICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSB8
fCB0bXAuYmFuaygpICE9IGJhbmspCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAK
ICAgICAgICAgICAgICAgICAgICAgVG1wIGFsaWFzVG1wID0gYWxsb2NhdG9yLmdldEFsaWFzKHRt
cCk7CkBAIC0yMTY5LDkgKzIxNzMsMTIgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAgICAg
ICB0bXAgPSBtX2NvZGUubmV3VG1wKGJhbmspOwogICAgICAgICAgICAgICAgICAgICB1bnNwaWxs
YWJsZVRtcHMuYWRkKEFic29sdXRlVG1wTWFwcGVyPGJhbms+OjphYnNvbHV0ZUluZGV4KHRtcCkp
OworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT0g
QXJnOjpTY3JhdGNoKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAg
ICAgICAgICAgICAgIEFyZyBhcmcgPSBBcmc6OnN0YWNrKHN0YWNrU2xvdEVudHJ5LT52YWx1ZSk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzQW55VXNlKHJvbGUpICYmIHJvbGUgIT0g
QXJnOjpTY3JhdGNoKQorICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0FueVVzZShyb2xl
KSkKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoaW5zdEluZGV4
LCBtb3ZlLCBpbnN0Lm9yaWdpbiwgYXJnLCB0bXApOwogICAgICAgICAgICAgICAgICAgICBpZiAo
QXJnOjppc0FueURlZihyb2xlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNl
dC5pbnNlcnQoaW5zdEluZGV4ICsgMSwgbW92ZSwgaW5zdC5vcmlnaW4sIHRtcCwgYXJnKTsKQEAg
LTIxODcsNjYgKzIxOTQsNiBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQogCi0gICAgdm9p
ZCBmaXhTcGlsbHNBZnRlclRlcm1pbmFscygpCi0gICAgewotICAgICAgICAvLyBCZWNhdXNlIHRo
ZXJlIG1heSBiZSB0ZXJtaW5hbHMgdGhhdCBwcm9kdWNlIHZhbHVlcywgSVJDIG1heQotICAgICAg
ICAvLyB3YW50IHRvIHNwaWxsIHRob3NlIHRlcm1pbmFscy4gSXQnbGwgaGFwcGVuIHRvIHNwaWxs
IGl0IGFmdGVyCi0gICAgICAgIC8vIHRoZSB0ZXJtaW5hbC4gSWYgd2UgbGVmdCB0aGUgZ3JhcGgg
aW4gdGhpcyBzdGF0ZSwgaXQnZCBiZSBpbnZhbGlkCi0gICAgICAgIC8vIGJlY2F1c2UgYSB0ZXJt
aW5hbCBtdXN0IGJlIHRoZSBsYXN0IGluc3RydWN0aW9uIGluIGEgYmxvY2suCi0gICAgICAgIC8v
IFdlIGZpeCB0aGF0IGhlcmUuCi0KLSAgICAgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldCht
X2NvZGUpOwotCi0gICAgICAgIGJvb2wgYWRkZWRCbG9ja3MgPSBmYWxzZTsKLQotICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCB0
ZXJtaW5hbEluZGV4ID0gYmxvY2stPnNpemUoKTsKLSAgICAgICAgICAgIGJvb2wgZm91bmRUZXJt
aW5hbCA9IGZhbHNlOwotICAgICAgICAgICAgd2hpbGUgKHRlcm1pbmFsSW5kZXgtLSkgewotICAg
ICAgICAgICAgICAgIGlmIChibG9jay0+YXQodGVybWluYWxJbmRleCkuaXNUZXJtaW5hbCgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGZvdW5kVGVybWluYWwgPSB0cnVlOwotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBBU1NFUlRfVU5VU0VEKGZvdW5kVGVybWluYWwsIGZvdW5kVGVybWluYWwpOwotCi0gICAg
ICAgICAgICBpZiAodGVybWluYWxJbmRleCA9PSBibG9jay0+c2l6ZSgpIC0gMSkKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgLy8gVGhlcmUgbXVzdCBiZSBpbnN0cnVj
dGlvbnMgYWZ0ZXIgdGhlIHRlcm1pbmFsIGJlY2F1c2UgaXQncyBub3QgdGhlIGxhc3QgaW5zdHJ1
Y3Rpb24uCi0gICAgICAgICAgICBBU1NFUlQodGVybWluYWxJbmRleCA8IGJsb2NrLT5zaXplKCkg
LSAxKTsKLSAgICAgICAgICAgIFZlY3RvcjxJbnN0LCAxPiBpbnN0c1RvTW92ZTsKLSAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IHRlcm1pbmFsSW5kZXggKyAxOyBpIDwgYmxvY2stPnNpemUo
KTsgaSsrKQotICAgICAgICAgICAgICAgIGluc3RzVG9Nb3ZlLmFwcGVuZChibG9jay0+YXQoaSkp
OwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5zdHNUb01vdmUuc2l6ZSgpKTsKLQotICAg
ICAgICAgICAgZm9yIChGcmVxdWVudGVkQmxvY2smIGZyZXF1ZW50ZWRTdWNjZXNzb3IgOiBibG9j
ay0+c3VjY2Vzc29ycygpKSB7Ci0gICAgICAgICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29y
ID0gZnJlcXVlbnRlZFN1Y2Nlc3Nvci5ibG9jaygpOwotICAgICAgICAgICAgICAgIC8vIElmIHN1
Y2Nlc3NvcidzIG9ubHkgcHJlZGVjZXNzb3IgaXMgYmxvY2ssIHdlIGNhbiBwbGFudCB0aGUgc3Bp
bGwgaW5zaWRlCi0gICAgICAgICAgICAgICAgLy8gdGhlIHN1Y2Nlc3Nvci4gT3RoZXJ3aXNlLCB3
ZSBtdXN0IHNwbGl0IHRoZSBjcml0aWNhbCBlZGdlIGFuZCBjcmVhdGUKLSAgICAgICAgICAgICAg
ICAvLyBhIG5ldyBibG9jayBmb3IgdGhlIHNwaWxsLgotICAgICAgICAgICAgICAgIGlmIChzdWNj
ZXNzb3ItPm51bVByZWRlY2Vzc29ycygpID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgaW5z
ZXJ0aW9uU2V0Lmluc2VydEluc3RzKDAsIGluc3RzVG9Nb3ZlKTsKLSAgICAgICAgICAgICAgICAg
ICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoc3VjY2Vzc29yKTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICBhZGRlZEJsb2NrcyA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBXZSBwcm9iYWJseSB3YW50IGJldHRlciBibG9jayBvcmRlcmlu
ZyBoZXJlLgotICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBuZXdCbG9jayA9IG1fY29k
ZS5hZGRCbG9jaygpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IEluc3QmIGluc3Qg
OiBpbnN0c1RvTW92ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ld0Jsb2NrLT5hcHBlbmRJ
bnN0KGluc3QpOwotICAgICAgICAgICAgICAgICAgICBuZXdCbG9jay0+YXBwZW5kSW5zdChJbnN0
KEp1bXAsIGluc3RzVG9Nb3ZlLmxhc3QoKS5vcmlnaW4pKTsKLSAgICAgICAgICAgICAgICAgICAg
bmV3QmxvY2stPnN1Y2Nlc3NvcnMoKS5hcHBlbmQoc3VjY2Vzc29yKTsKLSAgICAgICAgICAgICAg
ICAgICAgZnJlcXVlbnRlZFN1Y2Nlc3Nvci5ibG9jaygpID0gbmV3QmxvY2s7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBibG9jay0+cmVzaXplKHRlcm1p
bmFsSW5kZXggKyAxKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhZGRlZEJsb2NrcykKLSAg
ICAgICAgICAgIG1fY29kZS5yZXNldFJlYWNoYWJpbGl0eSgpOwotICAgIH0KLQogICAgIENvZGUm
IG1fY29kZTsKICAgICBUbXBXaWR0aCBtX3RtcFdpZHRoOwogICAgIFVzZUNvdW50czxUbXA+JiBt
X3VzZUNvdW50czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2Nh
dGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdp
c3RlcnNCeUxpbmVhclNjYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTk0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmgiCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQXJnSW5saW5lcy5oIgorI2luY2x1
ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5oIgor
I2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgi
CisjaW5jbHVkZSAiQWlyTGl2ZW5lc3MuaCIKKyNpbmNsdWRlICJBaXJQYWRJbnRlcmZlcmVuY2Uu
aCIKKyNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCisjaW5jbHVkZSAiQWlyUmVnTGl2ZW5lc3Mu
aCIKKyNpbmNsdWRlICJBaXJUbXBJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+
CisjaW5jbHVkZSA8d3RmL1JhbmdlLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eyBuYW1lc3BhY2UgQWlyIHsKKworbmFtZXNwYWNlIHsKKworY29uc3QgYm9vbCB2ZXJib3NlID0g
ZmFsc2U7CisKK3R5cGVkZWYgUmFuZ2U8c2l6ZV90PiBJbnRlcnZhbDsKKworc3RydWN0IFRtcERh
dGEgeworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAg
ICAgb3V0LnByaW50KCJ7aW50ZXJ2YWwgPSAiLCBpbnRlcnZhbCwgIiwgc3BpbGxlZCA9ICIsIHBv
aW50ZXJEdW1wKHNwaWxsZWQpLCAiLCBhc3NpZ25lZCA9ICIsIGFzc2lnbmVkLCAiLCBhZGphY2Vu
dCA9ICIsIGFkamFjZW50LCAifSIpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHZhbGlkYXRlKCkK
KyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEoc3BpbGxlZCAmJiBhc3NpZ25lZCkpOwor
ICAgIH0KKyAgICAKKyAgICBJbnRlcnZhbCBpbnRlcnZhbDsKKyAgICBTdGFja1Nsb3QqIHNwaWxs
ZWQgeyBudWxscHRyIH07CisgICAgUmVnIGFzc2lnbmVkOworICAgIFJlZ2lzdGVyU2V0IGFkamFj
ZW50OworfTsKKworc3RydWN0IENsb2JiZXIgeworICAgIENsb2JiZXIoKQorICAgIHsKKyAgICB9
CisgICAgCisgICAgQ2xvYmJlcihzaXplX3QgaW5kZXgsIFJlZ2lzdGVyU2V0IHJlZ3MpCisgICAg
ICAgIDogaW5kZXgoaW5kZXgpCisgICAgICAgICwgcmVncyhyZWdzKQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAg
ICBvdXQucHJpbnQoaW5kZXgsICI6IiwgcmVncyk7CisgICAgfQorICAgIAorICAgIHNpemVfdCBp
bmRleCB7IDAgfTsKKyAgICBSZWdpc3RlclNldCByZWdzOworfTsKKworY2xhc3MgVG1wT3JDbG9i
YmVyIHsKK3B1YmxpYzoKKyAgICBUbXBPckNsb2JiZXIoKQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgVG1wT3JDbG9iYmVyKENsb2JiZXIqIGNsb2JiZXIpCisgICAgICAgIDogbV92YWx1ZShiaXR3
aXNlX2Nhc3Q8dWludHB0cl90PihjbG9iYmVyKSkKKyAgICB7CisgICAgfQorICAgIAorICAgIFRt
cE9yQ2xvYmJlcihUbXAgdG1wKQorICAgICAgICA6IG1fdmFsdWUoKHN0YXRpY19jYXN0PHVpbnRw
dHJfdD4odG1wLmludGVybmFsVmFsdWUoKSkgPDwgMSkgfCAxKQorICAgIHsKKyAgICB9CisgICAg
CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRtcE9yQ2xvYmJlciYgb3RoZXIpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSA9PSBvdGhlci5tX3ZhbHVlOworICAgIH0KKyAg
ICAKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVG1wT3JDbG9iYmVyJiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisgICAgCisg
ICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
KnRoaXMgIT0gVG1wT3JDbG9iYmVyKCk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNUbXAoKSBj
b25zdCB7IHJldHVybiBtX3ZhbHVlICYgMTsgfQorICAgIGJvb2wgaXNDbG9iYmVyKCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZSAmJiAhKG1fdmFsdWUgJiAxKTsgfQorICAgIAorICAgIFRtcCB0bXAo
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzVG1wKCkpOworICAgICAgICByZXR1cm4g
VG1wOjp0bXBGb3JJbnRlcm5hbFZhbHVlKG1fdmFsdWUgPj4gMSk7CisgICAgfQorICAgIGNvbnN0
IENsb2JiZXImIGNsb2JiZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzQ2xvYmJl
cigpKTsKKyAgICAgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8Q2xvYmJlcio+KG1fdmFsdWUpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7
CisgICAgICAgIGlmICghKnRoaXMpIHsKKyAgICAgICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzVG1wKCkpIHsK
KyAgICAgICAgICAgIG91dC5wcmludCh0bXAoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgb3V0LnByaW50KGNsb2JiZXIoKSk7CisgICAgfQorICAgIAorcHJpdmF0
ZToKKyAgICB1aW50cHRyX3QgbV92YWx1ZSB7IDAgfTsKK307CisKK3RlbXBsYXRlPEJhbmsgYmFu
az4KK2NsYXNzIExpbmVhclNjYW4geworcHVibGljOgorICAgIExpbmVhclNjYW4oQ29kZSYgY29k
ZSkKKyAgICAgICAgOiBtX2NvZGUoY29kZSkKKyAgICAgICAgLCBtX3N0YXJ0SW5kZXgoY29kZS5z
aXplKCkpCisgICAgICAgICwgbV9tYXAoY29kZS5udW1UbXBzKGJhbmspKQorICAgICAgICAsIG1f
aW5zZXJ0aW9uU2V0cyhjb2RlLnNpemUoKSwgY29kZSkKKyAgICB7CisgICAgfQorICAgIAorICAg
IHZvaWQgcnVuKCkKKyAgICB7CisgICAgICAgIGJ1aWxkUmVnaXN0ZXJTZXQoKTsKKyAgICAgICAg
YnVpbGRJbmRpY2VzKCk7CisgICAgICAgIGJ1aWxkSW50ZXJ2YWxzKCk7CisgICAgICAgIGZvciAo
OzspIHsKKyAgICAgICAgICAgIHByZXBhcmVJbnRlcnZhbHMoKTsKKyAgICAgICAgICAgIGF0dGVt
cHRTY2FuKCk7CisgICAgICAgICAgICBpZiAoIW1fZGlkU3BpbGwpCisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBlbWl0U3BpbGxDb2RlKCk7CisgICAgICAgIH0KKyAgICAgICAg
aW5zZXJ0U3BpbGxDb2RlKCk7CisgICAgICAgIGFzc2lnblJlZ2lzdGVycygpOworICAgIH0KKyAg
ICAKK3ByaXZhdGU6CisgICAgdm9pZCBidWlsZFJlZ2lzdGVyU2V0KCkKKyAgICB7CisgICAgICAg
IG1fcmVnaXN0ZXJzID0gbV9jb2RlLnJlZ3NJblByaW9yaXR5T3JkZXIoYmFuayk7CisgICAgICAg
IG1fcmVnaXN0ZXJTZXQuc2V0QWxsKG1fcmVnaXN0ZXJzKTsKKyAgICB9CisKKyAgICB2b2lkIGJ1
aWxkSW5kaWNlcygpCisgICAgeworICAgICAgICBzaXplX3QgaW5kZXggPSAwOworICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7CisgICAgICAgICAgICBtX3N0YXJ0SW5k
ZXhbYmxvY2tdID0gaW5kZXg7CisgICAgICAgICAgICBpbmRleCArPSBibG9jay0+c2l6ZSgpICsg
MTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBzaXplX3QgaW5kZXhPZkhlYWQoQmFzaWNC
bG9jayogYmxvY2spCisgICAgeworICAgICAgICByZXR1cm4gbV9zdGFydEluZGV4W2Jsb2NrXTsK
KyAgICB9CisgICAgCisgICAgc2l6ZV90IGluZGV4T2ZUYWlsKEJhc2ljQmxvY2sqIGJsb2NrKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGluZGV4T2ZIZWFkKGJsb2NrKSArIGJsb2NrLT5zaXplKCk7
CisgICAgfQorICAgIAorICAgIHNpemVfdCBpbmRleE9mKEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNp
Z25lZCBpbnN0SW5kZXgsIEFyZzo6UGhhc2UgcGhhc2UpCisgICAgeworICAgICAgICByZXR1cm4g
aW5kZXhPZkhlYWQoYmxvY2spICsgaW5zdEluZGV4ICsgcGhhc2U7CisgICAgfQorICAgIAorICAg
IEludGVydmFsIGludGVydmFsKHNpemVfdCBpbmRleE9mRWFybHksIEFyZzo6VGltaW5nIHRpbWlu
ZykKKyAgICB7CisgICAgICAgIHN3aXRjaCAodGltaW5nKSB7CisgICAgICAgIGNhc2UgQXJnOjpP
bmx5RWFybHk6CisgICAgICAgICAgICByZXR1cm4gSW50ZXJ2YWwoaW5kZXhPZkVhcmx5KTsKKyAg
ICAgICAgY2FzZSBBcmc6Ok9ubHlMYXRlOgorICAgICAgICAgICAgcmV0dXJuIEludGVydmFsKGlu
ZGV4T2ZFYXJseSArIDEpOworICAgICAgICBjYXNlIEFyZzo6RWFybHlBbmRMYXRlOgorICAgICAg
ICAgICAgcmV0dXJuIEludGVydmFsKGluZGV4T2ZFYXJseSwgaW5kZXhPZkVhcmx5ICsgMik7Cisg
ICAgICAgIH0KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBJ
bnRlcnZhbCgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGJ1aWxkSW50ZXJ2YWxzKCkKKyAgICB7
CisgICAgICAgIFRtcExpdmVuZXNzPGJhbms+IGxpdmVuZXNzKG1fY29kZSk7CisgICAgICAgIAor
ICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7CisgICAgICAgICAgICBz
aXplX3QgaW5kZXhPZkhlYWQgPSB0aGlzLT5pbmRleE9mSGVhZChibG9jayk7CisgICAgICAgICAg
ICBzaXplX3QgaW5kZXhPZlRhaWwgPSB0aGlzLT5pbmRleE9mVGFpbChibG9jayk7CisgICAgICAg
ICAgICBmb3IgKFRtcCB0bXAgOiBsaXZlbmVzcy5saXZlQXRIZWFkKGJsb2NrKSkgeworICAgICAg
ICAgICAgICAgIGlmICghdG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgIG1fbWFwW3Rt
cF0uaW50ZXJ2YWwgfD0gSW50ZXJ2YWwoaW5kZXhPZkhlYWQpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZm9yIChUbXAgdG1wIDogbGl2ZW5lc3MubGl2ZUF0VGFpbChibG9jaykpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoIXRtcC5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICBtX21h
cFt0bXBdLmludGVydmFsIHw9IEludGVydmFsKGluZGV4T2ZUYWlsKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSAwOyBp
bnN0SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK2luc3RJbmRleCkgeworICAgICAgICAgICAgICAg
IEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKKyAgICAgICAgICAgICAgICBzaXpl
X3QgaW5kZXhPZkVhcmx5ID0gaW5kZXhPZkhlYWQgKyBpbnN0SW5kZXg7CisgICAgICAgICAgICAg
ICAgaW5zdC5mb3JFYWNoVG1wKAorICAgICAgICAgICAgICAgICAgICBbJl0gKFRtcCYgdG1wLCBB
cmc6OlJvbGUgcm9sZSwgQmFuayB0bXBCYW5rLCBXaWR0aCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHRtcC5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXBCYW5rICE9IGJhbmspCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgbV9t
YXBbdG1wXS5pbnRlcnZhbCB8PSBpbnRlcnZhbChpbmRleE9mRWFybHksIEFyZzo6dGltaW5nKHJv
bGUpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIFJlZ0xpdmVuZXNzOjpMb2NhbENhbGMgbG9jYWxDYWxjKGxpdmVuZXNzLCBibG9jayk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGF1dG8gcmVjb3JkID0gWyZdICh1bnNpZ25lZCBpbnN0
SW5kZXgpIHsKKyAgICAgICAgICAgICAgICBSZWdpc3RlclNldCByZWdzID0gbG9jYWxDYWxjLmxp
dmUoKTsKKyAgICAgICAgICAgICAgICBpZiAoSW5zdCogcHJldiA9IGJsb2NrLT5nZXQoaW5zdElu
ZGV4IC0gMSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJldi0+Zm9yRWFjaDxSZWc+KAorICAg
ICAgICAgICAgICAgICAgICAgICAgWyZdIChSZWcmIHJlZywgQXJnOjpSb2xlIHJvbGUsIEJhbmss
IFdpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNMYXRlRGVm
KHJvbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdzLmFkZChyZWcpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2
LT5raW5kLm9wY29kZSA9PSBQYXRjaCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZ3MubWVy
Z2UocHJldi0+ZXh0cmFDbG9iYmVyZWRSZWdzKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBpZiAoSW5zdCogbmV4dCA9IGJsb2NrLT5nZXQoaW5zdEluZGV4KSkgeworICAg
ICAgICAgICAgICAgICAgICBuZXh0LT5mb3JFYWNoPFJlZz4oCisgICAgICAgICAgICAgICAgICAg
ICAgICBbJl0gKFJlZyYgcmVnLCBBcmc6OlJvbGUgcm9sZSwgQmFuaywgV2lkdGgpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0Vhcmx5RGVmKHJvbGUpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZWdzLmFkZChyZWcpOworICAgICAgICAgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0LT5raW5kLm9wY29kZSA9
PSBQYXRjaCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZ3MubWVyZ2UobmV4dC0+ZXh0cmFF
YXJseUNsb2JiZXJlZFJlZ3MoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIHJlZ3MuZmlsdGVyKG1fcmVnaXN0ZXJTZXQpOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChyZWdzLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fY2xv
YmJlcnMuYXBwZW5kKENsb2JiZXIoaW5kZXhPZkhlYWQgKyBpbnN0SW5kZXgsIHJlZ3MpKTsKKyAg
ICAgICAgICAgIH07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJlY29yZChibG9jay0+c2l6
ZSgpKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gYmxvY2stPnNpemUo
KTsgaW5zdEluZGV4LS07KSB7CisgICAgICAgICAgICAgICAgbG9jYWxDYWxjLmV4ZWN1dGUoaW5z
dEluZGV4KTsKKyAgICAgICAgICAgICAgICByZWNvcmQoaW5zdEluZGV4KTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAg
ICAgIGRhdGFMb2coIkludGVydmFsczpcbiIpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB0
bXBJbmRleCA9IDA7IHRtcEluZGV4IDwgbV9jb2RlLm51bVRtcHMoYmFuayk7ICsrdG1wSW5kZXgp
IHsKKyAgICAgICAgICAgICAgICBUbXAgdG1wID0gVG1wOjp0bXBGb3JJbmRleChiYW5rLCB0bXBJ
bmRleCk7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICIsIHRtcCwgIjogIiwgbV9tYXBb
dG1wXSwgIlxuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
c2l6ZV90IHNvcnRpbmdJbmRleE9mKGNvbnN0IFRtcE9yQ2xvYmJlciYgdGhpbmcpCisgICAgewor
ICAgICAgICAvLyBXZSB3YW50IGNsb2JiZXJzIHRvIGNvbWUgYWZ0ZXIgdG1wcy4KKyAgICAgICAg
aWYgKHRoaW5nLmlzVG1wKCkpCisgICAgICAgICAgICByZXR1cm4gbV9tYXBbdGhpbmcudG1wKCld
LmludGVydmFsLmJlZ2luKCkgPDwgMTsKKyAgICAgICAgcmV0dXJuICh0aGluZy5jbG9iYmVyKCku
aW5kZXggPDwgMSkgfCAxOworICAgIH0KKyAgICAKKyAgICBzaXplX3QgaW5kZXhPZihjb25zdCBU
bXBPckNsb2JiZXImIHRoaW5nKQorICAgIHsKKyAgICAgICAgLy8gV2Ugd2FudCBjbG9iYmVycyB0
byBjb21lIGFmdGVyIHRtcHMuCisgICAgICAgIGlmICh0aGluZy5pc1RtcCgpKQorICAgICAgICAg
ICAgcmV0dXJuIG1fbWFwW3RoaW5nLnRtcCgpXS5pbnRlcnZhbC5iZWdpbigpOworICAgICAgICBy
ZXR1cm4gdGhpbmcuY2xvYmJlcigpLmluZGV4OworICAgIH0KKyAgICAKKyAgICB2b2lkIHByZXBh
cmVJbnRlcnZhbHMoKQorICAgIHsKKyAgICAgICAgbV9pbnRlcnZhbHMucmVzaXplKDApOworICAg
ICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCB0bXBJbmRleCA9IDA7IHRtcEluZGV4IDwgbV9j
b2RlLm51bVRtcHMoYmFuayk7ICsrdG1wSW5kZXgpIHsKKyAgICAgICAgICAgIFRtcCB0bXAgPSBU
bXA6OnRtcEZvckluZGV4KGJhbmssIHRtcEluZGV4KTsKKyAgICAgICAgICAgIFRtcERhdGEmIGRh
dGEgPSBtX21hcFt0bXBdOworICAgICAgICAgICAgaWYgKGRhdGEuc3BpbGxlZCkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZGF0YS5hc3NpZ25l
ZCA9IFJlZygpOworICAgICAgICAgICAgZGF0YS5hZGphY2VudCA9IFJlZ2lzdGVyU2V0KCk7Cisg
ICAgICAgICAgICBtX2ludGVydmFscy5hcHBlbmQodG1wKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgZm9yIChDbG9iYmVyJiBjbG9iYmVyIDogbV9jbG9iYmVycykKKyAgICAgICAgICAg
IG1faW50ZXJ2YWxzLmFwcGVuZCgmY2xvYmJlcik7CisgICAgICAgIAorICAgICAgICBzdGQ6OnNv
cnQoCisgICAgICAgICAgICBtX2ludGVydmFscy5iZWdpbigpLCBtX2ludGVydmFscy5lbmQoKSwK
KyAgICAgICAgICAgIFsmXSAoVG1wT3JDbG9iYmVyJiBhLCBUbXBPckNsb2JiZXImIGIpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gc29ydGluZ0luZGV4T2YoYSkgPCBzb3J0aW5nSW5kZXhPZihi
KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgICAgICBkYXRhTG9nKCJJbnRlcnZhbHM6ICIsIGxpc3REdW1wKG1faW50ZXJ2YWxzKSwgIlxu
Iik7CisgICAgfQorICAgIAorICAgIFRtcCBhZGRUbXBXaXRoSW50ZXJ2YWwoSW50ZXJ2YWwgaW50
ZXJ2YWwpCisgICAgeworICAgICAgICBUbXBEYXRhIGRhdGE7CisgICAgICAgIGRhdGEuaW50ZXJ2
YWwgPSBpbnRlcnZhbDsKKyAgICAgICAgCisgICAgICAgIFRtcCB0bXAgPSBtX2NvZGUubmV3VG1w
KGJhbmspOworICAgICAgICBtX21hcC5hcHBlbmQodG1wLCBkYXRhKTsKKyAgICAgICAgcmV0dXJu
IHRtcDsKKyAgICB9CisgICAgCisgICAgUmVnIGZpbmRGcmVlUmVnaXN0ZXIoVG1wIHRtcCkKKyAg
ICB7CisgICAgICAgIGlmIChtX2FjdGl2ZS5zaXplKCkgPT0gbV9yZWdpc3RlcnMuc2l6ZSgpKQor
ICAgICAgICAgICAgcmV0dXJuIFJlZygpOworICAgICAgICBUbXBEYXRhJiBkYXRhID0gbV9tYXBb
dG1wXTsKKyAgICAgICAgZm9yIChSZWcgcmVnIDogbV9yZWdpc3RlcnMpIHsKKyAgICAgICAgICAg
IGlmICghZGF0YS5hZGphY2VudC5nZXQocmVnKSAmJiAhbV9hY3RpdmVSZWdzLmdldChyZWcpKQor
ICAgICAgICAgICAgICAgIHJldHVybiByZWc7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFJl
ZygpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0dGVtcHRTY2FuKCkKKyAgICB7CisgICAgICAg
IC8vIFRoaXMgaXMgbW9kZWxlZCBhZnRlciBMaW5lYXJTY2FuUmVnaXN0ZXJBbGxvY2F0aW9uIGlu
IEZpZy4gMSBpbgorICAgICAgICAvLyBodHRwOi8vZGwuYWNtLm9yZy9jaXRhdGlvbi5jZm0/aWQ9
MzMwMjUwLgorCisgICAgICAgIG1fZGlkU3BpbGwgPSBmYWxzZTsKKyAgICAgICAgbV9hY3RpdmUu
Y2xlYXIoKTsKKyAgICAgICAgbV9hY3RpdmVSZWdzID0gUmVnaXN0ZXJTZXQoKTsKKyAgICAgICAg
Zm9yIChUbXBPckNsb2JiZXImIHRoaW5nIDogbV9pbnRlcnZhbHMpIHsKKyAgICAgICAgICAgIHNp
emVfdCBpbmRleCA9IGluZGV4T2YodGhpbmcpOworICAgICAgICAgICAgCisgICAgICAgICAgICBp
ZiAodmVyYm9zZSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2coIkluZGV4ICMiLCBpbmRleCwg
IjogIiwgdGhpbmcsICJcbiIpOworICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgQWN0aXZlOlxu
Iik7CisgICAgICAgICAgICAgICAgZm9yIChUbXAgdG1wIDogbV9hY3RpdmUpCisgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2coIiAgICAiLCB0bXAsICI6ICIsIG1fbWFwW3RtcF0sICJcbiIpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVGhpcyBpcyBF
eHBpcmVPbGRJbnRlcnZhbHMgaW4gRmlnLiAxLgorICAgICAgICAgICAgd2hpbGUgKCFtX2FjdGl2
ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBUbXAgdG1wID0gbV9hY3RpdmUuZmlyc3Qo
KTsKKyAgICAgICAgICAgICAgICBUbXBEYXRhJiBlbnRyeSA9IG1fbWFwW3RtcF07CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgYm9vbCBleHBpcmVkID0gZW50cnkuaW50ZXJ2YWwu
ZW5kKCkgPD0gaW5kZXg7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCFl
eHBpcmVkKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBtX2FjdGl2ZS5yZW1vdmVGaXJzdCgpOworICAgICAgICAgICAgICAgIG1f
YWN0aXZlUmVncy5yZW1vdmUoZW50cnkuYXNzaWduZWQpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICAvLyBUaGlzIHBhcnQgaXMgbm90IGluIHRoZSBwYXBlciBzaW5j
ZSB3ZSBoYXZlIGEgbW9yZSBwcmVjaXNlIGhhbmRsaW5nIG9mIGNsb2JiZXJzIGFuZAorICAgICAg
ICAgICAgLy8gcHJlY29sb3JlZCByZWdpc3RlcnMuCisgICAgICAgICAgICBpZiAodGhpbmcuaXND
bG9iYmVyKCkpIHsKKyAgICAgICAgICAgICAgICBDbG9iYmVyIGNsb2JiZXIgPSB0aGluZy5jbG9i
YmVyKCk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWNsb2JiZXIucmVncy5pc0Vt
cHR5KCkpOworICAgICAgICAgICAgICAgIGZvciAoVG1wIHRtcCA6IG1fYWN0aXZlKQorICAgICAg
ICAgICAgICAgICAgICBtX21hcFt0bXBdLmFkamFjZW50Lm1lcmdlKGNsb2JiZXIucmVncyk7Cisg
ICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgcHJvYmxlbXMgPSBtX2FjdGl2ZVJlZ3M7CisgICAg
ICAgICAgICAgICAgcHJvYmxlbXMuZmlsdGVyKGNsb2JiZXIucmVncyk7CisgICAgICAgICAgICAg
ICAgaWYgKCFwcm9ibGVtcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9hY3Rp
dmVSZWdzLm1lcmdlKGNsb2JiZXIucmVncyk7CisgICAgICAgICAgICAgICAgICAgIG1fYWN0aXZl
LnJlbW92ZUFsbE1hdGNoaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChUbXAgdG1w
KSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUbXBEYXRhJiBlbnRyeSA9
IG1fbWFwW3RtcF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
ZW50cnkuYXNzaWduZWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJvYmxl
bXMuY29udGFpbnMoZW50cnkuYXNzaWduZWQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnIGJldHRl
clJlZyA9IGZpbmRGcmVlUmVnaXN0ZXIodG1wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIWJldHRlclJlZykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGls
bCh0bXApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YXNzaWduV2l0aG91dEFkZGluZ1RvQWN0aXZlKHRtcCwgYmV0dGVyUmVnKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgICAgICAgICAgbV9hY3RpdmVSZWdzLmV4Y2x1ZGUoY2xvYmJlci5yZWdz
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFRtcCB0bXAgPSB0aGluZy50bXAoKTsK
KyAgICAgICAgICAgIFRtcERhdGEmIGVudHJ5ID0gbV9tYXBbdG1wXTsKKyAgICAgICAgICAgIGVu
dHJ5LmFkamFjZW50ID0gbV9hY3RpdmVSZWdzOworICAgICAgICAgICAgUmVnIHJlZyA9IGZpbmRG
cmVlUmVnaXN0ZXIodG1wKTsKKyAgICAgICAgICAgIGlmIChyZWcpIHsKKyAgICAgICAgICAgICAg
ICBhc3NpZ24odG1wLCByZWcpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUaGlzIGlzIFNwaWxsQXRJbnRlcnZh
bCBpbiBGaWcuIDEuCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9hY3RpdmUuaXNFbXB0
eSgpKTsKKyAgICAgICAgICAgIFRtcCBzcGlsbFRtcCA9IG1fYWN0aXZlLmxhc3QoKTsKKyAgICAg
ICAgICAgIFRtcERhdGEmIHNwaWxsRW50cnkgPSBtX21hcFtzcGlsbFRtcF07CisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChzcGlsbEVudHJ5LmFzc2lnbmVkKTsKKyAgICAgICAgICAgIGlmIChz
cGlsbEVudHJ5LmludGVydmFsLmVuZCgpIDw9IGVudHJ5LmludGVydmFsLmVuZCgpKSB7CisgICAg
ICAgICAgICAgICAgc3BpbGwodG1wKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9hY3RpdmUucmVtb3ZlTGFzdCgp
OworICAgICAgICAgICAgYXNzaWduKHRtcCwgc3BpbGxFbnRyeS5hc3NpZ25lZCk7CisgICAgICAg
ICAgICBzcGlsbChzcGlsbFRtcCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBh
c3NpZ25XaXRob3V0QWRkaW5nVG9BY3RpdmUoVG1wIHRtcCwgUmVnIHJlZykKKyAgICB7CisgICAg
ICAgIFRtcERhdGEmIGVudHJ5ID0gbV9tYXBbdG1wXTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
IWVudHJ5LnNwaWxsZWQpOworICAgICAgICBlbnRyeS5hc3NpZ25lZCA9IHJlZzsKKyAgICAgICAg
ZW50cnkuYWRqYWNlbnQgPSBtX2FjdGl2ZVJlZ3M7CisgICAgICAgIG1fYWN0aXZlUmVncy5hZGQo
cmVnKTsKKyAgICAgICAgZm9yIChUbXAgb3RoZXJUbXAgOiBtX2FjdGl2ZSkgeworICAgICAgICAg
ICAgaWYgKG90aGVyVG1wICE9IHRtcCkKKyAgICAgICAgICAgICAgICBtX21hcFtvdGhlclRtcF0u
YWRqYWNlbnQuYWRkKHJlZyk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBhc3Np
Z24oVG1wIHRtcCwgUmVnIHJlZykKKyAgICB7CisgICAgICAgIGFzc2lnbldpdGhvdXRBZGRpbmdU
b0FjdGl2ZSh0bXAsIHJlZyk7CisgICAgICAgIG1fYWN0aXZlLmFwcGVuZEFuZEJ1YmJsZSgKKyAg
ICAgICAgICAgIHRtcCwKKyAgICAgICAgICAgIFsmXSAoVG1wIG90aGVyVG1wKSAtPiBib29sIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gbV9tYXBbb3RoZXJUbXBdLmludGVydmFsLmVuZCgpID4g
bV9tYXBbdG1wXS5pbnRlcnZhbC5lbmQoKTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKyAgICAK
KyAgICB2b2lkIHNwaWxsKFRtcCB0bXApCisgICAgeworICAgICAgICBUbXBEYXRhJiBlbnRyeSA9
IG1fbWFwW3RtcF07CisgICAgICAgIGVudHJ5LnNwaWxsZWQgPSBtX2NvZGUuYWRkU3RhY2tTbG90
KDgsIFN0YWNrU2xvdEtpbmQ6OlNwaWxsKTsKKyAgICAgICAgZW50cnkuYXNzaWduZWQgPSBSZWco
KTsKKyAgICAgICAgbV9kaWRTcGlsbCA9IHRydWU7CisgICAgfQorICAgIAorICAgIHZvaWQgZW1p
dFNwaWxsQ29kZSgpCisgICAgeworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9j
b2RlKSB7CisgICAgICAgICAgICBzaXplX3QgaW5kZXhPZkhlYWQgPSB0aGlzLT5pbmRleE9mSGVh
ZChibG9jayk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IDA7IGluc3RJ
bmRleCA8IGJsb2NrLT5zaXplKCk7ICsraW5zdEluZGV4KSB7CisgICAgICAgICAgICAgICAgSW5z
dCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOworICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGluZGV4T2ZFYXJseSA9IGluZGV4T2ZIZWFkICsgaW5zdEluZGV4OworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIC8vIEZpcnN0IHRyeSB0byBzcGlsbCBkaXJlY3RseS4KKyAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5zdC5hcmdzLnNpemUoKTsgKytp
KSB7CisgICAgICAgICAgICAgICAgICAgIEFyZyYgYXJnID0gaW5zdC5hcmdzW2ldOworICAgICAg
ICAgICAgICAgICAgICBpZiAoIWFyZy5pc1RtcCgpKQorICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgICAgIGlmIChhcmcuaXNSZWcoKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBpZiAoYXJnLmJh
bmsoKSAhPSBiYW5rKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAgICAgICAgIFN0YWNrU2xvdCogc3BpbGxlZCA9IG1fbWFwW2FyZy50bXAoKV0uc3BpbGxl
ZDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFzcGlsbGVkKQorICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIGlmICghaW5zdC5hZG1pdHNTdGFj
ayhpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
ICAgICBhcmcgPSBBcmc6OnN0YWNrKHNwaWxsZWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBGYWxsIGJhY2sgb24gdGhlIGhhcmQgd2F5
LgorICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcCgKKyAgICAgICAgICAgICAgICAgICAg
WyZdIChUbXAmIHRtcCwgQXJnOjpSb2xlIHJvbGUsIEJhbmsgdG1wQmFuaywgV2lkdGgpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wQmFuayAh
PSBiYW5rKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFN0YWNrU2xvdCogc3BpbGxlZCA9IG1fbWFwW3RtcF0uc3BpbGxlZDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghc3BpbGxlZCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICBPcGNvZGUgbW92ZSA9IGJh
bmsgPT0gR1AgPyBNb3ZlIDogTW92ZURvdWJsZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRt
cCA9IGFkZFRtcFdpdGhJbnRlcnZhbChpbnRlcnZhbChpbmRleE9mRWFybHksIEFyZzo6dGltaW5n
KHJvbGUpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocm9sZSA9PSBBcmc6OlNjcmF0
Y2gpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKEFyZzo6aXNBbnlVc2Uocm9sZSkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9pbnNlcnRpb25TZXRzW2Jsb2NrXS5pbnNlcnQoaW5zdEluZGV4LCBtb3ZlLCBpbnN0
Lm9yaWdpbiwgQXJnOjpzdGFjayhzcGlsbGVkKSwgdG1wKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChBcmc6OmlzQW55RGVmKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1faW5zZXJ0aW9uU2V0c1tibG9ja10uaW5zZXJ0KGluc3RJbmRleCArIDEsIG1vdmUsIGluc3Qu
b3JpZ2luLCB0bXAsIEFyZzo6c3RhY2soc3BpbGxlZCkpOworICAgICAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGluc2Vy
dFNwaWxsQ29kZSgpCisgICAgeworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9j
b2RlKQorICAgICAgICAgICAgbV9pbnNlcnRpb25TZXRzW2Jsb2NrXS5leGVjdXRlKGJsb2NrKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBhc3NpZ25SZWdpc3RlcnMoKQorICAgIHsKKyAgICAgICAg
Zm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fY29kZSkgeworICAgICAgICAgICAgZm9yIChJbnN0
JiBpbnN0IDogKmJsb2NrKSB7CisgICAgICAgICAgICAgICAgaW5zdC5mb3JFYWNoVG1wRmFzdCgK
KyAgICAgICAgICAgICAgICAgICAgWyZdIChUbXAmIHRtcCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHRtcC5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXAuYmFuaygpICE9IGJhbmspCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgICAgICBSZWcgcmVnID0gbV9tYXBbdG1wXS5hc3NpZ25lZDsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVnKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZygiRmFpbGVkIHRvIGFsbG9jYXRlIHJlZyBmb3I6ICIsIHRtcCwgIlxu
Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IHRtcCA9IFRtcChyZWcpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBDb2RlJiBtX2NvZGU7CisgICAgVmVjdG9yPFJl
Zz4gbV9yZWdpc3RlcnM7CisgICAgUmVnaXN0ZXJTZXQgbV9yZWdpc3RlclNldDsKKyAgICBJbmRl
eE1hcDxCYXNpY0Jsb2NrKiwgc2l6ZV90PiBtX3N0YXJ0SW5kZXg7CisgICAgSW5kZXhNYXA8VG1w
OjpJbmRleGVkPGJhbms+LCBUbXBEYXRhPiBtX21hcDsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2Nr
KiwgSW5zZXJ0aW9uU2V0PiBtX2luc2VydGlvblNldHM7CisgICAgVmVjdG9yPENsb2JiZXI+IG1f
Y2xvYmJlcnM7IC8vIEFmdGVyIHdlIGFsbG9jYXRlIHRoaXMsIHdlIGhhcHBpbHkgcG9pbnQgcG9p
bnRlcnMgaW50byBpdC4KKyAgICBWZWN0b3I8VG1wT3JDbG9iYmVyPiBtX2ludGVydmFsczsKKyAg
ICBEZXF1ZTxUbXA+IG1fYWN0aXZlOworICAgIFJlZ2lzdGVyU2V0IG1fYWN0aXZlUmVnczsKKyAg
ICBib29sIG1fZGlkU3BpbGwgeyBmYWxzZSB9OworfTsKKwordGVtcGxhdGU8QmFuayBiYW5rPgor
dm9pZCBydW5MaW5lYXJTY2FuKENvZGUmIGNvZGUpCit7CisgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgIGRhdGFMb2coIkFpciBiZWZvcmUgbGluZWFyIHNjYW4gZm9yICIsIGJhbmssICI6XG4iLCBj
b2RlKTsKKyAgICBMaW5lYXJTY2FuPGJhbms+IGxpbmVhclNjYW4oY29kZSk7CisgICAgbGluZWFy
U2Nhbi5ydW4oKTsKK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgYWxsb2Nh
dGVSZWdpc3RlcnNCeUxpbmVhclNjYW4oQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBo
YXNlU2NvcGUoY29kZSwgImFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuIik7CisgICAgcGFk
SW50ZXJmZXJlbmNlKGNvZGUpOworICAgIHJ1bkxpbmVhclNjYW48RlA+KGNvZGUpOworICAgIHJ1
bkxpbmVhclNjYW48R1A+KGNvZGUpOworICAgIGZpeFNwaWxsc0FmdGVyVGVybWluYWxzKGNvZGUp
OworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0
ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJz
QnlMaW5lYXJTY2FuLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkNQVS5oIgorI2luY2x1ZGUgIk9wdGlvbnMuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFz
cyBDb2RlOworCisvLyBUaGlzIGltcGxlbWVudHMgdGhlIFBvbGV0dG8gYW5kIFNhcmtlciByZWdp
c3RlciBhbGxvY2F0b3IgY2FsbGVkICJsaW5lYXIgc2NhbiI6CisvLyBodHRwOi8vZGwuYWNtLm9y
Zy9jaXRhdGlvbi5jZm0/aWQ9MzMwMjUwCisvLworLy8gVGhpcyBpcyBub3QgQWlyJ3MgcHJpbWFy
eSByZWdpc3RlciBhbGxvY2F0b3IuIFdlIHVzZSBpdCBvbmx5IHdoZW4gcnVubmluZyBhdCBvcHRM
ZXZlbD0wLiBUaGF0J3Mgbm90CisvLyB0aGUgZGVmYXVsdCBsZXZlbC4gVGhpcyByZWdpc3RlciBh
bGxvY2F0b3IgaXMgb3B0aW1pemVkIHByaW1hcmlseSBmb3IgcnVubmluZyBxdWlja2x5LiBJdCdz
IGV4cGVjdGVkCisvLyB0aGF0IGltcHJvdmVtZW50cyB0byB0aGlzIHJlZ2lzdGVyIGFsbG9jYXRv
ciBzaG91bGQgZm9jdXMgcHJpbWFyaWx5IG9uIGltcHJvdmluZyBpdHMgZXhlY3V0aW9uIHRpbWUK
Ky8vIHdpdGhvdXQgbXVjaCByZWdhcmQgZm9yIHRoZSBxdWFsaXR5IG9mIGdlbmVyYXRlZCBjb2Rl
LgorLy8KKy8vIEZvciBBaXIncyBwcmltYXJ5IHJlZ2lzdGVyIGFsbG9jYXRvciwgc2VlIEFpckFs
bG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmh8Y3BwLgordm9pZCBhbGxvY2F0ZVJlZ2lz
dGVyc0J5TGluZWFyU2NhbihDb2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpB
aXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAJKHJldmlzaW9uIDIxNDQyNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE2MSw3ICsxNjEsNyBAQCB2b2lkIGFsbG9jYXRlU3RhY2soQ29kZSYg
Y29kZSkKIAogICAgIC8vIE5vdyB3ZSBoYW5kbGUgdGhlIHNwaWxsIHNsb3RzLgogICAgIFN0YWNr
U2xvdExpdmVuZXNzIGxpdmVuZXNzKGNvZGUpOwotICAgIEluZGV4TWFwPFN0YWNrU2xvdCwgSGFz
aFNldDxTdGFja1Nsb3QqPj4gaW50ZXJmZXJlbmNlKGNvZGUuc3RhY2tTbG90cygpLnNpemUoKSk7
CisgICAgSW5kZXhNYXA8U3RhY2tTbG90KiwgSGFzaFNldDxTdGFja1Nsb3QqPj4gaW50ZXJmZXJl
bmNlKGNvZGUuc3RhY2tTbG90cygpLnNpemUoKSk7CiAgICAgVmVjdG9yPFN0YWNrU2xvdCo+IHNs
b3RzOwogCiAgICAgLy8gV2Ugd2lsbCBwZXJmb3JtIHNvbWUgc3BpbGwgY29hbGVzY2luZy4gVG8g
bWFrZSB0aGF0IGVmZmVjdGl2ZSwgd2UgbmVlZCB0byBiZSBhYmxlIHRvIGlkZW50aWZ5CkBAIC0z
MDksNyArMzA5LDcgQEAgdm9pZCBhbGxvY2F0ZVN0YWNrKENvZGUmIGNvZGUpCiAgICAgICAgICAg
ICByZXR1cm4gYS5mcmVxdWVuY3kgPiBiLmZyZXF1ZW5jeTsKICAgICAgICAgfSk7CiAgICAgCi0g
ICAgSW5kZXhNYXA8U3RhY2tTbG90LCBTdGFja1Nsb3QqPiByZW1hcHBlZFN0YWNrU2xvdHMoY29k
ZS5zdGFja1Nsb3RzKCkuc2l6ZSgpKTsKKyAgICBJbmRleE1hcDxTdGFja1Nsb3QqLCBTdGFja1Ns
b3QqPiByZW1hcHBlZFN0YWNrU2xvdHMoY29kZS5zdGFja1Nsb3RzKCkuc2l6ZSgpKTsKICAgICBh
dXRvIHJlbWFwID0gWyZdIChTdGFja1Nsb3QqIHNsb3QpIC0+IFN0YWNrU2xvdCogewogICAgICAg
ICBpZiAoIXNsb3QpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgy
LDYgKzI4MiwzNyBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQXJnCiAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAordm9pZCBwcmludEludGVybmFs
KFByaW50U3RyZWFtJiBvdXQsIEFyZzo6UGhhc2UgcGhhc2UpCit7CisgICAgc3dpdGNoIChwaGFz
ZSkgeworICAgIGNhc2UgQXJnOjpFYXJseToKKyAgICAgICAgb3V0LnByaW50KCJFYXJseSIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcmc6OkxhdGU6CisgICAgICAgIG91dC5wcmludCgi
TGF0ZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEFy
Zzo6VGltaW5nIHRpbWluZykKK3sKKyAgICBzd2l0Y2ggKHRpbWluZykgeworICAgIGNhc2UgQXJn
OjpPbmx5RWFybHk6CisgICAgICAgIG91dC5wcmludCgiT25seUVhcmx5Iik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIEFyZzo6T25seUxhdGU6CisgICAgICAgIG91dC5wcmludCgiT25seUxh
dGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJnOjpFYXJseUFuZExhdGU6CisgICAg
ICAgIG91dC5wcmludCgiRWFybHlBbmRMYXRlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCiB2b2lkIHByaW50SW50ZXJu
YWwoUHJpbnRTdHJlYW0mIG91dCwgQXJnOjpSb2xlIHJvbGUpCiB7CiAgICAgc3dpdGNoIChyb2xl
KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHJldmlzaW9uIDIx
NDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTkyLDYgKzkyLDE3IEBAIHB1YmxpYzoKICAgICAgICAgQ29sZCwKICAgICAgICAg
V2FybQogICAgIH07CisgICAgCisgICAgZW51bSBQaGFzZSA6IGludDhfdCB7CisgICAgICAgIEVh
cmx5LAorICAgICAgICBMYXRlCisgICAgfTsKKyAgICAKKyAgICBlbnVtIFRpbWluZyA6IGludDhf
dCB7CisgICAgICAgIE9ubHlFYXJseSwKKyAgICAgICAgT25seUxhdGUsCisgICAgICAgIEVhcmx5
QW5kTGF0ZQorICAgIH07CiAKICAgICBlbnVtIFJvbGUgOiBpbnQ4X3QgewogICAgICAgICAvLyBV
c2UgbWVhbnMgdGhhdCB0aGUgSW5zdCB3aWxsIHJlYWQgZnJvbSB0aGlzIHZhbHVlIGJlZm9yZSBk
b2luZyBhbnl0aGluZyBlbHNlLgpAQCAtMjUzLDcgKzI2NCw4MiBAQCBwdWJsaWM6CiAgICAgewog
ICAgICAgICByZXR1cm4gaXNDb2xkVXNlKHJvbGUpID8gQ29sZCA6IFdhcm07CiAgICAgfQotCisg
ICAgCisgICAgc3RhdGljIGJvb2wgYWN0aXZlQXQoUm9sZSByb2xlLCBQaGFzZSBwaGFzZSkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAocm9sZSkgeworICAgICAgICBjYXNlIFVzZToKKyAgICAgICAg
Y2FzZSBDb2xkVXNlOgorICAgICAgICBjYXNlIEVhcmx5RGVmOgorICAgICAgICBjYXNlIEVhcmx5
WkRlZjoKKyAgICAgICAgY2FzZSBVc2VBZGRyOgorICAgICAgICAgICAgcmV0dXJuIHBoYXNlID09
IEVhcmx5OworICAgICAgICBjYXNlIExhdGVVc2U6CisgICAgICAgIGNhc2UgTGF0ZUNvbGRVc2U6
CisgICAgICAgIGNhc2UgRGVmOgorICAgICAgICBjYXNlIFpEZWY6CisgICAgICAgICAgICByZXR1
cm4gcGhhc2UgPT0gTGF0ZTsKKyAgICAgICAgY2FzZSBVc2VEZWY6CisgICAgICAgIGNhc2UgVXNl
WkRlZjoKKyAgICAgICAgY2FzZSBTY3JhdGNoOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAg
IHN0YXRpYyBib29sIGFjdGl2ZUF0KFRpbWluZyB0aW1pbmcsIFBoYXNlIHBoYXNlKQorICAgIHsK
KyAgICAgICAgc3dpdGNoICh0aW1pbmcpIHsKKyAgICAgICAgY2FzZSBPbmx5RWFybHk6CisgICAg
ICAgICAgICByZXR1cm4gcGhhc2UgPT0gRWFybHk7CisgICAgICAgIGNhc2UgT25seUxhdGU6Cisg
ICAgICAgICAgICByZXR1cm4gcGhhc2UgPT0gTGF0ZTsKKyAgICAgICAgY2FzZSBFYXJseUFuZExh
dGU6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFRpbWluZyB0aW1pbmcoUm9s
ZSByb2xlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChyb2xlKSB7CisgICAgICAgIGNhc2UgVXNl
OgorICAgICAgICBjYXNlIENvbGRVc2U6CisgICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAg
IGNhc2UgRWFybHlaRGVmOgorICAgICAgICBjYXNlIFVzZUFkZHI6CisgICAgICAgICAgICByZXR1
cm4gT25seUVhcmx5OworICAgICAgICBjYXNlIExhdGVVc2U6CisgICAgICAgIGNhc2UgTGF0ZUNv
bGRVc2U6CisgICAgICAgIGNhc2UgRGVmOgorICAgICAgICBjYXNlIFpEZWY6CisgICAgICAgICAg
ICByZXR1cm4gT25seUxhdGU7CisgICAgICAgIGNhc2UgVXNlRGVmOgorICAgICAgICBjYXNlIFVz
ZVpEZWY6CisgICAgICAgIGNhc2UgU2NyYXRjaDoKKyAgICAgICAgICAgIHJldHVybiBFYXJseUFu
ZExhdGU7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQor
ICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgc3RhdGljIHZvaWQgZm9yRWFj
aFBoYXNlKFRpbWluZyB0aW1pbmcsIGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgeworICAgICAgICBp
ZiAoYWN0aXZlQXQodGltaW5nLCBFYXJseSkpCisgICAgICAgICAgICBmdW5jKEVhcmx5KTsKKyAg
ICAgICAgaWYgKGFjdGl2ZUF0KHRpbWluZywgTGF0ZSkpCisgICAgICAgICAgICBmdW5jKExhdGUp
OworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIHN0YXRpYyB2
b2lkIGZvckVhY2hQaGFzZShSb2xlIHJvbGUsIGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgeworICAg
ICAgICBpZiAoYWN0aXZlQXQocm9sZSwgRWFybHkpKQorICAgICAgICAgICAgZnVuYyhFYXJseSk7
CisgICAgICAgIGlmIChhY3RpdmVBdChyb2xlLCBMYXRlKSkKKyAgICAgICAgICAgIGZ1bmMoTGF0
ZSk7CisgICAgfQorICAgIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgUm9sZSBpbXBsaWVz
IHRoYXQgdGhlIEluc3Qgd2lsbCBVc2UgdGhlIEFyZyBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxz
ZS4KICAgICBzdGF0aWMgYm9vbCBpc0Vhcmx5VXNlKFJvbGUgcm9sZSkKICAgICB7CkBAIC0xMzU0
LDYgKzE0NDAsOCBAQCBuYW1lc3BhY2UgV1RGIHsKIAogSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBw
cmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6QWlyOjpBcmc6OktpbmQpOwogSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6
QWlyOjpBcmc6OlRlbXBlcmF0dXJlKTsKK0pTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJpbnRJbnRl
cm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OkFpcjo6QXJnOjpQaGFzZSk7CitKU19FWFBPUlRf
UFJJVkFURSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpBaXI6OkFy
Zzo6VGltaW5nKTsKIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0
cmVhbSYsIEpTQzo6QjM6OkFpcjo6QXJnOjpSb2xlKTsKIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
cHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OkFpcjo6QXJnOjpTaWduZWRuZXNz
KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja1dvcmtsaXN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja1dv
cmtsaXN0LmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQmxvY2tXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewogCi10eXBlZGVmIEdy
YXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrPj4gQmxvY2tX
b3JrbGlzdDsKK3R5cGVkZWYgR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0
PEJhc2ljQmxvY2sqPj4gQmxvY2tXb3JrbGlzdDsKIAogLy8gV2hlbiB5b3Ugc2F5IEJsb2NrV2l0
aDxpbnQ+IHlvdSBzaG91bGQgcmVhZCBpdCBhcyAiYmxvY2sgd2l0aCBhbiBpbnQiLgogdGVtcGxh
dGU8dHlwZW5hbWUgVD4gdXNpbmcgQmxvY2tXaXRoID0gR3JhcGhOb2RlV2l0aDxCYXNpY0Jsb2Nr
KiwgVD47CkBAIC00MSwxMSArNDEsMTEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcgQmxv
Y2tXaXRoID0gRwogLy8gcGVybWl0cyBmb3JjaWJseSBlbnF1ZXVlaW5nIHRoaW5ncyBldmVuIGlm
IHRoZSBibG9jayBoYXMgYWxyZWFkeSBiZWVuIHNlZW4uIEl0J3MgdXNlZnVsIGZvcgogLy8gdGhp
bmdzIGxpa2UgYnVpbGRpbmcgYSBzcGFubmluZyB0cmVlLCBpbiB3aGljaCBjYXNlIFQgKHRoZSBh
dXhpbGlhcnkgcGF5bG9hZCkgd291bGQgYmUgdGhlCiAvLyBzdWNjZXNzb3IgaW5kZXguCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBFeHRlbmRlZEJsb2NrV29ya2xpc3QgPSBFeHRlbmRlZEdy
YXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBULCBJbmRleFNldDxCYXNpY0Jsb2NrPj47Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBFeHRlbmRlZEJsb2NrV29ya2xpc3QgPSBFeHRlbmRl
ZEdyYXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBULCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+
OwogCiB0eXBlZGVmIEdyYXBoTm9kZVdpdGhPcmRlcjxCYXNpY0Jsb2NrKj4gQmxvY2tXaXRoT3Jk
ZXI7CiAKLXR5cGVkZWYgUG9zdE9yZGVyR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIElu
ZGV4U2V0PEJhc2ljQmxvY2s+PiBQb3N0T3JkZXJCbG9ja1dvcmtsaXN0OwordHlwZWRlZiBQb3N0
T3JkZXJHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jayo+
PiBQb3N0T3JkZXJCbG9ja1dvcmtsaXN0OwogCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6
QWlyCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0ZHLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDRkcuaAkocmV2aXNpb24g
MjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDRkcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzksOCArMzksOCBAQCBjbGFzcyBDRkcgewogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgogICAgIHR5cGVkZWYgQmFzaWNCbG9jayogTm9kZTsKLSAgICB0
eXBlZGVmIEluZGV4U2V0PEJhc2ljQmxvY2s+IFNldDsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiB1c2luZyBNYXAgPSBJbmRleE1hcDxCYXNpY0Jsb2NrLCBUPjsKKyAgICB0eXBlZGVmIEluZGV4
U2V0PEJhc2ljQmxvY2sqPiBTZXQ7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcgTWFw
ID0gSW5kZXhNYXA8QmFzaWNCbG9jayosIFQ+OwogICAgIHR5cGVkZWYgVmVjdG9yPEJhc2ljQmxv
Y2sqLCA0PiBMaXN0OwogCiAgICAgQ0ZHKENvZGUmIGNvZGUpCkBAIC01MSw3ICs1MSw3IEBAIHB1
YmxpYzoKICAgICBOb2RlIHJvb3QoKSB7IHJldHVybiBtX2NvZGVbMF07IH0KIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+Ci0gICAgTWFwPFQ+IG5ld01hcCgpIHsgcmV0dXJuIEluZGV4TWFwPEpT
Qzo6QjM6OkFpcjo6QmFzaWNCbG9jaywgVD4obV9jb2RlLnNpemUoKSk7IH0KKyAgICBNYXA8VD4g
bmV3TWFwKCkgeyByZXR1cm4gSW5kZXhNYXA8SlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrKiwgVD4o
bV9jb2RlLnNpemUoKSk7IH0KIAogICAgIFN1Y2Nlc3NvckNvbGxlY3Rpb248QmFzaWNCbG9jaywg
QmFzaWNCbG9jazo6U3VjY2Vzc29yTGlzdD4gc3VjY2Vzc29ycyhOb2RlIG5vZGUpIHsgcmV0dXJu
IG5vZGUtPnN1Y2Nlc3NvckJsb2NrcygpOyB9CiAgICAgQmFzaWNCbG9jazo6UHJlZGVjZXNzb3JM
aXN0JiBwcmVkZWNlc3NvcnMoTm9kZSBub2RlKSB7IHJldHVybiBub2RlLT5wcmVkZWNlc3NvcnMo
KTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbGltaW5hdGVEZWFk
Q29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJF
bGltaW5hdGVEZWFkQ29kZS5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyRWxpbWluYXRlRGVhZENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MCw3ICs0MCw3IEBAIGJvb2wgZWxpbWluYXRlRGVhZENvZGUoQ29kZSYgY29kZSkKICAgICBQ
aGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgImVsaW1pbmF0ZURlYWRDb2RlIik7CiAKICAgICBI
YXNoU2V0PFRtcD4gbGl2ZVRtcHM7Ci0gICAgSW5kZXhTZXQ8U3RhY2tTbG90PiBsaXZlU3RhY2tT
bG90czsKKyAgICBJbmRleFNldDxTdGFja1Nsb3QqPiBsaXZlU3RhY2tTbG90czsKICAgICBib29s
IGNoYW5nZWQ7CiAKICAgICBhdXRvIGlzQXJnTGl2ZSA9IFsmXSAoY29uc3QgQXJnJiBhcmcpIC0+
IGJvb2wgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhPYnZpb3Vz
U3BpbGxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckZpeE9idmlvdXNTcGlsbHMuY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckZpeE9idmlvdXNTcGlsbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01NDcsNyArNTQ3LDcgQEAgcHJpdmF0ZToKICAgICB9OwogCiAgICAgQ29kZSYgbV9jb2RlOwot
ICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIFN0YXRlPiBtX2F0SGVhZDsKKyAgICBJbmRleE1hcDxC
YXNpY0Jsb2NrKiwgU3RhdGU+IG1fYXRIZWFkOwogICAgIFN0YXRlIG1fc3RhdGU7CiAgICAgQmFz
aWNCbG9jayogbV9ibG9jayB7IG51bGxwdHIgfTsKICAgICB1bnNpZ25lZCBtX2luc3RJbmRleCB7
IDAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4UGFydGlhbFJl
Z2lzdGVyU3RhbGxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckZpeFBhcnRpYWxSZWdpc3RlclN0YWxscy5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU1LDEwICsxNTUsMTAgQEAgdm9pZCBmaXhQYXJ0aWFs
UmVnaXN0ZXJTdGFsbHMoQ29kZSYgY29kZQogCiAgICAgLy8gRm9yIGVhY2ggYmxvY2ssIHRoaXMg
cHJvdmlkZXMgdGhlIGRpc3RhbmNlIHRvIHRoZSBsYXN0IGluc3RydWN0aW9uIHNldHRpbmcgZWFj
aCByZWdpc3RlcgogICAgIC8vIG9uIGJsb2NrICplbnRyeSouCi0gICAgSW5kZXhNYXA8QmFzaWNC
bG9jaywgRlBEZWZEaXN0YW5jZT4gbGFzdERlZkRpc3RhbmNlKGNvZGUuc2l6ZSgpKTsKKyAgICBJ
bmRleE1hcDxCYXNpY0Jsb2NrKiwgRlBEZWZEaXN0YW5jZT4gbGFzdERlZkRpc3RhbmNlKGNvZGUu
c2l6ZSgpKTsKIAogICAgIC8vIEJsb2NrcyB3aXRoIGRpcnR5IGRpc3RhbmNlIGF0IGhlYWQuCi0g
ICAgSW5kZXhTZXQ8QmFzaWNCbG9jaz4gZGlydHk7CisgICAgSW5kZXhTZXQ8QmFzaWNCbG9jayo+
IGRpcnR5OwogCiAgICAgLy8gRmlyc3QsIHdlIGNvbXB1dGUgdGhlIGxvY2FsIGRpc3RhbmNlIGZv
ciBlYWNoIGJsb2NrIGFuZCBwdXNoIGl0IHRvIHRoZSBzdWNjZXNzb3JzLgogICAgIGZvciAoQmFz
aWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmNwcAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeFNwaWxsc0Fm
dGVyVGVybWluYWxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkFpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmgiCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCisjaW5jbHVkZSAiQWlyQmxvY2tJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJB
aXJDb2RlLmgiCisjaW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQWlySW5z
dElubGluZXMuaCIKKyNpbmNsdWRlICJBaXJUbXBJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBmaXhTcGlsbHNBZnRlclRl
cm1pbmFscyhDb2RlJiBjb2RlKQoreworICAgIC8vIEJlY2F1c2UgdGhlcmUgbWF5IGJlIHRlcm1p
bmFscyB0aGF0IHByb2R1Y2UgdmFsdWVzLCBJUkMgbWF5CisgICAgLy8gd2FudCB0byBzcGlsbCB0
aG9zZSB0ZXJtaW5hbHMuIEl0J2xsIGhhcHBlbiB0byBzcGlsbCBpdCBhZnRlcgorICAgIC8vIHRo
ZSB0ZXJtaW5hbC4gSWYgd2UgbGVmdCB0aGUgZ3JhcGggaW4gdGhpcyBzdGF0ZSwgaXQnZCBiZSBp
bnZhbGlkCisgICAgLy8gYmVjYXVzZSBhIHRlcm1pbmFsIG11c3QgYmUgdGhlIGxhc3QgaW5zdHJ1
Y3Rpb24gaW4gYSBibG9jay4KKyAgICAvLyBXZSBmaXggdGhhdCBoZXJlLgorCisgICAgQmxvY2tJ
bnNlcnRpb25TZXQgYmxvY2tJbnNlcnRpb25TZXQoY29kZSk7CisgICAgSW5zZXJ0aW9uU2V0IGlu
c2VydGlvblNldChjb2RlKTsKKworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7
CisgICAgICAgIHVuc2lnbmVkIHRlcm1pbmFsSW5kZXggPSBibG9jay0+c2l6ZSgpOworICAgICAg
ICBib29sIGZvdW5kVGVybWluYWwgPSBmYWxzZTsKKyAgICAgICAgd2hpbGUgKHRlcm1pbmFsSW5k
ZXgtLSkgeworICAgICAgICAgICAgaWYgKGJsb2NrLT5hdCh0ZXJtaW5hbEluZGV4KS5pc1Rlcm1p
bmFsKCkpIHsKKyAgICAgICAgICAgICAgICBmb3VuZFRlcm1pbmFsID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBBU1NFUlRf
VU5VU0VEKGZvdW5kVGVybWluYWwsIGZvdW5kVGVybWluYWwpOworCisgICAgICAgIGlmICh0ZXJt
aW5hbEluZGV4ID09IGJsb2NrLT5zaXplKCkgLSAxKQorICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgLy8gVGhlcmUgbXVzdCBiZSBpbnN0cnVjdGlvbnMgYWZ0ZXIgdGhlIHRlcm1pbmFs
IGJlY2F1c2UgaXQncyBub3QgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24uCisgICAgICAgIEFTU0VSVCh0
ZXJtaW5hbEluZGV4IDwgYmxvY2stPnNpemUoKSAtIDEpOworICAgICAgICBWZWN0b3I8SW5zdCwg
MT4gaW5zdHNUb01vdmU7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHRlcm1pbmFsSW5kZXgg
KyAxOyBpIDwgYmxvY2stPnNpemUoKTsgaSsrKQorICAgICAgICAgICAgaW5zdHNUb01vdmUuYXBw
ZW5kKGJsb2NrLT5hdChpKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluc3RzVG9Nb3ZlLnNp
emUoKSk7CisKKyAgICAgICAgZm9yIChGcmVxdWVudGVkQmxvY2smIGZyZXF1ZW50ZWRTdWNjZXNz
b3IgOiBibG9jay0+c3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNj
ZXNzb3IgPSBmcmVxdWVudGVkU3VjY2Vzc29yLmJsb2NrKCk7CisgICAgICAgICAgICAvLyBJZiBz
dWNjZXNzb3IncyBvbmx5IHByZWRlY2Vzc29yIGlzIGJsb2NrLCB3ZSBjYW4gcGxhbnQgdGhlIHNw
aWxsIGluc2lkZQorICAgICAgICAgICAgLy8gdGhlIHN1Y2Nlc3Nvci4gT3RoZXJ3aXNlLCB3ZSBt
dXN0IHNwbGl0IHRoZSBjcml0aWNhbCBlZGdlIGFuZCBjcmVhdGUKKyAgICAgICAgICAgIC8vIGEg
bmV3IGJsb2NrIGZvciB0aGUgc3BpbGwuCisgICAgICAgICAgICBpZiAoc3VjY2Vzc29yLT5udW1Q
cmVkZWNlc3NvcnMoKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2Vy
dEluc3RzKDAsIGluc3RzVG9Nb3ZlKTsKKyAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuZXhl
Y3V0ZShzdWNjZXNzb3IpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBC
YXNpY0Jsb2NrKiBuZXdCbG9jayA9IGJsb2NrSW5zZXJ0aW9uU2V0Lmluc2VydEJlZm9yZShzdWNj
ZXNzb3IsIHN1Y2Nlc3Nvci0+ZnJlcXVlbmN5KCkpOworICAgICAgICAgICAgICAgIGZvciAoY29u
c3QgSW5zdCYgaW5zdCA6IGluc3RzVG9Nb3ZlKQorICAgICAgICAgICAgICAgICAgICBuZXdCbG9j
ay0+YXBwZW5kSW5zdChpbnN0KTsKKyAgICAgICAgICAgICAgICBuZXdCbG9jay0+YXBwZW5kSW5z
dChJbnN0KEp1bXAsIGluc3RzVG9Nb3ZlLmxhc3QoKS5vcmlnaW4pKTsKKyAgICAgICAgICAgICAg
ICBuZXdCbG9jay0+c3VjY2Vzc29ycygpLmFwcGVuZChzdWNjZXNzb3IpOworICAgICAgICAgICAg
ICAgIGZyZXF1ZW50ZWRTdWNjZXNzb3IuYmxvY2soKSA9IG5ld0Jsb2NrOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgYmxvY2stPnJlc2l6ZSh0ZXJtaW5hbEluZGV4ICsgMSk7
CisgICAgfQorCisgICAgaWYgKGJsb2NrSW5zZXJ0aW9uU2V0LmV4ZWN1dGUoKSkKKyAgICAgICAg
Y29kZS5yZXNldFJlYWNoYWJpbGl0eSgpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
Mzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFs
cy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4
U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsg
bmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKKy8vIEJlY2F1c2UgdGhlcmUgbWF5IGJl
IHRlcm1pbmFscyB0aGF0IHByb2R1Y2UgdmFsdWVzLCB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yIG1h
eQorLy8gd2FudCB0byBzcGlsbCB0aG9zZSB0ZXJtaW5hbHMuIEl0J2xsIGhhcHBlbiB0byBzcGls
bCBpdCBhZnRlcgorLy8gdGhlIHRlcm1pbmFsLiBJZiB3ZSBsZWZ0IHRoZSBncmFwaCBpbiB0aGlz
IHN0YXRlLCBpdCdkIGJlIGludmFsaWQKKy8vIGJlY2F1c2UgYSB0ZXJtaW5hbCBtdXN0IGJlIHRo
ZSBsYXN0IGluc3RydWN0aW9uIGluIGEgYmxvY2suCisvLyBXZSBmaXggdGhhdCBoZXJlLgordm9p
ZCBmaXhTcGlsbHNBZnRlclRlcm1pbmFscyhDb2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCShyZXZpc2lvbiAyMTQ0Mjcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShCM19KSVQpCiAKICNpbmNsdWRl
ICJBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5oIgorI2luY2x1ZGUgIkFpckFs
bG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmgiCiAjaW5jbHVkZSAiQWlyQWxsb2NhdGVTdGFj
ay5oIgogI2luY2x1ZGUgIkFpckNvZGUuaCIKICNpbmNsdWRlICJBaXJFbGltaW5hdGVEZWFkQ29k
ZS5oIgpAQCAtNTcsNyArNTgsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsg
bmFtZXNwYWNlIEFpciB7CiAKLXZvaWQgcHJlcGFyZUZvckdlbmVyYXRpb24oQ29kZSYgY29kZSkK
K3ZvaWQgcHJlcGFyZUZvckdlbmVyYXRpb24oQ29kZSYgY29kZSwgdW5zaWduZWQgb3B0TGV2ZWwp
CiB7CiAgICAgVGltaW5nU2NvcGUgdGltaW5nU2NvcGUoIkFpcjo6cHJlcGFyZUZvckdlbmVyYXRp
b24iKTsKICAgICAKQEAgLTg5LDE4ICs5MCwyMiBAQCB2b2lkIHByZXBhcmVGb3JHZW5lcmF0aW9u
KENvZGUmIGNvZGUpCiAgICAgLy8gRm9yIGRlYnVnZ2luZywgeW91IGNhbiB1c2Ugc3BpbGxFdmVy
eXRoaW5nKCkgdG8gcHV0IGV2ZXJ5dGhpbmcgdG8gdGhlIHN0YWNrIGJldHdlZW4gZWFjaCBJbnN0
LgogICAgIGlmIChPcHRpb25zOjphaXJTcGlsbHNFdmVyeXRoaW5nKCkpCiAgICAgICAgIHNwaWxs
RXZlcnl0aGluZyhjb2RlKTsKLSAgICBlbHNlCisgICAgZWxzZSBpZiAob3B0TGV2ZWwgPj0gMiAm
JiBmYWxzZSkKICAgICAgICAgYWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcoY29kZSk7
CisgICAgZWxzZQorICAgICAgICBhbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbihjb2RlKTsK
IAogICAgIGlmIChPcHRpb25zOjpsb2dBaXJSZWdpc3RlclByZXNzdXJlKCkpIHsKICAgICAgICAg
ZGF0YUxvZygiUmVnaXN0ZXIgcHJlc3N1cmUgYWZ0ZXIgcmVnaXN0ZXIgYWxsb2NhdGlvbjpcbiIp
OwogICAgICAgICBsb2dSZWdpc3RlclByZXNzdXJlKGNvZGUpOwogICAgIH0KLQotICAgIC8vIFRo
aXMgcmVwbGFjZXMgdXNlcyBvZiBzcGlsbCBzbG90cyB3aXRoIHJlZ2lzdGVycyBvciBjb25zdGFu
dHMgaWYgcG9zc2libGUuIEl0IGRvZXMgdGhpcyBieQotICAgIC8vIG1pbmltaXppbmcgdGhlIGFt
b3VudCB0aGF0IHdlIHBlcnR1cmIgdGhlIGFscmVhZHktY2hvc2VuIHJlZ2lzdGVyIGFsbG9jYXRp
b24uIEl0IG1heSBleHRlbmQKLSAgICAvLyB0aGUgbGl2ZSByYW5nZXMgb2YgcmVnaXN0ZXJzIHRo
b3VnaC4KLSAgICBmaXhPYnZpb3VzU3BpbGxzKGNvZGUpOworICAgIAorICAgIGlmIChvcHRMZXZl
bCA+PSAyKSB7CisgICAgICAgIC8vIFRoaXMgcmVwbGFjZXMgdXNlcyBvZiBzcGlsbCBzbG90cyB3
aXRoIHJlZ2lzdGVycyBvciBjb25zdGFudHMgaWYgcG9zc2libGUuIEl0IGRvZXMgdGhpcyBieQor
ICAgICAgICAvLyBtaW5pbWl6aW5nIHRoZSBhbW91bnQgdGhhdCB3ZSBwZXJ0dXJiIHRoZSBhbHJl
YWR5LWNob3NlbiByZWdpc3RlciBhbGxvY2F0aW9uLiBJdCBtYXkgZXh0ZW5kCisgICAgICAgIC8v
IHRoZSBsaXZlIHJhbmdlcyBvZiByZWdpc3RlcnMgdGhvdWdoLgorICAgICAgICBmaXhPYnZpb3Vz
U3BpbGxzKGNvZGUpOworICAgIH0KIAogICAgIGxvd2VyQWZ0ZXJSZWdBbGxvYyhjb2RlKTsKIApA
QCAtMTY1LDcgKzE3MCw3IEBAIHZvaWQgZ2VuZXJhdGUoQ29kZSYgY29kZSwgQ0NhbGxIZWxwZXJz
JiAKICAgICAgICAgaWYgKGJsb2NrKQogICAgICAgICAgICAgY29udGV4dC5ibG9ja0xhYmVsc1ti
bG9ja10gPSBCb3g8Q0NhbGxIZWxwZXJzOjpMYWJlbD46OmNyZWF0ZSgpOwogICAgIH0KLSAgICBJ
bmRleE1hcDxCYXNpY0Jsb2NrLCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0PiBibG9ja0p1bXBzKGNv
ZGUuc2l6ZSgpKTsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgQ0NhbGxIZWxwZXJzOjpKdW1w
TGlzdD4gYmxvY2tKdW1wcyhjb2RlLnNpemUoKSk7CiAKICAgICBhdXRvIGxpbmsgPSBbJl0gKEND
YWxsSGVscGVyczo6SnVtcCBqdW1wLCBCYXNpY0Jsb2NrKiB0YXJnZXQpIHsKICAgICAgICAgaWYg
KGNvbnRleHQuYmxvY2tMYWJlbHNbdGFyZ2V0XS0+aXNTZXQoKSkgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuaAkocmV2aXNpb24gMjE0NDI3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjcsNiArMjcsOCBAQAogCiAjaWYgRU5BQkxFKEIzX0pJVCkKIAorI2luY2x1ZGUgIkIz
Q29tbW9uLmgiCisKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDQ2FsbEhlbHBlcnM7CkBAIC0z
Nyw3ICszOSw3IEBAIGNsYXNzIENvZGU7CiAKIC8vIFRoaXMgdGFrZXMgYW4gQWlyOjpDb2RlIHRo
YXQgaGFzbid0IGhhZCBhbnkgc3RhY2sgYWxsb2NhdGlvbiBhbmQgb3B0aW9uYWxseSBoYXNuJ3Qg
aGFkIGFueQogLy8gcmVnaXN0ZXIgYWxsb2NhdGlvbiBhbmQgZG9lcyBib3RoIG9mIHRob3NlIHRo
aW5ncy4KLUpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJlcGFyZUZvckdlbmVyYXRpb24oQ29kZSYp
OworSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmVwYXJlRm9yR2VuZXJhdGlvbihDb2RlJiwgdW5z
aWduZWQgb3B0TGV2ZWwgPSBkZWZhdWx0T3B0TGV2ZWwoKSk7CiAKIC8vIFRoaXMgZ2VuZXJhdGVz
IHRoZSBjb2RlIHVzaW5nIHRoZSBnaXZlbiBDQ2FsbEhlbHBlcnMgaW5zdGFuY2UuIE5vdGUgdGhh
dCB0aGlzIG1heSBjYWxsIGNhbGxiYWNrcwogLy8gaW4gdGhlIHN1cHBsaWVkIGNvZGUgYXMgaXQg
aXMgZ2VuZXJhdGluZy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2Vu
ZXJhdGlvbkNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckdlbmVyYXRpb25Db250ZXh0LmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGlvbkNvbnRleHQuaAkod29ya2luZyBjb3B5
KQpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBTaGFyZWRUYXNrPExhdGVQ
YXRoRnVuY3Rpb24+IExhdGVQYXRoOwogCiAgICAgVmVjdG9yPFJlZlB0cjxMYXRlUGF0aD4+IGxh
dGVQYXRoczsKLSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBCb3g8Q0NhbGxIZWxwZXJzOjpMYWJl
bD4+IGJsb2NrTGFiZWxzOworICAgIEluZGV4TWFwPEJhc2ljQmxvY2sqLCBCb3g8Q0NhbGxIZWxw
ZXJzOjpMYWJlbD4+IGJsb2NrTGFiZWxzOwogICAgIEJhc2ljQmxvY2sqIGN1cnJlbnRCbG9jayB7
IG51bGxwdHIgfTsKICAgICB1bnNpZ25lZCBpbmRleEluQmxvY2sgeyBVSU5UX01BWCB9OwogICAg
IENvZGUqIGNvZGUgeyBudWxscHRyIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwCShyZXZpc2lvbiAyMTQ0
MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxv
Yy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDExIEBAIHZvaWQgbG93ZXJBZnRlclJl
Z0FsbG9jKENvZGUmIGNvZGUpCiAKICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgZGF0YUxvZygi
Q29kZSBiZWZvcmUgbG93ZXJBZnRlclJlZ0FsbG9jOlxuIiwgY29kZSk7CisgICAgCisgICAgLy8g
RklYTUU6CisgICAgLy8gMSkgVGhpcyBzaG91bGQgYmFpbCBlYXJseSBpZiB0aGVyZSBhcmUgbm8g
U2h1ZmZsZXMgb3IgQ29sZENDYWxscy4gKE9PUFMhISBuZWVkIGJ1ZyB1cmwpCisgICAgLy8gMikg
V2Ugc2hvdWxkIG5vdCBpbnRyb2R1Y2UgU2h1ZmZsZXMgZm9yIG5vcm1hbCBjYWxscy4gKE9PUFMh
ISBuZWVkIGJ1ZyB1cmwpCisgICAgLy8gMykgV2Ugc2hvdWxkIGVtaXQgQ29sZENDYWxsIG9ubHkg
YXQgb3B0TGV2ZWw9PTEuIChPT1BTISEgbmVlZCBidWcgdXJsKQogCiAgICAgSGFzaE1hcDxJbnN0
KiwgUmVnaXN0ZXJTZXQ+IHVzZWRSZWdpc3RlcnM7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyTG93ZXJFbnRyeVN3aXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlckVudHJ5U3dpdGNoLmNwcAkocmV2aXNpb24g
MjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlckVudHJ5U3dp
dGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsNyArODIsNyBAQCB2b2lkIGxvd2VyRW50cnlT
d2l0Y2goQ29kZSYgY29kZSkKICAgICAvLyBOb3cgZHVwbGljYXRlIHRoZW0uCiAgICAgVmVjdG9y
PEZyZXF1ZW50ZWRCbG9jaz4gZW50cnlwb2ludHM7CiAgICAgZW50cnlwb2ludHMuYXBwZW5kKEZy
ZXF1ZW50ZWRCbG9jayhjb2RlWzBdLCBlbnRyeXBvaW50RnJlcXVlbmNpZXNbMF0pKTsKLSAgICBJ
bmRleE1hcDxCYXNpY0Jsb2NrLCBCYXNpY0Jsb2NrKj4gbWFwKGNvZGUuc2l6ZSgpKTsKKyAgICBJ
bmRleE1hcDxCYXNpY0Jsb2NrKiwgQmFzaWNCbG9jayo+IG1hcChjb2RlLnNpemUoKSk7CiAgICAg
Zm9yICh1bnNpZ25lZCBlbnRyeXBvaW50SW5kZXggPSAxOyBlbnRyeXBvaW50SW5kZXggPCBjb2Rl
LnByb2MoKS5udW1FbnRyeXBvaW50cygpOyArK2VudHJ5cG9pbnRJbmRleCkgewogICAgICAgICBt
YXAuY2xlYXIoKTsKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IHdvcmtsaXN0LnNl
ZW4oKS52YWx1ZXMoY29kZSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clJlZ0xpdmVuZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJSZWdMaXZlbmVzcy5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpclJlZ0xpdmVuZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMw
LDcgQEAKICNpbmNsdWRlICJBaXJCYXNpY0Jsb2NrLmgiCiAjaW5jbHVkZSAiQWlyQ29kZS5oIgog
I2luY2x1ZGUgIkFpckluc3QuaCIKKyNpbmNsdWRlICJBaXJMaXZlbmVzcy5oIgogI2luY2x1ZGUg
IlJlZ2lzdGVyU2V0LmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3Bh
Y2UgQWlyIHsKQEAgLTU0LDYgKzU1LDE5IEBAIHB1YmxpYzoKICAgICAgICAgewogICAgICAgICB9
CiAgICAgICAgIAorICAgICAgICAvLyBJZiB5b3UgY29tcHV0ZWQgVG1wIGxpdmVuZXNzIGZvciBz
b21lIGJhbmssIHlvdSBjYW4gdXNlIHJlZyBsaXZlbmVzcyB0byBmaWxsIGluIHRoZSBibGFua3Mu
CisgICAgICAgIC8vIE5vdGUgdGhhdCB3aGF0IGhhcHBlbnMgdG8gdGhlIHJlZ2lzdGVycyBub3Qg
YmVsb25naW5nIHRvIHRoZSBiYW5rIGlzIGFyYml0cmFyeSAtIHRoZXkgbWF5IGdldAorICAgICAg
ICAvLyBzZXQgb3Igbm90LgorICAgICAgICB0ZW1wbGF0ZTxCYW5rIGJhbms+CisgICAgICAgIExv
Y2FsQ2FsYyhUbXBMaXZlbmVzczxiYW5rPiYgbGl2ZW5lc3MsIEJhc2ljQmxvY2sqIGJsb2NrKQor
ICAgICAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgICAgICB7CisgICAgICAgICAgICBmb3Ig
KFRtcCB0bXAgOiBsaXZlbmVzcy5saXZlQXRUYWlsKGJsb2NrKSkgeworICAgICAgICAgICAgICAg
IGlmICh0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgbV93b3Jrc2V0LnNldCh0bXAu
cmVnKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAogICAgICAgICBjb25z
dCBSZWdpc3RlclNldCYgbGl2ZSgpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVy
biBtX3dvcmtzZXQ7CkBAIC04NCw4ICs5OCw4IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiBwcml2
YXRlOgotICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIFJlZ2lzdGVyU2V0PiBtX2xpdmVBdEhlYWQ7
Ci0gICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgUmVnaXN0ZXJTZXQ+IG1fbGl2ZUF0VGFpbDsKKyAg
ICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgUmVnaXN0ZXJTZXQ+IG1fbGl2ZUF0SGVhZDsKKyAgICBJ
bmRleE1hcDxCYXNpY0Jsb2NrKiwgUmVnaXN0ZXJTZXQ+IG1fbGl2ZUF0VGFpbDsKIH07CiAKIH0g
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAJKHJldmlzaW9uIDIxNDQy
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQWlyQXJnSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJGaXhTcGlsbHNBZnRl
clRlcm1pbmFscy5oIgogI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgogI2luY2x1ZGUgIkFp
ckluc3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQWlyTGl2ZW5lc3MuaCIKQEAgLTQ2LDcgKzQ3LDcg
QEAgdm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYgY29kZSkKICAgICBwYWRJbnRlcmZlcmVuY2Uo
Y29kZSk7CiAKICAgICAvLyBXZSB3YW50IHRvIGtub3cgdGhlIHNldCBvZiByZWdpc3RlcnMgdXNl
ZCBhdCBldmVyeSBwb2ludCBpbiBldmVyeSBiYXNpYyBibG9jay4KLSAgICBJbmRleE1hcDxCYXNp
Y0Jsb2NrLCBWZWN0b3I8UmVnaXN0ZXJTZXQ+PiB1c2VkUmVnaXN0ZXJzKGNvZGUuc2l6ZSgpKTsK
KyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgVmVjdG9yPFJlZ2lzdGVyU2V0Pj4gdXNlZFJlZ2lz
dGVycyhjb2RlLnNpemUoKSk7CiAgICAgR1BMaXZlbmVzcyBncExpdmVuZXNzKGNvZGUpOwogICAg
IEZQTGl2ZW5lc3MgZnBMaXZlbmVzcyhjb2RlKTsKICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2Nr
IDogY29kZSkgewpAQCAtMTczLDEwICsxNzQsMTMgQEAgdm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29k
ZSYgY29kZSkKICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2hvc2VuUmVnKTsK
IAogICAgICAgICAgICAgICAgICAgICB0bXAgPSBUbXAoY2hvc2VuUmVnKTsKKyAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChyb2xlID09IEFyZzo6U2NyYXRjaCkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAgICAgICAgICBP
cGNvZGUgbW92ZSA9IGJhbmsgPT0gR1AgPyBNb3ZlIDogTW92ZURvdWJsZTsKIAotICAgICAgICAg
ICAgICAgICAgICBpZiAoQXJnOjppc0FueVVzZShyb2xlKSAmJiByb2xlICE9IEFyZzo6U2NyYXRj
aCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlVc2Uocm9sZSkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KGluc3RJbmRleCwgbW92ZSwgaW5z
dC5vcmlnaW4sIGFyZywgdG1wKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlE
ZWYocm9sZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KGlu
c3RJbmRleCArIDEsIG1vdmUsIGluc3Qub3JpZ2luLCB0bXAsIGFyZyk7CkBAIC0xODQsNiArMTg4
LDggQEAgdm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYgY29kZSkKICAgICAgICAgfQogICAgICAg
ICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CiAgICAgfQorICAgIAorICAgIGZpeFNwaWxs
c0FmdGVyVGVybWluYWxzKGNvZGUpOwogfQogCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6
QWlyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuY3BwCShyZXZpc2lv
biAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjgsOCArMjgsMTUgQEAKIAogI2lmIEVOQUJMRShCM19KSVQpCiAKKyNpbmNs
dWRlICJBaXJUbXBJbmxpbmVzLmgiCisKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBu
YW1lc3BhY2UgQWlyIHsKIAordGVtcGxhdGU8PiBjb25zdCBjaGFyKiBjb25zdCBUbXA6OkluZGV4
ZWQ8R1A+OjpkdW1wUHJlZml4ID0gIiV0bXAiOwordGVtcGxhdGU8PiBjb25zdCBjaGFyKiBjb25z
dCBUbXA6OkluZGV4ZWQ8RlA+OjpkdW1wUHJlZml4ID0gIiVmdG1wIjsKK3RlbXBsYXRlPD4gY29u
c3QgY2hhciogY29uc3QgVG1wOjpBYnNvbHV0ZWx5SW5kZXhlZDxHUD46OmR1bXBQcmVmaXggPSAi
JWFicyI7Cit0ZW1wbGF0ZTw+IGNvbnN0IGNoYXIqIGNvbnN0IFRtcDo6QWJzb2x1dGVseUluZGV4
ZWQ8RlA+OjpkdW1wUHJlZml4ID0gIiVmYWJzIjsKKwogdm9pZCBUbXA6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKIHsKICAgICBpZiAoISp0aGlzKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyVG1wLmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyVG1wLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzQsNiArNzQsMTQgQEAgcHVi
bGljOgogICAgICAgICByZXN1bHQubV92YWx1ZSA9IGVuY29kZUZQVG1wKGluZGV4KTsKICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CisgICAgCisgICAgc3RhdGljIFRtcCB0bXBGb3JJbmRl
eChCYW5rIGJhbmssIHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgaWYgKGJhbmsgPT0g
R1ApCisgICAgICAgICAgICByZXR1cm4gZ3BUbXBGb3JJbmRleChpbmRleCk7CisgICAgICAgIEFT
U0VSVChiYW5rID09IEZQKTsKKyAgICAgICAgcmV0dXJuIGZwVG1wRm9ySW5kZXgoaW5kZXgpOwor
ICAgIH0KIAogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1f
dmFsdWU7IH0KICAgICAKQEAgLTE1NCw3ICsxNjIsMTYgQEAgcHVibGljOgogICAgICAgICAgICAg
cmV0dXJuIGdwVG1wSW5kZXgoKTsKICAgICAgICAgcmV0dXJuIGZwVG1wSW5kZXgoKTsKICAgICB9
Ci0KKyAgICAKKyAgICB0ZW1wbGF0ZTxCYW5rIGJhbms+IGNsYXNzIEluZGV4ZWQ7CisgICAgdGVt
cGxhdGU8QmFuayBiYW5rPiBjbGFzcyBBYnNvbHV0ZWx5SW5kZXhlZDsKKyAgICAKKyAgICB0ZW1w
bGF0ZTxCYW5rIGJhbms+CisgICAgSW5kZXhlZDxiYW5rPiBpbmRleGVkKCkgY29uc3Q7CisgICAg
CisgICAgdGVtcGxhdGU8QmFuayBiYW5rPgorICAgIEFic29sdXRlbHlJbmRleGVkPGJhbms+IGFi
c29sdXRlbHlJbmRleGVkKCkgY29uc3Q7CisgICAgCiAgICAgYm9vbCBpc0FsaXZlKCkgY29uc3QK
ICAgICB7CiAgICAgICAgIHJldHVybiAhISp0aGlzOwpAQCAtMTk1LDYgKzIxMiw4IEBAIHB1Ymxp
YzoKICAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KGluZGV4KTsKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CisgICAgCisgICAgc3RhdGljIFRtcCB0bXBGb3JB
YnNvbHV0ZUluZGV4KEJhbmssIHVuc2lnbmVkKTsKIAogcHJpdmF0ZToKICAgICBzdGF0aWMgaW50
IGVuY29kZUdQKHVuc2lnbmVkIGluZGV4KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJUbXBJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJUbXBJbmxpbmVzLmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC05Miw2
ICs5Miw1OCBAQCBzdHJ1Y3QgQWJzb2x1dGVUbXBNYXBwZXI8RlA+IHsKICAgICB9CiB9OwogCit0
ZW1wbGF0ZTxCYW5rIHRoZUJhbms+CitjbGFzcyBUbXA6OkluZGV4ZWQgOiBwdWJsaWMgVG1wIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZHVtcFByZWZpeDsKKyAgICAK
KyAgICBJbmRleGVkKFRtcCB0bXApCisgICAgICAgIDogVG1wKHRtcCkKKyAgICB7CisgICAgfQor
ICAgIAorICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0
bXBJbmRleCh0aGVCYW5rKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTxCYW5rIHRoZUJhbms+Citj
bGFzcyBUbXA6OkFic29sdXRlbHlJbmRleGVkIDogcHVibGljIFRtcCB7CitwdWJsaWM6CisgICAg
c3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGR1bXBQcmVmaXg7CisKKyAgICBBYnNvbHV0ZWx5SW5k
ZXhlZChUbXAgdG1wKQorICAgICAgICA6IFRtcCh0bXApCisgICAgeworICAgIH0KKyAgICAKKyAg
ICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gQWJzb2x1dGVU
bXBNYXBwZXI8dGhlQmFuaz46OmFic29sdXRlSW5kZXgoKnRoaXMpOworICAgIH0KK307CisKK3Rl
bXBsYXRlPEJhbmsgdGhlQmFuaz4KK1RtcDo6SW5kZXhlZDx0aGVCYW5rPiBUbXA6OmluZGV4ZWQo
KSBjb25zdAoreworICAgIHJldHVybiBJbmRleGVkPHRoZUJhbms+KCp0aGlzKTsKK30KKwordGVt
cGxhdGU8QmFuayB0aGVCYW5rPgorVG1wOjpBYnNvbHV0ZWx5SW5kZXhlZDx0aGVCYW5rPiBUbXA6
OmFic29sdXRlbHlJbmRleGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gQWJzb2x1dGVseUluZGV4
ZWQ8dGhlQmFuaz4oKnRoaXMpOworfQorCitUbXAgVG1wOjp0bXBGb3JBYnNvbHV0ZUluZGV4KEJh
bmsgYmFuaywgdW5zaWduZWQgaW5kZXgpCit7CisgICAgaWYgKGJhbmsgPT0gR1ApCisgICAgICAg
IHJldHVybiBBYnNvbHV0ZVRtcE1hcHBlcjxHUD46OnRtcEZyb21BYnNvbHV0ZUluZGV4KGluZGV4
KTsKKyAgICBBU1NFUlQoYmFuayA9PSBGUCk7CisgICAgcmV0dXJuIEFic29sdXRlVG1wTWFwcGVy
PEZQPjo6dG1wRnJvbUFic29sdXRlSW5kZXgoaW5kZXgpOworfQorCiB9IH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMzo6QWlyCiAKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDIsOCArMTAyLDE2IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgLy8gQWxzbyBhbGxvdyBh
ZGQvcmVtb3ZlL2NvbnRhaW5zIHRlcm1pbm9sb2d5LCB3aGljaCBtZWFucyB0aGUgc2FtZSB0aGlu
ZyBhcyBzZXQvY2xlYXIvZ2V0LgotICAgIHZvaWQgYWRkKFJlZyByZWcpIHsgc2V0KHJlZyk7IH0K
LSAgICB2b2lkIHJlbW92ZShSZWcgcmVnKSB7IGNsZWFyKHJlZyk7IH0KKyAgICBib29sIGFkZChS
ZWcgcmVnKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCEhcmVnKTsKKyAgICAgICAgcmV0dXJuICFt
X2JpdHMudGVzdEFuZFNldChyZWcuaW5kZXgoKSk7CisgICAgfQorICAgIGJvb2wgcmVtb3ZlKFJl
ZyByZWcpCisgICAgeworICAgICAgICBBU1NFUlQoISFyZWcpOworICAgICAgICByZXR1cm4gbV9i
aXRzLnRlc3RBbmRDbGVhcihyZWcuaW5kZXgoKSk7CisgICAgfQogICAgIGJvb2wgY29udGFpbnMo
UmVnIHJlZykgY29uc3QgeyByZXR1cm4gZ2V0KHJlZyk7IH0KICAgICAKICAgICB2b2lkIG1lcmdl
KGNvbnN0IFJlZ2lzdGVyU2V0JiBvdGhlcikgeyBtX2JpdHMubWVyZ2Uob3RoZXIubV9iaXRzKTsg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24g
MjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMjUsNiArMjI1LDcgQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25T
dHJpbmc7CiAgICAgdihib29sLCB1c2VGVExKSVQsIHRydWUsIE5vcm1hbCwgImFsbG93cyB0aGUg
RlRMIEpJVCB0byBiZSB1c2VkIGlmIHRydWUiKSBcCiAgICAgdihib29sLCB1c2VGVExUQkFBLCB0
cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIHZhbGlkYXRlRlRMT1NSRXhpdExp
dmVuZXNzLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdih1bnNpZ25lZCwgZGVmYXVs
dEIzT3B0TGV2ZWwsIDIsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgYjNBbHdheXNG
YWlsc0JlZm9yZUNvbXBpbGUsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2ws
IGIzQWx3YXlzRmFpbHNCZWZvcmVMaW5rLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAg
dihib29sLCBmdGxDcmFzaGVzLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSAvKiBmb29sLXByb29m
IHdheSBvZiBjaGVja2luZyB0aGF0IHlvdSBlbmRlZCB1cCBpbiB0aGUgRlRMLiA7LSkgKi9cCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgJ
KHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lS
R2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQogCisjaW5jbHVkZSAiQjNDb21tb24uaCIKICNpbmNsdWRlICJCM0NvbXBpbGF0
aW9uLmgiCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCiAjaW5jbHVkZSAiVk0uaCIKQEAgLTQ3
LDcgKzQ4LDcgQEAgc3RydWN0IENvbXBpbGF0aW9uQ29udGV4dCB7CiAgICAgQ0NhbGxIZWxwZXJz
OjpDYWxsIGpzRW50cnlwb2ludFRvV2FzbUVudHJ5cG9pbnRDYWxsOwogfTsKIAotRXhwZWN0ZWQ8
c3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENv
bXBpbGUoVk0mLCBDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBj
b25zdCBTaWduYXR1cmUqLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBN
b2R1bGVJbmZvcm1hdGlvbiYsIGNvbnN0IFZlY3RvcjxTaWduYXR1cmVJbmRleD4mLCB1bnNpZ25l
ZCBvcHRMZXZlbCA9IDEpOworRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1
bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoVk0mLCBDb21waWxhdGlvbkNvbnRleHQm
LCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBTaWduYXR1cmUqLCBWZWN0b3I8VW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIGNvbnN0IFZlY3Rv
cjxTaWduYXR1cmVJbmRleD4mLCB1bnNpZ25lZCBvcHRMZXZlbCA9IEIzOjpkZWZhdWx0T3B0TGV2
ZWwoKSk7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKSW5kZXg6IFNvdXJjZS9XVEYv
V1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9X
VEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNl
L1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjMs
NiArMjMsOCBAQAogLyogQmVnaW4gUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KIAkJMEYwRDg1QjQx
NzIzNENDMTAwMzM4MjEwIC8qIE5vTG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYwRDg1QjMxNzIzNENCMTAwMzM4MjEwIC8qIE5vTG9jay5oICov
OyB9OwogCQkwRjBGQ0RERTFERDE2N0Y5MDBDQ0FCNTMgLyogTG9ja0FsZ29yaXRobS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwRkNEREQxREQxNjdG
OTAwQ0NBQjUzIC8qIExvY2tBbGdvcml0aG0uaCAqLzsgfTsKKwkJMEYyQUM1NjExRTg5RjcwQzAw
MDFFRTNGIC8qIFJhbmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjJBQzU2MDFFODlGNzBDMDAwMUVFM0YgLyogUmFuZ2UuaCAqLzsgfTsKKwkJMEYy
QUM1NjMxRThBMDE0OTAwMDFFRTNGIC8qIEluZGV4S2V5VHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQUM1NjIxRThBMDE0OTAwMDFFRTNGIC8q
IEluZGV4S2V5VHlwZS5oICovOyB9OwogCQkwRjJCNjZBNjE3QjZCNEZCMDBBN0FFM0YgLyogRGVm
ZXJyYWJsZVJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMkI2NkE0MTdCNkI0RjcwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRl
ZC5oICovOyB9OwogCQkwRjJCNjZBNzE3QjZCNEZEMDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBNTE3QjZC
NEY3MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggKi87IH07CiAJCTBGMzBCQTkwMUU3ODcwOEUwMDJD
QTg0NyAvKiBHbG9iYWxWZXJzaW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMzBCQThBMUU3ODcwOEUwMDJDQTg0NyAvKiBHbG9iYWxWZXJzaW9u
LmNwcCAqLzsgfTsKQEAgLTQwOCw2ICs0MTAsOCBAQAogLyogQmVnaW4gUEJYRmlsZVJlZmVyZW5j
ZSBzZWN0aW9uICovCiAJCTBGMEQ4NUIzMTcyMzRDQjEwMDMzODIxMCAvKiBOb0xvY2suaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTm9Mb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMEZD
REREMUREMTY3RjkwMENDQUI1MyAvKiBMb2NrQWxnb3JpdGhtLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IExvY2tBbGdvcml0aG0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEYyQUM1NjAxRTg5RjcwQzAwMDFFRTNGIC8qIFJhbmdlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFJhbmdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGMkFDNTYyMUU4QTAxNDkwMDAxRUUzRiAvKiBJbmRleEtleVR5cGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSW5kZXhLZXlUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGMkI2NkE0MTdCNkI0RjcwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRl
ZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBEZWZlcnJhYmxlUmVmQ291bnRlZC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjJCNjZBNTE3QjZCNEY3MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEZsaXBCeXRlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjMwMEI3RDE4QUI0OEI0MDBBNkQ3MkUgLyogSGFzaE1ldGhvZC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBIYXNoTWV0aG9kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDE4LDEwICsx
MDIyLDExIEBACiAJCQkJQThBNDcyQkExNTFBODI1QTAwNDEyM0ZGIC8qIEhhc2hUcmFpdHMuaCAq
LywKIAkJCQlBOEE0NzJCQjE1MUE4MjVBMDA0MTIzRkYgLyogSGV4TnVtYmVyLmggKi8sCiAJCQkJ
RkU4OTI1QUYxRDAwREFFQzAwNDY5MDdFIC8qIEluZGVudGVyLmggKi8sCi0JCQkJOUM2N0M1NDI1
ODkzNDhFMjg1QjQ5Njk5IC8qIEluZGV4ZWRDb250YWluZXJJdGVyYXRvci5oICovLAorCQkJCTBG
MkFDNTYyMUU4QTAxNDkwMDAxRUUzRiAvKiBJbmRleEtleVR5cGUuaCAqLywKIAkJCQk1QjQzMzgz
QTVEMEI0NjNDOTQzM0Q5MzMgLyogSW5kZXhNYXAuaCAqLywKIAkJCQkzMTM3RTFEN0RCRDg0QUMz
OEZBRTREMzQgLyogSW5kZXhTZXQuaCAqLywKIAkJCQkyNjg0RDQzNTFDMDAwRDQwMDA4MUQ2NjMg
LyogSW5kZXhTcGFyc2VTZXQuaCAqLywKKwkJCQk5QzY3QzU0MjU4OTM0OEUyODVCNDk2OTkgLyog
SW5kZXhlZENvbnRhaW5lckl0ZXJhdG9yLmggKi8sCiAJCQkJQThBNDcyQkMxNTFBODI1QTAwNDEy
M0ZGIC8qIElubGluZUFTTS5oICovLAogCQkJCUE3MERBMDgyMTc5OUYwNEQwMDUyOUE5QiAvKiBJ
bnNlcnRpb24uaCAqLywKIAkJCQk3Q0REN0ZGNzE4NkQyOTFFMDA3NDMzQ0QgLyogSXRlcmF0b3JB
ZGFwdG9ycy5oICovLApAQCAtMTEwMCw2ICsxMTA1LDcgQEAKIAkJCQlBOEE0NzJGQjE1MUE4MjVC
MDA0MTIzRkYgLyogUmFuZG9tTnVtYmVyLmNwcCAqLywKIAkJCQlBOEE0NzJGQzE1MUE4MjVCMDA0
MTIzRkYgLyogUmFuZG9tTnVtYmVyLmggKi8sCiAJCQkJQThBNDcyRkQxNTFBODI1QjAwNDEyM0ZG
IC8qIFJhbmRvbU51bWJlclNlZWQuaCAqLywKKwkJCQkwRjJBQzU2MDFFODlGNzBDMDAwMUVFM0Yg
LyogUmFuZ2UuaCAqLywKIAkJCQkwRjcyNUNBQjFDNTA0NjE2MDBBRDk0M0EgLyogUmFuZ2VTZXQu
aCAqLywKIAkJCQkwRjg3MTA1OTE2NjQzRjE5MDA5MEIwQUQgLyogUmF3UG9pbnRlci5oICovLAog
CQkJCTBGREU4N0Y2MURGRDA3Q0MwMDY0QzM5MCAvKiBSZWN1cnNpdmVMb2NrQWRhcHRlci5oICov
LApAQCAtMTQ4NSw2ICsxNDkxLDcgQEAKIAkJCQlDOTE2Qjk3NUYwMkY0RjdFOEI0QUIxMkQgLyog
SW5kZXhNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUM4QjBFMUExRTAxQTQ4NkVCOTVFMEQxMSAv
KiBJbmRleFNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjY4NEQ0MzYxQzAwMEQ0MDAwODFENjYz
IC8qIEluZGV4U3BhcnNlU2V0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJBQzU2MzFFOEEwMTQ5
MDAwMUVFM0YgLyogSW5kZXhLZXlUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNEQzE1
MUE4MjVCMDA0MTIzRkYgLyogSW5saW5lQVNNLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzBEQTA4
NDE3OTlGMDREMDA1MjlBOUIgLyogSW5zZXJ0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkyNjE0
N0IwQTE1RERDQ0RDMDBEREI5MDcgLyogSW50ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5oIGluIEhl
YWRlcnMgKi8sCkBAIC0xNTg2LDYgKzE1OTMsNyBAQAogCQkJCTQzMEI0Nzg5MUFBQUFDMUEwMDEy
MjNEQSAvKiBTdHJpbmdDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDNFMTUxQTgy
NUIwMDQxMjNGRiAvKiBTdHJpbmdDb25jYXRlbmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0NE
NEMyNzAxRTJDODJCOTAwOTI5NDcwIC8qIFN0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEYyQUM1NjExRTg5RjcwQzAwMDFFRTNGIC8qIFJhbmdlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBOEE0NzQyQzE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nRXh0cmFzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQzRjE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nSGFz
aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0ODc0NTQxN0EwQkRBRTAwRkEwNENCIC8qIFN0cmlu
Z0hhc2hEdW1wQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9D
TWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4
dAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTEwMCw2ICsxMDAsNyBAQCBzZXQoV1RGX0hFQURFUlMKICAgICBSQU1T
aXplLmgKICAgICBSYW5kb21OdW1iZXIuaAogICAgIFJhbmRvbU51bWJlclNlZWQuaAorICAgIFJh
bmdlLmgKICAgICBSYW5nZVNldC5oCiAgICAgUmF3UG9pbnRlci5oCiAgICAgUmVjdXJzaXZlTG9j
a0FkYXB0ZXIuaApJbmRleDogU291cmNlL1dURi93dGYvRGVxdWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9EZXF1ZS5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvV1RGL3d0
Zi9EZXF1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNywgMjAwOCwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKQEAgLTg5LDYgKzg5LDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIHJl
bW92ZUxhc3QoKTsKICAgICB2b2lkIHJlbW92ZShpdGVyYXRvciYpOwogICAgIHZvaWQgcmVtb3Zl
KGNvbnN0X2l0ZXJhdG9yJik7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4gdm9p
ZCByZW1vdmVBbGxNYXRjaGluZyhjb25zdCBGdW5jJik7CisgICAgCisgICAgLy8gVGhpcyBpcyBh
IHByaW9yaXR5IGVucXVldWUuIFRoZSBjYWxsYmFjayBpcyBnaXZlbiBhIHZhbHVlLCBhbmQgaWYg
aXQgcmV0dXJucyB0cnVlLCB0aGVuIHRoaXMKKyAgICAvLyB3aWxsIHB1dCB0aGUgYXBwZW5kZWQg
dmFsdWUgYmVmb3JlIHRoYXQgdmFsdWUuIEl0IHdpbGwga2VlcCBidWJibGluZyB1bnRpbCB0aGUg
Y2FsbGJhY2sgcmV0dXJucworICAgIC8vIGZhbHNlIG9yIHRoZSB2YWx1ZSBlbmRzIHVwIGF0IHRo
ZSBoZWFkIG9mIHRoZSBxdWV1ZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCB0eXBlbmFtZSBG
dW5jPgorICAgIHZvaWQgYXBwZW5kQW5kQnViYmxlKFUmJiwgY29uc3QgRnVuYyYpOwogCiAgICAg
dm9pZCBjbGVhcigpOwogCkBAIC01MjQsNiArNTMyLDM2IEBAIGlubGluZSB2b2lkIERlcXVlPFQs
IGlubGluZUNhcGFjaXR5Pjo6cmUKICAgICBjaGVja1ZhbGlkaXR5KCk7CiB9CiAKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KK3RlbXBsYXRlPHR5cGVuYW1lIEZ1
bmM+CitpbmxpbmUgdm9pZCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OnJlbW92ZUFsbE1hdGNo
aW5nKGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgc2l6ZV90IGNvdW50ID0gc2l6ZSgpOworICAg
IHdoaWxlIChjb3VudC0tKSB7CisgICAgICAgIFQgdmFsdWUgPSB0YWtlRmlyc3QoKTsKKyAgICAg
ICAgaWYgKCFmdW5jKHZhbHVlKSkKKyAgICAgICAgICAgIGFwcGVuZChXVEZNb3ZlKHZhbHVlKSk7
CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBVLCB0eXBlbmFtZSBGdW5jPgoraW5saW5lIHZvaWQgRGVxdWU8
VCwgaW5saW5lQ2FwYWNpdHk+OjphcHBlbmRBbmRCdWJibGUoVSYmIHZhbHVlLCBjb25zdCBGdW5j
JiBmdW5jKQoreworICAgIGFwcGVuZChXVEZNb3ZlKHZhbHVlKSk7CisgICAgaXRlcmF0b3IgYmVn
aW4gPSB0aGlzLT5iZWdpbigpOworICAgIGl0ZXJhdG9yIGl0ZXIgPSBlbmQoKTsKKyAgICAtLWl0
ZXI7CisgICAgd2hpbGUgKGl0ZXIgIT0gYmVnaW4pIHsKKyAgICAgICAgaXRlcmF0b3IgcHJldiA9
IGl0ZXI7CisgICAgICAgIC0tcHJldjsKKyAgICAgICAgaWYgKCFmdW5jKCpwcmV2KSkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgc3RkOjpzd2FwKCpwcmV2LCAqaXRlcik7CisgICAgICAg
IGl0ZXIgPSBwcmV2OworICAgIH0KK30KKwogI2lmZGVmIE5ERUJVRwogdGVtcGxhdGU8dHlwZW5h
bWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBpbmxpbmUgdm9pZCBEZXF1ZUl0ZXJhdG9yQmFz
ZTxULCBpbmxpbmVDYXBhY2l0eT46OmNoZWNrVmFsaWRpdHkoKSBjb25zdCB7IH0KIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4gaW5saW5lIHZvaWQgRGVxdWVJdGVy
YXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+OjpjaGVja1ZhbGlkaXR5KGNvbnN0IERlcXVlSXRl
cmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5PiYpIGNvbnN0IHsgfQpJbmRleDogU291cmNlL1dU
Ri93dGYvSW5kZXhLZXlUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSW5kZXhL
ZXlUeXBlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvSW5kZXhLZXlUeXBlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIFdURiB7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgSW5kZXhLZXlUeXBlIHsKKyAgICBzdGF0aWMg
c2l6ZV90IGluZGV4KGNvbnN0IFQmIGtleSkgeyByZXR1cm4ga2V5LmluZGV4KCk7IH0KK307CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgSW5kZXhLZXlUeXBlPFQqPiB7CisgICAgc3Rh
dGljIHNpemVfdCBpbmRleChUKiBrZXkpIHsgcmV0dXJuIGtleS0+aW5kZXgoKTsgfQorfTsKKwor
fSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0luZGV4TWFwLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSW5kZXhNYXAuaAkocmV2aXNpb24gMjE0NDI3KQor
KysgU291cmNlL1dURi93dGYvSW5kZXhNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUs
NyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgPHd0Zi9JbmRleEtleVR5cGUuaD4KICNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtNzAsMTggKzcxLDI0
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fdmVjdG9yW2luZGV4XTsKICAgICB9CiAgICAg
Ci0gICAgVmFsdWUmIG9wZXJhdG9yW10oS2V5KiBrZXkpCisgICAgVmFsdWUmIG9wZXJhdG9yW10o
Y29uc3QgS2V5JiBrZXkpCiAgICAgewotICAgICAgICByZXR1cm4gbV92ZWN0b3Jba2V5LT5pbmRl
eCgpXTsKKyAgICAgICAgcmV0dXJuIG1fdmVjdG9yW0luZGV4S2V5VHlwZTxLZXk+OjppbmRleChr
ZXkpXTsKICAgICB9CiAgICAgCi0gICAgY29uc3QgVmFsdWUmIG9wZXJhdG9yW10oS2V5KiBrZXkp
IGNvbnN0CisgICAgY29uc3QgVmFsdWUmIG9wZXJhdG9yW10oY29uc3QgS2V5JiBrZXkpIGNvbnN0
CiAgICAgewotICAgICAgICByZXR1cm4gbV92ZWN0b3Jba2V5LT5pbmRleCgpXTsKKyAgICAgICAg
cmV0dXJuIG1fdmVjdG9yW0luZGV4S2V5VHlwZTxLZXk+OjppbmRleChrZXkpXTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBhcHBlbmQoY29uc3QgS2V5JiBrZXksIFZhbHVlIHZhbHVlKQorICAgIHsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQoSW5kZXhLZXlUeXBlPEtleT46OmluZGV4KGtleSkgPT0g
bV92ZWN0b3Iuc2l6ZSgpKTsKKyAgICAgICAgbV92ZWN0b3IuYXBwZW5kKHZhbHVlKTsKICAgICB9
CiAKIHByaXZhdGU6Ci0gICAgVmVjdG9yPFZhbHVlPiBtX3ZlY3RvcjsKKyAgICBWZWN0b3I8VmFs
dWUsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX3ZlY3RvcjsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdURgpJbmRleDogU291cmNlL1dURi93dGYvSW5kZXhTZXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9JbmRleFNldC5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvV1RG
L3d0Zi9JbmRleFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5j
bHVkZSA8d3RmL0JpdFZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKyNp
bmNsdWRlIDx3dGYvSW5kZXhLZXlUeXBlLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCkBAIC00Miwz
MCArNDMsMzAgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBib29sIGFkZChUKiB2YWx1
ZSkKKyAgICBib29sIGFkZChjb25zdCBUJiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiAh
bV9zZXQuc2V0KHZhbHVlLT5pbmRleCgpKTsKKyAgICAgICAgcmV0dXJuICFtX3NldC5zZXQoSW5k
ZXhLZXlUeXBlPFQ+OjppbmRleCh2YWx1ZSkpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEl0ZXJhYmxlPgogICAgIGJvb2wgYWRkQWxsKGNvbnN0IEl0ZXJhYmxlJiBpdGVyYWJsZSkK
ICAgICB7CiAgICAgICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgIGZvciAoVCogdmFs
dWUgOiBpdGVyYWJsZSkKKyAgICAgICAgZm9yIChjb25zdCBUJiB2YWx1ZSA6IGl0ZXJhYmxlKQog
ICAgICAgICAgICAgcmVzdWx0IHw9IGFkZCh2YWx1ZSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgfQogCi0gICAgYm9vbCByZW1vdmUoVCogdmFsdWUpCisgICAgYm9vbCByZW1vdmUoY29u
c3QgVCYgdmFsdWUpCiAgICAgewotICAgICAgICByZXR1cm4gbV9zZXQuY2xlYXIodmFsdWUtPmlu
ZGV4KCkpOworICAgICAgICByZXR1cm4gbV9zZXQuY2xlYXIoSW5kZXhLZXlUeXBlPFQ+OjppbmRl
eCh2YWx1ZSkpOwogICAgIH0KIAotICAgIGJvb2wgY29udGFpbnMoVCogdmFsdWUpIGNvbnN0Cisg
ICAgYm9vbCBjb250YWlucyhjb25zdCBUJiB2YWx1ZSkgY29uc3QKICAgICB7CiAgICAgICAgIGlm
ICghdmFsdWUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBtX3Nl
dC5nZXQodmFsdWUtPmluZGV4KCkpOworICAgICAgICByZXR1cm4gbV9zZXQuZ2V0KEluZGV4S2V5
VHlwZTxUPjo6aW5kZXgodmFsdWUpKTsKICAgICB9CiAKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0
CkBAIC0xMDAsNyArMTAxLDcgQEAgcHVibGljOgogICAgICAgICAgICAgewogICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICBUKiBvcGVyYXRvciooKQorICAgICAgICAgICAgVCBvcGVyYXRvcioo
KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBtX2NvbGxlY3Rpb24tPmF0
KCptX2l0ZXIpOwogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL1dURi93dGYvUmFuZ2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9SYW5nZS5oCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9XVEYvd3RmL1JhbmdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBO
b3RlIHRoYXQgdGhlICdiZWdpbicgaXMgaW5jbHVzaXZlLCB3aGlsZSB0aGUgJ2VuZCcgaXMgZXhj
bHVzaXZlLiBUaGVzZSB0d28gcmFuZ2VzIGFyZSBub24tCisvLyBvdmVybGFwcGluZzoKKy8vCisv
LyAgICAgcmFuZ2VBID0gMC4uLjgKKy8vICAgICByYW5nZUIgPSA4Li4uMTYKKwordGVtcGxhdGU8
dHlwZW5hbWUgUGFzc2VkVHlwZT4KK2NsYXNzIFJhbmdlIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVm
IFBhc3NlZFR5cGUgVHlwZTsKKyAgICAKKyAgICBSYW5nZSgpCisgICAgICAgIDogbV9iZWdpbigw
KQorICAgICAgICAsIG1fZW5kKDApCisgICAgeworICAgIH0KKworICAgIGV4cGxpY2l0IFJhbmdl
KFR5cGUgdmFsdWUpCisgICAgICAgIDogbV9iZWdpbih2YWx1ZSkKKyAgICAgICAgLCBtX2VuZCh2
YWx1ZSArIDEpCisgICAgeworICAgICAgICBBU1NFUlQobV9lbmQgPj0gbV9iZWdpbik7CisgICAg
fQorCisgICAgUmFuZ2UoVHlwZSBiZWdpbiwgVHlwZSBlbmQpCisgICAgICAgIDogbV9iZWdpbihi
ZWdpbikKKyAgICAgICAgLCBtX2VuZChlbmQpCisgICAgeworICAgICAgICBBU1NFUlQobV9lbmQg
Pj0gbV9iZWdpbik7CisgICAgICAgIGlmIChtX2JlZ2luID09IG1fZW5kKSB7CisgICAgICAgICAg
ICAvLyBDYW5vbmljYWxpemUgZW1wdHkgcmFuZ2VzLgorICAgICAgICAgICAgbV9iZWdpbiA9IDA7
CisgICAgICAgICAgICBtX2VuZCA9IDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMg
UmFuZ2UgdG9wKCkKKyAgICB7CisgICAgICAgIHJldHVybiBSYW5nZShzdGQ6Om51bWVyaWNfbGlt
aXRzPFR5cGU+OjptaW4oKSwgc3RkOjpudW1lcmljX2xpbWl0czxUeXBlPjo6bWF4KCkpOworICAg
IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSYW5nZSYgb3RoZXIpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9iZWdpbiA9PSBvdGhlci5tX2JlZ2luCisgICAgICAgICAgICAm
JiBtX2VuZCA9PSBvdGhlci5tX2VuZDsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29u
c3QgUmFuZ2UmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0g
b3RoZXIpOworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3Qg
eyByZXR1cm4gbV9iZWdpbiAhPSBtX2VuZDsgfQorCisgICAgUmFuZ2Ugb3BlcmF0b3J8KGNvbnN0
IFJhbmdlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghKnRoaXMpCisgICAgICAg
ICAgICByZXR1cm4gb3RoZXI7CisgICAgICAgIGlmICghb3RoZXIpCisgICAgICAgICAgICByZXR1
cm4gKnRoaXM7CisgICAgICAgIHJldHVybiBSYW5nZSgKKyAgICAgICAgICAgIHN0ZDo6bWluKG1f
YmVnaW4sIG90aGVyLm1fYmVnaW4pLAorICAgICAgICAgICAgc3RkOjptYXgobV9lbmQsIG90aGVy
Lm1fZW5kKSk7CisgICAgfQorICAgIAorICAgIFJhbmdlJiBvcGVyYXRvcnw9KGNvbnN0IFJhbmdl
JiBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyA9ICp0aGlzIHwgb3RoZXI7Cisg
ICAgfQorICAgIAorICAgIFR5cGUgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2JlZ2luOyB9Cisg
ICAgVHlwZSBlbmQoKSBjb25zdCB7IHJldHVybiBtX2VuZDsgfQorCisgICAgYm9vbCBvdmVybGFw
cyhjb25zdCBSYW5nZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpy
YW5nZXNPdmVybGFwKG1fYmVnaW4sIG1fZW5kLCBvdGhlci5tX2JlZ2luLCBvdGhlci5tX2VuZCk7
CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAoKnRoaXMgPT0gUmFuZ2UoKSkgeworICAgICAgICAgICAgb3V0LnByaW50KCJC
b3R0b20iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoKnRo
aXMgPT0gdG9wKCkpIHsKKyAgICAgICAgICAgIG91dC5wcmludCgiVG9wIik7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1fYmVnaW4gPT0gbV9lbmQgKyAxKSB7
CisgICAgICAgICAgICBvdXQucHJpbnQobV9iZWdpbik7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgb3V0LnByaW50KG1fYmVnaW4sICIuLi4iLCBtX2VuZCk7CisgICAg
fQorCitwcml2YXRlOgorICAgIFR5cGUgbV9iZWdpbjsKKyAgICBUeXBlIG1fZW5kOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6UmFuZ2U7CisKSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL1JhbmdlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUmFuZ2VTZXQu
aAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL1dURi93dGYvUmFuZ2VTZXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzcsNiArNzcsMTAgQEAgcHVibGljOgogICAgICAgICBtX2lzQ29tcGFjdCA9
IGZhbHNlOwogCiAgICAgICAgIC8vIFdlIGFwcGVuZCB3aXRob3V0IGNvbXBhY3Rpbmcgb25seSBp
ZiBkb2luZyBzbyBpcyBndWFyYW50ZWVkIG5vdCB0byByZXNpemUgdGhlIHZlY3Rvci4KKyAgICAg
ICAgLy8gRklYTUU6IFRoaXMgaGV1cmlzdGljIGlzIGFsbW9zdCBjZXJ0YWlubHkgd3JvbmcsIGJl
Y2F1c2Ugd2UgZG9uJ3QgY29udHJvbCB0aGUgY2FwYWNpdHkuIEkKKyAgICAgICAgLy8gdGhpbmsg
dGhhdCB0aGlzIG1lYW5zIHRoYXQgd2Ugd2lsbCBzb21ldGltZXMgYmUgcmFnZS1jb21wYWN0aW5n
IHdoZW4gd2UgYXJlIGp1c3Qgc2h5IG9mIHRoZQorICAgICAgICAvLyBjYXBhY2l0eS4KKyAgICAg
ICAgLy8gT09QUzogbmVlZCBidWcgdXJsCiAgICAgICAgIGlmIChtX3Jhbmdlcy5zaXplKCkgKyAx
IDwgbV9yYW5nZXMuY2FwYWNpdHkoKSkgewogICAgICAgICAgICAgbV9yYW5nZXMuYXBwZW5kKHJh
bmdlKTsKICAgICAgICAgICAgIHJldHVybjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305697</attachid>
            <date>2017-03-28 20:04:30 -0700</date>
            <delta_ts>2017-03-29 14:16:44 -0700</delta_ts>
            <desc>passing more tests!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>112772</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIxNDQyNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMTQwLDcgKzE0MCw2IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYjMvQjNG
b2xkUGF0aENvbnN0YW50cy5jcHAKICAgICBiMy9CM0ZyZXF1ZW5jeUNsYXNzLmNwcAogICAgIGIz
L0IzR2VuZXJhdGUuY3BwCi0gICAgYjMvQjNIZWFwUmFuZ2UuY3BwCiAgICAgYjMvQjNJbmZlclN3
aXRjaGVzLmNwcAogICAgIGIzL0IzSW5zZXJ0aW9uU2V0LmNwcAogICAgIGIzL0IzS2luZC5jcHAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTgzLDYgKzE4MywxMCBAQAogCQkwRjI1RjFCMjE4MTYz
NUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1RjFBQjE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xv
d1BhdGhDYWxsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEYyNUYxQjMxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1RjFBQzE4
MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5LmNwcCAqLzsgfTsKIAkJMEYyNUYx
QjQxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNUYxQUQxODE2MzVGMzAwNTIyRjM5
IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGMkFDNTY2MUU4QTBCNzcwMDAxRUUzRiAvKiBBaXJGaXhTcGls
bHNBZnRlclRlcm1pbmFscy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjJBQzU2NDFFOEEwQjc2MDAwMUVFM0YgLyogQWlyRml4U3BpbGxzQWZ0ZXJU
ZXJtaW5hbHMuY3BwICovOyB9OworCQkwRjJBQzU2NzFFOEEwQjc5MDAwMUVFM0YgLyogQWlyRml4
U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMkFDNTY1MUU4QTBCNzYwMDAxRUUzRiAvKiBBaXJGaXhTcGlsbHNBZnRl
clRlcm1pbmFscy5oICovOyB9OworCQkwRjJBQzU2QTFFOEEwQkQzMDAwMUVFM0YgLyogQWlyQWxs
b2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQUM1NjgxRThBMEJEMTAwMDFFRTNGIC8qIEFpckFsbG9j
YXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcCAqLzsgfTsKKwkJMEYyQUM1NkIxRThBMEJENTAw
MDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJBQzU2OTFFOEEwQkQxMDAwMUVF
M0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaCAqLzsgfTsKIAkJMEYyQjY2
QUMxN0I2QjUzRjAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBODE3QjZCNTNEMDBBN0FF
M0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJCNjZBRDE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNv
bWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJCNjZBOTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNv
dW50ZWRJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEYyQjY2QUUxN0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVk
U2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJC
NjZBQTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTY5LDcgKzk3Myw2
IEBACiAJCTBGRUM4NUJDMUJFMTQ2MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0cmVuZ3RoLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUI3MUJF
MTQ2MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0cmVuZ3RoLmNwcCAqLzsgfTsKIAkJMEZFQzg1QkQx
QkUxNDYyRjAwODBGRjc0IC8qIEIzUmVkdWNlU3RyZW5ndGguaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUI4MUJFMTQ2MkYwMDgwRkY3NCAvKiBC
M1JlZHVjZVN0cmVuZ3RoLmggKi87IH07CiAJCTBGRUM4NUMxMUJFMTY3QTAwMDgwRkY3NCAvKiBC
M0VmZmVjdHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NUJFMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0VmZmVjdHMuaCAqLzsgfTsKLQkJMEZFQzg1
QzIxQkUxNjdBMDAwODBGRjc0IC8qIEIzSGVhcFJhbmdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUJGMUJFMTY3QTAwMDgwRkY3NCAvKiBC
M0hlYXBSYW5nZS5jcHAgKi87IH07CiAJCTBGRUM4NUMzMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hl
YXBSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg1QzAxQkUxNjdBMDAwODBGRjc0IC8qIEIzSGVhcFJhbmdlLmggKi87IH07CiAJCTBGRUM4
NUM1MUJFMTZGNUEwMDgwRkY3NCAvKiBCM0VmZmVjdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1QzQxQkUxNkY1QTAwODBGRjc0IC8qIEIz
RWZmZWN0cy5jcHAgKi87IH07CiAJCTBGRUQ2N0I5MUIyNjI1NkQwMDY2Q0UxNSAvKiBERkdDb25z
dGFudEhvaXN0aW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFRDY3QjcxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0YW50SG9pc3Rp
bmdQaGFzZS5jcHAgKi87IH07CkBAIC0yNzAzLDYgKzI3MDYsMTAgQEAKIAkJMEYyNUYxQUIxODE2
MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBGVExTbG93UGF0aENhbGwuaDsgcGF0aCA9IGZ0bC9GVExTbG93UGF0aENhbGwu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNUYxQUMxODE2MzVGMzAwNTIyRjM5
IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBGVExTbG93UGF0aENhbGxLZXkuY3BwOyBwYXRoID0gZnRsL0ZUTFNsb3dQYXRoQ2Fs
bEtleS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjVGMUFEMTgxNjM1RjMw
MDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gRlRMU2xvd1BhdGhDYWxsS2V5Lmg7IHBhdGggPSBmdGwvRlRMU2xvd1BhdGhDYWxs
S2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkFDNTY0MUU4QTBCNzYwMDAx
RUUzRiAvKiBBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5jcHA7IHBhdGgg
PSBiMy9haXIvQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjJBQzU2NTFFOEEwQjc2MDAwMUVFM0YgLyogQWlyRml4U3BpbGxzQWZ0
ZXJUZXJtaW5hbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyRml4U3Bp
bGxzQWZ0ZXJUZXJtaW5hbHMuaDsgcGF0aCA9IGIzL2Fpci9BaXJGaXhTcGlsbHNBZnRlclRlcm1p
bmFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJBQzU2ODFFOEEwQkQxMDAw
MUVFM0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNj
YW4uY3BwOyBwYXRoID0gYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQUM1NjkxRThBMEJEMTAwMDFFRTNG
IC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmg7IHBhdGgg
PSBiMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQjY2QTgxN0I2QjUzRDAwQTdBRTNGIC8qIEdDSW5jb21pbmdS
ZWZDb3VudGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5jb21pbmdSZWZDb3VudGVkLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkE5MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0lu
Y29taW5nUmVmQ291bnRlZElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR0NJbmNvbWluZ1JlZkNv
dW50ZWRJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkFBMTdC
NkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMzQ5Niw3ICszNTAzLDYgQEAKIAkJMEZFQzg1QjcxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVk
dWNlU3RyZW5ndGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNS
ZWR1Y2VTdHJlbmd0aC5jcHA7IHBhdGggPSBiMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQzg1QjgxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVk
dWNlU3RyZW5ndGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNSZWR1Y2VT
dHJlbmd0aC5oOyBwYXRoID0gYjMvQjNSZWR1Y2VTdHJlbmd0aC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkVDODVCRTFCRTE2N0EwMDA4MEZGNzQgLyogQjNFZmZlY3RzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzRWZmZWN0cy5oOyBwYXRoID0gYjMvQjNF
ZmZlY3RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGRUM4NUJGMUJFMTY3QTAw
MDgwRkY3NCAvKiBCM0hlYXBSYW5nZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBCM0hlYXBSYW5nZS5jcHA7IHBhdGggPSBiMy9CM0hlYXBSYW5nZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUM4NUMwMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hl
YXBSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0hlYXBSYW5nZS5o
OyBwYXRoID0gYjMvQjNIZWFwUmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZFQzg1QzQxQkUxNkY1QTAwODBGRjc0IC8qIEIzRWZmZWN0cy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0VmZmVjdHMuY3BwOyBwYXRoID0gYjMvQjNFZmZlY3Rz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFRDY3QjcxQjI2MjU2RDAwNjZD
RTE1IC8qIERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuY3BwOyBwYXRoID0gZGZn
L0RGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01NDE5LDcgKzU0MjUsNiBAQAogCQkJCTBGRUM4NENGMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0dlbmVyYXRlLmggKi8sCiAJCQkJMEYyQzYzQjUxRTYzNDNFODAwQzEzODM5IC8qIEIzR2VuZXJp
Y0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi8sCiAJCQkJMEZFQzg0RDAxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oICovLAotCQkJCTBGRUM4NUJGMUJFMTY3QTAwMDgw
RkY3NCAvKiBCM0hlYXBSYW5nZS5jcHAgKi8sCiAJCQkJMEZFQzg1QzAxQkUxNjdBMDAwODBGRjc0
IC8qIEIzSGVhcFJhbmdlLmggKi8sCiAJCQkJREM2OUI5OUExRDE1RjkwRjAwMkUzQzAwIC8qIEIz
SW5mZXJTd2l0Y2hlcy5jcHAgKi8sCiAJCQkJREM2OUI5OUIxRDE1RjkwRjAwMkUzQzAwIC8qIEIz
SW5mZXJTd2l0Y2hlcy5oICovLApAQCAtNTUyOCw2ICs1NTMzLDggQEAKIAkJMEZFQzg0QjMxQkRB
Q0Q4ODAwODBGRjc0IC8qIGFpciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCisJCQkJMEYyQUM1NjgxRThBMEJEMTAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0
ZXJzQnlMaW5lYXJTY2FuLmNwcCAqLywKKwkJCQkwRjJBQzU2OTFFOEEwQkQxMDAwMUVFM0YgLyog
QWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaCAqLywKIAkJCQk3OTY1QzIxNDFFNUQ3
OTk2MDBCNzU5MUQgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuY3BwICov
LAogCQkJCTc5NjVDMjE1MUU1RDc5OTYwMEI3NTkxRCAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5
R3JhcGhDb2xvcmluZy5oICovLAogCQkJCTBGRUM4NTQ4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJB
bGxvY2F0ZVN0YWNrLmNwcCAqLywKQEAgLTU1NjEsNiArNTU2OCw4IEBACiAJCQkJMEY0REUxQ0Qx
QzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCAqLywKIAkJCQkyNjJEODVC
NDFDMEQ2NTBGMDA2QUNCNjEgLyogQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmNwcCAqLywK
IAkJCQkyNjJEODVCNTFDMEQ2NTBGMDA2QUNCNjEgLyogQWlyRml4UGFydGlhbFJlZ2lzdGVyU3Rh
bGxzLmggKi8sCisJCQkJMEYyQUM1NjQxRThBMEI3NjAwMDFFRTNGIC8qIEFpckZpeFNwaWxsc0Fm
dGVyVGVybWluYWxzLmNwcCAqLywKKwkJCQkwRjJBQzU2NTFFOEEwQjc2MDAwMUVFM0YgLyogQWly
Rml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCAqLywKIAkJCQkwRkVDODU1MjFCREFDREM3MDA4MEZG
NzQgLyogQWlyRnJlcXVlbnRlZEJsb2NrLmggKi8sCiAJCQkJMEZFQzg1NTMxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckdlbmVyYXRlLmNwcCAqLywKIAkJCQkwRkVDODU1NDFCREFDREM3MDA4MEZGNzQg
LyogQWlyR2VuZXJhdGUuaCAqLywKQEAgLTgxMzksNiArODE0OCw3IEBACiAJCQkJMEZFQzg1MTAx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkVDODUxMjFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0MzQyMkE2MzFDMTU4RTZEMDBFMkVCOTggLyogQjNDb25zdEZsb2F0VmFsdWUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkFDNTZCMUU4QTBCRDUwMDAxRUUzRiAvKiBBaXJBbGxv
Y2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1QjMx
QkRFRDk1NzAwODBGRjc0IC8qIEIzQ29uc3RQdHJWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYzMzhERjYxQkU5M0Q1NTAwMTNDODhGIC8qIEIzQ29uc3RyYWluZWRWYWx1ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyQzYzQjgxRTYzNDNGNzAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2NrSW5z
ZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKQEAgLTkzNjIsNiArOTM3Miw3IEBACiAJCQkJNzA5
RkI4NkExQUUzMzVDNjAwMzlEMDY5IC8qIFdlYWtTZXRDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMTQxNTAxMzMxNTRCQjEzRjAwNUQ4Qzk4IC8qIFdlYWtTZXRJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3MDlGQjg2QzFBRTMzNUM2MDAzOUQwNjkgLyogV2Vha1NldFByb3Rv
dHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQUM1NjcxRThBMEI3OTAwMDFFRTNGIC8qIEFp
ckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JFRDFE
QjU4REFEMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNDMTYxREI1OUNCMjAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5
Q29tcGlsZUVycm9yQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JF
RjFEQjU4REFEMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90b3R5cGUuaCBp
biBIZWFkZXJzICovLApAQCAtOTk4OCw3ICs5OTk5LDYgQEAKIAkJCQkwRjcyNUNBRjFDNTA2RDNC
MDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkVDODUxNTFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkVDODUxODFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQkwRkVDODVDMjFCRTE2N0EwMDA4MEZGNzQgLyogQjNIZWFwUmFuZ2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJREM2OUI5OUMxRDE1RjkxMjAwMkUzQzAwIC8qIEIzSW5m
ZXJTd2l0Y2hlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVDODVCOTFCRTE0NjJGMDA4MEZG
NzQgLyogQjNJbnNlcnRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZERjY3RDMxRDlD
NkQyQTAwMUI5ODI1IC8qIEIzS2luZC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMTU0LDYgKzEw
MTY0LDcgQEAKIAkJCQlBNzhBOTc3NjE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkJEQzE1MTUxQzVENEQwMENEODkxMCAvKiBERkdGaXh1
cFBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjAxNzdGMURDQURDMzMwMEVBNTk1MCAv
KiBERkdGbG93SW5kZXhpbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQUM1NkExRThBMEJE
MzAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGOUQzMzk2MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRjcxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0ZsdXNo
Rm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNjlDQzg4MTkzQUM2MEEwMDQ1NzU5RSAv
KiBERkdGcm96ZW5WYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMjYzLDYgKzEwMjc0LDcg
QEAKIAkJCQkyQTgzNjM4NTE4RDdEMEVFMDAwMEVCQ0MgLyogRWRlbkdDQWN0aXZpdHlDYWxsYmFj
ay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OUU0NUEyNTE4QTFCMjU5MDAyNkQ4OEYgLyogRW5j
b2RlZFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUM3MTA3RUMzNzYwMDQyN0E0
OCAvKiBFcnJvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJBQzU2NjFFOEEwQjc3MDAwMUVF
M0YgLyogQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQ3RjM5QzgxMDdFQzM3NjAwNDI3QTQ4IC8qIEVycm9yQ29uc3RydWN0b3IuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRkVCNThDMTQxODdCOEIxNjAwOThFRjBCIC8qIEVycm9ySGFuZGxpbmdTY29w
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDOTEwN0VDMzc2MDA0MjdBNDggLyogRXJy
b3JJbnN0YW5jZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrVXRpbHMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTE0LDcgKzExNCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+CiBWZWN0b3I8QmFz
aWNCbG9jayo+IGJsb2Nrc0luUHJlT3JkZXIoQmFzaWNCbG9jayogcm9vdCkKIHsKICAgICBWZWN0
b3I8QmFzaWNCbG9jayo+IHJlc3VsdDsKLSAgICBHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2Nr
KiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IHdvcmtsaXN0OworICAgIEdyYXBoTm9kZVdvcmtsaXN0
PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+IHdvcmtsaXN0OwogICAgIHdvcmts
aXN0LnB1c2gocm9vdCk7CiAgICAgd2hpbGUgKEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3Qu
cG9wKCkpIHsKICAgICAgICAgcmVzdWx0LmFwcGVuZChibG9jayk7CkBAIC0xMjgsNyArMTI4LDcg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KIFZlY3RvcjxCYXNpY0Jsb2NrKj4gYmxv
Y2tzSW5Qb3N0T3JkZXIoQmFzaWNCbG9jayogcm9vdCkKIHsKICAgICBWZWN0b3I8QmFzaWNCbG9j
ayo+IHJlc3VsdDsKLSAgICBQb3N0T3JkZXJHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwg
SW5kZXhTZXQ8QmFzaWNCbG9jaz4+IHdvcmtsaXN0OworICAgIFBvc3RPcmRlckdyYXBoTm9kZVdv
cmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+IHdvcmtsaXN0OwogICAg
IHdvcmtsaXN0LnB1c2gocm9vdCk7CiAgICAgd2hpbGUgKEdyYXBoTm9kZVdpdGhPcmRlcjxCYXNp
Y0Jsb2NrKj4gaXRlbSA9IHdvcmtsaXN0LnBvcCgpKSB7CiAgICAgICAgIHN3aXRjaCAoaXRlbS5v
cmRlcikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tXb3JrbGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrV29ya2xpc3Qu
aAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tX
b3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CiAKIGNsYXNzIEJhc2ljQmxvY2s7CiAKLXR5cGVkZWYgR3JhcGhOb2RlV29y
a2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2s+PiBCbG9ja1dvcmtsaXN0Owor
dHlwZWRlZiBHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9j
ayo+PiBCbG9ja1dvcmtsaXN0OwogCiAvLyBXaGVuIHlvdSBzYXkgQmxvY2tXaXRoPGludD4geW91
IHNob3VsZCByZWFkIGl0IGFzICJibG9jayB3aXRoIGFuIGludCIuCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB1c2luZyBCbG9ja1dpdGggPSBHcmFwaE5vZGVXaXRoPEJhc2ljQmxvY2sqLCBUPjsKQEAg
LTQ0LDEzICs0NCwxMyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBCbG9ja1dpdGggPSBH
CiAvLyBwZXJtaXRzIGZvcmNpYmx5IGVucXVldWVpbmcgdGhpbmdzIGV2ZW4gaWYgdGhlIGJsb2Nr
IGhhcyBhbHJlYWR5IGJlZW4gc2Vlbi4gSXQncyB1c2VmdWwgZm9yCiAvLyB0aGluZ3MgbGlrZSBi
dWlsZGluZyBhIHNwYW5uaW5nIHRyZWUsIGluIHdoaWNoIGNhc2UgVCAodGhlIGF1eGlsaWFyeSBw
YXlsb2FkKSB3b3VsZCBiZSB0aGUKIC8vIHN1Y2Nlc3NvciBpbmRleC4KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3JrbGlzdCA9IEV4dGVuZGVkR3JhcGhOb2RlV29y
a2xpc3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0PEJhc2ljQmxvY2s+PjsKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3JrbGlzdCA9IEV4dGVuZGVkR3JhcGhOb2Rl
V29ya2xpc3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0PEJhc2ljQmxvY2sqPj47CiAKIHR5cGVk
ZWYgR3JhcGhWaXNpdE9yZGVyIFZpc2l0T3JkZXI7CiAKIHR5cGVkZWYgR3JhcGhOb2RlV2l0aE9y
ZGVyPEJhc2ljQmxvY2sqPiBCbG9ja1dpdGhPcmRlcjsKIAotdHlwZWRlZiBQb3N0T3JkZXJHcmFw
aE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IFBvc3RPcmRl
ckJsb2NrV29ya2xpc3Q7Cit0eXBlZGVmIFBvc3RPcmRlckdyYXBoTm9kZVdvcmtsaXN0PEJhc2lj
QmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+IFBvc3RPcmRlckJsb2NrV29ya2xpc3Q7CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDRkcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDRkcu
aAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ0ZHLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzksOCArMzksOCBAQCBjbGFzcyBDRkcgewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIHR5cGVkZWYgQmFzaWNCbG9jayogTm9kZTsKLSAg
ICB0eXBlZGVmIEluZGV4U2V0PEJhc2ljQmxvY2s+IFNldDsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB1c2luZyBNYXAgPSBJbmRleE1hcDxCYXNpY0Jsb2NrLCBUPjsKKyAgICB0eXBlZGVmIElu
ZGV4U2V0PEJhc2ljQmxvY2sqPiBTZXQ7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcg
TWFwID0gSW5kZXhNYXA8QmFzaWNCbG9jayosIFQ+OwogICAgIHR5cGVkZWYgVmVjdG9yPEJhc2lj
QmxvY2sqLCA0PiBMaXN0OwogCiAgICAgQ0ZHKFByb2NlZHVyZSYgcHJvYykKQEAgLTUxLDcgKzUx
LDcgQEAgcHVibGljOgogICAgIE5vZGUgcm9vdCgpIHsgcmV0dXJuIG1fcHJvY1swXTsgfQogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBNYXA8VD4gbmV3TWFwKCkgeyByZXR1cm4gSW5k
ZXhNYXA8SlNDOjpCMzo6QmFzaWNCbG9jaywgVD4obV9wcm9jLnNpemUoKSk7IH0KKyAgICBNYXA8
VD4gbmV3TWFwKCkgeyByZXR1cm4gSW5kZXhNYXA8SlNDOjpCMzo6QmFzaWNCbG9jayosIFQ+KG1f
cHJvYy5zaXplKCkpOyB9CiAKICAgICBTdWNjZXNzb3JDb2xsZWN0aW9uPEJhc2ljQmxvY2ssIEJh
c2ljQmxvY2s6OlN1Y2Nlc3Nvckxpc3Q+IHN1Y2Nlc3NvcnMoTm9kZSBub2RlKSB7IHJldHVybiBu
b2RlLT5zdWNjZXNzb3JCbG9ja3MoKTsgfQogICAgIEJhc2ljQmxvY2s6OlByZWRlY2Vzc29yTGlz
dCYgcHJlZGVjZXNzb3JzKE5vZGUgbm9kZSkgeyByZXR1cm4gbm9kZS0+cHJlZGVjZXNzb3JzKCk7
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCShyZXZpc2lvbiAyMTQ0Mjcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uaAkod29ya2luZyBjb3B5KQpA
QCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShCM19KSVQpCiAKICNpbmNsdWRlICJKU0V4cG9y
dE1hY3Jvcy5oIgorI2luY2x1ZGUgIk9wdGlvbnMuaCIKICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CkBAIC0xNzAsNiArMTcxLDEzIEBA
IHN0YXRpYyBJbnRUeXBlIHJvdGF0ZUxlZnQoSW50VHlwZSB2YWx1ZSwKICAgICByZXR1cm4gKHVW
YWx1ZSA8PCBzaGlmdCkgfCAodVZhbHVlID4+ICgoYml0cyAtIHNoaWZ0KSAmIG1hc2spKTsKIH0K
IAoraW5saW5lIHVuc2lnbmVkIGRlZmF1bHRPcHRMZXZlbCgpCit7CisgICAgLy8gVGhpcyBzaG91
bGQgYWxtb3N0IGFsd2F5cyByZXR1cm4gMiwgYnV0IHdlIGFsbG93IHRoaXMgZGVmYXVsdCB0byBi
ZSBsb3dlcmVkIGZvciB0ZXN0aW5nLiBTb21lCisgICAgLy8gY29tcG9uZW50cyB3aWxsIGRlbGli
ZXJhdGVseSBzZXQgdGhlIG9wdExldmVsLgorICAgIHJldHVybiBPcHRpb25zOjpkZWZhdWx0QjNP
cHRMZXZlbCgpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKIAogI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsZS5oCShyZXZp
c2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShCM19KSVQpCiAKKyNp
bmNsdWRlICJCM0NvbW1vbi5oIgogI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKIAogbmFtZXNw
YWNlIEpTQyB7CkBAIC00NSw3ICs0Niw3IEBAIGNsYXNzIFByb2NlZHVyZTsKIC8vIFRoZW4geW91
IGtlZXAgdGhlIENvbXBpbGF0aW9uIG9iamVjdCBhbGl2ZSBmb3IgYXMgbG9uZyBhcyB5b3Ugd2Fu
dCB0byBiZSBhYmxlIHRvIHJ1biB0aGUgY29kZS4KIC8vIElmIHRoaXMgQVBJIGZlZWxzIHRvbyBo
aWdoLWxldmVsLCB5b3UgY2FuIHVzZSBCMzo6Z2VuZXJhdGUoKSBkaXJlY3RseS4KIAotSlNfRVhQ
T1JUX1BSSVZBVEUgQ29tcGlsYXRpb24gY29tcGlsZShWTSYsIFByb2NlZHVyZSYsIHVuc2lnbmVk
IG9wdExldmVsID0gMSk7CitKU19FWFBPUlRfUFJJVkFURSBDb21waWxhdGlvbiBjb21waWxlKFZN
JiwgUHJvY2VkdXJlJiwgdW5zaWduZWQgb3B0TGV2ZWwgPSBkZWZhdWx0T3B0TGV2ZWwoKSk7CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNEdXBsaWNhdGVUYWlscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzRHVwbGljYXRlVGFpbHMuY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNEdXBsaWNhdGVUYWlscy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY4LDcgKzY4LDcgQEAgcHVibGljOgogCiAgICAgICAgIG1fcHJvYy5yZXNldFZhbHVlT3duZXJz
KCk7CiAKLSAgICAgICAgSW5kZXhTZXQ8QmFzaWNCbG9jaz4gY2FuZGlkYXRlczsKKyAgICAgICAg
SW5kZXhTZXQ8QmFzaWNCbG9jayo+IGNhbmRpZGF0ZXM7CiAKICAgICAgICAgZm9yIChCYXNpY0Js
b2NrKiBibG9jayA6IG1fcHJvYykgewogICAgICAgICAgICAgaWYgKGJsb2NrLT5zaXplKCkgPiBt
X21heFNpemUpCkBAIC04Miw3ICs4Miw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogCiAgICAgICAg
IC8vIENvbGxlY3QgdGhlIHNldCBvZiB2YWx1ZXMgdGhhdCBtdXN0IGJlIGRlLVNTQSdkLgotICAg
ICAgICBJbmRleFNldDxWYWx1ZT4gdmFsdWVzVG9EZW1vdGU7CisgICAgICAgIEluZGV4U2V0PFZh
bHVlKj4gdmFsdWVzVG9EZW1vdGU7CiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBt
X3Byb2MpIHsKICAgICAgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogKmJsb2NrKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSA9PSBQaGkgJiYgY2FuZGlkYXRlcy5jb250
YWlucyhibG9jaykpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVD
b21tb25TdWJleHByZXNzaW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuY3BwCShyZXZpc2lvbiAyMTQ0
MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVDb21tb25TdWJleHBy
ZXNzaW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4Miw3ICs2ODIsNyBAQCBwcml2YXRlOgog
ICAgIERvbWluYXRvcnMmIG1fZG9taW5hdG9yczsKICAgICBQdXJlQ1NFIG1fcHVyZUNTRTsKICAg
ICAKLSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBJbXB1cmVCbG9ja0RhdGE+IG1faW1wdXJlQmxv
Y2tEYXRhOworICAgIEluZGV4TWFwPEJhc2ljQmxvY2sqLCBJbXB1cmVCbG9ja0RhdGE+IG1faW1w
dXJlQmxvY2tEYXRhOwogCiAgICAgSW1wdXJlQmxvY2tEYXRhIG1fZGF0YTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRml4U1NBLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNGaXhTU0EuY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGaXhTU0EuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3
ICs0OSw3IEBAIG5hbWVzcGFjZSB7CiBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIH0gLy8g
YW5vbnltb3VzIG5hbWVzcGFjZQogCi12b2lkIGRlbW90ZVZhbHVlcyhQcm9jZWR1cmUmIHByb2Ms
IGNvbnN0IEluZGV4U2V0PFZhbHVlPiYgdmFsdWVzKQordm9pZCBkZW1vdGVWYWx1ZXMoUHJvY2Vk
dXJlJiBwcm9jLCBjb25zdCBJbmRleFNldDxWYWx1ZSo+JiB2YWx1ZXMpCiB7CiAgICAgSGFzaE1h
cDxWYWx1ZSosIFZhcmlhYmxlKj4gbWFwOwogICAgIEhhc2hNYXA8VmFsdWUqLCBWYXJpYWJsZSo+
IHBoaU1hcDsKQEAgLTEyMSw3ICsxMjEsNyBAQCBib29sIGZpeFNTQShQcm9jZWR1cmUmIHByb2Mp
CiAgICAgLy8gSnVzdCBmb3Igc2FuaXR5LCByZW1vdmUgYW55IHVudXNlZCB2YXJpYWJsZXMgZmly
c3QuIEl0J3MgdW5saWtlbHkgdGhhdCB0aGlzIGNvZGUgaGFzIGFueQogICAgIC8vIGJ1Z3MgaGF2
aW5nIHRvIGRvIHdpdGggZGVhZCB2YXJpYWJsZXMsIGJ1dCBpdCB3b3VsZCBiZSBzaWxseSB0byBo
YXZlIHRvIGZpeCBzdWNoIGEgYnVnIGlmCiAgICAgLy8gaXQgZGlkIGFyaXNlLgotICAgIEluZGV4
U2V0PFZhcmlhYmxlPiBsaXZlVmFyaWFibGVzOworICAgIEluZGV4U2V0PFZhcmlhYmxlKj4gbGl2
ZVZhcmlhYmxlczsKICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IHByb2MudmFsdWVzKCkpIHsKICAg
ICAgICAgaWYgKFZhcmlhYmxlVmFsdWUqIHZhcmlhYmxlVmFsdWUgPSB2YWx1ZS0+YXM8VmFyaWFi
bGVWYWx1ZT4oKSkKICAgICAgICAgICAgIGxpdmVWYXJpYWJsZXMuYWRkKHZhcmlhYmxlVmFsdWUt
PnZhcmlhYmxlKCkpOwpAQCAtMTQ1LDcgKzE0NSw3IEBAIGJvb2wgZml4U1NBKFByb2NlZHVyZSYg
cHJvYykKIAogICAgIC8vIENyZWF0ZSBhIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlICgiY2FsY1Zh
ciIpIGZvciBldmVyeSB2YXJpYWJsZS4KICAgICBWZWN0b3I8VmFyaWFibGUqPiBjYWxjVmFyVG9W
YXJpYWJsZTsKLSAgICBJbmRleE1hcDxWYXJpYWJsZSwgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUq
PiB2YXJpYWJsZVRvQ2FsY1Zhcihwcm9jLnZhcmlhYmxlcygpLnNpemUoKSk7CisgICAgSW5kZXhN
YXA8VmFyaWFibGUqLCBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSo+IHZhcmlhYmxlVG9DYWxjVmFy
KHByb2MudmFyaWFibGVzKCkuc2l6ZSgpKTsKIAogICAgIGZvciAoVmFyaWFibGUqIHZhcmlhYmxl
IDogcHJvYy52YXJpYWJsZXMoKSkgewogICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSog
Y2FsY1ZhciA9IHNzYS5uZXdWYXJpYWJsZSgpOwpAQCAtMTg1LDcgKzE4NSw3IEBAIGJvb2wgZml4
U1NBKFByb2NlZHVyZSYgcHJvYykKIAogICAgIC8vIE5vdyBwZXJmb3JtIHRoZSBjb252ZXJzaW9u
LgogICAgIEluc2VydGlvblNldCBpbnNlcnRpb25TZXQocHJvYyk7Ci0gICAgSW5kZXhNYXA8VmFy
aWFibGUsIFZhbHVlKj4gbWFwcGluZyhwcm9jLnZhcmlhYmxlcygpLnNpemUoKSk7CisgICAgSW5k
ZXhNYXA8VmFyaWFibGUqLCBWYWx1ZSo+IG1hcHBpbmcocHJvYy52YXJpYWJsZXMoKS5zaXplKCkp
OwogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBwcm9jLmJsb2Nrc0luUHJlT3JkZXIoKSkg
ewogICAgICAgICBtYXBwaW5nLmNsZWFyKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0ZpeFNTQS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0ZpeFNTQS5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNGaXhTU0EuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNyw3ICszNyw3IEBAIGNsYXNzIFByb2NlZHVyZTsK
IAogLy8gVHVybnMgYWxsIG1lbnRpb25zIG9mIHRoZSBnaXZlbiB2YWx1ZXMgaW50byBhY2Nlc3Nl
cyB0byB2YXJpYWJsZXMuIFRoaXMgaXMgbWVhbnQgdG8gYmUgdXNlZAogLy8gZnJvbSBwaGFzZXMg
dGhhdCBkb24ndCBsaWtlIFNTQSBmb3Igd2hhdGV2ZXIgcmVhc29uLgotdm9pZCBkZW1vdGVWYWx1
ZXMoUHJvY2VkdXJlJiwgY29uc3QgSW5kZXhTZXQ8VmFsdWU+Jik7Cit2b2lkIGRlbW90ZVZhbHVl
cyhQcm9jZWR1cmUmLCBjb25zdCBJbmRleFNldDxWYWx1ZSo+Jik7CiAKIC8vIFRoaXMgZml4ZXMg
U1NBIGZvciB5b3UuIFVzZSB0aGlzIGFmdGVyIHlvdSBoYXZlIGRvbmUgZGVtb3RlVmFsdWVzKCkg
YW5kIHlvdSBoYXZlIHBlcmZvcm1lZAogLy8gd2hhdGV2ZXIgZXZpbCB0cmFuc2Zvcm1hdGlvbiB5
b3UgbmVlZGVkLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAko
cmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQgcHJlcGFyZUZvckdlbmVy
YXRpb24oUHJvY2VkdXJlJiBwcm8KICAgICBUaW1pbmdTY29wZSB0aW1pbmdTY29wZSgicHJlcGFy
ZUZvckdlbmVyYXRpb24iKTsKIAogICAgIGdlbmVyYXRlVG9BaXIocHJvY2VkdXJlLCBvcHRMZXZl
bCk7Ci0gICAgQWlyOjpwcmVwYXJlRm9yR2VuZXJhdGlvbihwcm9jZWR1cmUuY29kZSgpKTsKKyAg
ICBBaXI6OnByZXBhcmVGb3JHZW5lcmF0aW9uKHByb2NlZHVyZS5jb2RlKCksIG9wdExldmVsKTsK
IH0KIAogdm9pZCBnZW5lcmF0ZShQcm9jZWR1cmUmIHByb2NlZHVyZSwgQ0NhbGxIZWxwZXJzJiBq
aXQpCkBAIC04MCw3ICs4MCw3IEBAIHZvaWQgZ2VuZXJhdGVUb0FpcihQcm9jZWR1cmUmIHByb2Nl
ZHVyZSwKICAgICBpZiAoc2hvdWxkVmFsaWRhdGVJUigpKQogICAgICAgICB2YWxpZGF0ZShwcm9j
ZWR1cmUpOwogCi0gICAgaWYgKG9wdExldmVsID49IDEpIHsKKyAgICBpZiAob3B0TGV2ZWwgPj0g
MikgewogICAgICAgICByZWR1Y2VEb3VibGVUb0Zsb2F0KHByb2NlZHVyZSk7CiAgICAgICAgIHJl
ZHVjZVN0cmVuZ3RoKHByb2NlZHVyZSk7CiAgICAgICAgIGVsaW1pbmF0ZUNvbW1vblN1YmV4cHJl
c3Npb25zKHByb2NlZHVyZSk7CkBAIC05MSwxMiArOTEsMTUgQEAgdm9pZCBnZW5lcmF0ZVRvQWly
KFByb2NlZHVyZSYgcHJvY2VkdXJlLAogICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IEFkZCBt
b3JlIG9wdGltaXphdGlvbnMgaGVyZS4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1MDUwNworICAgIH0gZWxzZSBpZiAob3B0TGV2ZWwgPj0gMSkg
eworICAgICAgICAvLyBGSVhNRTogRXhwbG9yZSBiZXR0ZXIgInF1aWNrIG1vZGUiIG9wdGltaXph
dGlvbnMuCisgICAgICAgIHJlZHVjZVN0cmVuZ3RoKHByb2NlZHVyZSk7CiAgICAgfQogCiAgICAg
Ly8gVGhpcyBwdXRzIHRoZSBJUiBpbiBxdWlya3MgbW9kZS4KICAgICBsb3dlck1hY3Jvcyhwcm9j
ZWR1cmUpOwogCi0gICAgaWYgKG9wdExldmVsID49IDEpIHsKKyAgICBpZiAob3B0TGV2ZWwgPj0g
MikgewogICAgICAgICByZWR1Y2VTdHJlbmd0aChwcm9jZWR1cmUpOwogCiAgICAgICAgIC8vIEZJ
WE1FOiBBZGQgbW9yZSBvcHRpbWl6YXRpb25zIGhlcmUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNHZW5lcmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0dlbmVyYXRlLmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0dlbmVyYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDggQEAKIAog
I2lmIEVOQUJMRShCM19KSVQpCiAKKyNpbmNsdWRlICJCM0NvbW1vbi5oIgorCiBuYW1lc3BhY2Ug
SlNDIHsKIAogY2xhc3MgQ0NhbGxIZWxwZXJzOwpAQCAtMzgsNyArNDAsNyBAQCBuYW1lc3BhY2Ug
QWlyIHsgY2xhc3MgQ29kZTsgfQogCiAvLyBUaGlzIHRha2VzIGEgQjM6OlByb2NlZHVyZSwgb3B0
aW1pemVzIGl0IGluLXBsYWNlLCBsb3dlcnMgaXQgdG8gQWlyLCBhbmQgcHJlcGFyZXMgdGhlIEFp
ciBmb3IKIC8vIGdlbmVyYXRpb24uCi1KU19FWFBPUlRfUFJJVkFURSB2b2lkIHByZXBhcmVGb3JH
ZW5lcmF0aW9uKFByb2NlZHVyZSYsIHVuc2lnbmVkIG9wdExldmVsID0gMSk7CitKU19FWFBPUlRf
UFJJVkFURSB2b2lkIHByZXBhcmVGb3JHZW5lcmF0aW9uKFByb2NlZHVyZSYsIHVuc2lnbmVkIG9w
dExldmVsID0gZGVmYXVsdE9wdExldmVsKCkpOwogCiAvLyBUaGlzIHRha2VzIGEgQjM6OlByb2Nl
ZHVyZSB0aGF0IGhhcyBiZWVuIHByZXBhcmVkIGZvciBnZW5lcmF0aW9uIChpLmUuIGl0IGhhcyBi
ZWVuIGxvd2VyZWQgdG8gQWlyIGFuZAogLy8gdGhlIEFpciBoYXMgYmVlbiBwcmVwYXJlZCBmb3Ig
Z2VuZXJhdGlvbikgYW5kIGdlbmVyYXRlcyBpdC4gVGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvZiBj
YWxsaW5nCkBAIC00OCw3ICs1MCw3IEBAIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZ2VuZXJhdGUo
UHJvY2VkdXIKIC8vIFRoaXMgdGFrZXMgYSBCMzo6UHJvY2VkdXJlLCBvcHRpbWl6ZXMgaXQgaW4t
cGxhY2UsIGFuZCBsb3dlcnMgaXQgdG8gQWlyLiBZb3UgY2FuIHRoZW4gZ2VuZXJhdGUKIC8vIHRo
ZSBBaXIgdG8gbWFjaGluZSBjb2RlIHVzaW5nIEFpcjo6cHJlcGFyZUZvckdlbmVyYXRpb24oKSBh
bmQgQWlyOjpnZW5lcmF0ZSgpIG9uIHRoZSBQcm9jZWR1cmUncwogLy8gY29kZSgpLgotdm9pZCBn
ZW5lcmF0ZVRvQWlyKFByb2NlZHVyZSYsIHVuc2lnbmVkIG9wdExldmVsID0gMSk7Cit2b2lkIGdl
bmVyYXRlVG9BaXIoUHJvY2VkdXJlJiwgdW5zaWduZWQgb3B0TGV2ZWwgPSBkZWZhdWx0T3B0TGV2
ZWwoKSk7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNIZWFwUmFuZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw0OSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJCM0hlYXBSYW5nZS5oIgotCi0jaWYgRU5BQkxF
KEIzX0pJVCkKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7Ci0KLXZvaWQgSGVhcFJh
bmdlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAgaWYgKCp0aGlzID09IEhl
YXBSYW5nZSgpKSB7Ci0gICAgICAgIG91dC5wcmludCgiQm90dG9tIik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgaWYgKCp0aGlzID09IHRvcCgpKSB7Ci0gICAgICAgIG91dC5wcmludCgi
VG9wIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgb3V0LnByaW50KG1fYmVnaW4sICIu
Li4iLCBtX2VuZCk7Ci19Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwotCi0jZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJh
bmdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJhbmdl
LmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBS
YW5nZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw5MCArMjcsMTUgQEAKIAogI2lmIEVOQUJMRShC
M19KSVQpCiAKLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgotI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorI2luY2x1ZGUgPHd0Zi9SYW5nZS5oPgog
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAogLy8gQWxpYXMgYW5hbHlzaXMgaW4g
QjMgaXMgZG9uZSBieSBjaGVja2luZyBpZiB0d28gaW50ZWdlciByYW5nZXMgb3ZlcmxhcC4gVGhp
cyBpcyBwb3dlcmZ1bCBlbm91Z2gKIC8vIHRvIGJlIHVzZWQgZm9yIFRCQUEtc3R5bGUgYWxpYXMg
YW5hbHlzaXMgdXNlZCBieSB0aGUgREZHLCBGVEwsIGFuZCBMTFZNOiB5b3UganVzdCB0dXJuIGVh
Y2ggbm9kZQogLy8gaW4gdGhlIHRyZWUgb2YgYWJzdHJhY3QgaGVhcHMgaW50byBhIHByZS9wb3N0
IHJhbmdlLgotLy8KLS8vIE5vdGUgdGhhdCB0aGUgJ2JlZ2luJyBpcyBpbmNsdXNpdmUsIHdoaWxl
IHRoZSAnZW5kJyBpcyBleGNsdXNpdmUuIFRoZXNlIHR3byByYW5nZXMgYXJlIG5vbi0KLS8vIG92
ZXJsYXBwaW5nOgotLy8KLS8vICAgICByYW5nZUEgPSAwLi4uOAotLy8gICAgIHJhbmdlQiA9IDgu
Li4xNgotCi1jbGFzcyBIZWFwUmFuZ2UgewotcHVibGljOgotICAgIHR5cGVkZWYgdW5zaWduZWQg
VHlwZTsKLSAgICAKLSAgICBIZWFwUmFuZ2UoKQotICAgICAgICA6IG1fYmVnaW4oMCkKLSAgICAg
ICAgLCBtX2VuZCgwKQotICAgIHsKLSAgICB9Ci0KLSAgICBleHBsaWNpdCBIZWFwUmFuZ2UodW5z
aWduZWQgdmFsdWUpCi0gICAgICAgIDogbV9iZWdpbih2YWx1ZSkKLSAgICAgICAgLCBtX2VuZCh2
YWx1ZSArIDEpCi0gICAgewotICAgICAgICBBU1NFUlQobV9lbmQgPj0gbV9iZWdpbik7Ci0gICAg
fQotCi0gICAgSGVhcFJhbmdlKHVuc2lnbmVkIGJlZ2luLCB1bnNpZ25lZCBlbmQpCi0gICAgICAg
IDogbV9iZWdpbihiZWdpbikKLSAgICAgICAgLCBtX2VuZChlbmQpCi0gICAgewotICAgICAgICBB
U1NFUlQobV9lbmQgPj0gbV9iZWdpbik7Ci0gICAgICAgIGlmIChtX2JlZ2luID09IG1fZW5kKSB7
Ci0gICAgICAgICAgICAvLyBDYW5vbmljYWxpemUgZW1wdHkgcmFuZ2VzLgotICAgICAgICAgICAg
bV9iZWdpbiA9IDA7Ci0gICAgICAgICAgICBtX2VuZCA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBzdGF0aWMgSGVhcFJhbmdlIHRvcCgpCi0gICAgewotICAgICAgICByZXR1cm4gSGVhcFJh
bmdlKDAsIFVJTlRfTUFYKTsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSGVh
cFJhbmdlJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2JlZ2luID09IG90
aGVyLm1fYmVnaW4KLSAgICAgICAgICAgICYmIG1fZW5kID09IG90aGVyLm1fZW5kOwotICAgIH0K
LQotICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBIZWFwUmFuZ2UmIG90aGVyKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwotICAgIH0KLSAgICAKLSAgICBI
ZWFwUmFuZ2Ugb3BlcmF0b3J8KGNvbnN0IEhlYXBSYW5nZSYgb3RoZXIpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gSGVhcFJhbmdlKAotICAgICAgICAgICAgc3RkOjptaW4obV9iZWdpbiwg
b3RoZXIubV9iZWdpbiksCi0gICAgICAgICAgICBzdGQ6Om1heChtX2VuZCwgb3RoZXIubV9lbmQp
KTsKLSAgICB9Ci0gICAgCi0gICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0
dXJuIG1fYmVnaW4gIT0gbV9lbmQ7IH0KLQotICAgIHVuc2lnbmVkIGJlZ2luKCkgY29uc3QgeyBy
ZXR1cm4gbV9iZWdpbjsgfQotICAgIHVuc2lnbmVkIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5k
OyB9Ci0KLSAgICBib29sIG92ZXJsYXBzKGNvbnN0IEhlYXBSYW5nZSYgb3RoZXIpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gV1RGOjpyYW5nZXNPdmVybGFwKG1fYmVnaW4sIG1fZW5kLCBv
dGhlci5tX2JlZ2luLCBvdGhlci5tX2VuZCk7Ci0gICAgfQotCi0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIHVu
c2lnbmVkIG1fYmVnaW47Ci0gICAgdW5zaWduZWQgbV9lbmQ7Ci19OworCit0eXBlZGVmIFJhbmdl
PHVuc2lnbmVkPiBIZWFwUmFuZ2U7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2aXNpb24gMjE0
NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMzNzksMTAgKzMzNzksMTAgQEAgcHJpdmF0ZToKICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAgICAgCi0gICAgSW5kZXhTZXQ8VmFsdWU+
IG1fbG9ja2VkOyAvLyBUaGVzZSBhcmUgdmFsdWVzIHRoYXQgd2lsbCBoYXZlIG5vIFRtcCBpbiBB
aXIuCi0gICAgSW5kZXhNYXA8VmFsdWUsIFRtcD4gbV92YWx1ZVRvVG1wOyAvLyBUaGVzZSBhcmUg
dmFsdWVzIHRoYXQgbXVzdCBoYXZlIGEgVG1wIGluIEFpci4gV2Ugc2F5IHRoYXQgYSBWYWx1ZSog
d2l0aCBhIG5vbi1udWxsIFRtcCBpcyAicGlubmVkIi4KLSAgICBJbmRleE1hcDxWYWx1ZSwgVG1w
PiBtX3BoaVRvVG1wOyAvLyBFYWNoIFBoaSBnZXRzIGl0cyBvd24gVG1wLgotICAgIEluZGV4TWFw
PEIzOjpCYXNpY0Jsb2NrLCBBaXI6OkJhc2ljQmxvY2sqPiBtX2Jsb2NrVG9CbG9jazsKKyAgICBJ
bmRleFNldDxWYWx1ZSo+IG1fbG9ja2VkOyAvLyBUaGVzZSBhcmUgdmFsdWVzIHRoYXQgd2lsbCBo
YXZlIG5vIFRtcCBpbiBBaXIuCisgICAgSW5kZXhNYXA8VmFsdWUqLCBUbXA+IG1fdmFsdWVUb1Rt
cDsgLy8gVGhlc2UgYXJlIHZhbHVlcyB0aGF0IG11c3QgaGF2ZSBhIFRtcCBpbiBBaXIuIFdlIHNh
eSB0aGF0IGEgVmFsdWUqIHdpdGggYSBub24tbnVsbCBUbXAgaXMgInBpbm5lZCIuCisgICAgSW5k
ZXhNYXA8VmFsdWUqLCBUbXA+IG1fcGhpVG9UbXA7IC8vIEVhY2ggUGhpIGdldHMgaXRzIG93biBU
bXAuCisgICAgSW5kZXhNYXA8QjM6OkJhc2ljQmxvY2sqLCBBaXI6OkJhc2ljQmxvY2sqPiBtX2Js
b2NrVG9CbG9jazsKICAgICBIYXNoTWFwPEIzOjpTdGFja1Nsb3QqLCBBaXI6OlN0YWNrU2xvdCo+
IG1fc3RhY2tUb1N0YWNrOwogICAgIEhhc2hNYXA8VmFyaWFibGUqLCBUbXA+IG1fdmFyaWFibGVU
b1RtcDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTW92ZUNvbnN0YW50cy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTW92ZUNvbnN0YW50
cy5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01v
dmVDb25zdGFudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHByaXZhdGU6
CiAgICAgewogICAgICAgICBEb21pbmF0b3JzJiBkb21pbmF0b3JzID0gbV9wcm9jLmRvbWluYXRv
cnMoKTsKICAgICAgICAgSGFzaE1hcDxWYWx1ZUtleSwgVmFsdWUqPiB2YWx1ZUZvckNvbnN0YW50
OwotICAgICAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBWZWN0b3I8VmFsdWUqPj4gbWF0ZXJpYWxp
emF0aW9ucyhtX3Byb2Muc2l6ZSgpKTsKKyAgICAgICAgSW5kZXhNYXA8QmFzaWNCbG9jayosIFZl
Y3RvcjxWYWx1ZSo+PiBtYXRlcmlhbGl6YXRpb25zKG1fcHJvYy5zaXplKCkpOwogCiAgICAgICAg
IC8vIFdlIGRldGVybWluZSB3aGVyZSB0aGluZ3MgZ2V0IG1hdGVyaWFsaXplZCBiYXNlZCBvbiB3
aGVyZSB0aGV5IGFyZSB1c2VkLgogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9w
cm9jKSB7CkBAIC0yNzQsNyArMjc0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgZm9yIChhdXRvJiBl
bnRyeSA6IG1fY29uc3RUYWJsZSkKICAgICAgICAgICAgIG1fZGF0YVNlY3Rpb25bZW50cnkudmFs
dWVdID0gZW50cnkua2V5LnZhbHVlKCk7CiAKLSAgICAgICAgSW5kZXhTZXQ8VmFsdWU+IG9mZkxp
bWl0czsKKyAgICAgICAgSW5kZXhTZXQ8VmFsdWUqPiBvZmZMaW1pdHM7CiAgICAgICAgIGZvciAo
QmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2MpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
dmFsdWVJbmRleCA9IDA7IHZhbHVlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK3ZhbHVlSW5kZXgp
IHsKICAgICAgICAgICAgICAgICBTdGFja21hcFZhbHVlKiB2YWx1ZSA9IGJsb2NrLT5hdCh2YWx1
ZUluZGV4KS0+YXM8U3RhY2ttYXBWYWx1ZT4oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1BoaUNoaWxkcmVuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzUGhpQ2hpbGRyZW4uaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzUGhpQ2hpbGRyZW4uaAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDcgKzE2OCw3
IEBAIHB1YmxpYzoKICAgICBjb25zdCBWZWN0b3I8VmFsdWUqLCA4PiYgcGhpcygpIGNvbnN0IHsg
cmV0dXJuIG1fcGhpczsgfQogCiBwcml2YXRlOgotICAgIEluZGV4TWFwPFZhbHVlLCBWZWN0b3I8
VXBzaWxvblZhbHVlKj4+IG1fdXBzaWxvbnM7CisgICAgSW5kZXhNYXA8VmFsdWUqLCBWZWN0b3I8
VXBzaWxvblZhbHVlKj4+IG1fdXBzaWxvbnM7CiAgICAgVmVjdG9yPFZhbHVlKiwgOD4gbV9waGlz
OwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCShy
ZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBQcm9jZWR1cmU6Omlu
dmFsaWRhdGVDRkcoKQogCiB2b2lkIFByb2NlZHVyZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAogewotICAgIEluZGV4U2V0PFZhbHVlPiB2YWx1ZXNJbkJsb2NrczsKKyAgICBJbmRleFNl
dDxWYWx1ZSo+IHZhbHVlc0luQmxvY2tzOwogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiAq
dGhpcykgewogICAgICAgICBvdXQucHJpbnQoZGVlcER1bXAoKnRoaXMsIGJsb2NrKSk7CiAgICAg
ICAgIHZhbHVlc0luQmxvY2tzLmFkZEFsbCgqYmxvY2spOwpAQCAtMjQ1LDcgKzI0NSw3IEBAIHZv
aWQgUHJvY2VkdXJlOjpkZWxldGVWYWx1ZShWYWx1ZSogdmFsdWUKIAogdm9pZCBQcm9jZWR1cmU6
OmRlbGV0ZU9ycGhhbnMoKQogewotICAgIEluZGV4U2V0PFZhbHVlPiB2YWx1ZXNJbkJsb2NrczsK
KyAgICBJbmRleFNldDxWYWx1ZSo+IHZhbHVlc0luQmxvY2tzOwogICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiAqdGhpcykKICAgICAgICAgdmFsdWVzSW5CbG9ja3MuYWRkQWxsKCpibG9jayk7
CiAKQEAgLTMzMyw3ICszMzMsNyBAQCBWYWx1ZSogUHJvY2VkdXJlOjphZGRWYWx1ZUltcGwoVmFs
dWUqIHZhCiAKIHZvaWQgUHJvY2VkdXJlOjpzZXRCbG9ja09yZGVySW1wbChWZWN0b3I8QmFzaWNC
bG9jayo+JiBibG9ja3MpCiB7Ci0gICAgSW5kZXhTZXQ8QmFzaWNCbG9jaz4gYmxvY2tzU2V0Owor
ICAgIEluZGV4U2V0PEJhc2ljQmxvY2sqPiBibG9ja3NTZXQ7CiAgICAgYmxvY2tzU2V0LmFkZEFs
bChibG9ja3MpOwogCiAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6ICp0aGlzKSB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VEb3VibGVUb0Zsb2F0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VEb3VibGVUb0Zsb2F0
LmNwcAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVk
dWNlRG91YmxlVG9GbG9hdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyNCwxOCArNDI0LDE4IEBA
IHByaXZhdGU6CiAKICAgICAvLyBTZXQgb2YgYWxsIHRoZSBEb3VibGUgdmFsdWVzIHRoYXQgYXJl
IGFjdHVhbGx5IHVzZWQgYXMgRG91YmxlLgogICAgIC8vIENvbnZlcnRpbmcgYW55IG9mIHRoZW0g
dG8gRmxvYXQgd291bGQgbG9zZSBwcmVjaXNpb24uCi0gICAgSW5kZXhTZXQ8VmFsdWU+IG1fdmFs
dWVzVXNlZEFzRG91YmxlOworICAgIEluZGV4U2V0PFZhbHVlKj4gbV92YWx1ZXNVc2VkQXNEb3Vi
bGU7CiAKICAgICAvLyBTZXQgb2YgYWxsIHRoZSBQaGkgb2YgdHlwZSBEb3VibGUgdGhhdCByZWFs
bHkgY29udGFpbnMgYSBEb3VibGUuCiAgICAgLy8gQW55IERvdWJsZSBQaGkgbm90IGluIHRoZSBz
ZXQgY2FuIGJlIGNvbnZlcnRlZCB0byBGbG9hdCB3aXRob3V0IGxvc2luZyBwcmVjaXNpb24uCi0g
ICAgSW5kZXhTZXQ8VmFsdWU+IG1fcGhpc0NvbnRhaW5pbmdEb3VibGU7CisgICAgSW5kZXhTZXQ8
VmFsdWUqPiBtX3BoaXNDb250YWluaW5nRG91YmxlOwogCiAgICAgLy8gQW55IHZhbHVlIHRoYXQg
d2FzIGNvbnZlcnRlZCBmcm9tIHByb2R1Y2luZyBhIERvdWJsZSB0byBwcm9kdWNpbmcgYSBGbG9h
dC4KICAgICAvLyBUaGlzIHNldCBkb2VzIG5vdCBpbmNsdWRlIFBoaS1VcHNpbG9ucy4KLSAgICBJ
bmRleFNldDxWYWx1ZT4gbV9jb252ZXJ0ZWRWYWx1ZTsKKyAgICBJbmRleFNldDxWYWx1ZSo+IG1f
Y29udmVydGVkVmFsdWU7CiAKICAgICAvLyBBbnkgdmFsdWUgdGhhdCBwcmV2aW91c2x5IHByb2R1
Y2VkIERvdWJsZSBhbmQgbm93IHByb2R1Y2UgRmxvYXQuCi0gICAgSW5kZXhTZXQ8VmFsdWU+IG1f
Y29udmVydGVkUGhpczsKKyAgICBJbmRleFNldDxWYWx1ZSo+IG1fY29udmVydGVkUGhpczsKIH07
CiAKIHZvaWQgcHJpbnRHcmFwaElmQ29udmVydGluZyhQcm9jZWR1cmUmIHByb2NlZHVyZSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHJl
dmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVu
Z3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM5Miw3ICsyMzkyLDcgQEAgcHJpdmF0ZToKIAog
ICAgIHZvaWQga2lsbERlYWRDb2RlKCkKICAgICB7Ci0gICAgICAgIEdyYXBoTm9kZVdvcmtsaXN0
PFZhbHVlKiwgSW5kZXhTZXQ8VmFsdWU+PiB3b3JrbGlzdDsKKyAgICAgICAgR3JhcGhOb2RlV29y
a2xpc3Q8VmFsdWUqLCBJbmRleFNldDxWYWx1ZSo+PiB3b3JrbGlzdDsKICAgICAgICAgVmVjdG9y
PFVwc2lsb25WYWx1ZSosIDY0PiB1cHNpbG9uczsKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBi
bG9jayA6IG1fcHJvYykgewogICAgICAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiAqYmxvY2sp
IHsKQEAgLTI0MjksNyArMjQyOSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KIAotICAgICAgICBJbmRleFNldDxWYXJpYWJsZT4gbGl2ZVZhcmlhYmxlczsK
KyAgICAgICAgSW5kZXhTZXQ8VmFyaWFibGUqPiBsaXZlVmFyaWFibGVzOwogICAgICAgICAKICAg
ICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvYykgewogICAgICAgICAgICAgc2l6
ZV90IHNvdXJjZUluZGV4ID0gMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1NT
QUNhbGN1bGF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
U0FDYWxjdWxhdG9yLmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1NTQUNhbGN1bGF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTYsNyArMTU2LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgVmVjdG9yPERlZio+IG1fcGhpczsKICAgICB9OwogICAgIAotICAgIElu
ZGV4TWFwPEJhc2ljQmxvY2ssIEJsb2NrRGF0YT4gbV9kYXRhOworICAgIEluZGV4TWFwPEJhc2lj
QmxvY2sqLCBCbG9ja0RhdGE+IG1fZGF0YTsKIAogICAgIERvbWluYXRvcnMqIG1fZG9taW5hdG9y
cyB7IG51bGxwdHIgfTsKICAgICBQcm9jZWR1cmUmIG1fcHJvYzsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1VzZUNvdW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1VzZUNvdW50cy5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNVc2VDb3VudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ4LDcgKzQ4
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgdW5zaWduZWQgbnVtVXNpbmdJbnN0cnVjdGlvbnMgeyAw
IH07CiAgICAgfTsKICAgICAKLSAgICBJbmRleE1hcDxWYWx1ZSwgQ291bnRzPiBtX2NvdW50czsK
KyAgICBJbmRleE1hcDxWYWx1ZSosIENvdW50cz4gbV9jb3VudHM7CiB9OwogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCShyZXZp
c2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTIwLDcgKzEyMCw3IEBAIFN0YXRpY0xvY2sgY3Jhc2hMb2NrOwogCiBW
TSogdm07CiAKLXN0ZDo6dW5pcXVlX3B0cjxDb21waWxhdGlvbj4gY29tcGlsZShQcm9jZWR1cmUm
IHByb2NlZHVyZSwgdW5zaWduZWQgb3B0TGV2ZWwgPSAxKQorc3RkOjp1bmlxdWVfcHRyPENvbXBp
bGF0aW9uPiBjb21waWxlKFByb2NlZHVyZSYgcHJvY2VkdXJlLCB1bnNpZ25lZCBvcHRMZXZlbCA9
IGRlZmF1bHRPcHRMZXZlbCgpKQogewogICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPENvbXBp
bGF0aW9uPihCMzo6Y29tcGlsZSgqdm0sIHByb2NlZHVyZSwgb3B0TGV2ZWwpKTsKIH0KQEAgLTk5
MCw2ICs5OTAsNyBAQCB2b2lkIHRlc3RNdWxMb2FkVHdpY2UoKQogCiAgICAgdGVzdCgwKTsKICAg
ICB0ZXN0KDEpOworICAgIHRlc3QoMik7CiB9CiAKIHZvaWQgdGVzdE11bEFkZEFyZ3NMZWZ0KCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNC
eUdyYXBoQ29sb3JpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuY3BwCShyZXZpc2lvbiAy
MTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0
ZXJzQnlHcmFwaENvbG9yaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAog
I2lmIEVOQUJMRShCM19KSVQpCiAKICNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWly
Rml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCIKICNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIK
ICNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgiCkBA
IC0xNTg1LDYgKzE1ODYsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIG1fY29hbGVzY2luZ0NhbmRp
ZGF0ZXMuY2xlYXIoKTsKICAgICAgICAgbV93b3JrbGlzdE1vdmVzLmNsZWFyKCk7CiAKKyAgICAg
ICAgLy8gRklYTUU6IEl0IHNlZW1zIGxpa2Ugd2UgZG9uJ3QgbmVlZCB0byByZWNvbXB1dGUgbGl2
ZW5lc3MuIFdlIGp1c3QgbmVlZCB0byB1cGRhdGUgaXRzIGRhdGEKKyAgICAgICAgLy8gc3RydWN0
dXJlcyBzbyB0aGF0IGl0IGtub3dzIHRoYXQgdGhlIG5ld2x5IGludHJvZHVjZWQgdGVtcG9yYXJp
ZXMgYXJlIG5vdCBsaXZlIGF0IGFueSBiYXNpYworICAgICAgICAvLyBibG9jayBib3VuZGFyeS4g
VGhpcyBzaG91bGQgdHJpdmlhbGx5IGJlIHRydWUgZm9yIG5vdy4KICAgICAgICAgVG1wTGl2ZW5l
c3M8YmFuaz4gbGl2ZW5lc3MobV9jb2RlKTsKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9j
ayA6IG1fY29kZSkgewogICAgICAgICAgICAgdHlwZW5hbWUgVG1wTGl2ZW5lc3M8YmFuaz46Okxv
Y2FsQ2FsYyBsb2NhbENhbGMobGl2ZW5lc3MsIGJsb2NrKTsKQEAgLTE3OTgsNyArMTgwMiw3IEBA
IHB1YmxpYzoKICAgICAgICAgbV9udW1JdGVyYXRpb25zID0gMDsKICAgICAgICAgYWxsb2NhdGVP
bkJhbms8RlA+KCk7CiAKLSAgICAgICAgZml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMoKTsKKyAgICAg
ICAgZml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMobV9jb2RlKTsKIAogICAgICAgICBpZiAocmVwb3J0
U3RhdHMpCiAgICAgICAgICAgICBkYXRhTG9nKCJOdW0gaXRlcmF0aW9ucyA9ICIsIG1fbnVtSXRl
cmF0aW9ucywgIlxuIik7CkBAIC0xOTU0LDcgKzE5NTgsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcEZhc3QoWyZdIChUbXAm
IHRtcCkgewotICAgICAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkgfHwgdG1wLmlzR1Ao
KSA9PSAoYmFuayAhPSBHUCkpCisgICAgICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSB8
fCB0bXAuYmFuaygpICE9IGJhbmspCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAK
ICAgICAgICAgICAgICAgICAgICAgVG1wIGFsaWFzVG1wID0gYWxsb2NhdG9yLmdldEFsaWFzKHRt
cCk7CkBAIC0yMTY5LDkgKzIxNzMsMTIgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAgICAg
ICB0bXAgPSBtX2NvZGUubmV3VG1wKGJhbmspOwogICAgICAgICAgICAgICAgICAgICB1bnNwaWxs
YWJsZVRtcHMuYWRkKEFic29sdXRlVG1wTWFwcGVyPGJhbms+OjphYnNvbHV0ZUluZGV4KHRtcCkp
OworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT0g
QXJnOjpTY3JhdGNoKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAg
ICAgICAgICAgICAgIEFyZyBhcmcgPSBBcmc6OnN0YWNrKHN0YWNrU2xvdEVudHJ5LT52YWx1ZSk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzQW55VXNlKHJvbGUpICYmIHJvbGUgIT0g
QXJnOjpTY3JhdGNoKQorICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0FueVVzZShyb2xl
KSkKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoaW5zdEluZGV4
LCBtb3ZlLCBpbnN0Lm9yaWdpbiwgYXJnLCB0bXApOwogICAgICAgICAgICAgICAgICAgICBpZiAo
QXJnOjppc0FueURlZihyb2xlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNl
dC5pbnNlcnQoaW5zdEluZGV4ICsgMSwgbW92ZSwgaW5zdC5vcmlnaW4sIHRtcCwgYXJnKTsKQEAg
LTIxODcsNjYgKzIxOTQsNiBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQogCi0gICAgdm9p
ZCBmaXhTcGlsbHNBZnRlclRlcm1pbmFscygpCi0gICAgewotICAgICAgICAvLyBCZWNhdXNlIHRo
ZXJlIG1heSBiZSB0ZXJtaW5hbHMgdGhhdCBwcm9kdWNlIHZhbHVlcywgSVJDIG1heQotICAgICAg
ICAvLyB3YW50IHRvIHNwaWxsIHRob3NlIHRlcm1pbmFscy4gSXQnbGwgaGFwcGVuIHRvIHNwaWxs
IGl0IGFmdGVyCi0gICAgICAgIC8vIHRoZSB0ZXJtaW5hbC4gSWYgd2UgbGVmdCB0aGUgZ3JhcGgg
aW4gdGhpcyBzdGF0ZSwgaXQnZCBiZSBpbnZhbGlkCi0gICAgICAgIC8vIGJlY2F1c2UgYSB0ZXJt
aW5hbCBtdXN0IGJlIHRoZSBsYXN0IGluc3RydWN0aW9uIGluIGEgYmxvY2suCi0gICAgICAgIC8v
IFdlIGZpeCB0aGF0IGhlcmUuCi0KLSAgICAgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldCht
X2NvZGUpOwotCi0gICAgICAgIGJvb2wgYWRkZWRCbG9ja3MgPSBmYWxzZTsKLQotICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCB0
ZXJtaW5hbEluZGV4ID0gYmxvY2stPnNpemUoKTsKLSAgICAgICAgICAgIGJvb2wgZm91bmRUZXJt
aW5hbCA9IGZhbHNlOwotICAgICAgICAgICAgd2hpbGUgKHRlcm1pbmFsSW5kZXgtLSkgewotICAg
ICAgICAgICAgICAgIGlmIChibG9jay0+YXQodGVybWluYWxJbmRleCkuaXNUZXJtaW5hbCgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGZvdW5kVGVybWluYWwgPSB0cnVlOwotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBBU1NFUlRfVU5VU0VEKGZvdW5kVGVybWluYWwsIGZvdW5kVGVybWluYWwpOwotCi0gICAg
ICAgICAgICBpZiAodGVybWluYWxJbmRleCA9PSBibG9jay0+c2l6ZSgpIC0gMSkKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgLy8gVGhlcmUgbXVzdCBiZSBpbnN0cnVj
dGlvbnMgYWZ0ZXIgdGhlIHRlcm1pbmFsIGJlY2F1c2UgaXQncyBub3QgdGhlIGxhc3QgaW5zdHJ1
Y3Rpb24uCi0gICAgICAgICAgICBBU1NFUlQodGVybWluYWxJbmRleCA8IGJsb2NrLT5zaXplKCkg
LSAxKTsKLSAgICAgICAgICAgIFZlY3RvcjxJbnN0LCAxPiBpbnN0c1RvTW92ZTsKLSAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IHRlcm1pbmFsSW5kZXggKyAxOyBpIDwgYmxvY2stPnNpemUo
KTsgaSsrKQotICAgICAgICAgICAgICAgIGluc3RzVG9Nb3ZlLmFwcGVuZChibG9jay0+YXQoaSkp
OwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5zdHNUb01vdmUuc2l6ZSgpKTsKLQotICAg
ICAgICAgICAgZm9yIChGcmVxdWVudGVkQmxvY2smIGZyZXF1ZW50ZWRTdWNjZXNzb3IgOiBibG9j
ay0+c3VjY2Vzc29ycygpKSB7Ci0gICAgICAgICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29y
ID0gZnJlcXVlbnRlZFN1Y2Nlc3Nvci5ibG9jaygpOwotICAgICAgICAgICAgICAgIC8vIElmIHN1
Y2Nlc3NvcidzIG9ubHkgcHJlZGVjZXNzb3IgaXMgYmxvY2ssIHdlIGNhbiBwbGFudCB0aGUgc3Bp
bGwgaW5zaWRlCi0gICAgICAgICAgICAgICAgLy8gdGhlIHN1Y2Nlc3Nvci4gT3RoZXJ3aXNlLCB3
ZSBtdXN0IHNwbGl0IHRoZSBjcml0aWNhbCBlZGdlIGFuZCBjcmVhdGUKLSAgICAgICAgICAgICAg
ICAvLyBhIG5ldyBibG9jayBmb3IgdGhlIHNwaWxsLgotICAgICAgICAgICAgICAgIGlmIChzdWNj
ZXNzb3ItPm51bVByZWRlY2Vzc29ycygpID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgaW5z
ZXJ0aW9uU2V0Lmluc2VydEluc3RzKDAsIGluc3RzVG9Nb3ZlKTsKLSAgICAgICAgICAgICAgICAg
ICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoc3VjY2Vzc29yKTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICBhZGRlZEJsb2NrcyA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBXZSBwcm9iYWJseSB3YW50IGJldHRlciBibG9jayBvcmRlcmlu
ZyBoZXJlLgotICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBuZXdCbG9jayA9IG1fY29k
ZS5hZGRCbG9jaygpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IEluc3QmIGluc3Qg
OiBpbnN0c1RvTW92ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ld0Jsb2NrLT5hcHBlbmRJ
bnN0KGluc3QpOwotICAgICAgICAgICAgICAgICAgICBuZXdCbG9jay0+YXBwZW5kSW5zdChJbnN0
KEp1bXAsIGluc3RzVG9Nb3ZlLmxhc3QoKS5vcmlnaW4pKTsKLSAgICAgICAgICAgICAgICAgICAg
bmV3QmxvY2stPnN1Y2Nlc3NvcnMoKS5hcHBlbmQoc3VjY2Vzc29yKTsKLSAgICAgICAgICAgICAg
ICAgICAgZnJlcXVlbnRlZFN1Y2Nlc3Nvci5ibG9jaygpID0gbmV3QmxvY2s7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBibG9jay0+cmVzaXplKHRlcm1p
bmFsSW5kZXggKyAxKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhZGRlZEJsb2NrcykKLSAg
ICAgICAgICAgIG1fY29kZS5yZXNldFJlYWNoYWJpbGl0eSgpOwotICAgIH0KLQogICAgIENvZGUm
IG1fY29kZTsKICAgICBUbXBXaWR0aCBtX3RtcFdpZHRoOwogICAgIFVzZUNvdW50czxUbXA+JiBt
X3VzZUNvdW50czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2Nh
dGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdp
c3RlcnNCeUxpbmVhclNjYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTk0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmgiCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQXJnSW5saW5lcy5oIgorI2luY2x1
ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5oIgor
I2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgi
CisjaW5jbHVkZSAiQWlyTGl2ZW5lc3MuaCIKKyNpbmNsdWRlICJBaXJQYWRJbnRlcmZlcmVuY2Uu
aCIKKyNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCisjaW5jbHVkZSAiQWlyUmVnTGl2ZW5lc3Mu
aCIKKyNpbmNsdWRlICJBaXJUbXBJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+
CisjaW5jbHVkZSA8d3RmL1JhbmdlLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eyBuYW1lc3BhY2UgQWlyIHsKKworbmFtZXNwYWNlIHsKKworY29uc3QgYm9vbCB2ZXJib3NlID0g
ZmFsc2U7CisKK3R5cGVkZWYgUmFuZ2U8c2l6ZV90PiBJbnRlcnZhbDsKKworc3RydWN0IFRtcERh
dGEgeworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAg
ICAgb3V0LnByaW50KCJ7aW50ZXJ2YWwgPSAiLCBpbnRlcnZhbCwgIiwgc3BpbGxlZCA9ICIsIHBv
aW50ZXJEdW1wKHNwaWxsZWQpLCAiLCBhc3NpZ25lZCA9ICIsIGFzc2lnbmVkLCAiLCBhZGphY2Vu
dCA9ICIsIGFkamFjZW50LCAifSIpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHZhbGlkYXRlKCkK
KyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEoc3BpbGxlZCAmJiBhc3NpZ25lZCkpOwor
ICAgIH0KKyAgICAKKyAgICBJbnRlcnZhbCBpbnRlcnZhbDsKKyAgICBTdGFja1Nsb3QqIHNwaWxs
ZWQgeyBudWxscHRyIH07CisgICAgUmVnIGFzc2lnbmVkOworICAgIFJlZ2lzdGVyU2V0IGFkamFj
ZW50OworfTsKKworc3RydWN0IENsb2JiZXIgeworICAgIENsb2JiZXIoKQorICAgIHsKKyAgICB9
CisgICAgCisgICAgQ2xvYmJlcihzaXplX3QgaW5kZXgsIFJlZ2lzdGVyU2V0IHJlZ3MpCisgICAg
ICAgIDogaW5kZXgoaW5kZXgpCisgICAgICAgICwgcmVncyhyZWdzKQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAg
ICBvdXQucHJpbnQoaW5kZXgsICI6IiwgcmVncyk7CisgICAgfQorICAgIAorICAgIHNpemVfdCBp
bmRleCB7IDAgfTsKKyAgICBSZWdpc3RlclNldCByZWdzOworfTsKKworY2xhc3MgVG1wT3JDbG9i
YmVyIHsKK3B1YmxpYzoKKyAgICBUbXBPckNsb2JiZXIoKQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgVG1wT3JDbG9iYmVyKENsb2JiZXIqIGNsb2JiZXIpCisgICAgICAgIDogbV92YWx1ZShiaXR3
aXNlX2Nhc3Q8dWludHB0cl90PihjbG9iYmVyKSkKKyAgICB7CisgICAgfQorICAgIAorICAgIFRt
cE9yQ2xvYmJlcihUbXAgdG1wKQorICAgICAgICA6IG1fdmFsdWUoKHN0YXRpY19jYXN0PHVpbnRw
dHJfdD4odG1wLmludGVybmFsVmFsdWUoKSkgPDwgMSkgfCAxKQorICAgIHsKKyAgICB9CisgICAg
CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRtcE9yQ2xvYmJlciYgb3RoZXIpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSA9PSBvdGhlci5tX3ZhbHVlOworICAgIH0KKyAg
ICAKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVG1wT3JDbG9iYmVyJiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisgICAgCisg
ICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
KnRoaXMgIT0gVG1wT3JDbG9iYmVyKCk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNUbXAoKSBj
b25zdCB7IHJldHVybiBtX3ZhbHVlICYgMTsgfQorICAgIGJvb2wgaXNDbG9iYmVyKCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZSAmJiAhKG1fdmFsdWUgJiAxKTsgfQorICAgIAorICAgIFRtcCB0bXAo
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzVG1wKCkpOworICAgICAgICByZXR1cm4g
VG1wOjp0bXBGb3JJbnRlcm5hbFZhbHVlKG1fdmFsdWUgPj4gMSk7CisgICAgfQorICAgIGNvbnN0
IENsb2JiZXImIGNsb2JiZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzQ2xvYmJl
cigpKTsKKyAgICAgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8Q2xvYmJlcio+KG1fdmFsdWUpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7
CisgICAgICAgIGlmICghKnRoaXMpIHsKKyAgICAgICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzVG1wKCkpIHsK
KyAgICAgICAgICAgIG91dC5wcmludCh0bXAoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgb3V0LnByaW50KGNsb2JiZXIoKSk7CisgICAgfQorICAgIAorcHJpdmF0
ZToKKyAgICB1aW50cHRyX3QgbV92YWx1ZSB7IDAgfTsKK307CisKK3RlbXBsYXRlPEJhbmsgYmFu
az4KK2NsYXNzIExpbmVhclNjYW4geworcHVibGljOgorICAgIExpbmVhclNjYW4oQ29kZSYgY29k
ZSkKKyAgICAgICAgOiBtX2NvZGUoY29kZSkKKyAgICAgICAgLCBtX3N0YXJ0SW5kZXgoY29kZS5z
aXplKCkpCisgICAgICAgICwgbV9tYXAoY29kZS5udW1UbXBzKGJhbmspKQorICAgICAgICAsIG1f
aW5zZXJ0aW9uU2V0cyhjb2RlLnNpemUoKSwgY29kZSkKKyAgICB7CisgICAgfQorICAgIAorICAg
IHZvaWQgcnVuKCkKKyAgICB7CisgICAgICAgIGJ1aWxkUmVnaXN0ZXJTZXQoKTsKKyAgICAgICAg
YnVpbGRJbmRpY2VzKCk7CisgICAgICAgIGJ1aWxkSW50ZXJ2YWxzKCk7CisgICAgICAgIGZvciAo
OzspIHsKKyAgICAgICAgICAgIHByZXBhcmVJbnRlcnZhbHMoKTsKKyAgICAgICAgICAgIGF0dGVt
cHRTY2FuKCk7CisgICAgICAgICAgICBpZiAoIW1fZGlkU3BpbGwpCisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBlbWl0U3BpbGxDb2RlKCk7CisgICAgICAgIH0KKyAgICAgICAg
aW5zZXJ0U3BpbGxDb2RlKCk7CisgICAgICAgIGFzc2lnblJlZ2lzdGVycygpOworICAgIH0KKyAg
ICAKK3ByaXZhdGU6CisgICAgdm9pZCBidWlsZFJlZ2lzdGVyU2V0KCkKKyAgICB7CisgICAgICAg
IG1fcmVnaXN0ZXJzID0gbV9jb2RlLnJlZ3NJblByaW9yaXR5T3JkZXIoYmFuayk7CisgICAgICAg
IG1fcmVnaXN0ZXJTZXQuc2V0QWxsKG1fcmVnaXN0ZXJzKTsKKyAgICB9CisKKyAgICB2b2lkIGJ1
aWxkSW5kaWNlcygpCisgICAgeworICAgICAgICBzaXplX3QgaW5kZXggPSAwOworICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7CisgICAgICAgICAgICBtX3N0YXJ0SW5k
ZXhbYmxvY2tdID0gaW5kZXg7CisgICAgICAgICAgICBpbmRleCArPSBibG9jay0+c2l6ZSgpICsg
MTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBzaXplX3QgaW5kZXhPZkhlYWQoQmFzaWNC
bG9jayogYmxvY2spCisgICAgeworICAgICAgICByZXR1cm4gbV9zdGFydEluZGV4W2Jsb2NrXTsK
KyAgICB9CisgICAgCisgICAgc2l6ZV90IGluZGV4T2ZUYWlsKEJhc2ljQmxvY2sqIGJsb2NrKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGluZGV4T2ZIZWFkKGJsb2NrKSArIGJsb2NrLT5zaXplKCk7
CisgICAgfQorICAgIAorICAgIHNpemVfdCBpbmRleE9mKEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNp
Z25lZCBpbnN0SW5kZXgsIEFyZzo6UGhhc2UgcGhhc2UpCisgICAgeworICAgICAgICByZXR1cm4g
aW5kZXhPZkhlYWQoYmxvY2spICsgaW5zdEluZGV4ICsgcGhhc2U7CisgICAgfQorICAgIAorICAg
IEludGVydmFsIGludGVydmFsKHNpemVfdCBpbmRleE9mRWFybHksIEFyZzo6VGltaW5nIHRpbWlu
ZykKKyAgICB7CisgICAgICAgIHN3aXRjaCAodGltaW5nKSB7CisgICAgICAgIGNhc2UgQXJnOjpP
bmx5RWFybHk6CisgICAgICAgICAgICByZXR1cm4gSW50ZXJ2YWwoaW5kZXhPZkVhcmx5KTsKKyAg
ICAgICAgY2FzZSBBcmc6Ok9ubHlMYXRlOgorICAgICAgICAgICAgcmV0dXJuIEludGVydmFsKGlu
ZGV4T2ZFYXJseSArIDEpOworICAgICAgICBjYXNlIEFyZzo6RWFybHlBbmRMYXRlOgorICAgICAg
ICAgICAgcmV0dXJuIEludGVydmFsKGluZGV4T2ZFYXJseSwgaW5kZXhPZkVhcmx5ICsgMik7Cisg
ICAgICAgIH0KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBJ
bnRlcnZhbCgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGJ1aWxkSW50ZXJ2YWxzKCkKKyAgICB7
CisgICAgICAgIFRtcExpdmVuZXNzPGJhbms+IGxpdmVuZXNzKG1fY29kZSk7CisgICAgICAgIAor
ICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7CisgICAgICAgICAgICBz
aXplX3QgaW5kZXhPZkhlYWQgPSB0aGlzLT5pbmRleE9mSGVhZChibG9jayk7CisgICAgICAgICAg
ICBzaXplX3QgaW5kZXhPZlRhaWwgPSB0aGlzLT5pbmRleE9mVGFpbChibG9jayk7CisgICAgICAg
ICAgICBmb3IgKFRtcCB0bXAgOiBsaXZlbmVzcy5saXZlQXRIZWFkKGJsb2NrKSkgeworICAgICAg
ICAgICAgICAgIGlmICghdG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgIG1fbWFwW3Rt
cF0uaW50ZXJ2YWwgfD0gSW50ZXJ2YWwoaW5kZXhPZkhlYWQpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZm9yIChUbXAgdG1wIDogbGl2ZW5lc3MubGl2ZUF0VGFpbChibG9jaykpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoIXRtcC5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICBtX21h
cFt0bXBdLmludGVydmFsIHw9IEludGVydmFsKGluZGV4T2ZUYWlsKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSAwOyBp
bnN0SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK2luc3RJbmRleCkgeworICAgICAgICAgICAgICAg
IEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKKyAgICAgICAgICAgICAgICBzaXpl
X3QgaW5kZXhPZkVhcmx5ID0gaW5kZXhPZkhlYWQgKyBpbnN0SW5kZXg7CisgICAgICAgICAgICAg
ICAgaW5zdC5mb3JFYWNoVG1wKAorICAgICAgICAgICAgICAgICAgICBbJl0gKFRtcCYgdG1wLCBB
cmc6OlJvbGUgcm9sZSwgQmFuayB0bXBCYW5rLCBXaWR0aCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHRtcC5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXBCYW5rICE9IGJhbmspCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgbV9t
YXBbdG1wXS5pbnRlcnZhbCB8PSBpbnRlcnZhbChpbmRleE9mRWFybHksIEFyZzo6dGltaW5nKHJv
bGUpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIFJlZ0xpdmVuZXNzOjpMb2NhbENhbGMgbG9jYWxDYWxjKGxpdmVuZXNzLCBibG9jayk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGF1dG8gcmVjb3JkID0gWyZdICh1bnNpZ25lZCBpbnN0
SW5kZXgpIHsKKyAgICAgICAgICAgICAgICBSZWdpc3RlclNldCByZWdzID0gbG9jYWxDYWxjLmxp
dmUoKTsKKyAgICAgICAgICAgICAgICBpZiAoSW5zdCogcHJldiA9IGJsb2NrLT5nZXQoaW5zdElu
ZGV4IC0gMSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJldi0+Zm9yRWFjaDxSZWc+KAorICAg
ICAgICAgICAgICAgICAgICAgICAgWyZdIChSZWcmIHJlZywgQXJnOjpSb2xlIHJvbGUsIEJhbmss
IFdpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNMYXRlRGVm
KHJvbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdzLmFkZChyZWcpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2
LT5raW5kLm9wY29kZSA9PSBQYXRjaCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZ3MubWVy
Z2UocHJldi0+ZXh0cmFDbG9iYmVyZWRSZWdzKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBpZiAoSW5zdCogbmV4dCA9IGJsb2NrLT5nZXQoaW5zdEluZGV4KSkgeworICAg
ICAgICAgICAgICAgICAgICBuZXh0LT5mb3JFYWNoPFJlZz4oCisgICAgICAgICAgICAgICAgICAg
ICAgICBbJl0gKFJlZyYgcmVnLCBBcmc6OlJvbGUgcm9sZSwgQmFuaywgV2lkdGgpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0Vhcmx5RGVmKHJvbGUpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZWdzLmFkZChyZWcpOworICAgICAgICAgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0LT5raW5kLm9wY29kZSA9
PSBQYXRjaCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZ3MubWVyZ2UobmV4dC0+ZXh0cmFF
YXJseUNsb2JiZXJlZFJlZ3MoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIHJlZ3MuZmlsdGVyKG1fcmVnaXN0ZXJTZXQpOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChyZWdzLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fY2xv
YmJlcnMuYXBwZW5kKENsb2JiZXIoaW5kZXhPZkhlYWQgKyBpbnN0SW5kZXgsIHJlZ3MpKTsKKyAg
ICAgICAgICAgIH07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJlY29yZChibG9jay0+c2l6
ZSgpKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gYmxvY2stPnNpemUo
KTsgaW5zdEluZGV4LS07KSB7CisgICAgICAgICAgICAgICAgbG9jYWxDYWxjLmV4ZWN1dGUoaW5z
dEluZGV4KTsKKyAgICAgICAgICAgICAgICByZWNvcmQoaW5zdEluZGV4KTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAg
ICAgIGRhdGFMb2coIkludGVydmFsczpcbiIpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB0
bXBJbmRleCA9IDA7IHRtcEluZGV4IDwgbV9jb2RlLm51bVRtcHMoYmFuayk7ICsrdG1wSW5kZXgp
IHsKKyAgICAgICAgICAgICAgICBUbXAgdG1wID0gVG1wOjp0bXBGb3JJbmRleChiYW5rLCB0bXBJ
bmRleCk7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICIsIHRtcCwgIjogIiwgbV9tYXBb
dG1wXSwgIlxuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
c2l6ZV90IHNvcnRpbmdJbmRleE9mKGNvbnN0IFRtcE9yQ2xvYmJlciYgdGhpbmcpCisgICAgewor
ICAgICAgICAvLyBXZSB3YW50IGNsb2JiZXJzIHRvIGNvbWUgYWZ0ZXIgdG1wcy4KKyAgICAgICAg
aWYgKHRoaW5nLmlzVG1wKCkpCisgICAgICAgICAgICByZXR1cm4gbV9tYXBbdGhpbmcudG1wKCld
LmludGVydmFsLmJlZ2luKCkgPDwgMTsKKyAgICAgICAgcmV0dXJuICh0aGluZy5jbG9iYmVyKCku
aW5kZXggPDwgMSkgfCAxOworICAgIH0KKyAgICAKKyAgICBzaXplX3QgaW5kZXhPZihjb25zdCBU
bXBPckNsb2JiZXImIHRoaW5nKQorICAgIHsKKyAgICAgICAgLy8gV2Ugd2FudCBjbG9iYmVycyB0
byBjb21lIGFmdGVyIHRtcHMuCisgICAgICAgIGlmICh0aGluZy5pc1RtcCgpKQorICAgICAgICAg
ICAgcmV0dXJuIG1fbWFwW3RoaW5nLnRtcCgpXS5pbnRlcnZhbC5iZWdpbigpOworICAgICAgICBy
ZXR1cm4gdGhpbmcuY2xvYmJlcigpLmluZGV4OworICAgIH0KKyAgICAKKyAgICB2b2lkIHByZXBh
cmVJbnRlcnZhbHMoKQorICAgIHsKKyAgICAgICAgbV9pbnRlcnZhbHMucmVzaXplKDApOworICAg
ICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCB0bXBJbmRleCA9IDA7IHRtcEluZGV4IDwgbV9j
b2RlLm51bVRtcHMoYmFuayk7ICsrdG1wSW5kZXgpIHsKKyAgICAgICAgICAgIFRtcCB0bXAgPSBU
bXA6OnRtcEZvckluZGV4KGJhbmssIHRtcEluZGV4KTsKKyAgICAgICAgICAgIFRtcERhdGEmIGRh
dGEgPSBtX21hcFt0bXBdOworICAgICAgICAgICAgaWYgKGRhdGEuc3BpbGxlZCkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZGF0YS5hc3NpZ25l
ZCA9IFJlZygpOworICAgICAgICAgICAgZGF0YS5hZGphY2VudCA9IFJlZ2lzdGVyU2V0KCk7Cisg
ICAgICAgICAgICBtX2ludGVydmFscy5hcHBlbmQodG1wKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgZm9yIChDbG9iYmVyJiBjbG9iYmVyIDogbV9jbG9iYmVycykKKyAgICAgICAgICAg
IG1faW50ZXJ2YWxzLmFwcGVuZCgmY2xvYmJlcik7CisgICAgICAgIAorICAgICAgICBzdGQ6OnNv
cnQoCisgICAgICAgICAgICBtX2ludGVydmFscy5iZWdpbigpLCBtX2ludGVydmFscy5lbmQoKSwK
KyAgICAgICAgICAgIFsmXSAoVG1wT3JDbG9iYmVyJiBhLCBUbXBPckNsb2JiZXImIGIpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gc29ydGluZ0luZGV4T2YoYSkgPCBzb3J0aW5nSW5kZXhPZihi
KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgICAgICBkYXRhTG9nKCJJbnRlcnZhbHM6ICIsIGxpc3REdW1wKG1faW50ZXJ2YWxzKSwgIlxu
Iik7CisgICAgfQorICAgIAorICAgIFRtcCBhZGRUbXBXaXRoSW50ZXJ2YWwoSW50ZXJ2YWwgaW50
ZXJ2YWwpCisgICAgeworICAgICAgICBUbXBEYXRhIGRhdGE7CisgICAgICAgIGRhdGEuaW50ZXJ2
YWwgPSBpbnRlcnZhbDsKKyAgICAgICAgCisgICAgICAgIFRtcCB0bXAgPSBtX2NvZGUubmV3VG1w
KGJhbmspOworICAgICAgICBtX21hcC5hcHBlbmQodG1wLCBkYXRhKTsKKyAgICAgICAgcmV0dXJu
IHRtcDsKKyAgICB9CisgICAgCisgICAgUmVnIGZpbmRGcmVlUmVnaXN0ZXIoVG1wIHRtcCkKKyAg
ICB7CisgICAgICAgIGlmIChtX2FjdGl2ZS5zaXplKCkgPT0gbV9yZWdpc3RlcnMuc2l6ZSgpKQor
ICAgICAgICAgICAgcmV0dXJuIFJlZygpOworICAgICAgICBUbXBEYXRhJiBkYXRhID0gbV9tYXBb
dG1wXTsKKyAgICAgICAgZm9yIChSZWcgcmVnIDogbV9yZWdpc3RlcnMpIHsKKyAgICAgICAgICAg
IGlmICghZGF0YS5hZGphY2VudC5nZXQocmVnKSAmJiAhbV9hY3RpdmVSZWdzLmdldChyZWcpKQor
ICAgICAgICAgICAgICAgIHJldHVybiByZWc7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFJl
ZygpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0dGVtcHRTY2FuKCkKKyAgICB7CisgICAgICAg
IC8vIFRoaXMgaXMgbW9kZWxlZCBhZnRlciBMaW5lYXJTY2FuUmVnaXN0ZXJBbGxvY2F0aW9uIGlu
IEZpZy4gMSBpbgorICAgICAgICAvLyBodHRwOi8vZGwuYWNtLm9yZy9jaXRhdGlvbi5jZm0/aWQ9
MzMwMjUwLgorCisgICAgICAgIG1fZGlkU3BpbGwgPSBmYWxzZTsKKyAgICAgICAgbV9hY3RpdmUu
Y2xlYXIoKTsKKyAgICAgICAgbV9hY3RpdmVSZWdzID0gUmVnaXN0ZXJTZXQoKTsKKyAgICAgICAg
Zm9yIChUbXBPckNsb2JiZXImIHRoaW5nIDogbV9pbnRlcnZhbHMpIHsKKyAgICAgICAgICAgIHNp
emVfdCBpbmRleCA9IGluZGV4T2YodGhpbmcpOworICAgICAgICAgICAgCisgICAgICAgICAgICBp
ZiAodmVyYm9zZSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2coIkluZGV4ICMiLCBpbmRleCwg
IjogIiwgdGhpbmcsICJcbiIpOworICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgQWN0aXZlOlxu
Iik7CisgICAgICAgICAgICAgICAgZm9yIChUbXAgdG1wIDogbV9hY3RpdmUpCisgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2coIiAgICAiLCB0bXAsICI6ICIsIG1fbWFwW3RtcF0sICJcbiIpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVGhpcyBpcyBF
eHBpcmVPbGRJbnRlcnZhbHMgaW4gRmlnLiAxLgorICAgICAgICAgICAgd2hpbGUgKCFtX2FjdGl2
ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBUbXAgdG1wID0gbV9hY3RpdmUuZmlyc3Qo
KTsKKyAgICAgICAgICAgICAgICBUbXBEYXRhJiBlbnRyeSA9IG1fbWFwW3RtcF07CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgYm9vbCBleHBpcmVkID0gZW50cnkuaW50ZXJ2YWwu
ZW5kKCkgPD0gaW5kZXg7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCFl
eHBpcmVkKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBtX2FjdGl2ZS5yZW1vdmVGaXJzdCgpOworICAgICAgICAgICAgICAgIG1f
YWN0aXZlUmVncy5yZW1vdmUoZW50cnkuYXNzaWduZWQpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICAvLyBUaGlzIHBhcnQgaXMgbm90IGluIHRoZSBwYXBlciBzaW5j
ZSB3ZSBoYXZlIGEgbW9yZSBwcmVjaXNlIGhhbmRsaW5nIG9mIGNsb2JiZXJzIGFuZAorICAgICAg
ICAgICAgLy8gcHJlY29sb3JlZCByZWdpc3RlcnMuCisgICAgICAgICAgICBpZiAodGhpbmcuaXND
bG9iYmVyKCkpIHsKKyAgICAgICAgICAgICAgICBDbG9iYmVyIGNsb2JiZXIgPSB0aGluZy5jbG9i
YmVyKCk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWNsb2JiZXIucmVncy5pc0Vt
cHR5KCkpOworICAgICAgICAgICAgICAgIGZvciAoVG1wIHRtcCA6IG1fYWN0aXZlKQorICAgICAg
ICAgICAgICAgICAgICBtX21hcFt0bXBdLmFkamFjZW50Lm1lcmdlKGNsb2JiZXIucmVncyk7Cisg
ICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgcHJvYmxlbXMgPSBtX2FjdGl2ZVJlZ3M7CisgICAg
ICAgICAgICAgICAgcHJvYmxlbXMuZmlsdGVyKGNsb2JiZXIucmVncyk7CisgICAgICAgICAgICAg
ICAgaWYgKCFwcm9ibGVtcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9hY3Rp
dmVSZWdzLm1lcmdlKGNsb2JiZXIucmVncyk7CisgICAgICAgICAgICAgICAgICAgIG1fYWN0aXZl
LnJlbW92ZUFsbE1hdGNoaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChUbXAgdG1w
KSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUbXBEYXRhJiBlbnRyeSA9
IG1fbWFwW3RtcF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
ZW50cnkuYXNzaWduZWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJvYmxl
bXMuY29udGFpbnMoZW50cnkuYXNzaWduZWQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnIGJldHRl
clJlZyA9IGZpbmRGcmVlUmVnaXN0ZXIodG1wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIWJldHRlclJlZykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGls
bCh0bXApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YXNzaWduV2l0aG91dEFkZGluZ1RvQWN0aXZlKHRtcCwgYmV0dGVyUmVnKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgICAgICAgICAgbV9hY3RpdmVSZWdzLmV4Y2x1ZGUoY2xvYmJlci5yZWdz
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFRtcCB0bXAgPSB0aGluZy50bXAoKTsK
KyAgICAgICAgICAgIFRtcERhdGEmIGVudHJ5ID0gbV9tYXBbdG1wXTsKKyAgICAgICAgICAgIGVu
dHJ5LmFkamFjZW50ID0gbV9hY3RpdmVSZWdzOworICAgICAgICAgICAgUmVnIHJlZyA9IGZpbmRG
cmVlUmVnaXN0ZXIodG1wKTsKKyAgICAgICAgICAgIGlmIChyZWcpIHsKKyAgICAgICAgICAgICAg
ICBhc3NpZ24odG1wLCByZWcpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUaGlzIGlzIFNwaWxsQXRJbnRlcnZh
bCBpbiBGaWcuIDEuCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9hY3RpdmUuaXNFbXB0
eSgpKTsKKyAgICAgICAgICAgIFRtcCBzcGlsbFRtcCA9IG1fYWN0aXZlLmxhc3QoKTsKKyAgICAg
ICAgICAgIFRtcERhdGEmIHNwaWxsRW50cnkgPSBtX21hcFtzcGlsbFRtcF07CisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChzcGlsbEVudHJ5LmFzc2lnbmVkKTsKKyAgICAgICAgICAgIGlmIChz
cGlsbEVudHJ5LmludGVydmFsLmVuZCgpIDw9IGVudHJ5LmludGVydmFsLmVuZCgpKSB7CisgICAg
ICAgICAgICAgICAgc3BpbGwodG1wKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9hY3RpdmUucmVtb3ZlTGFzdCgp
OworICAgICAgICAgICAgYXNzaWduKHRtcCwgc3BpbGxFbnRyeS5hc3NpZ25lZCk7CisgICAgICAg
ICAgICBzcGlsbChzcGlsbFRtcCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBh
c3NpZ25XaXRob3V0QWRkaW5nVG9BY3RpdmUoVG1wIHRtcCwgUmVnIHJlZykKKyAgICB7CisgICAg
ICAgIFRtcERhdGEmIGVudHJ5ID0gbV9tYXBbdG1wXTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
IWVudHJ5LnNwaWxsZWQpOworICAgICAgICBlbnRyeS5hc3NpZ25lZCA9IHJlZzsKKyAgICAgICAg
ZW50cnkuYWRqYWNlbnQgPSBtX2FjdGl2ZVJlZ3M7CisgICAgICAgIG1fYWN0aXZlUmVncy5hZGQo
cmVnKTsKKyAgICAgICAgZm9yIChUbXAgb3RoZXJUbXAgOiBtX2FjdGl2ZSkgeworICAgICAgICAg
ICAgaWYgKG90aGVyVG1wICE9IHRtcCkKKyAgICAgICAgICAgICAgICBtX21hcFtvdGhlclRtcF0u
YWRqYWNlbnQuYWRkKHJlZyk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBhc3Np
Z24oVG1wIHRtcCwgUmVnIHJlZykKKyAgICB7CisgICAgICAgIGFzc2lnbldpdGhvdXRBZGRpbmdU
b0FjdGl2ZSh0bXAsIHJlZyk7CisgICAgICAgIG1fYWN0aXZlLmFwcGVuZEFuZEJ1YmJsZSgKKyAg
ICAgICAgICAgIHRtcCwKKyAgICAgICAgICAgIFsmXSAoVG1wIG90aGVyVG1wKSAtPiBib29sIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gbV9tYXBbb3RoZXJUbXBdLmludGVydmFsLmVuZCgpID4g
bV9tYXBbdG1wXS5pbnRlcnZhbC5lbmQoKTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKyAgICAK
KyAgICB2b2lkIHNwaWxsKFRtcCB0bXApCisgICAgeworICAgICAgICBUbXBEYXRhJiBlbnRyeSA9
IG1fbWFwW3RtcF07CisgICAgICAgIGVudHJ5LnNwaWxsZWQgPSBtX2NvZGUuYWRkU3RhY2tTbG90
KDgsIFN0YWNrU2xvdEtpbmQ6OlNwaWxsKTsKKyAgICAgICAgZW50cnkuYXNzaWduZWQgPSBSZWco
KTsKKyAgICAgICAgbV9kaWRTcGlsbCA9IHRydWU7CisgICAgfQorICAgIAorICAgIHZvaWQgZW1p
dFNwaWxsQ29kZSgpCisgICAgeworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9j
b2RlKSB7CisgICAgICAgICAgICBzaXplX3QgaW5kZXhPZkhlYWQgPSB0aGlzLT5pbmRleE9mSGVh
ZChibG9jayk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IDA7IGluc3RJ
bmRleCA8IGJsb2NrLT5zaXplKCk7ICsraW5zdEluZGV4KSB7CisgICAgICAgICAgICAgICAgSW5z
dCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOworICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGluZGV4T2ZFYXJseSA9IGluZGV4T2ZIZWFkICsgaW5zdEluZGV4OworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIC8vIEZpcnN0IHRyeSB0byBzcGlsbCBkaXJlY3RseS4KKyAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5zdC5hcmdzLnNpemUoKTsgKytp
KSB7CisgICAgICAgICAgICAgICAgICAgIEFyZyYgYXJnID0gaW5zdC5hcmdzW2ldOworICAgICAg
ICAgICAgICAgICAgICBpZiAoIWFyZy5pc1RtcCgpKQorICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgICAgIGlmIChhcmcuaXNSZWcoKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBpZiAoYXJnLmJh
bmsoKSAhPSBiYW5rKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAgICAgICAgIFN0YWNrU2xvdCogc3BpbGxlZCA9IG1fbWFwW2FyZy50bXAoKV0uc3BpbGxl
ZDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFzcGlsbGVkKQorICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIGlmICghaW5zdC5hZG1pdHNTdGFj
ayhpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
ICAgICBhcmcgPSBBcmc6OnN0YWNrKHNwaWxsZWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBGYWxsIGJhY2sgb24gdGhlIGhhcmQgd2F5
LgorICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcCgKKyAgICAgICAgICAgICAgICAgICAg
WyZdIChUbXAmIHRtcCwgQXJnOjpSb2xlIHJvbGUsIEJhbmsgdG1wQmFuaywgV2lkdGgpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wQmFuayAh
PSBiYW5rKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFN0YWNrU2xvdCogc3BpbGxlZCA9IG1fbWFwW3RtcF0uc3BpbGxlZDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghc3BpbGxlZCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICBPcGNvZGUgbW92ZSA9IGJh
bmsgPT0gR1AgPyBNb3ZlIDogTW92ZURvdWJsZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRt
cCA9IGFkZFRtcFdpdGhJbnRlcnZhbChpbnRlcnZhbChpbmRleE9mRWFybHksIEFyZzo6dGltaW5n
KHJvbGUpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocm9sZSA9PSBBcmc6OlNjcmF0
Y2gpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKEFyZzo6aXNBbnlVc2Uocm9sZSkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9pbnNlcnRpb25TZXRzW2Jsb2NrXS5pbnNlcnQoaW5zdEluZGV4LCBtb3ZlLCBpbnN0
Lm9yaWdpbiwgQXJnOjpzdGFjayhzcGlsbGVkKSwgdG1wKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChBcmc6OmlzQW55RGVmKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1faW5zZXJ0aW9uU2V0c1tibG9ja10uaW5zZXJ0KGluc3RJbmRleCArIDEsIG1vdmUsIGluc3Qu
b3JpZ2luLCB0bXAsIEFyZzo6c3RhY2soc3BpbGxlZCkpOworICAgICAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGluc2Vy
dFNwaWxsQ29kZSgpCisgICAgeworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9j
b2RlKQorICAgICAgICAgICAgbV9pbnNlcnRpb25TZXRzW2Jsb2NrXS5leGVjdXRlKGJsb2NrKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBhc3NpZ25SZWdpc3RlcnMoKQorICAgIHsKKyAgICAgICAg
Zm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fY29kZSkgeworICAgICAgICAgICAgZm9yIChJbnN0
JiBpbnN0IDogKmJsb2NrKSB7CisgICAgICAgICAgICAgICAgaW5zdC5mb3JFYWNoVG1wRmFzdCgK
KyAgICAgICAgICAgICAgICAgICAgWyZdIChUbXAmIHRtcCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHRtcC5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXAuYmFuaygpICE9IGJhbmspCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgICAgICBSZWcgcmVnID0gbV9tYXBbdG1wXS5hc3NpZ25lZDsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVnKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZygiRmFpbGVkIHRvIGFsbG9jYXRlIHJlZyBmb3I6ICIsIHRtcCwgIlxu
Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IHRtcCA9IFRtcChyZWcpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBDb2RlJiBtX2NvZGU7CisgICAgVmVjdG9yPFJl
Zz4gbV9yZWdpc3RlcnM7CisgICAgUmVnaXN0ZXJTZXQgbV9yZWdpc3RlclNldDsKKyAgICBJbmRl
eE1hcDxCYXNpY0Jsb2NrKiwgc2l6ZV90PiBtX3N0YXJ0SW5kZXg7CisgICAgSW5kZXhNYXA8VG1w
OjpJbmRleGVkPGJhbms+LCBUbXBEYXRhPiBtX21hcDsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2Nr
KiwgSW5zZXJ0aW9uU2V0PiBtX2luc2VydGlvblNldHM7CisgICAgVmVjdG9yPENsb2JiZXI+IG1f
Y2xvYmJlcnM7IC8vIEFmdGVyIHdlIGFsbG9jYXRlIHRoaXMsIHdlIGhhcHBpbHkgcG9pbnQgcG9p
bnRlcnMgaW50byBpdC4KKyAgICBWZWN0b3I8VG1wT3JDbG9iYmVyPiBtX2ludGVydmFsczsKKyAg
ICBEZXF1ZTxUbXA+IG1fYWN0aXZlOworICAgIFJlZ2lzdGVyU2V0IG1fYWN0aXZlUmVnczsKKyAg
ICBib29sIG1fZGlkU3BpbGwgeyBmYWxzZSB9OworfTsKKwordGVtcGxhdGU8QmFuayBiYW5rPgor
dm9pZCBydW5MaW5lYXJTY2FuKENvZGUmIGNvZGUpCit7CisgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgIGRhdGFMb2coIkFpciBiZWZvcmUgbGluZWFyIHNjYW4gZm9yICIsIGJhbmssICI6XG4iLCBj
b2RlKTsKKyAgICBMaW5lYXJTY2FuPGJhbms+IGxpbmVhclNjYW4oY29kZSk7CisgICAgbGluZWFy
U2Nhbi5ydW4oKTsKK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgYWxsb2Nh
dGVSZWdpc3RlcnNCeUxpbmVhclNjYW4oQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBo
YXNlU2NvcGUoY29kZSwgImFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuIik7CisgICAgcGFk
SW50ZXJmZXJlbmNlKGNvZGUpOworICAgIHJ1bkxpbmVhclNjYW48RlA+KGNvZGUpOworICAgIHJ1
bkxpbmVhclNjYW48R1A+KGNvZGUpOworICAgIGZpeFNwaWxsc0FmdGVyVGVybWluYWxzKGNvZGUp
OworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0
ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJz
QnlMaW5lYXJTY2FuLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkNQVS5oIgorI2luY2x1ZGUgIk9wdGlvbnMuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFz
cyBDb2RlOworCisvLyBUaGlzIGltcGxlbWVudHMgdGhlIFBvbGV0dG8gYW5kIFNhcmtlciByZWdp
c3RlciBhbGxvY2F0b3IgY2FsbGVkICJsaW5lYXIgc2NhbiI6CisvLyBodHRwOi8vZGwuYWNtLm9y
Zy9jaXRhdGlvbi5jZm0/aWQ9MzMwMjUwCisvLworLy8gVGhpcyBpcyBub3QgQWlyJ3MgcHJpbWFy
eSByZWdpc3RlciBhbGxvY2F0b3IuIFdlIHVzZSBpdCBvbmx5IHdoZW4gcnVubmluZyBhdCBvcHRM
ZXZlbD0wLiBUaGF0J3Mgbm90CisvLyB0aGUgZGVmYXVsdCBsZXZlbC4gVGhpcyByZWdpc3RlciBh
bGxvY2F0b3IgaXMgb3B0aW1pemVkIHByaW1hcmlseSBmb3IgcnVubmluZyBxdWlja2x5LiBJdCdz
IGV4cGVjdGVkCisvLyB0aGF0IGltcHJvdmVtZW50cyB0byB0aGlzIHJlZ2lzdGVyIGFsbG9jYXRv
ciBzaG91bGQgZm9jdXMgcHJpbWFyaWx5IG9uIGltcHJvdmluZyBpdHMgZXhlY3V0aW9uIHRpbWUK
Ky8vIHdpdGhvdXQgbXVjaCByZWdhcmQgZm9yIHRoZSBxdWFsaXR5IG9mIGdlbmVyYXRlZCBjb2Rl
LgorLy8KKy8vIEZvciBBaXIncyBwcmltYXJ5IHJlZ2lzdGVyIGFsbG9jYXRvciwgc2VlIEFpckFs
bG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmh8Y3BwLgordm9pZCBhbGxvY2F0ZVJlZ2lz
dGVyc0J5TGluZWFyU2NhbihDb2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpB
aXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAJKHJldmlzaW9uIDIxNDQyNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE2MSw3ICsxNjEsNyBAQCB2b2lkIGFsbG9jYXRlU3RhY2soQ29kZSYg
Y29kZSkKIAogICAgIC8vIE5vdyB3ZSBoYW5kbGUgdGhlIHNwaWxsIHNsb3RzLgogICAgIFN0YWNr
U2xvdExpdmVuZXNzIGxpdmVuZXNzKGNvZGUpOwotICAgIEluZGV4TWFwPFN0YWNrU2xvdCwgSGFz
aFNldDxTdGFja1Nsb3QqPj4gaW50ZXJmZXJlbmNlKGNvZGUuc3RhY2tTbG90cygpLnNpemUoKSk7
CisgICAgSW5kZXhNYXA8U3RhY2tTbG90KiwgSGFzaFNldDxTdGFja1Nsb3QqPj4gaW50ZXJmZXJl
bmNlKGNvZGUuc3RhY2tTbG90cygpLnNpemUoKSk7CiAgICAgVmVjdG9yPFN0YWNrU2xvdCo+IHNs
b3RzOwogCiAgICAgLy8gV2Ugd2lsbCBwZXJmb3JtIHNvbWUgc3BpbGwgY29hbGVzY2luZy4gVG8g
bWFrZSB0aGF0IGVmZmVjdGl2ZSwgd2UgbmVlZCB0byBiZSBhYmxlIHRvIGlkZW50aWZ5CkBAIC0z
MDksNyArMzA5LDcgQEAgdm9pZCBhbGxvY2F0ZVN0YWNrKENvZGUmIGNvZGUpCiAgICAgICAgICAg
ICByZXR1cm4gYS5mcmVxdWVuY3kgPiBiLmZyZXF1ZW5jeTsKICAgICAgICAgfSk7CiAgICAgCi0g
ICAgSW5kZXhNYXA8U3RhY2tTbG90LCBTdGFja1Nsb3QqPiByZW1hcHBlZFN0YWNrU2xvdHMoY29k
ZS5zdGFja1Nsb3RzKCkuc2l6ZSgpKTsKKyAgICBJbmRleE1hcDxTdGFja1Nsb3QqLCBTdGFja1Ns
b3QqPiByZW1hcHBlZFN0YWNrU2xvdHMoY29kZS5zdGFja1Nsb3RzKCkuc2l6ZSgpKTsKICAgICBh
dXRvIHJlbWFwID0gWyZdIChTdGFja1Nsb3QqIHNsb3QpIC0+IFN0YWNrU2xvdCogewogICAgICAg
ICBpZiAoIXNsb3QpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgy
LDYgKzI4MiwzNyBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQXJnCiAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAordm9pZCBwcmludEludGVybmFs
KFByaW50U3RyZWFtJiBvdXQsIEFyZzo6UGhhc2UgcGhhc2UpCit7CisgICAgc3dpdGNoIChwaGFz
ZSkgeworICAgIGNhc2UgQXJnOjpFYXJseToKKyAgICAgICAgb3V0LnByaW50KCJFYXJseSIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcmc6OkxhdGU6CisgICAgICAgIG91dC5wcmludCgi
TGF0ZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEFy
Zzo6VGltaW5nIHRpbWluZykKK3sKKyAgICBzd2l0Y2ggKHRpbWluZykgeworICAgIGNhc2UgQXJn
OjpPbmx5RWFybHk6CisgICAgICAgIG91dC5wcmludCgiT25seUVhcmx5Iik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIEFyZzo6T25seUxhdGU6CisgICAgICAgIG91dC5wcmludCgiT25seUxh
dGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJnOjpFYXJseUFuZExhdGU6CisgICAg
ICAgIG91dC5wcmludCgiRWFybHlBbmRMYXRlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCiB2b2lkIHByaW50SW50ZXJu
YWwoUHJpbnRTdHJlYW0mIG91dCwgQXJnOjpSb2xlIHJvbGUpCiB7CiAgICAgc3dpdGNoIChyb2xl
KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHJldmlzaW9uIDIx
NDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTkyLDYgKzkyLDE3IEBAIHB1YmxpYzoKICAgICAgICAgQ29sZCwKICAgICAgICAg
V2FybQogICAgIH07CisgICAgCisgICAgZW51bSBQaGFzZSA6IGludDhfdCB7CisgICAgICAgIEVh
cmx5LAorICAgICAgICBMYXRlCisgICAgfTsKKyAgICAKKyAgICBlbnVtIFRpbWluZyA6IGludDhf
dCB7CisgICAgICAgIE9ubHlFYXJseSwKKyAgICAgICAgT25seUxhdGUsCisgICAgICAgIEVhcmx5
QW5kTGF0ZQorICAgIH07CiAKICAgICBlbnVtIFJvbGUgOiBpbnQ4X3QgewogICAgICAgICAvLyBV
c2UgbWVhbnMgdGhhdCB0aGUgSW5zdCB3aWxsIHJlYWQgZnJvbSB0aGlzIHZhbHVlIGJlZm9yZSBk
b2luZyBhbnl0aGluZyBlbHNlLgpAQCAtMjUzLDcgKzI2NCw4MiBAQCBwdWJsaWM6CiAgICAgewog
ICAgICAgICByZXR1cm4gaXNDb2xkVXNlKHJvbGUpID8gQ29sZCA6IFdhcm07CiAgICAgfQotCisg
ICAgCisgICAgc3RhdGljIGJvb2wgYWN0aXZlQXQoUm9sZSByb2xlLCBQaGFzZSBwaGFzZSkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAocm9sZSkgeworICAgICAgICBjYXNlIFVzZToKKyAgICAgICAg
Y2FzZSBDb2xkVXNlOgorICAgICAgICBjYXNlIEVhcmx5RGVmOgorICAgICAgICBjYXNlIEVhcmx5
WkRlZjoKKyAgICAgICAgY2FzZSBVc2VBZGRyOgorICAgICAgICAgICAgcmV0dXJuIHBoYXNlID09
IEVhcmx5OworICAgICAgICBjYXNlIExhdGVVc2U6CisgICAgICAgIGNhc2UgTGF0ZUNvbGRVc2U6
CisgICAgICAgIGNhc2UgRGVmOgorICAgICAgICBjYXNlIFpEZWY6CisgICAgICAgICAgICByZXR1
cm4gcGhhc2UgPT0gTGF0ZTsKKyAgICAgICAgY2FzZSBVc2VEZWY6CisgICAgICAgIGNhc2UgVXNl
WkRlZjoKKyAgICAgICAgY2FzZSBTY3JhdGNoOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAg
IHN0YXRpYyBib29sIGFjdGl2ZUF0KFRpbWluZyB0aW1pbmcsIFBoYXNlIHBoYXNlKQorICAgIHsK
KyAgICAgICAgc3dpdGNoICh0aW1pbmcpIHsKKyAgICAgICAgY2FzZSBPbmx5RWFybHk6CisgICAg
ICAgICAgICByZXR1cm4gcGhhc2UgPT0gRWFybHk7CisgICAgICAgIGNhc2UgT25seUxhdGU6Cisg
ICAgICAgICAgICByZXR1cm4gcGhhc2UgPT0gTGF0ZTsKKyAgICAgICAgY2FzZSBFYXJseUFuZExh
dGU6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFRpbWluZyB0aW1pbmcoUm9s
ZSByb2xlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChyb2xlKSB7CisgICAgICAgIGNhc2UgVXNl
OgorICAgICAgICBjYXNlIENvbGRVc2U6CisgICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAg
IGNhc2UgRWFybHlaRGVmOgorICAgICAgICBjYXNlIFVzZUFkZHI6CisgICAgICAgICAgICByZXR1
cm4gT25seUVhcmx5OworICAgICAgICBjYXNlIExhdGVVc2U6CisgICAgICAgIGNhc2UgTGF0ZUNv
bGRVc2U6CisgICAgICAgIGNhc2UgRGVmOgorICAgICAgICBjYXNlIFpEZWY6CisgICAgICAgICAg
ICByZXR1cm4gT25seUxhdGU7CisgICAgICAgIGNhc2UgVXNlRGVmOgorICAgICAgICBjYXNlIFVz
ZVpEZWY6CisgICAgICAgIGNhc2UgU2NyYXRjaDoKKyAgICAgICAgICAgIHJldHVybiBFYXJseUFu
ZExhdGU7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQor
ICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgc3RhdGljIHZvaWQgZm9yRWFj
aFBoYXNlKFRpbWluZyB0aW1pbmcsIGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgeworICAgICAgICBp
ZiAoYWN0aXZlQXQodGltaW5nLCBFYXJseSkpCisgICAgICAgICAgICBmdW5jKEVhcmx5KTsKKyAg
ICAgICAgaWYgKGFjdGl2ZUF0KHRpbWluZywgTGF0ZSkpCisgICAgICAgICAgICBmdW5jKExhdGUp
OworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIHN0YXRpYyB2
b2lkIGZvckVhY2hQaGFzZShSb2xlIHJvbGUsIGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgeworICAg
ICAgICBpZiAoYWN0aXZlQXQocm9sZSwgRWFybHkpKQorICAgICAgICAgICAgZnVuYyhFYXJseSk7
CisgICAgICAgIGlmIChhY3RpdmVBdChyb2xlLCBMYXRlKSkKKyAgICAgICAgICAgIGZ1bmMoTGF0
ZSk7CisgICAgfQorICAgIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgUm9sZSBpbXBsaWVz
IHRoYXQgdGhlIEluc3Qgd2lsbCBVc2UgdGhlIEFyZyBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxz
ZS4KICAgICBzdGF0aWMgYm9vbCBpc0Vhcmx5VXNlKFJvbGUgcm9sZSkKICAgICB7CkBAIC0xMzU0
LDYgKzE0NDAsOCBAQCBuYW1lc3BhY2UgV1RGIHsKIAogSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBw
cmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6QWlyOjpBcmc6OktpbmQpOwogSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6
QWlyOjpBcmc6OlRlbXBlcmF0dXJlKTsKK0pTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJpbnRJbnRl
cm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OkFpcjo6QXJnOjpQaGFzZSk7CitKU19FWFBPUlRf
UFJJVkFURSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpBaXI6OkFy
Zzo6VGltaW5nKTsKIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0
cmVhbSYsIEpTQzo6QjM6OkFpcjo6QXJnOjpSb2xlKTsKIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
cHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OkFpcjo6QXJnOjpTaWduZWRuZXNz
KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja1dvcmtsaXN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja1dv
cmtsaXN0LmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQmxvY2tXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewogCi10eXBlZGVmIEdy
YXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrPj4gQmxvY2tX
b3JrbGlzdDsKK3R5cGVkZWYgR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0
PEJhc2ljQmxvY2sqPj4gQmxvY2tXb3JrbGlzdDsKIAogLy8gV2hlbiB5b3Ugc2F5IEJsb2NrV2l0
aDxpbnQ+IHlvdSBzaG91bGQgcmVhZCBpdCBhcyAiYmxvY2sgd2l0aCBhbiBpbnQiLgogdGVtcGxh
dGU8dHlwZW5hbWUgVD4gdXNpbmcgQmxvY2tXaXRoID0gR3JhcGhOb2RlV2l0aDxCYXNpY0Jsb2Nr
KiwgVD47CkBAIC00MSwxMSArNDEsMTEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcgQmxv
Y2tXaXRoID0gRwogLy8gcGVybWl0cyBmb3JjaWJseSBlbnF1ZXVlaW5nIHRoaW5ncyBldmVuIGlm
IHRoZSBibG9jayBoYXMgYWxyZWFkeSBiZWVuIHNlZW4uIEl0J3MgdXNlZnVsIGZvcgogLy8gdGhp
bmdzIGxpa2UgYnVpbGRpbmcgYSBzcGFubmluZyB0cmVlLCBpbiB3aGljaCBjYXNlIFQgKHRoZSBh
dXhpbGlhcnkgcGF5bG9hZCkgd291bGQgYmUgdGhlCiAvLyBzdWNjZXNzb3IgaW5kZXguCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBFeHRlbmRlZEJsb2NrV29ya2xpc3QgPSBFeHRlbmRlZEdy
YXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBULCBJbmRleFNldDxCYXNpY0Jsb2NrPj47Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBFeHRlbmRlZEJsb2NrV29ya2xpc3QgPSBFeHRlbmRl
ZEdyYXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBULCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+
OwogCiB0eXBlZGVmIEdyYXBoTm9kZVdpdGhPcmRlcjxCYXNpY0Jsb2NrKj4gQmxvY2tXaXRoT3Jk
ZXI7CiAKLXR5cGVkZWYgUG9zdE9yZGVyR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIElu
ZGV4U2V0PEJhc2ljQmxvY2s+PiBQb3N0T3JkZXJCbG9ja1dvcmtsaXN0OwordHlwZWRlZiBQb3N0
T3JkZXJHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jayo+
PiBQb3N0T3JkZXJCbG9ja1dvcmtsaXN0OwogCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6
QWlyCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0ZHLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDRkcuaAkocmV2aXNpb24g
MjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDRkcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzksOCArMzksOCBAQCBjbGFzcyBDRkcgewogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgogICAgIHR5cGVkZWYgQmFzaWNCbG9jayogTm9kZTsKLSAgICB0
eXBlZGVmIEluZGV4U2V0PEJhc2ljQmxvY2s+IFNldDsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiB1c2luZyBNYXAgPSBJbmRleE1hcDxCYXNpY0Jsb2NrLCBUPjsKKyAgICB0eXBlZGVmIEluZGV4
U2V0PEJhc2ljQmxvY2sqPiBTZXQ7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcgTWFw
ID0gSW5kZXhNYXA8QmFzaWNCbG9jayosIFQ+OwogICAgIHR5cGVkZWYgVmVjdG9yPEJhc2ljQmxv
Y2sqLCA0PiBMaXN0OwogCiAgICAgQ0ZHKENvZGUmIGNvZGUpCkBAIC01MSw3ICs1MSw3IEBAIHB1
YmxpYzoKICAgICBOb2RlIHJvb3QoKSB7IHJldHVybiBtX2NvZGVbMF07IH0KIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+Ci0gICAgTWFwPFQ+IG5ld01hcCgpIHsgcmV0dXJuIEluZGV4TWFwPEpT
Qzo6QjM6OkFpcjo6QmFzaWNCbG9jaywgVD4obV9jb2RlLnNpemUoKSk7IH0KKyAgICBNYXA8VD4g
bmV3TWFwKCkgeyByZXR1cm4gSW5kZXhNYXA8SlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrKiwgVD4o
bV9jb2RlLnNpemUoKSk7IH0KIAogICAgIFN1Y2Nlc3NvckNvbGxlY3Rpb248QmFzaWNCbG9jaywg
QmFzaWNCbG9jazo6U3VjY2Vzc29yTGlzdD4gc3VjY2Vzc29ycyhOb2RlIG5vZGUpIHsgcmV0dXJu
IG5vZGUtPnN1Y2Nlc3NvckJsb2NrcygpOyB9CiAgICAgQmFzaWNCbG9jazo6UHJlZGVjZXNzb3JM
aXN0JiBwcmVkZWNlc3NvcnMoTm9kZSBub2RlKSB7IHJldHVybiBub2RlLT5wcmVkZWNlc3NvcnMo
KTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbGltaW5hdGVEZWFk
Q29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJF
bGltaW5hdGVEZWFkQ29kZS5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyRWxpbWluYXRlRGVhZENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MCw3ICs0MCw3IEBAIGJvb2wgZWxpbWluYXRlRGVhZENvZGUoQ29kZSYgY29kZSkKICAgICBQ
aGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgImVsaW1pbmF0ZURlYWRDb2RlIik7CiAKICAgICBI
YXNoU2V0PFRtcD4gbGl2ZVRtcHM7Ci0gICAgSW5kZXhTZXQ8U3RhY2tTbG90PiBsaXZlU3RhY2tT
bG90czsKKyAgICBJbmRleFNldDxTdGFja1Nsb3QqPiBsaXZlU3RhY2tTbG90czsKICAgICBib29s
IGNoYW5nZWQ7CiAKICAgICBhdXRvIGlzQXJnTGl2ZSA9IFsmXSAoY29uc3QgQXJnJiBhcmcpIC0+
IGJvb2wgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhPYnZpb3Vz
U3BpbGxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckZpeE9idmlvdXNTcGlsbHMuY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckZpeE9idmlvdXNTcGlsbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01NDcsNyArNTQ3LDcgQEAgcHJpdmF0ZToKICAgICB9OwogCiAgICAgQ29kZSYgbV9jb2RlOwot
ICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIFN0YXRlPiBtX2F0SGVhZDsKKyAgICBJbmRleE1hcDxC
YXNpY0Jsb2NrKiwgU3RhdGU+IG1fYXRIZWFkOwogICAgIFN0YXRlIG1fc3RhdGU7CiAgICAgQmFz
aWNCbG9jayogbV9ibG9jayB7IG51bGxwdHIgfTsKICAgICB1bnNpZ25lZCBtX2luc3RJbmRleCB7
IDAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4UGFydGlhbFJl
Z2lzdGVyU3RhbGxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckZpeFBhcnRpYWxSZWdpc3RlclN0YWxscy5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU1LDEwICsxNTUsMTAgQEAgdm9pZCBmaXhQYXJ0aWFs
UmVnaXN0ZXJTdGFsbHMoQ29kZSYgY29kZQogCiAgICAgLy8gRm9yIGVhY2ggYmxvY2ssIHRoaXMg
cHJvdmlkZXMgdGhlIGRpc3RhbmNlIHRvIHRoZSBsYXN0IGluc3RydWN0aW9uIHNldHRpbmcgZWFj
aCByZWdpc3RlcgogICAgIC8vIG9uIGJsb2NrICplbnRyeSouCi0gICAgSW5kZXhNYXA8QmFzaWNC
bG9jaywgRlBEZWZEaXN0YW5jZT4gbGFzdERlZkRpc3RhbmNlKGNvZGUuc2l6ZSgpKTsKKyAgICBJ
bmRleE1hcDxCYXNpY0Jsb2NrKiwgRlBEZWZEaXN0YW5jZT4gbGFzdERlZkRpc3RhbmNlKGNvZGUu
c2l6ZSgpKTsKIAogICAgIC8vIEJsb2NrcyB3aXRoIGRpcnR5IGRpc3RhbmNlIGF0IGhlYWQuCi0g
ICAgSW5kZXhTZXQ8QmFzaWNCbG9jaz4gZGlydHk7CisgICAgSW5kZXhTZXQ8QmFzaWNCbG9jayo+
IGRpcnR5OwogCiAgICAgLy8gRmlyc3QsIHdlIGNvbXB1dGUgdGhlIGxvY2FsIGRpc3RhbmNlIGZv
ciBlYWNoIGJsb2NrIGFuZCBwdXNoIGl0IHRvIHRoZSBzdWNjZXNzb3JzLgogICAgIGZvciAoQmFz
aWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmNwcAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeFNwaWxsc0Fm
dGVyVGVybWluYWxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkFpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmgiCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCisjaW5jbHVkZSAiQWlyQmxvY2tJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJB
aXJDb2RlLmgiCisjaW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQWlySW5z
dElubGluZXMuaCIKKyNpbmNsdWRlICJBaXJUbXBJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBmaXhTcGlsbHNBZnRlclRl
cm1pbmFscyhDb2RlJiBjb2RlKQoreworICAgIC8vIEJlY2F1c2UgdGhlcmUgbWF5IGJlIHRlcm1p
bmFscyB0aGF0IHByb2R1Y2UgdmFsdWVzLCBJUkMgbWF5CisgICAgLy8gd2FudCB0byBzcGlsbCB0
aG9zZSB0ZXJtaW5hbHMuIEl0J2xsIGhhcHBlbiB0byBzcGlsbCBpdCBhZnRlcgorICAgIC8vIHRo
ZSB0ZXJtaW5hbC4gSWYgd2UgbGVmdCB0aGUgZ3JhcGggaW4gdGhpcyBzdGF0ZSwgaXQnZCBiZSBp
bnZhbGlkCisgICAgLy8gYmVjYXVzZSBhIHRlcm1pbmFsIG11c3QgYmUgdGhlIGxhc3QgaW5zdHJ1
Y3Rpb24gaW4gYSBibG9jay4KKyAgICAvLyBXZSBmaXggdGhhdCBoZXJlLgorCisgICAgQmxvY2tJ
bnNlcnRpb25TZXQgYmxvY2tJbnNlcnRpb25TZXQoY29kZSk7CisgICAgSW5zZXJ0aW9uU2V0IGlu
c2VydGlvblNldChjb2RlKTsKKworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7
CisgICAgICAgIHVuc2lnbmVkIHRlcm1pbmFsSW5kZXggPSBibG9jay0+c2l6ZSgpOworICAgICAg
ICBib29sIGZvdW5kVGVybWluYWwgPSBmYWxzZTsKKyAgICAgICAgd2hpbGUgKHRlcm1pbmFsSW5k
ZXgtLSkgeworICAgICAgICAgICAgaWYgKGJsb2NrLT5hdCh0ZXJtaW5hbEluZGV4KS5pc1Rlcm1p
bmFsKCkpIHsKKyAgICAgICAgICAgICAgICBmb3VuZFRlcm1pbmFsID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBBU1NFUlRf
VU5VU0VEKGZvdW5kVGVybWluYWwsIGZvdW5kVGVybWluYWwpOworCisgICAgICAgIGlmICh0ZXJt
aW5hbEluZGV4ID09IGJsb2NrLT5zaXplKCkgLSAxKQorICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgLy8gVGhlcmUgbXVzdCBiZSBpbnN0cnVjdGlvbnMgYWZ0ZXIgdGhlIHRlcm1pbmFs
IGJlY2F1c2UgaXQncyBub3QgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24uCisgICAgICAgIEFTU0VSVCh0
ZXJtaW5hbEluZGV4IDwgYmxvY2stPnNpemUoKSAtIDEpOworICAgICAgICBWZWN0b3I8SW5zdCwg
MT4gaW5zdHNUb01vdmU7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHRlcm1pbmFsSW5kZXgg
KyAxOyBpIDwgYmxvY2stPnNpemUoKTsgaSsrKQorICAgICAgICAgICAgaW5zdHNUb01vdmUuYXBw
ZW5kKGJsb2NrLT5hdChpKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluc3RzVG9Nb3ZlLnNp
emUoKSk7CisKKyAgICAgICAgZm9yIChGcmVxdWVudGVkQmxvY2smIGZyZXF1ZW50ZWRTdWNjZXNz
b3IgOiBibG9jay0+c3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNj
ZXNzb3IgPSBmcmVxdWVudGVkU3VjY2Vzc29yLmJsb2NrKCk7CisgICAgICAgICAgICAvLyBJZiBz
dWNjZXNzb3IncyBvbmx5IHByZWRlY2Vzc29yIGlzIGJsb2NrLCB3ZSBjYW4gcGxhbnQgdGhlIHNw
aWxsIGluc2lkZQorICAgICAgICAgICAgLy8gdGhlIHN1Y2Nlc3Nvci4gT3RoZXJ3aXNlLCB3ZSBt
dXN0IHNwbGl0IHRoZSBjcml0aWNhbCBlZGdlIGFuZCBjcmVhdGUKKyAgICAgICAgICAgIC8vIGEg
bmV3IGJsb2NrIGZvciB0aGUgc3BpbGwuCisgICAgICAgICAgICBpZiAoc3VjY2Vzc29yLT5udW1Q
cmVkZWNlc3NvcnMoKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2Vy
dEluc3RzKDAsIGluc3RzVG9Nb3ZlKTsKKyAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuZXhl
Y3V0ZShzdWNjZXNzb3IpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBC
YXNpY0Jsb2NrKiBuZXdCbG9jayA9IGJsb2NrSW5zZXJ0aW9uU2V0Lmluc2VydEJlZm9yZShzdWNj
ZXNzb3IsIHN1Y2Nlc3Nvci0+ZnJlcXVlbmN5KCkpOworICAgICAgICAgICAgICAgIGZvciAoY29u
c3QgSW5zdCYgaW5zdCA6IGluc3RzVG9Nb3ZlKQorICAgICAgICAgICAgICAgICAgICBuZXdCbG9j
ay0+YXBwZW5kSW5zdChpbnN0KTsKKyAgICAgICAgICAgICAgICBuZXdCbG9jay0+YXBwZW5kSW5z
dChJbnN0KEp1bXAsIGluc3RzVG9Nb3ZlLmxhc3QoKS5vcmlnaW4pKTsKKyAgICAgICAgICAgICAg
ICBuZXdCbG9jay0+c3VjY2Vzc29ycygpLmFwcGVuZChzdWNjZXNzb3IpOworICAgICAgICAgICAg
ICAgIGZyZXF1ZW50ZWRTdWNjZXNzb3IuYmxvY2soKSA9IG5ld0Jsb2NrOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgYmxvY2stPnJlc2l6ZSh0ZXJtaW5hbEluZGV4ICsgMSk7
CisgICAgfQorCisgICAgaWYgKGJsb2NrSW5zZXJ0aW9uU2V0LmV4ZWN1dGUoKSkKKyAgICAgICAg
Y29kZS5yZXNldFJlYWNoYWJpbGl0eSgpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
Mzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFs
cy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4
U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsg
bmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKKy8vIEJlY2F1c2UgdGhlcmUgbWF5IGJl
IHRlcm1pbmFscyB0aGF0IHByb2R1Y2UgdmFsdWVzLCB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yIG1h
eQorLy8gd2FudCB0byBzcGlsbCB0aG9zZSB0ZXJtaW5hbHMuIEl0J2xsIGhhcHBlbiB0byBzcGls
bCBpdCBhZnRlcgorLy8gdGhlIHRlcm1pbmFsLiBJZiB3ZSBsZWZ0IHRoZSBncmFwaCBpbiB0aGlz
IHN0YXRlLCBpdCdkIGJlIGludmFsaWQKKy8vIGJlY2F1c2UgYSB0ZXJtaW5hbCBtdXN0IGJlIHRo
ZSBsYXN0IGluc3RydWN0aW9uIGluIGEgYmxvY2suCisvLyBXZSBmaXggdGhhdCBoZXJlLgordm9p
ZCBmaXhTcGlsbHNBZnRlclRlcm1pbmFscyhDb2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCShyZXZpc2lvbiAyMTQ0Mjcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShCM19KSVQpCiAKICNpbmNsdWRl
ICJBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5oIgorI2luY2x1ZGUgIkFpckFs
bG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmgiCiAjaW5jbHVkZSAiQWlyQWxsb2NhdGVTdGFj
ay5oIgogI2luY2x1ZGUgIkFpckNvZGUuaCIKICNpbmNsdWRlICJBaXJFbGltaW5hdGVEZWFkQ29k
ZS5oIgpAQCAtNTcsNyArNTgsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsg
bmFtZXNwYWNlIEFpciB7CiAKLXZvaWQgcHJlcGFyZUZvckdlbmVyYXRpb24oQ29kZSYgY29kZSkK
K3ZvaWQgcHJlcGFyZUZvckdlbmVyYXRpb24oQ29kZSYgY29kZSwgdW5zaWduZWQgb3B0TGV2ZWwp
CiB7CiAgICAgVGltaW5nU2NvcGUgdGltaW5nU2NvcGUoIkFpcjo6cHJlcGFyZUZvckdlbmVyYXRp
b24iKTsKICAgICAKQEAgLTg5LDE4ICs5MCwyMiBAQCB2b2lkIHByZXBhcmVGb3JHZW5lcmF0aW9u
KENvZGUmIGNvZGUpCiAgICAgLy8gRm9yIGRlYnVnZ2luZywgeW91IGNhbiB1c2Ugc3BpbGxFdmVy
eXRoaW5nKCkgdG8gcHV0IGV2ZXJ5dGhpbmcgdG8gdGhlIHN0YWNrIGJldHdlZW4gZWFjaCBJbnN0
LgogICAgIGlmIChPcHRpb25zOjphaXJTcGlsbHNFdmVyeXRoaW5nKCkpCiAgICAgICAgIHNwaWxs
RXZlcnl0aGluZyhjb2RlKTsKLSAgICBlbHNlCisgICAgZWxzZSBpZiAob3B0TGV2ZWwgPj0gMiAm
JiBmYWxzZSkgLy8gT09QUyEhIFRoaXMgd2FzIGp1c3QgZm9yIHRlc3RpbmcuCiAgICAgICAgIGFs
bG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nKGNvZGUpOworICAgIGVsc2UKKyAgICAgICAg
YWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4oY29kZSk7CiAKICAgICBpZiAoT3B0aW9uczo6
bG9nQWlyUmVnaXN0ZXJQcmVzc3VyZSgpKSB7CiAgICAgICAgIGRhdGFMb2coIlJlZ2lzdGVyIHBy
ZXNzdXJlIGFmdGVyIHJlZ2lzdGVyIGFsbG9jYXRpb246XG4iKTsKICAgICAgICAgbG9nUmVnaXN0
ZXJQcmVzc3VyZShjb2RlKTsKICAgICB9Ci0KLSAgICAvLyBUaGlzIHJlcGxhY2VzIHVzZXMgb2Yg
c3BpbGwgc2xvdHMgd2l0aCByZWdpc3RlcnMgb3IgY29uc3RhbnRzIGlmIHBvc3NpYmxlLiBJdCBk
b2VzIHRoaXMgYnkKLSAgICAvLyBtaW5pbWl6aW5nIHRoZSBhbW91bnQgdGhhdCB3ZSBwZXJ0dXJi
IHRoZSBhbHJlYWR5LWNob3NlbiByZWdpc3RlciBhbGxvY2F0aW9uLiBJdCBtYXkgZXh0ZW5kCi0g
ICAgLy8gdGhlIGxpdmUgcmFuZ2VzIG9mIHJlZ2lzdGVycyB0aG91Z2guCi0gICAgZml4T2J2aW91
c1NwaWxscyhjb2RlKTsKKyAgICAKKyAgICBpZiAob3B0TGV2ZWwgPj0gMikgeworICAgICAgICAv
LyBUaGlzIHJlcGxhY2VzIHVzZXMgb2Ygc3BpbGwgc2xvdHMgd2l0aCByZWdpc3RlcnMgb3IgY29u
c3RhbnRzIGlmIHBvc3NpYmxlLiBJdCBkb2VzIHRoaXMgYnkKKyAgICAgICAgLy8gbWluaW1pemlu
ZyB0aGUgYW1vdW50IHRoYXQgd2UgcGVydHVyYiB0aGUgYWxyZWFkeS1jaG9zZW4gcmVnaXN0ZXIg
YWxsb2NhdGlvbi4gSXQgbWF5IGV4dGVuZAorICAgICAgICAvLyB0aGUgbGl2ZSByYW5nZXMgb2Yg
cmVnaXN0ZXJzIHRob3VnaC4KKyAgICAgICAgZml4T2J2aW91c1NwaWxscyhjb2RlKTsKKyAgICB9
CiAKICAgICBsb3dlckFmdGVyUmVnQWxsb2MoY29kZSk7CiAKQEAgLTE2NSw3ICsxNzAsNyBAQCB2
b2lkIGdlbmVyYXRlKENvZGUmIGNvZGUsIENDYWxsSGVscGVycyYgCiAgICAgICAgIGlmIChibG9j
aykKICAgICAgICAgICAgIGNvbnRleHQuYmxvY2tMYWJlbHNbYmxvY2tdID0gQm94PENDYWxsSGVs
cGVyczo6TGFiZWw+OjpjcmVhdGUoKTsKICAgICB9Ci0gICAgSW5kZXhNYXA8QmFzaWNCbG9jaywg
Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdD4gYmxvY2tKdW1wcyhjb2RlLnNpemUoKSk7CisgICAgSW5k
ZXhNYXA8QmFzaWNCbG9jayosIENDYWxsSGVscGVyczo6SnVtcExpc3Q+IGJsb2NrSnVtcHMoY29k
ZS5zaXplKCkpOwogCiAgICAgYXV0byBsaW5rID0gWyZdIChDQ2FsbEhlbHBlcnM6Okp1bXAganVt
cCwgQmFzaWNCbG9jayogdGFyZ2V0KSB7CiAgICAgICAgIGlmIChjb250ZXh0LmJsb2NrTGFiZWxz
W3RhcmdldF0tPmlzU2V0KCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyR2VuZXJhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckdlbmVyYXRlLmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyR2VuZXJhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDYgKzI3LDggQEAK
IAogI2lmIEVOQUJMRShCM19KSVQpCiAKKyNpbmNsdWRlICJCM0NvbW1vbi5oIgorCiBuYW1lc3Bh
Y2UgSlNDIHsKIAogY2xhc3MgQ0NhbGxIZWxwZXJzOwpAQCAtMzcsNyArMzksNyBAQCBjbGFzcyBD
b2RlOwogCiAvLyBUaGlzIHRha2VzIGFuIEFpcjo6Q29kZSB0aGF0IGhhc24ndCBoYWQgYW55IHN0
YWNrIGFsbG9jYXRpb24gYW5kIG9wdGlvbmFsbHkgaGFzbid0IGhhZCBhbnkKIC8vIHJlZ2lzdGVy
IGFsbG9jYXRpb24gYW5kIGRvZXMgYm90aCBvZiB0aG9zZSB0aGluZ3MuCi1KU19FWFBPUlRfUFJJ
VkFURSB2b2lkIHByZXBhcmVGb3JHZW5lcmF0aW9uKENvZGUmKTsKK0pTX0VYUE9SVF9QUklWQVRF
IHZvaWQgcHJlcGFyZUZvckdlbmVyYXRpb24oQ29kZSYsIHVuc2lnbmVkIG9wdExldmVsID0gZGVm
YXVsdE9wdExldmVsKCkpOwogCiAvLyBUaGlzIGdlbmVyYXRlcyB0aGUgY29kZSB1c2luZyB0aGUg
Z2l2ZW4gQ0NhbGxIZWxwZXJzIGluc3RhbmNlLiBOb3RlIHRoYXQgdGhpcyBtYXkgY2FsbCBjYWxs
YmFja3MKIC8vIGluIHRoZSBzdXBwbGllZCBjb2RlIGFzIGl0IGlzIGdlbmVyYXRpbmcuCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRpb25Db250ZXh0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0aW9uQ29u
dGV4dC5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckdlbmVyYXRpb25Db250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAg
cHVibGljOgogICAgIHR5cGVkZWYgU2hhcmVkVGFzazxMYXRlUGF0aEZ1bmN0aW9uPiBMYXRlUGF0
aDsKIAogICAgIFZlY3RvcjxSZWZQdHI8TGF0ZVBhdGg+PiBsYXRlUGF0aHM7Ci0gICAgSW5kZXhN
YXA8QmFzaWNCbG9jaywgQm94PENDYWxsSGVscGVyczo6TGFiZWw+PiBibG9ja0xhYmVsczsKKyAg
ICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgQm94PENDYWxsSGVscGVyczo6TGFiZWw+PiBibG9ja0xh
YmVsczsKICAgICBCYXNpY0Jsb2NrKiBjdXJyZW50QmxvY2sgeyBudWxscHRyIH07CiAgICAgdW5z
aWduZWQgaW5kZXhJbkJsb2NrIHsgVUlOVF9NQVggfTsKICAgICBDb2RlKiBjb2RlIHsgbnVsbHB0
ciB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlckFmdGVyUmVn
QWxsb2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
TG93ZXJBZnRlclJlZ0FsbG9jLmNwcAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01NSw2ICs1NSwxMSBAQCB2b2lkIGxvd2VyQWZ0ZXJSZWdBbGxvYyhDb2RlJiBjb2RlKQog
CiAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coIkNvZGUgYmVmb3JlIGxvd2VyQWZ0
ZXJSZWdBbGxvYzpcbiIsIGNvZGUpOworICAgIAorICAgIC8vIEZJWE1FOgorICAgIC8vIDEpIFRo
aXMgc2hvdWxkIGJhaWwgZWFybHkgaWYgdGhlcmUgYXJlIG5vIFNodWZmbGVzIG9yIENvbGRDQ2Fs
bHMuIChPT1BTISEgbmVlZCBidWcgdXJsKQorICAgIC8vIDIpIFdlIHNob3VsZCBub3QgaW50cm9k
dWNlIFNodWZmbGVzIGZvciBub3JtYWwgY2FsbHMuIChPT1BTISEgbmVlZCBidWcgdXJsKQorICAg
IC8vIDMpIFdlIHNob3VsZCBlbWl0IENvbGRDQ2FsbCBvbmx5IGF0IG9wdExldmVsPT0xLiAoT09Q
UyEhIG5lZWQgYnVnIHVybCkKIAogICAgIEhhc2hNYXA8SW5zdCosIFJlZ2lzdGVyU2V0PiB1c2Vk
UmVnaXN0ZXJzOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2Vy
RW50cnlTd2l0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyTG93ZXJFbnRyeVN3aXRjaC5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJFbnRyeVN3aXRjaC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTgyLDcgKzgyLDcgQEAgdm9pZCBsb3dlckVudHJ5U3dpdGNoKENvZGUmIGNvZGUpCiAg
ICAgLy8gTm93IGR1cGxpY2F0ZSB0aGVtLgogICAgIFZlY3RvcjxGcmVxdWVudGVkQmxvY2s+IGVu
dHJ5cG9pbnRzOwogICAgIGVudHJ5cG9pbnRzLmFwcGVuZChGcmVxdWVudGVkQmxvY2soY29kZVsw
XSwgZW50cnlwb2ludEZyZXF1ZW5jaWVzWzBdKSk7Ci0gICAgSW5kZXhNYXA8QmFzaWNCbG9jaywg
QmFzaWNCbG9jayo+IG1hcChjb2RlLnNpemUoKSk7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jayos
IEJhc2ljQmxvY2sqPiBtYXAoY29kZS5zaXplKCkpOwogICAgIGZvciAodW5zaWduZWQgZW50cnlw
b2ludEluZGV4ID0gMTsgZW50cnlwb2ludEluZGV4IDwgY29kZS5wcm9jKCkubnVtRW50cnlwb2lu
dHMoKTsgKytlbnRyeXBvaW50SW5kZXgpIHsKICAgICAgICAgbWFwLmNsZWFyKCk7CiAgICAgICAg
IGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiB3b3JrbGlzdC5zZWVuKCkudmFsdWVzKGNvZGUpKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVz
CShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9w
Y29kZS5vcGNvZGVzCSh3b3JraW5nIGNvcHkpCkBAIC02NDksNyArNjQ5LDcgQEAgTW92ZTMyIFU6
RzozMiwgWkQ6RzozMgogTW92ZTMyIFU6RzozMiwgWkQ6RzozMiwgUzpHOjMyCiAgICAgQWRkciwg
QWRkciwgVG1wCiAKLVN0b3JlWmVybzMyIFU6RzozMgorU3RvcmVaZXJvMzIgRDpHOjMyCiAgICAg
QWRkcgogICAgIEluZGV4CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
UmVnTGl2ZW5lc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpclJlZ0xpdmVuZXNzLmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyUmVnTGl2ZW5lc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAs
NyBAQAogI2luY2x1ZGUgIkFpckJhc2ljQmxvY2suaCIKICNpbmNsdWRlICJBaXJDb2RlLmgiCiAj
aW5jbHVkZSAiQWlySW5zdC5oIgorI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgiCiAjaW5jbHVkZSAi
UmVnaXN0ZXJTZXQuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFj
ZSBBaXIgewpAQCAtNTQsNiArNTUsMTkgQEAgcHVibGljOgogICAgICAgICB7CiAgICAgICAgIH0K
ICAgICAgICAgCisgICAgICAgIC8vIElmIHlvdSBjb21wdXRlZCBUbXAgbGl2ZW5lc3MgZm9yIHNv
bWUgYmFuaywgeW91IGNhbiB1c2UgcmVnIGxpdmVuZXNzIHRvIGZpbGwgaW4gdGhlIGJsYW5rcy4K
KyAgICAgICAgLy8gTm90ZSB0aGF0IHdoYXQgaGFwcGVucyB0byB0aGUgcmVnaXN0ZXJzIG5vdCBi
ZWxvbmdpbmcgdG8gdGhlIGJhbmsgaXMgYXJiaXRyYXJ5IC0gdGhleSBtYXkgZ2V0CisgICAgICAg
IC8vIHNldCBvciBub3QuCisgICAgICAgIHRlbXBsYXRlPEJhbmsgYmFuaz4KKyAgICAgICAgTG9j
YWxDYWxjKFRtcExpdmVuZXNzPGJhbms+JiBsaXZlbmVzcywgQmFzaWNCbG9jayogYmxvY2spCisg
ICAgICAgICAgICA6IG1fYmxvY2soYmxvY2spCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAo
VG1wIHRtcCA6IGxpdmVuZXNzLmxpdmVBdFRhaWwoYmxvY2spKSB7CisgICAgICAgICAgICAgICAg
aWYgKHRtcC5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICBtX3dvcmtzZXQuc2V0KHRtcC5y
ZWcoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGNvbnN0
IFJlZ2lzdGVyU2V0JiBsaXZlKCkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJu
IG1fd29ya3NldDsKQEAgLTg0LDggKzk4LDggQEAgcHVibGljOgogICAgIH0KICAgICAKIHByaXZh
dGU6Ci0gICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgUmVnaXN0ZXJTZXQ+IG1fbGl2ZUF0SGVhZDsK
LSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBSZWdpc3RlclNldD4gbV9saXZlQXRUYWlsOworICAg
IEluZGV4TWFwPEJhc2ljQmxvY2sqLCBSZWdpc3RlclNldD4gbV9saXZlQXRIZWFkOworICAgIElu
ZGV4TWFwPEJhc2ljQmxvY2sqLCBSZWdpc3RlclNldD4gbV9saXZlQXRUYWlsOwogfTsKIAogfSB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAkocmV2aXNpb24gMjE0NDI3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJBaXJBcmdJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckZpeFNwaWxsc0FmdGVy
VGVybWluYWxzLmgiCiAjaW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0LmgiCiAjaW5jbHVkZSAiQWly
SW5zdElubGluZXMuaCIKICNpbmNsdWRlICJBaXJMaXZlbmVzcy5oIgpAQCAtNDYsNyArNDcsNyBA
QCB2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJiBjb2RlKQogICAgIHBhZEludGVyZmVyZW5jZShj
b2RlKTsKIAogICAgIC8vIFdlIHdhbnQgdG8ga25vdyB0aGUgc2V0IG9mIHJlZ2lzdGVycyB1c2Vk
IGF0IGV2ZXJ5IHBvaW50IGluIGV2ZXJ5IGJhc2ljIGJsb2NrLgotICAgIEluZGV4TWFwPEJhc2lj
QmxvY2ssIFZlY3RvcjxSZWdpc3RlclNldD4+IHVzZWRSZWdpc3RlcnMoY29kZS5zaXplKCkpOwor
ICAgIEluZGV4TWFwPEJhc2ljQmxvY2sqLCBWZWN0b3I8UmVnaXN0ZXJTZXQ+PiB1c2VkUmVnaXN0
ZXJzKGNvZGUuc2l6ZSgpKTsKICAgICBHUExpdmVuZXNzIGdwTGl2ZW5lc3MoY29kZSk7CiAgICAg
RlBMaXZlbmVzcyBmcExpdmVuZXNzKGNvZGUpOwogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sg
OiBjb2RlKSB7CkBAIC0xNzMsMTAgKzE3NCwxMyBAQCB2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2Rl
JiBjb2RlKQogICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjaG9zZW5SZWcpOwog
CiAgICAgICAgICAgICAgICAgICAgIHRtcCA9IFRtcChjaG9zZW5SZWcpOworICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT0gQXJnOjpTY3JhdGNoKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICAgICAgICAgIE9w
Y29kZSBtb3ZlID0gYmFuayA9PSBHUCA/IE1vdmUgOiBNb3ZlRG91YmxlOwogCi0gICAgICAgICAg
ICAgICAgICAgIGlmIChBcmc6OmlzQW55VXNlKHJvbGUpICYmIHJvbGUgIT0gQXJnOjpTY3JhdGNo
KQorICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0FueVVzZShyb2xlKSkKICAgICAgICAg
ICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoaW5zdEluZGV4LCBtb3ZlLCBpbnN0
Lm9yaWdpbiwgYXJnLCB0bXApOwogICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0FueURl
Zihyb2xlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoaW5z
dEluZGV4ICsgMSwgbW92ZSwgaW5zdC5vcmlnaW4sIHRtcCwgYXJnKTsKQEAgLTE4NCw2ICsxODgs
OCBAQCB2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJiBjb2RlKQogICAgICAgICB9CiAgICAgICAg
IGluc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKICAgICB9CisgICAgCisgICAgZml4U3BpbGxz
QWZ0ZXJUZXJtaW5hbHMoY29kZSk7CiB9CiAKIH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpB
aXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5jcHAJKHJldmlzaW9u
IDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yOCw4ICsyOCwxNSBAQAogCiAjaWYgRU5BQkxFKEIzX0pJVCkKIAorI2luY2x1
ZGUgIkFpclRtcElubGluZXMuaCIKKwogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5h
bWVzcGFjZSBBaXIgewogCit0ZW1wbGF0ZTw+IGNvbnN0IGNoYXIqIGNvbnN0IFRtcDo6SW5kZXhl
ZDxHUD46OmR1bXBQcmVmaXggPSAiJXRtcCI7Cit0ZW1wbGF0ZTw+IGNvbnN0IGNoYXIqIGNvbnN0
IFRtcDo6SW5kZXhlZDxGUD46OmR1bXBQcmVmaXggPSAiJWZ0bXAiOwordGVtcGxhdGU8PiBjb25z
dCBjaGFyKiBjb25zdCBUbXA6OkFic29sdXRlbHlJbmRleGVkPEdQPjo6ZHVtcFByZWZpeCA9ICIl
YWJzIjsKK3RlbXBsYXRlPD4gY29uc3QgY2hhciogY29uc3QgVG1wOjpBYnNvbHV0ZWx5SW5kZXhl
ZDxGUD46OmR1bXBQcmVmaXggPSAiJWZhYnMiOworCiB2b2lkIFRtcDo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAogewogICAgIGlmICghKnRoaXMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyVG1wLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJUbXAuaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJUbXAuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03NCw2ICs3NCwxNCBAQCBwdWJs
aWM6CiAgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gZW5jb2RlRlBUbXAoaW5kZXgpOwogICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVG1wIHRtcEZvckluZGV4
KEJhbmsgYmFuaywgdW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBpZiAoYmFuayA9PSBH
UCkKKyAgICAgICAgICAgIHJldHVybiBncFRtcEZvckluZGV4KGluZGV4KTsKKyAgICAgICAgQVNT
RVJUKGJhbmsgPT0gRlApOworICAgICAgICByZXR1cm4gZnBUbXBGb3JJbmRleChpbmRleCk7Cisg
ICAgfQogCiAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV92
YWx1ZTsgfQogICAgIApAQCAtMTU0LDcgKzE2MiwxNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICBy
ZXR1cm4gZ3BUbXBJbmRleCgpOwogICAgICAgICByZXR1cm4gZnBUbXBJbmRleCgpOwogICAgIH0K
LQorICAgIAorICAgIHRlbXBsYXRlPEJhbmsgYmFuaz4gY2xhc3MgSW5kZXhlZDsKKyAgICB0ZW1w
bGF0ZTxCYW5rIGJhbms+IGNsYXNzIEFic29sdXRlbHlJbmRleGVkOworICAgIAorICAgIHRlbXBs
YXRlPEJhbmsgYmFuaz4KKyAgICBJbmRleGVkPGJhbms+IGluZGV4ZWQoKSBjb25zdDsKKyAgICAK
KyAgICB0ZW1wbGF0ZTxCYW5rIGJhbms+CisgICAgQWJzb2x1dGVseUluZGV4ZWQ8YmFuaz4gYWJz
b2x1dGVseUluZGV4ZWQoKSBjb25zdDsKKyAgICAKICAgICBib29sIGlzQWxpdmUoKSBjb25zdAog
ICAgIHsKICAgICAgICAgcmV0dXJuICEhKnRoaXM7CkBAIC0xOTUsNiArMjEyLDggQEAgcHVibGlj
OgogICAgICAgICByZXN1bHQubV92YWx1ZSA9IHN0YXRpY19jYXN0PGludD4oaW5kZXgpOwogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVG1wIHRtcEZvckFi
c29sdXRlSW5kZXgoQmFuaywgdW5zaWduZWQpOwogCiBwcml2YXRlOgogICAgIHN0YXRpYyBpbnQg
ZW5jb2RlR1AodW5zaWduZWQgaW5kZXgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpclRtcElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpclRtcElubGluZXMuaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJUbXBJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTkyLDYg
KzkyLDU4IEBAIHN0cnVjdCBBYnNvbHV0ZVRtcE1hcHBlcjxGUD4gewogICAgIH0KIH07CiAKK3Rl
bXBsYXRlPEJhbmsgdGhlQmFuaz4KK2NsYXNzIFRtcDo6SW5kZXhlZCA6IHB1YmxpYyBUbXAgewor
cHVibGljOgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBkdW1wUHJlZml4OworICAgIAor
ICAgIEluZGV4ZWQoVG1wIHRtcCkKKyAgICAgICAgOiBUbXAodG1wKQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRt
cEluZGV4KHRoZUJhbmspOworICAgIH0KK307CisKK3RlbXBsYXRlPEJhbmsgdGhlQmFuaz4KK2Ns
YXNzIFRtcDo6QWJzb2x1dGVseUluZGV4ZWQgOiBwdWJsaWMgVG1wIHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgY29uc3QgY2hhciogY29uc3QgZHVtcFByZWZpeDsKKworICAgIEFic29sdXRlbHlJbmRl
eGVkKFRtcCB0bXApCisgICAgICAgIDogVG1wKHRtcCkKKyAgICB7CisgICAgfQorICAgIAorICAg
IHVuc2lnbmVkIGluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBBYnNvbHV0ZVRt
cE1hcHBlcjx0aGVCYW5rPjo6YWJzb2x1dGVJbmRleCgqdGhpcyk7CisgICAgfQorfTsKKwordGVt
cGxhdGU8QmFuayB0aGVCYW5rPgorVG1wOjpJbmRleGVkPHRoZUJhbms+IFRtcDo6aW5kZXhlZCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIEluZGV4ZWQ8dGhlQmFuaz4oKnRoaXMpOworfQorCit0ZW1w
bGF0ZTxCYW5rIHRoZUJhbms+CitUbXA6OkFic29sdXRlbHlJbmRleGVkPHRoZUJhbms+IFRtcDo6
YWJzb2x1dGVseUluZGV4ZWQoKSBjb25zdAoreworICAgIHJldHVybiBBYnNvbHV0ZWx5SW5kZXhl
ZDx0aGVCYW5rPigqdGhpcyk7Cit9CisKK1RtcCBUbXA6OnRtcEZvckFic29sdXRlSW5kZXgoQmFu
ayBiYW5rLCB1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBpZiAoYmFuayA9PSBHUCkKKyAgICAgICAg
cmV0dXJuIEFic29sdXRlVG1wTWFwcGVyPEdQPjo6dG1wRnJvbUFic29sdXRlSW5kZXgoaW5kZXgp
OworICAgIEFTU0VSVChiYW5rID09IEZQKTsKKyAgICByZXR1cm4gQWJzb2x1dGVUbXBNYXBwZXI8
RlA+Ojp0bXBGcm9tQWJzb2x1dGVJbmRleChpbmRleCk7Cit9CisKIH0gfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzOjpBaXIKIAogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEw
Miw4ICsxMDIsMTYgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICAvLyBBbHNvIGFsbG93IGFk
ZC9yZW1vdmUvY29udGFpbnMgdGVybWlub2xvZ3ksIHdoaWNoIG1lYW5zIHRoZSBzYW1lIHRoaW5n
IGFzIHNldC9jbGVhci9nZXQuCi0gICAgdm9pZCBhZGQoUmVnIHJlZykgeyBzZXQocmVnKTsgfQot
ICAgIHZvaWQgcmVtb3ZlKFJlZyByZWcpIHsgY2xlYXIocmVnKTsgfQorICAgIGJvb2wgYWRkKFJl
ZyByZWcpCisgICAgeworICAgICAgICBBU1NFUlQoISFyZWcpOworICAgICAgICByZXR1cm4gIW1f
Yml0cy50ZXN0QW5kU2V0KHJlZy5pbmRleCgpKTsKKyAgICB9CisgICAgYm9vbCByZW1vdmUoUmVn
IHJlZykKKyAgICB7CisgICAgICAgIEFTU0VSVCghIXJlZyk7CisgICAgICAgIHJldHVybiBtX2Jp
dHMudGVzdEFuZENsZWFyKHJlZy5pbmRleCgpKTsKKyAgICB9CiAgICAgYm9vbCBjb250YWlucyhS
ZWcgcmVnKSBjb25zdCB7IHJldHVybiBnZXQocmVnKTsgfQogICAgIAogICAgIHZvaWQgbWVyZ2Uo
Y29uc3QgUmVnaXN0ZXJTZXQmIG90aGVyKSB7IG1fYml0cy5tZXJnZShvdGhlci5tX2JpdHMpOyB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAy
MTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIyNSw2ICsyMjUsNyBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0
cmluZzsKICAgICB2KGJvb2wsIHVzZUZUTEpJVCwgdHJ1ZSwgTm9ybWFsLCAiYWxsb3dzIHRoZSBG
VEwgSklUIHRvIGJlIHVzZWQgaWYgdHJ1ZSIpIFwKICAgICB2KGJvb2wsIHVzZUZUTFRCQUEsIHRy
dWUsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgdmFsaWRhdGVGVExPU1JFeGl0TGl2
ZW5lc3MsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KHVuc2lnbmVkLCBkZWZhdWx0
QjNPcHRMZXZlbCwgMiwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCBiM0Fsd2F5c0Zh
aWxzQmVmb3JlQ29tcGlsZSwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwg
YjNBbHdheXNGYWlsc0JlZm9yZUxpbmssIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2
KGJvb2wsIGZ0bENyYXNoZXMsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIC8qIGZvb2wtcHJvb2Yg
d2F5IG9mIGNoZWNraW5nIHRoYXQgeW91IGVuZGVkIHVwIGluIHRoZSBGVEwuIDstKSAqL1wKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAko
cmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJH
ZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoV0VC
QVNTRU1CTFkpCiAKKyNpbmNsdWRlICJCM0NvbW1vbi5oIgogI2luY2x1ZGUgIkIzQ29tcGlsYXRp
b24uaCIKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKICNpbmNsdWRlICJWTS5oIgpAQCAtNDcs
NyArNDgsNyBAQCBzdHJ1Y3QgQ29tcGlsYXRpb25Db250ZXh0IHsKICAgICBDQ2FsbEhlbHBlcnM6
OkNhbGwganNFbnRyeXBvaW50VG9XYXNtRW50cnlwb2ludENhbGw7CiB9OwogCi1FeHBlY3RlZDxz
dGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29t
cGlsZShWTSYsIENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNv
bnN0IFNpZ25hdHVyZSosIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIGNvbnN0IE1v
ZHVsZUluZm9ybWF0aW9uJiwgY29uc3QgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiYsIHVuc2lnbmVk
IG9wdExldmVsID0gMSk7CitFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVu
Y3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShWTSYsIENvbXBpbGF0aW9uQ29udGV4dCYs
IGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IFNpZ25hdHVyZSosIFZlY3RvcjxVbmxpbmtl
ZFdhc21Ub1dhc21DYWxsPiYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgY29uc3QgVmVjdG9y
PFNpZ25hdHVyZUluZGV4PiYsIHVuc2lnbmVkIG9wdExldmVsID0gQjM6OmRlZmF1bHRPcHRMZXZl
bCgpKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApJbmRleDogU291cmNlL1dURi9X
VEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dU
Ri54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2Uv
V1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2
ICsyMyw4IEBACiAvKiBCZWdpbiBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCQkwRjBEODVCNDE3
MjM0Q0MxMDAzMzgyMTAgLyogTm9Mb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjBEODVCMzE3MjM0Q0IxMDAzMzgyMTAgLyogTm9Mb2NrLmggKi87
IH07CiAJCTBGMEZDRERFMUREMTY3RjkwMENDQUI1MyAvKiBMb2NrQWxnb3JpdGhtLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBGQ0RERDFERDE2N0Y5
MDBDQ0FCNTMgLyogTG9ja0FsZ29yaXRobS5oICovOyB9OworCQkwRjJBQzU2MTFFODlGNzBDMDAw
MUVFM0YgLyogUmFuZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMkFDNTYwMUU4OUY3MEMwMDAxRUUzRiAvKiBSYW5nZS5oICovOyB9OworCQkwRjJB
QzU2MzFFOEEwMTQ5MDAwMUVFM0YgLyogSW5kZXhLZXlUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJBQzU2MjFFOEEwMTQ5MDAwMUVFM0YgLyog
SW5kZXhLZXlUeXBlLmggKi87IH07CiAJCTBGMkI2NkE2MTdCNkI0RkIwMEE3QUUzRiAvKiBEZWZl
cnJhYmxlUmVmQ291bnRlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyQjY2QTQxN0I2QjRGNzAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3VudGVk
LmggKi87IH07CiAJCTBGMkI2NkE3MTdCNkI0RkQwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE1MTdCNkI0
RjcwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCAqLzsgfTsKIAkJMEYzMEJBOTAxRTc4NzA4RTAwMkNB
ODQ3IC8qIEdsb2JhbFZlcnNpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYzMEJBOEExRTc4NzA4RTAwMkNBODQ3IC8qIEdsb2JhbFZlcnNpb24u
Y3BwICovOyB9OwpAQCAtNDA4LDYgKzQxMCw4IEBACiAvKiBCZWdpbiBQQlhGaWxlUmVmZXJlbmNl
IHNlY3Rpb24gKi8KIAkJMEYwRDg1QjMxNzIzNENCMTAwMzM4MjEwIC8qIE5vTG9jay5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBOb0xvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYwRkNE
REQxREQxNjdGOTAwQ0NBQjUzIC8qIExvY2tBbGdvcml0aG0uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTG9ja0FsZ29yaXRobS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjJBQzU2MDFFODlGNzBDMDAwMUVFM0YgLyogUmFuZ2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEYyQUM1NjIxRThBMDE0OTAwMDFFRTNGIC8qIEluZGV4S2V5VHlwZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbmRleEtleVR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEYyQjY2QTQxN0I2QjRGNzAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3VudGVk
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IERlZmVycmFibGVSZWZDb3VudGVkLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGMkI2NkE1MTdCNkI0RjcwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRmxpcEJ5dGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGMzAwQjdEMThBQjQ4QjQwMEE2RDcyRSAvKiBIYXNoTWV0aG9kLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEhhc2hNZXRob2QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwMTgsMTAgKzEw
MjIsMTEgQEAKIAkJCQlBOEE0NzJCQTE1MUE4MjVBMDA0MTIzRkYgLyogSGFzaFRyYWl0cy5oICov
LAogCQkJCUE4QTQ3MkJCMTUxQTgyNUEwMDQxMjNGRiAvKiBIZXhOdW1iZXIuaCAqLywKIAkJCQlG
RTg5MjVBRjFEMDBEQUVDMDA0NjkwN0UgLyogSW5kZW50ZXIuaCAqLywKLQkJCQk5QzY3QzU0MjU4
OTM0OEUyODVCNDk2OTkgLyogSW5kZXhlZENvbnRhaW5lckl0ZXJhdG9yLmggKi8sCisJCQkJMEYy
QUM1NjIxRThBMDE0OTAwMDFFRTNGIC8qIEluZGV4S2V5VHlwZS5oICovLAogCQkJCTVCNDMzODNB
NUQwQjQ2M0M5NDMzRDkzMyAvKiBJbmRleE1hcC5oICovLAogCQkJCTMxMzdFMUQ3REJEODRBQzM4
RkFFNEQzNCAvKiBJbmRleFNldC5oICovLAogCQkJCTI2ODRENDM1MUMwMDBENDAwMDgxRDY2MyAv
KiBJbmRleFNwYXJzZVNldC5oICovLAorCQkJCTlDNjdDNTQyNTg5MzQ4RTI4NUI0OTY5OSAvKiBJ
bmRleGVkQ29udGFpbmVySXRlcmF0b3IuaCAqLywKIAkJCQlBOEE0NzJCQzE1MUE4MjVBMDA0MTIz
RkYgLyogSW5saW5lQVNNLmggKi8sCiAJCQkJQTcwREEwODIxNzk5RjA0RDAwNTI5QTlCIC8qIElu
c2VydGlvbi5oICovLAogCQkJCTdDREQ3RkY3MTg2RDI5MUUwMDc0MzNDRCAvKiBJdGVyYXRvckFk
YXB0b3JzLmggKi8sCkBAIC0xMTAwLDYgKzExMDUsNyBAQAogCQkJCUE4QTQ3MkZCMTUxQTgyNUIw
MDQxMjNGRiAvKiBSYW5kb21OdW1iZXIuY3BwICovLAogCQkJCUE4QTQ3MkZDMTUxQTgyNUIwMDQx
MjNGRiAvKiBSYW5kb21OdW1iZXIuaCAqLywKIAkJCQlBOEE0NzJGRDE1MUE4MjVCMDA0MTIzRkYg
LyogUmFuZG9tTnVtYmVyU2VlZC5oICovLAorCQkJCTBGMkFDNTYwMUU4OUY3MEMwMDAxRUUzRiAv
KiBSYW5nZS5oICovLAogCQkJCTBGNzI1Q0FCMUM1MDQ2MTYwMEFEOTQzQSAvKiBSYW5nZVNldC5o
ICovLAogCQkJCTBGODcxMDU5MTY2NDNGMTkwMDkwQjBBRCAvKiBSYXdQb2ludGVyLmggKi8sCiAJ
CQkJMEZERTg3RjYxREZEMDdDQzAwNjRDMzkwIC8qIFJlY3Vyc2l2ZUxvY2tBZGFwdGVyLmggKi8s
CkBAIC0xNDg1LDYgKzE0OTEsNyBAQAogCQkJCUM5MTZCOTc1RjAyRjRGN0U4QjRBQjEyRCAvKiBJ
bmRleE1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzhCMEUxQTFFMDFBNDg2RUI5NUUwRDExIC8q
IEluZGV4U2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkyNjg0RDQzNjFDMDAwRDQwMDA4MUQ2NjMg
LyogSW5kZXhTcGFyc2VTZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkFDNTYzMUU4QTAxNDkw
MDAxRUUzRiAvKiBJbmRleEtleVR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0RDMTUx
QTgyNUIwMDQxMjNGRiAvKiBJbmxpbmVBU00uaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MERBMDg0
MTc5OUYwNEQwMDUyOUE5QiAvKiBJbnNlcnRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTI2MTQ3
QjBBMTVERENDREMwMEREQjkwNyAvKiBJbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9uLmggaW4gSGVh
ZGVycyAqLywKQEAgLTE1ODYsNiArMTU5Myw3IEBACiAJCQkJNDMwQjQ3ODkxQUFBQUMxQTAwMTIy
M0RBIC8qIFN0cmluZ0NvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0M0UxNTFBODI1
QjAwNDEyM0ZGIC8qIFN0cmluZ0NvbmNhdGVuYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3Q0Q0
QzI3MDFFMkM4MkI5MDA5Mjk0NzAgLyogU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjJBQzU2MTFFODlGNzBDMDAwMUVFM0YgLyogUmFuZ2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4QTQ3NDJDMTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdFeHRyYXMuaCBp
biBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDNGMTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdIYXNo
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzQ4NzQ1NDE3QTBCREFFMDBGQTA0Q0IgLyogU3RyaW5n
SGFzaER1bXBDb250ZXh0LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NN
YWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0
CShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtMTAwLDYgKzEwMCw3IEBAIHNldChXVEZfSEVBREVSUwogICAgIFJBTVNp
emUuaAogICAgIFJhbmRvbU51bWJlci5oCiAgICAgUmFuZG9tTnVtYmVyU2VlZC5oCisgICAgUmFu
Z2UuaAogICAgIFJhbmdlU2V0LmgKICAgICBSYXdQb2ludGVyLmgKICAgICBSZWN1cnNpdmVMb2Nr
QWRhcHRlci5oCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9EZXF1ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL0RlcXVlLmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9XVEYvd3Rm
L0RlcXVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA3LCAyMDA4LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dApAQCAtODksNiArODksMTQgQEAgcHVibGljOgogICAgIHZvaWQgcmVt
b3ZlTGFzdCgpOwogICAgIHZvaWQgcmVtb3ZlKGl0ZXJhdG9yJik7CiAgICAgdm9pZCByZW1vdmUo
Y29uc3RfaXRlcmF0b3ImKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPiB2b2lk
IHJlbW92ZUFsbE1hdGNoaW5nKGNvbnN0IEZ1bmMmKTsKKyAgICAKKyAgICAvLyBUaGlzIGlzIGEg
cHJpb3JpdHkgZW5xdWV1ZS4gVGhlIGNhbGxiYWNrIGlzIGdpdmVuIGEgdmFsdWUsIGFuZCBpZiBp
dCByZXR1cm5zIHRydWUsIHRoZW4gdGhpcworICAgIC8vIHdpbGwgcHV0IHRoZSBhcHBlbmRlZCB2
YWx1ZSBiZWZvcmUgdGhhdCB2YWx1ZS4gSXQgd2lsbCBrZWVwIGJ1YmJsaW5nIHVudGlsIHRoZSBj
YWxsYmFjayByZXR1cm5zCisgICAgLy8gZmFsc2Ugb3IgdGhlIHZhbHVlIGVuZHMgdXAgYXQgdGhl
IGhlYWQgb2YgdGhlIHF1ZXVlLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHR5cGVuYW1lIEZ1
bmM+CisgICAgdm9pZCBhcHBlbmRBbmRCdWJibGUoVSYmLCBjb25zdCBGdW5jJik7CiAKICAgICB2
b2lkIGNsZWFyKCk7CiAKQEAgLTUyNCw2ICs1MzIsMzYgQEAgaW5saW5lIHZvaWQgRGVxdWU8VCwg
aW5saW5lQ2FwYWNpdHk+OjpyZQogICAgIGNoZWNrVmFsaWRpdHkoKTsKIH0KIAordGVtcGxhdGU8
dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgordGVtcGxhdGU8dHlwZW5hbWUgRnVu
Yz4KK2lubGluZSB2b2lkIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6cmVtb3ZlQWxsTWF0Y2hp
bmcoY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICBzaXplX3QgY291bnQgPSBzaXplKCk7CisgICAg
d2hpbGUgKGNvdW50LS0pIHsKKyAgICAgICAgVCB2YWx1ZSA9IHRha2VGaXJzdCgpOworICAgICAg
ICBpZiAoIWZ1bmModmFsdWUpKQorICAgICAgICAgICAgYXBwZW5kKFdURk1vdmUodmFsdWUpKTsK
KyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4K
K3RlbXBsYXRlPHR5cGVuYW1lIFUsIHR5cGVuYW1lIEZ1bmM+CitpbmxpbmUgdm9pZCBEZXF1ZTxU
LCBpbmxpbmVDYXBhY2l0eT46OmFwcGVuZEFuZEJ1YmJsZShVJiYgdmFsdWUsIGNvbnN0IEZ1bmMm
IGZ1bmMpCit7CisgICAgYXBwZW5kKFdURk1vdmUodmFsdWUpKTsKKyAgICBpdGVyYXRvciBiZWdp
biA9IHRoaXMtPmJlZ2luKCk7CisgICAgaXRlcmF0b3IgaXRlciA9IGVuZCgpOworICAgIC0taXRl
cjsKKyAgICB3aGlsZSAoaXRlciAhPSBiZWdpbikgeworICAgICAgICBpdGVyYXRvciBwcmV2ID0g
aXRlcjsKKyAgICAgICAgLS1wcmV2OworICAgICAgICBpZiAoIWZ1bmMoKnByZXYpKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBzdGQ6OnN3YXAoKnByZXYsICppdGVyKTsKKyAgICAgICAg
aXRlciA9IHByZXY7CisgICAgfQorfQorCiAjaWZkZWYgTkRFQlVHCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+IGlubGluZSB2b2lkIERlcXVlSXRlcmF0b3JCYXNl
PFQsIGlubGluZUNhcGFjaXR5Pjo6Y2hlY2tWYWxpZGl0eSgpIGNvbnN0IHsgfQogdGVtcGxhdGU8
dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBpbmxpbmUgdm9pZCBEZXF1ZUl0ZXJh
dG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT46OmNoZWNrVmFsaWRpdHkoY29uc3QgRGVxdWVJdGVy
YXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+JikgY29uc3QgeyB9CkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9JbmRleEtleVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9JbmRleEtl
eVR5cGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9JbmRleEtleVR5cGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV1RGIHsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBJbmRleEtleVR5cGUgeworICAgIHN0YXRpYyBz
aXplX3QgaW5kZXgoY29uc3QgVCYga2V5KSB7IHJldHVybiBrZXkuaW5kZXgoKTsgfQorfTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBJbmRleEtleVR5cGU8VCo+IHsKKyAgICBzdGF0
aWMgc2l6ZV90IGluZGV4KFQqIGtleSkgeyByZXR1cm4ga2V5LT5pbmRleCgpOyB9Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNlL1dURi93dGYvSW5kZXhNYXAuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9JbmRleE1hcC5oCShyZXZpc2lvbiAyMTQ0MjcpCisr
KyBTb3VyY2UvV1RGL3d0Zi9JbmRleE1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3
IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSA8d3RmL0luZGV4S2V5VHlwZS5oPgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdURiB7CkBAIC03MCwxOCArNzEsMjQg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV92ZWN0b3JbaW5kZXhdOwogICAgIH0KICAgICAK
LSAgICBWYWx1ZSYgb3BlcmF0b3JbXShLZXkqIGtleSkKKyAgICBWYWx1ZSYgb3BlcmF0b3JbXShj
b25zdCBLZXkmIGtleSkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3ZlY3RvcltrZXktPmluZGV4
KCldOworICAgICAgICByZXR1cm4gbV92ZWN0b3JbSW5kZXhLZXlUeXBlPEtleT46OmluZGV4KGtl
eSldOwogICAgIH0KICAgICAKLSAgICBjb25zdCBWYWx1ZSYgb3BlcmF0b3JbXShLZXkqIGtleSkg
Y29uc3QKKyAgICBjb25zdCBWYWx1ZSYgb3BlcmF0b3JbXShjb25zdCBLZXkmIGtleSkgY29uc3QK
ICAgICB7Ci0gICAgICAgIHJldHVybiBtX3ZlY3RvcltrZXktPmluZGV4KCldOworICAgICAgICBy
ZXR1cm4gbV92ZWN0b3JbSW5kZXhLZXlUeXBlPEtleT46OmluZGV4KGtleSldOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGFwcGVuZChjb25zdCBLZXkmIGtleSwgVmFsdWUgdmFsdWUpCisgICAgewor
ICAgICAgICBSRUxFQVNFX0FTU0VSVChJbmRleEtleVR5cGU8S2V5Pjo6aW5kZXgoa2V5KSA9PSBt
X3ZlY3Rvci5zaXplKCkpOworICAgICAgICBtX3ZlY3Rvci5hcHBlbmQodmFsdWUpOwogICAgIH0K
IAogcHJpdmF0ZToKLSAgICBWZWN0b3I8VmFsdWU+IG1fdmVjdG9yOworICAgIFZlY3RvcjxWYWx1
ZSwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fdmVjdG9yOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV1RGCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9JbmRleFNldC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL0luZGV4U2V0LmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9XVEYv
d3RmL0luZGV4U2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNs
dWRlIDx3dGYvQml0VmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorI2lu
Y2x1ZGUgPHd0Zi9JbmRleEtleVR5cGUuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKQEAgLTQyLDMw
ICs0MywzMCBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIGJvb2wgYWRkKFQqIHZhbHVl
KQorICAgIGJvb2wgYWRkKGNvbnN0IFQmIHZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuICFt
X3NldC5zZXQodmFsdWUtPmluZGV4KCkpOworICAgICAgICByZXR1cm4gIW1fc2V0LnNldChJbmRl
eEtleVR5cGU8VD46OmluZGV4KHZhbHVlKSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgSXRlcmFibGU+CiAgICAgYm9vbCBhZGRBbGwoY29uc3QgSXRlcmFibGUmIGl0ZXJhYmxlKQog
ICAgIHsKICAgICAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgZm9yIChUKiB2YWx1
ZSA6IGl0ZXJhYmxlKQorICAgICAgICBmb3IgKGNvbnN0IFQmIHZhbHVlIDogaXRlcmFibGUpCiAg
ICAgICAgICAgICByZXN1bHQgfD0gYWRkKHZhbHVlKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICB9CiAKLSAgICBib29sIHJlbW92ZShUKiB2YWx1ZSkKKyAgICBib29sIHJlbW92ZShjb25z
dCBUJiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3NldC5jbGVhcih2YWx1ZS0+aW5k
ZXgoKSk7CisgICAgICAgIHJldHVybiBtX3NldC5jbGVhcihJbmRleEtleVR5cGU8VD46OmluZGV4
KHZhbHVlKSk7CiAgICAgfQogCi0gICAgYm9vbCBjb250YWlucyhUKiB2YWx1ZSkgY29uc3QKKyAg
ICBib29sIGNvbnRhaW5zKGNvbnN0IFQmIHZhbHVlKSBjb25zdAogICAgIHsKICAgICAgICAgaWYg
KCF2YWx1ZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIG1fc2V0
LmdldCh2YWx1ZS0+aW5kZXgoKSk7CisgICAgICAgIHJldHVybiBtX3NldC5nZXQoSW5kZXhLZXlU
eXBlPFQ+OjppbmRleCh2YWx1ZSkpOwogICAgIH0KIAogICAgIHNpemVfdCBzaXplKCkgY29uc3QK
QEAgLTEwMCw3ICsxMDEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIFQqIG9wZXJhdG9yKigpCisgICAgICAgICAgICBUIG9wZXJhdG9yKigp
CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1fY29sbGVjdGlvbi0+YXQo
Km1faXRlcik7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9SYW5nZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1JhbmdlLmgJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL1dURi93dGYvUmFuZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
KyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8vIE5v
dGUgdGhhdCB0aGUgJ2JlZ2luJyBpcyBpbmNsdXNpdmUsIHdoaWxlIHRoZSAnZW5kJyBpcyBleGNs
dXNpdmUuIFRoZXNlIHR3byByYW5nZXMgYXJlIG5vbi0KKy8vIG92ZXJsYXBwaW5nOgorLy8KKy8v
ICAgICByYW5nZUEgPSAwLi4uOAorLy8gICAgIHJhbmdlQiA9IDguLi4xNgorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBQYXNzZWRUeXBlPgorY2xhc3MgUmFuZ2UgeworcHVibGljOgorICAgIHR5cGVkZWYg
UGFzc2VkVHlwZSBUeXBlOworICAgIAorICAgIFJhbmdlKCkKKyAgICAgICAgOiBtX2JlZ2luKDAp
CisgICAgICAgICwgbV9lbmQoMCkKKyAgICB7CisgICAgfQorCisgICAgZXhwbGljaXQgUmFuZ2Uo
VHlwZSB2YWx1ZSkKKyAgICAgICAgOiBtX2JlZ2luKHZhbHVlKQorICAgICAgICAsIG1fZW5kKHZh
bHVlICsgMSkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2VuZCA+PSBtX2JlZ2luKTsKKyAgICB9
CisKKyAgICBSYW5nZShUeXBlIGJlZ2luLCBUeXBlIGVuZCkKKyAgICAgICAgOiBtX2JlZ2luKGJl
Z2luKQorICAgICAgICAsIG1fZW5kKGVuZCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2VuZCA+
PSBtX2JlZ2luKTsKKyAgICAgICAgaWYgKG1fYmVnaW4gPT0gbV9lbmQpIHsKKyAgICAgICAgICAg
IC8vIENhbm9uaWNhbGl6ZSBlbXB0eSByYW5nZXMuCisgICAgICAgICAgICBtX2JlZ2luID0gMDsK
KyAgICAgICAgICAgIG1fZW5kID0gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBS
YW5nZSB0b3AoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFJhbmdlKHN0ZDo6bnVtZXJpY19saW1p
dHM8VHlwZT46Om1pbigpLCBzdGQ6Om51bWVyaWNfbGltaXRzPFR5cGU+OjptYXgoKSk7CisgICAg
fQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJhbmdlJiBvdGhlcikgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX2JlZ2luID09IG90aGVyLm1fYmVnaW4KKyAgICAgICAgICAgICYm
IG1fZW5kID09IG90aGVyLm1fZW5kOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBSYW5nZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBv
dGhlcik7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7
IHJldHVybiBtX2JlZ2luICE9IG1fZW5kOyB9CisKKyAgICBSYW5nZSBvcGVyYXRvcnwoY29uc3Qg
UmFuZ2UmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCEqdGhpcykKKyAgICAgICAg
ICAgIHJldHVybiBvdGhlcjsKKyAgICAgICAgaWYgKCFvdGhlcikKKyAgICAgICAgICAgIHJldHVy
biAqdGhpczsKKyAgICAgICAgcmV0dXJuIFJhbmdlKAorICAgICAgICAgICAgc3RkOjptaW4obV9i
ZWdpbiwgb3RoZXIubV9iZWdpbiksCisgICAgICAgICAgICBzdGQ6Om1heChtX2VuZCwgb3RoZXIu
bV9lbmQpKTsKKyAgICB9CisgICAgCisgICAgUmFuZ2UmIG9wZXJhdG9yfD0oY29uc3QgUmFuZ2Um
IG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzID0gKnRoaXMgfCBvdGhlcjsKKyAg
ICB9CisgICAgCisgICAgVHlwZSBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fYmVnaW47IH0KKyAg
ICBUeXBlIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kOyB9CisKKyAgICBib29sIG92ZXJsYXBz
KGNvbnN0IFJhbmdlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OnJh
bmdlc092ZXJsYXAobV9iZWdpbiwgbV9lbmQsIG90aGVyLm1fYmVnaW4sIG90aGVyLm1fZW5kKTsK
KyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIGlmICgqdGhpcyA9PSBSYW5nZSgpKSB7CisgICAgICAgICAgICBvdXQucHJpbnQoIkJv
dHRvbSIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICgqdGhp
cyA9PSB0b3AoKSkgeworICAgICAgICAgICAgb3V0LnByaW50KCJUb3AiKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9iZWdpbiA9PSBtX2VuZCArIDEpIHsK
KyAgICAgICAgICAgIG91dC5wcmludChtX2JlZ2luKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICBvdXQucHJpbnQobV9iZWdpbiwgIi4uLiIsIG1fZW5kKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgVHlwZSBtX2JlZ2luOworICAgIFR5cGUgbV9lbmQ7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpSYW5nZTsKKwpJbmRleDogU291cmNlL1dU
Ri93dGYvUmFuZ2VTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9SYW5nZVNldC5o
CShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvV1RGL3d0Zi9SYW5nZVNldC5oCSh3b3JraW5n
IGNvcHkpCkBAIC03Nyw2ICs3NywxMCBAQCBwdWJsaWM6CiAgICAgICAgIG1faXNDb21wYWN0ID0g
ZmFsc2U7CiAKICAgICAgICAgLy8gV2UgYXBwZW5kIHdpdGhvdXQgY29tcGFjdGluZyBvbmx5IGlm
IGRvaW5nIHNvIGlzIGd1YXJhbnRlZWQgbm90IHRvIHJlc2l6ZSB0aGUgdmVjdG9yLgorICAgICAg
ICAvLyBGSVhNRTogVGhpcyBoZXVyaXN0aWMgaXMgYWxtb3N0IGNlcnRhaW5seSB3cm9uZywgYmVj
YXVzZSB3ZSBkb24ndCBjb250cm9sIHRoZSBjYXBhY2l0eS4gSQorICAgICAgICAvLyB0aGluayB0
aGF0IHRoaXMgbWVhbnMgdGhhdCB3ZSB3aWxsIHNvbWV0aW1lcyBiZSByYWdlLWNvbXBhY3Rpbmcg
d2hlbiB3ZSBhcmUganVzdCBzaHkgb2YgdGhlCisgICAgICAgIC8vIGNhcGFjaXR5LgorICAgICAg
ICAvLyBPT1BTOiBuZWVkIGJ1ZyB1cmwKICAgICAgICAgaWYgKG1fcmFuZ2VzLnNpemUoKSArIDEg
PCBtX3Jhbmdlcy5jYXBhY2l0eSgpKSB7CiAgICAgICAgICAgICBtX3Jhbmdlcy5hcHBlbmQocmFu
Z2UpOwogICAgICAgICAgICAgcmV0dXJuOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305787</attachid>
            <date>2017-03-29 14:16:44 -0700</date>
            <delta_ts>2017-03-29 17:26:02 -0700</delta_ts>
            <desc>more things</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>114995</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIxNDQyNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMTQwLDcgKzE0MCw2IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYjMvQjNG
b2xkUGF0aENvbnN0YW50cy5jcHAKICAgICBiMy9CM0ZyZXF1ZW5jeUNsYXNzLmNwcAogICAgIGIz
L0IzR2VuZXJhdGUuY3BwCi0gICAgYjMvQjNIZWFwUmFuZ2UuY3BwCiAgICAgYjMvQjNJbmZlclN3
aXRjaGVzLmNwcAogICAgIGIzL0IzSW5zZXJ0aW9uU2V0LmNwcAogICAgIGIzL0IzS2luZC5jcHAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTgzLDYgKzE4MywxMCBAQAogCQkwRjI1RjFCMjE4MTYz
NUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1RjFBQjE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xv
d1BhdGhDYWxsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEYyNUYxQjMxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1RjFBQzE4
MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5LmNwcCAqLzsgfTsKIAkJMEYyNUYx
QjQxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNUYxQUQxODE2MzVGMzAwNTIyRjM5
IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGMkFDNTY2MUU4QTBCNzcwMDAxRUUzRiAvKiBBaXJGaXhTcGls
bHNBZnRlclRlcm1pbmFscy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjJBQzU2NDFFOEEwQjc2MDAwMUVFM0YgLyogQWlyRml4U3BpbGxzQWZ0ZXJU
ZXJtaW5hbHMuY3BwICovOyB9OworCQkwRjJBQzU2NzFFOEEwQjc5MDAwMUVFM0YgLyogQWlyRml4
U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMkFDNTY1MUU4QTBCNzYwMDAxRUUzRiAvKiBBaXJGaXhTcGlsbHNBZnRl
clRlcm1pbmFscy5oICovOyB9OworCQkwRjJBQzU2QTFFOEEwQkQzMDAwMUVFM0YgLyogQWlyQWxs
b2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQUM1NjgxRThBMEJEMTAwMDFFRTNGIC8qIEFpckFsbG9j
YXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcCAqLzsgfTsKKwkJMEYyQUM1NkIxRThBMEJENTAw
MDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJBQzU2OTFFOEEwQkQxMDAwMUVF
M0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaCAqLzsgfTsKIAkJMEYyQjY2
QUMxN0I2QjUzRjAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBODE3QjZCNTNEMDBBN0FF
M0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJCNjZBRDE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNv
bWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJCNjZBOTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNv
dW50ZWRJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEYyQjY2QUUxN0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVk
U2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJC
NjZBQTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTY5LDcgKzk3Myw2
IEBACiAJCTBGRUM4NUJDMUJFMTQ2MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0cmVuZ3RoLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUI3MUJF
MTQ2MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0cmVuZ3RoLmNwcCAqLzsgfTsKIAkJMEZFQzg1QkQx
QkUxNDYyRjAwODBGRjc0IC8qIEIzUmVkdWNlU3RyZW5ndGguaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUI4MUJFMTQ2MkYwMDgwRkY3NCAvKiBC
M1JlZHVjZVN0cmVuZ3RoLmggKi87IH07CiAJCTBGRUM4NUMxMUJFMTY3QTAwMDgwRkY3NCAvKiBC
M0VmZmVjdHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NUJFMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0VmZmVjdHMuaCAqLzsgfTsKLQkJMEZFQzg1
QzIxQkUxNjdBMDAwODBGRjc0IC8qIEIzSGVhcFJhbmdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUJGMUJFMTY3QTAwMDgwRkY3NCAvKiBC
M0hlYXBSYW5nZS5jcHAgKi87IH07CiAJCTBGRUM4NUMzMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hl
YXBSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg1QzAxQkUxNjdBMDAwODBGRjc0IC8qIEIzSGVhcFJhbmdlLmggKi87IH07CiAJCTBGRUM4
NUM1MUJFMTZGNUEwMDgwRkY3NCAvKiBCM0VmZmVjdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1QzQxQkUxNkY1QTAwODBGRjc0IC8qIEIz
RWZmZWN0cy5jcHAgKi87IH07CiAJCTBGRUQ2N0I5MUIyNjI1NkQwMDY2Q0UxNSAvKiBERkdDb25z
dGFudEhvaXN0aW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFRDY3QjcxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0YW50SG9pc3Rp
bmdQaGFzZS5jcHAgKi87IH07CkBAIC0yNzAzLDYgKzI3MDYsMTAgQEAKIAkJMEYyNUYxQUIxODE2
MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBGVExTbG93UGF0aENhbGwuaDsgcGF0aCA9IGZ0bC9GVExTbG93UGF0aENhbGwu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNUYxQUMxODE2MzVGMzAwNTIyRjM5
IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBGVExTbG93UGF0aENhbGxLZXkuY3BwOyBwYXRoID0gZnRsL0ZUTFNsb3dQYXRoQ2Fs
bEtleS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjVGMUFEMTgxNjM1RjMw
MDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gRlRMU2xvd1BhdGhDYWxsS2V5Lmg7IHBhdGggPSBmdGwvRlRMU2xvd1BhdGhDYWxs
S2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkFDNTY0MUU4QTBCNzYwMDAx
RUUzRiAvKiBBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5jcHA7IHBhdGgg
PSBiMy9haXIvQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjJBQzU2NTFFOEEwQjc2MDAwMUVFM0YgLyogQWlyRml4U3BpbGxzQWZ0
ZXJUZXJtaW5hbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyRml4U3Bp
bGxzQWZ0ZXJUZXJtaW5hbHMuaDsgcGF0aCA9IGIzL2Fpci9BaXJGaXhTcGlsbHNBZnRlclRlcm1p
bmFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJBQzU2ODFFOEEwQkQxMDAw
MUVFM0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNj
YW4uY3BwOyBwYXRoID0gYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQUM1NjkxRThBMEJEMTAwMDFFRTNG
IC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmg7IHBhdGgg
PSBiMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQjY2QTgxN0I2QjUzRDAwQTdBRTNGIC8qIEdDSW5jb21pbmdS
ZWZDb3VudGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5jb21pbmdSZWZDb3VudGVkLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkE5MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0lu
Y29taW5nUmVmQ291bnRlZElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR0NJbmNvbWluZ1JlZkNv
dW50ZWRJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkFBMTdC
NkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMzQ5Niw3ICszNTAzLDYgQEAKIAkJMEZFQzg1QjcxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVk
dWNlU3RyZW5ndGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNS
ZWR1Y2VTdHJlbmd0aC5jcHA7IHBhdGggPSBiMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQzg1QjgxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVk
dWNlU3RyZW5ndGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNSZWR1Y2VT
dHJlbmd0aC5oOyBwYXRoID0gYjMvQjNSZWR1Y2VTdHJlbmd0aC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkVDODVCRTFCRTE2N0EwMDA4MEZGNzQgLyogQjNFZmZlY3RzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzRWZmZWN0cy5oOyBwYXRoID0gYjMvQjNF
ZmZlY3RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGRUM4NUJGMUJFMTY3QTAw
MDgwRkY3NCAvKiBCM0hlYXBSYW5nZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBCM0hlYXBSYW5nZS5jcHA7IHBhdGggPSBiMy9CM0hlYXBSYW5nZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUM4NUMwMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hl
YXBSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0hlYXBSYW5nZS5o
OyBwYXRoID0gYjMvQjNIZWFwUmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZFQzg1QzQxQkUxNkY1QTAwODBGRjc0IC8qIEIzRWZmZWN0cy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0VmZmVjdHMuY3BwOyBwYXRoID0gYjMvQjNFZmZlY3Rz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFRDY3QjcxQjI2MjU2RDAwNjZD
RTE1IC8qIERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuY3BwOyBwYXRoID0gZGZn
L0RGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01NDE5LDcgKzU0MjUsNiBAQAogCQkJCTBGRUM4NENGMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0dlbmVyYXRlLmggKi8sCiAJCQkJMEYyQzYzQjUxRTYzNDNFODAwQzEzODM5IC8qIEIzR2VuZXJp
Y0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi8sCiAJCQkJMEZFQzg0RDAxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oICovLAotCQkJCTBGRUM4NUJGMUJFMTY3QTAwMDgw
RkY3NCAvKiBCM0hlYXBSYW5nZS5jcHAgKi8sCiAJCQkJMEZFQzg1QzAxQkUxNjdBMDAwODBGRjc0
IC8qIEIzSGVhcFJhbmdlLmggKi8sCiAJCQkJREM2OUI5OUExRDE1RjkwRjAwMkUzQzAwIC8qIEIz
SW5mZXJTd2l0Y2hlcy5jcHAgKi8sCiAJCQkJREM2OUI5OUIxRDE1RjkwRjAwMkUzQzAwIC8qIEIz
SW5mZXJTd2l0Y2hlcy5oICovLApAQCAtNTUyOCw2ICs1NTMzLDggQEAKIAkJMEZFQzg0QjMxQkRB
Q0Q4ODAwODBGRjc0IC8qIGFpciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCisJCQkJMEYyQUM1NjgxRThBMEJEMTAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0
ZXJzQnlMaW5lYXJTY2FuLmNwcCAqLywKKwkJCQkwRjJBQzU2OTFFOEEwQkQxMDAwMUVFM0YgLyog
QWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaCAqLywKIAkJCQk3OTY1QzIxNDFFNUQ3
OTk2MDBCNzU5MUQgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuY3BwICov
LAogCQkJCTc5NjVDMjE1MUU1RDc5OTYwMEI3NTkxRCAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5
R3JhcGhDb2xvcmluZy5oICovLAogCQkJCTBGRUM4NTQ4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJB
bGxvY2F0ZVN0YWNrLmNwcCAqLywKQEAgLTU1NjEsNiArNTU2OCw4IEBACiAJCQkJMEY0REUxQ0Qx
QzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCAqLywKIAkJCQkyNjJEODVC
NDFDMEQ2NTBGMDA2QUNCNjEgLyogQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmNwcCAqLywK
IAkJCQkyNjJEODVCNTFDMEQ2NTBGMDA2QUNCNjEgLyogQWlyRml4UGFydGlhbFJlZ2lzdGVyU3Rh
bGxzLmggKi8sCisJCQkJMEYyQUM1NjQxRThBMEI3NjAwMDFFRTNGIC8qIEFpckZpeFNwaWxsc0Fm
dGVyVGVybWluYWxzLmNwcCAqLywKKwkJCQkwRjJBQzU2NTFFOEEwQjc2MDAwMUVFM0YgLyogQWly
Rml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCAqLywKIAkJCQkwRkVDODU1MjFCREFDREM3MDA4MEZG
NzQgLyogQWlyRnJlcXVlbnRlZEJsb2NrLmggKi8sCiAJCQkJMEZFQzg1NTMxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckdlbmVyYXRlLmNwcCAqLywKIAkJCQkwRkVDODU1NDFCREFDREM3MDA4MEZGNzQg
LyogQWlyR2VuZXJhdGUuaCAqLywKQEAgLTgxMzksNiArODE0OCw3IEBACiAJCQkJMEZFQzg1MTAx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkVDODUxMjFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0MzQyMkE2MzFDMTU4RTZEMDBFMkVCOTggLyogQjNDb25zdEZsb2F0VmFsdWUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkFDNTZCMUU4QTBCRDUwMDAxRUUzRiAvKiBBaXJBbGxv
Y2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1QjMx
QkRFRDk1NzAwODBGRjc0IC8qIEIzQ29uc3RQdHJWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYzMzhERjYxQkU5M0Q1NTAwMTNDODhGIC8qIEIzQ29uc3RyYWluZWRWYWx1ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyQzYzQjgxRTYzNDNGNzAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2NrSW5z
ZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKQEAgLTkzNjIsNiArOTM3Miw3IEBACiAJCQkJNzA5
RkI4NkExQUUzMzVDNjAwMzlEMDY5IC8qIFdlYWtTZXRDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMTQxNTAxMzMxNTRCQjEzRjAwNUQ4Qzk4IC8qIFdlYWtTZXRJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3MDlGQjg2QzFBRTMzNUM2MDAzOUQwNjkgLyogV2Vha1NldFByb3Rv
dHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQUM1NjcxRThBMEI3OTAwMDFFRTNGIC8qIEFp
ckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JFRDFE
QjU4REFEMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNDMTYxREI1OUNCMjAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5
Q29tcGlsZUVycm9yQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JF
RjFEQjU4REFEMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90b3R5cGUuaCBp
biBIZWFkZXJzICovLApAQCAtOTk4OCw3ICs5OTk5LDYgQEAKIAkJCQkwRjcyNUNBRjFDNTA2RDNC
MDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkVDODUxNTFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkVDODUxODFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQkwRkVDODVDMjFCRTE2N0EwMDA4MEZGNzQgLyogQjNIZWFwUmFuZ2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJREM2OUI5OUMxRDE1RjkxMjAwMkUzQzAwIC8qIEIzSW5m
ZXJTd2l0Y2hlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVDODVCOTFCRTE0NjJGMDA4MEZG
NzQgLyogQjNJbnNlcnRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZERjY3RDMxRDlD
NkQyQTAwMUI5ODI1IC8qIEIzS2luZC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMTU0LDYgKzEw
MTY0LDcgQEAKIAkJCQlBNzhBOTc3NjE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkJEQzE1MTUxQzVENEQwMENEODkxMCAvKiBERkdGaXh1
cFBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjAxNzdGMURDQURDMzMwMEVBNTk1MCAv
KiBERkdGbG93SW5kZXhpbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQUM1NkExRThBMEJE
MzAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGOUQzMzk2MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRjcxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0ZsdXNo
Rm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNjlDQzg4MTkzQUM2MEEwMDQ1NzU5RSAv
KiBERkdGcm96ZW5WYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMjYzLDYgKzEwMjc0LDcg
QEAKIAkJCQkyQTgzNjM4NTE4RDdEMEVFMDAwMEVCQ0MgLyogRWRlbkdDQWN0aXZpdHlDYWxsYmFj
ay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OUU0NUEyNTE4QTFCMjU5MDAyNkQ4OEYgLyogRW5j
b2RlZFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUM3MTA3RUMzNzYwMDQyN0E0
OCAvKiBFcnJvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJBQzU2NjFFOEEwQjc3MDAwMUVF
M0YgLyogQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQ3RjM5QzgxMDdFQzM3NjAwNDI3QTQ4IC8qIEVycm9yQ29uc3RydWN0b3IuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRkVCNThDMTQxODdCOEIxNjAwOThFRjBCIC8qIEVycm9ySGFuZGxpbmdTY29w
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDOTEwN0VDMzc2MDA0MjdBNDggLyogRXJy
b3JJbnN0YW5jZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrVXRpbHMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTE0LDcgKzExNCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+CiBWZWN0b3I8QmFz
aWNCbG9jayo+IGJsb2Nrc0luUHJlT3JkZXIoQmFzaWNCbG9jayogcm9vdCkKIHsKICAgICBWZWN0
b3I8QmFzaWNCbG9jayo+IHJlc3VsdDsKLSAgICBHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2Nr
KiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IHdvcmtsaXN0OworICAgIEdyYXBoTm9kZVdvcmtsaXN0
PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+IHdvcmtsaXN0OwogICAgIHdvcmts
aXN0LnB1c2gocm9vdCk7CiAgICAgd2hpbGUgKEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3Qu
cG9wKCkpIHsKICAgICAgICAgcmVzdWx0LmFwcGVuZChibG9jayk7CkBAIC0xMjgsNyArMTI4LDcg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KIFZlY3RvcjxCYXNpY0Jsb2NrKj4gYmxv
Y2tzSW5Qb3N0T3JkZXIoQmFzaWNCbG9jayogcm9vdCkKIHsKICAgICBWZWN0b3I8QmFzaWNCbG9j
ayo+IHJlc3VsdDsKLSAgICBQb3N0T3JkZXJHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwg
SW5kZXhTZXQ8QmFzaWNCbG9jaz4+IHdvcmtsaXN0OworICAgIFBvc3RPcmRlckdyYXBoTm9kZVdv
cmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+IHdvcmtsaXN0OwogICAg
IHdvcmtsaXN0LnB1c2gocm9vdCk7CiAgICAgd2hpbGUgKEdyYXBoTm9kZVdpdGhPcmRlcjxCYXNp
Y0Jsb2NrKj4gaXRlbSA9IHdvcmtsaXN0LnBvcCgpKSB7CiAgICAgICAgIHN3aXRjaCAoaXRlbS5v
cmRlcikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tXb3JrbGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrV29ya2xpc3Qu
aAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tX
b3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CiAKIGNsYXNzIEJhc2ljQmxvY2s7CiAKLXR5cGVkZWYgR3JhcGhOb2RlV29y
a2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2s+PiBCbG9ja1dvcmtsaXN0Owor
dHlwZWRlZiBHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9j
ayo+PiBCbG9ja1dvcmtsaXN0OwogCiAvLyBXaGVuIHlvdSBzYXkgQmxvY2tXaXRoPGludD4geW91
IHNob3VsZCByZWFkIGl0IGFzICJibG9jayB3aXRoIGFuIGludCIuCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB1c2luZyBCbG9ja1dpdGggPSBHcmFwaE5vZGVXaXRoPEJhc2ljQmxvY2sqLCBUPjsKQEAg
LTQ0LDEzICs0NCwxMyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBCbG9ja1dpdGggPSBH
CiAvLyBwZXJtaXRzIGZvcmNpYmx5IGVucXVldWVpbmcgdGhpbmdzIGV2ZW4gaWYgdGhlIGJsb2Nr
IGhhcyBhbHJlYWR5IGJlZW4gc2Vlbi4gSXQncyB1c2VmdWwgZm9yCiAvLyB0aGluZ3MgbGlrZSBi
dWlsZGluZyBhIHNwYW5uaW5nIHRyZWUsIGluIHdoaWNoIGNhc2UgVCAodGhlIGF1eGlsaWFyeSBw
YXlsb2FkKSB3b3VsZCBiZSB0aGUKIC8vIHN1Y2Nlc3NvciBpbmRleC4KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3JrbGlzdCA9IEV4dGVuZGVkR3JhcGhOb2RlV29y
a2xpc3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0PEJhc2ljQmxvY2s+PjsKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3JrbGlzdCA9IEV4dGVuZGVkR3JhcGhOb2Rl
V29ya2xpc3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0PEJhc2ljQmxvY2sqPj47CiAKIHR5cGVk
ZWYgR3JhcGhWaXNpdE9yZGVyIFZpc2l0T3JkZXI7CiAKIHR5cGVkZWYgR3JhcGhOb2RlV2l0aE9y
ZGVyPEJhc2ljQmxvY2sqPiBCbG9ja1dpdGhPcmRlcjsKIAotdHlwZWRlZiBQb3N0T3JkZXJHcmFw
aE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IFBvc3RPcmRl
ckJsb2NrV29ya2xpc3Q7Cit0eXBlZGVmIFBvc3RPcmRlckdyYXBoTm9kZVdvcmtsaXN0PEJhc2lj
QmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+IFBvc3RPcmRlckJsb2NrV29ya2xpc3Q7CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDRkcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDRkcu
aAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ0ZHLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzksOCArMzksOCBAQCBjbGFzcyBDRkcgewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIHR5cGVkZWYgQmFzaWNCbG9jayogTm9kZTsKLSAg
ICB0eXBlZGVmIEluZGV4U2V0PEJhc2ljQmxvY2s+IFNldDsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB1c2luZyBNYXAgPSBJbmRleE1hcDxCYXNpY0Jsb2NrLCBUPjsKKyAgICB0eXBlZGVmIElu
ZGV4U2V0PEJhc2ljQmxvY2sqPiBTZXQ7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcg
TWFwID0gSW5kZXhNYXA8QmFzaWNCbG9jayosIFQ+OwogICAgIHR5cGVkZWYgVmVjdG9yPEJhc2lj
QmxvY2sqLCA0PiBMaXN0OwogCiAgICAgQ0ZHKFByb2NlZHVyZSYgcHJvYykKQEAgLTUxLDcgKzUx
LDcgQEAgcHVibGljOgogICAgIE5vZGUgcm9vdCgpIHsgcmV0dXJuIG1fcHJvY1swXTsgfQogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBNYXA8VD4gbmV3TWFwKCkgeyByZXR1cm4gSW5k
ZXhNYXA8SlNDOjpCMzo6QmFzaWNCbG9jaywgVD4obV9wcm9jLnNpemUoKSk7IH0KKyAgICBNYXA8
VD4gbmV3TWFwKCkgeyByZXR1cm4gSW5kZXhNYXA8SlNDOjpCMzo6QmFzaWNCbG9jayosIFQ+KG1f
cHJvYy5zaXplKCkpOyB9CiAKICAgICBTdWNjZXNzb3JDb2xsZWN0aW9uPEJhc2ljQmxvY2ssIEJh
c2ljQmxvY2s6OlN1Y2Nlc3Nvckxpc3Q+IHN1Y2Nlc3NvcnMoTm9kZSBub2RlKSB7IHJldHVybiBu
b2RlLT5zdWNjZXNzb3JCbG9ja3MoKTsgfQogICAgIEJhc2ljQmxvY2s6OlByZWRlY2Vzc29yTGlz
dCYgcHJlZGVjZXNzb3JzKE5vZGUgbm9kZSkgeyByZXR1cm4gbm9kZS0+cHJlZGVjZXNzb3JzKCk7
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCShyZXZpc2lvbiAyMTQ0Mjcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uaAkod29ya2luZyBjb3B5KQpA
QCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShCM19KSVQpCiAKICNpbmNsdWRlICJKU0V4cG9y
dE1hY3Jvcy5oIgorI2luY2x1ZGUgIk9wdGlvbnMuaCIKICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CkBAIC0xNzAsNiArMTcxLDEzIEBA
IHN0YXRpYyBJbnRUeXBlIHJvdGF0ZUxlZnQoSW50VHlwZSB2YWx1ZSwKICAgICByZXR1cm4gKHVW
YWx1ZSA8PCBzaGlmdCkgfCAodVZhbHVlID4+ICgoYml0cyAtIHNoaWZ0KSAmIG1hc2spKTsKIH0K
IAoraW5saW5lIHVuc2lnbmVkIGRlZmF1bHRPcHRMZXZlbCgpCit7CisgICAgLy8gVGhpcyBzaG91
bGQgYWxtb3N0IGFsd2F5cyByZXR1cm4gMiwgYnV0IHdlIGFsbG93IHRoaXMgZGVmYXVsdCB0byBi
ZSBsb3dlcmVkIGZvciB0ZXN0aW5nLiBTb21lCisgICAgLy8gY29tcG9uZW50cyB3aWxsIGRlbGli
ZXJhdGVseSBzZXQgdGhlIG9wdExldmVsLgorICAgIHJldHVybiBPcHRpb25zOjpkZWZhdWx0QjNP
cHRMZXZlbCgpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKIAogI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsZS5oCShyZXZp
c2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShCM19KSVQpCiAKKyNp
bmNsdWRlICJCM0NvbW1vbi5oIgogI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKIAogbmFtZXNw
YWNlIEpTQyB7CkBAIC00NSw3ICs0Niw3IEBAIGNsYXNzIFByb2NlZHVyZTsKIC8vIFRoZW4geW91
IGtlZXAgdGhlIENvbXBpbGF0aW9uIG9iamVjdCBhbGl2ZSBmb3IgYXMgbG9uZyBhcyB5b3Ugd2Fu
dCB0byBiZSBhYmxlIHRvIHJ1biB0aGUgY29kZS4KIC8vIElmIHRoaXMgQVBJIGZlZWxzIHRvbyBo
aWdoLWxldmVsLCB5b3UgY2FuIHVzZSBCMzo6Z2VuZXJhdGUoKSBkaXJlY3RseS4KIAotSlNfRVhQ
T1JUX1BSSVZBVEUgQ29tcGlsYXRpb24gY29tcGlsZShWTSYsIFByb2NlZHVyZSYsIHVuc2lnbmVk
IG9wdExldmVsID0gMSk7CitKU19FWFBPUlRfUFJJVkFURSBDb21waWxhdGlvbiBjb21waWxlKFZN
JiwgUHJvY2VkdXJlJiwgdW5zaWduZWQgb3B0TGV2ZWwgPSBkZWZhdWx0T3B0TGV2ZWwoKSk7CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNEdXBsaWNhdGVUYWlscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzRHVwbGljYXRlVGFpbHMuY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNEdXBsaWNhdGVUYWlscy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY4LDcgKzY4LDcgQEAgcHVibGljOgogCiAgICAgICAgIG1fcHJvYy5yZXNldFZhbHVlT3duZXJz
KCk7CiAKLSAgICAgICAgSW5kZXhTZXQ8QmFzaWNCbG9jaz4gY2FuZGlkYXRlczsKKyAgICAgICAg
SW5kZXhTZXQ8QmFzaWNCbG9jayo+IGNhbmRpZGF0ZXM7CiAKICAgICAgICAgZm9yIChCYXNpY0Js
b2NrKiBibG9jayA6IG1fcHJvYykgewogICAgICAgICAgICAgaWYgKGJsb2NrLT5zaXplKCkgPiBt
X21heFNpemUpCkBAIC04Miw3ICs4Miw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogCiAgICAgICAg
IC8vIENvbGxlY3QgdGhlIHNldCBvZiB2YWx1ZXMgdGhhdCBtdXN0IGJlIGRlLVNTQSdkLgotICAg
ICAgICBJbmRleFNldDxWYWx1ZT4gdmFsdWVzVG9EZW1vdGU7CisgICAgICAgIEluZGV4U2V0PFZh
bHVlKj4gdmFsdWVzVG9EZW1vdGU7CiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBt
X3Byb2MpIHsKICAgICAgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogKmJsb2NrKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSA9PSBQaGkgJiYgY2FuZGlkYXRlcy5jb250
YWlucyhibG9jaykpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVD
b21tb25TdWJleHByZXNzaW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuY3BwCShyZXZpc2lvbiAyMTQ0
MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVDb21tb25TdWJleHBy
ZXNzaW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4Miw3ICs2ODIsNyBAQCBwcml2YXRlOgog
ICAgIERvbWluYXRvcnMmIG1fZG9taW5hdG9yczsKICAgICBQdXJlQ1NFIG1fcHVyZUNTRTsKICAg
ICAKLSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBJbXB1cmVCbG9ja0RhdGE+IG1faW1wdXJlQmxv
Y2tEYXRhOworICAgIEluZGV4TWFwPEJhc2ljQmxvY2sqLCBJbXB1cmVCbG9ja0RhdGE+IG1faW1w
dXJlQmxvY2tEYXRhOwogCiAgICAgSW1wdXJlQmxvY2tEYXRhIG1fZGF0YTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRml4U1NBLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNGaXhTU0EuY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGaXhTU0EuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3
ICs0OSw3IEBAIG5hbWVzcGFjZSB7CiBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIH0gLy8g
YW5vbnltb3VzIG5hbWVzcGFjZQogCi12b2lkIGRlbW90ZVZhbHVlcyhQcm9jZWR1cmUmIHByb2Ms
IGNvbnN0IEluZGV4U2V0PFZhbHVlPiYgdmFsdWVzKQordm9pZCBkZW1vdGVWYWx1ZXMoUHJvY2Vk
dXJlJiBwcm9jLCBjb25zdCBJbmRleFNldDxWYWx1ZSo+JiB2YWx1ZXMpCiB7CiAgICAgSGFzaE1h
cDxWYWx1ZSosIFZhcmlhYmxlKj4gbWFwOwogICAgIEhhc2hNYXA8VmFsdWUqLCBWYXJpYWJsZSo+
IHBoaU1hcDsKQEAgLTEyMSw3ICsxMjEsNyBAQCBib29sIGZpeFNTQShQcm9jZWR1cmUmIHByb2Mp
CiAgICAgLy8gSnVzdCBmb3Igc2FuaXR5LCByZW1vdmUgYW55IHVudXNlZCB2YXJpYWJsZXMgZmly
c3QuIEl0J3MgdW5saWtlbHkgdGhhdCB0aGlzIGNvZGUgaGFzIGFueQogICAgIC8vIGJ1Z3MgaGF2
aW5nIHRvIGRvIHdpdGggZGVhZCB2YXJpYWJsZXMsIGJ1dCBpdCB3b3VsZCBiZSBzaWxseSB0byBo
YXZlIHRvIGZpeCBzdWNoIGEgYnVnIGlmCiAgICAgLy8gaXQgZGlkIGFyaXNlLgotICAgIEluZGV4
U2V0PFZhcmlhYmxlPiBsaXZlVmFyaWFibGVzOworICAgIEluZGV4U2V0PFZhcmlhYmxlKj4gbGl2
ZVZhcmlhYmxlczsKICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IHByb2MudmFsdWVzKCkpIHsKICAg
ICAgICAgaWYgKFZhcmlhYmxlVmFsdWUqIHZhcmlhYmxlVmFsdWUgPSB2YWx1ZS0+YXM8VmFyaWFi
bGVWYWx1ZT4oKSkKICAgICAgICAgICAgIGxpdmVWYXJpYWJsZXMuYWRkKHZhcmlhYmxlVmFsdWUt
PnZhcmlhYmxlKCkpOwpAQCAtMTQ1LDcgKzE0NSw3IEBAIGJvb2wgZml4U1NBKFByb2NlZHVyZSYg
cHJvYykKIAogICAgIC8vIENyZWF0ZSBhIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlICgiY2FsY1Zh
ciIpIGZvciBldmVyeSB2YXJpYWJsZS4KICAgICBWZWN0b3I8VmFyaWFibGUqPiBjYWxjVmFyVG9W
YXJpYWJsZTsKLSAgICBJbmRleE1hcDxWYXJpYWJsZSwgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUq
PiB2YXJpYWJsZVRvQ2FsY1Zhcihwcm9jLnZhcmlhYmxlcygpLnNpemUoKSk7CisgICAgSW5kZXhN
YXA8VmFyaWFibGUqLCBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSo+IHZhcmlhYmxlVG9DYWxjVmFy
KHByb2MudmFyaWFibGVzKCkuc2l6ZSgpKTsKIAogICAgIGZvciAoVmFyaWFibGUqIHZhcmlhYmxl
IDogcHJvYy52YXJpYWJsZXMoKSkgewogICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSog
Y2FsY1ZhciA9IHNzYS5uZXdWYXJpYWJsZSgpOwpAQCAtMTg1LDcgKzE4NSw3IEBAIGJvb2wgZml4
U1NBKFByb2NlZHVyZSYgcHJvYykKIAogICAgIC8vIE5vdyBwZXJmb3JtIHRoZSBjb252ZXJzaW9u
LgogICAgIEluc2VydGlvblNldCBpbnNlcnRpb25TZXQocHJvYyk7Ci0gICAgSW5kZXhNYXA8VmFy
aWFibGUsIFZhbHVlKj4gbWFwcGluZyhwcm9jLnZhcmlhYmxlcygpLnNpemUoKSk7CisgICAgSW5k
ZXhNYXA8VmFyaWFibGUqLCBWYWx1ZSo+IG1hcHBpbmcocHJvYy52YXJpYWJsZXMoKS5zaXplKCkp
OwogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBwcm9jLmJsb2Nrc0luUHJlT3JkZXIoKSkg
ewogICAgICAgICBtYXBwaW5nLmNsZWFyKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0ZpeFNTQS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0ZpeFNTQS5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNGaXhTU0EuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNyw3ICszNyw3IEBAIGNsYXNzIFByb2NlZHVyZTsK
IAogLy8gVHVybnMgYWxsIG1lbnRpb25zIG9mIHRoZSBnaXZlbiB2YWx1ZXMgaW50byBhY2Nlc3Nl
cyB0byB2YXJpYWJsZXMuIFRoaXMgaXMgbWVhbnQgdG8gYmUgdXNlZAogLy8gZnJvbSBwaGFzZXMg
dGhhdCBkb24ndCBsaWtlIFNTQSBmb3Igd2hhdGV2ZXIgcmVhc29uLgotdm9pZCBkZW1vdGVWYWx1
ZXMoUHJvY2VkdXJlJiwgY29uc3QgSW5kZXhTZXQ8VmFsdWU+Jik7Cit2b2lkIGRlbW90ZVZhbHVl
cyhQcm9jZWR1cmUmLCBjb25zdCBJbmRleFNldDxWYWx1ZSo+Jik7CiAKIC8vIFRoaXMgZml4ZXMg
U1NBIGZvciB5b3UuIFVzZSB0aGlzIGFmdGVyIHlvdSBoYXZlIGRvbmUgZGVtb3RlVmFsdWVzKCkg
YW5kIHlvdSBoYXZlIHBlcmZvcm1lZAogLy8gd2hhdGV2ZXIgZXZpbCB0cmFuc2Zvcm1hdGlvbiB5
b3UgbmVlZGVkLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAko
cmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQgcHJlcGFyZUZvckdlbmVy
YXRpb24oUHJvY2VkdXJlJiBwcm8KICAgICBUaW1pbmdTY29wZSB0aW1pbmdTY29wZSgicHJlcGFy
ZUZvckdlbmVyYXRpb24iKTsKIAogICAgIGdlbmVyYXRlVG9BaXIocHJvY2VkdXJlLCBvcHRMZXZl
bCk7Ci0gICAgQWlyOjpwcmVwYXJlRm9yR2VuZXJhdGlvbihwcm9jZWR1cmUuY29kZSgpKTsKKyAg
ICBBaXI6OnByZXBhcmVGb3JHZW5lcmF0aW9uKHByb2NlZHVyZS5jb2RlKCksIG9wdExldmVsKTsK
IH0KIAogdm9pZCBnZW5lcmF0ZShQcm9jZWR1cmUmIHByb2NlZHVyZSwgQ0NhbGxIZWxwZXJzJiBq
aXQpCkBAIC04MCw3ICs4MCw3IEBAIHZvaWQgZ2VuZXJhdGVUb0FpcihQcm9jZWR1cmUmIHByb2Nl
ZHVyZSwKICAgICBpZiAoc2hvdWxkVmFsaWRhdGVJUigpKQogICAgICAgICB2YWxpZGF0ZShwcm9j
ZWR1cmUpOwogCi0gICAgaWYgKG9wdExldmVsID49IDEpIHsKKyAgICBpZiAob3B0TGV2ZWwgPj0g
MikgewogICAgICAgICByZWR1Y2VEb3VibGVUb0Zsb2F0KHByb2NlZHVyZSk7CiAgICAgICAgIHJl
ZHVjZVN0cmVuZ3RoKHByb2NlZHVyZSk7CiAgICAgICAgIGVsaW1pbmF0ZUNvbW1vblN1YmV4cHJl
c3Npb25zKHByb2NlZHVyZSk7CkBAIC05MSwxMiArOTEsMTUgQEAgdm9pZCBnZW5lcmF0ZVRvQWly
KFByb2NlZHVyZSYgcHJvY2VkdXJlLAogICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IEFkZCBt
b3JlIG9wdGltaXphdGlvbnMgaGVyZS4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1MDUwNworICAgIH0gZWxzZSBpZiAob3B0TGV2ZWwgPj0gMSkg
eworICAgICAgICAvLyBGSVhNRTogRXhwbG9yZSBiZXR0ZXIgInF1aWNrIG1vZGUiIG9wdGltaXph
dGlvbnMuCisgICAgICAgIHJlZHVjZVN0cmVuZ3RoKHByb2NlZHVyZSk7CiAgICAgfQogCiAgICAg
Ly8gVGhpcyBwdXRzIHRoZSBJUiBpbiBxdWlya3MgbW9kZS4KICAgICBsb3dlck1hY3Jvcyhwcm9j
ZWR1cmUpOwogCi0gICAgaWYgKG9wdExldmVsID49IDEpIHsKKyAgICBpZiAob3B0TGV2ZWwgPj0g
MikgewogICAgICAgICByZWR1Y2VTdHJlbmd0aChwcm9jZWR1cmUpOwogCiAgICAgICAgIC8vIEZJ
WE1FOiBBZGQgbW9yZSBvcHRpbWl6YXRpb25zIGhlcmUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNHZW5lcmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0dlbmVyYXRlLmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0dlbmVyYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDggQEAKIAog
I2lmIEVOQUJMRShCM19KSVQpCiAKKyNpbmNsdWRlICJCM0NvbW1vbi5oIgorCiBuYW1lc3BhY2Ug
SlNDIHsKIAogY2xhc3MgQ0NhbGxIZWxwZXJzOwpAQCAtMzgsNyArNDAsNyBAQCBuYW1lc3BhY2Ug
QWlyIHsgY2xhc3MgQ29kZTsgfQogCiAvLyBUaGlzIHRha2VzIGEgQjM6OlByb2NlZHVyZSwgb3B0
aW1pemVzIGl0IGluLXBsYWNlLCBsb3dlcnMgaXQgdG8gQWlyLCBhbmQgcHJlcGFyZXMgdGhlIEFp
ciBmb3IKIC8vIGdlbmVyYXRpb24uCi1KU19FWFBPUlRfUFJJVkFURSB2b2lkIHByZXBhcmVGb3JH
ZW5lcmF0aW9uKFByb2NlZHVyZSYsIHVuc2lnbmVkIG9wdExldmVsID0gMSk7CitKU19FWFBPUlRf
UFJJVkFURSB2b2lkIHByZXBhcmVGb3JHZW5lcmF0aW9uKFByb2NlZHVyZSYsIHVuc2lnbmVkIG9w
dExldmVsID0gZGVmYXVsdE9wdExldmVsKCkpOwogCiAvLyBUaGlzIHRha2VzIGEgQjM6OlByb2Nl
ZHVyZSB0aGF0IGhhcyBiZWVuIHByZXBhcmVkIGZvciBnZW5lcmF0aW9uIChpLmUuIGl0IGhhcyBi
ZWVuIGxvd2VyZWQgdG8gQWlyIGFuZAogLy8gdGhlIEFpciBoYXMgYmVlbiBwcmVwYXJlZCBmb3Ig
Z2VuZXJhdGlvbikgYW5kIGdlbmVyYXRlcyBpdC4gVGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvZiBj
YWxsaW5nCkBAIC00OCw3ICs1MCw3IEBAIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZ2VuZXJhdGUo
UHJvY2VkdXIKIC8vIFRoaXMgdGFrZXMgYSBCMzo6UHJvY2VkdXJlLCBvcHRpbWl6ZXMgaXQgaW4t
cGxhY2UsIGFuZCBsb3dlcnMgaXQgdG8gQWlyLiBZb3UgY2FuIHRoZW4gZ2VuZXJhdGUKIC8vIHRo
ZSBBaXIgdG8gbWFjaGluZSBjb2RlIHVzaW5nIEFpcjo6cHJlcGFyZUZvckdlbmVyYXRpb24oKSBh
bmQgQWlyOjpnZW5lcmF0ZSgpIG9uIHRoZSBQcm9jZWR1cmUncwogLy8gY29kZSgpLgotdm9pZCBn
ZW5lcmF0ZVRvQWlyKFByb2NlZHVyZSYsIHVuc2lnbmVkIG9wdExldmVsID0gMSk7Cit2b2lkIGdl
bmVyYXRlVG9BaXIoUHJvY2VkdXJlJiwgdW5zaWduZWQgb3B0TGV2ZWwgPSBkZWZhdWx0T3B0TGV2
ZWwoKSk7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNIZWFwUmFuZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw0OSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJCM0hlYXBSYW5nZS5oIgotCi0jaWYgRU5BQkxF
KEIzX0pJVCkKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7Ci0KLXZvaWQgSGVhcFJh
bmdlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAgaWYgKCp0aGlzID09IEhl
YXBSYW5nZSgpKSB7Ci0gICAgICAgIG91dC5wcmludCgiQm90dG9tIik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgaWYgKCp0aGlzID09IHRvcCgpKSB7Ci0gICAgICAgIG91dC5wcmludCgi
VG9wIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgb3V0LnByaW50KG1fYmVnaW4sICIu
Li4iLCBtX2VuZCk7Ci19Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwotCi0jZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJh
bmdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJhbmdl
LmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBS
YW5nZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw5MCArMjcsMTUgQEAKIAogI2lmIEVOQUJMRShC
M19KSVQpCiAKLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgotI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorI2luY2x1ZGUgPHd0Zi9SYW5nZS5oPgog
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAogLy8gQWxpYXMgYW5hbHlzaXMgaW4g
QjMgaXMgZG9uZSBieSBjaGVja2luZyBpZiB0d28gaW50ZWdlciByYW5nZXMgb3ZlcmxhcC4gVGhp
cyBpcyBwb3dlcmZ1bCBlbm91Z2gKIC8vIHRvIGJlIHVzZWQgZm9yIFRCQUEtc3R5bGUgYWxpYXMg
YW5hbHlzaXMgdXNlZCBieSB0aGUgREZHLCBGVEwsIGFuZCBMTFZNOiB5b3UganVzdCB0dXJuIGVh
Y2ggbm9kZQogLy8gaW4gdGhlIHRyZWUgb2YgYWJzdHJhY3QgaGVhcHMgaW50byBhIHByZS9wb3N0
IHJhbmdlLgotLy8KLS8vIE5vdGUgdGhhdCB0aGUgJ2JlZ2luJyBpcyBpbmNsdXNpdmUsIHdoaWxl
IHRoZSAnZW5kJyBpcyBleGNsdXNpdmUuIFRoZXNlIHR3byByYW5nZXMgYXJlIG5vbi0KLS8vIG92
ZXJsYXBwaW5nOgotLy8KLS8vICAgICByYW5nZUEgPSAwLi4uOAotLy8gICAgIHJhbmdlQiA9IDgu
Li4xNgotCi1jbGFzcyBIZWFwUmFuZ2UgewotcHVibGljOgotICAgIHR5cGVkZWYgdW5zaWduZWQg
VHlwZTsKLSAgICAKLSAgICBIZWFwUmFuZ2UoKQotICAgICAgICA6IG1fYmVnaW4oMCkKLSAgICAg
ICAgLCBtX2VuZCgwKQotICAgIHsKLSAgICB9Ci0KLSAgICBleHBsaWNpdCBIZWFwUmFuZ2UodW5z
aWduZWQgdmFsdWUpCi0gICAgICAgIDogbV9iZWdpbih2YWx1ZSkKLSAgICAgICAgLCBtX2VuZCh2
YWx1ZSArIDEpCi0gICAgewotICAgICAgICBBU1NFUlQobV9lbmQgPj0gbV9iZWdpbik7Ci0gICAg
fQotCi0gICAgSGVhcFJhbmdlKHVuc2lnbmVkIGJlZ2luLCB1bnNpZ25lZCBlbmQpCi0gICAgICAg
IDogbV9iZWdpbihiZWdpbikKLSAgICAgICAgLCBtX2VuZChlbmQpCi0gICAgewotICAgICAgICBB
U1NFUlQobV9lbmQgPj0gbV9iZWdpbik7Ci0gICAgICAgIGlmIChtX2JlZ2luID09IG1fZW5kKSB7
Ci0gICAgICAgICAgICAvLyBDYW5vbmljYWxpemUgZW1wdHkgcmFuZ2VzLgotICAgICAgICAgICAg
bV9iZWdpbiA9IDA7Ci0gICAgICAgICAgICBtX2VuZCA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBzdGF0aWMgSGVhcFJhbmdlIHRvcCgpCi0gICAgewotICAgICAgICByZXR1cm4gSGVhcFJh
bmdlKDAsIFVJTlRfTUFYKTsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSGVh
cFJhbmdlJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2JlZ2luID09IG90
aGVyLm1fYmVnaW4KLSAgICAgICAgICAgICYmIG1fZW5kID09IG90aGVyLm1fZW5kOwotICAgIH0K
LQotICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBIZWFwUmFuZ2UmIG90aGVyKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwotICAgIH0KLSAgICAKLSAgICBI
ZWFwUmFuZ2Ugb3BlcmF0b3J8KGNvbnN0IEhlYXBSYW5nZSYgb3RoZXIpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gSGVhcFJhbmdlKAotICAgICAgICAgICAgc3RkOjptaW4obV9iZWdpbiwg
b3RoZXIubV9iZWdpbiksCi0gICAgICAgICAgICBzdGQ6Om1heChtX2VuZCwgb3RoZXIubV9lbmQp
KTsKLSAgICB9Ci0gICAgCi0gICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0
dXJuIG1fYmVnaW4gIT0gbV9lbmQ7IH0KLQotICAgIHVuc2lnbmVkIGJlZ2luKCkgY29uc3QgeyBy
ZXR1cm4gbV9iZWdpbjsgfQotICAgIHVuc2lnbmVkIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5k
OyB9Ci0KLSAgICBib29sIG92ZXJsYXBzKGNvbnN0IEhlYXBSYW5nZSYgb3RoZXIpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gV1RGOjpyYW5nZXNPdmVybGFwKG1fYmVnaW4sIG1fZW5kLCBv
dGhlci5tX2JlZ2luLCBvdGhlci5tX2VuZCk7Ci0gICAgfQotCi0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIHVu
c2lnbmVkIG1fYmVnaW47Ci0gICAgdW5zaWduZWQgbV9lbmQ7Ci19OworCit0eXBlZGVmIFJhbmdl
PHVuc2lnbmVkPiBIZWFwUmFuZ2U7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2aXNpb24gMjE0
NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMzNzksMTAgKzMzNzksMTAgQEAgcHJpdmF0ZToKICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAgICAgCi0gICAgSW5kZXhTZXQ8VmFsdWU+
IG1fbG9ja2VkOyAvLyBUaGVzZSBhcmUgdmFsdWVzIHRoYXQgd2lsbCBoYXZlIG5vIFRtcCBpbiBB
aXIuCi0gICAgSW5kZXhNYXA8VmFsdWUsIFRtcD4gbV92YWx1ZVRvVG1wOyAvLyBUaGVzZSBhcmUg
dmFsdWVzIHRoYXQgbXVzdCBoYXZlIGEgVG1wIGluIEFpci4gV2Ugc2F5IHRoYXQgYSBWYWx1ZSog
d2l0aCBhIG5vbi1udWxsIFRtcCBpcyAicGlubmVkIi4KLSAgICBJbmRleE1hcDxWYWx1ZSwgVG1w
PiBtX3BoaVRvVG1wOyAvLyBFYWNoIFBoaSBnZXRzIGl0cyBvd24gVG1wLgotICAgIEluZGV4TWFw
PEIzOjpCYXNpY0Jsb2NrLCBBaXI6OkJhc2ljQmxvY2sqPiBtX2Jsb2NrVG9CbG9jazsKKyAgICBJ
bmRleFNldDxWYWx1ZSo+IG1fbG9ja2VkOyAvLyBUaGVzZSBhcmUgdmFsdWVzIHRoYXQgd2lsbCBo
YXZlIG5vIFRtcCBpbiBBaXIuCisgICAgSW5kZXhNYXA8VmFsdWUqLCBUbXA+IG1fdmFsdWVUb1Rt
cDsgLy8gVGhlc2UgYXJlIHZhbHVlcyB0aGF0IG11c3QgaGF2ZSBhIFRtcCBpbiBBaXIuIFdlIHNh
eSB0aGF0IGEgVmFsdWUqIHdpdGggYSBub24tbnVsbCBUbXAgaXMgInBpbm5lZCIuCisgICAgSW5k
ZXhNYXA8VmFsdWUqLCBUbXA+IG1fcGhpVG9UbXA7IC8vIEVhY2ggUGhpIGdldHMgaXRzIG93biBU
bXAuCisgICAgSW5kZXhNYXA8QjM6OkJhc2ljQmxvY2sqLCBBaXI6OkJhc2ljQmxvY2sqPiBtX2Js
b2NrVG9CbG9jazsKICAgICBIYXNoTWFwPEIzOjpTdGFja1Nsb3QqLCBBaXI6OlN0YWNrU2xvdCo+
IG1fc3RhY2tUb1N0YWNrOwogICAgIEhhc2hNYXA8VmFyaWFibGUqLCBUbXA+IG1fdmFyaWFibGVU
b1RtcDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTW92ZUNvbnN0YW50cy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTW92ZUNvbnN0YW50
cy5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01v
dmVDb25zdGFudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHByaXZhdGU6
CiAgICAgewogICAgICAgICBEb21pbmF0b3JzJiBkb21pbmF0b3JzID0gbV9wcm9jLmRvbWluYXRv
cnMoKTsKICAgICAgICAgSGFzaE1hcDxWYWx1ZUtleSwgVmFsdWUqPiB2YWx1ZUZvckNvbnN0YW50
OwotICAgICAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBWZWN0b3I8VmFsdWUqPj4gbWF0ZXJpYWxp
emF0aW9ucyhtX3Byb2Muc2l6ZSgpKTsKKyAgICAgICAgSW5kZXhNYXA8QmFzaWNCbG9jayosIFZl
Y3RvcjxWYWx1ZSo+PiBtYXRlcmlhbGl6YXRpb25zKG1fcHJvYy5zaXplKCkpOwogCiAgICAgICAg
IC8vIFdlIGRldGVybWluZSB3aGVyZSB0aGluZ3MgZ2V0IG1hdGVyaWFsaXplZCBiYXNlZCBvbiB3
aGVyZSB0aGV5IGFyZSB1c2VkLgogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9w
cm9jKSB7CkBAIC0yNzQsNyArMjc0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgZm9yIChhdXRvJiBl
bnRyeSA6IG1fY29uc3RUYWJsZSkKICAgICAgICAgICAgIG1fZGF0YVNlY3Rpb25bZW50cnkudmFs
dWVdID0gZW50cnkua2V5LnZhbHVlKCk7CiAKLSAgICAgICAgSW5kZXhTZXQ8VmFsdWU+IG9mZkxp
bWl0czsKKyAgICAgICAgSW5kZXhTZXQ8VmFsdWUqPiBvZmZMaW1pdHM7CiAgICAgICAgIGZvciAo
QmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2MpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
dmFsdWVJbmRleCA9IDA7IHZhbHVlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK3ZhbHVlSW5kZXgp
IHsKICAgICAgICAgICAgICAgICBTdGFja21hcFZhbHVlKiB2YWx1ZSA9IGJsb2NrLT5hdCh2YWx1
ZUluZGV4KS0+YXM8U3RhY2ttYXBWYWx1ZT4oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1BoaUNoaWxkcmVuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzUGhpQ2hpbGRyZW4uaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzUGhpQ2hpbGRyZW4uaAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDcgKzE2OCw3
IEBAIHB1YmxpYzoKICAgICBjb25zdCBWZWN0b3I8VmFsdWUqLCA4PiYgcGhpcygpIGNvbnN0IHsg
cmV0dXJuIG1fcGhpczsgfQogCiBwcml2YXRlOgotICAgIEluZGV4TWFwPFZhbHVlLCBWZWN0b3I8
VXBzaWxvblZhbHVlKj4+IG1fdXBzaWxvbnM7CisgICAgSW5kZXhNYXA8VmFsdWUqLCBWZWN0b3I8
VXBzaWxvblZhbHVlKj4+IG1fdXBzaWxvbnM7CiAgICAgVmVjdG9yPFZhbHVlKiwgOD4gbV9waGlz
OwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCShy
ZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBQcm9jZWR1cmU6Omlu
dmFsaWRhdGVDRkcoKQogCiB2b2lkIFByb2NlZHVyZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAogewotICAgIEluZGV4U2V0PFZhbHVlPiB2YWx1ZXNJbkJsb2NrczsKKyAgICBJbmRleFNl
dDxWYWx1ZSo+IHZhbHVlc0luQmxvY2tzOwogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiAq
dGhpcykgewogICAgICAgICBvdXQucHJpbnQoZGVlcER1bXAoKnRoaXMsIGJsb2NrKSk7CiAgICAg
ICAgIHZhbHVlc0luQmxvY2tzLmFkZEFsbCgqYmxvY2spOwpAQCAtMjQ1LDcgKzI0NSw3IEBAIHZv
aWQgUHJvY2VkdXJlOjpkZWxldGVWYWx1ZShWYWx1ZSogdmFsdWUKIAogdm9pZCBQcm9jZWR1cmU6
OmRlbGV0ZU9ycGhhbnMoKQogewotICAgIEluZGV4U2V0PFZhbHVlPiB2YWx1ZXNJbkJsb2NrczsK
KyAgICBJbmRleFNldDxWYWx1ZSo+IHZhbHVlc0luQmxvY2tzOwogICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiAqdGhpcykKICAgICAgICAgdmFsdWVzSW5CbG9ja3MuYWRkQWxsKCpibG9jayk7
CiAKQEAgLTMzMyw3ICszMzMsNyBAQCBWYWx1ZSogUHJvY2VkdXJlOjphZGRWYWx1ZUltcGwoVmFs
dWUqIHZhCiAKIHZvaWQgUHJvY2VkdXJlOjpzZXRCbG9ja09yZGVySW1wbChWZWN0b3I8QmFzaWNC
bG9jayo+JiBibG9ja3MpCiB7Ci0gICAgSW5kZXhTZXQ8QmFzaWNCbG9jaz4gYmxvY2tzU2V0Owor
ICAgIEluZGV4U2V0PEJhc2ljQmxvY2sqPiBibG9ja3NTZXQ7CiAgICAgYmxvY2tzU2V0LmFkZEFs
bChibG9ja3MpOwogCiAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6ICp0aGlzKSB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VEb3VibGVUb0Zsb2F0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VEb3VibGVUb0Zsb2F0
LmNwcAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVk
dWNlRG91YmxlVG9GbG9hdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyNCwxOCArNDI0LDE4IEBA
IHByaXZhdGU6CiAKICAgICAvLyBTZXQgb2YgYWxsIHRoZSBEb3VibGUgdmFsdWVzIHRoYXQgYXJl
IGFjdHVhbGx5IHVzZWQgYXMgRG91YmxlLgogICAgIC8vIENvbnZlcnRpbmcgYW55IG9mIHRoZW0g
dG8gRmxvYXQgd291bGQgbG9zZSBwcmVjaXNpb24uCi0gICAgSW5kZXhTZXQ8VmFsdWU+IG1fdmFs
dWVzVXNlZEFzRG91YmxlOworICAgIEluZGV4U2V0PFZhbHVlKj4gbV92YWx1ZXNVc2VkQXNEb3Vi
bGU7CiAKICAgICAvLyBTZXQgb2YgYWxsIHRoZSBQaGkgb2YgdHlwZSBEb3VibGUgdGhhdCByZWFs
bHkgY29udGFpbnMgYSBEb3VibGUuCiAgICAgLy8gQW55IERvdWJsZSBQaGkgbm90IGluIHRoZSBz
ZXQgY2FuIGJlIGNvbnZlcnRlZCB0byBGbG9hdCB3aXRob3V0IGxvc2luZyBwcmVjaXNpb24uCi0g
ICAgSW5kZXhTZXQ8VmFsdWU+IG1fcGhpc0NvbnRhaW5pbmdEb3VibGU7CisgICAgSW5kZXhTZXQ8
VmFsdWUqPiBtX3BoaXNDb250YWluaW5nRG91YmxlOwogCiAgICAgLy8gQW55IHZhbHVlIHRoYXQg
d2FzIGNvbnZlcnRlZCBmcm9tIHByb2R1Y2luZyBhIERvdWJsZSB0byBwcm9kdWNpbmcgYSBGbG9h
dC4KICAgICAvLyBUaGlzIHNldCBkb2VzIG5vdCBpbmNsdWRlIFBoaS1VcHNpbG9ucy4KLSAgICBJ
bmRleFNldDxWYWx1ZT4gbV9jb252ZXJ0ZWRWYWx1ZTsKKyAgICBJbmRleFNldDxWYWx1ZSo+IG1f
Y29udmVydGVkVmFsdWU7CiAKICAgICAvLyBBbnkgdmFsdWUgdGhhdCBwcmV2aW91c2x5IHByb2R1
Y2VkIERvdWJsZSBhbmQgbm93IHByb2R1Y2UgRmxvYXQuCi0gICAgSW5kZXhTZXQ8VmFsdWU+IG1f
Y29udmVydGVkUGhpczsKKyAgICBJbmRleFNldDxWYWx1ZSo+IG1fY29udmVydGVkUGhpczsKIH07
CiAKIHZvaWQgcHJpbnRHcmFwaElmQ29udmVydGluZyhQcm9jZWR1cmUmIHByb2NlZHVyZSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHJl
dmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVu
Z3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM5Miw3ICsyMzkyLDcgQEAgcHJpdmF0ZToKIAog
ICAgIHZvaWQga2lsbERlYWRDb2RlKCkKICAgICB7Ci0gICAgICAgIEdyYXBoTm9kZVdvcmtsaXN0
PFZhbHVlKiwgSW5kZXhTZXQ8VmFsdWU+PiB3b3JrbGlzdDsKKyAgICAgICAgR3JhcGhOb2RlV29y
a2xpc3Q8VmFsdWUqLCBJbmRleFNldDxWYWx1ZSo+PiB3b3JrbGlzdDsKICAgICAgICAgVmVjdG9y
PFVwc2lsb25WYWx1ZSosIDY0PiB1cHNpbG9uczsKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBi
bG9jayA6IG1fcHJvYykgewogICAgICAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiAqYmxvY2sp
IHsKQEAgLTI0MjksNyArMjQyOSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KIAotICAgICAgICBJbmRleFNldDxWYXJpYWJsZT4gbGl2ZVZhcmlhYmxlczsK
KyAgICAgICAgSW5kZXhTZXQ8VmFyaWFibGUqPiBsaXZlVmFyaWFibGVzOwogICAgICAgICAKICAg
ICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvYykgewogICAgICAgICAgICAgc2l6
ZV90IHNvdXJjZUluZGV4ID0gMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1NT
QUNhbGN1bGF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
U0FDYWxjdWxhdG9yLmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1NTQUNhbGN1bGF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTYsNyArMTU2LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgVmVjdG9yPERlZio+IG1fcGhpczsKICAgICB9OwogICAgIAotICAgIElu
ZGV4TWFwPEJhc2ljQmxvY2ssIEJsb2NrRGF0YT4gbV9kYXRhOworICAgIEluZGV4TWFwPEJhc2lj
QmxvY2sqLCBCbG9ja0RhdGE+IG1fZGF0YTsKIAogICAgIERvbWluYXRvcnMqIG1fZG9taW5hdG9y
cyB7IG51bGxwdHIgfTsKICAgICBQcm9jZWR1cmUmIG1fcHJvYzsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1VzZUNvdW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1VzZUNvdW50cy5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNVc2VDb3VudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ4LDcgKzQ4
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgdW5zaWduZWQgbnVtVXNpbmdJbnN0cnVjdGlvbnMgeyAw
IH07CiAgICAgfTsKICAgICAKLSAgICBJbmRleE1hcDxWYWx1ZSwgQ291bnRzPiBtX2NvdW50czsK
KyAgICBJbmRleE1hcDxWYWx1ZSosIENvdW50cz4gbV9jb3VudHM7CiB9OwogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCShyZXZp
c2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTIwLDcgKzEyMCw3IEBAIFN0YXRpY0xvY2sgY3Jhc2hMb2NrOwogCiBW
TSogdm07CiAKLXN0ZDo6dW5pcXVlX3B0cjxDb21waWxhdGlvbj4gY29tcGlsZShQcm9jZWR1cmUm
IHByb2NlZHVyZSwgdW5zaWduZWQgb3B0TGV2ZWwgPSAxKQorc3RkOjp1bmlxdWVfcHRyPENvbXBp
bGF0aW9uPiBjb21waWxlKFByb2NlZHVyZSYgcHJvY2VkdXJlLCB1bnNpZ25lZCBvcHRMZXZlbCA9
IGRlZmF1bHRPcHRMZXZlbCgpKQogewogICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPENvbXBp
bGF0aW9uPihCMzo6Y29tcGlsZSgqdm0sIHByb2NlZHVyZSwgb3B0TGV2ZWwpKTsKIH0KQEAgLTk5
MCw2ICs5OTAsNyBAQCB2b2lkIHRlc3RNdWxMb2FkVHdpY2UoKQogCiAgICAgdGVzdCgwKTsKICAg
ICB0ZXN0KDEpOworICAgIHRlc3QoMik7CiB9CiAKIHZvaWQgdGVzdE11bEFkZEFyZ3NMZWZ0KCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNC
eUdyYXBoQ29sb3JpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuY3BwCShyZXZpc2lvbiAy
MTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0
ZXJzQnlHcmFwaENvbG9yaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAog
I2lmIEVOQUJMRShCM19KSVQpCiAKICNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWly
Rml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCIKICNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIK
ICNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgiCkBA
IC0xNTg1LDYgKzE1ODYsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIG1fY29hbGVzY2luZ0NhbmRp
ZGF0ZXMuY2xlYXIoKTsKICAgICAgICAgbV93b3JrbGlzdE1vdmVzLmNsZWFyKCk7CiAKKyAgICAg
ICAgLy8gRklYTUU6IEl0IHNlZW1zIGxpa2Ugd2UgZG9uJ3QgbmVlZCB0byByZWNvbXB1dGUgbGl2
ZW5lc3MuIFdlIGp1c3QgbmVlZCB0byB1cGRhdGUgaXRzIGRhdGEKKyAgICAgICAgLy8gc3RydWN0
dXJlcyBzbyB0aGF0IGl0IGtub3dzIHRoYXQgdGhlIG5ld2x5IGludHJvZHVjZWQgdGVtcG9yYXJp
ZXMgYXJlIG5vdCBsaXZlIGF0IGFueSBiYXNpYworICAgICAgICAvLyBibG9jayBib3VuZGFyeS4g
VGhpcyBzaG91bGQgdHJpdmlhbGx5IGJlIHRydWUgZm9yIG5vdy4KICAgICAgICAgVG1wTGl2ZW5l
c3M8YmFuaz4gbGl2ZW5lc3MobV9jb2RlKTsKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9j
ayA6IG1fY29kZSkgewogICAgICAgICAgICAgdHlwZW5hbWUgVG1wTGl2ZW5lc3M8YmFuaz46Okxv
Y2FsQ2FsYyBsb2NhbENhbGMobGl2ZW5lc3MsIGJsb2NrKTsKQEAgLTE3OTgsNyArMTgwMiw3IEBA
IHB1YmxpYzoKICAgICAgICAgbV9udW1JdGVyYXRpb25zID0gMDsKICAgICAgICAgYWxsb2NhdGVP
bkJhbms8RlA+KCk7CiAKLSAgICAgICAgZml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMoKTsKKyAgICAg
ICAgZml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMobV9jb2RlKTsKIAogICAgICAgICBpZiAocmVwb3J0
U3RhdHMpCiAgICAgICAgICAgICBkYXRhTG9nKCJOdW0gaXRlcmF0aW9ucyA9ICIsIG1fbnVtSXRl
cmF0aW9ucywgIlxuIik7CkBAIC0xOTU0LDcgKzE5NTgsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcEZhc3QoWyZdIChUbXAm
IHRtcCkgewotICAgICAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkgfHwgdG1wLmlzR1Ao
KSA9PSAoYmFuayAhPSBHUCkpCisgICAgICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSB8
fCB0bXAuYmFuaygpICE9IGJhbmspCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAK
ICAgICAgICAgICAgICAgICAgICAgVG1wIGFsaWFzVG1wID0gYWxsb2NhdG9yLmdldEFsaWFzKHRt
cCk7CkBAIC0yMTY5LDkgKzIxNzMsMTIgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAgICAg
ICB0bXAgPSBtX2NvZGUubmV3VG1wKGJhbmspOwogICAgICAgICAgICAgICAgICAgICB1bnNwaWxs
YWJsZVRtcHMuYWRkKEFic29sdXRlVG1wTWFwcGVyPGJhbms+OjphYnNvbHV0ZUluZGV4KHRtcCkp
OworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT0g
QXJnOjpTY3JhdGNoKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAg
ICAgICAgICAgICAgIEFyZyBhcmcgPSBBcmc6OnN0YWNrKHN0YWNrU2xvdEVudHJ5LT52YWx1ZSk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzQW55VXNlKHJvbGUpICYmIHJvbGUgIT0g
QXJnOjpTY3JhdGNoKQorICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0FueVVzZShyb2xl
KSkKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoaW5zdEluZGV4
LCBtb3ZlLCBpbnN0Lm9yaWdpbiwgYXJnLCB0bXApOwogICAgICAgICAgICAgICAgICAgICBpZiAo
QXJnOjppc0FueURlZihyb2xlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNl
dC5pbnNlcnQoaW5zdEluZGV4ICsgMSwgbW92ZSwgaW5zdC5vcmlnaW4sIHRtcCwgYXJnKTsKQEAg
LTIxODcsNjYgKzIxOTQsNiBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQogCi0gICAgdm9p
ZCBmaXhTcGlsbHNBZnRlclRlcm1pbmFscygpCi0gICAgewotICAgICAgICAvLyBCZWNhdXNlIHRo
ZXJlIG1heSBiZSB0ZXJtaW5hbHMgdGhhdCBwcm9kdWNlIHZhbHVlcywgSVJDIG1heQotICAgICAg
ICAvLyB3YW50IHRvIHNwaWxsIHRob3NlIHRlcm1pbmFscy4gSXQnbGwgaGFwcGVuIHRvIHNwaWxs
IGl0IGFmdGVyCi0gICAgICAgIC8vIHRoZSB0ZXJtaW5hbC4gSWYgd2UgbGVmdCB0aGUgZ3JhcGgg
aW4gdGhpcyBzdGF0ZSwgaXQnZCBiZSBpbnZhbGlkCi0gICAgICAgIC8vIGJlY2F1c2UgYSB0ZXJt
aW5hbCBtdXN0IGJlIHRoZSBsYXN0IGluc3RydWN0aW9uIGluIGEgYmxvY2suCi0gICAgICAgIC8v
IFdlIGZpeCB0aGF0IGhlcmUuCi0KLSAgICAgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldCht
X2NvZGUpOwotCi0gICAgICAgIGJvb2wgYWRkZWRCbG9ja3MgPSBmYWxzZTsKLQotICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCB0
ZXJtaW5hbEluZGV4ID0gYmxvY2stPnNpemUoKTsKLSAgICAgICAgICAgIGJvb2wgZm91bmRUZXJt
aW5hbCA9IGZhbHNlOwotICAgICAgICAgICAgd2hpbGUgKHRlcm1pbmFsSW5kZXgtLSkgewotICAg
ICAgICAgICAgICAgIGlmIChibG9jay0+YXQodGVybWluYWxJbmRleCkuaXNUZXJtaW5hbCgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGZvdW5kVGVybWluYWwgPSB0cnVlOwotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBBU1NFUlRfVU5VU0VEKGZvdW5kVGVybWluYWwsIGZvdW5kVGVybWluYWwpOwotCi0gICAg
ICAgICAgICBpZiAodGVybWluYWxJbmRleCA9PSBibG9jay0+c2l6ZSgpIC0gMSkKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgLy8gVGhlcmUgbXVzdCBiZSBpbnN0cnVj
dGlvbnMgYWZ0ZXIgdGhlIHRlcm1pbmFsIGJlY2F1c2UgaXQncyBub3QgdGhlIGxhc3QgaW5zdHJ1
Y3Rpb24uCi0gICAgICAgICAgICBBU1NFUlQodGVybWluYWxJbmRleCA8IGJsb2NrLT5zaXplKCkg
LSAxKTsKLSAgICAgICAgICAgIFZlY3RvcjxJbnN0LCAxPiBpbnN0c1RvTW92ZTsKLSAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IHRlcm1pbmFsSW5kZXggKyAxOyBpIDwgYmxvY2stPnNpemUo
KTsgaSsrKQotICAgICAgICAgICAgICAgIGluc3RzVG9Nb3ZlLmFwcGVuZChibG9jay0+YXQoaSkp
OwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5zdHNUb01vdmUuc2l6ZSgpKTsKLQotICAg
ICAgICAgICAgZm9yIChGcmVxdWVudGVkQmxvY2smIGZyZXF1ZW50ZWRTdWNjZXNzb3IgOiBibG9j
ay0+c3VjY2Vzc29ycygpKSB7Ci0gICAgICAgICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29y
ID0gZnJlcXVlbnRlZFN1Y2Nlc3Nvci5ibG9jaygpOwotICAgICAgICAgICAgICAgIC8vIElmIHN1
Y2Nlc3NvcidzIG9ubHkgcHJlZGVjZXNzb3IgaXMgYmxvY2ssIHdlIGNhbiBwbGFudCB0aGUgc3Bp
bGwgaW5zaWRlCi0gICAgICAgICAgICAgICAgLy8gdGhlIHN1Y2Nlc3Nvci4gT3RoZXJ3aXNlLCB3
ZSBtdXN0IHNwbGl0IHRoZSBjcml0aWNhbCBlZGdlIGFuZCBjcmVhdGUKLSAgICAgICAgICAgICAg
ICAvLyBhIG5ldyBibG9jayBmb3IgdGhlIHNwaWxsLgotICAgICAgICAgICAgICAgIGlmIChzdWNj
ZXNzb3ItPm51bVByZWRlY2Vzc29ycygpID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgaW5z
ZXJ0aW9uU2V0Lmluc2VydEluc3RzKDAsIGluc3RzVG9Nb3ZlKTsKLSAgICAgICAgICAgICAgICAg
ICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoc3VjY2Vzc29yKTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICBhZGRlZEJsb2NrcyA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBXZSBwcm9iYWJseSB3YW50IGJldHRlciBibG9jayBvcmRlcmlu
ZyBoZXJlLgotICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBuZXdCbG9jayA9IG1fY29k
ZS5hZGRCbG9jaygpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IEluc3QmIGluc3Qg
OiBpbnN0c1RvTW92ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ld0Jsb2NrLT5hcHBlbmRJ
bnN0KGluc3QpOwotICAgICAgICAgICAgICAgICAgICBuZXdCbG9jay0+YXBwZW5kSW5zdChJbnN0
KEp1bXAsIGluc3RzVG9Nb3ZlLmxhc3QoKS5vcmlnaW4pKTsKLSAgICAgICAgICAgICAgICAgICAg
bmV3QmxvY2stPnN1Y2Nlc3NvcnMoKS5hcHBlbmQoc3VjY2Vzc29yKTsKLSAgICAgICAgICAgICAg
ICAgICAgZnJlcXVlbnRlZFN1Y2Nlc3Nvci5ibG9jaygpID0gbmV3QmxvY2s7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBibG9jay0+cmVzaXplKHRlcm1p
bmFsSW5kZXggKyAxKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhZGRlZEJsb2NrcykKLSAg
ICAgICAgICAgIG1fY29kZS5yZXNldFJlYWNoYWJpbGl0eSgpOwotICAgIH0KLQogICAgIENvZGUm
IG1fY29kZTsKICAgICBUbXBXaWR0aCBtX3RtcFdpZHRoOwogICAgIFVzZUNvdW50czxUbXA+JiBt
X3VzZUNvdW50czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2Nh
dGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdp
c3RlcnNCeUxpbmVhclNjYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjE3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmgiCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQXJnSW5saW5lcy5oIgorI2luY2x1
ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5oIgor
I2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgi
CisjaW5jbHVkZSAiQWlyTGl2ZW5lc3MuaCIKKyNpbmNsdWRlICJBaXJQYWRJbnRlcmZlcmVuY2Uu
aCIKKyNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCisjaW5jbHVkZSAiQWlyUmVnTGl2ZW5lc3Mu
aCIKKyNpbmNsdWRlICJBaXJUbXBJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+
CisjaW5jbHVkZSA8d3RmL1JhbmdlLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eyBuYW1lc3BhY2UgQWlyIHsKKworbmFtZXNwYWNlIHsKKworYm9vbCB2ZXJib3NlKCkgeyByZXR1
cm4gT3B0aW9uczo6YWlyTGluZWFyU2NhblZlcmJvc2UoKTsgfQorYm9vbCBzaG91bGRTcGlsbEV2
ZXJ5dGhpbmcoKSB7IHJldHVybiBPcHRpb25zOjphaXJMaW5lYXJTY2FuU3BpbGxzRXZlcnl0aGlu
ZygpOyB9CisKK3R5cGVkZWYgUmFuZ2U8c2l6ZV90PiBJbnRlcnZhbDsKKworc3RydWN0IFRtcERh
dGEgeworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAg
ICAgb3V0LnByaW50KCJ7aW50ZXJ2YWwgPSAiLCBpbnRlcnZhbCwgIiwgc3BpbGxlZCA9ICIsIHBv
aW50ZXJEdW1wKHNwaWxsZWQpLCAiLCBhc3NpZ25lZCA9ICIsIGFzc2lnbmVkLCAiLCBpc1Vuc3Bp
bGxhYmxlID0gIiwgaXNVbnNwaWxsYWJsZSwgIiwgYWRqYWNlbnQgPSAiLCBhZGphY2VudCwgIn0i
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCB2YWxpZGF0ZSgpCisgICAgeworICAgICAgICBSRUxF
QVNFX0FTU0VSVCghKHNwaWxsZWQgJiYgYXNzaWduZWQpKTsKKyAgICB9CisgICAgCisgICAgSW50
ZXJ2YWwgaW50ZXJ2YWw7CisgICAgU3RhY2tTbG90KiBzcGlsbGVkIHsgbnVsbHB0ciB9OworICAg
IFJlZyBhc3NpZ25lZDsKKyAgICBib29sIGlzVW5zcGlsbGFibGUgeyBmYWxzZSB9OworICAgIFJl
Z2lzdGVyU2V0IGFkamFjZW50OworfTsKKworc3RydWN0IENsb2JiZXIgeworICAgIENsb2JiZXIo
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgQ2xvYmJlcihzaXplX3QgaW5kZXgsIFJlZ2lzdGVy
U2V0IHJlZ3MpCisgICAgICAgIDogaW5kZXgoaW5kZXgpCisgICAgICAgICwgcmVncyhyZWdzKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
CisgICAgeworICAgICAgICBvdXQucHJpbnQoaW5kZXgsICI6IiwgcmVncyk7CisgICAgfQorICAg
IAorICAgIHNpemVfdCBpbmRleCB7IDAgfTsKKyAgICBSZWdpc3RlclNldCByZWdzOworfTsKKwor
Y2xhc3MgVG1wT3JDbG9iYmVyIHsKK3B1YmxpYzoKKyAgICBUbXBPckNsb2JiZXIoKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgVG1wT3JDbG9iYmVyKENsb2JiZXIqIGNsb2JiZXIpCisgICAgICAg
IDogbV92YWx1ZShiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihjbG9iYmVyKSkKKyAgICB7CisgICAg
fQorICAgIAorICAgIFRtcE9yQ2xvYmJlcihUbXAgdG1wKQorICAgICAgICA6IG1fdmFsdWUoKHN0
YXRpY19jYXN0PHVpbnRwdHJfdD4odG1wLmludGVybmFsVmFsdWUoKSkgPDwgMSkgfCAxKQorICAg
IHsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRtcE9yQ2xvYmJlciYg
b3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSA9PSBvdGhlci5tX3Zh
bHVlOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVG1wT3JDbG9iYmVy
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsK
KyAgICB9CisgICAgCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gKnRoaXMgIT0gVG1wT3JDbG9iYmVyKCk7CisgICAgfQorICAgIAorICAg
IGJvb2wgaXNUbXAoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlICYgMTsgfQorICAgIGJvb2wgaXND
bG9iYmVyKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZSAmJiAhKG1fdmFsdWUgJiAxKTsgfQorICAg
IAorICAgIFRtcCB0bXAoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzVG1wKCkpOwor
ICAgICAgICByZXR1cm4gVG1wOjp0bXBGb3JJbnRlcm5hbFZhbHVlKG1fdmFsdWUgPj4gMSk7Cisg
ICAgfQorICAgIGNvbnN0IENsb2JiZXImIGNsb2JiZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlzQ2xvYmJlcigpKTsKKyAgICAgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8Q2xvYmJl
cio+KG1fdmFsdWUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghKnRoaXMpIHsKKyAgICAgICAgICAgIG91dC5w
cmludCgiPG51bGw+Iik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
aWYgKGlzVG1wKCkpIHsKKyAgICAgICAgICAgIG91dC5wcmludCh0bXAoKSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgb3V0LnByaW50KGNsb2JiZXIoKSk7CisgICAg
fQorICAgIAorcHJpdmF0ZToKKyAgICB1aW50cHRyX3QgbV92YWx1ZSB7IDAgfTsKK307CisKK3Rl
bXBsYXRlPEJhbmsgYmFuaz4KK2NsYXNzIExpbmVhclNjYW4geworcHVibGljOgorICAgIExpbmVh
clNjYW4oQ29kZSYgY29kZSkKKyAgICAgICAgOiBtX2NvZGUoY29kZSkKKyAgICAgICAgLCBtX3N0
YXJ0SW5kZXgoY29kZS5zaXplKCkpCisgICAgICAgICwgbV9tYXAoY29kZS5udW1UbXBzKGJhbmsp
KQorICAgICAgICAsIG1faW5zZXJ0aW9uU2V0cyhjb2RlLnNpemUoKSwgY29kZSkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgcnVuKCkKKyAgICB7CisgICAgICAgIGJ1aWxkUmVnaXN0ZXJT
ZXQoKTsKKyAgICAgICAgYnVpbGRJbmRpY2VzKCk7CisgICAgICAgIGJ1aWxkSW50ZXJ2YWxzKCk7
CisgICAgICAgIGlmIChzaG91bGRTcGlsbEV2ZXJ5dGhpbmcoKSkgeworICAgICAgICAgICAgc3Bp
bGxFdmVyeXRoaW5nKCk7CisgICAgICAgICAgICBlbWl0U3BpbGxDb2RlKCk7CisgICAgICAgIH0K
KyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgcHJlcGFyZUludGVydmFscygpOworICAg
ICAgICAgICAgYXR0ZW1wdFNjYW4oKTsKKyAgICAgICAgICAgIGlmICghbV9kaWRTcGlsbCkKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGVtaXRTcGlsbENvZGUoKTsKKyAgICAg
ICAgfQorICAgICAgICBpbnNlcnRTcGlsbENvZGUoKTsKKyAgICAgICAgYXNzaWduUmVnaXN0ZXJz
KCk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICB2b2lkIGJ1aWxkUmVnaXN0ZXJTZXQoKQor
ICAgIHsKKyAgICAgICAgbV9yZWdpc3RlcnMgPSBtX2NvZGUucmVnc0luUHJpb3JpdHlPcmRlcihi
YW5rKTsKKyAgICAgICAgbV9yZWdpc3RlclNldC5zZXRBbGwobV9yZWdpc3RlcnMpOworICAgIH0K
KworICAgIHZvaWQgYnVpbGRJbmRpY2VzKCkKKyAgICB7CisgICAgICAgIHNpemVfdCBpbmRleCA9
IDA7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsKKyAgICAgICAg
ICAgIG1fc3RhcnRJbmRleFtibG9ja10gPSBpbmRleDsKKyAgICAgICAgICAgIGluZGV4ICs9IGJs
b2NrLT5zaXplKCkgKyAxOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHNpemVfdCBpbmRl
eE9mSGVhZChCYXNpY0Jsb2NrKiBibG9jaykKKyAgICB7CisgICAgICAgIHJldHVybiBtX3N0YXJ0
SW5kZXhbYmxvY2tdOworICAgIH0KKyAgICAKKyAgICBzaXplX3QgaW5kZXhPZlRhaWwoQmFzaWNC
bG9jayogYmxvY2spCisgICAgeworICAgICAgICByZXR1cm4gaW5kZXhPZkhlYWQoYmxvY2spICsg
YmxvY2stPnNpemUoKTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IGluZGV4T2YoQmFzaWNCbG9j
ayogYmxvY2ssIHVuc2lnbmVkIGluc3RJbmRleCwgQXJnOjpQaGFzZSBwaGFzZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBpbmRleE9mSGVhZChibG9jaykgKyBpbnN0SW5kZXggKyBwaGFzZTsKKyAg
ICB9CisgICAgCisgICAgSW50ZXJ2YWwgaW50ZXJ2YWwoc2l6ZV90IGluZGV4T2ZFYXJseSwgQXJn
OjpUaW1pbmcgdGltaW5nKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0aW1pbmcpIHsKKyAgICAg
ICAgY2FzZSBBcmc6Ok9ubHlFYXJseToKKyAgICAgICAgICAgIHJldHVybiBJbnRlcnZhbChpbmRl
eE9mRWFybHkpOworICAgICAgICBjYXNlIEFyZzo6T25seUxhdGU6CisgICAgICAgICAgICByZXR1
cm4gSW50ZXJ2YWwoaW5kZXhPZkVhcmx5ICsgMSk7CisgICAgICAgIGNhc2UgQXJnOjpFYXJseUFu
ZExhdGU6CisgICAgICAgICAgICByZXR1cm4gSW50ZXJ2YWwoaW5kZXhPZkVhcmx5LCBpbmRleE9m
RWFybHkgKyAyKTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuIEludGVydmFsKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgYnVpbGRJbnRl
cnZhbHMoKQorICAgIHsKKyAgICAgICAgVG1wTGl2ZW5lc3M8YmFuaz4gbGl2ZW5lc3MobV9jb2Rl
KTsKKyAgICAgICAgCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsK
KyAgICAgICAgICAgIHNpemVfdCBpbmRleE9mSGVhZCA9IHRoaXMtPmluZGV4T2ZIZWFkKGJsb2Nr
KTsKKyAgICAgICAgICAgIHNpemVfdCBpbmRleE9mVGFpbCA9IHRoaXMtPmluZGV4T2ZUYWlsKGJs
b2NrKTsKKyAgICAgICAgICAgIGZvciAoVG1wIHRtcCA6IGxpdmVuZXNzLmxpdmVBdEhlYWQoYmxv
Y2spKSB7CisgICAgICAgICAgICAgICAgaWYgKCF0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAg
ICAgICAgbV9tYXBbdG1wXS5pbnRlcnZhbCB8PSBJbnRlcnZhbChpbmRleE9mSGVhZCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBmb3IgKFRtcCB0bXAgOiBsaXZlbmVzcy5saXZlQXRUYWls
KGJsb2NrKSkgeworICAgICAgICAgICAgICAgIGlmICghdG1wLmlzUmVnKCkpCisgICAgICAgICAg
ICAgICAgICAgIG1fbWFwW3RtcF0uaW50ZXJ2YWwgfD0gSW50ZXJ2YWwoaW5kZXhPZlRhaWwpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
c3RJbmRleCA9IDA7IGluc3RJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsraW5zdEluZGV4KSB7Cisg
ICAgICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOworICAgICAg
ICAgICAgICAgIHNpemVfdCBpbmRleE9mRWFybHkgPSBpbmRleE9mSGVhZCArIGluc3RJbmRleDsK
KyAgICAgICAgICAgICAgICBpbnN0LmZvckVhY2hUbXAoCisgICAgICAgICAgICAgICAgICAgIFsm
XSAoVG1wJiB0bXAsIEFyZzo6Um9sZSByb2xlLCBCYW5rIHRtcEJhbmssIFdpZHRoKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcEJhbmsgIT0g
YmFuaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgICAgICAgICBtX21hcFt0bXBdLmludGVydmFsIHw9IGludGVydmFsKGluZGV4T2ZFYXJseSwg
QXJnOjp0aW1pbmcocm9sZSkpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgUmVnTGl2ZW5lc3M6OkxvY2FsQ2FsYyBsb2NhbENhbGMobGl2ZW5l
c3MsIGJsb2NrKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYXV0byByZWNvcmQgPSBbJl0g
KHVuc2lnbmVkIGluc3RJbmRleCkgeworICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHJlZ3Mg
PSBsb2NhbENhbGMubGl2ZSgpOworICAgICAgICAgICAgICAgIGlmIChJbnN0KiBwcmV2ID0gYmxv
Y2stPmdldChpbnN0SW5kZXggLSAxKSkgeworICAgICAgICAgICAgICAgICAgICBwcmV2LT5mb3JF
YWNoPFJlZz4oCisgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKFJlZyYgcmVnLCBBcmc6OlJv
bGUgcm9sZSwgQmFuaywgV2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
QXJnOjppc0xhdGVEZWYocm9sZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
Z3MuYWRkKHJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHByZXYtPmtpbmQub3Bjb2RlID09IFBhdGNoKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmVncy5tZXJnZShwcmV2LT5leHRyYUNsb2JiZXJlZFJlZ3MoKSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChJbnN0KiBuZXh0ID0gYmxvY2stPmdldChpbnN0
SW5kZXgpKSB7CisgICAgICAgICAgICAgICAgICAgIG5leHQtPmZvckVhY2g8UmVnPigKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFsmXSAoUmVnJiByZWcsIEFyZzo6Um9sZSByb2xlLCBCYW5rLCBX
aWR0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzRWFybHlEZWYo
cm9sZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ3MuYWRkKHJlZyk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQt
PmtpbmQub3Bjb2RlID09IFBhdGNoKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVncy5tZXJn
ZShuZXh0LT5leHRyYUVhcmx5Q2xvYmJlcmVkUmVncygpKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcmVncy5maWx0ZXIobV9yZWdpc3RlclNl
dCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHJlZ3MuaXNFbXB0eSgp
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgbV9jbG9iYmVycy5hcHBlbmQoQ2xvYmJlcihpbmRleE9mSGVhZCArIGluc3RJbmRl
eCwgcmVncykpOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmVj
b3JkKGJsb2NrLT5zaXplKCkpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXgg
PSBibG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICBsb2NhbENh
bGMuZXhlY3V0ZShpbnN0SW5kZXgpOworICAgICAgICAgICAgICAgIHJlY29yZChpbnN0SW5kZXgp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAodmVyYm9z
ZSgpKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJJbnRlcnZhbHM6XG4iKTsKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgdG1wSW5kZXggPSAwOyB0bXBJbmRleCA8IG1fY29kZS5udW1UbXBzKGJh
bmspOyArK3RtcEluZGV4KSB7CisgICAgICAgICAgICAgICAgVG1wIHRtcCA9IFRtcDo6dG1wRm9y
SW5kZXgoYmFuaywgdG1wSW5kZXgpOworICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAiLCB0
bXAsICI6ICIsIG1fbWFwW3RtcF0sICJcbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIHNpemVfdCBzb3J0aW5nSW5kZXhPZihjb25zdCBUbXBPckNsb2JiZXIm
IHRoaW5nKQorICAgIHsKKyAgICAgICAgLy8gV2Ugd2FudCBjbG9iYmVycyB0byBjb21lIGFmdGVy
IHRtcHMuCisgICAgICAgIGlmICh0aGluZy5pc1RtcCgpKQorICAgICAgICAgICAgcmV0dXJuIG1f
bWFwW3RoaW5nLnRtcCgpXS5pbnRlcnZhbC5iZWdpbigpIDw8IDE7CisgICAgICAgIHJldHVybiAo
dGhpbmcuY2xvYmJlcigpLmluZGV4IDw8IDEpIHwgMTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90
IGluZGV4T2YoY29uc3QgVG1wT3JDbG9iYmVyJiB0aGluZykKKyAgICB7CisgICAgICAgIC8vIFdl
IHdhbnQgY2xvYmJlcnMgdG8gY29tZSBhZnRlciB0bXBzLgorICAgICAgICBpZiAodGhpbmcuaXNU
bXAoKSkKKyAgICAgICAgICAgIHJldHVybiBtX21hcFt0aGluZy50bXAoKV0uaW50ZXJ2YWwuYmVn
aW4oKTsKKyAgICAgICAgcmV0dXJuIHRoaW5nLmNsb2JiZXIoKS5pbmRleDsKKyAgICB9CisgICAg
CisgICAgdm9pZCBzcGlsbEV2ZXJ5dGhpbmcoKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCB0bXBJbmRleCA9IDA7IHRtcEluZGV4IDwgbV9jb2RlLm51bVRtcHMoYmFuayk7ICsrdG1wSW5k
ZXgpCisgICAgICAgICAgICBzcGlsbChUbXA6OnRtcEZvckluZGV4KGJhbmssIHRtcEluZGV4KSk7
CisgICAgfQorICAgIAorICAgIHZvaWQgcHJlcGFyZUludGVydmFscygpCisgICAgeworICAgICAg
ICBtX2ludGVydmFscy5yZXNpemUoMCk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVk
IHRtcEluZGV4ID0gMDsgdG1wSW5kZXggPCBtX2NvZGUubnVtVG1wcyhiYW5rKTsgKyt0bXBJbmRl
eCkgeworICAgICAgICAgICAgVG1wIHRtcCA9IFRtcDo6dG1wRm9ySW5kZXgoYmFuaywgdG1wSW5k
ZXgpOworICAgICAgICAgICAgVG1wRGF0YSYgZGF0YSA9IG1fbWFwW3RtcF07CisgICAgICAgICAg
ICBpZiAoZGF0YS5zcGlsbGVkKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBkYXRhLmFzc2lnbmVkID0gUmVnKCk7CisgICAgICAgICAgICBkYXRh
LmFkamFjZW50ID0gUmVnaXN0ZXJTZXQoKTsKKyAgICAgICAgICAgIG1faW50ZXJ2YWxzLmFwcGVu
ZCh0bXApOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKENsb2JiZXImIGNsb2Ji
ZXIgOiBtX2Nsb2JiZXJzKQorICAgICAgICAgICAgbV9pbnRlcnZhbHMuYXBwZW5kKCZjbG9iYmVy
KTsKKyAgICAgICAgCisgICAgICAgIHN0ZDo6c29ydCgKKyAgICAgICAgICAgIG1faW50ZXJ2YWxz
LmJlZ2luKCksIG1faW50ZXJ2YWxzLmVuZCgpLAorICAgICAgICAgICAgWyZdIChUbXBPckNsb2Ji
ZXImIGEsIFRtcE9yQ2xvYmJlciYgYikgeworICAgICAgICAgICAgICAgIHJldHVybiBzb3J0aW5n
SW5kZXhPZihhKSA8IHNvcnRpbmdJbmRleE9mKGIpOworICAgICAgICAgICAgfSk7CisgICAgICAg
IAorICAgICAgICBpZiAodmVyYm9zZSgpKQorICAgICAgICAgICAgZGF0YUxvZygiSW50ZXJ2YWxz
OiAiLCBsaXN0RHVtcChtX2ludGVydmFscyksICJcbiIpOworICAgIH0KKyAgICAKKyAgICBUbXAg
YWRkU3BpbGxUbXBXaXRoSW50ZXJ2YWwoSW50ZXJ2YWwgaW50ZXJ2YWwpCisgICAgeworICAgICAg
ICBUbXBEYXRhIGRhdGE7CisgICAgICAgIGRhdGEuaW50ZXJ2YWwgPSBpbnRlcnZhbDsKKyAgICAg
ICAgZGF0YS5pc1Vuc3BpbGxhYmxlID0gdHJ1ZTsKKyAgICAgICAgCisgICAgICAgIFRtcCB0bXAg
PSBtX2NvZGUubmV3VG1wKGJhbmspOworICAgICAgICBtX21hcC5hcHBlbmQodG1wLCBkYXRhKTsK
KyAgICAgICAgcmV0dXJuIHRtcDsKKyAgICB9CisgICAgCisgICAgUmVnIGZpbmRGcmVlUmVnaXN0
ZXIoVG1wIHRtcCkKKyAgICB7CisgICAgICAgIGlmIChtX2FjdGl2ZS5zaXplKCkgPT0gbV9yZWdp
c3RlcnMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIFJlZygpOworICAgICAgICBUbXBEYXRh
JiBkYXRhID0gbV9tYXBbdG1wXTsKKyAgICAgICAgZm9yIChSZWcgcmVnIDogbV9yZWdpc3RlcnMp
IHsKKyAgICAgICAgICAgIGlmICghZGF0YS5hZGphY2VudC5nZXQocmVnKSAmJiAhbV9hY3RpdmVS
ZWdzLmdldChyZWcpKQorICAgICAgICAgICAgICAgIHJldHVybiByZWc7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIFJlZygpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0dGVtcHRTY2FuKCkK
KyAgICB7CisgICAgICAgIC8vIFRoaXMgaXMgbW9kZWxlZCBhZnRlciBMaW5lYXJTY2FuUmVnaXN0
ZXJBbGxvY2F0aW9uIGluIEZpZy4gMSBpbgorICAgICAgICAvLyBodHRwOi8vZGwuYWNtLm9yZy9j
aXRhdGlvbi5jZm0/aWQ9MzMwMjUwLgorCisgICAgICAgIG1fZGlkU3BpbGwgPSBmYWxzZTsKKyAg
ICAgICAgbV9hY3RpdmUuY2xlYXIoKTsKKyAgICAgICAgbV9hY3RpdmVSZWdzID0gUmVnaXN0ZXJT
ZXQoKTsKKyAgICAgICAgZm9yIChUbXBPckNsb2JiZXImIHRoaW5nIDogbV9pbnRlcnZhbHMpIHsK
KyAgICAgICAgICAgIHNpemVfdCBpbmRleCA9IGluZGV4T2YodGhpbmcpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBpZiAodmVyYm9zZSgpKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZygi
SW5kZXggIyIsIGluZGV4LCAiOiAiLCB0aGluZywgIlxuIik7CisgICAgICAgICAgICAgICAgZGF0
YUxvZygiICBBY3RpdmU6XG4iKTsKKyAgICAgICAgICAgICAgICBmb3IgKFRtcCB0bXAgOiBtX2Fj
dGl2ZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICIsIHRtcCwgIjogIiwgbV9t
YXBbdG1wXSwgIlxuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAvLyBUaGlzIGlzIEV4cGlyZU9sZEludGVydmFscyBpbiBGaWcuIDEuCisgICAgICAgICAg
ICB3aGlsZSAoIW1fYWN0aXZlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIFRtcCB0bXAg
PSBtX2FjdGl2ZS5maXJzdCgpOworICAgICAgICAgICAgICAgIFRtcERhdGEmIGVudHJ5ID0gbV9t
YXBbdG1wXTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBib29sIGV4cGlyZWQg
PSBlbnRyeS5pbnRlcnZhbC5lbmQoKSA8PSBpbmRleDsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBpZiAoIWV4cGlyZWQpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fYWN0aXZlLnJlbW92ZUZpcnN0KCk7Cisg
ICAgICAgICAgICAgICAgbV9hY3RpdmVSZWdzLnJlbW92ZShlbnRyeS5hc3NpZ25lZCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRoaXMgcGFydCBpcyBub3Qg
aW4gdGhlIHBhcGVyIHNpbmNlIHdlIGhhdmUgYSBtb3JlIHByZWNpc2UgaGFuZGxpbmcgb2YgY2xv
YmJlcnMgYW5kCisgICAgICAgICAgICAvLyBwcmVjb2xvcmVkIHJlZ2lzdGVycy4KKyAgICAgICAg
ICAgIGlmICh0aGluZy5pc0Nsb2JiZXIoKSkgeworICAgICAgICAgICAgICAgIENsb2JiZXIgY2xv
YmJlciA9IHRoaW5nLmNsb2JiZXIoKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCgh
Y2xvYmJlci5yZWdzLmlzRW1wdHkoKSk7CisgICAgICAgICAgICAgICAgZm9yIChUbXAgdG1wIDog
bV9hY3RpdmUpCisgICAgICAgICAgICAgICAgICAgIG1fbWFwW3RtcF0uYWRqYWNlbnQubWVyZ2Uo
Y2xvYmJlci5yZWdzKTsKKyAgICAgICAgICAgICAgICBSZWdpc3RlclNldCBwcm9ibGVtcyA9IG1f
YWN0aXZlUmVnczsKKyAgICAgICAgICAgICAgICBwcm9ibGVtcy5maWx0ZXIoY2xvYmJlci5yZWdz
KTsKKyAgICAgICAgICAgICAgICBpZiAoIXByb2JsZW1zLmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgICAgICAgICBtX2FjdGl2ZVJlZ3MubWVyZ2UoY2xvYmJlci5yZWdzKTsKKyAgICAgICAgICAg
ICAgICAgICAgbV9hY3RpdmUucmVtb3ZlQWxsTWF0Y2hpbmcoCisgICAgICAgICAgICAgICAgICAg
ICAgICBbJl0gKFRtcCB0bXApIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFRtcERhdGEmIGVudHJ5ID0gbV9tYXBbdG1wXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChlbnRyeS5hc3NpZ25lZCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFwcm9ibGVtcy5jb250YWlucyhlbnRyeS5hc3NpZ25lZCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBSZWcgYmV0dGVyUmVnID0gZmluZEZyZWVSZWdpc3Rlcih0bXApOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghYmV0dGVyUmVnKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNwaWxsKHRtcCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhc3NpZ25XaXRob3V0QWRkaW5nVG9BY3RpdmUodG1wLCBiZXR0ZXJS
ZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICBtX2FjdGl2ZVJlZ3MuZXhj
bHVkZShjbG9iYmVyLnJlZ3MpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgVG1wIHRt
cCA9IHRoaW5nLnRtcCgpOworICAgICAgICAgICAgVG1wRGF0YSYgZW50cnkgPSBtX21hcFt0bXBd
OworICAgICAgICAgICAgZW50cnkuYWRqYWNlbnQgPSBtX2FjdGl2ZVJlZ3M7CisgICAgICAgICAg
ICBSZWcgcmVnID0gZmluZEZyZWVSZWdpc3Rlcih0bXApOworICAgICAgICAgICAgaWYgKHJlZykg
eworICAgICAgICAgICAgICAgIGFzc2lnbih0bXAsIHJlZyk7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRoaXMg
aXMgU3BpbGxBdEludGVydmFsIGluIEZpZy4gMS4KKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KCFtX2FjdGl2ZS5pc0VtcHR5KCkpOworICAgICAgICAgICAgVG1wIHNwaWxsVG1wID0gbV9hY3Rp
dmUubGFzdCgpOworICAgICAgICAgICAgVG1wRGF0YSYgc3BpbGxFbnRyeSA9IG1fbWFwW3NwaWxs
VG1wXTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNwaWxsRW50cnkuYXNzaWduZWQpOwor
ICAgICAgICAgICAgaWYgKHNwaWxsRW50cnkuaXNVbnNwaWxsYWJsZSB8fAorICAgICAgICAgICAg
ICAgICghZW50cnkuaXNVbnNwaWxsYWJsZSAmJiBzcGlsbEVudHJ5LmludGVydmFsLmVuZCgpIDw9
IGVudHJ5LmludGVydmFsLmVuZCgpKSkgeworICAgICAgICAgICAgICAgIHNwaWxsKHRtcCk7Cisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIG1fYWN0aXZlLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgIGFzc2lnbih0bXAs
IHNwaWxsRW50cnkuYXNzaWduZWQpOworICAgICAgICAgICAgc3BpbGwoc3BpbGxUbXApOworICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgYXNzaWduV2l0aG91dEFkZGluZ1RvQWN0aXZl
KFRtcCB0bXAsIFJlZyByZWcpCisgICAgeworICAgICAgICBUbXBEYXRhJiBlbnRyeSA9IG1fbWFw
W3RtcF07CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFlbnRyeS5zcGlsbGVkKTsKKyAgICAgICAg
ZW50cnkuYXNzaWduZWQgPSByZWc7CisgICAgICAgIGVudHJ5LmFkamFjZW50ID0gbV9hY3RpdmVS
ZWdzOworICAgICAgICBtX2FjdGl2ZVJlZ3MuYWRkKHJlZyk7CisgICAgICAgIGZvciAoVG1wIG90
aGVyVG1wIDogbV9hY3RpdmUpIHsKKyAgICAgICAgICAgIGlmIChvdGhlclRtcCAhPSB0bXApCisg
ICAgICAgICAgICAgICAgbV9tYXBbb3RoZXJUbXBdLmFkamFjZW50LmFkZChyZWcpOworICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIHZvaWQgYXNzaWduKFRtcCB0bXAsIFJlZyByZWcpCisgICAg
eworICAgICAgICBhc3NpZ25XaXRob3V0QWRkaW5nVG9BY3RpdmUodG1wLCByZWcpOworICAgICAg
ICBpZiAobV9tYXBbdG1wXS5pc1Vuc3BpbGxhYmxlKSB7CisgICAgICAgICAgICAvLyBXZSB3YW50
IHRoZSBzcGlsbCB0bXBzIChyZWFkOiB1bnNwaWxsYWJsZSB0bXBzKSBmaXJzdC4KKyAgICAgICAg
ICAgIG1fYWN0aXZlLnByZXBlbmQodG1wKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICBtX2FjdGl2ZS5hcHBlbmRBbmRCdWJibGUoCisgICAgICAgICAgICB0bXAsCisg
ICAgICAgICAgICBbJl0gKFRtcCBvdGhlclRtcCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAg
VG1wRGF0YSYgb3RoZXJFbnRyeSA9IG1fbWFwW290aGVyVG1wXTsKKyAgICAgICAgICAgICAgICBp
ZiAob3RoZXJFbnRyeS5pc1Vuc3BpbGxhYmxlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fbWFwW290aGVyVG1wXS5pbnRlcnZhbC5l
bmQoKSA+IG1fbWFwW3RtcF0uaW50ZXJ2YWwuZW5kKCk7CisgICAgICAgICAgICB9KTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBzcGlsbChUbXAgdG1wKQorICAgIHsKKyAgICAgICAgVG1wRGF0YSYg
ZW50cnkgPSBtX21hcFt0bXBdOworICAgICAgICBSRUxFQVNFX0FTU0VSVCghZW50cnkuaXNVbnNw
aWxsYWJsZSk7CisgICAgICAgIGVudHJ5LnNwaWxsZWQgPSBtX2NvZGUuYWRkU3RhY2tTbG90KDgs
IFN0YWNrU2xvdEtpbmQ6OlNwaWxsKTsKKyAgICAgICAgZW50cnkuYXNzaWduZWQgPSBSZWcoKTsK
KyAgICAgICAgbV9kaWRTcGlsbCA9IHRydWU7CisgICAgfQorICAgIAorICAgIHZvaWQgZW1pdFNw
aWxsQ29kZSgpCisgICAgeworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2Rl
KSB7CisgICAgICAgICAgICBzaXplX3QgaW5kZXhPZkhlYWQgPSB0aGlzLT5pbmRleE9mSGVhZChi
bG9jayk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IDA7IGluc3RJbmRl
eCA8IGJsb2NrLT5zaXplKCk7ICsraW5zdEluZGV4KSB7CisgICAgICAgICAgICAgICAgSW5zdCYg
aW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu
ZGV4T2ZFYXJseSA9IGluZGV4T2ZIZWFkICsgaW5zdEluZGV4OworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIC8vIEZpcnN0IHRyeSB0byBzcGlsbCBkaXJlY3RseS4KKyAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5zdC5hcmdzLnNpemUoKTsgKytpKSB7
CisgICAgICAgICAgICAgICAgICAgIEFyZyYgYXJnID0gaW5zdC5hcmdzW2ldOworICAgICAgICAg
ICAgICAgICAgICBpZiAoIWFyZy5pc1RtcCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgICAgIGlmIChhcmcuaXNSZWcoKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBpZiAoYXJnLmJhbmso
KSAhPSBiYW5rKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgICAgIFN0YWNrU2xvdCogc3BpbGxlZCA9IG1fbWFwW2FyZy50bXAoKV0uc3BpbGxlZDsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFzcGlsbGVkKQorICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIGlmICghaW5zdC5hZG1pdHNTdGFjayhp
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAg
ICBhcmcgPSBBcmc6OnN0YWNrKHNwaWxsZWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBGYWxsIGJhY2sgb24gdGhlIGhhcmQgd2F5Lgor
ICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcCgKKyAgICAgICAgICAgICAgICAgICAgWyZd
IChUbXAmIHRtcCwgQXJnOjpSb2xlIHJvbGUsIEJhbmsgdG1wQmFuaywgV2lkdGgpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wQmFuayAhPSBi
YW5rKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFN0YWNrU2xvdCogc3BpbGxlZCA9IG1fbWFwW3RtcF0uc3BpbGxlZDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghc3BpbGxlZCkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICBPcGNvZGUgbW92ZSA9IGJhbmsg
PT0gR1AgPyBNb3ZlIDogTW92ZURvdWJsZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9
IGFkZFNwaWxsVG1wV2l0aEludGVydmFsKGludGVydmFsKGluZGV4T2ZFYXJseSwgQXJnOjp0aW1p
bmcocm9sZSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyb2xlID09IEFyZzo6U2Ny
YXRjaCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoQXJnOjppc0FueVVzZShyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX2luc2VydGlvblNldHNbYmxvY2tdLmluc2VydChpbnN0SW5kZXgsIG1vdmUsIGlu
c3Qub3JpZ2luLCBBcmc6OnN0YWNrKHNwaWxsZWQpLCB0bXApOworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKEFyZzo6aXNBbnlEZWYocm9sZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9pbnNlcnRpb25TZXRzW2Jsb2NrXS5pbnNlcnQoaW5zdEluZGV4ICsgMSwgbW92ZSwgaW5z
dC5vcmlnaW4sIHRtcCwgQXJnOjpzdGFjayhzcGlsbGVkKSk7CisgICAgICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgaW5z
ZXJ0U3BpbGxDb2RlKCkKKyAgICB7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBt
X2NvZGUpCisgICAgICAgICAgICBtX2luc2VydGlvblNldHNbYmxvY2tdLmV4ZWN1dGUoYmxvY2sp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGFzc2lnblJlZ2lzdGVycygpCisgICAgeworICAgICAg
ICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7CisgICAgICAgICAgICBmb3IgKElu
c3QmIGluc3QgOiAqYmxvY2spIHsKKyAgICAgICAgICAgICAgICBpbnN0LmZvckVhY2hUbXBGYXN0
KAorICAgICAgICAgICAgICAgICAgICBbJl0gKFRtcCYgdG1wKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAodG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcC5iYW5rKCkgIT0gYmFuaykKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlZyByZWcgPSBtX21hcFt0bXBdLmFzc2lnbmVk
OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWcpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nKCJGYWlsZWQgdG8gYWxsb2NhdGUgcmVnIGZvcjogIiwgdG1wLCAi
XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgdG1wID0gVG1wKHJlZyk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIENvZGUmIG1fY29kZTsKKyAgICBWZWN0b3I8
UmVnPiBtX3JlZ2lzdGVyczsKKyAgICBSZWdpc3RlclNldCBtX3JlZ2lzdGVyU2V0OworICAgIElu
ZGV4TWFwPEJhc2ljQmxvY2sqLCBzaXplX3Q+IG1fc3RhcnRJbmRleDsKKyAgICBJbmRleE1hcDxU
bXA6OkluZGV4ZWQ8YmFuaz4sIFRtcERhdGE+IG1fbWFwOworICAgIEluZGV4TWFwPEJhc2ljQmxv
Y2sqLCBJbnNlcnRpb25TZXQ+IG1faW5zZXJ0aW9uU2V0czsKKyAgICBWZWN0b3I8Q2xvYmJlcj4g
bV9jbG9iYmVyczsgLy8gQWZ0ZXIgd2UgYWxsb2NhdGUgdGhpcywgd2UgaGFwcGlseSBwb2ludCBw
b2ludGVycyBpbnRvIGl0LgorICAgIFZlY3RvcjxUbXBPckNsb2JiZXI+IG1faW50ZXJ2YWxzOwor
ICAgIERlcXVlPFRtcD4gbV9hY3RpdmU7CisgICAgUmVnaXN0ZXJTZXQgbV9hY3RpdmVSZWdzOwor
ICAgIGJvb2wgbV9kaWRTcGlsbCB7IGZhbHNlIH07Cit9OworCit0ZW1wbGF0ZTxCYW5rIGJhbms+
Cit2b2lkIHJ1bkxpbmVhclNjYW4oQ29kZSYgY29kZSkKK3sKKyAgICBpZiAodmVyYm9zZSgpKQor
ICAgICAgICBkYXRhTG9nKCJBaXIgYmVmb3JlIGxpbmVhciBzY2FuIGZvciAiLCBiYW5rLCAiOlxu
IiwgY29kZSk7CisgICAgTGluZWFyU2NhbjxiYW5rPiBsaW5lYXJTY2FuKGNvZGUpOworICAgIGxp
bmVhclNjYW4ucnVuKCk7Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIGFs
bG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuKENvZGUmIGNvZGUpCit7CisgICAgUGhhc2VTY29w
ZSBwaGFzZVNjb3BlKGNvZGUsICJhbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2NhbiIpOworICAg
IHBhZEludGVyZmVyZW5jZShjb2RlKTsKKyAgICBydW5MaW5lYXJTY2FuPEZQPihjb2RlKTsKKyAg
ICBydW5MaW5lYXJTY2FuPEdQPihjb2RlKTsKKyAgICBmaXhTcGlsbHNBZnRlclRlcm1pbmFscyhj
b2RlKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxs
b2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmgJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lz
dGVyc0J5TGluZWFyU2Nhbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJDUFUuaCIKKyNpbmNsdWRlICJPcHRpb25z
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwor
Y2xhc3MgQ29kZTsKKworLy8gVGhpcyBpbXBsZW1lbnRzIHRoZSBQb2xldHRvIGFuZCBTYXJrZXIg
cmVnaXN0ZXIgYWxsb2NhdG9yIGNhbGxlZCAibGluZWFyIHNjYW4iOgorLy8gaHR0cDovL2RsLmFj
bS5vcmcvY2l0YXRpb24uY2ZtP2lkPTMzMDI1MAorLy8KKy8vIFRoaXMgaXMgbm90IEFpcidzIHBy
aW1hcnkgcmVnaXN0ZXIgYWxsb2NhdG9yLiBXZSB1c2UgaXQgb25seSB3aGVuIHJ1bm5pbmcgYXQg
b3B0TGV2ZWw9MC4gVGhhdCdzIG5vdAorLy8gdGhlIGRlZmF1bHQgbGV2ZWwuIFRoaXMgcmVnaXN0
ZXIgYWxsb2NhdG9yIGlzIG9wdGltaXplZCBwcmltYXJpbHkgZm9yIHJ1bm5pbmcgcXVpY2tseS4g
SXQncyBleHBlY3RlZAorLy8gdGhhdCBpbXByb3ZlbWVudHMgdG8gdGhpcyByZWdpc3RlciBhbGxv
Y2F0b3Igc2hvdWxkIGZvY3VzIHByaW1hcmlseSBvbiBpbXByb3ZpbmcgaXRzIGV4ZWN1dGlvbiB0
aW1lCisvLyB3aXRob3V0IG11Y2ggcmVnYXJkIGZvciB0aGUgcXVhbGl0eSBvZiBnZW5lcmF0ZWQg
Y29kZS4KKy8vCisvLyBGb3IgQWlyJ3MgcHJpbWFyeSByZWdpc3RlciBhbGxvY2F0b3IsIHNlZSBB
aXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5ofGNwcC4KK3ZvaWQgYWxsb2NhdGVS
ZWdpc3RlcnNCeUxpbmVhclNjYW4oQ29kZSYpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
Mzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwCShyZXZpc2lvbiAyMTQ0
MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNjEsNyArMTYxLDcgQEAgdm9pZCBhbGxvY2F0ZVN0YWNrKENv
ZGUmIGNvZGUpCiAKICAgICAvLyBOb3cgd2UgaGFuZGxlIHRoZSBzcGlsbCBzbG90cy4KICAgICBT
dGFja1Nsb3RMaXZlbmVzcyBsaXZlbmVzcyhjb2RlKTsKLSAgICBJbmRleE1hcDxTdGFja1Nsb3Qs
IEhhc2hTZXQ8U3RhY2tTbG90Kj4+IGludGVyZmVyZW5jZShjb2RlLnN0YWNrU2xvdHMoKS5zaXpl
KCkpOworICAgIEluZGV4TWFwPFN0YWNrU2xvdCosIEhhc2hTZXQ8U3RhY2tTbG90Kj4+IGludGVy
ZmVyZW5jZShjb2RlLnN0YWNrU2xvdHMoKS5zaXplKCkpOwogICAgIFZlY3RvcjxTdGFja1Nsb3Qq
PiBzbG90czsKIAogICAgIC8vIFdlIHdpbGwgcGVyZm9ybSBzb21lIHNwaWxsIGNvYWxlc2Npbmcu
IFRvIG1ha2UgdGhhdCBlZmZlY3RpdmUsIHdlIG5lZWQgdG8gYmUgYWJsZSB0byBpZGVudGlmeQpA
QCAtMzA5LDcgKzMwOSw3IEBAIHZvaWQgYWxsb2NhdGVTdGFjayhDb2RlJiBjb2RlKQogICAgICAg
ICAgICAgcmV0dXJuIGEuZnJlcXVlbmN5ID4gYi5mcmVxdWVuY3k7CiAgICAgICAgIH0pOwogICAg
IAotICAgIEluZGV4TWFwPFN0YWNrU2xvdCwgU3RhY2tTbG90Kj4gcmVtYXBwZWRTdGFja1Nsb3Rz
KGNvZGUuc3RhY2tTbG90cygpLnNpemUoKSk7CisgICAgSW5kZXhNYXA8U3RhY2tTbG90KiwgU3Rh
Y2tTbG90Kj4gcmVtYXBwZWRTdGFja1Nsb3RzKGNvZGUuc3RhY2tTbG90cygpLnNpemUoKSk7CiAg
ICAgYXV0byByZW1hcCA9IFsmXSAoU3RhY2tTbG90KiBzbG90KSAtPiBTdGFja1Nsb3QqIHsKICAg
ICAgICAgaWYgKCFzbG90KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI4Miw2ICsyODIsMzcgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEFy
ZwogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKK3ZvaWQgcHJpbnRJbnRl
cm5hbChQcmludFN0cmVhbSYgb3V0LCBBcmc6OlBoYXNlIHBoYXNlKQoreworICAgIHN3aXRjaCAo
cGhhc2UpIHsKKyAgICBjYXNlIEFyZzo6RWFybHk6CisgICAgICAgIG91dC5wcmludCgiRWFybHki
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJnOjpMYXRlOgorICAgICAgICBvdXQucHJp
bnQoIkxhdGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0
LCBBcmc6OlRpbWluZyB0aW1pbmcpCit7CisgICAgc3dpdGNoICh0aW1pbmcpIHsKKyAgICBjYXNl
IEFyZzo6T25seUVhcmx5OgorICAgICAgICBvdXQucHJpbnQoIk9ubHlFYXJseSIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBBcmc6Ok9ubHlMYXRlOgorICAgICAgICBvdXQucHJpbnQoIk9u
bHlMYXRlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFyZzo6RWFybHlBbmRMYXRlOgor
ICAgICAgICBvdXQucHJpbnQoIkVhcmx5QW5kTGF0ZSIpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwogdm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEFyZzo6Um9sZSByb2xlKQogewogICAgIHN3aXRjaCAo
cm9sZSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCShyZXZpc2lv
biAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC05Miw2ICs5MiwxNyBAQCBwdWJsaWM6CiAgICAgICAgIENvbGQsCiAgICAg
ICAgIFdhcm0KICAgICB9OworICAgIAorICAgIGVudW0gUGhhc2UgOiBpbnQ4X3QgeworICAgICAg
ICBFYXJseSwKKyAgICAgICAgTGF0ZQorICAgIH07CisgICAgCisgICAgZW51bSBUaW1pbmcgOiBp
bnQ4X3QgeworICAgICAgICBPbmx5RWFybHksCisgICAgICAgIE9ubHlMYXRlLAorICAgICAgICBF
YXJseUFuZExhdGUKKyAgICB9OwogCiAgICAgZW51bSBSb2xlIDogaW50OF90IHsKICAgICAgICAg
Ly8gVXNlIG1lYW5zIHRoYXQgdGhlIEluc3Qgd2lsbCByZWFkIGZyb20gdGhpcyB2YWx1ZSBiZWZv
cmUgZG9pbmcgYW55dGhpbmcgZWxzZS4KQEAgLTI1Myw3ICsyNjQsODIgQEAgcHVibGljOgogICAg
IHsKICAgICAgICAgcmV0dXJuIGlzQ29sZFVzZShyb2xlKSA/IENvbGQgOiBXYXJtOwogICAgIH0K
LQorICAgIAorICAgIHN0YXRpYyBib29sIGFjdGl2ZUF0KFJvbGUgcm9sZSwgUGhhc2UgcGhhc2Up
CisgICAgeworICAgICAgICBzd2l0Y2ggKHJvbGUpIHsKKyAgICAgICAgY2FzZSBVc2U6CisgICAg
ICAgIGNhc2UgQ29sZFVzZToKKyAgICAgICAgY2FzZSBFYXJseURlZjoKKyAgICAgICAgY2FzZSBF
YXJseVpEZWY6CisgICAgICAgIGNhc2UgVXNlQWRkcjoKKyAgICAgICAgICAgIHJldHVybiBwaGFz
ZSA9PSBFYXJseTsKKyAgICAgICAgY2FzZSBMYXRlVXNlOgorICAgICAgICBjYXNlIExhdGVDb2xk
VXNlOgorICAgICAgICBjYXNlIERlZjoKKyAgICAgICAgY2FzZSBaRGVmOgorICAgICAgICAgICAg
cmV0dXJuIHBoYXNlID09IExhdGU7CisgICAgICAgIGNhc2UgVXNlRGVmOgorICAgICAgICBjYXNl
IFVzZVpEZWY6CisgICAgICAgIGNhc2UgU2NyYXRjaDoKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAK
KyAgICBzdGF0aWMgYm9vbCBhY3RpdmVBdChUaW1pbmcgdGltaW5nLCBQaGFzZSBwaGFzZSkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAodGltaW5nKSB7CisgICAgICAgIGNhc2UgT25seUVhcmx5Ogor
ICAgICAgICAgICAgcmV0dXJuIHBoYXNlID09IEVhcmx5OworICAgICAgICBjYXNlIE9ubHlMYXRl
OgorICAgICAgICAgICAgcmV0dXJuIHBoYXNlID09IExhdGU7CisgICAgICAgIGNhc2UgRWFybHlB
bmRMYXRlOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBUaW1pbmcgdGltaW5n
KFJvbGUgcm9sZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAocm9sZSkgeworICAgICAgICBjYXNl
IFVzZToKKyAgICAgICAgY2FzZSBDb2xkVXNlOgorICAgICAgICBjYXNlIEVhcmx5RGVmOgorICAg
ICAgICBjYXNlIEVhcmx5WkRlZjoKKyAgICAgICAgY2FzZSBVc2VBZGRyOgorICAgICAgICAgICAg
cmV0dXJuIE9ubHlFYXJseTsKKyAgICAgICAgY2FzZSBMYXRlVXNlOgorICAgICAgICBjYXNlIExh
dGVDb2xkVXNlOgorICAgICAgICBjYXNlIERlZjoKKyAgICAgICAgY2FzZSBaRGVmOgorICAgICAg
ICAgICAgcmV0dXJuIE9ubHlMYXRlOworICAgICAgICBjYXNlIFVzZURlZjoKKyAgICAgICAgY2Fz
ZSBVc2VaRGVmOgorICAgICAgICBjYXNlIFNjcmF0Y2g6CisgICAgICAgICAgICByZXR1cm4gRWFy
bHlBbmRMYXRlOworICAgICAgICB9CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIHN0YXRpYyB2b2lkIGZv
ckVhY2hQaGFzZShUaW1pbmcgdGltaW5nLCBjb25zdCBGdW5jJiBmdW5jKQorICAgIHsKKyAgICAg
ICAgaWYgKGFjdGl2ZUF0KHRpbWluZywgRWFybHkpKQorICAgICAgICAgICAgZnVuYyhFYXJseSk7
CisgICAgICAgIGlmIChhY3RpdmVBdCh0aW1pbmcsIExhdGUpKQorICAgICAgICAgICAgZnVuYyhM
YXRlKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICBzdGF0
aWMgdm9pZCBmb3JFYWNoUGhhc2UoUm9sZSByb2xlLCBjb25zdCBGdW5jJiBmdW5jKQorICAgIHsK
KyAgICAgICAgaWYgKGFjdGl2ZUF0KHJvbGUsIEVhcmx5KSkKKyAgICAgICAgICAgIGZ1bmMoRWFy
bHkpOworICAgICAgICBpZiAoYWN0aXZlQXQocm9sZSwgTGF0ZSkpCisgICAgICAgICAgICBmdW5j
KExhdGUpOworICAgIH0KKyAgICAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIFJvbGUgaW1w
bGllcyB0aGF0IHRoZSBJbnN0IHdpbGwgVXNlIHRoZSBBcmcgYmVmb3JlIGRvaW5nIGFueXRoaW5n
IGVsc2UuCiAgICAgc3RhdGljIGJvb2wgaXNFYXJseVVzZShSb2xlIHJvbGUpCiAgICAgewpAQCAt
MTM1NCw2ICsxNDQwLDggQEAgbmFtZXNwYWNlIFdURiB7CiAKIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OkFpcjo6QXJnOjpLaW5kKTsK
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6
QjM6OkFpcjo6QXJnOjpUZW1wZXJhdHVyZSk7CitKU19FWFBPUlRfUFJJVkFURSB2b2lkIHByaW50
SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpBaXI6OkFyZzo6UGhhc2UpOworSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6QWly
OjpBcmc6OlRpbWluZyk7CiBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mLCBKU0M6OkIzOjpBaXI6OkFyZzo6Um9sZSk7CiBKU19FWFBPUlRfUFJJVkFURSB2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpBaXI6OkFyZzo6U2lnbmVk
bmVzcyk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmxvY2tXb3Jr
bGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmxv
Y2tXb3JrbGlzdC5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckJsb2NrV29ya2xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiw3ICszMiw3IEBACiAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKIAotdHlwZWRl
ZiBHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IEJs
b2NrV29ya2xpc3Q7Cit0eXBlZGVmIEdyYXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRl
eFNldDxCYXNpY0Jsb2NrKj4+IEJsb2NrV29ya2xpc3Q7CiAKIC8vIFdoZW4geW91IHNheSBCbG9j
a1dpdGg8aW50PiB5b3Ugc2hvdWxkIHJlYWQgaXQgYXMgImJsb2NrIHdpdGggYW4gaW50Ii4KIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5nIEJsb2NrV2l0aCA9IEdyYXBoTm9kZVdpdGg8QmFzaWNC
bG9jayosIFQ+OwpAQCAtNDEsMTEgKzQxLDExIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5n
IEJsb2NrV2l0aCA9IEcKIC8vIHBlcm1pdHMgZm9yY2libHkgZW5xdWV1ZWluZyB0aGluZ3MgZXZl
biBpZiB0aGUgYmxvY2sgaGFzIGFscmVhZHkgYmVlbiBzZWVuLiBJdCdzIHVzZWZ1bCBmb3IKIC8v
IHRoaW5ncyBsaWtlIGJ1aWxkaW5nIGEgc3Bhbm5pbmcgdHJlZSwgaW4gd2hpY2ggY2FzZSBUICh0
aGUgYXV4aWxpYXJ5IHBheWxvYWQpIHdvdWxkIGJlIHRoZQogLy8gc3VjY2Vzc29yIGluZGV4Lgot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcgRXh0ZW5kZWRCbG9ja1dvcmtsaXN0ID0gRXh0ZW5k
ZWRHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgVCwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+
OwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcgRXh0ZW5kZWRCbG9ja1dvcmtsaXN0ID0gRXh0
ZW5kZWRHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgVCwgSW5kZXhTZXQ8QmFzaWNCbG9j
ayo+PjsKIAogdHlwZWRlZiBHcmFwaE5vZGVXaXRoT3JkZXI8QmFzaWNCbG9jayo+IEJsb2NrV2l0
aE9yZGVyOwogCi10eXBlZGVmIFBvc3RPcmRlckdyYXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxvY2sq
LCBJbmRleFNldDxCYXNpY0Jsb2NrPj4gUG9zdE9yZGVyQmxvY2tXb3JrbGlzdDsKK3R5cGVkZWYg
UG9zdE9yZGVyR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxv
Y2sqPj4gUG9zdE9yZGVyQmxvY2tXb3JrbGlzdDsKIAogfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjM6OkFpcgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNGRy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0ZHLmgJKHJldmlz
aW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0ZHLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM5LDggKzM5LDggQEAgY2xhc3MgQ0ZHIHsKICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEJhc2ljQmxvY2sqIE5vZGU7Ci0g
ICAgdHlwZWRlZiBJbmRleFNldDxCYXNpY0Jsb2NrPiBTZXQ7Ci0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gdXNpbmcgTWFwID0gSW5kZXhNYXA8QmFzaWNCbG9jaywgVD47CisgICAgdHlwZWRlZiBJ
bmRleFNldDxCYXNpY0Jsb2NrKj4gU2V0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5n
IE1hcCA9IEluZGV4TWFwPEJhc2ljQmxvY2sqLCBUPjsKICAgICB0eXBlZGVmIFZlY3RvcjxCYXNp
Y0Jsb2NrKiwgND4gTGlzdDsKIAogICAgIENGRyhDb2RlJiBjb2RlKQpAQCAtNTEsNyArNTEsNyBA
QCBwdWJsaWM6CiAgICAgTm9kZSByb290KCkgeyByZXR1cm4gbV9jb2RlWzBdOyB9CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIE1hcDxUPiBuZXdNYXAoKSB7IHJldHVybiBJbmRleE1h
cDxKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2ssIFQ+KG1fY29kZS5zaXplKCkpOyB9CisgICAgTWFw
PFQ+IG5ld01hcCgpIHsgcmV0dXJuIEluZGV4TWFwPEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9jayos
IFQ+KG1fY29kZS5zaXplKCkpOyB9CiAKICAgICBTdWNjZXNzb3JDb2xsZWN0aW9uPEJhc2ljQmxv
Y2ssIEJhc2ljQmxvY2s6OlN1Y2Nlc3Nvckxpc3Q+IHN1Y2Nlc3NvcnMoTm9kZSBub2RlKSB7IHJl
dHVybiBub2RlLT5zdWNjZXNzb3JCbG9ja3MoKTsgfQogICAgIEJhc2ljQmxvY2s6OlByZWRlY2Vz
c29yTGlzdCYgcHJlZGVjZXNzb3JzKE5vZGUgbm9kZSkgeyByZXR1cm4gbm9kZS0+cHJlZGVjZXNz
b3JzKCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRWxpbWluYXRl
RGVhZENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyRWxpbWluYXRlRGVhZENvZGUuY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckVsaW1pbmF0ZURlYWRDb2RlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDAsNyArNDAsNyBAQCBib29sIGVsaW1pbmF0ZURlYWRDb2RlKENvZGUmIGNvZGUpCiAg
ICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJlbGltaW5hdGVEZWFkQ29kZSIpOwogCiAg
ICAgSGFzaFNldDxUbXA+IGxpdmVUbXBzOwotICAgIEluZGV4U2V0PFN0YWNrU2xvdD4gbGl2ZVN0
YWNrU2xvdHM7CisgICAgSW5kZXhTZXQ8U3RhY2tTbG90Kj4gbGl2ZVN0YWNrU2xvdHM7CiAgICAg
Ym9vbCBjaGFuZ2VkOwogCiAgICAgYXV0byBpc0FyZ0xpdmUgPSBbJl0gKGNvbnN0IEFyZyYgYXJn
KSAtPiBib29sIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4T2J2
aW91c1NwaWxscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJGaXhPYnZpb3VzU3BpbGxzLmNwcAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhPYnZpb3VzU3BpbGxzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTQ3LDcgKzU0Nyw3IEBAIHByaXZhdGU6CiAgICAgfTsKIAogICAgIENvZGUmIG1fY29k
ZTsKLSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBTdGF0ZT4gbV9hdEhlYWQ7CisgICAgSW5kZXhN
YXA8QmFzaWNCbG9jayosIFN0YXRlPiBtX2F0SGVhZDsKICAgICBTdGF0ZSBtX3N0YXRlOwogICAg
IEJhc2ljQmxvY2sqIG1fYmxvY2sgeyBudWxscHRyIH07CiAgICAgdW5zaWduZWQgbV9pbnN0SW5k
ZXggeyAwIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeFBhcnRp
YWxSZWdpc3RlclN0YWxscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJGaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMuY3BwCShyZXZpc2lvbiAyMTQ0Mjcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeFBhcnRpYWxSZWdpc3RlclN0
YWxscy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NSwxMCArMTU1LDEwIEBAIHZvaWQgZml4UGFy
dGlhbFJlZ2lzdGVyU3RhbGxzKENvZGUmIGNvZGUKIAogICAgIC8vIEZvciBlYWNoIGJsb2NrLCB0
aGlzIHByb3ZpZGVzIHRoZSBkaXN0YW5jZSB0byB0aGUgbGFzdCBpbnN0cnVjdGlvbiBzZXR0aW5n
IGVhY2ggcmVnaXN0ZXIKICAgICAvLyBvbiBibG9jayAqZW50cnkqLgotICAgIEluZGV4TWFwPEJh
c2ljQmxvY2ssIEZQRGVmRGlzdGFuY2U+IGxhc3REZWZEaXN0YW5jZShjb2RlLnNpemUoKSk7Cisg
ICAgSW5kZXhNYXA8QmFzaWNCbG9jayosIEZQRGVmRGlzdGFuY2U+IGxhc3REZWZEaXN0YW5jZShj
b2RlLnNpemUoKSk7CiAKICAgICAvLyBCbG9ja3Mgd2l0aCBkaXJ0eSBkaXN0YW5jZSBhdCBoZWFk
LgotICAgIEluZGV4U2V0PEJhc2ljQmxvY2s+IGRpcnR5OworICAgIEluZGV4U2V0PEJhc2ljQmxv
Y2sqPiBkaXJ0eTsKIAogICAgIC8vIEZpcnN0LCB3ZSBjb21wdXRlIHRoZSBsb2NhbCBkaXN0YW5j
ZSBmb3IgZWFjaCBibG9jayBhbmQgcHVzaCBpdCB0byB0aGUgc3VjY2Vzc29ycy4KICAgICBmb3Ig
KEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5jcHAJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhTcGls
bHNBZnRlclRlcm1pbmFscy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5oIgorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckJsb2NrSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVk
ZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkFp
ckluc3RJbmxpbmVzLmgiCisjaW5jbHVkZSAiQWlyVG1wSW5saW5lcy5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgZml4U3BpbGxzQWZ0
ZXJUZXJtaW5hbHMoQ29kZSYgY29kZSkKK3sKKyAgICAvLyBCZWNhdXNlIHRoZXJlIG1heSBiZSB0
ZXJtaW5hbHMgdGhhdCBwcm9kdWNlIHZhbHVlcywgSVJDIG1heQorICAgIC8vIHdhbnQgdG8gc3Bp
bGwgdGhvc2UgdGVybWluYWxzLiBJdCdsbCBoYXBwZW4gdG8gc3BpbGwgaXQgYWZ0ZXIKKyAgICAv
LyB0aGUgdGVybWluYWwuIElmIHdlIGxlZnQgdGhlIGdyYXBoIGluIHRoaXMgc3RhdGUsIGl0J2Qg
YmUgaW52YWxpZAorICAgIC8vIGJlY2F1c2UgYSB0ZXJtaW5hbCBtdXN0IGJlIHRoZSBsYXN0IGlu
c3RydWN0aW9uIGluIGEgYmxvY2suCisgICAgLy8gV2UgZml4IHRoYXQgaGVyZS4KKworICAgIEJs
b2NrSW5zZXJ0aW9uU2V0IGJsb2NrSW5zZXJ0aW9uU2V0KGNvZGUpOworICAgIEluc2VydGlvblNl
dCBpbnNlcnRpb25TZXQoY29kZSk7CisKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29k
ZSkgeworICAgICAgICB1bnNpZ25lZCB0ZXJtaW5hbEluZGV4ID0gYmxvY2stPnNpemUoKTsKKyAg
ICAgICAgYm9vbCBmb3VuZFRlcm1pbmFsID0gZmFsc2U7CisgICAgICAgIHdoaWxlICh0ZXJtaW5h
bEluZGV4LS0pIHsKKyAgICAgICAgICAgIGlmIChibG9jay0+YXQodGVybWluYWxJbmRleCkuaXNU
ZXJtaW5hbCgpKSB7CisgICAgICAgICAgICAgICAgZm91bmRUZXJtaW5hbCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgQVNT
RVJUX1VOVVNFRChmb3VuZFRlcm1pbmFsLCBmb3VuZFRlcm1pbmFsKTsKKworICAgICAgICBpZiAo
dGVybWluYWxJbmRleCA9PSBibG9jay0+c2l6ZSgpIC0gMSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgIC8vIFRoZXJlIG11c3QgYmUgaW5zdHJ1Y3Rpb25zIGFmdGVyIHRoZSB0ZXJt
aW5hbCBiZWNhdXNlIGl0J3Mgbm90IHRoZSBsYXN0IGluc3RydWN0aW9uLgorICAgICAgICBBU1NF
UlQodGVybWluYWxJbmRleCA8IGJsb2NrLT5zaXplKCkgLSAxKTsKKyAgICAgICAgVmVjdG9yPElu
c3QsIDE+IGluc3RzVG9Nb3ZlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB0ZXJtaW5hbElu
ZGV4ICsgMTsgaSA8IGJsb2NrLT5zaXplKCk7IGkrKykKKyAgICAgICAgICAgIGluc3RzVG9Nb3Zl
LmFwcGVuZChibG9jay0+YXQoaSkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChpbnN0c1RvTW92
ZS5zaXplKCkpOworCisgICAgICAgIGZvciAoRnJlcXVlbnRlZEJsb2NrJiBmcmVxdWVudGVkU3Vj
Y2Vzc29yIDogYmxvY2stPnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgQmFzaWNCbG9jayog
c3VjY2Vzc29yID0gZnJlcXVlbnRlZFN1Y2Nlc3Nvci5ibG9jaygpOworICAgICAgICAgICAgLy8g
SWYgc3VjY2Vzc29yJ3Mgb25seSBwcmVkZWNlc3NvciBpcyBibG9jaywgd2UgY2FuIHBsYW50IHRo
ZSBzcGlsbCBpbnNpZGUKKyAgICAgICAgICAgIC8vIHRoZSBzdWNjZXNzb3IuIE90aGVyd2lzZSwg
d2UgbXVzdCBzcGxpdCB0aGUgY3JpdGljYWwgZWRnZSBhbmQgY3JlYXRlCisgICAgICAgICAgICAv
LyBhIG5ldyBibG9jayBmb3IgdGhlIHNwaWxsLgorICAgICAgICAgICAgaWYgKHN1Y2Nlc3Nvci0+
bnVtUHJlZGVjZXNzb3JzKCkgPT0gMSkgeworICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5p
bnNlcnRJbnN0cygwLCBpbnN0c1RvTW92ZSk7CisgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0
LmV4ZWN1dGUoc3VjY2Vzc29yKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgQmFzaWNCbG9jayogbmV3QmxvY2sgPSBibG9ja0luc2VydGlvblNldC5pbnNlcnRCZWZvcmUo
c3VjY2Vzc29yLCBzdWNjZXNzb3ItPmZyZXF1ZW5jeSgpKTsKKyAgICAgICAgICAgICAgICBmb3Ig
KGNvbnN0IEluc3QmIGluc3QgOiBpbnN0c1RvTW92ZSkKKyAgICAgICAgICAgICAgICAgICAgbmV3
QmxvY2stPmFwcGVuZEluc3QoaW5zdCk7CisgICAgICAgICAgICAgICAgbmV3QmxvY2stPmFwcGVu
ZEluc3QoSW5zdChKdW1wLCBpbnN0c1RvTW92ZS5sYXN0KCkub3JpZ2luKSk7CisgICAgICAgICAg
ICAgICAgbmV3QmxvY2stPnN1Y2Nlc3NvcnMoKS5hcHBlbmQoc3VjY2Vzc29yKTsKKyAgICAgICAg
ICAgICAgICBmcmVxdWVudGVkU3VjY2Vzc29yLmJsb2NrKCkgPSBuZXdCbG9jazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGJsb2NrLT5yZXNpemUodGVybWluYWxJbmRleCAr
IDEpOworICAgIH0KKworICAgIGlmIChibG9ja0luc2VydGlvblNldC5leGVjdXRlKCkpCisgICAg
ICAgIGNvZGUucmVzZXRSZWFjaGFiaWxpdHkoKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4U3BpbGxzQWZ0ZXJUZXJt
aW5hbHMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCisvLyBCZWNhdXNlIHRoZXJlIG1h
eSBiZSB0ZXJtaW5hbHMgdGhhdCBwcm9kdWNlIHZhbHVlcywgdGhlIHJlZ2lzdGVyIGFsbG9jYXRv
ciBtYXkKKy8vIHdhbnQgdG8gc3BpbGwgdGhvc2UgdGVybWluYWxzLiBJdCdsbCBoYXBwZW4gdG8g
c3BpbGwgaXQgYWZ0ZXIKKy8vIHRoZSB0ZXJtaW5hbC4gSWYgd2UgbGVmdCB0aGUgZ3JhcGggaW4g
dGhpcyBzdGF0ZSwgaXQnZCBiZSBpbnZhbGlkCisvLyBiZWNhdXNlIGEgdGVybWluYWwgbXVzdCBi
ZSB0aGUgbGFzdCBpbnN0cnVjdGlvbiBpbiBhIGJsb2NrLgorLy8gV2UgZml4IHRoYXQgaGVyZS4K
K3ZvaWQgZml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMoQ29kZSYpOworCit9IH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkocmV2aXNpb24gMjE0
NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoQjNfSklUKQogCiAjaW5j
bHVkZSAiQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuaCIKKyNpbmNsdWRlICJB
aXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5oIgogI2luY2x1ZGUgIkFpckFsbG9jYXRl
U3RhY2suaCIKICNpbmNsdWRlICJBaXJDb2RlLmgiCiAjaW5jbHVkZSAiQWlyRWxpbWluYXRlRGVh
ZENvZGUuaCIKQEAgLTU3LDcgKzU4LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7IG5hbWVzcGFjZSBBaXIgewogCi12b2lkIHByZXBhcmVGb3JHZW5lcmF0aW9uKENvZGUmIGNv
ZGUpCit2b2lkIHByZXBhcmVGb3JHZW5lcmF0aW9uKENvZGUmIGNvZGUsIHVuc2lnbmVkIG9wdExl
dmVsKQogewogICAgIFRpbWluZ1Njb3BlIHRpbWluZ1Njb3BlKCJBaXI6OnByZXBhcmVGb3JHZW5l
cmF0aW9uIik7CiAgICAgCkBAIC04OSwxOCArOTAsMjIgQEAgdm9pZCBwcmVwYXJlRm9yR2VuZXJh
dGlvbihDb2RlJiBjb2RlKQogICAgIC8vIEZvciBkZWJ1Z2dpbmcsIHlvdSBjYW4gdXNlIHNwaWxs
RXZlcnl0aGluZygpIHRvIHB1dCBldmVyeXRoaW5nIHRvIHRoZSBzdGFjayBiZXR3ZWVuIGVhY2gg
SW5zdC4KICAgICBpZiAoT3B0aW9uczo6YWlyU3BpbGxzRXZlcnl0aGluZygpKQogICAgICAgICBz
cGlsbEV2ZXJ5dGhpbmcoY29kZSk7Ci0gICAgZWxzZQorICAgIGVsc2UgaWYgKG9wdExldmVsID49
IDIgJiYgZmFsc2UpIC8vIE9PUFMhISBUaGlzIHdhcyBqdXN0IGZvciB0ZXN0aW5nLgogICAgICAg
ICBhbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZyhjb2RlKTsKKyAgICBlbHNlCisgICAg
ICAgIGFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuKGNvZGUpOwogCiAgICAgaWYgKE9wdGlv
bnM6OmxvZ0FpclJlZ2lzdGVyUHJlc3N1cmUoKSkgewogICAgICAgICBkYXRhTG9nKCJSZWdpc3Rl
ciBwcmVzc3VyZSBhZnRlciByZWdpc3RlciBhbGxvY2F0aW9uOlxuIik7CiAgICAgICAgIGxvZ1Jl
Z2lzdGVyUHJlc3N1cmUoY29kZSk7CiAgICAgfQotCi0gICAgLy8gVGhpcyByZXBsYWNlcyB1c2Vz
IG9mIHNwaWxsIHNsb3RzIHdpdGggcmVnaXN0ZXJzIG9yIGNvbnN0YW50cyBpZiBwb3NzaWJsZS4g
SXQgZG9lcyB0aGlzIGJ5Ci0gICAgLy8gbWluaW1pemluZyB0aGUgYW1vdW50IHRoYXQgd2UgcGVy
dHVyYiB0aGUgYWxyZWFkeS1jaG9zZW4gcmVnaXN0ZXIgYWxsb2NhdGlvbi4gSXQgbWF5IGV4dGVu
ZAotICAgIC8vIHRoZSBsaXZlIHJhbmdlcyBvZiByZWdpc3RlcnMgdGhvdWdoLgotICAgIGZpeE9i
dmlvdXNTcGlsbHMoY29kZSk7CisgICAgCisgICAgaWYgKG9wdExldmVsID49IDIpIHsKKyAgICAg
ICAgLy8gVGhpcyByZXBsYWNlcyB1c2VzIG9mIHNwaWxsIHNsb3RzIHdpdGggcmVnaXN0ZXJzIG9y
IGNvbnN0YW50cyBpZiBwb3NzaWJsZS4gSXQgZG9lcyB0aGlzIGJ5CisgICAgICAgIC8vIG1pbmlt
aXppbmcgdGhlIGFtb3VudCB0aGF0IHdlIHBlcnR1cmIgdGhlIGFscmVhZHktY2hvc2VuIHJlZ2lz
dGVyIGFsbG9jYXRpb24uIEl0IG1heSBleHRlbmQKKyAgICAgICAgLy8gdGhlIGxpdmUgcmFuZ2Vz
IG9mIHJlZ2lzdGVycyB0aG91Z2guCisgICAgICAgIGZpeE9idmlvdXNTcGlsbHMoY29kZSk7Cisg
ICAgfQogCiAgICAgbG93ZXJBZnRlclJlZ0FsbG9jKGNvZGUpOwogCkBAIC0xNjUsNyArMTcwLDcg
QEAgdm9pZCBnZW5lcmF0ZShDb2RlJiBjb2RlLCBDQ2FsbEhlbHBlcnMmIAogICAgICAgICBpZiAo
YmxvY2spCiAgICAgICAgICAgICBjb250ZXh0LmJsb2NrTGFiZWxzW2Jsb2NrXSA9IEJveDxDQ2Fs
bEhlbHBlcnM6OkxhYmVsPjo6Y3JlYXRlKCk7CiAgICAgfQotICAgIEluZGV4TWFwPEJhc2ljQmxv
Y2ssIENDYWxsSGVscGVyczo6SnVtcExpc3Q+IGJsb2NrSnVtcHMoY29kZS5zaXplKCkpOworICAg
IEluZGV4TWFwPEJhc2ljQmxvY2sqLCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0PiBibG9ja0p1bXBz
KGNvZGUuc2l6ZSgpKTsKIAogICAgIGF1dG8gbGluayA9IFsmXSAoQ0NhbGxIZWxwZXJzOjpKdW1w
IGp1bXAsIEJhc2ljQmxvY2sqIHRhcmdldCkgewogICAgICAgICBpZiAoY29udGV4dC5ibG9ja0xh
YmVsc1t0YXJnZXRdLT5pc1NldCgpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckdlbmVyYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJHZW5lcmF0ZS5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw2ICsyNyw4
IEBACiAKICNpZiBFTkFCTEUoQjNfSklUKQogCisjaW5jbHVkZSAiQjNDb21tb24uaCIKKwogbmFt
ZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENDYWxsSGVscGVyczsKQEAgLTM3LDcgKzM5LDcgQEAgY2xh
c3MgQ29kZTsKIAogLy8gVGhpcyB0YWtlcyBhbiBBaXI6OkNvZGUgdGhhdCBoYXNuJ3QgaGFkIGFu
eSBzdGFjayBhbGxvY2F0aW9uIGFuZCBvcHRpb25hbGx5IGhhc24ndCBoYWQgYW55CiAvLyByZWdp
c3RlciBhbGxvY2F0aW9uIGFuZCBkb2VzIGJvdGggb2YgdGhvc2UgdGhpbmdzLgotSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBwcmVwYXJlRm9yR2VuZXJhdGlvbihDb2RlJik7CitKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIHByZXBhcmVGb3JHZW5lcmF0aW9uKENvZGUmLCB1bnNpZ25lZCBvcHRMZXZlbCA9
IGRlZmF1bHRPcHRMZXZlbCgpKTsKIAogLy8gVGhpcyBnZW5lcmF0ZXMgdGhlIGNvZGUgdXNpbmcg
dGhlIGdpdmVuIENDYWxsSGVscGVycyBpbnN0YW5jZS4gTm90ZSB0aGF0IHRoaXMgbWF5IGNhbGwg
Y2FsbGJhY2tzCiAvLyBpbiB0aGUgc3VwcGxpZWQgY29kZSBhcyBpdCBpcyBnZW5lcmF0aW5nLgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0aW9uQ29udGV4dC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGlv
bkNvbnRleHQuaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJHZW5lcmF0aW9uQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3
IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIFNoYXJlZFRhc2s8TGF0ZVBhdGhGdW5jdGlvbj4gTGF0
ZVBhdGg7CiAKICAgICBWZWN0b3I8UmVmUHRyPExhdGVQYXRoPj4gbGF0ZVBhdGhzOwotICAgIElu
ZGV4TWFwPEJhc2ljQmxvY2ssIEJveDxDQ2FsbEhlbHBlcnM6OkxhYmVsPj4gYmxvY2tMYWJlbHM7
CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jayosIEJveDxDQ2FsbEhlbHBlcnM6OkxhYmVsPj4gYmxv
Y2tMYWJlbHM7CiAgICAgQmFzaWNCbG9jayogY3VycmVudEJsb2NrIHsgbnVsbHB0ciB9OwogICAg
IHVuc2lnbmVkIGluZGV4SW5CbG9jayB7IFVJTlRfTUFYIH07CiAgICAgQ29kZSogY29kZSB7IG51
bGxwdHIgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJBZnRl
clJlZ0FsbG9jLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTUsNiArNTUsMTEgQEAgdm9pZCBsb3dlckFmdGVyUmVnQWxsb2MoQ29kZSYgY29k
ZSkKIAogICAgIGlmICh2ZXJib3NlKQogICAgICAgICBkYXRhTG9nKCJDb2RlIGJlZm9yZSBsb3dl
ckFmdGVyUmVnQWxsb2M6XG4iLCBjb2RlKTsKKyAgICAKKyAgICAvLyBGSVhNRToKKyAgICAvLyAx
KSBUaGlzIHNob3VsZCBiYWlsIGVhcmx5IGlmIHRoZXJlIGFyZSBubyBTaHVmZmxlcyBvciBDb2xk
Q0NhbGxzLiAoT09QUyEhIG5lZWQgYnVnIHVybCkKKyAgICAvLyAyKSBXZSBzaG91bGQgbm90IGlu
dHJvZHVjZSBTaHVmZmxlcyBmb3Igbm9ybWFsIGNhbGxzLiAoT09QUyEhIG5lZWQgYnVnIHVybCkK
KyAgICAvLyAzKSBXZSBzaG91bGQgZW1pdCBDb2xkQ0NhbGwgb25seSBhdCBvcHRMZXZlbD09MS4g
KE9PUFMhISBuZWVkIGJ1ZyB1cmwpCiAKICAgICBIYXNoTWFwPEluc3QqLCBSZWdpc3RlclNldD4g
dXNlZFJlZ2lzdGVyczsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJM
b3dlckVudHJ5U3dpdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpckxvd2VyRW50cnlTd2l0Y2guY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyRW50cnlTd2l0Y2guY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIHZvaWQgbG93ZXJFbnRyeVN3aXRjaChDb2RlJiBjb2Rl
KQogICAgIC8vIE5vdyBkdXBsaWNhdGUgdGhlbS4KICAgICBWZWN0b3I8RnJlcXVlbnRlZEJsb2Nr
PiBlbnRyeXBvaW50czsKICAgICBlbnRyeXBvaW50cy5hcHBlbmQoRnJlcXVlbnRlZEJsb2NrKGNv
ZGVbMF0sIGVudHJ5cG9pbnRGcmVxdWVuY2llc1swXSkpOwotICAgIEluZGV4TWFwPEJhc2ljQmxv
Y2ssIEJhc2ljQmxvY2sqPiBtYXAoY29kZS5zaXplKCkpOworICAgIEluZGV4TWFwPEJhc2ljQmxv
Y2sqLCBCYXNpY0Jsb2NrKj4gbWFwKGNvZGUuc2l6ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGVu
dHJ5cG9pbnRJbmRleCA9IDE7IGVudHJ5cG9pbnRJbmRleCA8IGNvZGUucHJvYygpLm51bUVudHJ5
cG9pbnRzKCk7ICsrZW50cnlwb2ludEluZGV4KSB7CiAgICAgICAgIG1hcC5jbGVhcigpOwogICAg
ICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogd29ya2xpc3Quc2VlbigpLnZhbHVlcyhjb2Rl
KSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bj
b2RlcwkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJPcGNvZGUub3Bjb2Rlcwkod29ya2luZyBjb3B5KQpAQCAtNjQ5LDcgKzY0OSw3IEBAIE1vdmUz
MiBVOkc6MzIsIFpEOkc6MzIKIE1vdmUzMiBVOkc6MzIsIFpEOkc6MzIsIFM6RzozMgogICAgIEFk
ZHIsIEFkZHIsIFRtcAogCi1TdG9yZVplcm8zMiBVOkc6MzIKK1N0b3JlWmVybzMyIEQ6RzozMgog
ICAgIEFkZHIKICAgICBJbmRleAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpclJlZ0xpdmVuZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJSZWdMaXZlbmVzcy5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclJlZ0xpdmVuZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYg
KzMwLDcgQEAKICNpbmNsdWRlICJBaXJCYXNpY0Jsb2NrLmgiCiAjaW5jbHVkZSAiQWlyQ29kZS5o
IgogI2luY2x1ZGUgIkFpckluc3QuaCIKKyNpbmNsdWRlICJBaXJMaXZlbmVzcy5oIgogI2luY2x1
ZGUgIlJlZ2lzdGVyU2V0LmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1l
c3BhY2UgQWlyIHsKQEAgLTU0LDYgKzU1LDE5IEBAIHB1YmxpYzoKICAgICAgICAgewogICAgICAg
ICB9CiAgICAgICAgIAorICAgICAgICAvLyBJZiB5b3UgY29tcHV0ZWQgVG1wIGxpdmVuZXNzIGZv
ciBzb21lIGJhbmssIHlvdSBjYW4gdXNlIHJlZyBsaXZlbmVzcyB0byBmaWxsIGluIHRoZSBibGFu
a3MuCisgICAgICAgIC8vIE5vdGUgdGhhdCB3aGF0IGhhcHBlbnMgdG8gdGhlIHJlZ2lzdGVycyBu
b3QgYmVsb25naW5nIHRvIHRoZSBiYW5rIGlzIGFyYml0cmFyeSAtIHRoZXkgbWF5IGdldAorICAg
ICAgICAvLyBzZXQgb3Igbm90LgorICAgICAgICB0ZW1wbGF0ZTxCYW5rIGJhbms+CisgICAgICAg
IExvY2FsQ2FsYyhUbXBMaXZlbmVzczxiYW5rPiYgbGl2ZW5lc3MsIEJhc2ljQmxvY2sqIGJsb2Nr
KQorICAgICAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgICAgICB7CisgICAgICAgICAgICBm
b3IgKFRtcCB0bXAgOiBsaXZlbmVzcy5saXZlQXRUYWlsKGJsb2NrKSkgeworICAgICAgICAgICAg
ICAgIGlmICh0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgbV93b3Jrc2V0LnNldCh0
bXAucmVnKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAogICAgICAgICBj
b25zdCBSZWdpc3RlclNldCYgbGl2ZSgpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIHJl
dHVybiBtX3dvcmtzZXQ7CkBAIC04NCw4ICs5OCw4IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiBw
cml2YXRlOgotICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIFJlZ2lzdGVyU2V0PiBtX2xpdmVBdEhl
YWQ7Ci0gICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgUmVnaXN0ZXJTZXQ+IG1fbGl2ZUF0VGFpbDsK
KyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgUmVnaXN0ZXJTZXQ+IG1fbGl2ZUF0SGVhZDsKKyAg
ICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgUmVnaXN0ZXJTZXQ+IG1fbGl2ZUF0VGFpbDsKIH07CiAK
IH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAJKHJldmlzaW9uIDIx
NDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5n
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQWlyQXJn
SW5saW5lcy5oIgogI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJGaXhTcGlsbHNB
ZnRlclRlcm1pbmFscy5oIgogI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgogI2luY2x1ZGUg
IkFpckluc3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQWlyTGl2ZW5lc3MuaCIKQEAgLTQ2LDcgKzQ3
LDcgQEAgdm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYgY29kZSkKICAgICBwYWRJbnRlcmZlcmVu
Y2UoY29kZSk7CiAKICAgICAvLyBXZSB3YW50IHRvIGtub3cgdGhlIHNldCBvZiByZWdpc3RlcnMg
dXNlZCBhdCBldmVyeSBwb2ludCBpbiBldmVyeSBiYXNpYyBibG9jay4KLSAgICBJbmRleE1hcDxC
YXNpY0Jsb2NrLCBWZWN0b3I8UmVnaXN0ZXJTZXQ+PiB1c2VkUmVnaXN0ZXJzKGNvZGUuc2l6ZSgp
KTsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgVmVjdG9yPFJlZ2lzdGVyU2V0Pj4gdXNlZFJl
Z2lzdGVycyhjb2RlLnNpemUoKSk7CiAgICAgR1BMaXZlbmVzcyBncExpdmVuZXNzKGNvZGUpOwog
ICAgIEZQTGl2ZW5lc3MgZnBMaXZlbmVzcyhjb2RlKTsKICAgICBmb3IgKEJhc2ljQmxvY2sqIGJs
b2NrIDogY29kZSkgewpAQCAtMTczLDEwICsxNzQsMTMgQEAgdm9pZCBzcGlsbEV2ZXJ5dGhpbmco
Q29kZSYgY29kZSkKICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2hvc2VuUmVn
KTsKIAogICAgICAgICAgICAgICAgICAgICB0bXAgPSBUbXAoY2hvc2VuUmVnKTsKKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChyb2xlID09IEFyZzo6U2NyYXRj
aCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAgICAgICAg
ICBPcGNvZGUgbW92ZSA9IGJhbmsgPT0gR1AgPyBNb3ZlIDogTW92ZURvdWJsZTsKIAotICAgICAg
ICAgICAgICAgICAgICBpZiAoQXJnOjppc0FueVVzZShyb2xlKSAmJiByb2xlICE9IEFyZzo6U2Ny
YXRjaCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlVc2Uocm9sZSkpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KGluc3RJbmRleCwgbW92ZSwg
aW5zdC5vcmlnaW4sIGFyZywgdG1wKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNB
bnlEZWYocm9sZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0
KGluc3RJbmRleCArIDEsIG1vdmUsIGluc3Qub3JpZ2luLCB0bXAsIGFyZyk7CkBAIC0xODQsNiAr
MTg4LDggQEAgdm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYgY29kZSkKICAgICAgICAgfQogICAg
ICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CiAgICAgfQorICAgIAorICAgIGZpeFNw
aWxsc0FmdGVyVGVybWluYWxzKGNvZGUpOwogfQogCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
Mzo6QWlyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuY3BwCShyZXZp
c2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjgsOCArMjgsMTUgQEAKIAogI2lmIEVOQUJMRShCM19KSVQpCiAKKyNp
bmNsdWRlICJBaXJUbXBJbmxpbmVzLmgiCisKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eyBuYW1lc3BhY2UgQWlyIHsKIAordGVtcGxhdGU8PiBjb25zdCBjaGFyKiBjb25zdCBUbXA6Oklu
ZGV4ZWQ8R1A+OjpkdW1wUHJlZml4ID0gIiV0bXAiOwordGVtcGxhdGU8PiBjb25zdCBjaGFyKiBj
b25zdCBUbXA6OkluZGV4ZWQ8RlA+OjpkdW1wUHJlZml4ID0gIiVmdG1wIjsKK3RlbXBsYXRlPD4g
Y29uc3QgY2hhciogY29uc3QgVG1wOjpBYnNvbHV0ZWx5SW5kZXhlZDxHUD46OmR1bXBQcmVmaXgg
PSAiJWFicyI7Cit0ZW1wbGF0ZTw+IGNvbnN0IGNoYXIqIGNvbnN0IFRtcDo6QWJzb2x1dGVseUlu
ZGV4ZWQ8RlA+OjpkdW1wUHJlZml4ID0gIiVmYWJzIjsKKwogdm9pZCBUbXA6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBpZiAoISp0aGlzKSB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyVG1wLmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzQsNiArNzQsMTQgQEAg
cHVibGljOgogICAgICAgICByZXN1bHQubV92YWx1ZSA9IGVuY29kZUZQVG1wKGluZGV4KTsKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CisgICAgCisgICAgc3RhdGljIFRtcCB0bXBGb3JJ
bmRleChCYW5rIGJhbmssIHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgaWYgKGJhbmsg
PT0gR1ApCisgICAgICAgICAgICByZXR1cm4gZ3BUbXBGb3JJbmRleChpbmRleCk7CisgICAgICAg
IEFTU0VSVChiYW5rID09IEZQKTsKKyAgICAgICAgcmV0dXJuIGZwVG1wRm9ySW5kZXgoaW5kZXgp
OworICAgIH0KIAogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAh
IW1fdmFsdWU7IH0KICAgICAKQEAgLTE1NCw3ICsxNjIsMTYgQEAgcHVibGljOgogICAgICAgICAg
ICAgcmV0dXJuIGdwVG1wSW5kZXgoKTsKICAgICAgICAgcmV0dXJuIGZwVG1wSW5kZXgoKTsKICAg
ICB9Ci0KKyAgICAKKyAgICB0ZW1wbGF0ZTxCYW5rIGJhbms+IGNsYXNzIEluZGV4ZWQ7CisgICAg
dGVtcGxhdGU8QmFuayBiYW5rPiBjbGFzcyBBYnNvbHV0ZWx5SW5kZXhlZDsKKyAgICAKKyAgICB0
ZW1wbGF0ZTxCYW5rIGJhbms+CisgICAgSW5kZXhlZDxiYW5rPiBpbmRleGVkKCkgY29uc3Q7Cisg
ICAgCisgICAgdGVtcGxhdGU8QmFuayBiYW5rPgorICAgIEFic29sdXRlbHlJbmRleGVkPGJhbms+
IGFic29sdXRlbHlJbmRleGVkKCkgY29uc3Q7CisgICAgCiAgICAgYm9vbCBpc0FsaXZlKCkgY29u
c3QKICAgICB7CiAgICAgICAgIHJldHVybiAhISp0aGlzOwpAQCAtMTk1LDYgKzIxMiw4IEBAIHB1
YmxpYzoKICAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KGluZGV4KTsK
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CisgICAgCisgICAgc3RhdGljIFRtcCB0bXBG
b3JBYnNvbHV0ZUluZGV4KEJhbmssIHVuc2lnbmVkKTsKIAogcHJpdmF0ZToKICAgICBzdGF0aWMg
aW50IGVuY29kZUdQKHVuc2lnbmVkIGluZGV4KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJUbXBJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJUbXBJbmxpbmVzLmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC05
Miw2ICs5Miw1OCBAQCBzdHJ1Y3QgQWJzb2x1dGVUbXBNYXBwZXI8RlA+IHsKICAgICB9CiB9Owog
Cit0ZW1wbGF0ZTxCYW5rIHRoZUJhbms+CitjbGFzcyBUbXA6OkluZGV4ZWQgOiBwdWJsaWMgVG1w
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZHVtcFByZWZpeDsKKyAg
ICAKKyAgICBJbmRleGVkKFRtcCB0bXApCisgICAgICAgIDogVG1wKHRtcCkKKyAgICB7CisgICAg
fQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biB0bXBJbmRleCh0aGVCYW5rKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTxCYW5rIHRoZUJhbms+
CitjbGFzcyBUbXA6OkFic29sdXRlbHlJbmRleGVkIDogcHVibGljIFRtcCB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGR1bXBQcmVmaXg7CisKKyAgICBBYnNvbHV0ZWx5
SW5kZXhlZChUbXAgdG1wKQorICAgICAgICA6IFRtcCh0bXApCisgICAgeworICAgIH0KKyAgICAK
KyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gQWJzb2x1
dGVUbXBNYXBwZXI8dGhlQmFuaz46OmFic29sdXRlSW5kZXgoKnRoaXMpOworICAgIH0KK307CisK
K3RlbXBsYXRlPEJhbmsgdGhlQmFuaz4KK1RtcDo6SW5kZXhlZDx0aGVCYW5rPiBUbXA6OmluZGV4
ZWQoKSBjb25zdAoreworICAgIHJldHVybiBJbmRleGVkPHRoZUJhbms+KCp0aGlzKTsKK30KKwor
dGVtcGxhdGU8QmFuayB0aGVCYW5rPgorVG1wOjpBYnNvbHV0ZWx5SW5kZXhlZDx0aGVCYW5rPiBU
bXA6OmFic29sdXRlbHlJbmRleGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gQWJzb2x1dGVseUlu
ZGV4ZWQ8dGhlQmFuaz4oKnRoaXMpOworfQorCitUbXAgVG1wOjp0bXBGb3JBYnNvbHV0ZUluZGV4
KEJhbmsgYmFuaywgdW5zaWduZWQgaW5kZXgpCit7CisgICAgaWYgKGJhbmsgPT0gR1ApCisgICAg
ICAgIHJldHVybiBBYnNvbHV0ZVRtcE1hcHBlcjxHUD46OnRtcEZyb21BYnNvbHV0ZUluZGV4KGlu
ZGV4KTsKKyAgICBBU1NFUlQoYmFuayA9PSBGUCk7CisgICAgcmV0dXJuIEFic29sdXRlVG1wTWFw
cGVyPEZQPjo6dG1wRnJvbUFic29sdXRlSW5kZXgoaW5kZXgpOworfQorCiB9IH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMzo6QWlyCiAKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAkocmV2aXNpb24gMjE0NDI3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDIsOCArMTAyLDE2IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgLy8gQWxzbyBhbGxv
dyBhZGQvcmVtb3ZlL2NvbnRhaW5zIHRlcm1pbm9sb2d5LCB3aGljaCBtZWFucyB0aGUgc2FtZSB0
aGluZyBhcyBzZXQvY2xlYXIvZ2V0LgotICAgIHZvaWQgYWRkKFJlZyByZWcpIHsgc2V0KHJlZyk7
IH0KLSAgICB2b2lkIHJlbW92ZShSZWcgcmVnKSB7IGNsZWFyKHJlZyk7IH0KKyAgICBib29sIGFk
ZChSZWcgcmVnKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCEhcmVnKTsKKyAgICAgICAgcmV0dXJu
ICFtX2JpdHMudGVzdEFuZFNldChyZWcuaW5kZXgoKSk7CisgICAgfQorICAgIGJvb2wgcmVtb3Zl
KFJlZyByZWcpCisgICAgeworICAgICAgICBBU1NFUlQoISFyZWcpOworICAgICAgICByZXR1cm4g
bV9iaXRzLnRlc3RBbmRDbGVhcihyZWcuaW5kZXgoKSk7CisgICAgfQogICAgIGJvb2wgY29udGFp
bnMoUmVnIHJlZykgY29uc3QgeyByZXR1cm4gZ2V0KHJlZyk7IH0KICAgICAKICAgICB2b2lkIG1l
cmdlKGNvbnN0IFJlZ2lzdGVyU2V0JiBvdGhlcikgeyBtX2JpdHMubWVyZ2Uob3RoZXIubV9iaXRz
KTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNp
b24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMjUsNiArMjI1LDcgQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRp
b25TdHJpbmc7CiAgICAgdihib29sLCB1c2VGVExKSVQsIHRydWUsIE5vcm1hbCwgImFsbG93cyB0
aGUgRlRMIEpJVCB0byBiZSB1c2VkIGlmIHRydWUiKSBcCiAgICAgdihib29sLCB1c2VGVExUQkFB
LCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIHZhbGlkYXRlRlRMT1NSRXhp
dExpdmVuZXNzLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdih1bnNpZ25lZCwgZGVm
YXVsdEIzT3B0TGV2ZWwsIDIsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgYjNBbHdh
eXNGYWlsc0JlZm9yZUNvbXBpbGUsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJv
b2wsIGIzQWx3YXlzRmFpbHNCZWZvcmVMaW5rLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAg
ICAgdihib29sLCBmdGxDcmFzaGVzLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSAvKiBmb29sLXBy
b29mIHdheSBvZiBjaGVja2luZyB0aGF0IHlvdSBlbmRlZCB1cCBpbiB0aGUgRlRMLiA7LSkgKi9c
CkBAIC0zOTcsNiArMzk4LDggQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAg
ICAgdihib29sLCBsb2dCM1BoYXNlVGltZXMsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAg
ICB2KGRvdWJsZSwgcmFyZUJsb2NrUGVuYWx0eSwgMC4wMDEsIE5vcm1hbCwgbnVsbHB0cikgXAog
ICAgIHYoYm9vbCwgYWlyU3BpbGxzRXZlcnl0aGluZywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikg
XAorICAgIHYoYm9vbCwgYWlyTGluZWFyU2NhblZlcmJvc2UsIGZhbHNlLCBOb3JtYWwsIG51bGxw
dHIpIFwKKyAgICB2KGJvb2wsIGFpckxpbmVhclNjYW5TcGlsbHNFdmVyeXRoaW5nLCBmYWxzZSwg
Tm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCBhaXJGb3JjZUJyaWdnc0FsbG9jYXRvciwg
ZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgYWlyRm9yY2VJUkNBbGxvY2F0
b3IsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGNvYWxlc2NlU3BpbGxT
bG90cywgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjcsNiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCisjaW5jbHVkZSAi
QjNDb21tb24uaCIKICNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCiAjaW5jbHVkZSAiQ0NhbGxI
ZWxwZXJzLmgiCiAjaW5jbHVkZSAiVk0uaCIKQEAgLTQ3LDcgKzQ4LDcgQEAgc3RydWN0IENvbXBp
bGF0aW9uQ29udGV4dCB7CiAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGpzRW50cnlwb2ludFRvV2Fz
bUVudHJ5cG9pbnRDYWxsOwogfTsKIAotRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPFdhc21JbnRl
cm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoVk0mLCBDb21waWxhdGlvbkNv
bnRleHQmLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBTaWduYXR1cmUqLCBWZWN0b3I8
VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIGNvbnN0
IFZlY3RvcjxTaWduYXR1cmVJbmRleD4mLCB1bnNpZ25lZCBvcHRMZXZlbCA9IDEpOworRXhwZWN0
ZWQ8c3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFu
ZENvbXBpbGUoVk0mLCBDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90
LCBjb25zdCBTaWduYXR1cmUqLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25z
dCBNb2R1bGVJbmZvcm1hdGlvbiYsIGNvbnN0IFZlY3RvcjxTaWduYXR1cmVJbmRleD4mLCB1bnNp
Z25lZCBvcHRMZXZlbCA9IEIzOjpkZWZhdWx0T3B0TGV2ZWwoKSk7CiAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpXYXNtCiAKSW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsOCBAQAogLyogQmVnaW4gUEJY
QnVpbGRGaWxlIHNlY3Rpb24gKi8KIAkJMEYwRDg1QjQxNzIzNENDMTAwMzM4MjEwIC8qIE5vTG9j
ay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwRDg1
QjMxNzIzNENCMTAwMzM4MjEwIC8qIE5vTG9jay5oICovOyB9OwogCQkwRjBGQ0RERTFERDE2N0Y5
MDBDQ0FCNTMgLyogTG9ja0FsZ29yaXRobS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYwRkNEREQxREQxNjdGOTAwQ0NBQjUzIC8qIExvY2tBbGdvcml0
aG0uaCAqLzsgfTsKKwkJMEYyQUM1NjExRTg5RjcwQzAwMDFFRTNGIC8qIFJhbmdlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJBQzU2MDFFODlGNzBD
MDAwMUVFM0YgLyogUmFuZ2UuaCAqLzsgfTsKKwkJMEYyQUM1NjMxRThBMDE0OTAwMDFFRTNGIC8q
IEluZGV4S2V5VHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyQUM1NjIxRThBMDE0OTAwMDFFRTNGIC8qIEluZGV4S2V5VHlwZS5oICovOyB9Owog
CQkwRjJCNjZBNjE3QjZCNEZCMDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE0MTdCNkI0
RjcwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5oICovOyB9OwogCQkwRjJCNjZBNzE3
QjZCNEZEMDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBNTE3QjZCNEY3MDBBN0FFM0YgLyogRmxpcEJ5dGVz
LmggKi87IH07CiAJCTBGMzBCQTkwMUU3ODcwOEUwMDJDQTg0NyAvKiBHbG9iYWxWZXJzaW9uLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzBCQThB
MUU3ODcwOEUwMDJDQTg0NyAvKiBHbG9iYWxWZXJzaW9uLmNwcCAqLzsgfTsKQEAgLTQwOCw2ICs0
MTAsOCBAQAogLyogQmVnaW4gUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCiAJCTBGMEQ4NUIz
MTcyMzRDQjEwMDMzODIxMCAvKiBOb0xvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm9Mb2NrLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMEZDREREMUREMTY3RjkwMENDQUI1MyAvKiBM
b2NrQWxnb3JpdGhtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvY2tBbGdv
cml0aG0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQUM1NjAxRTg5RjcwQzAw
MDFFRTNGIC8qIFJhbmdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJhbmdl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkFDNTYyMUU4QTAxNDkwMDAxRUUz
RiAvKiBJbmRleEtleVR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5k
ZXhLZXlUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkE0MTdCNkI0
RjcwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZWZl
cnJhYmxlUmVmQ291bnRlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCNjZB
NTE3QjZCNEY3MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZsaXBCeXRl
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjMwMEI3RDE4QUI0OEI0MDBBNkQ3
MkUgLyogSGFzaE1ldGhvZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIYXNoTWV0aG9kLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDE4LDEwICsxMDIyLDExIEBACiAJCQkJQThBNDcyQkEx
NTFBODI1QTAwNDEyM0ZGIC8qIEhhc2hUcmFpdHMuaCAqLywKIAkJCQlBOEE0NzJCQjE1MUE4MjVB
MDA0MTIzRkYgLyogSGV4TnVtYmVyLmggKi8sCiAJCQkJRkU4OTI1QUYxRDAwREFFQzAwNDY5MDdF
IC8qIEluZGVudGVyLmggKi8sCi0JCQkJOUM2N0M1NDI1ODkzNDhFMjg1QjQ5Njk5IC8qIEluZGV4
ZWRDb250YWluZXJJdGVyYXRvci5oICovLAorCQkJCTBGMkFDNTYyMUU4QTAxNDkwMDAxRUUzRiAv
KiBJbmRleEtleVR5cGUuaCAqLywKIAkJCQk1QjQzMzgzQTVEMEI0NjNDOTQzM0Q5MzMgLyogSW5k
ZXhNYXAuaCAqLywKIAkJCQkzMTM3RTFEN0RCRDg0QUMzOEZBRTREMzQgLyogSW5kZXhTZXQuaCAq
LywKIAkJCQkyNjg0RDQzNTFDMDAwRDQwMDA4MUQ2NjMgLyogSW5kZXhTcGFyc2VTZXQuaCAqLywK
KwkJCQk5QzY3QzU0MjU4OTM0OEUyODVCNDk2OTkgLyogSW5kZXhlZENvbnRhaW5lckl0ZXJhdG9y
LmggKi8sCiAJCQkJQThBNDcyQkMxNTFBODI1QTAwNDEyM0ZGIC8qIElubGluZUFTTS5oICovLAog
CQkJCUE3MERBMDgyMTc5OUYwNEQwMDUyOUE5QiAvKiBJbnNlcnRpb24uaCAqLywKIAkJCQk3Q0RE
N0ZGNzE4NkQyOTFFMDA3NDMzQ0QgLyogSXRlcmF0b3JBZGFwdG9ycy5oICovLApAQCAtMTEwMCw2
ICsxMTA1LDcgQEAKIAkJCQlBOEE0NzJGQjE1MUE4MjVCMDA0MTIzRkYgLyogUmFuZG9tTnVtYmVy
LmNwcCAqLywKIAkJCQlBOEE0NzJGQzE1MUE4MjVCMDA0MTIzRkYgLyogUmFuZG9tTnVtYmVyLmgg
Ki8sCiAJCQkJQThBNDcyRkQxNTFBODI1QjAwNDEyM0ZGIC8qIFJhbmRvbU51bWJlclNlZWQuaCAq
LywKKwkJCQkwRjJBQzU2MDFFODlGNzBDMDAwMUVFM0YgLyogUmFuZ2UuaCAqLywKIAkJCQkwRjcy
NUNBQjFDNTA0NjE2MDBBRDk0M0EgLyogUmFuZ2VTZXQuaCAqLywKIAkJCQkwRjg3MTA1OTE2NjQz
RjE5MDA5MEIwQUQgLyogUmF3UG9pbnRlci5oICovLAogCQkJCTBGREU4N0Y2MURGRDA3Q0MwMDY0
QzM5MCAvKiBSZWN1cnNpdmVMb2NrQWRhcHRlci5oICovLApAQCAtMTQ4NSw2ICsxNDkxLDcgQEAK
IAkJCQlDOTE2Qjk3NUYwMkY0RjdFOEI0QUIxMkQgLyogSW5kZXhNYXAuaCBpbiBIZWFkZXJzICov
LAogCQkJCUM4QjBFMUExRTAxQTQ4NkVCOTVFMEQxMSAvKiBJbmRleFNldC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMjY4NEQ0MzYxQzAwMEQ0MDAwODFENjYzIC8qIEluZGV4U3BhcnNlU2V0LmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRjJBQzU2MzFFOEEwMTQ5MDAwMUVFM0YgLyogSW5kZXhLZXlUeXBl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNEQzE1MUE4MjVCMDA0MTIzRkYgLyogSW5saW5l
QVNNLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzBEQTA4NDE3OTlGMDREMDA1MjlBOUIgLyogSW5z
ZXJ0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkyNjE0N0IwQTE1RERDQ0RDMDBEREI5MDcgLyog
SW50ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNTg2LDYgKzE1
OTMsNyBAQAogCQkJCTQzMEI0Nzg5MUFBQUFDMUEwMDEyMjNEQSAvKiBTdHJpbmdDb21tb24uaCBp
biBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDNFMTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdDb25j
YXRlbmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0NENEMyNzAxRTJDODJCOTAwOTI5NDcwIC8q
IFN0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQUM1NjEx
RTg5RjcwQzAwMDFFRTNGIC8qIFJhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQyQzE1
MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nRXh0cmFzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0
NzQzRjE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nSGFzaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTc0ODc0NTQxN0EwQkRBRTAwRkEwNENCIC8qIFN0cmluZ0hhc2hEdW1wQ29udGV4dC5oIGluIEhl
YWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjE0NDI3KQorKysg
U291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw2ICsx
MDAsNyBAQCBzZXQoV1RGX0hFQURFUlMKICAgICBSQU1TaXplLmgKICAgICBSYW5kb21OdW1iZXIu
aAogICAgIFJhbmRvbU51bWJlclNlZWQuaAorICAgIFJhbmdlLmgKICAgICBSYW5nZVNldC5oCiAg
ICAgUmF3UG9pbnRlci5oCiAgICAgUmVjdXJzaXZlTG9ja0FkYXB0ZXIuaApJbmRleDogU291cmNl
L1dURi93dGYvRGVxdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9EZXF1ZS5oCShy
ZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvV1RGL3d0Zi9EZXF1ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTg5
LDYgKzg5LDE5IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZUxhc3QoKTsKICAgICB2b2lkIHJl
bW92ZShpdGVyYXRvciYpOwogICAgIHZvaWQgcmVtb3ZlKGNvbnN0X2l0ZXJhdG9yJik7CisgICAg
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4gdm9pZCByZW1vdmVBbGxNYXRjaGluZyhjb25z
dCBGdW5jJik7CisgICAgCisgICAgLy8gVGhpcyBpcyBhIHByaW9yaXR5IGVucXVldWUuIFRoZSBj
YWxsYmFjayBpcyBnaXZlbiBhIHZhbHVlLCBhbmQgaWYgaXQgcmV0dXJucyB0cnVlLCB0aGVuIHRo
aXMKKyAgICAvLyB3aWxsIHB1dCB0aGUgYXBwZW5kZWQgdmFsdWUgYmVmb3JlIHRoYXQgdmFsdWUu
IEl0IHdpbGwga2VlcCBidWJibGluZyB1bnRpbCB0aGUgY2FsbGJhY2sgcmV0dXJucworICAgIC8v
IGZhbHNlIG9yIHRoZSB2YWx1ZSBlbmRzIHVwIGF0IHRoZSBoZWFkIG9mIHRoZSBxdWV1ZS4KKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCB0eXBlbmFtZSBGdW5jPgorICAgIHZvaWQgYXBwZW5kQW5k
QnViYmxlKFUmJiwgY29uc3QgRnVuYyYpOworICAgIAorICAgIC8vIFJlbW92ZSBhbmQgcmV0dXJu
IHRoZSBsYXN0IGVsZW1lbnQgZm9yIHdoaWNoIHRoZSBjYWxsYmFjayByZXR1cm5zIHRydWUuIFJl
dHVybnMgYSBudWxsIHZlcnNpb24gb2YKKyAgICAvLyBUIGlmIGl0IHRoZSBjYWxsYmFjayBhbHdh
eXMgcmV0dXJucyBmYWxzZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIFQgdGFr
ZUxhc3QoY29uc3QgRnVuYyYpOwogCiAgICAgdm9pZCBjbGVhcigpOwogCkBAIC01MjQsNiArNTM3
LDU1IEBAIGlubGluZSB2b2lkIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6cmUKICAgICBjaGVj
a1ZhbGlkaXR5KCk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBh
Y2l0eT4KK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CitpbmxpbmUgdm9pZCBEZXF1ZTxULCBpbmxp
bmVDYXBhY2l0eT46OnJlbW92ZUFsbE1hdGNoaW5nKGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAg
c2l6ZV90IGNvdW50ID0gc2l6ZSgpOworICAgIHdoaWxlIChjb3VudC0tKSB7CisgICAgICAgIFQg
dmFsdWUgPSB0YWtlRmlyc3QoKTsKKyAgICAgICAgaWYgKCFmdW5jKHZhbHVlKSkKKyAgICAgICAg
ICAgIGFwcGVuZChXVEZNb3ZlKHZhbHVlKSk7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBGdW5jPgoraW5saW5lIHZvaWQgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+OjphcHBlbmRBbmRC
dWJibGUoVSYmIHZhbHVlLCBjb25zdCBGdW5jJiBmdW5jKQoreworICAgIGFwcGVuZChXVEZNb3Zl
KHZhbHVlKSk7CisgICAgaXRlcmF0b3IgYmVnaW4gPSB0aGlzLT5iZWdpbigpOworICAgIGl0ZXJh
dG9yIGl0ZXIgPSBlbmQoKTsKKyAgICAtLWl0ZXI7CisgICAgd2hpbGUgKGl0ZXIgIT0gYmVnaW4p
IHsKKyAgICAgICAgaXRlcmF0b3IgcHJldiA9IGl0ZXI7CisgICAgICAgIC0tcHJldjsKKyAgICAg
ICAgaWYgKCFmdW5jKCpwcmV2KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgc3RkOjpz
d2FwKCpwcmV2LCAqaXRlcik7CisgICAgICAgIGl0ZXIgPSBwcmV2OworICAgIH0KK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgordGVtcGxhdGU8dHlwZW5h
bWUgRnVuYz4KK2lubGluZSBUIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6dGFrZUxhc3QoY29u
c3QgRnVuYyYgZnVuYykKK3sKKyAgICB1bnNpZ25lZCBjb3VudCA9IDA7CisgICAgdW5zaWduZWQg
c2l6ZSA9IHRoaXMtPnNpemUoKTsKKyAgICB3aGlsZSAoY291bnQgPCBzaXplKSB7CisgICAgICAg
IFQgY2FuZGlkYXRlID0gdGFrZUxhc3QoKTsKKyAgICAgICAgaWYgKGZ1bmMoY2FuZGlkYXRlKSkg
eworICAgICAgICAgICAgd2hpbGUgKGNvdW50LS0pCisgICAgICAgICAgICAgICAgYXBwZW5kKHRh
a2VGaXJzdCgpKTsKKyAgICAgICAgICAgIHJldHVybiBjYW5kaWRhdGU7CisgICAgICAgIH0KKyAg
ICAgICAgY291bnQrKzsKKyAgICAgICAgcHJlcGVuZChXVEZNb3ZlKGNhbmRpZGF0ZSkpOworICAg
IH0KKyAgICByZXR1cm4gVCgpOworfQorCiAjaWZkZWYgTkRFQlVHCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+IGlubGluZSB2b2lkIERlcXVlSXRlcmF0b3JCYXNl
PFQsIGlubGluZUNhcGFjaXR5Pjo6Y2hlY2tWYWxpZGl0eSgpIGNvbnN0IHsgfQogdGVtcGxhdGU8
dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBpbmxpbmUgdm9pZCBEZXF1ZUl0ZXJh
dG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT46OmNoZWNrVmFsaWRpdHkoY29uc3QgRGVxdWVJdGVy
YXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+JikgY29uc3QgeyB9CkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9JbmRleEtleVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9JbmRleEtl
eVR5cGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9JbmRleEtleVR5cGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV1RGIHsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBJbmRleEtleVR5cGUgeworICAgIHN0YXRpYyBz
aXplX3QgaW5kZXgoY29uc3QgVCYga2V5KSB7IHJldHVybiBrZXkuaW5kZXgoKTsgfQorfTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBJbmRleEtleVR5cGU8VCo+IHsKKyAgICBzdGF0
aWMgc2l6ZV90IGluZGV4KFQqIGtleSkgeyByZXR1cm4ga2V5LT5pbmRleCgpOyB9Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNlL1dURi93dGYvSW5kZXhNYXAuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9JbmRleE1hcC5oCShyZXZpc2lvbiAyMTQ0MjcpCisr
KyBTb3VyY2UvV1RGL3d0Zi9JbmRleE1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3
IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSA8d3RmL0luZGV4S2V5VHlwZS5oPgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdURiB7CkBAIC03MCwxOCArNzEsMjQg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV92ZWN0b3JbaW5kZXhdOwogICAgIH0KICAgICAK
LSAgICBWYWx1ZSYgb3BlcmF0b3JbXShLZXkqIGtleSkKKyAgICBWYWx1ZSYgb3BlcmF0b3JbXShj
b25zdCBLZXkmIGtleSkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3ZlY3RvcltrZXktPmluZGV4
KCldOworICAgICAgICByZXR1cm4gbV92ZWN0b3JbSW5kZXhLZXlUeXBlPEtleT46OmluZGV4KGtl
eSldOwogICAgIH0KICAgICAKLSAgICBjb25zdCBWYWx1ZSYgb3BlcmF0b3JbXShLZXkqIGtleSkg
Y29uc3QKKyAgICBjb25zdCBWYWx1ZSYgb3BlcmF0b3JbXShjb25zdCBLZXkmIGtleSkgY29uc3QK
ICAgICB7Ci0gICAgICAgIHJldHVybiBtX3ZlY3RvcltrZXktPmluZGV4KCldOworICAgICAgICBy
ZXR1cm4gbV92ZWN0b3JbSW5kZXhLZXlUeXBlPEtleT46OmluZGV4KGtleSldOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGFwcGVuZChjb25zdCBLZXkmIGtleSwgVmFsdWUgdmFsdWUpCisgICAgewor
ICAgICAgICBSRUxFQVNFX0FTU0VSVChJbmRleEtleVR5cGU8S2V5Pjo6aW5kZXgoa2V5KSA9PSBt
X3ZlY3Rvci5zaXplKCkpOworICAgICAgICBtX3ZlY3Rvci5hcHBlbmQodmFsdWUpOwogICAgIH0K
IAogcHJpdmF0ZToKLSAgICBWZWN0b3I8VmFsdWU+IG1fdmVjdG9yOworICAgIFZlY3RvcjxWYWx1
ZSwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fdmVjdG9yOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV1RGCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9JbmRleFNldC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL0luZGV4U2V0LmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9XVEYv
d3RmL0luZGV4U2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNs
dWRlIDx3dGYvQml0VmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorI2lu
Y2x1ZGUgPHd0Zi9JbmRleEtleVR5cGUuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKQEAgLTQyLDMw
ICs0MywzMCBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIGJvb2wgYWRkKFQqIHZhbHVl
KQorICAgIGJvb2wgYWRkKGNvbnN0IFQmIHZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuICFt
X3NldC5zZXQodmFsdWUtPmluZGV4KCkpOworICAgICAgICByZXR1cm4gIW1fc2V0LnNldChJbmRl
eEtleVR5cGU8VD46OmluZGV4KHZhbHVlKSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgSXRlcmFibGU+CiAgICAgYm9vbCBhZGRBbGwoY29uc3QgSXRlcmFibGUmIGl0ZXJhYmxlKQog
ICAgIHsKICAgICAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgZm9yIChUKiB2YWx1
ZSA6IGl0ZXJhYmxlKQorICAgICAgICBmb3IgKGNvbnN0IFQmIHZhbHVlIDogaXRlcmFibGUpCiAg
ICAgICAgICAgICByZXN1bHQgfD0gYWRkKHZhbHVlKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICB9CiAKLSAgICBib29sIHJlbW92ZShUKiB2YWx1ZSkKKyAgICBib29sIHJlbW92ZShjb25z
dCBUJiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3NldC5jbGVhcih2YWx1ZS0+aW5k
ZXgoKSk7CisgICAgICAgIHJldHVybiBtX3NldC5jbGVhcihJbmRleEtleVR5cGU8VD46OmluZGV4
KHZhbHVlKSk7CiAgICAgfQogCi0gICAgYm9vbCBjb250YWlucyhUKiB2YWx1ZSkgY29uc3QKKyAg
ICBib29sIGNvbnRhaW5zKGNvbnN0IFQmIHZhbHVlKSBjb25zdAogICAgIHsKICAgICAgICAgaWYg
KCF2YWx1ZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIG1fc2V0
LmdldCh2YWx1ZS0+aW5kZXgoKSk7CisgICAgICAgIHJldHVybiBtX3NldC5nZXQoSW5kZXhLZXlU
eXBlPFQ+OjppbmRleCh2YWx1ZSkpOwogICAgIH0KIAogICAgIHNpemVfdCBzaXplKCkgY29uc3QK
QEAgLTEwMCw3ICsxMDEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIFQqIG9wZXJhdG9yKigpCisgICAgICAgICAgICBUIG9wZXJhdG9yKigp
CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1fY29sbGVjdGlvbi0+YXQo
Km1faXRlcik7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9SYW5nZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1JhbmdlLmgJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL1dURi93dGYvUmFuZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
KyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8vIE5v
dGUgdGhhdCB0aGUgJ2JlZ2luJyBpcyBpbmNsdXNpdmUsIHdoaWxlIHRoZSAnZW5kJyBpcyBleGNs
dXNpdmUuIFRoZXNlIHR3byByYW5nZXMgYXJlIG5vbi0KKy8vIG92ZXJsYXBwaW5nOgorLy8KKy8v
ICAgICByYW5nZUEgPSAwLi4uOAorLy8gICAgIHJhbmdlQiA9IDguLi4xNgorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBQYXNzZWRUeXBlPgorY2xhc3MgUmFuZ2UgeworcHVibGljOgorICAgIHR5cGVkZWYg
UGFzc2VkVHlwZSBUeXBlOworICAgIAorICAgIFJhbmdlKCkKKyAgICAgICAgOiBtX2JlZ2luKDAp
CisgICAgICAgICwgbV9lbmQoMCkKKyAgICB7CisgICAgfQorCisgICAgZXhwbGljaXQgUmFuZ2Uo
VHlwZSB2YWx1ZSkKKyAgICAgICAgOiBtX2JlZ2luKHZhbHVlKQorICAgICAgICAsIG1fZW5kKHZh
bHVlICsgMSkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2VuZCA+PSBtX2JlZ2luKTsKKyAgICB9
CisKKyAgICBSYW5nZShUeXBlIGJlZ2luLCBUeXBlIGVuZCkKKyAgICAgICAgOiBtX2JlZ2luKGJl
Z2luKQorICAgICAgICAsIG1fZW5kKGVuZCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2VuZCA+
PSBtX2JlZ2luKTsKKyAgICAgICAgaWYgKG1fYmVnaW4gPT0gbV9lbmQpIHsKKyAgICAgICAgICAg
IC8vIENhbm9uaWNhbGl6ZSBlbXB0eSByYW5nZXMuCisgICAgICAgICAgICBtX2JlZ2luID0gMDsK
KyAgICAgICAgICAgIG1fZW5kID0gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBS
YW5nZSB0b3AoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFJhbmdlKHN0ZDo6bnVtZXJpY19saW1p
dHM8VHlwZT46Om1pbigpLCBzdGQ6Om51bWVyaWNfbGltaXRzPFR5cGU+OjptYXgoKSk7CisgICAg
fQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJhbmdlJiBvdGhlcikgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX2JlZ2luID09IG90aGVyLm1fYmVnaW4KKyAgICAgICAgICAgICYm
IG1fZW5kID09IG90aGVyLm1fZW5kOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBSYW5nZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBv
dGhlcik7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7
IHJldHVybiBtX2JlZ2luICE9IG1fZW5kOyB9CisKKyAgICBSYW5nZSBvcGVyYXRvcnwoY29uc3Qg
UmFuZ2UmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCEqdGhpcykKKyAgICAgICAg
ICAgIHJldHVybiBvdGhlcjsKKyAgICAgICAgaWYgKCFvdGhlcikKKyAgICAgICAgICAgIHJldHVy
biAqdGhpczsKKyAgICAgICAgcmV0dXJuIFJhbmdlKAorICAgICAgICAgICAgc3RkOjptaW4obV9i
ZWdpbiwgb3RoZXIubV9iZWdpbiksCisgICAgICAgICAgICBzdGQ6Om1heChtX2VuZCwgb3RoZXIu
bV9lbmQpKTsKKyAgICB9CisgICAgCisgICAgUmFuZ2UmIG9wZXJhdG9yfD0oY29uc3QgUmFuZ2Um
IG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzID0gKnRoaXMgfCBvdGhlcjsKKyAg
ICB9CisgICAgCisgICAgVHlwZSBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fYmVnaW47IH0KKyAg
ICBUeXBlIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kOyB9CisKKyAgICBib29sIG92ZXJsYXBz
KGNvbnN0IFJhbmdlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OnJh
bmdlc092ZXJsYXAobV9iZWdpbiwgbV9lbmQsIG90aGVyLm1fYmVnaW4sIG90aGVyLm1fZW5kKTsK
KyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIGlmICgqdGhpcyA9PSBSYW5nZSgpKSB7CisgICAgICAgICAgICBvdXQucHJpbnQoIkJv
dHRvbSIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICgqdGhp
cyA9PSB0b3AoKSkgeworICAgICAgICAgICAgb3V0LnByaW50KCJUb3AiKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9iZWdpbiA9PSBtX2VuZCArIDEpIHsK
KyAgICAgICAgICAgIG91dC5wcmludChtX2JlZ2luKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICBvdXQucHJpbnQobV9iZWdpbiwgIi4uLiIsIG1fZW5kKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgVHlwZSBtX2JlZ2luOworICAgIFR5cGUgbV9lbmQ7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpSYW5nZTsKKwpJbmRleDogU291cmNlL1dU
Ri93dGYvUmFuZ2VTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9SYW5nZVNldC5o
CShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvV1RGL3d0Zi9SYW5nZVNldC5oCSh3b3JraW5n
IGNvcHkpCkBAIC03Nyw2ICs3NywxMCBAQCBwdWJsaWM6CiAgICAgICAgIG1faXNDb21wYWN0ID0g
ZmFsc2U7CiAKICAgICAgICAgLy8gV2UgYXBwZW5kIHdpdGhvdXQgY29tcGFjdGluZyBvbmx5IGlm
IGRvaW5nIHNvIGlzIGd1YXJhbnRlZWQgbm90IHRvIHJlc2l6ZSB0aGUgdmVjdG9yLgorICAgICAg
ICAvLyBGSVhNRTogVGhpcyBoZXVyaXN0aWMgaXMgYWxtb3N0IGNlcnRhaW5seSB3cm9uZywgYmVj
YXVzZSB3ZSBkb24ndCBjb250cm9sIHRoZSBjYXBhY2l0eS4gSQorICAgICAgICAvLyB0aGluayB0
aGF0IHRoaXMgbWVhbnMgdGhhdCB3ZSB3aWxsIHNvbWV0aW1lcyBiZSByYWdlLWNvbXBhY3Rpbmcg
d2hlbiB3ZSBhcmUganVzdCBzaHkgb2YgdGhlCisgICAgICAgIC8vIGNhcGFjaXR5LgorICAgICAg
ICAvLyBPT1BTOiBuZWVkIGJ1ZyB1cmwKICAgICAgICAgaWYgKG1fcmFuZ2VzLnNpemUoKSArIDEg
PCBtX3Jhbmdlcy5jYXBhY2l0eSgpKSB7CiAgICAgICAgICAgICBtX3Jhbmdlcy5hcHBlbmQocmFu
Z2UpOwogICAgICAgICAgICAgcmV0dXJuOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305814</attachid>
            <date>2017-03-29 17:26:02 -0700</date>
            <delta_ts>2017-03-29 20:21:25 -0700</delta_ts>
            <desc>fixed another bug</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>115042</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIxNDQyNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMTQwLDcgKzE0MCw2IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYjMvQjNG
b2xkUGF0aENvbnN0YW50cy5jcHAKICAgICBiMy9CM0ZyZXF1ZW5jeUNsYXNzLmNwcAogICAgIGIz
L0IzR2VuZXJhdGUuY3BwCi0gICAgYjMvQjNIZWFwUmFuZ2UuY3BwCiAgICAgYjMvQjNJbmZlclN3
aXRjaGVzLmNwcAogICAgIGIzL0IzSW5zZXJ0aW9uU2V0LmNwcAogICAgIGIzL0IzS2luZC5jcHAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTgzLDYgKzE4MywxMCBAQAogCQkwRjI1RjFCMjE4MTYz
NUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1RjFBQjE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xv
d1BhdGhDYWxsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEYyNUYxQjMxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1RjFBQzE4
MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5LmNwcCAqLzsgfTsKIAkJMEYyNUYx
QjQxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNUYxQUQxODE2MzVGMzAwNTIyRjM5
IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGMkFDNTY2MUU4QTBCNzcwMDAxRUUzRiAvKiBBaXJGaXhTcGls
bHNBZnRlclRlcm1pbmFscy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjJBQzU2NDFFOEEwQjc2MDAwMUVFM0YgLyogQWlyRml4U3BpbGxzQWZ0ZXJU
ZXJtaW5hbHMuY3BwICovOyB9OworCQkwRjJBQzU2NzFFOEEwQjc5MDAwMUVFM0YgLyogQWlyRml4
U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMkFDNTY1MUU4QTBCNzYwMDAxRUUzRiAvKiBBaXJGaXhTcGlsbHNBZnRl
clRlcm1pbmFscy5oICovOyB9OworCQkwRjJBQzU2QTFFOEEwQkQzMDAwMUVFM0YgLyogQWlyQWxs
b2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQUM1NjgxRThBMEJEMTAwMDFFRTNGIC8qIEFpckFsbG9j
YXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcCAqLzsgfTsKKwkJMEYyQUM1NkIxRThBMEJENTAw
MDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJBQzU2OTFFOEEwQkQxMDAwMUVF
M0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaCAqLzsgfTsKIAkJMEYyQjY2
QUMxN0I2QjUzRjAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBODE3QjZCNTNEMDBBN0FF
M0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJCNjZBRDE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNv
bWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJCNjZBOTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNv
dW50ZWRJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEYyQjY2QUUxN0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVk
U2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJC
NjZBQTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTY5LDcgKzk3Myw2
IEBACiAJCTBGRUM4NUJDMUJFMTQ2MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0cmVuZ3RoLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUI3MUJF
MTQ2MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0cmVuZ3RoLmNwcCAqLzsgfTsKIAkJMEZFQzg1QkQx
QkUxNDYyRjAwODBGRjc0IC8qIEIzUmVkdWNlU3RyZW5ndGguaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUI4MUJFMTQ2MkYwMDgwRkY3NCAvKiBC
M1JlZHVjZVN0cmVuZ3RoLmggKi87IH07CiAJCTBGRUM4NUMxMUJFMTY3QTAwMDgwRkY3NCAvKiBC
M0VmZmVjdHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NUJFMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0VmZmVjdHMuaCAqLzsgfTsKLQkJMEZFQzg1
QzIxQkUxNjdBMDAwODBGRjc0IC8qIEIzSGVhcFJhbmdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUJGMUJFMTY3QTAwMDgwRkY3NCAvKiBC
M0hlYXBSYW5nZS5jcHAgKi87IH07CiAJCTBGRUM4NUMzMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hl
YXBSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg1QzAxQkUxNjdBMDAwODBGRjc0IC8qIEIzSGVhcFJhbmdlLmggKi87IH07CiAJCTBGRUM4
NUM1MUJFMTZGNUEwMDgwRkY3NCAvKiBCM0VmZmVjdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1QzQxQkUxNkY1QTAwODBGRjc0IC8qIEIz
RWZmZWN0cy5jcHAgKi87IH07CiAJCTBGRUQ2N0I5MUIyNjI1NkQwMDY2Q0UxNSAvKiBERkdDb25z
dGFudEhvaXN0aW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFRDY3QjcxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0YW50SG9pc3Rp
bmdQaGFzZS5jcHAgKi87IH07CkBAIC0yNzAzLDYgKzI3MDYsMTAgQEAKIAkJMEYyNUYxQUIxODE2
MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBGVExTbG93UGF0aENhbGwuaDsgcGF0aCA9IGZ0bC9GVExTbG93UGF0aENhbGwu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNUYxQUMxODE2MzVGMzAwNTIyRjM5
IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBGVExTbG93UGF0aENhbGxLZXkuY3BwOyBwYXRoID0gZnRsL0ZUTFNsb3dQYXRoQ2Fs
bEtleS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjVGMUFEMTgxNjM1RjMw
MDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gRlRMU2xvd1BhdGhDYWxsS2V5Lmg7IHBhdGggPSBmdGwvRlRMU2xvd1BhdGhDYWxs
S2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkFDNTY0MUU4QTBCNzYwMDAx
RUUzRiAvKiBBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5jcHA7IHBhdGgg
PSBiMy9haXIvQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjJBQzU2NTFFOEEwQjc2MDAwMUVFM0YgLyogQWlyRml4U3BpbGxzQWZ0
ZXJUZXJtaW5hbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyRml4U3Bp
bGxzQWZ0ZXJUZXJtaW5hbHMuaDsgcGF0aCA9IGIzL2Fpci9BaXJGaXhTcGlsbHNBZnRlclRlcm1p
bmFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJBQzU2ODFFOEEwQkQxMDAw
MUVFM0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNj
YW4uY3BwOyBwYXRoID0gYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQUM1NjkxRThBMEJEMTAwMDFFRTNG
IC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmg7IHBhdGgg
PSBiMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQjY2QTgxN0I2QjUzRDAwQTdBRTNGIC8qIEdDSW5jb21pbmdS
ZWZDb3VudGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5jb21pbmdSZWZDb3VudGVkLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkE5MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0lu
Y29taW5nUmVmQ291bnRlZElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR0NJbmNvbWluZ1JlZkNv
dW50ZWRJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkFBMTdC
NkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMzQ5Niw3ICszNTAzLDYgQEAKIAkJMEZFQzg1QjcxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVk
dWNlU3RyZW5ndGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNS
ZWR1Y2VTdHJlbmd0aC5jcHA7IHBhdGggPSBiMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQzg1QjgxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVk
dWNlU3RyZW5ndGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNSZWR1Y2VT
dHJlbmd0aC5oOyBwYXRoID0gYjMvQjNSZWR1Y2VTdHJlbmd0aC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkVDODVCRTFCRTE2N0EwMDA4MEZGNzQgLyogQjNFZmZlY3RzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzRWZmZWN0cy5oOyBwYXRoID0gYjMvQjNF
ZmZlY3RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGRUM4NUJGMUJFMTY3QTAw
MDgwRkY3NCAvKiBCM0hlYXBSYW5nZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBCM0hlYXBSYW5nZS5jcHA7IHBhdGggPSBiMy9CM0hlYXBSYW5nZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUM4NUMwMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hl
YXBSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0hlYXBSYW5nZS5o
OyBwYXRoID0gYjMvQjNIZWFwUmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZFQzg1QzQxQkUxNkY1QTAwODBGRjc0IC8qIEIzRWZmZWN0cy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0VmZmVjdHMuY3BwOyBwYXRoID0gYjMvQjNFZmZlY3Rz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFRDY3QjcxQjI2MjU2RDAwNjZD
RTE1IC8qIERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuY3BwOyBwYXRoID0gZGZn
L0RGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01NDE5LDcgKzU0MjUsNiBAQAogCQkJCTBGRUM4NENGMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0dlbmVyYXRlLmggKi8sCiAJCQkJMEYyQzYzQjUxRTYzNDNFODAwQzEzODM5IC8qIEIzR2VuZXJp
Y0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi8sCiAJCQkJMEZFQzg0RDAxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oICovLAotCQkJCTBGRUM4NUJGMUJFMTY3QTAwMDgw
RkY3NCAvKiBCM0hlYXBSYW5nZS5jcHAgKi8sCiAJCQkJMEZFQzg1QzAxQkUxNjdBMDAwODBGRjc0
IC8qIEIzSGVhcFJhbmdlLmggKi8sCiAJCQkJREM2OUI5OUExRDE1RjkwRjAwMkUzQzAwIC8qIEIz
SW5mZXJTd2l0Y2hlcy5jcHAgKi8sCiAJCQkJREM2OUI5OUIxRDE1RjkwRjAwMkUzQzAwIC8qIEIz
SW5mZXJTd2l0Y2hlcy5oICovLApAQCAtNTUyOCw2ICs1NTMzLDggQEAKIAkJMEZFQzg0QjMxQkRB
Q0Q4ODAwODBGRjc0IC8qIGFpciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCisJCQkJMEYyQUM1NjgxRThBMEJEMTAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0
ZXJzQnlMaW5lYXJTY2FuLmNwcCAqLywKKwkJCQkwRjJBQzU2OTFFOEEwQkQxMDAwMUVFM0YgLyog
QWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaCAqLywKIAkJCQk3OTY1QzIxNDFFNUQ3
OTk2MDBCNzU5MUQgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuY3BwICov
LAogCQkJCTc5NjVDMjE1MUU1RDc5OTYwMEI3NTkxRCAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5
R3JhcGhDb2xvcmluZy5oICovLAogCQkJCTBGRUM4NTQ4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJB
bGxvY2F0ZVN0YWNrLmNwcCAqLywKQEAgLTU1NjEsNiArNTU2OCw4IEBACiAJCQkJMEY0REUxQ0Qx
QzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCAqLywKIAkJCQkyNjJEODVC
NDFDMEQ2NTBGMDA2QUNCNjEgLyogQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmNwcCAqLywK
IAkJCQkyNjJEODVCNTFDMEQ2NTBGMDA2QUNCNjEgLyogQWlyRml4UGFydGlhbFJlZ2lzdGVyU3Rh
bGxzLmggKi8sCisJCQkJMEYyQUM1NjQxRThBMEI3NjAwMDFFRTNGIC8qIEFpckZpeFNwaWxsc0Fm
dGVyVGVybWluYWxzLmNwcCAqLywKKwkJCQkwRjJBQzU2NTFFOEEwQjc2MDAwMUVFM0YgLyogQWly
Rml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCAqLywKIAkJCQkwRkVDODU1MjFCREFDREM3MDA4MEZG
NzQgLyogQWlyRnJlcXVlbnRlZEJsb2NrLmggKi8sCiAJCQkJMEZFQzg1NTMxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckdlbmVyYXRlLmNwcCAqLywKIAkJCQkwRkVDODU1NDFCREFDREM3MDA4MEZGNzQg
LyogQWlyR2VuZXJhdGUuaCAqLywKQEAgLTgxMzksNiArODE0OCw3IEBACiAJCQkJMEZFQzg1MTAx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkVDODUxMjFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0MzQyMkE2MzFDMTU4RTZEMDBFMkVCOTggLyogQjNDb25zdEZsb2F0VmFsdWUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkFDNTZCMUU4QTBCRDUwMDAxRUUzRiAvKiBBaXJBbGxv
Y2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1QjMx
QkRFRDk1NzAwODBGRjc0IC8qIEIzQ29uc3RQdHJWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYzMzhERjYxQkU5M0Q1NTAwMTNDODhGIC8qIEIzQ29uc3RyYWluZWRWYWx1ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyQzYzQjgxRTYzNDNGNzAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2NrSW5z
ZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKQEAgLTkzNjIsNiArOTM3Miw3IEBACiAJCQkJNzA5
RkI4NkExQUUzMzVDNjAwMzlEMDY5IC8qIFdlYWtTZXRDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMTQxNTAxMzMxNTRCQjEzRjAwNUQ4Qzk4IC8qIFdlYWtTZXRJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3MDlGQjg2QzFBRTMzNUM2MDAzOUQwNjkgLyogV2Vha1NldFByb3Rv
dHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQUM1NjcxRThBMEI3OTAwMDFFRTNGIC8qIEFp
ckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JFRDFE
QjU4REFEMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNDMTYxREI1OUNCMjAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5
Q29tcGlsZUVycm9yQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JF
RjFEQjU4REFEMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90b3R5cGUuaCBp
biBIZWFkZXJzICovLApAQCAtOTk4OCw3ICs5OTk5LDYgQEAKIAkJCQkwRjcyNUNBRjFDNTA2RDNC
MDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkVDODUxNTFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkVDODUxODFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQkwRkVDODVDMjFCRTE2N0EwMDA4MEZGNzQgLyogQjNIZWFwUmFuZ2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJREM2OUI5OUMxRDE1RjkxMjAwMkUzQzAwIC8qIEIzSW5m
ZXJTd2l0Y2hlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVDODVCOTFCRTE0NjJGMDA4MEZG
NzQgLyogQjNJbnNlcnRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZERjY3RDMxRDlD
NkQyQTAwMUI5ODI1IC8qIEIzS2luZC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMTU0LDYgKzEw
MTY0LDcgQEAKIAkJCQlBNzhBOTc3NjE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkJEQzE1MTUxQzVENEQwMENEODkxMCAvKiBERkdGaXh1
cFBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjAxNzdGMURDQURDMzMwMEVBNTk1MCAv
KiBERkdGbG93SW5kZXhpbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQUM1NkExRThBMEJE
MzAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGOUQzMzk2MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRjcxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0ZsdXNo
Rm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNjlDQzg4MTkzQUM2MEEwMDQ1NzU5RSAv
KiBERkdGcm96ZW5WYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMjYzLDYgKzEwMjc0LDcg
QEAKIAkJCQkyQTgzNjM4NTE4RDdEMEVFMDAwMEVCQ0MgLyogRWRlbkdDQWN0aXZpdHlDYWxsYmFj
ay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OUU0NUEyNTE4QTFCMjU5MDAyNkQ4OEYgLyogRW5j
b2RlZFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUM3MTA3RUMzNzYwMDQyN0E0
OCAvKiBFcnJvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJBQzU2NjFFOEEwQjc3MDAwMUVF
M0YgLyogQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQ3RjM5QzgxMDdFQzM3NjAwNDI3QTQ4IC8qIEVycm9yQ29uc3RydWN0b3IuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRkVCNThDMTQxODdCOEIxNjAwOThFRjBCIC8qIEVycm9ySGFuZGxpbmdTY29w
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDOTEwN0VDMzc2MDA0MjdBNDggLyogRXJy
b3JJbnN0YW5jZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrVXRpbHMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTE0LDcgKzExNCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+CiBWZWN0b3I8QmFz
aWNCbG9jayo+IGJsb2Nrc0luUHJlT3JkZXIoQmFzaWNCbG9jayogcm9vdCkKIHsKICAgICBWZWN0
b3I8QmFzaWNCbG9jayo+IHJlc3VsdDsKLSAgICBHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2Nr
KiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IHdvcmtsaXN0OworICAgIEdyYXBoTm9kZVdvcmtsaXN0
PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+IHdvcmtsaXN0OwogICAgIHdvcmts
aXN0LnB1c2gocm9vdCk7CiAgICAgd2hpbGUgKEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3Qu
cG9wKCkpIHsKICAgICAgICAgcmVzdWx0LmFwcGVuZChibG9jayk7CkBAIC0xMjgsNyArMTI4LDcg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KIFZlY3RvcjxCYXNpY0Jsb2NrKj4gYmxv
Y2tzSW5Qb3N0T3JkZXIoQmFzaWNCbG9jayogcm9vdCkKIHsKICAgICBWZWN0b3I8QmFzaWNCbG9j
ayo+IHJlc3VsdDsKLSAgICBQb3N0T3JkZXJHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwg
SW5kZXhTZXQ8QmFzaWNCbG9jaz4+IHdvcmtsaXN0OworICAgIFBvc3RPcmRlckdyYXBoTm9kZVdv
cmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+IHdvcmtsaXN0OwogICAg
IHdvcmtsaXN0LnB1c2gocm9vdCk7CiAgICAgd2hpbGUgKEdyYXBoTm9kZVdpdGhPcmRlcjxCYXNp
Y0Jsb2NrKj4gaXRlbSA9IHdvcmtsaXN0LnBvcCgpKSB7CiAgICAgICAgIHN3aXRjaCAoaXRlbS5v
cmRlcikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tXb3JrbGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrV29ya2xpc3Qu
aAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tX
b3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CiAKIGNsYXNzIEJhc2ljQmxvY2s7CiAKLXR5cGVkZWYgR3JhcGhOb2RlV29y
a2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2s+PiBCbG9ja1dvcmtsaXN0Owor
dHlwZWRlZiBHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9j
ayo+PiBCbG9ja1dvcmtsaXN0OwogCiAvLyBXaGVuIHlvdSBzYXkgQmxvY2tXaXRoPGludD4geW91
IHNob3VsZCByZWFkIGl0IGFzICJibG9jayB3aXRoIGFuIGludCIuCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB1c2luZyBCbG9ja1dpdGggPSBHcmFwaE5vZGVXaXRoPEJhc2ljQmxvY2sqLCBUPjsKQEAg
LTQ0LDEzICs0NCwxMyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBCbG9ja1dpdGggPSBH
CiAvLyBwZXJtaXRzIGZvcmNpYmx5IGVucXVldWVpbmcgdGhpbmdzIGV2ZW4gaWYgdGhlIGJsb2Nr
IGhhcyBhbHJlYWR5IGJlZW4gc2Vlbi4gSXQncyB1c2VmdWwgZm9yCiAvLyB0aGluZ3MgbGlrZSBi
dWlsZGluZyBhIHNwYW5uaW5nIHRyZWUsIGluIHdoaWNoIGNhc2UgVCAodGhlIGF1eGlsaWFyeSBw
YXlsb2FkKSB3b3VsZCBiZSB0aGUKIC8vIHN1Y2Nlc3NvciBpbmRleC4KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3JrbGlzdCA9IEV4dGVuZGVkR3JhcGhOb2RlV29y
a2xpc3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0PEJhc2ljQmxvY2s+PjsKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3JrbGlzdCA9IEV4dGVuZGVkR3JhcGhOb2Rl
V29ya2xpc3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0PEJhc2ljQmxvY2sqPj47CiAKIHR5cGVk
ZWYgR3JhcGhWaXNpdE9yZGVyIFZpc2l0T3JkZXI7CiAKIHR5cGVkZWYgR3JhcGhOb2RlV2l0aE9y
ZGVyPEJhc2ljQmxvY2sqPiBCbG9ja1dpdGhPcmRlcjsKIAotdHlwZWRlZiBQb3N0T3JkZXJHcmFw
aE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IFBvc3RPcmRl
ckJsb2NrV29ya2xpc3Q7Cit0eXBlZGVmIFBvc3RPcmRlckdyYXBoTm9kZVdvcmtsaXN0PEJhc2lj
QmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+IFBvc3RPcmRlckJsb2NrV29ya2xpc3Q7CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDRkcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDRkcu
aAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ0ZHLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzksOCArMzksOCBAQCBjbGFzcyBDRkcgewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIHR5cGVkZWYgQmFzaWNCbG9jayogTm9kZTsKLSAg
ICB0eXBlZGVmIEluZGV4U2V0PEJhc2ljQmxvY2s+IFNldDsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB1c2luZyBNYXAgPSBJbmRleE1hcDxCYXNpY0Jsb2NrLCBUPjsKKyAgICB0eXBlZGVmIElu
ZGV4U2V0PEJhc2ljQmxvY2sqPiBTZXQ7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcg
TWFwID0gSW5kZXhNYXA8QmFzaWNCbG9jayosIFQ+OwogICAgIHR5cGVkZWYgVmVjdG9yPEJhc2lj
QmxvY2sqLCA0PiBMaXN0OwogCiAgICAgQ0ZHKFByb2NlZHVyZSYgcHJvYykKQEAgLTUxLDcgKzUx
LDcgQEAgcHVibGljOgogICAgIE5vZGUgcm9vdCgpIHsgcmV0dXJuIG1fcHJvY1swXTsgfQogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBNYXA8VD4gbmV3TWFwKCkgeyByZXR1cm4gSW5k
ZXhNYXA8SlNDOjpCMzo6QmFzaWNCbG9jaywgVD4obV9wcm9jLnNpemUoKSk7IH0KKyAgICBNYXA8
VD4gbmV3TWFwKCkgeyByZXR1cm4gSW5kZXhNYXA8SlNDOjpCMzo6QmFzaWNCbG9jayosIFQ+KG1f
cHJvYy5zaXplKCkpOyB9CiAKICAgICBTdWNjZXNzb3JDb2xsZWN0aW9uPEJhc2ljQmxvY2ssIEJh
c2ljQmxvY2s6OlN1Y2Nlc3Nvckxpc3Q+IHN1Y2Nlc3NvcnMoTm9kZSBub2RlKSB7IHJldHVybiBu
b2RlLT5zdWNjZXNzb3JCbG9ja3MoKTsgfQogICAgIEJhc2ljQmxvY2s6OlByZWRlY2Vzc29yTGlz
dCYgcHJlZGVjZXNzb3JzKE5vZGUgbm9kZSkgeyByZXR1cm4gbm9kZS0+cHJlZGVjZXNzb3JzKCk7
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCShyZXZpc2lvbiAyMTQ0Mjcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uaAkod29ya2luZyBjb3B5KQpA
QCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShCM19KSVQpCiAKICNpbmNsdWRlICJKU0V4cG9y
dE1hY3Jvcy5oIgorI2luY2x1ZGUgIk9wdGlvbnMuaCIKICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CkBAIC0xNzAsNiArMTcxLDEzIEBA
IHN0YXRpYyBJbnRUeXBlIHJvdGF0ZUxlZnQoSW50VHlwZSB2YWx1ZSwKICAgICByZXR1cm4gKHVW
YWx1ZSA8PCBzaGlmdCkgfCAodVZhbHVlID4+ICgoYml0cyAtIHNoaWZ0KSAmIG1hc2spKTsKIH0K
IAoraW5saW5lIHVuc2lnbmVkIGRlZmF1bHRPcHRMZXZlbCgpCit7CisgICAgLy8gVGhpcyBzaG91
bGQgYWxtb3N0IGFsd2F5cyByZXR1cm4gMiwgYnV0IHdlIGFsbG93IHRoaXMgZGVmYXVsdCB0byBi
ZSBsb3dlcmVkIGZvciB0ZXN0aW5nLiBTb21lCisgICAgLy8gY29tcG9uZW50cyB3aWxsIGRlbGli
ZXJhdGVseSBzZXQgdGhlIG9wdExldmVsLgorICAgIHJldHVybiBPcHRpb25zOjpkZWZhdWx0QjNP
cHRMZXZlbCgpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKIAogI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsZS5oCShyZXZp
c2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShCM19KSVQpCiAKKyNp
bmNsdWRlICJCM0NvbW1vbi5oIgogI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKIAogbmFtZXNw
YWNlIEpTQyB7CkBAIC00NSw3ICs0Niw3IEBAIGNsYXNzIFByb2NlZHVyZTsKIC8vIFRoZW4geW91
IGtlZXAgdGhlIENvbXBpbGF0aW9uIG9iamVjdCBhbGl2ZSBmb3IgYXMgbG9uZyBhcyB5b3Ugd2Fu
dCB0byBiZSBhYmxlIHRvIHJ1biB0aGUgY29kZS4KIC8vIElmIHRoaXMgQVBJIGZlZWxzIHRvbyBo
aWdoLWxldmVsLCB5b3UgY2FuIHVzZSBCMzo6Z2VuZXJhdGUoKSBkaXJlY3RseS4KIAotSlNfRVhQ
T1JUX1BSSVZBVEUgQ29tcGlsYXRpb24gY29tcGlsZShWTSYsIFByb2NlZHVyZSYsIHVuc2lnbmVk
IG9wdExldmVsID0gMSk7CitKU19FWFBPUlRfUFJJVkFURSBDb21waWxhdGlvbiBjb21waWxlKFZN
JiwgUHJvY2VkdXJlJiwgdW5zaWduZWQgb3B0TGV2ZWwgPSBkZWZhdWx0T3B0TGV2ZWwoKSk7CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNEdXBsaWNhdGVUYWlscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzRHVwbGljYXRlVGFpbHMuY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNEdXBsaWNhdGVUYWlscy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY4LDcgKzY4LDcgQEAgcHVibGljOgogCiAgICAgICAgIG1fcHJvYy5yZXNldFZhbHVlT3duZXJz
KCk7CiAKLSAgICAgICAgSW5kZXhTZXQ8QmFzaWNCbG9jaz4gY2FuZGlkYXRlczsKKyAgICAgICAg
SW5kZXhTZXQ8QmFzaWNCbG9jayo+IGNhbmRpZGF0ZXM7CiAKICAgICAgICAgZm9yIChCYXNpY0Js
b2NrKiBibG9jayA6IG1fcHJvYykgewogICAgICAgICAgICAgaWYgKGJsb2NrLT5zaXplKCkgPiBt
X21heFNpemUpCkBAIC04Miw3ICs4Miw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogCiAgICAgICAg
IC8vIENvbGxlY3QgdGhlIHNldCBvZiB2YWx1ZXMgdGhhdCBtdXN0IGJlIGRlLVNTQSdkLgotICAg
ICAgICBJbmRleFNldDxWYWx1ZT4gdmFsdWVzVG9EZW1vdGU7CisgICAgICAgIEluZGV4U2V0PFZh
bHVlKj4gdmFsdWVzVG9EZW1vdGU7CiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBt
X3Byb2MpIHsKICAgICAgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogKmJsb2NrKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSA9PSBQaGkgJiYgY2FuZGlkYXRlcy5jb250
YWlucyhibG9jaykpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVD
b21tb25TdWJleHByZXNzaW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuY3BwCShyZXZpc2lvbiAyMTQ0
MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVDb21tb25TdWJleHBy
ZXNzaW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4Miw3ICs2ODIsNyBAQCBwcml2YXRlOgog
ICAgIERvbWluYXRvcnMmIG1fZG9taW5hdG9yczsKICAgICBQdXJlQ1NFIG1fcHVyZUNTRTsKICAg
ICAKLSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBJbXB1cmVCbG9ja0RhdGE+IG1faW1wdXJlQmxv
Y2tEYXRhOworICAgIEluZGV4TWFwPEJhc2ljQmxvY2sqLCBJbXB1cmVCbG9ja0RhdGE+IG1faW1w
dXJlQmxvY2tEYXRhOwogCiAgICAgSW1wdXJlQmxvY2tEYXRhIG1fZGF0YTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRml4U1NBLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNGaXhTU0EuY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGaXhTU0EuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3
ICs0OSw3IEBAIG5hbWVzcGFjZSB7CiBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIH0gLy8g
YW5vbnltb3VzIG5hbWVzcGFjZQogCi12b2lkIGRlbW90ZVZhbHVlcyhQcm9jZWR1cmUmIHByb2Ms
IGNvbnN0IEluZGV4U2V0PFZhbHVlPiYgdmFsdWVzKQordm9pZCBkZW1vdGVWYWx1ZXMoUHJvY2Vk
dXJlJiBwcm9jLCBjb25zdCBJbmRleFNldDxWYWx1ZSo+JiB2YWx1ZXMpCiB7CiAgICAgSGFzaE1h
cDxWYWx1ZSosIFZhcmlhYmxlKj4gbWFwOwogICAgIEhhc2hNYXA8VmFsdWUqLCBWYXJpYWJsZSo+
IHBoaU1hcDsKQEAgLTEyMSw3ICsxMjEsNyBAQCBib29sIGZpeFNTQShQcm9jZWR1cmUmIHByb2Mp
CiAgICAgLy8gSnVzdCBmb3Igc2FuaXR5LCByZW1vdmUgYW55IHVudXNlZCB2YXJpYWJsZXMgZmly
c3QuIEl0J3MgdW5saWtlbHkgdGhhdCB0aGlzIGNvZGUgaGFzIGFueQogICAgIC8vIGJ1Z3MgaGF2
aW5nIHRvIGRvIHdpdGggZGVhZCB2YXJpYWJsZXMsIGJ1dCBpdCB3b3VsZCBiZSBzaWxseSB0byBo
YXZlIHRvIGZpeCBzdWNoIGEgYnVnIGlmCiAgICAgLy8gaXQgZGlkIGFyaXNlLgotICAgIEluZGV4
U2V0PFZhcmlhYmxlPiBsaXZlVmFyaWFibGVzOworICAgIEluZGV4U2V0PFZhcmlhYmxlKj4gbGl2
ZVZhcmlhYmxlczsKICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IHByb2MudmFsdWVzKCkpIHsKICAg
ICAgICAgaWYgKFZhcmlhYmxlVmFsdWUqIHZhcmlhYmxlVmFsdWUgPSB2YWx1ZS0+YXM8VmFyaWFi
bGVWYWx1ZT4oKSkKICAgICAgICAgICAgIGxpdmVWYXJpYWJsZXMuYWRkKHZhcmlhYmxlVmFsdWUt
PnZhcmlhYmxlKCkpOwpAQCAtMTQ1LDcgKzE0NSw3IEBAIGJvb2wgZml4U1NBKFByb2NlZHVyZSYg
cHJvYykKIAogICAgIC8vIENyZWF0ZSBhIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlICgiY2FsY1Zh
ciIpIGZvciBldmVyeSB2YXJpYWJsZS4KICAgICBWZWN0b3I8VmFyaWFibGUqPiBjYWxjVmFyVG9W
YXJpYWJsZTsKLSAgICBJbmRleE1hcDxWYXJpYWJsZSwgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUq
PiB2YXJpYWJsZVRvQ2FsY1Zhcihwcm9jLnZhcmlhYmxlcygpLnNpemUoKSk7CisgICAgSW5kZXhN
YXA8VmFyaWFibGUqLCBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSo+IHZhcmlhYmxlVG9DYWxjVmFy
KHByb2MudmFyaWFibGVzKCkuc2l6ZSgpKTsKIAogICAgIGZvciAoVmFyaWFibGUqIHZhcmlhYmxl
IDogcHJvYy52YXJpYWJsZXMoKSkgewogICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSog
Y2FsY1ZhciA9IHNzYS5uZXdWYXJpYWJsZSgpOwpAQCAtMTg1LDcgKzE4NSw3IEBAIGJvb2wgZml4
U1NBKFByb2NlZHVyZSYgcHJvYykKIAogICAgIC8vIE5vdyBwZXJmb3JtIHRoZSBjb252ZXJzaW9u
LgogICAgIEluc2VydGlvblNldCBpbnNlcnRpb25TZXQocHJvYyk7Ci0gICAgSW5kZXhNYXA8VmFy
aWFibGUsIFZhbHVlKj4gbWFwcGluZyhwcm9jLnZhcmlhYmxlcygpLnNpemUoKSk7CisgICAgSW5k
ZXhNYXA8VmFyaWFibGUqLCBWYWx1ZSo+IG1hcHBpbmcocHJvYy52YXJpYWJsZXMoKS5zaXplKCkp
OwogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBwcm9jLmJsb2Nrc0luUHJlT3JkZXIoKSkg
ewogICAgICAgICBtYXBwaW5nLmNsZWFyKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0ZpeFNTQS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0ZpeFNTQS5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNGaXhTU0EuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNyw3ICszNyw3IEBAIGNsYXNzIFByb2NlZHVyZTsK
IAogLy8gVHVybnMgYWxsIG1lbnRpb25zIG9mIHRoZSBnaXZlbiB2YWx1ZXMgaW50byBhY2Nlc3Nl
cyB0byB2YXJpYWJsZXMuIFRoaXMgaXMgbWVhbnQgdG8gYmUgdXNlZAogLy8gZnJvbSBwaGFzZXMg
dGhhdCBkb24ndCBsaWtlIFNTQSBmb3Igd2hhdGV2ZXIgcmVhc29uLgotdm9pZCBkZW1vdGVWYWx1
ZXMoUHJvY2VkdXJlJiwgY29uc3QgSW5kZXhTZXQ8VmFsdWU+Jik7Cit2b2lkIGRlbW90ZVZhbHVl
cyhQcm9jZWR1cmUmLCBjb25zdCBJbmRleFNldDxWYWx1ZSo+Jik7CiAKIC8vIFRoaXMgZml4ZXMg
U1NBIGZvciB5b3UuIFVzZSB0aGlzIGFmdGVyIHlvdSBoYXZlIGRvbmUgZGVtb3RlVmFsdWVzKCkg
YW5kIHlvdSBoYXZlIHBlcmZvcm1lZAogLy8gd2hhdGV2ZXIgZXZpbCB0cmFuc2Zvcm1hdGlvbiB5
b3UgbmVlZGVkLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAko
cmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQgcHJlcGFyZUZvckdlbmVy
YXRpb24oUHJvY2VkdXJlJiBwcm8KICAgICBUaW1pbmdTY29wZSB0aW1pbmdTY29wZSgicHJlcGFy
ZUZvckdlbmVyYXRpb24iKTsKIAogICAgIGdlbmVyYXRlVG9BaXIocHJvY2VkdXJlLCBvcHRMZXZl
bCk7Ci0gICAgQWlyOjpwcmVwYXJlRm9yR2VuZXJhdGlvbihwcm9jZWR1cmUuY29kZSgpKTsKKyAg
ICBBaXI6OnByZXBhcmVGb3JHZW5lcmF0aW9uKHByb2NlZHVyZS5jb2RlKCksIG9wdExldmVsKTsK
IH0KIAogdm9pZCBnZW5lcmF0ZShQcm9jZWR1cmUmIHByb2NlZHVyZSwgQ0NhbGxIZWxwZXJzJiBq
aXQpCkBAIC04MCw3ICs4MCw3IEBAIHZvaWQgZ2VuZXJhdGVUb0FpcihQcm9jZWR1cmUmIHByb2Nl
ZHVyZSwKICAgICBpZiAoc2hvdWxkVmFsaWRhdGVJUigpKQogICAgICAgICB2YWxpZGF0ZShwcm9j
ZWR1cmUpOwogCi0gICAgaWYgKG9wdExldmVsID49IDEpIHsKKyAgICBpZiAob3B0TGV2ZWwgPj0g
MikgewogICAgICAgICByZWR1Y2VEb3VibGVUb0Zsb2F0KHByb2NlZHVyZSk7CiAgICAgICAgIHJl
ZHVjZVN0cmVuZ3RoKHByb2NlZHVyZSk7CiAgICAgICAgIGVsaW1pbmF0ZUNvbW1vblN1YmV4cHJl
c3Npb25zKHByb2NlZHVyZSk7CkBAIC05MSwxMiArOTEsMTUgQEAgdm9pZCBnZW5lcmF0ZVRvQWly
KFByb2NlZHVyZSYgcHJvY2VkdXJlLAogICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IEFkZCBt
b3JlIG9wdGltaXphdGlvbnMgaGVyZS4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1MDUwNworICAgIH0gZWxzZSBpZiAob3B0TGV2ZWwgPj0gMSkg
eworICAgICAgICAvLyBGSVhNRTogRXhwbG9yZSBiZXR0ZXIgInF1aWNrIG1vZGUiIG9wdGltaXph
dGlvbnMuCisgICAgICAgIHJlZHVjZVN0cmVuZ3RoKHByb2NlZHVyZSk7CiAgICAgfQogCiAgICAg
Ly8gVGhpcyBwdXRzIHRoZSBJUiBpbiBxdWlya3MgbW9kZS4KICAgICBsb3dlck1hY3Jvcyhwcm9j
ZWR1cmUpOwogCi0gICAgaWYgKG9wdExldmVsID49IDEpIHsKKyAgICBpZiAob3B0TGV2ZWwgPj0g
MikgewogICAgICAgICByZWR1Y2VTdHJlbmd0aChwcm9jZWR1cmUpOwogCiAgICAgICAgIC8vIEZJ
WE1FOiBBZGQgbW9yZSBvcHRpbWl6YXRpb25zIGhlcmUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNHZW5lcmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0dlbmVyYXRlLmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0dlbmVyYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDggQEAKIAog
I2lmIEVOQUJMRShCM19KSVQpCiAKKyNpbmNsdWRlICJCM0NvbW1vbi5oIgorCiBuYW1lc3BhY2Ug
SlNDIHsKIAogY2xhc3MgQ0NhbGxIZWxwZXJzOwpAQCAtMzgsNyArNDAsNyBAQCBuYW1lc3BhY2Ug
QWlyIHsgY2xhc3MgQ29kZTsgfQogCiAvLyBUaGlzIHRha2VzIGEgQjM6OlByb2NlZHVyZSwgb3B0
aW1pemVzIGl0IGluLXBsYWNlLCBsb3dlcnMgaXQgdG8gQWlyLCBhbmQgcHJlcGFyZXMgdGhlIEFp
ciBmb3IKIC8vIGdlbmVyYXRpb24uCi1KU19FWFBPUlRfUFJJVkFURSB2b2lkIHByZXBhcmVGb3JH
ZW5lcmF0aW9uKFByb2NlZHVyZSYsIHVuc2lnbmVkIG9wdExldmVsID0gMSk7CitKU19FWFBPUlRf
UFJJVkFURSB2b2lkIHByZXBhcmVGb3JHZW5lcmF0aW9uKFByb2NlZHVyZSYsIHVuc2lnbmVkIG9w
dExldmVsID0gZGVmYXVsdE9wdExldmVsKCkpOwogCiAvLyBUaGlzIHRha2VzIGEgQjM6OlByb2Nl
ZHVyZSB0aGF0IGhhcyBiZWVuIHByZXBhcmVkIGZvciBnZW5lcmF0aW9uIChpLmUuIGl0IGhhcyBi
ZWVuIGxvd2VyZWQgdG8gQWlyIGFuZAogLy8gdGhlIEFpciBoYXMgYmVlbiBwcmVwYXJlZCBmb3Ig
Z2VuZXJhdGlvbikgYW5kIGdlbmVyYXRlcyBpdC4gVGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvZiBj
YWxsaW5nCkBAIC00OCw3ICs1MCw3IEBAIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZ2VuZXJhdGUo
UHJvY2VkdXIKIC8vIFRoaXMgdGFrZXMgYSBCMzo6UHJvY2VkdXJlLCBvcHRpbWl6ZXMgaXQgaW4t
cGxhY2UsIGFuZCBsb3dlcnMgaXQgdG8gQWlyLiBZb3UgY2FuIHRoZW4gZ2VuZXJhdGUKIC8vIHRo
ZSBBaXIgdG8gbWFjaGluZSBjb2RlIHVzaW5nIEFpcjo6cHJlcGFyZUZvckdlbmVyYXRpb24oKSBh
bmQgQWlyOjpnZW5lcmF0ZSgpIG9uIHRoZSBQcm9jZWR1cmUncwogLy8gY29kZSgpLgotdm9pZCBn
ZW5lcmF0ZVRvQWlyKFByb2NlZHVyZSYsIHVuc2lnbmVkIG9wdExldmVsID0gMSk7Cit2b2lkIGdl
bmVyYXRlVG9BaXIoUHJvY2VkdXJlJiwgdW5zaWduZWQgb3B0TGV2ZWwgPSBkZWZhdWx0T3B0TGV2
ZWwoKSk7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNIZWFwUmFuZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw0OSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJCM0hlYXBSYW5nZS5oIgotCi0jaWYgRU5BQkxF
KEIzX0pJVCkKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7Ci0KLXZvaWQgSGVhcFJh
bmdlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAgaWYgKCp0aGlzID09IEhl
YXBSYW5nZSgpKSB7Ci0gICAgICAgIG91dC5wcmludCgiQm90dG9tIik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgaWYgKCp0aGlzID09IHRvcCgpKSB7Ci0gICAgICAgIG91dC5wcmludCgi
VG9wIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgb3V0LnByaW50KG1fYmVnaW4sICIu
Li4iLCBtX2VuZCk7Ci19Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwotCi0jZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJh
bmdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJhbmdl
LmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBS
YW5nZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw5MCArMjcsMTUgQEAKIAogI2lmIEVOQUJMRShC
M19KSVQpCiAKLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgotI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorI2luY2x1ZGUgPHd0Zi9SYW5nZS5oPgog
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAogLy8gQWxpYXMgYW5hbHlzaXMgaW4g
QjMgaXMgZG9uZSBieSBjaGVja2luZyBpZiB0d28gaW50ZWdlciByYW5nZXMgb3ZlcmxhcC4gVGhp
cyBpcyBwb3dlcmZ1bCBlbm91Z2gKIC8vIHRvIGJlIHVzZWQgZm9yIFRCQUEtc3R5bGUgYWxpYXMg
YW5hbHlzaXMgdXNlZCBieSB0aGUgREZHLCBGVEwsIGFuZCBMTFZNOiB5b3UganVzdCB0dXJuIGVh
Y2ggbm9kZQogLy8gaW4gdGhlIHRyZWUgb2YgYWJzdHJhY3QgaGVhcHMgaW50byBhIHByZS9wb3N0
IHJhbmdlLgotLy8KLS8vIE5vdGUgdGhhdCB0aGUgJ2JlZ2luJyBpcyBpbmNsdXNpdmUsIHdoaWxl
IHRoZSAnZW5kJyBpcyBleGNsdXNpdmUuIFRoZXNlIHR3byByYW5nZXMgYXJlIG5vbi0KLS8vIG92
ZXJsYXBwaW5nOgotLy8KLS8vICAgICByYW5nZUEgPSAwLi4uOAotLy8gICAgIHJhbmdlQiA9IDgu
Li4xNgotCi1jbGFzcyBIZWFwUmFuZ2UgewotcHVibGljOgotICAgIHR5cGVkZWYgdW5zaWduZWQg
VHlwZTsKLSAgICAKLSAgICBIZWFwUmFuZ2UoKQotICAgICAgICA6IG1fYmVnaW4oMCkKLSAgICAg
ICAgLCBtX2VuZCgwKQotICAgIHsKLSAgICB9Ci0KLSAgICBleHBsaWNpdCBIZWFwUmFuZ2UodW5z
aWduZWQgdmFsdWUpCi0gICAgICAgIDogbV9iZWdpbih2YWx1ZSkKLSAgICAgICAgLCBtX2VuZCh2
YWx1ZSArIDEpCi0gICAgewotICAgICAgICBBU1NFUlQobV9lbmQgPj0gbV9iZWdpbik7Ci0gICAg
fQotCi0gICAgSGVhcFJhbmdlKHVuc2lnbmVkIGJlZ2luLCB1bnNpZ25lZCBlbmQpCi0gICAgICAg
IDogbV9iZWdpbihiZWdpbikKLSAgICAgICAgLCBtX2VuZChlbmQpCi0gICAgewotICAgICAgICBB
U1NFUlQobV9lbmQgPj0gbV9iZWdpbik7Ci0gICAgICAgIGlmIChtX2JlZ2luID09IG1fZW5kKSB7
Ci0gICAgICAgICAgICAvLyBDYW5vbmljYWxpemUgZW1wdHkgcmFuZ2VzLgotICAgICAgICAgICAg
bV9iZWdpbiA9IDA7Ci0gICAgICAgICAgICBtX2VuZCA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBzdGF0aWMgSGVhcFJhbmdlIHRvcCgpCi0gICAgewotICAgICAgICByZXR1cm4gSGVhcFJh
bmdlKDAsIFVJTlRfTUFYKTsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSGVh
cFJhbmdlJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2JlZ2luID09IG90
aGVyLm1fYmVnaW4KLSAgICAgICAgICAgICYmIG1fZW5kID09IG90aGVyLm1fZW5kOwotICAgIH0K
LQotICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBIZWFwUmFuZ2UmIG90aGVyKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwotICAgIH0KLSAgICAKLSAgICBI
ZWFwUmFuZ2Ugb3BlcmF0b3J8KGNvbnN0IEhlYXBSYW5nZSYgb3RoZXIpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gSGVhcFJhbmdlKAotICAgICAgICAgICAgc3RkOjptaW4obV9iZWdpbiwg
b3RoZXIubV9iZWdpbiksCi0gICAgICAgICAgICBzdGQ6Om1heChtX2VuZCwgb3RoZXIubV9lbmQp
KTsKLSAgICB9Ci0gICAgCi0gICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0
dXJuIG1fYmVnaW4gIT0gbV9lbmQ7IH0KLQotICAgIHVuc2lnbmVkIGJlZ2luKCkgY29uc3QgeyBy
ZXR1cm4gbV9iZWdpbjsgfQotICAgIHVuc2lnbmVkIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5k
OyB9Ci0KLSAgICBib29sIG92ZXJsYXBzKGNvbnN0IEhlYXBSYW5nZSYgb3RoZXIpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gV1RGOjpyYW5nZXNPdmVybGFwKG1fYmVnaW4sIG1fZW5kLCBv
dGhlci5tX2JlZ2luLCBvdGhlci5tX2VuZCk7Ci0gICAgfQotCi0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIHVu
c2lnbmVkIG1fYmVnaW47Ci0gICAgdW5zaWduZWQgbV9lbmQ7Ci19OworCit0eXBlZGVmIFJhbmdl
PHVuc2lnbmVkPiBIZWFwUmFuZ2U7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2aXNpb24gMjE0
NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMzNzksMTAgKzMzNzksMTAgQEAgcHJpdmF0ZToKICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAgICAgCi0gICAgSW5kZXhTZXQ8VmFsdWU+
IG1fbG9ja2VkOyAvLyBUaGVzZSBhcmUgdmFsdWVzIHRoYXQgd2lsbCBoYXZlIG5vIFRtcCBpbiBB
aXIuCi0gICAgSW5kZXhNYXA8VmFsdWUsIFRtcD4gbV92YWx1ZVRvVG1wOyAvLyBUaGVzZSBhcmUg
dmFsdWVzIHRoYXQgbXVzdCBoYXZlIGEgVG1wIGluIEFpci4gV2Ugc2F5IHRoYXQgYSBWYWx1ZSog
d2l0aCBhIG5vbi1udWxsIFRtcCBpcyAicGlubmVkIi4KLSAgICBJbmRleE1hcDxWYWx1ZSwgVG1w
PiBtX3BoaVRvVG1wOyAvLyBFYWNoIFBoaSBnZXRzIGl0cyBvd24gVG1wLgotICAgIEluZGV4TWFw
PEIzOjpCYXNpY0Jsb2NrLCBBaXI6OkJhc2ljQmxvY2sqPiBtX2Jsb2NrVG9CbG9jazsKKyAgICBJ
bmRleFNldDxWYWx1ZSo+IG1fbG9ja2VkOyAvLyBUaGVzZSBhcmUgdmFsdWVzIHRoYXQgd2lsbCBo
YXZlIG5vIFRtcCBpbiBBaXIuCisgICAgSW5kZXhNYXA8VmFsdWUqLCBUbXA+IG1fdmFsdWVUb1Rt
cDsgLy8gVGhlc2UgYXJlIHZhbHVlcyB0aGF0IG11c3QgaGF2ZSBhIFRtcCBpbiBBaXIuIFdlIHNh
eSB0aGF0IGEgVmFsdWUqIHdpdGggYSBub24tbnVsbCBUbXAgaXMgInBpbm5lZCIuCisgICAgSW5k
ZXhNYXA8VmFsdWUqLCBUbXA+IG1fcGhpVG9UbXA7IC8vIEVhY2ggUGhpIGdldHMgaXRzIG93biBU
bXAuCisgICAgSW5kZXhNYXA8QjM6OkJhc2ljQmxvY2sqLCBBaXI6OkJhc2ljQmxvY2sqPiBtX2Js
b2NrVG9CbG9jazsKICAgICBIYXNoTWFwPEIzOjpTdGFja1Nsb3QqLCBBaXI6OlN0YWNrU2xvdCo+
IG1fc3RhY2tUb1N0YWNrOwogICAgIEhhc2hNYXA8VmFyaWFibGUqLCBUbXA+IG1fdmFyaWFibGVU
b1RtcDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTW92ZUNvbnN0YW50cy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTW92ZUNvbnN0YW50
cy5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01v
dmVDb25zdGFudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHByaXZhdGU6
CiAgICAgewogICAgICAgICBEb21pbmF0b3JzJiBkb21pbmF0b3JzID0gbV9wcm9jLmRvbWluYXRv
cnMoKTsKICAgICAgICAgSGFzaE1hcDxWYWx1ZUtleSwgVmFsdWUqPiB2YWx1ZUZvckNvbnN0YW50
OwotICAgICAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBWZWN0b3I8VmFsdWUqPj4gbWF0ZXJpYWxp
emF0aW9ucyhtX3Byb2Muc2l6ZSgpKTsKKyAgICAgICAgSW5kZXhNYXA8QmFzaWNCbG9jayosIFZl
Y3RvcjxWYWx1ZSo+PiBtYXRlcmlhbGl6YXRpb25zKG1fcHJvYy5zaXplKCkpOwogCiAgICAgICAg
IC8vIFdlIGRldGVybWluZSB3aGVyZSB0aGluZ3MgZ2V0IG1hdGVyaWFsaXplZCBiYXNlZCBvbiB3
aGVyZSB0aGV5IGFyZSB1c2VkLgogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9w
cm9jKSB7CkBAIC0yNzQsNyArMjc0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgZm9yIChhdXRvJiBl
bnRyeSA6IG1fY29uc3RUYWJsZSkKICAgICAgICAgICAgIG1fZGF0YVNlY3Rpb25bZW50cnkudmFs
dWVdID0gZW50cnkua2V5LnZhbHVlKCk7CiAKLSAgICAgICAgSW5kZXhTZXQ8VmFsdWU+IG9mZkxp
bWl0czsKKyAgICAgICAgSW5kZXhTZXQ8VmFsdWUqPiBvZmZMaW1pdHM7CiAgICAgICAgIGZvciAo
QmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2MpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
dmFsdWVJbmRleCA9IDA7IHZhbHVlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK3ZhbHVlSW5kZXgp
IHsKICAgICAgICAgICAgICAgICBTdGFja21hcFZhbHVlKiB2YWx1ZSA9IGJsb2NrLT5hdCh2YWx1
ZUluZGV4KS0+YXM8U3RhY2ttYXBWYWx1ZT4oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1BoaUNoaWxkcmVuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzUGhpQ2hpbGRyZW4uaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzUGhpQ2hpbGRyZW4uaAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDcgKzE2OCw3
IEBAIHB1YmxpYzoKICAgICBjb25zdCBWZWN0b3I8VmFsdWUqLCA4PiYgcGhpcygpIGNvbnN0IHsg
cmV0dXJuIG1fcGhpczsgfQogCiBwcml2YXRlOgotICAgIEluZGV4TWFwPFZhbHVlLCBWZWN0b3I8
VXBzaWxvblZhbHVlKj4+IG1fdXBzaWxvbnM7CisgICAgSW5kZXhNYXA8VmFsdWUqLCBWZWN0b3I8
VXBzaWxvblZhbHVlKj4+IG1fdXBzaWxvbnM7CiAgICAgVmVjdG9yPFZhbHVlKiwgOD4gbV9waGlz
OwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCShy
ZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBQcm9jZWR1cmU6Omlu
dmFsaWRhdGVDRkcoKQogCiB2b2lkIFByb2NlZHVyZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAogewotICAgIEluZGV4U2V0PFZhbHVlPiB2YWx1ZXNJbkJsb2NrczsKKyAgICBJbmRleFNl
dDxWYWx1ZSo+IHZhbHVlc0luQmxvY2tzOwogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiAq
dGhpcykgewogICAgICAgICBvdXQucHJpbnQoZGVlcER1bXAoKnRoaXMsIGJsb2NrKSk7CiAgICAg
ICAgIHZhbHVlc0luQmxvY2tzLmFkZEFsbCgqYmxvY2spOwpAQCAtMjQ1LDcgKzI0NSw3IEBAIHZv
aWQgUHJvY2VkdXJlOjpkZWxldGVWYWx1ZShWYWx1ZSogdmFsdWUKIAogdm9pZCBQcm9jZWR1cmU6
OmRlbGV0ZU9ycGhhbnMoKQogewotICAgIEluZGV4U2V0PFZhbHVlPiB2YWx1ZXNJbkJsb2NrczsK
KyAgICBJbmRleFNldDxWYWx1ZSo+IHZhbHVlc0luQmxvY2tzOwogICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiAqdGhpcykKICAgICAgICAgdmFsdWVzSW5CbG9ja3MuYWRkQWxsKCpibG9jayk7
CiAKQEAgLTMzMyw3ICszMzMsNyBAQCBWYWx1ZSogUHJvY2VkdXJlOjphZGRWYWx1ZUltcGwoVmFs
dWUqIHZhCiAKIHZvaWQgUHJvY2VkdXJlOjpzZXRCbG9ja09yZGVySW1wbChWZWN0b3I8QmFzaWNC
bG9jayo+JiBibG9ja3MpCiB7Ci0gICAgSW5kZXhTZXQ8QmFzaWNCbG9jaz4gYmxvY2tzU2V0Owor
ICAgIEluZGV4U2V0PEJhc2ljQmxvY2sqPiBibG9ja3NTZXQ7CiAgICAgYmxvY2tzU2V0LmFkZEFs
bChibG9ja3MpOwogCiAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6ICp0aGlzKSB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VEb3VibGVUb0Zsb2F0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VEb3VibGVUb0Zsb2F0
LmNwcAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVk
dWNlRG91YmxlVG9GbG9hdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyNCwxOCArNDI0LDE4IEBA
IHByaXZhdGU6CiAKICAgICAvLyBTZXQgb2YgYWxsIHRoZSBEb3VibGUgdmFsdWVzIHRoYXQgYXJl
IGFjdHVhbGx5IHVzZWQgYXMgRG91YmxlLgogICAgIC8vIENvbnZlcnRpbmcgYW55IG9mIHRoZW0g
dG8gRmxvYXQgd291bGQgbG9zZSBwcmVjaXNpb24uCi0gICAgSW5kZXhTZXQ8VmFsdWU+IG1fdmFs
dWVzVXNlZEFzRG91YmxlOworICAgIEluZGV4U2V0PFZhbHVlKj4gbV92YWx1ZXNVc2VkQXNEb3Vi
bGU7CiAKICAgICAvLyBTZXQgb2YgYWxsIHRoZSBQaGkgb2YgdHlwZSBEb3VibGUgdGhhdCByZWFs
bHkgY29udGFpbnMgYSBEb3VibGUuCiAgICAgLy8gQW55IERvdWJsZSBQaGkgbm90IGluIHRoZSBz
ZXQgY2FuIGJlIGNvbnZlcnRlZCB0byBGbG9hdCB3aXRob3V0IGxvc2luZyBwcmVjaXNpb24uCi0g
ICAgSW5kZXhTZXQ8VmFsdWU+IG1fcGhpc0NvbnRhaW5pbmdEb3VibGU7CisgICAgSW5kZXhTZXQ8
VmFsdWUqPiBtX3BoaXNDb250YWluaW5nRG91YmxlOwogCiAgICAgLy8gQW55IHZhbHVlIHRoYXQg
d2FzIGNvbnZlcnRlZCBmcm9tIHByb2R1Y2luZyBhIERvdWJsZSB0byBwcm9kdWNpbmcgYSBGbG9h
dC4KICAgICAvLyBUaGlzIHNldCBkb2VzIG5vdCBpbmNsdWRlIFBoaS1VcHNpbG9ucy4KLSAgICBJ
bmRleFNldDxWYWx1ZT4gbV9jb252ZXJ0ZWRWYWx1ZTsKKyAgICBJbmRleFNldDxWYWx1ZSo+IG1f
Y29udmVydGVkVmFsdWU7CiAKICAgICAvLyBBbnkgdmFsdWUgdGhhdCBwcmV2aW91c2x5IHByb2R1
Y2VkIERvdWJsZSBhbmQgbm93IHByb2R1Y2UgRmxvYXQuCi0gICAgSW5kZXhTZXQ8VmFsdWU+IG1f
Y29udmVydGVkUGhpczsKKyAgICBJbmRleFNldDxWYWx1ZSo+IG1fY29udmVydGVkUGhpczsKIH07
CiAKIHZvaWQgcHJpbnRHcmFwaElmQ29udmVydGluZyhQcm9jZWR1cmUmIHByb2NlZHVyZSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHJl
dmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVu
Z3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM5Miw3ICsyMzkyLDcgQEAgcHJpdmF0ZToKIAog
ICAgIHZvaWQga2lsbERlYWRDb2RlKCkKICAgICB7Ci0gICAgICAgIEdyYXBoTm9kZVdvcmtsaXN0
PFZhbHVlKiwgSW5kZXhTZXQ8VmFsdWU+PiB3b3JrbGlzdDsKKyAgICAgICAgR3JhcGhOb2RlV29y
a2xpc3Q8VmFsdWUqLCBJbmRleFNldDxWYWx1ZSo+PiB3b3JrbGlzdDsKICAgICAgICAgVmVjdG9y
PFVwc2lsb25WYWx1ZSosIDY0PiB1cHNpbG9uczsKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBi
bG9jayA6IG1fcHJvYykgewogICAgICAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiAqYmxvY2sp
IHsKQEAgLTI0MjksNyArMjQyOSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KIAotICAgICAgICBJbmRleFNldDxWYXJpYWJsZT4gbGl2ZVZhcmlhYmxlczsK
KyAgICAgICAgSW5kZXhTZXQ8VmFyaWFibGUqPiBsaXZlVmFyaWFibGVzOwogICAgICAgICAKICAg
ICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvYykgewogICAgICAgICAgICAgc2l6
ZV90IHNvdXJjZUluZGV4ID0gMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1NT
QUNhbGN1bGF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
U0FDYWxjdWxhdG9yLmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1NTQUNhbGN1bGF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTYsNyArMTU2LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgVmVjdG9yPERlZio+IG1fcGhpczsKICAgICB9OwogICAgIAotICAgIElu
ZGV4TWFwPEJhc2ljQmxvY2ssIEJsb2NrRGF0YT4gbV9kYXRhOworICAgIEluZGV4TWFwPEJhc2lj
QmxvY2sqLCBCbG9ja0RhdGE+IG1fZGF0YTsKIAogICAgIERvbWluYXRvcnMqIG1fZG9taW5hdG9y
cyB7IG51bGxwdHIgfTsKICAgICBQcm9jZWR1cmUmIG1fcHJvYzsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1VzZUNvdW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1VzZUNvdW50cy5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNVc2VDb3VudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ4LDcgKzQ4
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgdW5zaWduZWQgbnVtVXNpbmdJbnN0cnVjdGlvbnMgeyAw
IH07CiAgICAgfTsKICAgICAKLSAgICBJbmRleE1hcDxWYWx1ZSwgQ291bnRzPiBtX2NvdW50czsK
KyAgICBJbmRleE1hcDxWYWx1ZSosIENvdW50cz4gbV9jb3VudHM7CiB9OwogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCShyZXZp
c2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTIwLDcgKzEyMCw3IEBAIFN0YXRpY0xvY2sgY3Jhc2hMb2NrOwogCiBW
TSogdm07CiAKLXN0ZDo6dW5pcXVlX3B0cjxDb21waWxhdGlvbj4gY29tcGlsZShQcm9jZWR1cmUm
IHByb2NlZHVyZSwgdW5zaWduZWQgb3B0TGV2ZWwgPSAxKQorc3RkOjp1bmlxdWVfcHRyPENvbXBp
bGF0aW9uPiBjb21waWxlKFByb2NlZHVyZSYgcHJvY2VkdXJlLCB1bnNpZ25lZCBvcHRMZXZlbCA9
IGRlZmF1bHRPcHRMZXZlbCgpKQogewogICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPENvbXBp
bGF0aW9uPihCMzo6Y29tcGlsZSgqdm0sIHByb2NlZHVyZSwgb3B0TGV2ZWwpKTsKIH0KQEAgLTk5
MCw2ICs5OTAsNyBAQCB2b2lkIHRlc3RNdWxMb2FkVHdpY2UoKQogCiAgICAgdGVzdCgwKTsKICAg
ICB0ZXN0KDEpOworICAgIHRlc3QoMik7CiB9CiAKIHZvaWQgdGVzdE11bEFkZEFyZ3NMZWZ0KCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNC
eUdyYXBoQ29sb3JpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuY3BwCShyZXZpc2lvbiAy
MTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0
ZXJzQnlHcmFwaENvbG9yaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAog
I2lmIEVOQUJMRShCM19KSVQpCiAKICNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWly
Rml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCIKICNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIK
ICNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgiCkBA
IC0xNTg1LDYgKzE1ODYsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIG1fY29hbGVzY2luZ0NhbmRp
ZGF0ZXMuY2xlYXIoKTsKICAgICAgICAgbV93b3JrbGlzdE1vdmVzLmNsZWFyKCk7CiAKKyAgICAg
ICAgLy8gRklYTUU6IEl0IHNlZW1zIGxpa2Ugd2UgZG9uJ3QgbmVlZCB0byByZWNvbXB1dGUgbGl2
ZW5lc3MuIFdlIGp1c3QgbmVlZCB0byB1cGRhdGUgaXRzIGRhdGEKKyAgICAgICAgLy8gc3RydWN0
dXJlcyBzbyB0aGF0IGl0IGtub3dzIHRoYXQgdGhlIG5ld2x5IGludHJvZHVjZWQgdGVtcG9yYXJp
ZXMgYXJlIG5vdCBsaXZlIGF0IGFueSBiYXNpYworICAgICAgICAvLyBibG9jayBib3VuZGFyeS4g
VGhpcyBzaG91bGQgdHJpdmlhbGx5IGJlIHRydWUgZm9yIG5vdy4KICAgICAgICAgVG1wTGl2ZW5l
c3M8YmFuaz4gbGl2ZW5lc3MobV9jb2RlKTsKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9j
ayA6IG1fY29kZSkgewogICAgICAgICAgICAgdHlwZW5hbWUgVG1wTGl2ZW5lc3M8YmFuaz46Okxv
Y2FsQ2FsYyBsb2NhbENhbGMobGl2ZW5lc3MsIGJsb2NrKTsKQEAgLTE3OTgsNyArMTgwMiw3IEBA
IHB1YmxpYzoKICAgICAgICAgbV9udW1JdGVyYXRpb25zID0gMDsKICAgICAgICAgYWxsb2NhdGVP
bkJhbms8RlA+KCk7CiAKLSAgICAgICAgZml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMoKTsKKyAgICAg
ICAgZml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMobV9jb2RlKTsKIAogICAgICAgICBpZiAocmVwb3J0
U3RhdHMpCiAgICAgICAgICAgICBkYXRhTG9nKCJOdW0gaXRlcmF0aW9ucyA9ICIsIG1fbnVtSXRl
cmF0aW9ucywgIlxuIik7CkBAIC0xOTU0LDcgKzE5NTgsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcEZhc3QoWyZdIChUbXAm
IHRtcCkgewotICAgICAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkgfHwgdG1wLmlzR1Ao
KSA9PSAoYmFuayAhPSBHUCkpCisgICAgICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSB8
fCB0bXAuYmFuaygpICE9IGJhbmspCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAK
ICAgICAgICAgICAgICAgICAgICAgVG1wIGFsaWFzVG1wID0gYWxsb2NhdG9yLmdldEFsaWFzKHRt
cCk7CkBAIC0yMTY5LDkgKzIxNzMsMTIgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAgICAg
ICB0bXAgPSBtX2NvZGUubmV3VG1wKGJhbmspOwogICAgICAgICAgICAgICAgICAgICB1bnNwaWxs
YWJsZVRtcHMuYWRkKEFic29sdXRlVG1wTWFwcGVyPGJhbms+OjphYnNvbHV0ZUluZGV4KHRtcCkp
OworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT0g
QXJnOjpTY3JhdGNoKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAg
ICAgICAgICAgICAgIEFyZyBhcmcgPSBBcmc6OnN0YWNrKHN0YWNrU2xvdEVudHJ5LT52YWx1ZSk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzQW55VXNlKHJvbGUpICYmIHJvbGUgIT0g
QXJnOjpTY3JhdGNoKQorICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0FueVVzZShyb2xl
KSkKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoaW5zdEluZGV4
LCBtb3ZlLCBpbnN0Lm9yaWdpbiwgYXJnLCB0bXApOwogICAgICAgICAgICAgICAgICAgICBpZiAo
QXJnOjppc0FueURlZihyb2xlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNl
dC5pbnNlcnQoaW5zdEluZGV4ICsgMSwgbW92ZSwgaW5zdC5vcmlnaW4sIHRtcCwgYXJnKTsKQEAg
LTIxODcsNjYgKzIxOTQsNiBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQogCi0gICAgdm9p
ZCBmaXhTcGlsbHNBZnRlclRlcm1pbmFscygpCi0gICAgewotICAgICAgICAvLyBCZWNhdXNlIHRo
ZXJlIG1heSBiZSB0ZXJtaW5hbHMgdGhhdCBwcm9kdWNlIHZhbHVlcywgSVJDIG1heQotICAgICAg
ICAvLyB3YW50IHRvIHNwaWxsIHRob3NlIHRlcm1pbmFscy4gSXQnbGwgaGFwcGVuIHRvIHNwaWxs
IGl0IGFmdGVyCi0gICAgICAgIC8vIHRoZSB0ZXJtaW5hbC4gSWYgd2UgbGVmdCB0aGUgZ3JhcGgg
aW4gdGhpcyBzdGF0ZSwgaXQnZCBiZSBpbnZhbGlkCi0gICAgICAgIC8vIGJlY2F1c2UgYSB0ZXJt
aW5hbCBtdXN0IGJlIHRoZSBsYXN0IGluc3RydWN0aW9uIGluIGEgYmxvY2suCi0gICAgICAgIC8v
IFdlIGZpeCB0aGF0IGhlcmUuCi0KLSAgICAgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldCht
X2NvZGUpOwotCi0gICAgICAgIGJvb2wgYWRkZWRCbG9ja3MgPSBmYWxzZTsKLQotICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCB0
ZXJtaW5hbEluZGV4ID0gYmxvY2stPnNpemUoKTsKLSAgICAgICAgICAgIGJvb2wgZm91bmRUZXJt
aW5hbCA9IGZhbHNlOwotICAgICAgICAgICAgd2hpbGUgKHRlcm1pbmFsSW5kZXgtLSkgewotICAg
ICAgICAgICAgICAgIGlmIChibG9jay0+YXQodGVybWluYWxJbmRleCkuaXNUZXJtaW5hbCgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGZvdW5kVGVybWluYWwgPSB0cnVlOwotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBBU1NFUlRfVU5VU0VEKGZvdW5kVGVybWluYWwsIGZvdW5kVGVybWluYWwpOwotCi0gICAg
ICAgICAgICBpZiAodGVybWluYWxJbmRleCA9PSBibG9jay0+c2l6ZSgpIC0gMSkKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgLy8gVGhlcmUgbXVzdCBiZSBpbnN0cnVj
dGlvbnMgYWZ0ZXIgdGhlIHRlcm1pbmFsIGJlY2F1c2UgaXQncyBub3QgdGhlIGxhc3QgaW5zdHJ1
Y3Rpb24uCi0gICAgICAgICAgICBBU1NFUlQodGVybWluYWxJbmRleCA8IGJsb2NrLT5zaXplKCkg
LSAxKTsKLSAgICAgICAgICAgIFZlY3RvcjxJbnN0LCAxPiBpbnN0c1RvTW92ZTsKLSAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IHRlcm1pbmFsSW5kZXggKyAxOyBpIDwgYmxvY2stPnNpemUo
KTsgaSsrKQotICAgICAgICAgICAgICAgIGluc3RzVG9Nb3ZlLmFwcGVuZChibG9jay0+YXQoaSkp
OwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5zdHNUb01vdmUuc2l6ZSgpKTsKLQotICAg
ICAgICAgICAgZm9yIChGcmVxdWVudGVkQmxvY2smIGZyZXF1ZW50ZWRTdWNjZXNzb3IgOiBibG9j
ay0+c3VjY2Vzc29ycygpKSB7Ci0gICAgICAgICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29y
ID0gZnJlcXVlbnRlZFN1Y2Nlc3Nvci5ibG9jaygpOwotICAgICAgICAgICAgICAgIC8vIElmIHN1
Y2Nlc3NvcidzIG9ubHkgcHJlZGVjZXNzb3IgaXMgYmxvY2ssIHdlIGNhbiBwbGFudCB0aGUgc3Bp
bGwgaW5zaWRlCi0gICAgICAgICAgICAgICAgLy8gdGhlIHN1Y2Nlc3Nvci4gT3RoZXJ3aXNlLCB3
ZSBtdXN0IHNwbGl0IHRoZSBjcml0aWNhbCBlZGdlIGFuZCBjcmVhdGUKLSAgICAgICAgICAgICAg
ICAvLyBhIG5ldyBibG9jayBmb3IgdGhlIHNwaWxsLgotICAgICAgICAgICAgICAgIGlmIChzdWNj
ZXNzb3ItPm51bVByZWRlY2Vzc29ycygpID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgaW5z
ZXJ0aW9uU2V0Lmluc2VydEluc3RzKDAsIGluc3RzVG9Nb3ZlKTsKLSAgICAgICAgICAgICAgICAg
ICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoc3VjY2Vzc29yKTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICBhZGRlZEJsb2NrcyA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBXZSBwcm9iYWJseSB3YW50IGJldHRlciBibG9jayBvcmRlcmlu
ZyBoZXJlLgotICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBuZXdCbG9jayA9IG1fY29k
ZS5hZGRCbG9jaygpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IEluc3QmIGluc3Qg
OiBpbnN0c1RvTW92ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ld0Jsb2NrLT5hcHBlbmRJ
bnN0KGluc3QpOwotICAgICAgICAgICAgICAgICAgICBuZXdCbG9jay0+YXBwZW5kSW5zdChJbnN0
KEp1bXAsIGluc3RzVG9Nb3ZlLmxhc3QoKS5vcmlnaW4pKTsKLSAgICAgICAgICAgICAgICAgICAg
bmV3QmxvY2stPnN1Y2Nlc3NvcnMoKS5hcHBlbmQoc3VjY2Vzc29yKTsKLSAgICAgICAgICAgICAg
ICAgICAgZnJlcXVlbnRlZFN1Y2Nlc3Nvci5ibG9jaygpID0gbmV3QmxvY2s7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBibG9jay0+cmVzaXplKHRlcm1p
bmFsSW5kZXggKyAxKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhZGRlZEJsb2NrcykKLSAg
ICAgICAgICAgIG1fY29kZS5yZXNldFJlYWNoYWJpbGl0eSgpOwotICAgIH0KLQogICAgIENvZGUm
IG1fY29kZTsKICAgICBUbXBXaWR0aCBtX3RtcFdpZHRoOwogICAgIFVzZUNvdW50czxUbXA+JiBt
X3VzZUNvdW50czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2Nh
dGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdp
c3RlcnNCeUxpbmVhclNjYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjE4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmgiCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQXJnSW5saW5lcy5oIgorI2luY2x1
ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5oIgor
I2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgi
CisjaW5jbHVkZSAiQWlyTGl2ZW5lc3MuaCIKKyNpbmNsdWRlICJBaXJQYWRJbnRlcmZlcmVuY2Uu
aCIKKyNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCisjaW5jbHVkZSAiQWlyUmVnTGl2ZW5lc3Mu
aCIKKyNpbmNsdWRlICJBaXJUbXBJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+
CisjaW5jbHVkZSA8d3RmL1JhbmdlLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eyBuYW1lc3BhY2UgQWlyIHsKKworbmFtZXNwYWNlIHsKKworYm9vbCB2ZXJib3NlKCkgeyByZXR1
cm4gT3B0aW9uczo6YWlyTGluZWFyU2NhblZlcmJvc2UoKTsgfQorYm9vbCBzaG91bGRTcGlsbEV2
ZXJ5dGhpbmcoKSB7IHJldHVybiBPcHRpb25zOjphaXJMaW5lYXJTY2FuU3BpbGxzRXZlcnl0aGlu
ZygpOyB9CisKK3R5cGVkZWYgUmFuZ2U8c2l6ZV90PiBJbnRlcnZhbDsKKworc3RydWN0IFRtcERh
dGEgeworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAg
ICAgb3V0LnByaW50KCJ7aW50ZXJ2YWwgPSAiLCBpbnRlcnZhbCwgIiwgc3BpbGxlZCA9ICIsIHBv
aW50ZXJEdW1wKHNwaWxsZWQpLCAiLCBhc3NpZ25lZCA9ICIsIGFzc2lnbmVkLCAiLCBpc1Vuc3Bp
bGxhYmxlID0gIiwgaXNVbnNwaWxsYWJsZSwgIiwgYWRqYWNlbnQgPSAiLCBhZGphY2VudCwgIn0i
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCB2YWxpZGF0ZSgpCisgICAgeworICAgICAgICBSRUxF
QVNFX0FTU0VSVCghKHNwaWxsZWQgJiYgYXNzaWduZWQpKTsKKyAgICB9CisgICAgCisgICAgSW50
ZXJ2YWwgaW50ZXJ2YWw7CisgICAgU3RhY2tTbG90KiBzcGlsbGVkIHsgbnVsbHB0ciB9OworICAg
IFJlZyBhc3NpZ25lZDsKKyAgICBib29sIGlzVW5zcGlsbGFibGUgeyBmYWxzZSB9OworICAgIFJl
Z2lzdGVyU2V0IGFkamFjZW50OworfTsKKworc3RydWN0IENsb2JiZXIgeworICAgIENsb2JiZXIo
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgQ2xvYmJlcihzaXplX3QgaW5kZXgsIFJlZ2lzdGVy
U2V0IHJlZ3MpCisgICAgICAgIDogaW5kZXgoaW5kZXgpCisgICAgICAgICwgcmVncyhyZWdzKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
CisgICAgeworICAgICAgICBvdXQucHJpbnQoaW5kZXgsICI6IiwgcmVncyk7CisgICAgfQorICAg
IAorICAgIHNpemVfdCBpbmRleCB7IDAgfTsKKyAgICBSZWdpc3RlclNldCByZWdzOworfTsKKwor
Y2xhc3MgVG1wT3JDbG9iYmVyIHsKK3B1YmxpYzoKKyAgICBUbXBPckNsb2JiZXIoKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgVG1wT3JDbG9iYmVyKENsb2JiZXIqIGNsb2JiZXIpCisgICAgICAg
IDogbV92YWx1ZShiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihjbG9iYmVyKSkKKyAgICB7CisgICAg
fQorICAgIAorICAgIFRtcE9yQ2xvYmJlcihUbXAgdG1wKQorICAgICAgICA6IG1fdmFsdWUoKHN0
YXRpY19jYXN0PHVpbnRwdHJfdD4odG1wLmludGVybmFsVmFsdWUoKSkgPDwgMSkgfCAxKQorICAg
IHsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRtcE9yQ2xvYmJlciYg
b3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSA9PSBvdGhlci5tX3Zh
bHVlOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVG1wT3JDbG9iYmVy
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsK
KyAgICB9CisgICAgCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gKnRoaXMgIT0gVG1wT3JDbG9iYmVyKCk7CisgICAgfQorICAgIAorICAg
IGJvb2wgaXNUbXAoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlICYgMTsgfQorICAgIGJvb2wgaXND
bG9iYmVyKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZSAmJiAhKG1fdmFsdWUgJiAxKTsgfQorICAg
IAorICAgIFRtcCB0bXAoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzVG1wKCkpOwor
ICAgICAgICByZXR1cm4gVG1wOjp0bXBGb3JJbnRlcm5hbFZhbHVlKG1fdmFsdWUgPj4gMSk7Cisg
ICAgfQorICAgIGNvbnN0IENsb2JiZXImIGNsb2JiZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlzQ2xvYmJlcigpKTsKKyAgICAgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8Q2xvYmJl
cio+KG1fdmFsdWUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghKnRoaXMpIHsKKyAgICAgICAgICAgIG91dC5w
cmludCgiPG51bGw+Iik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
aWYgKGlzVG1wKCkpIHsKKyAgICAgICAgICAgIG91dC5wcmludCh0bXAoKSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgb3V0LnByaW50KGNsb2JiZXIoKSk7CisgICAg
fQorICAgIAorcHJpdmF0ZToKKyAgICB1aW50cHRyX3QgbV92YWx1ZSB7IDAgfTsKK307CisKK3Rl
bXBsYXRlPEJhbmsgYmFuaz4KK2NsYXNzIExpbmVhclNjYW4geworcHVibGljOgorICAgIExpbmVh
clNjYW4oQ29kZSYgY29kZSkKKyAgICAgICAgOiBtX2NvZGUoY29kZSkKKyAgICAgICAgLCBtX3N0
YXJ0SW5kZXgoY29kZS5zaXplKCkpCisgICAgICAgICwgbV9tYXAoY29kZS5udW1UbXBzKGJhbmsp
KQorICAgICAgICAsIG1faW5zZXJ0aW9uU2V0cyhjb2RlLnNpemUoKSwgY29kZSkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgcnVuKCkKKyAgICB7CisgICAgICAgIGJ1aWxkUmVnaXN0ZXJT
ZXQoKTsKKyAgICAgICAgYnVpbGRJbmRpY2VzKCk7CisgICAgICAgIGJ1aWxkSW50ZXJ2YWxzKCk7
CisgICAgICAgIGlmIChzaG91bGRTcGlsbEV2ZXJ5dGhpbmcoKSkgeworICAgICAgICAgICAgc3Bp
bGxFdmVyeXRoaW5nKCk7CisgICAgICAgICAgICBlbWl0U3BpbGxDb2RlKCk7CisgICAgICAgIH0K
KyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgcHJlcGFyZUludGVydmFscygpOworICAg
ICAgICAgICAgYXR0ZW1wdFNjYW4oKTsKKyAgICAgICAgICAgIGlmICghbV9kaWRTcGlsbCkKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGVtaXRTcGlsbENvZGUoKTsKKyAgICAg
ICAgfQorICAgICAgICBpbnNlcnRTcGlsbENvZGUoKTsKKyAgICAgICAgYXNzaWduUmVnaXN0ZXJz
KCk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICB2b2lkIGJ1aWxkUmVnaXN0ZXJTZXQoKQor
ICAgIHsKKyAgICAgICAgbV9yZWdpc3RlcnMgPSBtX2NvZGUucmVnc0luUHJpb3JpdHlPcmRlcihi
YW5rKTsKKyAgICAgICAgbV9yZWdpc3RlclNldC5zZXRBbGwobV9yZWdpc3RlcnMpOworICAgIH0K
KworICAgIHZvaWQgYnVpbGRJbmRpY2VzKCkKKyAgICB7CisgICAgICAgIHNpemVfdCBpbmRleCA9
IDA7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsKKyAgICAgICAg
ICAgIG1fc3RhcnRJbmRleFtibG9ja10gPSBpbmRleDsKKyAgICAgICAgICAgIGluZGV4ICs9IGJs
b2NrLT5zaXplKCkgKyAxOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHNpemVfdCBpbmRl
eE9mSGVhZChCYXNpY0Jsb2NrKiBibG9jaykKKyAgICB7CisgICAgICAgIHJldHVybiBtX3N0YXJ0
SW5kZXhbYmxvY2tdOworICAgIH0KKyAgICAKKyAgICBzaXplX3QgaW5kZXhPZlRhaWwoQmFzaWNC
bG9jayogYmxvY2spCisgICAgeworICAgICAgICByZXR1cm4gaW5kZXhPZkhlYWQoYmxvY2spICsg
YmxvY2stPnNpemUoKTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IGluZGV4T2YoQmFzaWNCbG9j
ayogYmxvY2ssIHVuc2lnbmVkIGluc3RJbmRleCwgQXJnOjpQaGFzZSBwaGFzZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBpbmRleE9mSGVhZChibG9jaykgKyBpbnN0SW5kZXggKyBwaGFzZTsKKyAg
ICB9CisgICAgCisgICAgSW50ZXJ2YWwgaW50ZXJ2YWwoc2l6ZV90IGluZGV4T2ZFYXJseSwgQXJn
OjpUaW1pbmcgdGltaW5nKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0aW1pbmcpIHsKKyAgICAg
ICAgY2FzZSBBcmc6Ok9ubHlFYXJseToKKyAgICAgICAgICAgIHJldHVybiBJbnRlcnZhbChpbmRl
eE9mRWFybHkpOworICAgICAgICBjYXNlIEFyZzo6T25seUxhdGU6CisgICAgICAgICAgICByZXR1
cm4gSW50ZXJ2YWwoaW5kZXhPZkVhcmx5ICsgMSk7CisgICAgICAgIGNhc2UgQXJnOjpFYXJseUFu
ZExhdGU6CisgICAgICAgICAgICByZXR1cm4gSW50ZXJ2YWwoaW5kZXhPZkVhcmx5LCBpbmRleE9m
RWFybHkgKyAyKTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuIEludGVydmFsKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgYnVpbGRJbnRl
cnZhbHMoKQorICAgIHsKKyAgICAgICAgVG1wTGl2ZW5lc3M8YmFuaz4gbGl2ZW5lc3MobV9jb2Rl
KTsKKyAgICAgICAgCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsK
KyAgICAgICAgICAgIHNpemVfdCBpbmRleE9mSGVhZCA9IHRoaXMtPmluZGV4T2ZIZWFkKGJsb2Nr
KTsKKyAgICAgICAgICAgIHNpemVfdCBpbmRleE9mVGFpbCA9IHRoaXMtPmluZGV4T2ZUYWlsKGJs
b2NrKTsKKyAgICAgICAgICAgIGZvciAoVG1wIHRtcCA6IGxpdmVuZXNzLmxpdmVBdEhlYWQoYmxv
Y2spKSB7CisgICAgICAgICAgICAgICAgaWYgKCF0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAg
ICAgICAgbV9tYXBbdG1wXS5pbnRlcnZhbCB8PSBJbnRlcnZhbChpbmRleE9mSGVhZCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBmb3IgKFRtcCB0bXAgOiBsaXZlbmVzcy5saXZlQXRUYWls
KGJsb2NrKSkgeworICAgICAgICAgICAgICAgIGlmICghdG1wLmlzUmVnKCkpCisgICAgICAgICAg
ICAgICAgICAgIG1fbWFwW3RtcF0uaW50ZXJ2YWwgfD0gSW50ZXJ2YWwoaW5kZXhPZlRhaWwpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
c3RJbmRleCA9IDA7IGluc3RJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsraW5zdEluZGV4KSB7Cisg
ICAgICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOworICAgICAg
ICAgICAgICAgIHNpemVfdCBpbmRleE9mRWFybHkgPSBpbmRleE9mSGVhZCArIGluc3RJbmRleDsK
KyAgICAgICAgICAgICAgICBpbnN0LmZvckVhY2hUbXAoCisgICAgICAgICAgICAgICAgICAgIFsm
XSAoVG1wJiB0bXAsIEFyZzo6Um9sZSByb2xlLCBCYW5rIHRtcEJhbmssIFdpZHRoKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcEJhbmsgIT0g
YmFuaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgICAgICAgICBtX21hcFt0bXBdLmludGVydmFsIHw9IGludGVydmFsKGluZGV4T2ZFYXJseSwg
QXJnOjp0aW1pbmcocm9sZSkpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgUmVnTGl2ZW5lc3M6OkxvY2FsQ2FsYyBsb2NhbENhbGMobGl2ZW5l
c3MsIGJsb2NrKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYXV0byByZWNvcmQgPSBbJl0g
KHVuc2lnbmVkIGluc3RJbmRleCkgeworICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHJlZ3Mg
PSBsb2NhbENhbGMubGl2ZSgpOworICAgICAgICAgICAgICAgIGlmIChJbnN0KiBwcmV2ID0gYmxv
Y2stPmdldChpbnN0SW5kZXggLSAxKSkgeworICAgICAgICAgICAgICAgICAgICBwcmV2LT5mb3JF
YWNoPFJlZz4oCisgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKFJlZyYgcmVnLCBBcmc6OlJv
bGUgcm9sZSwgQmFuaywgV2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
QXJnOjppc0xhdGVEZWYocm9sZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
Z3MuYWRkKHJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHByZXYtPmtpbmQub3Bjb2RlID09IFBhdGNoKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmVncy5tZXJnZShwcmV2LT5leHRyYUNsb2JiZXJlZFJlZ3MoKSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChJbnN0KiBuZXh0ID0gYmxvY2stPmdldChpbnN0
SW5kZXgpKSB7CisgICAgICAgICAgICAgICAgICAgIG5leHQtPmZvckVhY2g8UmVnPigKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFsmXSAoUmVnJiByZWcsIEFyZzo6Um9sZSByb2xlLCBCYW5rLCBX
aWR0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzRWFybHlEZWYo
cm9sZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ3MuYWRkKHJlZyk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQt
PmtpbmQub3Bjb2RlID09IFBhdGNoKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVncy5tZXJn
ZShuZXh0LT5leHRyYUVhcmx5Q2xvYmJlcmVkUmVncygpKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcmVncy5maWx0ZXIobV9yZWdpc3RlclNl
dCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHJlZ3MuaXNFbXB0eSgp
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgbV9jbG9iYmVycy5hcHBlbmQoQ2xvYmJlcihpbmRleE9mSGVhZCArIGluc3RJbmRl
eCwgcmVncykpOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmVj
b3JkKGJsb2NrLT5zaXplKCkpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXgg
PSBibG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICBsb2NhbENh
bGMuZXhlY3V0ZShpbnN0SW5kZXgpOworICAgICAgICAgICAgICAgIHJlY29yZChpbnN0SW5kZXgp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAodmVyYm9z
ZSgpKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJJbnRlcnZhbHM6XG4iKTsKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgdG1wSW5kZXggPSAwOyB0bXBJbmRleCA8IG1fY29kZS5udW1UbXBzKGJh
bmspOyArK3RtcEluZGV4KSB7CisgICAgICAgICAgICAgICAgVG1wIHRtcCA9IFRtcDo6dG1wRm9y
SW5kZXgoYmFuaywgdG1wSW5kZXgpOworICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAiLCB0
bXAsICI6ICIsIG1fbWFwW3RtcF0sICJcbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIHNpemVfdCBzb3J0aW5nSW5kZXhPZihjb25zdCBUbXBPckNsb2JiZXIm
IHRoaW5nKQorICAgIHsKKyAgICAgICAgLy8gV2Ugd2FudCBjbG9iYmVycyB0byBjb21lIGFmdGVy
IHRtcHMuCisgICAgICAgIGlmICh0aGluZy5pc1RtcCgpKQorICAgICAgICAgICAgcmV0dXJuIG1f
bWFwW3RoaW5nLnRtcCgpXS5pbnRlcnZhbC5iZWdpbigpIDw8IDE7CisgICAgICAgIHJldHVybiAo
dGhpbmcuY2xvYmJlcigpLmluZGV4IDw8IDEpIHwgMTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90
IGluZGV4T2YoY29uc3QgVG1wT3JDbG9iYmVyJiB0aGluZykKKyAgICB7CisgICAgICAgIC8vIFdl
IHdhbnQgY2xvYmJlcnMgdG8gY29tZSBhZnRlciB0bXBzLgorICAgICAgICBpZiAodGhpbmcuaXNU
bXAoKSkKKyAgICAgICAgICAgIHJldHVybiBtX21hcFt0aGluZy50bXAoKV0uaW50ZXJ2YWwuYmVn
aW4oKTsKKyAgICAgICAgcmV0dXJuIHRoaW5nLmNsb2JiZXIoKS5pbmRleDsKKyAgICB9CisgICAg
CisgICAgdm9pZCBzcGlsbEV2ZXJ5dGhpbmcoKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCB0bXBJbmRleCA9IDA7IHRtcEluZGV4IDwgbV9jb2RlLm51bVRtcHMoYmFuayk7ICsrdG1wSW5k
ZXgpCisgICAgICAgICAgICBzcGlsbChUbXA6OnRtcEZvckluZGV4KGJhbmssIHRtcEluZGV4KSk7
CisgICAgfQorICAgIAorICAgIHZvaWQgcHJlcGFyZUludGVydmFscygpCisgICAgeworICAgICAg
ICBtX2ludGVydmFscy5yZXNpemUoMCk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVk
IHRtcEluZGV4ID0gMDsgdG1wSW5kZXggPCBtX2NvZGUubnVtVG1wcyhiYW5rKTsgKyt0bXBJbmRl
eCkgeworICAgICAgICAgICAgVG1wIHRtcCA9IFRtcDo6dG1wRm9ySW5kZXgoYmFuaywgdG1wSW5k
ZXgpOworICAgICAgICAgICAgVG1wRGF0YSYgZGF0YSA9IG1fbWFwW3RtcF07CisgICAgICAgICAg
ICBpZiAoZGF0YS5zcGlsbGVkKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBkYXRhLmFzc2lnbmVkID0gUmVnKCk7CisgICAgICAgICAgICBkYXRh
LmFkamFjZW50ID0gUmVnaXN0ZXJTZXQoKTsKKyAgICAgICAgICAgIG1faW50ZXJ2YWxzLmFwcGVu
ZCh0bXApOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKENsb2JiZXImIGNsb2Ji
ZXIgOiBtX2Nsb2JiZXJzKQorICAgICAgICAgICAgbV9pbnRlcnZhbHMuYXBwZW5kKCZjbG9iYmVy
KTsKKyAgICAgICAgCisgICAgICAgIHN0ZDo6c29ydCgKKyAgICAgICAgICAgIG1faW50ZXJ2YWxz
LmJlZ2luKCksIG1faW50ZXJ2YWxzLmVuZCgpLAorICAgICAgICAgICAgWyZdIChUbXBPckNsb2Ji
ZXImIGEsIFRtcE9yQ2xvYmJlciYgYikgeworICAgICAgICAgICAgICAgIHJldHVybiBzb3J0aW5n
SW5kZXhPZihhKSA8IHNvcnRpbmdJbmRleE9mKGIpOworICAgICAgICAgICAgfSk7CisgICAgICAg
IAorICAgICAgICBpZiAodmVyYm9zZSgpKQorICAgICAgICAgICAgZGF0YUxvZygiSW50ZXJ2YWxz
OiAiLCBsaXN0RHVtcChtX2ludGVydmFscyksICJcbiIpOworICAgIH0KKyAgICAKKyAgICBUbXAg
YWRkU3BpbGxUbXBXaXRoSW50ZXJ2YWwoSW50ZXJ2YWwgaW50ZXJ2YWwpCisgICAgeworICAgICAg
ICBUbXBEYXRhIGRhdGE7CisgICAgICAgIGRhdGEuaW50ZXJ2YWwgPSBpbnRlcnZhbDsKKyAgICAg
ICAgZGF0YS5pc1Vuc3BpbGxhYmxlID0gdHJ1ZTsKKyAgICAgICAgCisgICAgICAgIFRtcCB0bXAg
PSBtX2NvZGUubmV3VG1wKGJhbmspOworICAgICAgICBtX21hcC5hcHBlbmQodG1wLCBkYXRhKTsK
KyAgICAgICAgcmV0dXJuIHRtcDsKKyAgICB9CisgICAgCisgICAgUmVnIGZpbmRGcmVlUmVnaXN0
ZXIoVG1wIHRtcCkKKyAgICB7CisgICAgICAgIGlmIChtX2FjdGl2ZS5zaXplKCkgPT0gbV9yZWdp
c3RlcnMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIFJlZygpOworICAgICAgICBUbXBEYXRh
JiBkYXRhID0gbV9tYXBbdG1wXTsKKyAgICAgICAgZm9yIChSZWcgcmVnIDogbV9yZWdpc3RlcnMp
IHsKKyAgICAgICAgICAgIGlmICghZGF0YS5hZGphY2VudC5nZXQocmVnKSAmJiAhbV9hY3RpdmVS
ZWdzLmdldChyZWcpKQorICAgICAgICAgICAgICAgIHJldHVybiByZWc7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIFJlZygpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0dGVtcHRTY2FuKCkK
KyAgICB7CisgICAgICAgIC8vIFRoaXMgaXMgbW9kZWxlZCBhZnRlciBMaW5lYXJTY2FuUmVnaXN0
ZXJBbGxvY2F0aW9uIGluIEZpZy4gMSBpbgorICAgICAgICAvLyBodHRwOi8vZGwuYWNtLm9yZy9j
aXRhdGlvbi5jZm0/aWQ9MzMwMjUwLgorCisgICAgICAgIG1fZGlkU3BpbGwgPSBmYWxzZTsKKyAg
ICAgICAgbV9hY3RpdmUuY2xlYXIoKTsKKyAgICAgICAgbV9hY3RpdmVSZWdzID0gUmVnaXN0ZXJT
ZXQoKTsKKyAgICAgICAgZm9yIChUbXBPckNsb2JiZXImIHRoaW5nIDogbV9pbnRlcnZhbHMpIHsK
KyAgICAgICAgICAgIHNpemVfdCBpbmRleCA9IGluZGV4T2YodGhpbmcpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBpZiAodmVyYm9zZSgpKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZygi
SW5kZXggIyIsIGluZGV4LCAiOiAiLCB0aGluZywgIlxuIik7CisgICAgICAgICAgICAgICAgZGF0
YUxvZygiICBBY3RpdmU6XG4iKTsKKyAgICAgICAgICAgICAgICBmb3IgKFRtcCB0bXAgOiBtX2Fj
dGl2ZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICIsIHRtcCwgIjogIiwgbV9t
YXBbdG1wXSwgIlxuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAvLyBUaGlzIGlzIEV4cGlyZU9sZEludGVydmFscyBpbiBGaWcuIDEuCisgICAgICAgICAg
ICB3aGlsZSAoIW1fYWN0aXZlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIFRtcCB0bXAg
PSBtX2FjdGl2ZS5maXJzdCgpOworICAgICAgICAgICAgICAgIFRtcERhdGEmIGVudHJ5ID0gbV9t
YXBbdG1wXTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBib29sIGV4cGlyZWQg
PSBlbnRyeS5pbnRlcnZhbC5lbmQoKSA8PSBpbmRleDsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBpZiAoIWV4cGlyZWQpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fYWN0aXZlLnJlbW92ZUZpcnN0KCk7Cisg
ICAgICAgICAgICAgICAgbV9hY3RpdmVSZWdzLnJlbW92ZShlbnRyeS5hc3NpZ25lZCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRoaXMgcGFydCBpcyBub3Qg
aW4gdGhlIHBhcGVyIHNpbmNlIHdlIGhhdmUgYSBtb3JlIHByZWNpc2UgaGFuZGxpbmcgb2YgY2xv
YmJlcnMgYW5kCisgICAgICAgICAgICAvLyBwcmVjb2xvcmVkIHJlZ2lzdGVycy4KKyAgICAgICAg
ICAgIGlmICh0aGluZy5pc0Nsb2JiZXIoKSkgeworICAgICAgICAgICAgICAgIENsb2JiZXIgY2xv
YmJlciA9IHRoaW5nLmNsb2JiZXIoKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCgh
Y2xvYmJlci5yZWdzLmlzRW1wdHkoKSk7CisgICAgICAgICAgICAgICAgZm9yIChUbXAgdG1wIDog
bV9hY3RpdmUpCisgICAgICAgICAgICAgICAgICAgIG1fbWFwW3RtcF0uYWRqYWNlbnQubWVyZ2Uo
Y2xvYmJlci5yZWdzKTsKKyAgICAgICAgICAgICAgICBSZWdpc3RlclNldCBwcm9ibGVtcyA9IG1f
YWN0aXZlUmVnczsKKyAgICAgICAgICAgICAgICBwcm9ibGVtcy5maWx0ZXIoY2xvYmJlci5yZWdz
KTsKKyAgICAgICAgICAgICAgICBpZiAoIXByb2JsZW1zLmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgICAgICAgICBtX2FjdGl2ZVJlZ3MubWVyZ2UoY2xvYmJlci5yZWdzKTsKKyAgICAgICAgICAg
ICAgICAgICAgbV9hY3RpdmUucmVtb3ZlQWxsTWF0Y2hpbmcoCisgICAgICAgICAgICAgICAgICAg
ICAgICBbJl0gKFRtcCB0bXApIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFRtcERhdGEmIGVudHJ5ID0gbV9tYXBbdG1wXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChlbnRyeS5hc3NpZ25lZCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFwcm9ibGVtcy5jb250YWlucyhlbnRyeS5hc3NpZ25lZCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBSZWcgYmV0dGVyUmVnID0gZmluZEZyZWVSZWdpc3Rlcih0bXApOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghYmV0dGVyUmVnKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNwaWxsKHRtcCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhc3NpZ25XaXRob3V0QWRkaW5nVG9BY3RpdmUodG1wLCBiZXR0ZXJS
ZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICBtX2FjdGl2ZVJlZ3MuZXhj
bHVkZShjbG9iYmVyLnJlZ3MpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgVG1wIHRt
cCA9IHRoaW5nLnRtcCgpOworICAgICAgICAgICAgVG1wRGF0YSYgZW50cnkgPSBtX21hcFt0bXBd
OworICAgICAgICAgICAgZW50cnkuYWRqYWNlbnQgPSBtX2FjdGl2ZVJlZ3M7CisgICAgICAgICAg
ICBSZWcgcmVnID0gZmluZEZyZWVSZWdpc3Rlcih0bXApOworICAgICAgICAgICAgaWYgKHJlZykg
eworICAgICAgICAgICAgICAgIGFzc2lnbih0bXAsIHJlZyk7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRoaXMg
aXMgU3BpbGxBdEludGVydmFsIGluIEZpZy4gMS4KKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KCFtX2FjdGl2ZS5pc0VtcHR5KCkpOworICAgICAgICAgICAgVG1wIHNwaWxsVG1wID0gbV9hY3Rp
dmUubGFzdCgpOworICAgICAgICAgICAgVG1wRGF0YSYgc3BpbGxFbnRyeSA9IG1fbWFwW3NwaWxs
VG1wXTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNwaWxsRW50cnkuYXNzaWduZWQpOwor
ICAgICAgICAgICAgaWYgKHNwaWxsRW50cnkuaXNVbnNwaWxsYWJsZSB8fAorICAgICAgICAgICAg
ICAgICghZW50cnkuaXNVbnNwaWxsYWJsZSAmJiBzcGlsbEVudHJ5LmludGVydmFsLmVuZCgpIDw9
IGVudHJ5LmludGVydmFsLmVuZCgpKSkgeworICAgICAgICAgICAgICAgIHNwaWxsKHRtcCk7Cisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIG1fYWN0aXZlLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgIGFzc2lnbih0bXAs
IHNwaWxsRW50cnkuYXNzaWduZWQpOworICAgICAgICAgICAgc3BpbGwoc3BpbGxUbXApOworICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgYXNzaWduV2l0aG91dEFkZGluZ1RvQWN0aXZl
KFRtcCB0bXAsIFJlZyByZWcpCisgICAgeworICAgICAgICBUbXBEYXRhJiBlbnRyeSA9IG1fbWFw
W3RtcF07CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFlbnRyeS5zcGlsbGVkKTsKKyAgICAgICAg
ZW50cnkuYXNzaWduZWQgPSByZWc7CisgICAgICAgIG1fYWN0aXZlUmVncy5hZGQocmVnKTsKKyAg
ICAgICAgZm9yIChUbXAgb3RoZXJUbXAgOiBtX2FjdGl2ZSkgeworICAgICAgICAgICAgaWYgKG90
aGVyVG1wICE9IHRtcCkKKyAgICAgICAgICAgICAgICBtX21hcFtvdGhlclRtcF0uYWRqYWNlbnQu
YWRkKHJlZyk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBhc3NpZ24oVG1wIHRt
cCwgUmVnIHJlZykKKyAgICB7CisgICAgICAgIGFzc2lnbldpdGhvdXRBZGRpbmdUb0FjdGl2ZSh0
bXAsIHJlZyk7CisgICAgICAgIGlmIChtX21hcFt0bXBdLmlzVW5zcGlsbGFibGUpIHsKKyAgICAg
ICAgICAgIC8vIFdlIHdhbnQgdGhlIHNwaWxsIHRtcHMgKHJlYWQ6IHVuc3BpbGxhYmxlIHRtcHMp
IGZpcnN0LgorICAgICAgICAgICAgbV9hY3RpdmUucHJlcGVuZCh0bXApOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1fYWN0aXZlLmFwcGVuZEFuZEJ1YmJsZSgKKyAg
ICAgICAgICAgIHRtcCwKKyAgICAgICAgICAgIFsmXSAoVG1wIG90aGVyVG1wKSAtPiBib29sIHsK
KyAgICAgICAgICAgICAgICBUbXBEYXRhJiBvdGhlckVudHJ5ID0gbV9tYXBbb3RoZXJUbXBdOwor
ICAgICAgICAgICAgICAgIGlmIChvdGhlckVudHJ5LmlzVW5zcGlsbGFibGUpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9tYXBbb3Ro
ZXJUbXBdLmludGVydmFsLmVuZCgpID4gbV9tYXBbdG1wXS5pbnRlcnZhbC5lbmQoKTsKKyAgICAg
ICAgICAgIH0pOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNwaWxsKFRtcCB0bXApCisgICAgewor
ICAgICAgICBUbXBEYXRhJiBlbnRyeSA9IG1fbWFwW3RtcF07CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKCFlbnRyeS5pc1Vuc3BpbGxhYmxlKTsKKyAgICAgICAgZW50cnkuc3BpbGxlZCA9IG1fY29k
ZS5hZGRTdGFja1Nsb3QoOCwgU3RhY2tTbG90S2luZDo6U3BpbGwpOworICAgICAgICBlbnRyeS5h
c3NpZ25lZCA9IFJlZygpOworICAgICAgICBtX2RpZFNwaWxsID0gdHJ1ZTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBlbWl0U3BpbGxDb2RlKCkKKyAgICB7CisgICAgICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBtX2NvZGUpIHsKKyAgICAgICAgICAgIHNpemVfdCBpbmRleE9mSGVhZCA9IHRo
aXMtPmluZGV4T2ZIZWFkKGJsb2NrKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5zdElu
ZGV4ID0gMDsgaW5zdEluZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbnN0SW5kZXgpIHsKKyAgICAg
ICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7CisgICAgICAgICAg
ICAgICAgdW5zaWduZWQgaW5kZXhPZkVhcmx5ID0gaW5kZXhPZkhlYWQgKyBpbnN0SW5kZXg7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gRmlyc3QgdHJ5IHRvIHNwaWxsIGRp
cmVjdGx5LgorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnN0LmFy
Z3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgQXJnJiBhcmcgPSBpbnN0LmFy
Z3NbaV07CisgICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlzVG1wKCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFyZy5pc1Jl
ZygpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChhcmcuYmFuaygpICE9IGJhbmspCisgICAgICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzcGlsbGVkID0gbV9tYXBbYXJn
LnRtcCgpXS5zcGlsbGVkOworICAgICAgICAgICAgICAgICAgICBpZiAoIXNwaWxsZWQpCisgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFp
bnN0LmFkbWl0c1N0YWNrKGkpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgICAgIGFyZyA9IEFyZzo6c3RhY2soc3BpbGxlZCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIEZhbGwgYmFjayBv
biB0aGUgaGFyZCB3YXkuCisgICAgICAgICAgICAgICAgaW5zdC5mb3JFYWNoVG1wKAorICAgICAg
ICAgICAgICAgICAgICBbJl0gKFRtcCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwgQmFuayB0bXBCYW5r
LCBXaWR0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcC5pc1JlZygpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmICh0bXBCYW5rICE9IGJhbmspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzcGlsbGVkID0gbV9tYXBbdG1w
XS5zcGlsbGVkOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzcGlsbGVkKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIE9w
Y29kZSBtb3ZlID0gYmFuayA9PSBHUCA/IE1vdmUgOiBNb3ZlRG91YmxlOworICAgICAgICAgICAg
ICAgICAgICAgICAgdG1wID0gYWRkU3BpbGxUbXBXaXRoSW50ZXJ2YWwoaW50ZXJ2YWwoaW5kZXhP
ZkVhcmx5LCBBcmc6OnRpbWluZyhyb2xlKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHJvbGUgPT0gQXJnOjpTY3JhdGNoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzQW55VXNlKHJvbGUpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0c1tibG9ja10uaW5zZXJ0KGlu
c3RJbmRleCwgbW92ZSwgaW5zdC5vcmlnaW4sIEFyZzo6c3RhY2soc3BpbGxlZCksIHRtcCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0FueURlZihyb2xlKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldHNbYmxvY2tdLmluc2VydChpbnN0SW5k
ZXggKyAxLCBtb3ZlLCBpbnN0Lm9yaWdpbiwgdG1wLCBBcmc6OnN0YWNrKHNwaWxsZWQpKTsKKyAg
ICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgdm9pZCBpbnNlcnRTcGlsbENvZGUoKQorICAgIHsKKyAgICAgICAgZm9yIChCYXNp
Y0Jsb2NrKiBibG9jayA6IG1fY29kZSkKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0c1tibG9j
a10uZXhlY3V0ZShibG9jayk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXNzaWduUmVnaXN0ZXJz
KCkKKyAgICB7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsKKyAg
ICAgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6ICpibG9jaykgeworICAgICAgICAgICAgICAgIGlu
c3QuZm9yRWFjaFRtcEZhc3QoCisgICAgICAgICAgICAgICAgICAgIFsmXSAoVG1wJiB0bXApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wLmJh
bmsoKSAhPSBiYW5rKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgUmVnIHJlZyA9IG1f
bWFwW3RtcF0uYXNzaWduZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlZykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkZhaWxlZCB0byBhbGxvY2F0ZSBy
ZWcgZm9yOiAiLCB0bXAsICJcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICB0bXAgPSBUbXAocmVnKTsKKyAgICAgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgQ29kZSYgbV9j
b2RlOworICAgIFZlY3RvcjxSZWc+IG1fcmVnaXN0ZXJzOworICAgIFJlZ2lzdGVyU2V0IG1fcmVn
aXN0ZXJTZXQ7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jayosIHNpemVfdD4gbV9zdGFydEluZGV4
OworICAgIEluZGV4TWFwPFRtcDo6SW5kZXhlZDxiYW5rPiwgVG1wRGF0YT4gbV9tYXA7CisgICAg
SW5kZXhNYXA8QmFzaWNCbG9jayosIEluc2VydGlvblNldD4gbV9pbnNlcnRpb25TZXRzOworICAg
IFZlY3RvcjxDbG9iYmVyPiBtX2Nsb2JiZXJzOyAvLyBBZnRlciB3ZSBhbGxvY2F0ZSB0aGlzLCB3
ZSBoYXBwaWx5IHBvaW50IHBvaW50ZXJzIGludG8gaXQuCisgICAgVmVjdG9yPFRtcE9yQ2xvYmJl
cj4gbV9pbnRlcnZhbHM7CisgICAgRGVxdWU8VG1wPiBtX2FjdGl2ZTsKKyAgICBSZWdpc3RlclNl
dCBtX2FjdGl2ZVJlZ3M7CisgICAgYm9vbCBtX2RpZFNwaWxsIHsgZmFsc2UgfTsKK307CisKK3Rl
bXBsYXRlPEJhbmsgYmFuaz4KK3ZvaWQgcnVuTGluZWFyU2NhbihDb2RlJiBjb2RlKQoreworICAg
IGlmICh2ZXJib3NlKCkpCisgICAgICAgIGRhdGFMb2coIkFpciBiZWZvcmUgbGluZWFyIHNjYW4g
Zm9yICIsIGJhbmssICI6XG4iLCBjb2RlKTsKKyAgICBMaW5lYXJTY2FuPGJhbms+IGxpbmVhclNj
YW4oY29kZSk7CisgICAgbGluZWFyU2Nhbi5ydW4oKTsKKyAgICBpZiAodmVyYm9zZSgpKQorICAg
ICAgICBkYXRhTG9nKCJBaXIgYWZ0ZXIgbGluZWFyIHNjYW4gZm9yICIsIGJhbmssICI6XG4iLCBj
b2RlKTsKK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgYWxsb2NhdGVSZWdp
c3RlcnNCeUxpbmVhclNjYW4oQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2Nv
cGUoY29kZSwgImFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuIik7CisgICAgcGFkSW50ZXJm
ZXJlbmNlKGNvZGUpOworICAgIHJ1bkxpbmVhclNjYW48RlA+KGNvZGUpOworICAgIHJ1bkxpbmVh
clNjYW48R1A+KGNvZGUpOworICAgIGZpeFNwaWxsc0FmdGVyVGVybWluYWxzKGNvZGUpOworfQor
Cit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lz
dGVyc0J5TGluZWFyU2Nhbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5l
YXJTY2FuLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KEIzX0pJVCkKKworI2luY2x1ZGUgIkNQVS5oIgorI2luY2x1ZGUgIk9wdGlvbnMuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2Rl
OworCisvLyBUaGlzIGltcGxlbWVudHMgdGhlIFBvbGV0dG8gYW5kIFNhcmtlciByZWdpc3RlciBh
bGxvY2F0b3IgY2FsbGVkICJsaW5lYXIgc2NhbiI6CisvLyBodHRwOi8vZGwuYWNtLm9yZy9jaXRh
dGlvbi5jZm0/aWQ9MzMwMjUwCisvLworLy8gVGhpcyBpcyBub3QgQWlyJ3MgcHJpbWFyeSByZWdp
c3RlciBhbGxvY2F0b3IuIFdlIHVzZSBpdCBvbmx5IHdoZW4gcnVubmluZyBhdCBvcHRMZXZlbD0w
LiBUaGF0J3Mgbm90CisvLyB0aGUgZGVmYXVsdCBsZXZlbC4gVGhpcyByZWdpc3RlciBhbGxvY2F0
b3IgaXMgb3B0aW1pemVkIHByaW1hcmlseSBmb3IgcnVubmluZyBxdWlja2x5LiBJdCdzIGV4cGVj
dGVkCisvLyB0aGF0IGltcHJvdmVtZW50cyB0byB0aGlzIHJlZ2lzdGVyIGFsbG9jYXRvciBzaG91
bGQgZm9jdXMgcHJpbWFyaWx5IG9uIGltcHJvdmluZyBpdHMgZXhlY3V0aW9uIHRpbWUKKy8vIHdp
dGhvdXQgbXVjaCByZWdhcmQgZm9yIHRoZSBxdWFsaXR5IG9mIGdlbmVyYXRlZCBjb2RlLgorLy8K
Ky8vIEZvciBBaXIncyBwcmltYXJ5IHJlZ2lzdGVyIGFsbG9jYXRvciwgc2VlIEFpckFsbG9jYXRl
UmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmh8Y3BwLgordm9pZCBhbGxvY2F0ZVJlZ2lzdGVyc0J5
TGluZWFyU2NhbihDb2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckFsbG9jYXRlU3RhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE2MSw3ICsxNjEsNyBAQCB2b2lkIGFsbG9jYXRlU3RhY2soQ29kZSYgY29kZSkK
IAogICAgIC8vIE5vdyB3ZSBoYW5kbGUgdGhlIHNwaWxsIHNsb3RzLgogICAgIFN0YWNrU2xvdExp
dmVuZXNzIGxpdmVuZXNzKGNvZGUpOwotICAgIEluZGV4TWFwPFN0YWNrU2xvdCwgSGFzaFNldDxT
dGFja1Nsb3QqPj4gaW50ZXJmZXJlbmNlKGNvZGUuc3RhY2tTbG90cygpLnNpemUoKSk7CisgICAg
SW5kZXhNYXA8U3RhY2tTbG90KiwgSGFzaFNldDxTdGFja1Nsb3QqPj4gaW50ZXJmZXJlbmNlKGNv
ZGUuc3RhY2tTbG90cygpLnNpemUoKSk7CiAgICAgVmVjdG9yPFN0YWNrU2xvdCo+IHNsb3RzOwog
CiAgICAgLy8gV2Ugd2lsbCBwZXJmb3JtIHNvbWUgc3BpbGwgY29hbGVzY2luZy4gVG8gbWFrZSB0
aGF0IGVmZmVjdGl2ZSwgd2UgbmVlZCB0byBiZSBhYmxlIHRvIGlkZW50aWZ5CkBAIC0zMDksNyAr
MzA5LDcgQEAgdm9pZCBhbGxvY2F0ZVN0YWNrKENvZGUmIGNvZGUpCiAgICAgICAgICAgICByZXR1
cm4gYS5mcmVxdWVuY3kgPiBiLmZyZXF1ZW5jeTsKICAgICAgICAgfSk7CiAgICAgCi0gICAgSW5k
ZXhNYXA8U3RhY2tTbG90LCBTdGFja1Nsb3QqPiByZW1hcHBlZFN0YWNrU2xvdHMoY29kZS5zdGFj
a1Nsb3RzKCkuc2l6ZSgpKTsKKyAgICBJbmRleE1hcDxTdGFja1Nsb3QqLCBTdGFja1Nsb3QqPiBy
ZW1hcHBlZFN0YWNrU2xvdHMoY29kZS5zdGFja1Nsb3RzKCkuc2l6ZSgpKTsKICAgICBhdXRvIHJl
bWFwID0gWyZdIChTdGFja1Nsb3QqIHNsb3QpIC0+IFN0YWNrU2xvdCogewogICAgICAgICBpZiAo
IXNsb3QpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckFyZy5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgyLDYgKzI4
MiwzNyBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQXJnCiAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAordm9pZCBwcmludEludGVybmFsKFByaW50
U3RyZWFtJiBvdXQsIEFyZzo6UGhhc2UgcGhhc2UpCit7CisgICAgc3dpdGNoIChwaGFzZSkgewor
ICAgIGNhc2UgQXJnOjpFYXJseToKKyAgICAgICAgb3V0LnByaW50KCJFYXJseSIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBBcmc6OkxhdGU6CisgICAgICAgIG91dC5wcmludCgiTGF0ZSIp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEFyZzo6VGlt
aW5nIHRpbWluZykKK3sKKyAgICBzd2l0Y2ggKHRpbWluZykgeworICAgIGNhc2UgQXJnOjpPbmx5
RWFybHk6CisgICAgICAgIG91dC5wcmludCgiT25seUVhcmx5Iik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEFyZzo6T25seUxhdGU6CisgICAgICAgIG91dC5wcmludCgiT25seUxhdGUiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJnOjpFYXJseUFuZExhdGU6CisgICAgICAgIG91
dC5wcmludCgiRWFybHlBbmRMYXRlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCiB2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mIG91dCwgQXJnOjpSb2xlIHJvbGUpCiB7CiAgICAgc3dpdGNoIChyb2xlKSB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHJldmlzaW9uIDIxNDQyNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHdvcmtpbmcgY29weSkK
QEAgLTkyLDYgKzkyLDE3IEBAIHB1YmxpYzoKICAgICAgICAgQ29sZCwKICAgICAgICAgV2FybQog
ICAgIH07CisgICAgCisgICAgZW51bSBQaGFzZSA6IGludDhfdCB7CisgICAgICAgIEVhcmx5LAor
ICAgICAgICBMYXRlCisgICAgfTsKKyAgICAKKyAgICBlbnVtIFRpbWluZyA6IGludDhfdCB7Cisg
ICAgICAgIE9ubHlFYXJseSwKKyAgICAgICAgT25seUxhdGUsCisgICAgICAgIEVhcmx5QW5kTGF0
ZQorICAgIH07CiAKICAgICBlbnVtIFJvbGUgOiBpbnQ4X3QgewogICAgICAgICAvLyBVc2UgbWVh
bnMgdGhhdCB0aGUgSW5zdCB3aWxsIHJlYWQgZnJvbSB0aGlzIHZhbHVlIGJlZm9yZSBkb2luZyBh
bnl0aGluZyBlbHNlLgpAQCAtMjUzLDcgKzI2NCw4MiBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICByZXR1cm4gaXNDb2xkVXNlKHJvbGUpID8gQ29sZCA6IFdhcm07CiAgICAgfQotCisgICAgCisg
ICAgc3RhdGljIGJvb2wgYWN0aXZlQXQoUm9sZSByb2xlLCBQaGFzZSBwaGFzZSkKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAocm9sZSkgeworICAgICAgICBjYXNlIFVzZToKKyAgICAgICAgY2FzZSBD
b2xkVXNlOgorICAgICAgICBjYXNlIEVhcmx5RGVmOgorICAgICAgICBjYXNlIEVhcmx5WkRlZjoK
KyAgICAgICAgY2FzZSBVc2VBZGRyOgorICAgICAgICAgICAgcmV0dXJuIHBoYXNlID09IEVhcmx5
OworICAgICAgICBjYXNlIExhdGVVc2U6CisgICAgICAgIGNhc2UgTGF0ZUNvbGRVc2U6CisgICAg
ICAgIGNhc2UgRGVmOgorICAgICAgICBjYXNlIFpEZWY6CisgICAgICAgICAgICByZXR1cm4gcGhh
c2UgPT0gTGF0ZTsKKyAgICAgICAgY2FzZSBVc2VEZWY6CisgICAgICAgIGNhc2UgVXNlWkRlZjoK
KyAgICAgICAgY2FzZSBTY3JhdGNoOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIHN0YXRp
YyBib29sIGFjdGl2ZUF0KFRpbWluZyB0aW1pbmcsIFBoYXNlIHBoYXNlKQorICAgIHsKKyAgICAg
ICAgc3dpdGNoICh0aW1pbmcpIHsKKyAgICAgICAgY2FzZSBPbmx5RWFybHk6CisgICAgICAgICAg
ICByZXR1cm4gcGhhc2UgPT0gRWFybHk7CisgICAgICAgIGNhc2UgT25seUxhdGU6CisgICAgICAg
ICAgICByZXR1cm4gcGhhc2UgPT0gTGF0ZTsKKyAgICAgICAgY2FzZSBFYXJseUFuZExhdGU6Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFRpbWluZyB0aW1pbmcoUm9sZSByb2xl
KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChyb2xlKSB7CisgICAgICAgIGNhc2UgVXNlOgorICAg
ICAgICBjYXNlIENvbGRVc2U6CisgICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAgIGNhc2Ug
RWFybHlaRGVmOgorICAgICAgICBjYXNlIFVzZUFkZHI6CisgICAgICAgICAgICByZXR1cm4gT25s
eUVhcmx5OworICAgICAgICBjYXNlIExhdGVVc2U6CisgICAgICAgIGNhc2UgTGF0ZUNvbGRVc2U6
CisgICAgICAgIGNhc2UgRGVmOgorICAgICAgICBjYXNlIFpEZWY6CisgICAgICAgICAgICByZXR1
cm4gT25seUxhdGU7CisgICAgICAgIGNhc2UgVXNlRGVmOgorICAgICAgICBjYXNlIFVzZVpEZWY6
CisgICAgICAgIGNhc2UgU2NyYXRjaDoKKyAgICAgICAgICAgIHJldHVybiBFYXJseUFuZExhdGU7
CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgc3RhdGljIHZvaWQgZm9yRWFjaFBoYXNl
KFRpbWluZyB0aW1pbmcsIGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgeworICAgICAgICBpZiAoYWN0
aXZlQXQodGltaW5nLCBFYXJseSkpCisgICAgICAgICAgICBmdW5jKEVhcmx5KTsKKyAgICAgICAg
aWYgKGFjdGl2ZUF0KHRpbWluZywgTGF0ZSkpCisgICAgICAgICAgICBmdW5jKExhdGUpOworICAg
IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIHN0YXRpYyB2b2lkIGZv
ckVhY2hQaGFzZShSb2xlIHJvbGUsIGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgeworICAgICAgICBp
ZiAoYWN0aXZlQXQocm9sZSwgRWFybHkpKQorICAgICAgICAgICAgZnVuYyhFYXJseSk7CisgICAg
ICAgIGlmIChhY3RpdmVBdChyb2xlLCBMYXRlKSkKKyAgICAgICAgICAgIGZ1bmMoTGF0ZSk7Cisg
ICAgfQorICAgIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgUm9sZSBpbXBsaWVzIHRoYXQg
dGhlIEluc3Qgd2lsbCBVc2UgdGhlIEFyZyBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZS4KICAg
ICBzdGF0aWMgYm9vbCBpc0Vhcmx5VXNlKFJvbGUgcm9sZSkKICAgICB7CkBAIC0xMzU0LDYgKzE0
NDAsOCBAQCBuYW1lc3BhY2UgV1RGIHsKIAogSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6QWlyOjpBcmc6OktpbmQpOwogSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6QWlyOjpB
cmc6OlRlbXBlcmF0dXJlKTsKK0pTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJpbnRJbnRlcm5hbChQ
cmludFN0cmVhbSYsIEpTQzo6QjM6OkFpcjo6QXJnOjpQaGFzZSk7CitKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpBaXI6OkFyZzo6VGlt
aW5nKTsKIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYs
IEpTQzo6QjM6OkFpcjo6QXJnOjpSb2xlKTsKIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJpbnRJ
bnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OkFpcjo6QXJnOjpTaWduZWRuZXNzKTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja1dvcmtsaXN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja1dvcmtsaXN0
LmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
QmxvY2tXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewogCi10eXBlZGVmIEdyYXBoTm9k
ZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrPj4gQmxvY2tXb3JrbGlz
dDsKK3R5cGVkZWYgR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2lj
QmxvY2sqPj4gQmxvY2tXb3JrbGlzdDsKIAogLy8gV2hlbiB5b3Ugc2F5IEJsb2NrV2l0aDxpbnQ+
IHlvdSBzaG91bGQgcmVhZCBpdCBhcyAiYmxvY2sgd2l0aCBhbiBpbnQiLgogdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gdXNpbmcgQmxvY2tXaXRoID0gR3JhcGhOb2RlV2l0aDxCYXNpY0Jsb2NrKiwgVD47
CkBAIC00MSwxMSArNDEsMTEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcgQmxvY2tXaXRo
ID0gRwogLy8gcGVybWl0cyBmb3JjaWJseSBlbnF1ZXVlaW5nIHRoaW5ncyBldmVuIGlmIHRoZSBi
bG9jayBoYXMgYWxyZWFkeSBiZWVuIHNlZW4uIEl0J3MgdXNlZnVsIGZvcgogLy8gdGhpbmdzIGxp
a2UgYnVpbGRpbmcgYSBzcGFubmluZyB0cmVlLCBpbiB3aGljaCBjYXNlIFQgKHRoZSBhdXhpbGlh
cnkgcGF5bG9hZCkgd291bGQgYmUgdGhlCiAvLyBzdWNjZXNzb3IgaW5kZXguCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPiB1c2luZyBFeHRlbmRlZEJsb2NrV29ya2xpc3QgPSBFeHRlbmRlZEdyYXBoTm9k
ZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBULCBJbmRleFNldDxCYXNpY0Jsb2NrPj47Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiB1c2luZyBFeHRlbmRlZEJsb2NrV29ya2xpc3QgPSBFeHRlbmRlZEdyYXBo
Tm9kZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBULCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+OwogCiB0
eXBlZGVmIEdyYXBoTm9kZVdpdGhPcmRlcjxCYXNpY0Jsb2NrKj4gQmxvY2tXaXRoT3JkZXI7CiAK
LXR5cGVkZWYgUG9zdE9yZGVyR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0
PEJhc2ljQmxvY2s+PiBQb3N0T3JkZXJCbG9ja1dvcmtsaXN0OwordHlwZWRlZiBQb3N0T3JkZXJH
cmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jayo+PiBQb3N0
T3JkZXJCbG9ja1dvcmtsaXN0OwogCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0ZHLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDRkcuaAkocmV2aXNpb24gMjE0NDI3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDRkcuaAkod29ya2luZyBjb3B5
KQpAQCAtMzksOCArMzksOCBAQCBjbGFzcyBDRkcgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogcHVibGljOgogICAgIHR5cGVkZWYgQmFzaWNCbG9jayogTm9kZTsKLSAgICB0eXBlZGVm
IEluZGV4U2V0PEJhc2ljQmxvY2s+IFNldDsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2lu
ZyBNYXAgPSBJbmRleE1hcDxCYXNpY0Jsb2NrLCBUPjsKKyAgICB0eXBlZGVmIEluZGV4U2V0PEJh
c2ljQmxvY2sqPiBTZXQ7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcgTWFwID0gSW5k
ZXhNYXA8QmFzaWNCbG9jayosIFQ+OwogICAgIHR5cGVkZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCA0
PiBMaXN0OwogCiAgICAgQ0ZHKENvZGUmIGNvZGUpCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoK
ICAgICBOb2RlIHJvb3QoKSB7IHJldHVybiBtX2NvZGVbMF07IH0KIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+Ci0gICAgTWFwPFQ+IG5ld01hcCgpIHsgcmV0dXJuIEluZGV4TWFwPEpTQzo6QjM6
OkFpcjo6QmFzaWNCbG9jaywgVD4obV9jb2RlLnNpemUoKSk7IH0KKyAgICBNYXA8VD4gbmV3TWFw
KCkgeyByZXR1cm4gSW5kZXhNYXA8SlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrKiwgVD4obV9jb2Rl
LnNpemUoKSk7IH0KIAogICAgIFN1Y2Nlc3NvckNvbGxlY3Rpb248QmFzaWNCbG9jaywgQmFzaWNC
bG9jazo6U3VjY2Vzc29yTGlzdD4gc3VjY2Vzc29ycyhOb2RlIG5vZGUpIHsgcmV0dXJuIG5vZGUt
PnN1Y2Nlc3NvckJsb2NrcygpOyB9CiAgICAgQmFzaWNCbG9jazo6UHJlZGVjZXNzb3JMaXN0JiBw
cmVkZWNlc3NvcnMoTm9kZSBub2RlKSB7IHJldHVybiBub2RlLT5wcmVkZWNlc3NvcnMoKTsgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbGltaW5hdGVEZWFkQ29kZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbGltaW5h
dGVEZWFkQ29kZS5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyRWxpbWluYXRlRGVhZENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3
ICs0MCw3IEBAIGJvb2wgZWxpbWluYXRlRGVhZENvZGUoQ29kZSYgY29kZSkKICAgICBQaGFzZVNj
b3BlIHBoYXNlU2NvcGUoY29kZSwgImVsaW1pbmF0ZURlYWRDb2RlIik7CiAKICAgICBIYXNoU2V0
PFRtcD4gbGl2ZVRtcHM7Ci0gICAgSW5kZXhTZXQ8U3RhY2tTbG90PiBsaXZlU3RhY2tTbG90czsK
KyAgICBJbmRleFNldDxTdGFja1Nsb3QqPiBsaXZlU3RhY2tTbG90czsKICAgICBib29sIGNoYW5n
ZWQ7CiAKICAgICBhdXRvIGlzQXJnTGl2ZSA9IFsmXSAoY29uc3QgQXJnJiBhcmcpIC0+IGJvb2wg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhPYnZpb3VzU3BpbGxz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeE9i
dmlvdXNTcGlsbHMuY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckZpeE9idmlvdXNTcGlsbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NDcs
NyArNTQ3LDcgQEAgcHJpdmF0ZToKICAgICB9OwogCiAgICAgQ29kZSYgbV9jb2RlOwotICAgIElu
ZGV4TWFwPEJhc2ljQmxvY2ssIFN0YXRlPiBtX2F0SGVhZDsKKyAgICBJbmRleE1hcDxCYXNpY0Js
b2NrKiwgU3RhdGU+IG1fYXRIZWFkOwogICAgIFN0YXRlIG1fc3RhdGU7CiAgICAgQmFzaWNCbG9j
ayogbV9ibG9jayB7IG51bGxwdHIgfTsKICAgICB1bnNpZ25lZCBtX2luc3RJbmRleCB7IDAgfTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4UGFydGlhbFJlZ2lzdGVy
U3RhbGxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckZpeFBhcnRpYWxSZWdpc3RlclN0YWxscy5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTU1LDEwICsxNTUsMTAgQEAgdm9pZCBmaXhQYXJ0aWFsUmVnaXN0
ZXJTdGFsbHMoQ29kZSYgY29kZQogCiAgICAgLy8gRm9yIGVhY2ggYmxvY2ssIHRoaXMgcHJvdmlk
ZXMgdGhlIGRpc3RhbmNlIHRvIHRoZSBsYXN0IGluc3RydWN0aW9uIHNldHRpbmcgZWFjaCByZWdp
c3RlcgogICAgIC8vIG9uIGJsb2NrICplbnRyeSouCi0gICAgSW5kZXhNYXA8QmFzaWNCbG9jaywg
RlBEZWZEaXN0YW5jZT4gbGFzdERlZkRpc3RhbmNlKGNvZGUuc2l6ZSgpKTsKKyAgICBJbmRleE1h
cDxCYXNpY0Jsb2NrKiwgRlBEZWZEaXN0YW5jZT4gbGFzdERlZkRpc3RhbmNlKGNvZGUuc2l6ZSgp
KTsKIAogICAgIC8vIEJsb2NrcyB3aXRoIGRpcnR5IGRpc3RhbmNlIGF0IGhlYWQuCi0gICAgSW5k
ZXhTZXQ8QmFzaWNCbG9jaz4gZGlydHk7CisgICAgSW5kZXhTZXQ8QmFzaWNCbG9jayo+IGRpcnR5
OwogCiAgICAgLy8gRmlyc3QsIHdlIGNvbXB1dGUgdGhlIGxvY2FsIGRpc3RhbmNlIGZvciBlYWNo
IGJsb2NrIGFuZCBwdXNoIGl0IHRvIHRoZSBzdWNjZXNzb3JzLgogICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBjb2RlKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmNwcAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeFNwaWxsc0FmdGVyVGVy
bWluYWxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkFpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmgiCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQWlyQmxvY2tJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJBaXJDb2Rl
LmgiCisjaW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQWlySW5zdElubGlu
ZXMuaCIKKyNpbmNsdWRlICJBaXJUbXBJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBmaXhTcGlsbHNBZnRlclRlcm1pbmFs
cyhDb2RlJiBjb2RlKQoreworICAgIC8vIEJlY2F1c2UgdGhlcmUgbWF5IGJlIHRlcm1pbmFscyB0
aGF0IHByb2R1Y2UgdmFsdWVzLCBJUkMgbWF5CisgICAgLy8gd2FudCB0byBzcGlsbCB0aG9zZSB0
ZXJtaW5hbHMuIEl0J2xsIGhhcHBlbiB0byBzcGlsbCBpdCBhZnRlcgorICAgIC8vIHRoZSB0ZXJt
aW5hbC4gSWYgd2UgbGVmdCB0aGUgZ3JhcGggaW4gdGhpcyBzdGF0ZSwgaXQnZCBiZSBpbnZhbGlk
CisgICAgLy8gYmVjYXVzZSBhIHRlcm1pbmFsIG11c3QgYmUgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24g
aW4gYSBibG9jay4KKyAgICAvLyBXZSBmaXggdGhhdCBoZXJlLgorCisgICAgQmxvY2tJbnNlcnRp
b25TZXQgYmxvY2tJbnNlcnRpb25TZXQoY29kZSk7CisgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlv
blNldChjb2RlKTsKKworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAg
ICAgIHVuc2lnbmVkIHRlcm1pbmFsSW5kZXggPSBibG9jay0+c2l6ZSgpOworICAgICAgICBib29s
IGZvdW5kVGVybWluYWwgPSBmYWxzZTsKKyAgICAgICAgd2hpbGUgKHRlcm1pbmFsSW5kZXgtLSkg
eworICAgICAgICAgICAgaWYgKGJsb2NrLT5hdCh0ZXJtaW5hbEluZGV4KS5pc1Rlcm1pbmFsKCkp
IHsKKyAgICAgICAgICAgICAgICBmb3VuZFRlcm1pbmFsID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfVU5VU0VE
KGZvdW5kVGVybWluYWwsIGZvdW5kVGVybWluYWwpOworCisgICAgICAgIGlmICh0ZXJtaW5hbElu
ZGV4ID09IGJsb2NrLT5zaXplKCkgLSAxKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgLy8gVGhlcmUgbXVzdCBiZSBpbnN0cnVjdGlvbnMgYWZ0ZXIgdGhlIHRlcm1pbmFsIGJlY2F1
c2UgaXQncyBub3QgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24uCisgICAgICAgIEFTU0VSVCh0ZXJtaW5h
bEluZGV4IDwgYmxvY2stPnNpemUoKSAtIDEpOworICAgICAgICBWZWN0b3I8SW5zdCwgMT4gaW5z
dHNUb01vdmU7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHRlcm1pbmFsSW5kZXggKyAxOyBp
IDwgYmxvY2stPnNpemUoKTsgaSsrKQorICAgICAgICAgICAgaW5zdHNUb01vdmUuYXBwZW5kKGJs
b2NrLT5hdChpKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluc3RzVG9Nb3ZlLnNpemUoKSk7
CisKKyAgICAgICAgZm9yIChGcmVxdWVudGVkQmxvY2smIGZyZXF1ZW50ZWRTdWNjZXNzb3IgOiBi
bG9jay0+c3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3Ig
PSBmcmVxdWVudGVkU3VjY2Vzc29yLmJsb2NrKCk7CisgICAgICAgICAgICAvLyBJZiBzdWNjZXNz
b3IncyBvbmx5IHByZWRlY2Vzc29yIGlzIGJsb2NrLCB3ZSBjYW4gcGxhbnQgdGhlIHNwaWxsIGlu
c2lkZQorICAgICAgICAgICAgLy8gdGhlIHN1Y2Nlc3Nvci4gT3RoZXJ3aXNlLCB3ZSBtdXN0IHNw
bGl0IHRoZSBjcml0aWNhbCBlZGdlIGFuZCBjcmVhdGUKKyAgICAgICAgICAgIC8vIGEgbmV3IGJs
b2NrIGZvciB0aGUgc3BpbGwuCisgICAgICAgICAgICBpZiAoc3VjY2Vzc29yLT5udW1QcmVkZWNl
c3NvcnMoKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydEluc3Rz
KDAsIGluc3RzVG9Nb3ZlKTsKKyAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShz
dWNjZXNzb3IpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBCYXNpY0Js
b2NrKiBuZXdCbG9jayA9IGJsb2NrSW5zZXJ0aW9uU2V0Lmluc2VydEJlZm9yZShzdWNjZXNzb3Is
IHN1Y2Nlc3Nvci0+ZnJlcXVlbmN5KCkpOworICAgICAgICAgICAgICAgIGZvciAoY29uc3QgSW5z
dCYgaW5zdCA6IGluc3RzVG9Nb3ZlKQorICAgICAgICAgICAgICAgICAgICBuZXdCbG9jay0+YXBw
ZW5kSW5zdChpbnN0KTsKKyAgICAgICAgICAgICAgICBuZXdCbG9jay0+YXBwZW5kSW5zdChJbnN0
KEp1bXAsIGluc3RzVG9Nb3ZlLmxhc3QoKS5vcmlnaW4pKTsKKyAgICAgICAgICAgICAgICBuZXdC
bG9jay0+c3VjY2Vzc29ycygpLmFwcGVuZChzdWNjZXNzb3IpOworICAgICAgICAgICAgICAgIGZy
ZXF1ZW50ZWRTdWNjZXNzb3IuYmxvY2soKSA9IG5ld0Jsb2NrOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgYmxvY2stPnJlc2l6ZSh0ZXJtaW5hbEluZGV4ICsgMSk7CisgICAg
fQorCisgICAgaWYgKGJsb2NrSW5zZXJ0aW9uU2V0LmV4ZWN1dGUoKSkKKyAgICAgICAgY29kZS5y
ZXNldFJlYWNoYWJpbGl0eSgpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWly
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5oCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4U3BpbGxz
QWZ0ZXJUZXJtaW5hbHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNw
YWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKKy8vIEJlY2F1c2UgdGhlcmUgbWF5IGJlIHRlcm1p
bmFscyB0aGF0IHByb2R1Y2UgdmFsdWVzLCB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yIG1heQorLy8g
d2FudCB0byBzcGlsbCB0aG9zZSB0ZXJtaW5hbHMuIEl0J2xsIGhhcHBlbiB0byBzcGlsbCBpdCBh
ZnRlcgorLy8gdGhlIHRlcm1pbmFsLiBJZiB3ZSBsZWZ0IHRoZSBncmFwaCBpbiB0aGlzIHN0YXRl
LCBpdCdkIGJlIGludmFsaWQKKy8vIGJlY2F1c2UgYSB0ZXJtaW5hbCBtdXN0IGJlIHRoZSBsYXN0
IGluc3RydWN0aW9uIGluIGEgYmxvY2suCisvLyBXZSBmaXggdGhhdCBoZXJlLgordm9pZCBmaXhT
cGlsbHNBZnRlclRlcm1pbmFscyhDb2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
OjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShCM19KSVQpCiAKICNpbmNsdWRlICJBaXJB
bGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5oIgorI2luY2x1ZGUgIkFpckFsbG9jYXRl
UmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmgiCiAjaW5jbHVkZSAiQWlyQWxsb2NhdGVTdGFjay5oIgog
I2luY2x1ZGUgIkFpckNvZGUuaCIKICNpbmNsdWRlICJBaXJFbGltaW5hdGVEZWFkQ29kZS5oIgpA
QCAtNTcsNyArNTgsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNw
YWNlIEFpciB7CiAKLXZvaWQgcHJlcGFyZUZvckdlbmVyYXRpb24oQ29kZSYgY29kZSkKK3ZvaWQg
cHJlcGFyZUZvckdlbmVyYXRpb24oQ29kZSYgY29kZSwgdW5zaWduZWQgb3B0TGV2ZWwpCiB7CiAg
ICAgVGltaW5nU2NvcGUgdGltaW5nU2NvcGUoIkFpcjo6cHJlcGFyZUZvckdlbmVyYXRpb24iKTsK
ICAgICAKQEAgLTg5LDE4ICs5MCwyMiBAQCB2b2lkIHByZXBhcmVGb3JHZW5lcmF0aW9uKENvZGUm
IGNvZGUpCiAgICAgLy8gRm9yIGRlYnVnZ2luZywgeW91IGNhbiB1c2Ugc3BpbGxFdmVyeXRoaW5n
KCkgdG8gcHV0IGV2ZXJ5dGhpbmcgdG8gdGhlIHN0YWNrIGJldHdlZW4gZWFjaCBJbnN0LgogICAg
IGlmIChPcHRpb25zOjphaXJTcGlsbHNFdmVyeXRoaW5nKCkpCiAgICAgICAgIHNwaWxsRXZlcnl0
aGluZyhjb2RlKTsKLSAgICBlbHNlCisgICAgZWxzZSBpZiAob3B0TGV2ZWwgPj0gMiAmJiBmYWxz
ZSkgLy8gT09QUyEhIFRoaXMgd2FzIGp1c3QgZm9yIHRlc3RpbmcuCiAgICAgICAgIGFsbG9jYXRl
UmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nKGNvZGUpOworICAgIGVsc2UKKyAgICAgICAgYWxsb2Nh
dGVSZWdpc3RlcnNCeUxpbmVhclNjYW4oY29kZSk7CiAKICAgICBpZiAoT3B0aW9uczo6bG9nQWly
UmVnaXN0ZXJQcmVzc3VyZSgpKSB7CiAgICAgICAgIGRhdGFMb2coIlJlZ2lzdGVyIHByZXNzdXJl
IGFmdGVyIHJlZ2lzdGVyIGFsbG9jYXRpb246XG4iKTsKICAgICAgICAgbG9nUmVnaXN0ZXJQcmVz
c3VyZShjb2RlKTsKICAgICB9Ci0KLSAgICAvLyBUaGlzIHJlcGxhY2VzIHVzZXMgb2Ygc3BpbGwg
c2xvdHMgd2l0aCByZWdpc3RlcnMgb3IgY29uc3RhbnRzIGlmIHBvc3NpYmxlLiBJdCBkb2VzIHRo
aXMgYnkKLSAgICAvLyBtaW5pbWl6aW5nIHRoZSBhbW91bnQgdGhhdCB3ZSBwZXJ0dXJiIHRoZSBh
bHJlYWR5LWNob3NlbiByZWdpc3RlciBhbGxvY2F0aW9uLiBJdCBtYXkgZXh0ZW5kCi0gICAgLy8g
dGhlIGxpdmUgcmFuZ2VzIG9mIHJlZ2lzdGVycyB0aG91Z2guCi0gICAgZml4T2J2aW91c1NwaWxs
cyhjb2RlKTsKKyAgICAKKyAgICBpZiAob3B0TGV2ZWwgPj0gMikgeworICAgICAgICAvLyBUaGlz
IHJlcGxhY2VzIHVzZXMgb2Ygc3BpbGwgc2xvdHMgd2l0aCByZWdpc3RlcnMgb3IgY29uc3RhbnRz
IGlmIHBvc3NpYmxlLiBJdCBkb2VzIHRoaXMgYnkKKyAgICAgICAgLy8gbWluaW1pemluZyB0aGUg
YW1vdW50IHRoYXQgd2UgcGVydHVyYiB0aGUgYWxyZWFkeS1jaG9zZW4gcmVnaXN0ZXIgYWxsb2Nh
dGlvbi4gSXQgbWF5IGV4dGVuZAorICAgICAgICAvLyB0aGUgbGl2ZSByYW5nZXMgb2YgcmVnaXN0
ZXJzIHRob3VnaC4KKyAgICAgICAgZml4T2J2aW91c1NwaWxscyhjb2RlKTsKKyAgICB9CiAKICAg
ICBsb3dlckFmdGVyUmVnQWxsb2MoY29kZSk7CiAKQEAgLTE2NSw3ICsxNzAsNyBAQCB2b2lkIGdl
bmVyYXRlKENvZGUmIGNvZGUsIENDYWxsSGVscGVycyYgCiAgICAgICAgIGlmIChibG9jaykKICAg
ICAgICAgICAgIGNvbnRleHQuYmxvY2tMYWJlbHNbYmxvY2tdID0gQm94PENDYWxsSGVscGVyczo6
TGFiZWw+OjpjcmVhdGUoKTsKICAgICB9Ci0gICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgQ0NhbGxI
ZWxwZXJzOjpKdW1wTGlzdD4gYmxvY2tKdW1wcyhjb2RlLnNpemUoKSk7CisgICAgSW5kZXhNYXA8
QmFzaWNCbG9jayosIENDYWxsSGVscGVyczo6SnVtcExpc3Q+IGJsb2NrSnVtcHMoY29kZS5zaXpl
KCkpOwogCiAgICAgYXV0byBsaW5rID0gWyZdIChDQ2FsbEhlbHBlcnM6Okp1bXAganVtcCwgQmFz
aWNCbG9jayogdGFyZ2V0KSB7CiAgICAgICAgIGlmIChjb250ZXh0LmJsb2NrTGFiZWxzW3Rhcmdl
dF0tPmlzU2V0KCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2Vu
ZXJhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckdl
bmVyYXRlLmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyR2VuZXJhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDYgKzI3LDggQEAKIAogI2lm
IEVOQUJMRShCM19KSVQpCiAKKyNpbmNsdWRlICJCM0NvbW1vbi5oIgorCiBuYW1lc3BhY2UgSlND
IHsKIAogY2xhc3MgQ0NhbGxIZWxwZXJzOwpAQCAtMzcsNyArMzksNyBAQCBjbGFzcyBDb2RlOwog
CiAvLyBUaGlzIHRha2VzIGFuIEFpcjo6Q29kZSB0aGF0IGhhc24ndCBoYWQgYW55IHN0YWNrIGFs
bG9jYXRpb24gYW5kIG9wdGlvbmFsbHkgaGFzbid0IGhhZCBhbnkKIC8vIHJlZ2lzdGVyIGFsbG9j
YXRpb24gYW5kIGRvZXMgYm90aCBvZiB0aG9zZSB0aGluZ3MuCi1KU19FWFBPUlRfUFJJVkFURSB2
b2lkIHByZXBhcmVGb3JHZW5lcmF0aW9uKENvZGUmKTsKK0pTX0VYUE9SVF9QUklWQVRFIHZvaWQg
cHJlcGFyZUZvckdlbmVyYXRpb24oQ29kZSYsIHVuc2lnbmVkIG9wdExldmVsID0gZGVmYXVsdE9w
dExldmVsKCkpOwogCiAvLyBUaGlzIGdlbmVyYXRlcyB0aGUgY29kZSB1c2luZyB0aGUgZ2l2ZW4g
Q0NhbGxIZWxwZXJzIGluc3RhbmNlLiBOb3RlIHRoYXQgdGhpcyBtYXkgY2FsbCBjYWxsYmFja3MK
IC8vIGluIHRoZSBzdXBwbGllZCBjb2RlIGFzIGl0IGlzIGdlbmVyYXRpbmcuCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRpb25Db250ZXh0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0aW9uQ29udGV4dC5o
CShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckdl
bmVyYXRpb25Db250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGlj
OgogICAgIHR5cGVkZWYgU2hhcmVkVGFzazxMYXRlUGF0aEZ1bmN0aW9uPiBMYXRlUGF0aDsKIAog
ICAgIFZlY3RvcjxSZWZQdHI8TGF0ZVBhdGg+PiBsYXRlUGF0aHM7Ci0gICAgSW5kZXhNYXA8QmFz
aWNCbG9jaywgQm94PENDYWxsSGVscGVyczo6TGFiZWw+PiBibG9ja0xhYmVsczsKKyAgICBJbmRl
eE1hcDxCYXNpY0Jsb2NrKiwgQm94PENDYWxsSGVscGVyczo6TGFiZWw+PiBibG9ja0xhYmVsczsK
ICAgICBCYXNpY0Jsb2NrKiBjdXJyZW50QmxvY2sgeyBudWxscHRyIH07CiAgICAgdW5zaWduZWQg
aW5kZXhJbkJsb2NrIHsgVUlOVF9NQVggfTsKICAgICBDb2RlKiBjb2RlIHsgbnVsbHB0ciB9OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlckFmdGVyUmVnQWxsb2Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJB
ZnRlclJlZ0FsbG9jLmNwcAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
NSw2ICs1NSwxMSBAQCB2b2lkIGxvd2VyQWZ0ZXJSZWdBbGxvYyhDb2RlJiBjb2RlKQogCiAgICAg
aWYgKHZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coIkNvZGUgYmVmb3JlIGxvd2VyQWZ0ZXJSZWdB
bGxvYzpcbiIsIGNvZGUpOworICAgIAorICAgIC8vIEZJWE1FOgorICAgIC8vIDEpIFRoaXMgc2hv
dWxkIGJhaWwgZWFybHkgaWYgdGhlcmUgYXJlIG5vIFNodWZmbGVzIG9yIENvbGRDQ2FsbHMuIChP
T1BTISEgbmVlZCBidWcgdXJsKQorICAgIC8vIDIpIFdlIHNob3VsZCBub3QgaW50cm9kdWNlIFNo
dWZmbGVzIGZvciBub3JtYWwgY2FsbHMuIChPT1BTISEgbmVlZCBidWcgdXJsKQorICAgIC8vIDMp
IFdlIHNob3VsZCBlbWl0IENvbGRDQ2FsbCBvbmx5IGF0IG9wdExldmVsPT0xLiAoT09QUyEhIG5l
ZWQgYnVnIHVybCkKIAogICAgIEhhc2hNYXA8SW5zdCosIFJlZ2lzdGVyU2V0PiB1c2VkUmVnaXN0
ZXJzOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyRW50cnlT
d2l0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
TG93ZXJFbnRyeVN3aXRjaC5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyTG93ZXJFbnRyeVN3aXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTgyLDcgKzgyLDcgQEAgdm9pZCBsb3dlckVudHJ5U3dpdGNoKENvZGUmIGNvZGUpCiAgICAgLy8g
Tm93IGR1cGxpY2F0ZSB0aGVtLgogICAgIFZlY3RvcjxGcmVxdWVudGVkQmxvY2s+IGVudHJ5cG9p
bnRzOwogICAgIGVudHJ5cG9pbnRzLmFwcGVuZChGcmVxdWVudGVkQmxvY2soY29kZVswXSwgZW50
cnlwb2ludEZyZXF1ZW5jaWVzWzBdKSk7Ci0gICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgQmFzaWNC
bG9jayo+IG1hcChjb2RlLnNpemUoKSk7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jayosIEJhc2lj
QmxvY2sqPiBtYXAoY29kZS5zaXplKCkpOwogICAgIGZvciAodW5zaWduZWQgZW50cnlwb2ludElu
ZGV4ID0gMTsgZW50cnlwb2ludEluZGV4IDwgY29kZS5wcm9jKCkubnVtRW50cnlwb2ludHMoKTsg
KytlbnRyeXBvaW50SW5kZXgpIHsKICAgICAgICAgbWFwLmNsZWFyKCk7CiAgICAgICAgIGZvciAo
QmFzaWNCbG9jayogYmxvY2sgOiB3b3JrbGlzdC5zZWVuKCkudmFsdWVzKGNvZGUpKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCShyZXZp
c2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5v
cGNvZGVzCSh3b3JraW5nIGNvcHkpCkBAIC02NDksNyArNjQ5LDcgQEAgTW92ZTMyIFU6RzozMiwg
WkQ6RzozMgogTW92ZTMyIFU6RzozMiwgWkQ6RzozMiwgUzpHOjMyCiAgICAgQWRkciwgQWRkciwg
VG1wCiAKLVN0b3JlWmVybzMyIFU6RzozMgorU3RvcmVaZXJvMzIgRDpHOjMyCiAgICAgQWRkcgog
ICAgIEluZGV4CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnTGl2
ZW5lc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJl
Z0xpdmVuZXNzLmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyUmVnTGl2ZW5lc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAog
I2luY2x1ZGUgIkFpckJhc2ljQmxvY2suaCIKICNpbmNsdWRlICJBaXJDb2RlLmgiCiAjaW5jbHVk
ZSAiQWlySW5zdC5oIgorI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgiCiAjaW5jbHVkZSAiUmVnaXN0
ZXJTZXQuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIg
ewpAQCAtNTQsNiArNTUsMTkgQEAgcHVibGljOgogICAgICAgICB7CiAgICAgICAgIH0KICAgICAg
ICAgCisgICAgICAgIC8vIElmIHlvdSBjb21wdXRlZCBUbXAgbGl2ZW5lc3MgZm9yIHNvbWUgYmFu
aywgeW91IGNhbiB1c2UgcmVnIGxpdmVuZXNzIHRvIGZpbGwgaW4gdGhlIGJsYW5rcy4KKyAgICAg
ICAgLy8gTm90ZSB0aGF0IHdoYXQgaGFwcGVucyB0byB0aGUgcmVnaXN0ZXJzIG5vdCBiZWxvbmdp
bmcgdG8gdGhlIGJhbmsgaXMgYXJiaXRyYXJ5IC0gdGhleSBtYXkgZ2V0CisgICAgICAgIC8vIHNl
dCBvciBub3QuCisgICAgICAgIHRlbXBsYXRlPEJhbmsgYmFuaz4KKyAgICAgICAgTG9jYWxDYWxj
KFRtcExpdmVuZXNzPGJhbms+JiBsaXZlbmVzcywgQmFzaWNCbG9jayogYmxvY2spCisgICAgICAg
ICAgICA6IG1fYmxvY2soYmxvY2spCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoVG1wIHRt
cCA6IGxpdmVuZXNzLmxpdmVBdFRhaWwoYmxvY2spKSB7CisgICAgICAgICAgICAgICAgaWYgKHRt
cC5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICBtX3dvcmtzZXQuc2V0KHRtcC5yZWcoKSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGNvbnN0IFJlZ2lz
dGVyU2V0JiBsaXZlKCkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIG1fd29y
a3NldDsKQEAgLTg0LDggKzk4LDggQEAgcHVibGljOgogICAgIH0KICAgICAKIHByaXZhdGU6Ci0g
ICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgUmVnaXN0ZXJTZXQ+IG1fbGl2ZUF0SGVhZDsKLSAgICBJ
bmRleE1hcDxCYXNpY0Jsb2NrLCBSZWdpc3RlclNldD4gbV9saXZlQXRUYWlsOworICAgIEluZGV4
TWFwPEJhc2ljQmxvY2sqLCBSZWdpc3RlclNldD4gbV9saXZlQXRIZWFkOworICAgIEluZGV4TWFw
PEJhc2ljQmxvY2sqLCBSZWdpc3RlclNldD4gbV9saXZlQXRUYWlsOwogfTsKIAogfSB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjM6OkFpcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAkocmV2aXNpb24gMjE0NDI3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJBaXJBcmdJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckZpeFNwaWxsc0FmdGVyVGVybWlu
YWxzLmgiCiAjaW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0LmgiCiAjaW5jbHVkZSAiQWlySW5zdElu
bGluZXMuaCIKICNpbmNsdWRlICJBaXJMaXZlbmVzcy5oIgpAQCAtNDYsNyArNDcsNyBAQCB2b2lk
IHNwaWxsRXZlcnl0aGluZyhDb2RlJiBjb2RlKQogICAgIHBhZEludGVyZmVyZW5jZShjb2RlKTsK
IAogICAgIC8vIFdlIHdhbnQgdG8ga25vdyB0aGUgc2V0IG9mIHJlZ2lzdGVycyB1c2VkIGF0IGV2
ZXJ5IHBvaW50IGluIGV2ZXJ5IGJhc2ljIGJsb2NrLgotICAgIEluZGV4TWFwPEJhc2ljQmxvY2ss
IFZlY3RvcjxSZWdpc3RlclNldD4+IHVzZWRSZWdpc3RlcnMoY29kZS5zaXplKCkpOworICAgIElu
ZGV4TWFwPEJhc2ljQmxvY2sqLCBWZWN0b3I8UmVnaXN0ZXJTZXQ+PiB1c2VkUmVnaXN0ZXJzKGNv
ZGUuc2l6ZSgpKTsKICAgICBHUExpdmVuZXNzIGdwTGl2ZW5lc3MoY29kZSk7CiAgICAgRlBMaXZl
bmVzcyBmcExpdmVuZXNzKGNvZGUpOwogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2Rl
KSB7CkBAIC0xNzMsMTAgKzE3NCwxMyBAQCB2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJiBjb2Rl
KQogICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjaG9zZW5SZWcpOwogCiAgICAg
ICAgICAgICAgICAgICAgIHRtcCA9IFRtcChjaG9zZW5SZWcpOworICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT0gQXJnOjpTY3JhdGNoKQorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICAgICAgICAgIE9wY29kZSBt
b3ZlID0gYmFuayA9PSBHUCA/IE1vdmUgOiBNb3ZlRG91YmxlOwogCi0gICAgICAgICAgICAgICAg
ICAgIGlmIChBcmc6OmlzQW55VXNlKHJvbGUpICYmIHJvbGUgIT0gQXJnOjpTY3JhdGNoKQorICAg
ICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0FueVVzZShyb2xlKSkKICAgICAgICAgICAgICAg
ICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoaW5zdEluZGV4LCBtb3ZlLCBpbnN0Lm9yaWdp
biwgYXJnLCB0bXApOwogICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0FueURlZihyb2xl
KSkKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoaW5zdEluZGV4
ICsgMSwgbW92ZSwgaW5zdC5vcmlnaW4sIHRtcCwgYXJnKTsKQEAgLTE4NCw2ICsxODgsOCBAQCB2
b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJiBjb2RlKQogICAgICAgICB9CiAgICAgICAgIGluc2Vy
dGlvblNldC5leGVjdXRlKGJsb2NrKTsKICAgICB9CisgICAgCisgICAgZml4U3BpbGxzQWZ0ZXJU
ZXJtaW5hbHMoY29kZSk7CiB9CiAKIH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5jcHAJKHJldmlzaW9uIDIxNDQy
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yOCw4ICsyOCwxNSBAQAogCiAjaWYgRU5BQkxFKEIzX0pJVCkKIAorI2luY2x1ZGUgIkFp
clRtcElubGluZXMuaCIKKwogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFj
ZSBBaXIgewogCit0ZW1wbGF0ZTw+IGNvbnN0IGNoYXIqIGNvbnN0IFRtcDo6SW5kZXhlZDxHUD46
OmR1bXBQcmVmaXggPSAiJXRtcCI7Cit0ZW1wbGF0ZTw+IGNvbnN0IGNoYXIqIGNvbnN0IFRtcDo6
SW5kZXhlZDxGUD46OmR1bXBQcmVmaXggPSAiJWZ0bXAiOwordGVtcGxhdGU8PiBjb25zdCBjaGFy
KiBjb25zdCBUbXA6OkFic29sdXRlbHlJbmRleGVkPEdQPjo6ZHVtcFByZWZpeCA9ICIlYWJzIjsK
K3RlbXBsYXRlPD4gY29uc3QgY2hhciogY29uc3QgVG1wOjpBYnNvbHV0ZWx5SW5kZXhlZDxGUD46
OmR1bXBQcmVmaXggPSAiJWZhYnMiOworCiB2b2lkIFRtcDo6ZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAogewogICAgIGlmICghKnRoaXMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyVG1wLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJUbXAuaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJUbXAuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03NCw2ICs3NCwxNCBAQCBwdWJsaWM6CiAg
ICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gZW5jb2RlRlBUbXAoaW5kZXgpOwogICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVG1wIHRtcEZvckluZGV4KEJhbmsg
YmFuaywgdW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBpZiAoYmFuayA9PSBHUCkKKyAg
ICAgICAgICAgIHJldHVybiBncFRtcEZvckluZGV4KGluZGV4KTsKKyAgICAgICAgQVNTRVJUKGJh
bmsgPT0gRlApOworICAgICAgICByZXR1cm4gZnBUbXBGb3JJbmRleChpbmRleCk7CisgICAgfQog
CiAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV92YWx1ZTsg
fQogICAgIApAQCAtMTU0LDcgKzE2MiwxNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4g
Z3BUbXBJbmRleCgpOwogICAgICAgICByZXR1cm4gZnBUbXBJbmRleCgpOwogICAgIH0KLQorICAg
IAorICAgIHRlbXBsYXRlPEJhbmsgYmFuaz4gY2xhc3MgSW5kZXhlZDsKKyAgICB0ZW1wbGF0ZTxC
YW5rIGJhbms+IGNsYXNzIEFic29sdXRlbHlJbmRleGVkOworICAgIAorICAgIHRlbXBsYXRlPEJh
bmsgYmFuaz4KKyAgICBJbmRleGVkPGJhbms+IGluZGV4ZWQoKSBjb25zdDsKKyAgICAKKyAgICB0
ZW1wbGF0ZTxCYW5rIGJhbms+CisgICAgQWJzb2x1dGVseUluZGV4ZWQ8YmFuaz4gYWJzb2x1dGVs
eUluZGV4ZWQoKSBjb25zdDsKKyAgICAKICAgICBib29sIGlzQWxpdmUoKSBjb25zdAogICAgIHsK
ICAgICAgICAgcmV0dXJuICEhKnRoaXM7CkBAIC0xOTUsNiArMjEyLDggQEAgcHVibGljOgogICAg
ICAgICByZXN1bHQubV92YWx1ZSA9IHN0YXRpY19jYXN0PGludD4oaW5kZXgpOwogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVG1wIHRtcEZvckFic29sdXRl
SW5kZXgoQmFuaywgdW5zaWduZWQpOwogCiBwcml2YXRlOgogICAgIHN0YXRpYyBpbnQgZW5jb2Rl
R1AodW5zaWduZWQgaW5kZXgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clRtcElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpclRtcElubGluZXMuaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJUbXBJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTkyLDYgKzkyLDU4
IEBAIHN0cnVjdCBBYnNvbHV0ZVRtcE1hcHBlcjxGUD4gewogICAgIH0KIH07CiAKK3RlbXBsYXRl
PEJhbmsgdGhlQmFuaz4KK2NsYXNzIFRtcDo6SW5kZXhlZCA6IHB1YmxpYyBUbXAgeworcHVibGlj
OgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBkdW1wUHJlZml4OworICAgIAorICAgIElu
ZGV4ZWQoVG1wIHRtcCkKKyAgICAgICAgOiBUbXAodG1wKQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRtcEluZGV4
KHRoZUJhbmspOworICAgIH0KK307CisKK3RlbXBsYXRlPEJhbmsgdGhlQmFuaz4KK2NsYXNzIFRt
cDo6QWJzb2x1dGVseUluZGV4ZWQgOiBwdWJsaWMgVG1wIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
Y29uc3QgY2hhciogY29uc3QgZHVtcFByZWZpeDsKKworICAgIEFic29sdXRlbHlJbmRleGVkKFRt
cCB0bXApCisgICAgICAgIDogVG1wKHRtcCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHVuc2ln
bmVkIGluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBBYnNvbHV0ZVRtcE1hcHBl
cjx0aGVCYW5rPjo6YWJzb2x1dGVJbmRleCgqdGhpcyk7CisgICAgfQorfTsKKwordGVtcGxhdGU8
QmFuayB0aGVCYW5rPgorVG1wOjpJbmRleGVkPHRoZUJhbms+IFRtcDo6aW5kZXhlZCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIEluZGV4ZWQ8dGhlQmFuaz4oKnRoaXMpOworfQorCit0ZW1wbGF0ZTxC
YW5rIHRoZUJhbms+CitUbXA6OkFic29sdXRlbHlJbmRleGVkPHRoZUJhbms+IFRtcDo6YWJzb2x1
dGVseUluZGV4ZWQoKSBjb25zdAoreworICAgIHJldHVybiBBYnNvbHV0ZWx5SW5kZXhlZDx0aGVC
YW5rPigqdGhpcyk7Cit9CisKK1RtcCBUbXA6OnRtcEZvckFic29sdXRlSW5kZXgoQmFuayBiYW5r
LCB1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBpZiAoYmFuayA9PSBHUCkKKyAgICAgICAgcmV0dXJu
IEFic29sdXRlVG1wTWFwcGVyPEdQPjo6dG1wRnJvbUFic29sdXRlSW5kZXgoaW5kZXgpOworICAg
IEFTU0VSVChiYW5rID09IEZQKTsKKyAgICByZXR1cm4gQWJzb2x1dGVUbXBNYXBwZXI8RlA+Ojp0
bXBGcm9tQWJzb2x1dGVJbmRleChpbmRleCk7Cit9CisKIH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzOjpBaXIKIAogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw4ICsx
MDIsMTYgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICAvLyBBbHNvIGFsbG93IGFkZC9yZW1v
dmUvY29udGFpbnMgdGVybWlub2xvZ3ksIHdoaWNoIG1lYW5zIHRoZSBzYW1lIHRoaW5nIGFzIHNl
dC9jbGVhci9nZXQuCi0gICAgdm9pZCBhZGQoUmVnIHJlZykgeyBzZXQocmVnKTsgfQotICAgIHZv
aWQgcmVtb3ZlKFJlZyByZWcpIHsgY2xlYXIocmVnKTsgfQorICAgIGJvb2wgYWRkKFJlZyByZWcp
CisgICAgeworICAgICAgICBBU1NFUlQoISFyZWcpOworICAgICAgICByZXR1cm4gIW1fYml0cy50
ZXN0QW5kU2V0KHJlZy5pbmRleCgpKTsKKyAgICB9CisgICAgYm9vbCByZW1vdmUoUmVnIHJlZykK
KyAgICB7CisgICAgICAgIEFTU0VSVCghIXJlZyk7CisgICAgICAgIHJldHVybiBtX2JpdHMudGVz
dEFuZENsZWFyKHJlZy5pbmRleCgpKTsKKyAgICB9CiAgICAgYm9vbCBjb250YWlucyhSZWcgcmVn
KSBjb25zdCB7IHJldHVybiBnZXQocmVnKTsgfQogICAgIAogICAgIHZvaWQgbWVyZ2UoY29uc3Qg
UmVnaXN0ZXJTZXQmIG90aGVyKSB7IG1fYml0cy5tZXJnZShvdGhlci5tX2JpdHMpOyB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAyMTQ0Mjcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIyNSw2ICsyMjUsNyBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsK
ICAgICB2KGJvb2wsIHVzZUZUTEpJVCwgdHJ1ZSwgTm9ybWFsLCAiYWxsb3dzIHRoZSBGVEwgSklU
IHRvIGJlIHVzZWQgaWYgdHJ1ZSIpIFwKICAgICB2KGJvb2wsIHVzZUZUTFRCQUEsIHRydWUsIE5v
cm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgdmFsaWRhdGVGVExPU1JFeGl0TGl2ZW5lc3Ms
IGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KHVuc2lnbmVkLCBkZWZhdWx0QjNPcHRM
ZXZlbCwgMiwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCBiM0Fsd2F5c0ZhaWxzQmVm
b3JlQ29tcGlsZSwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgYjNBbHdh
eXNGYWlsc0JlZm9yZUxpbmssIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2ws
IGZ0bENyYXNoZXMsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIC8qIGZvb2wtcHJvb2Ygd2F5IG9m
IGNoZWNraW5nIHRoYXQgeW91IGVuZGVkIHVwIGluIHRoZSBGVEwuIDstKSAqL1wKQEAgLTM5Nyw2
ICszOTgsOCBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2KGJvb2ws
IGxvZ0IzUGhhc2VUaW1lcywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoZG91Ymxl
LCByYXJlQmxvY2tQZW5hbHR5LCAwLjAwMSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29s
LCBhaXJTcGlsbHNFdmVyeXRoaW5nLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdihi
b29sLCBhaXJMaW5lYXJTY2FuVmVyYm9zZSwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAorICAg
IHYoYm9vbCwgYWlyTGluZWFyU2NhblNwaWxsc0V2ZXJ5dGhpbmcsIGZhbHNlLCBOb3JtYWwsIG51
bGxwdHIpIFwKICAgICB2KGJvb2wsIGFpckZvcmNlQnJpZ2dzQWxsb2NhdG9yLCBmYWxzZSwgTm9y
bWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCBhaXJGb3JjZUlSQ0FsbG9jYXRvciwgZmFsc2Us
IE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgY29hbGVzY2VTcGlsbFNsb3RzLCB0cnVl
LCBOb3JtYWwsIG51bGxwdHIpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21CM0lSR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUIzSVJHZW5lcmF0b3IuaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw2ICsy
Nyw3IEBACiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKKyNpbmNsdWRlICJCM0NvbW1vbi5o
IgogI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIK
ICNpbmNsdWRlICJWTS5oIgpAQCAtNDcsNyArNDgsNyBAQCBzdHJ1Y3QgQ29tcGlsYXRpb25Db250
ZXh0IHsKICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwganNFbnRyeXBvaW50VG9XYXNtRW50cnlwb2lu
dENhbGw7CiB9OwogCi1FeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVuY3Rp
b24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShWTSYsIENvbXBpbGF0aW9uQ29udGV4dCYsIGNv
bnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IFNpZ25hdHVyZSosIFZlY3RvcjxVbmxpbmtlZFdh
c21Ub1dhc21DYWxsPiYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgY29uc3QgVmVjdG9yPFNp
Z25hdHVyZUluZGV4PiYsIHVuc2lnbmVkIG9wdExldmVsID0gMSk7CitFeHBlY3RlZDxzdGQ6OnVu
aXF1ZV9wdHI8V2FzbUludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShW
TSYsIENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IFNp
Z25hdHVyZSosIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIGNvbnN0IE1vZHVsZUlu
Zm9ybWF0aW9uJiwgY29uc3QgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiYsIHVuc2lnbmVkIG9wdExl
dmVsID0gQjM6OmRlZmF1bHRPcHRMZXZlbCgpKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldh
c20KIApJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw4IEBACiAvKiBCZWdpbiBQQlhCdWlsZEZpbGUg
c2VjdGlvbiAqLwogCQkwRjBEODVCNDE3MjM0Q0MxMDAzMzgyMTAgLyogTm9Mb2NrLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBEODVCMzE3MjM0Q0Ix
MDAzMzgyMTAgLyogTm9Mb2NrLmggKi87IH07CiAJCTBGMEZDRERFMUREMTY3RjkwMENDQUI1MyAv
KiBMb2NrQWxnb3JpdGhtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjBGQ0RERDFERDE2N0Y5MDBDQ0FCNTMgLyogTG9ja0FsZ29yaXRobS5oICovOyB9
OworCQkwRjJBQzU2MTFFODlGNzBDMDAwMUVFM0YgLyogUmFuZ2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkFDNTYwMUU4OUY3MEMwMDAxRUUzRiAv
KiBSYW5nZS5oICovOyB9OworCQkwRjJBQzU2MzFFOEEwMTQ5MDAwMUVFM0YgLyogSW5kZXhLZXlU
eXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJB
QzU2MjFFOEEwMTQ5MDAwMUVFM0YgLyogSW5kZXhLZXlUeXBlLmggKi87IH07CiAJCTBGMkI2NkE2
MTdCNkI0RkIwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QTQxN0I2QjRGNzAwQTdBRTNG
IC8qIERlZmVycmFibGVSZWZDb3VudGVkLmggKi87IH07CiAJCTBGMkI2NkE3MTdCNkI0RkQwMEE3
QUUzRiAvKiBGbGlwQnl0ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMkI2NkE1MTdCNkI0RjcwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCAqLzsgfTsK
IAkJMEYzMEJBOTAxRTc4NzA4RTAwMkNBODQ3IC8qIEdsb2JhbFZlcnNpb24uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMEJBOEExRTc4NzA4RTAw
MkNBODQ3IC8qIEdsb2JhbFZlcnNpb24uY3BwICovOyB9OwpAQCAtNDA4LDYgKzQxMCw4IEBACiAv
KiBCZWdpbiBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KIAkJMEYwRDg1QjMxNzIzNENCMTAw
MzM4MjEwIC8qIE5vTG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOb0xvY2suaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYwRkNEREQxREQxNjdGOTAwQ0NBQjUzIC8qIExvY2tBbGdvcml0
aG0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9ja0FsZ29yaXRobS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJBQzU2MDFFODlGNzBDMDAwMUVFM0YgLyog
UmFuZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmFuZ2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQUM1NjIxRThBMDE0OTAwMDFFRTNGIC8qIEluZGV4
S2V5VHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmRleEtleVR5cGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQjY2QTQxN0I2QjRGNzAwQTdBRTNG
IC8qIERlZmVycmFibGVSZWZDb3VudGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlZmVycmFibGVSZWZD
b3VudGVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkE1MTdCNkI0Rjcw
MEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmxpcEJ5dGVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzAwQjdEMThBQjQ4QjQwMEE2RDcyRSAvKiBIYXNo
TWV0aG9kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhhc2hNZXRob2QuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTEwMTgsMTAgKzEwMjIsMTEgQEAKIAkJCQlBOEE0NzJCQTE1MUE4MjVBMDA0
MTIzRkYgLyogSGFzaFRyYWl0cy5oICovLAogCQkJCUE4QTQ3MkJCMTUxQTgyNUEwMDQxMjNGRiAv
KiBIZXhOdW1iZXIuaCAqLywKIAkJCQlGRTg5MjVBRjFEMDBEQUVDMDA0NjkwN0UgLyogSW5kZW50
ZXIuaCAqLywKLQkJCQk5QzY3QzU0MjU4OTM0OEUyODVCNDk2OTkgLyogSW5kZXhlZENvbnRhaW5l
ckl0ZXJhdG9yLmggKi8sCisJCQkJMEYyQUM1NjIxRThBMDE0OTAwMDFFRTNGIC8qIEluZGV4S2V5
VHlwZS5oICovLAogCQkJCTVCNDMzODNBNUQwQjQ2M0M5NDMzRDkzMyAvKiBJbmRleE1hcC5oICov
LAogCQkJCTMxMzdFMUQ3REJEODRBQzM4RkFFNEQzNCAvKiBJbmRleFNldC5oICovLAogCQkJCTI2
ODRENDM1MUMwMDBENDAwMDgxRDY2MyAvKiBJbmRleFNwYXJzZVNldC5oICovLAorCQkJCTlDNjdD
NTQyNTg5MzQ4RTI4NUI0OTY5OSAvKiBJbmRleGVkQ29udGFpbmVySXRlcmF0b3IuaCAqLywKIAkJ
CQlBOEE0NzJCQzE1MUE4MjVBMDA0MTIzRkYgLyogSW5saW5lQVNNLmggKi8sCiAJCQkJQTcwREEw
ODIxNzk5RjA0RDAwNTI5QTlCIC8qIEluc2VydGlvbi5oICovLAogCQkJCTdDREQ3RkY3MTg2RDI5
MUUwMDc0MzNDRCAvKiBJdGVyYXRvckFkYXB0b3JzLmggKi8sCkBAIC0xMTAwLDYgKzExMDUsNyBA
QAogCQkJCUE4QTQ3MkZCMTUxQTgyNUIwMDQxMjNGRiAvKiBSYW5kb21OdW1iZXIuY3BwICovLAog
CQkJCUE4QTQ3MkZDMTUxQTgyNUIwMDQxMjNGRiAvKiBSYW5kb21OdW1iZXIuaCAqLywKIAkJCQlB
OEE0NzJGRDE1MUE4MjVCMDA0MTIzRkYgLyogUmFuZG9tTnVtYmVyU2VlZC5oICovLAorCQkJCTBG
MkFDNTYwMUU4OUY3MEMwMDAxRUUzRiAvKiBSYW5nZS5oICovLAogCQkJCTBGNzI1Q0FCMUM1MDQ2
MTYwMEFEOTQzQSAvKiBSYW5nZVNldC5oICovLAogCQkJCTBGODcxMDU5MTY2NDNGMTkwMDkwQjBB
RCAvKiBSYXdQb2ludGVyLmggKi8sCiAJCQkJMEZERTg3RjYxREZEMDdDQzAwNjRDMzkwIC8qIFJl
Y3Vyc2l2ZUxvY2tBZGFwdGVyLmggKi8sCkBAIC0xNDg1LDYgKzE0OTEsNyBAQAogCQkJCUM5MTZC
OTc1RjAyRjRGN0U4QjRBQjEyRCAvKiBJbmRleE1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzhC
MEUxQTFFMDFBNDg2RUI5NUUwRDExIC8qIEluZGV4U2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQky
Njg0RDQzNjFDMDAwRDQwMDA4MUQ2NjMgLyogSW5kZXhTcGFyc2VTZXQuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGMkFDNTYzMUU4QTAxNDkwMDAxRUUzRiAvKiBJbmRleEtleVR5cGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4QTQ3M0RDMTUxQTgyNUIwMDQxMjNGRiAvKiBJbmxpbmVBU00uaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3MERBMDg0MTc5OUYwNEQwMDUyOUE5QiAvKiBJbnNlcnRpb24uaCBp
biBIZWFkZXJzICovLAogCQkJCTI2MTQ3QjBBMTVERENDREMwMEREQjkwNyAvKiBJbnRlZ2VyVG9T
dHJpbmdDb252ZXJzaW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTE1ODYsNiArMTU5Myw3IEBACiAJ
CQkJNDMwQjQ3ODkxQUFBQUMxQTAwMTIyM0RBIC8qIFN0cmluZ0NvbW1vbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQThBNDc0M0UxNTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ0NvbmNhdGVuYXRlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3Q0Q0QzI3MDFFMkM4MkI5MDA5Mjk0NzAgLyogU3RyaW5nQ29u
Y2F0ZW5hdGVOdW1iZXJzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJBQzU2MTFFODlGNzBDMDAw
MUVFM0YgLyogUmFuZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDJDMTUxQTgyNUIwMDQx
MjNGRiAvKiBTdHJpbmdFeHRyYXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDNGMTUxQTgy
NUIwMDQxMjNGRiAvKiBTdHJpbmdIYXNoLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzQ4NzQ1NDE3
QTBCREFFMDBGQTA0Q0IgLyogU3RyaW5nSGFzaER1bXBDb250ZXh0LmggaW4gSGVhZGVycyAqLywK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvV1RG
L3d0Zi9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDYgKzEwMCw3IEBAIHNl
dChXVEZfSEVBREVSUwogICAgIFJBTVNpemUuaAogICAgIFJhbmRvbU51bWJlci5oCiAgICAgUmFu
ZG9tTnVtYmVyU2VlZC5oCisgICAgUmFuZ2UuaAogICAgIFJhbmdlU2V0LmgKICAgICBSYXdQb2lu
dGVyLmgKICAgICBSZWN1cnNpdmVMb2NrQWRhcHRlci5oCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9E
ZXF1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0RlcXVlLmgJKHJldmlzaW9uIDIx
NDQyNykKKysrIFNvdXJjZS9XVEYvd3RmL0RlcXVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtODksNiArODksMTkg
QEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlTGFzdCgpOwogICAgIHZvaWQgcmVtb3ZlKGl0ZXJh
dG9yJik7CiAgICAgdm9pZCByZW1vdmUoY29uc3RfaXRlcmF0b3ImKTsKKyAgICAKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jPiB2b2lkIHJlbW92ZUFsbE1hdGNoaW5nKGNvbnN0IEZ1bmMmKTsK
KyAgICAKKyAgICAvLyBUaGlzIGlzIGEgcHJpb3JpdHkgZW5xdWV1ZS4gVGhlIGNhbGxiYWNrIGlz
IGdpdmVuIGEgdmFsdWUsIGFuZCBpZiBpdCByZXR1cm5zIHRydWUsIHRoZW4gdGhpcworICAgIC8v
IHdpbGwgcHV0IHRoZSBhcHBlbmRlZCB2YWx1ZSBiZWZvcmUgdGhhdCB2YWx1ZS4gSXQgd2lsbCBr
ZWVwIGJ1YmJsaW5nIHVudGlsIHRoZSBjYWxsYmFjayByZXR1cm5zCisgICAgLy8gZmFsc2Ugb3Ig
dGhlIHZhbHVlIGVuZHMgdXAgYXQgdGhlIGhlYWQgb2YgdGhlIHF1ZXVlLgorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFUsIHR5cGVuYW1lIEZ1bmM+CisgICAgdm9pZCBhcHBlbmRBbmRCdWJibGUoVSYm
LCBjb25zdCBGdW5jJik7CisgICAgCisgICAgLy8gUmVtb3ZlIGFuZCByZXR1cm4gdGhlIGxhc3Qg
ZWxlbWVudCBmb3Igd2hpY2ggdGhlIGNhbGxiYWNrIHJldHVybnMgdHJ1ZS4gUmV0dXJucyBhIG51
bGwgdmVyc2lvbiBvZgorICAgIC8vIFQgaWYgaXQgdGhlIGNhbGxiYWNrIGFsd2F5cyByZXR1cm5z
IGZhbHNlLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgVCB0YWtlTGFzdChjb25z
dCBGdW5jJik7CiAKICAgICB2b2lkIGNsZWFyKCk7CiAKQEAgLTUyNCw2ICs1MzcsNTUgQEAgaW5s
aW5lIHZvaWQgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+OjpyZQogICAgIGNoZWNrVmFsaWRpdHko
KTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgordGVt
cGxhdGU8dHlwZW5hbWUgRnVuYz4KK2lubGluZSB2b2lkIERlcXVlPFQsIGlubGluZUNhcGFjaXR5
Pjo6cmVtb3ZlQWxsTWF0Y2hpbmcoY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICBzaXplX3QgY291
bnQgPSBzaXplKCk7CisgICAgd2hpbGUgKGNvdW50LS0pIHsKKyAgICAgICAgVCB2YWx1ZSA9IHRh
a2VGaXJzdCgpOworICAgICAgICBpZiAoIWZ1bmModmFsdWUpKQorICAgICAgICAgICAgYXBwZW5k
KFdURk1vdmUodmFsdWUpKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVf
dCBpbmxpbmVDYXBhY2l0eT4KK3RlbXBsYXRlPHR5cGVuYW1lIFUsIHR5cGVuYW1lIEZ1bmM+Citp
bmxpbmUgdm9pZCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OmFwcGVuZEFuZEJ1YmJsZShVJiYg
dmFsdWUsIGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgYXBwZW5kKFdURk1vdmUodmFsdWUpKTsK
KyAgICBpdGVyYXRvciBiZWdpbiA9IHRoaXMtPmJlZ2luKCk7CisgICAgaXRlcmF0b3IgaXRlciA9
IGVuZCgpOworICAgIC0taXRlcjsKKyAgICB3aGlsZSAoaXRlciAhPSBiZWdpbikgeworICAgICAg
ICBpdGVyYXRvciBwcmV2ID0gaXRlcjsKKyAgICAgICAgLS1wcmV2OworICAgICAgICBpZiAoIWZ1
bmMoKnByZXYpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBzdGQ6OnN3YXAoKnByZXYs
ICppdGVyKTsKKyAgICAgICAgaXRlciA9IHByZXY7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgor
aW5saW5lIFQgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+Ojp0YWtlTGFzdChjb25zdCBGdW5jJiBm
dW5jKQoreworICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKKyAgICB1bnNpZ25lZCBzaXplID0gdGhp
cy0+c2l6ZSgpOworICAgIHdoaWxlIChjb3VudCA8IHNpemUpIHsKKyAgICAgICAgVCBjYW5kaWRh
dGUgPSB0YWtlTGFzdCgpOworICAgICAgICBpZiAoZnVuYyhjYW5kaWRhdGUpKSB7CisgICAgICAg
ICAgICB3aGlsZSAoY291bnQtLSkKKyAgICAgICAgICAgICAgICBhcHBlbmQodGFrZUZpcnN0KCkp
OworICAgICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZTsKKyAgICAgICAgfQorICAgICAgICBjb3Vu
dCsrOworICAgICAgICBwcmVwZW5kKFdURk1vdmUoY2FuZGlkYXRlKSk7CisgICAgfQorICAgIHJl
dHVybiBUKCk7Cit9CisKICNpZmRlZiBOREVCVUcKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVf
dCBpbmxpbmVDYXBhY2l0eT4gaW5saW5lIHZvaWQgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5l
Q2FwYWNpdHk+OjpjaGVja1ZhbGlkaXR5KCkgY29uc3QgeyB9CiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+IGlubGluZSB2b2lkIERlcXVlSXRlcmF0b3JCYXNlPFQs
IGlubGluZUNhcGFjaXR5Pjo6Y2hlY2tWYWxpZGl0eShjb25zdCBEZXF1ZUl0ZXJhdG9yQmFzZTxU
LCBpbmxpbmVDYXBhY2l0eT4mKSBjb25zdCB7IH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0luZGV4
S2V5VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0luZGV4S2V5VHlwZS5oCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL0luZGV4S2V5VHlwZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorc3RydWN0IEluZGV4S2V5VHlwZSB7CisgICAgc3RhdGljIHNpemVfdCBpbmRl
eChjb25zdCBUJiBrZXkpIHsgcmV0dXJuIGtleS5pbmRleCgpOyB9Cit9OworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorc3RydWN0IEluZGV4S2V5VHlwZTxUKj4geworICAgIHN0YXRpYyBzaXplX3Qg
aW5kZXgoVCoga2V5KSB7IHJldHVybiBrZXktPmluZGV4KCk7IH0KK307CisKK30gLy8gbmFtZXNw
YWNlIFdURgorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9JbmRleE1hcC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL0luZGV4TWFwLmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9X
VEYvd3RmL0luZGV4TWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3By
YWdtYSBvbmNlCiAKKyNpbmNsdWRlIDx3dGYvSW5kZXhLZXlUeXBlLmg+CiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTcwLDE4ICs3MSwyNCBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBtX3ZlY3RvcltpbmRleF07CiAgICAgfQogICAgIAotICAgIFZhbHVl
JiBvcGVyYXRvcltdKEtleSoga2V5KQorICAgIFZhbHVlJiBvcGVyYXRvcltdKGNvbnN0IEtleSYg
a2V5KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdmVjdG9yW2tleS0+aW5kZXgoKV07CisgICAg
ICAgIHJldHVybiBtX3ZlY3RvcltJbmRleEtleVR5cGU8S2V5Pjo6aW5kZXgoa2V5KV07CiAgICAg
fQogICAgIAotICAgIGNvbnN0IFZhbHVlJiBvcGVyYXRvcltdKEtleSoga2V5KSBjb25zdAorICAg
IGNvbnN0IFZhbHVlJiBvcGVyYXRvcltdKGNvbnN0IEtleSYga2V5KSBjb25zdAogICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fdmVjdG9yW2tleS0+aW5kZXgoKV07CisgICAgICAgIHJldHVybiBtX3Zl
Y3RvcltJbmRleEtleVR5cGU8S2V5Pjo6aW5kZXgoa2V5KV07CisgICAgfQorICAgIAorICAgIHZv
aWQgYXBwZW5kKGNvbnN0IEtleSYga2V5LCBWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKEluZGV4S2V5VHlwZTxLZXk+OjppbmRleChrZXkpID09IG1fdmVjdG9yLnNp
emUoKSk7CisgICAgICAgIG1fdmVjdG9yLmFwcGVuZCh2YWx1ZSk7CiAgICAgfQogCiBwcml2YXRl
OgotICAgIFZlY3RvcjxWYWx1ZT4gbV92ZWN0b3I7CisgICAgVmVjdG9yPFZhbHVlLCAwLCBVbnNh
ZmVWZWN0b3JPdmVyZmxvdz4gbV92ZWN0b3I7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5k
ZXg6IFNvdXJjZS9XVEYvd3RmL0luZGV4U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvSW5kZXhTZXQuaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL1dURi93dGYvSW5kZXhT
ZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgPHd0Zi9C
aXRWZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CisjaW5jbHVkZSA8d3Rm
L0luZGV4S2V5VHlwZS5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIApAQCAtNDIsMzAgKzQzLDMwIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgYm9vbCBhZGQoVCogdmFsdWUpCisgICAgYm9v
bCBhZGQoY29uc3QgVCYgdmFsdWUpCiAgICAgewotICAgICAgICByZXR1cm4gIW1fc2V0LnNldCh2
YWx1ZS0+aW5kZXgoKSk7CisgICAgICAgIHJldHVybiAhbV9zZXQuc2V0KEluZGV4S2V5VHlwZTxU
Pjo6aW5kZXgodmFsdWUpKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYWJs
ZT4KICAgICBib29sIGFkZEFsbChjb25zdCBJdGVyYWJsZSYgaXRlcmFibGUpCiAgICAgewogICAg
ICAgICBib29sIHJlc3VsdCA9IGZhbHNlOwotICAgICAgICBmb3IgKFQqIHZhbHVlIDogaXRlcmFi
bGUpCisgICAgICAgIGZvciAoY29uc3QgVCYgdmFsdWUgOiBpdGVyYWJsZSkKICAgICAgICAgICAg
IHJlc3VsdCB8PSBhZGQodmFsdWUpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAot
ICAgIGJvb2wgcmVtb3ZlKFQqIHZhbHVlKQorICAgIGJvb2wgcmVtb3ZlKGNvbnN0IFQmIHZhbHVl
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fc2V0LmNsZWFyKHZhbHVlLT5pbmRleCgpKTsKKyAg
ICAgICAgcmV0dXJuIG1fc2V0LmNsZWFyKEluZGV4S2V5VHlwZTxUPjo6aW5kZXgodmFsdWUpKTsK
ICAgICB9CiAKLSAgICBib29sIGNvbnRhaW5zKFQqIHZhbHVlKSBjb25zdAorICAgIGJvb2wgY29u
dGFpbnMoY29uc3QgVCYgdmFsdWUpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoIXZhbHVlKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gbV9zZXQuZ2V0KHZhbHVl
LT5pbmRleCgpKTsKKyAgICAgICAgcmV0dXJuIG1fc2V0LmdldChJbmRleEtleVR5cGU8VD46Omlu
ZGV4KHZhbHVlKSk7CiAgICAgfQogCiAgICAgc2l6ZV90IHNpemUoKSBjb25zdApAQCAtMTAwLDcg
KzEwMSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHsKICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgVCogb3BlcmF0b3IqKCkKKyAgICAgICAgICAgIFQgb3BlcmF0b3IqKCkKICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gbV9jb2xsZWN0aW9uLT5hdCgqbV9pdGVyKTsK
ICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1JhbmdlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvUmFuZ2UuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0
Zi9SYW5nZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUg
PHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gTm90ZSB0aGF0IHRo
ZSAnYmVnaW4nIGlzIGluY2x1c2l2ZSwgd2hpbGUgdGhlICdlbmQnIGlzIGV4Y2x1c2l2ZS4gVGhl
c2UgdHdvIHJhbmdlcyBhcmUgbm9uLQorLy8gb3ZlcmxhcHBpbmc6CisvLworLy8gICAgIHJhbmdl
QSA9IDAuLi44CisvLyAgICAgcmFuZ2VCID0gOC4uLjE2CisKK3RlbXBsYXRlPHR5cGVuYW1lIFBh
c3NlZFR5cGU+CitjbGFzcyBSYW5nZSB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBQYXNzZWRUeXBl
IFR5cGU7CisgICAgCisgICAgUmFuZ2UoKQorICAgICAgICA6IG1fYmVnaW4oMCkKKyAgICAgICAg
LCBtX2VuZCgwKQorICAgIHsKKyAgICB9CisKKyAgICBleHBsaWNpdCBSYW5nZShUeXBlIHZhbHVl
KQorICAgICAgICA6IG1fYmVnaW4odmFsdWUpCisgICAgICAgICwgbV9lbmQodmFsdWUgKyAxKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZW5kID49IG1fYmVnaW4pOworICAgIH0KKworICAgIFJh
bmdlKFR5cGUgYmVnaW4sIFR5cGUgZW5kKQorICAgICAgICA6IG1fYmVnaW4oYmVnaW4pCisgICAg
ICAgICwgbV9lbmQoZW5kKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZW5kID49IG1fYmVnaW4p
OworICAgICAgICBpZiAobV9iZWdpbiA9PSBtX2VuZCkgeworICAgICAgICAgICAgLy8gQ2Fub25p
Y2FsaXplIGVtcHR5IHJhbmdlcy4KKyAgICAgICAgICAgIG1fYmVnaW4gPSAwOworICAgICAgICAg
ICAgbV9lbmQgPSAwOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIFJhbmdlIHRvcCgp
CisgICAgeworICAgICAgICByZXR1cm4gUmFuZ2Uoc3RkOjpudW1lcmljX2xpbWl0czxUeXBlPjo6
bWluKCksIHN0ZDo6bnVtZXJpY19saW1pdHM8VHlwZT46Om1heCgpKTsKKyAgICB9CisKKyAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgUmFuZ2UmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fYmVnaW4gPT0gb3RoZXIubV9iZWdpbgorICAgICAgICAgICAgJiYgbV9lbmQgPT0g
b3RoZXIubV9lbmQ7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFJhbmdlJiBv
dGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAg
ICB9CisgICAgCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1f
YmVnaW4gIT0gbV9lbmQ7IH0KKworICAgIFJhbmdlIG9wZXJhdG9yfChjb25zdCBSYW5nZSYgb3Ro
ZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoISp0aGlzKQorICAgICAgICAgICAgcmV0dXJu
IG90aGVyOworICAgICAgICBpZiAoIW90aGVyKQorICAgICAgICAgICAgcmV0dXJuICp0aGlzOwor
ICAgICAgICByZXR1cm4gUmFuZ2UoCisgICAgICAgICAgICBzdGQ6Om1pbihtX2JlZ2luLCBvdGhl
ci5tX2JlZ2luKSwKKyAgICAgICAgICAgIHN0ZDo6bWF4KG1fZW5kLCBvdGhlci5tX2VuZCkpOwor
ICAgIH0KKyAgICAKKyAgICBSYW5nZSYgb3BlcmF0b3J8PShjb25zdCBSYW5nZSYgb3RoZXIpCisg
ICAgeworICAgICAgICByZXR1cm4gKnRoaXMgPSAqdGhpcyB8IG90aGVyOworICAgIH0KKyAgICAK
KyAgICBUeXBlIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9iZWdpbjsgfQorICAgIFR5cGUgZW5k
KCkgY29uc3QgeyByZXR1cm4gbV9lbmQ7IH0KKworICAgIGJvb2wgb3ZlcmxhcHMoY29uc3QgUmFu
Z2UmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6cmFuZ2VzT3Zlcmxh
cChtX2JlZ2luLCBtX2VuZCwgb3RoZXIubV9iZWdpbiwgb3RoZXIubV9lbmQpOworICAgIH0KKwor
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KCp0aGlzID09IFJhbmdlKCkpIHsKKyAgICAgICAgICAgIG91dC5wcmludCgiQm90dG9tIik7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKCp0aGlzID09IHRvcCgp
KSB7CisgICAgICAgICAgICBvdXQucHJpbnQoIlRvcCIpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIGlmIChtX2JlZ2luID09IG1fZW5kICsgMSkgeworICAgICAgICAg
ICAgb3V0LnByaW50KG1fYmVnaW4pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIG91dC5wcmludChtX2JlZ2luLCAiLi4uIiwgbV9lbmQpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBUeXBlIG1fYmVnaW47CisgICAgVHlwZSBtX2VuZDsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdURgorCit1c2luZyBXVEY6OlJhbmdlOworCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9SYW5n
ZVNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1JhbmdlU2V0LmgJKHJldmlzaW9u
IDIxNDQyNykKKysrIFNvdXJjZS9XVEYvd3RmL1JhbmdlU2V0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTc3LDYgKzc3LDEwIEBAIHB1YmxpYzoKICAgICAgICAgbV9pc0NvbXBhY3QgPSBmYWxzZTsKIAog
ICAgICAgICAvLyBXZSBhcHBlbmQgd2l0aG91dCBjb21wYWN0aW5nIG9ubHkgaWYgZG9pbmcgc28g
aXMgZ3VhcmFudGVlZCBub3QgdG8gcmVzaXplIHRoZSB2ZWN0b3IuCisgICAgICAgIC8vIEZJWE1F
OiBUaGlzIGhldXJpc3RpYyBpcyBhbG1vc3QgY2VydGFpbmx5IHdyb25nLCBiZWNhdXNlIHdlIGRv
bid0IGNvbnRyb2wgdGhlIGNhcGFjaXR5LiBJCisgICAgICAgIC8vIHRoaW5rIHRoYXQgdGhpcyBt
ZWFucyB0aGF0IHdlIHdpbGwgc29tZXRpbWVzIGJlIHJhZ2UtY29tcGFjdGluZyB3aGVuIHdlIGFy
ZSBqdXN0IHNoeSBvZiB0aGUKKyAgICAgICAgLy8gY2FwYWNpdHkuCisgICAgICAgIC8vIE9PUFM6
IG5lZWQgYnVnIHVybAogICAgICAgICBpZiAobV9yYW5nZXMuc2l6ZSgpICsgMSA8IG1fcmFuZ2Vz
LmNhcGFjaXR5KCkpIHsKICAgICAgICAgICAgIG1fcmFuZ2VzLmFwcGVuZChyYW5nZSk7CiAgICAg
ICAgICAgICByZXR1cm47Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305825</attachid>
            <date>2017-03-29 20:21:25 -0700</date>
            <delta_ts>2017-03-29 21:27:03 -0700</delta_ts>
            <desc>changed the approach to clobbers</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>114389</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIxNDQyNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMTQwLDcgKzE0MCw2IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYjMvQjNG
b2xkUGF0aENvbnN0YW50cy5jcHAKICAgICBiMy9CM0ZyZXF1ZW5jeUNsYXNzLmNwcAogICAgIGIz
L0IzR2VuZXJhdGUuY3BwCi0gICAgYjMvQjNIZWFwUmFuZ2UuY3BwCiAgICAgYjMvQjNJbmZlclN3
aXRjaGVzLmNwcAogICAgIGIzL0IzSW5zZXJ0aW9uU2V0LmNwcAogICAgIGIzL0IzS2luZC5jcHAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTgzLDYgKzE4MywxMCBAQAogCQkwRjI1RjFCMjE4MTYz
NUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1RjFBQjE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xv
d1BhdGhDYWxsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEYyNUYxQjMxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1RjFBQzE4
MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5LmNwcCAqLzsgfTsKIAkJMEYyNUYx
QjQxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNUYxQUQxODE2MzVGMzAwNTIyRjM5
IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGMkFDNTY2MUU4QTBCNzcwMDAxRUUzRiAvKiBBaXJGaXhTcGls
bHNBZnRlclRlcm1pbmFscy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjJBQzU2NDFFOEEwQjc2MDAwMUVFM0YgLyogQWlyRml4U3BpbGxzQWZ0ZXJU
ZXJtaW5hbHMuY3BwICovOyB9OworCQkwRjJBQzU2NzFFOEEwQjc5MDAwMUVFM0YgLyogQWlyRml4
U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMkFDNTY1MUU4QTBCNzYwMDAxRUUzRiAvKiBBaXJGaXhTcGlsbHNBZnRl
clRlcm1pbmFscy5oICovOyB9OworCQkwRjJBQzU2QTFFOEEwQkQzMDAwMUVFM0YgLyogQWlyQWxs
b2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQUM1NjgxRThBMEJEMTAwMDFFRTNGIC8qIEFpckFsbG9j
YXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcCAqLzsgfTsKKwkJMEYyQUM1NkIxRThBMEJENTAw
MDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJBQzU2OTFFOEEwQkQxMDAwMUVF
M0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaCAqLzsgfTsKIAkJMEYyQjY2
QUMxN0I2QjUzRjAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBODE3QjZCNTNEMDBBN0FF
M0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJCNjZBRDE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNv
bWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJCNjZBOTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNv
dW50ZWRJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEYyQjY2QUUxN0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVk
U2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJC
NjZBQTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTY5LDcgKzk3Myw2
IEBACiAJCTBGRUM4NUJDMUJFMTQ2MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0cmVuZ3RoLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUI3MUJF
MTQ2MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0cmVuZ3RoLmNwcCAqLzsgfTsKIAkJMEZFQzg1QkQx
QkUxNDYyRjAwODBGRjc0IC8qIEIzUmVkdWNlU3RyZW5ndGguaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUI4MUJFMTQ2MkYwMDgwRkY3NCAvKiBC
M1JlZHVjZVN0cmVuZ3RoLmggKi87IH07CiAJCTBGRUM4NUMxMUJFMTY3QTAwMDgwRkY3NCAvKiBC
M0VmZmVjdHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NUJFMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0VmZmVjdHMuaCAqLzsgfTsKLQkJMEZFQzg1
QzIxQkUxNjdBMDAwODBGRjc0IC8qIEIzSGVhcFJhbmdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUJGMUJFMTY3QTAwMDgwRkY3NCAvKiBC
M0hlYXBSYW5nZS5jcHAgKi87IH07CiAJCTBGRUM4NUMzMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hl
YXBSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg1QzAxQkUxNjdBMDAwODBGRjc0IC8qIEIzSGVhcFJhbmdlLmggKi87IH07CiAJCTBGRUM4
NUM1MUJFMTZGNUEwMDgwRkY3NCAvKiBCM0VmZmVjdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1QzQxQkUxNkY1QTAwODBGRjc0IC8qIEIz
RWZmZWN0cy5jcHAgKi87IH07CiAJCTBGRUQ2N0I5MUIyNjI1NkQwMDY2Q0UxNSAvKiBERkdDb25z
dGFudEhvaXN0aW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFRDY3QjcxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0YW50SG9pc3Rp
bmdQaGFzZS5jcHAgKi87IH07CkBAIC0yNzAzLDYgKzI3MDYsMTAgQEAKIAkJMEYyNUYxQUIxODE2
MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBGVExTbG93UGF0aENhbGwuaDsgcGF0aCA9IGZ0bC9GVExTbG93UGF0aENhbGwu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNUYxQUMxODE2MzVGMzAwNTIyRjM5
IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBGVExTbG93UGF0aENhbGxLZXkuY3BwOyBwYXRoID0gZnRsL0ZUTFNsb3dQYXRoQ2Fs
bEtleS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjVGMUFEMTgxNjM1RjMw
MDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gRlRMU2xvd1BhdGhDYWxsS2V5Lmg7IHBhdGggPSBmdGwvRlRMU2xvd1BhdGhDYWxs
S2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkFDNTY0MUU4QTBCNzYwMDAx
RUUzRiAvKiBBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5jcHA7IHBhdGgg
PSBiMy9haXIvQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjJBQzU2NTFFOEEwQjc2MDAwMUVFM0YgLyogQWlyRml4U3BpbGxzQWZ0
ZXJUZXJtaW5hbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyRml4U3Bp
bGxzQWZ0ZXJUZXJtaW5hbHMuaDsgcGF0aCA9IGIzL2Fpci9BaXJGaXhTcGlsbHNBZnRlclRlcm1p
bmFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJBQzU2ODFFOEEwQkQxMDAw
MUVFM0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNj
YW4uY3BwOyBwYXRoID0gYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQUM1NjkxRThBMEJEMTAwMDFFRTNG
IC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmg7IHBhdGgg
PSBiMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQjY2QTgxN0I2QjUzRDAwQTdBRTNGIC8qIEdDSW5jb21pbmdS
ZWZDb3VudGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5jb21pbmdSZWZDb3VudGVkLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkE5MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0lu
Y29taW5nUmVmQ291bnRlZElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR0NJbmNvbWluZ1JlZkNv
dW50ZWRJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkFBMTdC
NkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMzQ5Niw3ICszNTAzLDYgQEAKIAkJMEZFQzg1QjcxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVk
dWNlU3RyZW5ndGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNS
ZWR1Y2VTdHJlbmd0aC5jcHA7IHBhdGggPSBiMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQzg1QjgxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVk
dWNlU3RyZW5ndGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNSZWR1Y2VT
dHJlbmd0aC5oOyBwYXRoID0gYjMvQjNSZWR1Y2VTdHJlbmd0aC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkVDODVCRTFCRTE2N0EwMDA4MEZGNzQgLyogQjNFZmZlY3RzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzRWZmZWN0cy5oOyBwYXRoID0gYjMvQjNF
ZmZlY3RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGRUM4NUJGMUJFMTY3QTAw
MDgwRkY3NCAvKiBCM0hlYXBSYW5nZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBCM0hlYXBSYW5nZS5jcHA7IHBhdGggPSBiMy9CM0hlYXBSYW5nZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUM4NUMwMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hl
YXBSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0hlYXBSYW5nZS5o
OyBwYXRoID0gYjMvQjNIZWFwUmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZFQzg1QzQxQkUxNkY1QTAwODBGRjc0IC8qIEIzRWZmZWN0cy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0VmZmVjdHMuY3BwOyBwYXRoID0gYjMvQjNFZmZlY3Rz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFRDY3QjcxQjI2MjU2RDAwNjZD
RTE1IC8qIERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuY3BwOyBwYXRoID0gZGZn
L0RGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01NDE5LDcgKzU0MjUsNiBAQAogCQkJCTBGRUM4NENGMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0dlbmVyYXRlLmggKi8sCiAJCQkJMEYyQzYzQjUxRTYzNDNFODAwQzEzODM5IC8qIEIzR2VuZXJp
Y0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi8sCiAJCQkJMEZFQzg0RDAxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oICovLAotCQkJCTBGRUM4NUJGMUJFMTY3QTAwMDgw
RkY3NCAvKiBCM0hlYXBSYW5nZS5jcHAgKi8sCiAJCQkJMEZFQzg1QzAxQkUxNjdBMDAwODBGRjc0
IC8qIEIzSGVhcFJhbmdlLmggKi8sCiAJCQkJREM2OUI5OUExRDE1RjkwRjAwMkUzQzAwIC8qIEIz
SW5mZXJTd2l0Y2hlcy5jcHAgKi8sCiAJCQkJREM2OUI5OUIxRDE1RjkwRjAwMkUzQzAwIC8qIEIz
SW5mZXJTd2l0Y2hlcy5oICovLApAQCAtNTUyOCw2ICs1NTMzLDggQEAKIAkJMEZFQzg0QjMxQkRB
Q0Q4ODAwODBGRjc0IC8qIGFpciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCisJCQkJMEYyQUM1NjgxRThBMEJEMTAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0
ZXJzQnlMaW5lYXJTY2FuLmNwcCAqLywKKwkJCQkwRjJBQzU2OTFFOEEwQkQxMDAwMUVFM0YgLyog
QWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaCAqLywKIAkJCQk3OTY1QzIxNDFFNUQ3
OTk2MDBCNzU5MUQgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuY3BwICov
LAogCQkJCTc5NjVDMjE1MUU1RDc5OTYwMEI3NTkxRCAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5
R3JhcGhDb2xvcmluZy5oICovLAogCQkJCTBGRUM4NTQ4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJB
bGxvY2F0ZVN0YWNrLmNwcCAqLywKQEAgLTU1NjEsNiArNTU2OCw4IEBACiAJCQkJMEY0REUxQ0Qx
QzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCAqLywKIAkJCQkyNjJEODVC
NDFDMEQ2NTBGMDA2QUNCNjEgLyogQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmNwcCAqLywK
IAkJCQkyNjJEODVCNTFDMEQ2NTBGMDA2QUNCNjEgLyogQWlyRml4UGFydGlhbFJlZ2lzdGVyU3Rh
bGxzLmggKi8sCisJCQkJMEYyQUM1NjQxRThBMEI3NjAwMDFFRTNGIC8qIEFpckZpeFNwaWxsc0Fm
dGVyVGVybWluYWxzLmNwcCAqLywKKwkJCQkwRjJBQzU2NTFFOEEwQjc2MDAwMUVFM0YgLyogQWly
Rml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCAqLywKIAkJCQkwRkVDODU1MjFCREFDREM3MDA4MEZG
NzQgLyogQWlyRnJlcXVlbnRlZEJsb2NrLmggKi8sCiAJCQkJMEZFQzg1NTMxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckdlbmVyYXRlLmNwcCAqLywKIAkJCQkwRkVDODU1NDFCREFDREM3MDA4MEZGNzQg
LyogQWlyR2VuZXJhdGUuaCAqLywKQEAgLTgxMzksNiArODE0OCw3IEBACiAJCQkJMEZFQzg1MTAx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkVDODUxMjFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0MzQyMkE2MzFDMTU4RTZEMDBFMkVCOTggLyogQjNDb25zdEZsb2F0VmFsdWUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkFDNTZCMUU4QTBCRDUwMDAxRUUzRiAvKiBBaXJBbGxv
Y2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1QjMx
QkRFRDk1NzAwODBGRjc0IC8qIEIzQ29uc3RQdHJWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYzMzhERjYxQkU5M0Q1NTAwMTNDODhGIC8qIEIzQ29uc3RyYWluZWRWYWx1ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyQzYzQjgxRTYzNDNGNzAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2NrSW5z
ZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKQEAgLTkzNjIsNiArOTM3Miw3IEBACiAJCQkJNzA5
RkI4NkExQUUzMzVDNjAwMzlEMDY5IC8qIFdlYWtTZXRDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMTQxNTAxMzMxNTRCQjEzRjAwNUQ4Qzk4IC8qIFdlYWtTZXRJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3MDlGQjg2QzFBRTMzNUM2MDAzOUQwNjkgLyogV2Vha1NldFByb3Rv
dHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQUM1NjcxRThBMEI3OTAwMDFFRTNGIC8qIEFp
ckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JFRDFE
QjU4REFEMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNDMTYxREI1OUNCMjAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5
Q29tcGlsZUVycm9yQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JF
RjFEQjU4REFEMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90b3R5cGUuaCBp
biBIZWFkZXJzICovLApAQCAtOTk4OCw3ICs5OTk5LDYgQEAKIAkJCQkwRjcyNUNBRjFDNTA2RDNC
MDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkVDODUxNTFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkVDODUxODFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQkwRkVDODVDMjFCRTE2N0EwMDA4MEZGNzQgLyogQjNIZWFwUmFuZ2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJREM2OUI5OUMxRDE1RjkxMjAwMkUzQzAwIC8qIEIzSW5m
ZXJTd2l0Y2hlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVDODVCOTFCRTE0NjJGMDA4MEZG
NzQgLyogQjNJbnNlcnRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZERjY3RDMxRDlD
NkQyQTAwMUI5ODI1IC8qIEIzS2luZC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMTU0LDYgKzEw
MTY0LDcgQEAKIAkJCQlBNzhBOTc3NjE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkJEQzE1MTUxQzVENEQwMENEODkxMCAvKiBERkdGaXh1
cFBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjAxNzdGMURDQURDMzMwMEVBNTk1MCAv
KiBERkdGbG93SW5kZXhpbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQUM1NkExRThBMEJE
MzAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGOUQzMzk2MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRjcxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0ZsdXNo
Rm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNjlDQzg4MTkzQUM2MEEwMDQ1NzU5RSAv
KiBERkdGcm96ZW5WYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMjYzLDYgKzEwMjc0LDcg
QEAKIAkJCQkyQTgzNjM4NTE4RDdEMEVFMDAwMEVCQ0MgLyogRWRlbkdDQWN0aXZpdHlDYWxsYmFj
ay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OUU0NUEyNTE4QTFCMjU5MDAyNkQ4OEYgLyogRW5j
b2RlZFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUM3MTA3RUMzNzYwMDQyN0E0
OCAvKiBFcnJvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJBQzU2NjFFOEEwQjc3MDAwMUVF
M0YgLyogQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQ3RjM5QzgxMDdFQzM3NjAwNDI3QTQ4IC8qIEVycm9yQ29uc3RydWN0b3IuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRkVCNThDMTQxODdCOEIxNjAwOThFRjBCIC8qIEVycm9ySGFuZGxpbmdTY29w
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDOTEwN0VDMzc2MDA0MjdBNDggLyogRXJy
b3JJbnN0YW5jZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrVXRpbHMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTE0LDcgKzExNCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+CiBWZWN0b3I8QmFz
aWNCbG9jayo+IGJsb2Nrc0luUHJlT3JkZXIoQmFzaWNCbG9jayogcm9vdCkKIHsKICAgICBWZWN0
b3I8QmFzaWNCbG9jayo+IHJlc3VsdDsKLSAgICBHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2Nr
KiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IHdvcmtsaXN0OworICAgIEdyYXBoTm9kZVdvcmtsaXN0
PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+IHdvcmtsaXN0OwogICAgIHdvcmts
aXN0LnB1c2gocm9vdCk7CiAgICAgd2hpbGUgKEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3Qu
cG9wKCkpIHsKICAgICAgICAgcmVzdWx0LmFwcGVuZChibG9jayk7CkBAIC0xMjgsNyArMTI4LDcg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KIFZlY3RvcjxCYXNpY0Jsb2NrKj4gYmxv
Y2tzSW5Qb3N0T3JkZXIoQmFzaWNCbG9jayogcm9vdCkKIHsKICAgICBWZWN0b3I8QmFzaWNCbG9j
ayo+IHJlc3VsdDsKLSAgICBQb3N0T3JkZXJHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwg
SW5kZXhTZXQ8QmFzaWNCbG9jaz4+IHdvcmtsaXN0OworICAgIFBvc3RPcmRlckdyYXBoTm9kZVdv
cmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+IHdvcmtsaXN0OwogICAg
IHdvcmtsaXN0LnB1c2gocm9vdCk7CiAgICAgd2hpbGUgKEdyYXBoTm9kZVdpdGhPcmRlcjxCYXNp
Y0Jsb2NrKj4gaXRlbSA9IHdvcmtsaXN0LnBvcCgpKSB7CiAgICAgICAgIHN3aXRjaCAoaXRlbS5v
cmRlcikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tXb3JrbGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrV29ya2xpc3Qu
aAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tX
b3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CiAKIGNsYXNzIEJhc2ljQmxvY2s7CiAKLXR5cGVkZWYgR3JhcGhOb2RlV29y
a2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2s+PiBCbG9ja1dvcmtsaXN0Owor
dHlwZWRlZiBHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9j
ayo+PiBCbG9ja1dvcmtsaXN0OwogCiAvLyBXaGVuIHlvdSBzYXkgQmxvY2tXaXRoPGludD4geW91
IHNob3VsZCByZWFkIGl0IGFzICJibG9jayB3aXRoIGFuIGludCIuCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB1c2luZyBCbG9ja1dpdGggPSBHcmFwaE5vZGVXaXRoPEJhc2ljQmxvY2sqLCBUPjsKQEAg
LTQ0LDEzICs0NCwxMyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBCbG9ja1dpdGggPSBH
CiAvLyBwZXJtaXRzIGZvcmNpYmx5IGVucXVldWVpbmcgdGhpbmdzIGV2ZW4gaWYgdGhlIGJsb2Nr
IGhhcyBhbHJlYWR5IGJlZW4gc2Vlbi4gSXQncyB1c2VmdWwgZm9yCiAvLyB0aGluZ3MgbGlrZSBi
dWlsZGluZyBhIHNwYW5uaW5nIHRyZWUsIGluIHdoaWNoIGNhc2UgVCAodGhlIGF1eGlsaWFyeSBw
YXlsb2FkKSB3b3VsZCBiZSB0aGUKIC8vIHN1Y2Nlc3NvciBpbmRleC4KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3JrbGlzdCA9IEV4dGVuZGVkR3JhcGhOb2RlV29y
a2xpc3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0PEJhc2ljQmxvY2s+PjsKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3JrbGlzdCA9IEV4dGVuZGVkR3JhcGhOb2Rl
V29ya2xpc3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0PEJhc2ljQmxvY2sqPj47CiAKIHR5cGVk
ZWYgR3JhcGhWaXNpdE9yZGVyIFZpc2l0T3JkZXI7CiAKIHR5cGVkZWYgR3JhcGhOb2RlV2l0aE9y
ZGVyPEJhc2ljQmxvY2sqPiBCbG9ja1dpdGhPcmRlcjsKIAotdHlwZWRlZiBQb3N0T3JkZXJHcmFw
aE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IFBvc3RPcmRl
ckJsb2NrV29ya2xpc3Q7Cit0eXBlZGVmIFBvc3RPcmRlckdyYXBoTm9kZVdvcmtsaXN0PEJhc2lj
QmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+IFBvc3RPcmRlckJsb2NrV29ya2xpc3Q7CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDRkcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDRkcu
aAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ0ZHLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzksOCArMzksOCBAQCBjbGFzcyBDRkcgewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIHR5cGVkZWYgQmFzaWNCbG9jayogTm9kZTsKLSAg
ICB0eXBlZGVmIEluZGV4U2V0PEJhc2ljQmxvY2s+IFNldDsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB1c2luZyBNYXAgPSBJbmRleE1hcDxCYXNpY0Jsb2NrLCBUPjsKKyAgICB0eXBlZGVmIElu
ZGV4U2V0PEJhc2ljQmxvY2sqPiBTZXQ7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcg
TWFwID0gSW5kZXhNYXA8QmFzaWNCbG9jayosIFQ+OwogICAgIHR5cGVkZWYgVmVjdG9yPEJhc2lj
QmxvY2sqLCA0PiBMaXN0OwogCiAgICAgQ0ZHKFByb2NlZHVyZSYgcHJvYykKQEAgLTUxLDcgKzUx
LDcgQEAgcHVibGljOgogICAgIE5vZGUgcm9vdCgpIHsgcmV0dXJuIG1fcHJvY1swXTsgfQogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBNYXA8VD4gbmV3TWFwKCkgeyByZXR1cm4gSW5k
ZXhNYXA8SlNDOjpCMzo6QmFzaWNCbG9jaywgVD4obV9wcm9jLnNpemUoKSk7IH0KKyAgICBNYXA8
VD4gbmV3TWFwKCkgeyByZXR1cm4gSW5kZXhNYXA8SlNDOjpCMzo6QmFzaWNCbG9jayosIFQ+KG1f
cHJvYy5zaXplKCkpOyB9CiAKICAgICBTdWNjZXNzb3JDb2xsZWN0aW9uPEJhc2ljQmxvY2ssIEJh
c2ljQmxvY2s6OlN1Y2Nlc3Nvckxpc3Q+IHN1Y2Nlc3NvcnMoTm9kZSBub2RlKSB7IHJldHVybiBu
b2RlLT5zdWNjZXNzb3JCbG9ja3MoKTsgfQogICAgIEJhc2ljQmxvY2s6OlByZWRlY2Vzc29yTGlz
dCYgcHJlZGVjZXNzb3JzKE5vZGUgbm9kZSkgeyByZXR1cm4gbm9kZS0+cHJlZGVjZXNzb3JzKCk7
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCShyZXZpc2lvbiAyMTQ0Mjcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uaAkod29ya2luZyBjb3B5KQpA
QCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShCM19KSVQpCiAKICNpbmNsdWRlICJKU0V4cG9y
dE1hY3Jvcy5oIgorI2luY2x1ZGUgIk9wdGlvbnMuaCIKICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CkBAIC0xNzAsNiArMTcxLDEzIEBA
IHN0YXRpYyBJbnRUeXBlIHJvdGF0ZUxlZnQoSW50VHlwZSB2YWx1ZSwKICAgICByZXR1cm4gKHVW
YWx1ZSA8PCBzaGlmdCkgfCAodVZhbHVlID4+ICgoYml0cyAtIHNoaWZ0KSAmIG1hc2spKTsKIH0K
IAoraW5saW5lIHVuc2lnbmVkIGRlZmF1bHRPcHRMZXZlbCgpCit7CisgICAgLy8gVGhpcyBzaG91
bGQgYWxtb3N0IGFsd2F5cyByZXR1cm4gMiwgYnV0IHdlIGFsbG93IHRoaXMgZGVmYXVsdCB0byBi
ZSBsb3dlcmVkIGZvciB0ZXN0aW5nLiBTb21lCisgICAgLy8gY29tcG9uZW50cyB3aWxsIGRlbGli
ZXJhdGVseSBzZXQgdGhlIG9wdExldmVsLgorICAgIHJldHVybiBPcHRpb25zOjpkZWZhdWx0QjNP
cHRMZXZlbCgpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKIAogI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsZS5oCShyZXZp
c2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShCM19KSVQpCiAKKyNp
bmNsdWRlICJCM0NvbW1vbi5oIgogI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKIAogbmFtZXNw
YWNlIEpTQyB7CkBAIC00NSw3ICs0Niw3IEBAIGNsYXNzIFByb2NlZHVyZTsKIC8vIFRoZW4geW91
IGtlZXAgdGhlIENvbXBpbGF0aW9uIG9iamVjdCBhbGl2ZSBmb3IgYXMgbG9uZyBhcyB5b3Ugd2Fu
dCB0byBiZSBhYmxlIHRvIHJ1biB0aGUgY29kZS4KIC8vIElmIHRoaXMgQVBJIGZlZWxzIHRvbyBo
aWdoLWxldmVsLCB5b3UgY2FuIHVzZSBCMzo6Z2VuZXJhdGUoKSBkaXJlY3RseS4KIAotSlNfRVhQ
T1JUX1BSSVZBVEUgQ29tcGlsYXRpb24gY29tcGlsZShWTSYsIFByb2NlZHVyZSYsIHVuc2lnbmVk
IG9wdExldmVsID0gMSk7CitKU19FWFBPUlRfUFJJVkFURSBDb21waWxhdGlvbiBjb21waWxlKFZN
JiwgUHJvY2VkdXJlJiwgdW5zaWduZWQgb3B0TGV2ZWwgPSBkZWZhdWx0T3B0TGV2ZWwoKSk7CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNEdXBsaWNhdGVUYWlscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzRHVwbGljYXRlVGFpbHMuY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNEdXBsaWNhdGVUYWlscy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY4LDcgKzY4LDcgQEAgcHVibGljOgogCiAgICAgICAgIG1fcHJvYy5yZXNldFZhbHVlT3duZXJz
KCk7CiAKLSAgICAgICAgSW5kZXhTZXQ8QmFzaWNCbG9jaz4gY2FuZGlkYXRlczsKKyAgICAgICAg
SW5kZXhTZXQ8QmFzaWNCbG9jayo+IGNhbmRpZGF0ZXM7CiAKICAgICAgICAgZm9yIChCYXNpY0Js
b2NrKiBibG9jayA6IG1fcHJvYykgewogICAgICAgICAgICAgaWYgKGJsb2NrLT5zaXplKCkgPiBt
X21heFNpemUpCkBAIC04Miw3ICs4Miw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogCiAgICAgICAg
IC8vIENvbGxlY3QgdGhlIHNldCBvZiB2YWx1ZXMgdGhhdCBtdXN0IGJlIGRlLVNTQSdkLgotICAg
ICAgICBJbmRleFNldDxWYWx1ZT4gdmFsdWVzVG9EZW1vdGU7CisgICAgICAgIEluZGV4U2V0PFZh
bHVlKj4gdmFsdWVzVG9EZW1vdGU7CiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBt
X3Byb2MpIHsKICAgICAgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogKmJsb2NrKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSA9PSBQaGkgJiYgY2FuZGlkYXRlcy5jb250
YWlucyhibG9jaykpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVD
b21tb25TdWJleHByZXNzaW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuY3BwCShyZXZpc2lvbiAyMTQ0
MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVDb21tb25TdWJleHBy
ZXNzaW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4Miw3ICs2ODIsNyBAQCBwcml2YXRlOgog
ICAgIERvbWluYXRvcnMmIG1fZG9taW5hdG9yczsKICAgICBQdXJlQ1NFIG1fcHVyZUNTRTsKICAg
ICAKLSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBJbXB1cmVCbG9ja0RhdGE+IG1faW1wdXJlQmxv
Y2tEYXRhOworICAgIEluZGV4TWFwPEJhc2ljQmxvY2sqLCBJbXB1cmVCbG9ja0RhdGE+IG1faW1w
dXJlQmxvY2tEYXRhOwogCiAgICAgSW1wdXJlQmxvY2tEYXRhIG1fZGF0YTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRml4U1NBLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNGaXhTU0EuY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGaXhTU0EuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3
ICs0OSw3IEBAIG5hbWVzcGFjZSB7CiBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIH0gLy8g
YW5vbnltb3VzIG5hbWVzcGFjZQogCi12b2lkIGRlbW90ZVZhbHVlcyhQcm9jZWR1cmUmIHByb2Ms
IGNvbnN0IEluZGV4U2V0PFZhbHVlPiYgdmFsdWVzKQordm9pZCBkZW1vdGVWYWx1ZXMoUHJvY2Vk
dXJlJiBwcm9jLCBjb25zdCBJbmRleFNldDxWYWx1ZSo+JiB2YWx1ZXMpCiB7CiAgICAgSGFzaE1h
cDxWYWx1ZSosIFZhcmlhYmxlKj4gbWFwOwogICAgIEhhc2hNYXA8VmFsdWUqLCBWYXJpYWJsZSo+
IHBoaU1hcDsKQEAgLTEyMSw3ICsxMjEsNyBAQCBib29sIGZpeFNTQShQcm9jZWR1cmUmIHByb2Mp
CiAgICAgLy8gSnVzdCBmb3Igc2FuaXR5LCByZW1vdmUgYW55IHVudXNlZCB2YXJpYWJsZXMgZmly
c3QuIEl0J3MgdW5saWtlbHkgdGhhdCB0aGlzIGNvZGUgaGFzIGFueQogICAgIC8vIGJ1Z3MgaGF2
aW5nIHRvIGRvIHdpdGggZGVhZCB2YXJpYWJsZXMsIGJ1dCBpdCB3b3VsZCBiZSBzaWxseSB0byBo
YXZlIHRvIGZpeCBzdWNoIGEgYnVnIGlmCiAgICAgLy8gaXQgZGlkIGFyaXNlLgotICAgIEluZGV4
U2V0PFZhcmlhYmxlPiBsaXZlVmFyaWFibGVzOworICAgIEluZGV4U2V0PFZhcmlhYmxlKj4gbGl2
ZVZhcmlhYmxlczsKICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IHByb2MudmFsdWVzKCkpIHsKICAg
ICAgICAgaWYgKFZhcmlhYmxlVmFsdWUqIHZhcmlhYmxlVmFsdWUgPSB2YWx1ZS0+YXM8VmFyaWFi
bGVWYWx1ZT4oKSkKICAgICAgICAgICAgIGxpdmVWYXJpYWJsZXMuYWRkKHZhcmlhYmxlVmFsdWUt
PnZhcmlhYmxlKCkpOwpAQCAtMTQ1LDcgKzE0NSw3IEBAIGJvb2wgZml4U1NBKFByb2NlZHVyZSYg
cHJvYykKIAogICAgIC8vIENyZWF0ZSBhIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlICgiY2FsY1Zh
ciIpIGZvciBldmVyeSB2YXJpYWJsZS4KICAgICBWZWN0b3I8VmFyaWFibGUqPiBjYWxjVmFyVG9W
YXJpYWJsZTsKLSAgICBJbmRleE1hcDxWYXJpYWJsZSwgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUq
PiB2YXJpYWJsZVRvQ2FsY1Zhcihwcm9jLnZhcmlhYmxlcygpLnNpemUoKSk7CisgICAgSW5kZXhN
YXA8VmFyaWFibGUqLCBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSo+IHZhcmlhYmxlVG9DYWxjVmFy
KHByb2MudmFyaWFibGVzKCkuc2l6ZSgpKTsKIAogICAgIGZvciAoVmFyaWFibGUqIHZhcmlhYmxl
IDogcHJvYy52YXJpYWJsZXMoKSkgewogICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSog
Y2FsY1ZhciA9IHNzYS5uZXdWYXJpYWJsZSgpOwpAQCAtMTg1LDcgKzE4NSw3IEBAIGJvb2wgZml4
U1NBKFByb2NlZHVyZSYgcHJvYykKIAogICAgIC8vIE5vdyBwZXJmb3JtIHRoZSBjb252ZXJzaW9u
LgogICAgIEluc2VydGlvblNldCBpbnNlcnRpb25TZXQocHJvYyk7Ci0gICAgSW5kZXhNYXA8VmFy
aWFibGUsIFZhbHVlKj4gbWFwcGluZyhwcm9jLnZhcmlhYmxlcygpLnNpemUoKSk7CisgICAgSW5k
ZXhNYXA8VmFyaWFibGUqLCBWYWx1ZSo+IG1hcHBpbmcocHJvYy52YXJpYWJsZXMoKS5zaXplKCkp
OwogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBwcm9jLmJsb2Nrc0luUHJlT3JkZXIoKSkg
ewogICAgICAgICBtYXBwaW5nLmNsZWFyKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0ZpeFNTQS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0ZpeFNTQS5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNGaXhTU0EuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNyw3ICszNyw3IEBAIGNsYXNzIFByb2NlZHVyZTsK
IAogLy8gVHVybnMgYWxsIG1lbnRpb25zIG9mIHRoZSBnaXZlbiB2YWx1ZXMgaW50byBhY2Nlc3Nl
cyB0byB2YXJpYWJsZXMuIFRoaXMgaXMgbWVhbnQgdG8gYmUgdXNlZAogLy8gZnJvbSBwaGFzZXMg
dGhhdCBkb24ndCBsaWtlIFNTQSBmb3Igd2hhdGV2ZXIgcmVhc29uLgotdm9pZCBkZW1vdGVWYWx1
ZXMoUHJvY2VkdXJlJiwgY29uc3QgSW5kZXhTZXQ8VmFsdWU+Jik7Cit2b2lkIGRlbW90ZVZhbHVl
cyhQcm9jZWR1cmUmLCBjb25zdCBJbmRleFNldDxWYWx1ZSo+Jik7CiAKIC8vIFRoaXMgZml4ZXMg
U1NBIGZvciB5b3UuIFVzZSB0aGlzIGFmdGVyIHlvdSBoYXZlIGRvbmUgZGVtb3RlVmFsdWVzKCkg
YW5kIHlvdSBoYXZlIHBlcmZvcm1lZAogLy8gd2hhdGV2ZXIgZXZpbCB0cmFuc2Zvcm1hdGlvbiB5
b3UgbmVlZGVkLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAko
cmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQgcHJlcGFyZUZvckdlbmVy
YXRpb24oUHJvY2VkdXJlJiBwcm8KICAgICBUaW1pbmdTY29wZSB0aW1pbmdTY29wZSgicHJlcGFy
ZUZvckdlbmVyYXRpb24iKTsKIAogICAgIGdlbmVyYXRlVG9BaXIocHJvY2VkdXJlLCBvcHRMZXZl
bCk7Ci0gICAgQWlyOjpwcmVwYXJlRm9yR2VuZXJhdGlvbihwcm9jZWR1cmUuY29kZSgpKTsKKyAg
ICBBaXI6OnByZXBhcmVGb3JHZW5lcmF0aW9uKHByb2NlZHVyZS5jb2RlKCksIG9wdExldmVsKTsK
IH0KIAogdm9pZCBnZW5lcmF0ZShQcm9jZWR1cmUmIHByb2NlZHVyZSwgQ0NhbGxIZWxwZXJzJiBq
aXQpCkBAIC04MCw3ICs4MCw3IEBAIHZvaWQgZ2VuZXJhdGVUb0FpcihQcm9jZWR1cmUmIHByb2Nl
ZHVyZSwKICAgICBpZiAoc2hvdWxkVmFsaWRhdGVJUigpKQogICAgICAgICB2YWxpZGF0ZShwcm9j
ZWR1cmUpOwogCi0gICAgaWYgKG9wdExldmVsID49IDEpIHsKKyAgICBpZiAob3B0TGV2ZWwgPj0g
MikgewogICAgICAgICByZWR1Y2VEb3VibGVUb0Zsb2F0KHByb2NlZHVyZSk7CiAgICAgICAgIHJl
ZHVjZVN0cmVuZ3RoKHByb2NlZHVyZSk7CiAgICAgICAgIGVsaW1pbmF0ZUNvbW1vblN1YmV4cHJl
c3Npb25zKHByb2NlZHVyZSk7CkBAIC05MSwxMiArOTEsMTUgQEAgdm9pZCBnZW5lcmF0ZVRvQWly
KFByb2NlZHVyZSYgcHJvY2VkdXJlLAogICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IEFkZCBt
b3JlIG9wdGltaXphdGlvbnMgaGVyZS4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1MDUwNworICAgIH0gZWxzZSBpZiAob3B0TGV2ZWwgPj0gMSkg
eworICAgICAgICAvLyBGSVhNRTogRXhwbG9yZSBiZXR0ZXIgInF1aWNrIG1vZGUiIG9wdGltaXph
dGlvbnMuCisgICAgICAgIHJlZHVjZVN0cmVuZ3RoKHByb2NlZHVyZSk7CiAgICAgfQogCiAgICAg
Ly8gVGhpcyBwdXRzIHRoZSBJUiBpbiBxdWlya3MgbW9kZS4KICAgICBsb3dlck1hY3Jvcyhwcm9j
ZWR1cmUpOwogCi0gICAgaWYgKG9wdExldmVsID49IDEpIHsKKyAgICBpZiAob3B0TGV2ZWwgPj0g
MikgewogICAgICAgICByZWR1Y2VTdHJlbmd0aChwcm9jZWR1cmUpOwogCiAgICAgICAgIC8vIEZJ
WE1FOiBBZGQgbW9yZSBvcHRpbWl6YXRpb25zIGhlcmUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNHZW5lcmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0dlbmVyYXRlLmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0dlbmVyYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDggQEAKIAog
I2lmIEVOQUJMRShCM19KSVQpCiAKKyNpbmNsdWRlICJCM0NvbW1vbi5oIgorCiBuYW1lc3BhY2Ug
SlNDIHsKIAogY2xhc3MgQ0NhbGxIZWxwZXJzOwpAQCAtMzgsNyArNDAsNyBAQCBuYW1lc3BhY2Ug
QWlyIHsgY2xhc3MgQ29kZTsgfQogCiAvLyBUaGlzIHRha2VzIGEgQjM6OlByb2NlZHVyZSwgb3B0
aW1pemVzIGl0IGluLXBsYWNlLCBsb3dlcnMgaXQgdG8gQWlyLCBhbmQgcHJlcGFyZXMgdGhlIEFp
ciBmb3IKIC8vIGdlbmVyYXRpb24uCi1KU19FWFBPUlRfUFJJVkFURSB2b2lkIHByZXBhcmVGb3JH
ZW5lcmF0aW9uKFByb2NlZHVyZSYsIHVuc2lnbmVkIG9wdExldmVsID0gMSk7CitKU19FWFBPUlRf
UFJJVkFURSB2b2lkIHByZXBhcmVGb3JHZW5lcmF0aW9uKFByb2NlZHVyZSYsIHVuc2lnbmVkIG9w
dExldmVsID0gZGVmYXVsdE9wdExldmVsKCkpOwogCiAvLyBUaGlzIHRha2VzIGEgQjM6OlByb2Nl
ZHVyZSB0aGF0IGhhcyBiZWVuIHByZXBhcmVkIGZvciBnZW5lcmF0aW9uIChpLmUuIGl0IGhhcyBi
ZWVuIGxvd2VyZWQgdG8gQWlyIGFuZAogLy8gdGhlIEFpciBoYXMgYmVlbiBwcmVwYXJlZCBmb3Ig
Z2VuZXJhdGlvbikgYW5kIGdlbmVyYXRlcyBpdC4gVGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvZiBj
YWxsaW5nCkBAIC00OCw3ICs1MCw3IEBAIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZ2VuZXJhdGUo
UHJvY2VkdXIKIC8vIFRoaXMgdGFrZXMgYSBCMzo6UHJvY2VkdXJlLCBvcHRpbWl6ZXMgaXQgaW4t
cGxhY2UsIGFuZCBsb3dlcnMgaXQgdG8gQWlyLiBZb3UgY2FuIHRoZW4gZ2VuZXJhdGUKIC8vIHRo
ZSBBaXIgdG8gbWFjaGluZSBjb2RlIHVzaW5nIEFpcjo6cHJlcGFyZUZvckdlbmVyYXRpb24oKSBh
bmQgQWlyOjpnZW5lcmF0ZSgpIG9uIHRoZSBQcm9jZWR1cmUncwogLy8gY29kZSgpLgotdm9pZCBn
ZW5lcmF0ZVRvQWlyKFByb2NlZHVyZSYsIHVuc2lnbmVkIG9wdExldmVsID0gMSk7Cit2b2lkIGdl
bmVyYXRlVG9BaXIoUHJvY2VkdXJlJiwgdW5zaWduZWQgb3B0TGV2ZWwgPSBkZWZhdWx0T3B0TGV2
ZWwoKSk7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNIZWFwUmFuZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw0OSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJCM0hlYXBSYW5nZS5oIgotCi0jaWYgRU5BQkxF
KEIzX0pJVCkKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7Ci0KLXZvaWQgSGVhcFJh
bmdlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAgaWYgKCp0aGlzID09IEhl
YXBSYW5nZSgpKSB7Ci0gICAgICAgIG91dC5wcmludCgiQm90dG9tIik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgaWYgKCp0aGlzID09IHRvcCgpKSB7Ci0gICAgICAgIG91dC5wcmludCgi
VG9wIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgb3V0LnByaW50KG1fYmVnaW4sICIu
Li4iLCBtX2VuZCk7Ci19Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwotCi0jZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJh
bmdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJhbmdl
LmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBS
YW5nZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw5MCArMjcsMTUgQEAKIAogI2lmIEVOQUJMRShC
M19KSVQpCiAKLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgotI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorI2luY2x1ZGUgPHd0Zi9SYW5nZS5oPgog
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAogLy8gQWxpYXMgYW5hbHlzaXMgaW4g
QjMgaXMgZG9uZSBieSBjaGVja2luZyBpZiB0d28gaW50ZWdlciByYW5nZXMgb3ZlcmxhcC4gVGhp
cyBpcyBwb3dlcmZ1bCBlbm91Z2gKIC8vIHRvIGJlIHVzZWQgZm9yIFRCQUEtc3R5bGUgYWxpYXMg
YW5hbHlzaXMgdXNlZCBieSB0aGUgREZHLCBGVEwsIGFuZCBMTFZNOiB5b3UganVzdCB0dXJuIGVh
Y2ggbm9kZQogLy8gaW4gdGhlIHRyZWUgb2YgYWJzdHJhY3QgaGVhcHMgaW50byBhIHByZS9wb3N0
IHJhbmdlLgotLy8KLS8vIE5vdGUgdGhhdCB0aGUgJ2JlZ2luJyBpcyBpbmNsdXNpdmUsIHdoaWxl
IHRoZSAnZW5kJyBpcyBleGNsdXNpdmUuIFRoZXNlIHR3byByYW5nZXMgYXJlIG5vbi0KLS8vIG92
ZXJsYXBwaW5nOgotLy8KLS8vICAgICByYW5nZUEgPSAwLi4uOAotLy8gICAgIHJhbmdlQiA9IDgu
Li4xNgotCi1jbGFzcyBIZWFwUmFuZ2UgewotcHVibGljOgotICAgIHR5cGVkZWYgdW5zaWduZWQg
VHlwZTsKLSAgICAKLSAgICBIZWFwUmFuZ2UoKQotICAgICAgICA6IG1fYmVnaW4oMCkKLSAgICAg
ICAgLCBtX2VuZCgwKQotICAgIHsKLSAgICB9Ci0KLSAgICBleHBsaWNpdCBIZWFwUmFuZ2UodW5z
aWduZWQgdmFsdWUpCi0gICAgICAgIDogbV9iZWdpbih2YWx1ZSkKLSAgICAgICAgLCBtX2VuZCh2
YWx1ZSArIDEpCi0gICAgewotICAgICAgICBBU1NFUlQobV9lbmQgPj0gbV9iZWdpbik7Ci0gICAg
fQotCi0gICAgSGVhcFJhbmdlKHVuc2lnbmVkIGJlZ2luLCB1bnNpZ25lZCBlbmQpCi0gICAgICAg
IDogbV9iZWdpbihiZWdpbikKLSAgICAgICAgLCBtX2VuZChlbmQpCi0gICAgewotICAgICAgICBB
U1NFUlQobV9lbmQgPj0gbV9iZWdpbik7Ci0gICAgICAgIGlmIChtX2JlZ2luID09IG1fZW5kKSB7
Ci0gICAgICAgICAgICAvLyBDYW5vbmljYWxpemUgZW1wdHkgcmFuZ2VzLgotICAgICAgICAgICAg
bV9iZWdpbiA9IDA7Ci0gICAgICAgICAgICBtX2VuZCA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBzdGF0aWMgSGVhcFJhbmdlIHRvcCgpCi0gICAgewotICAgICAgICByZXR1cm4gSGVhcFJh
bmdlKDAsIFVJTlRfTUFYKTsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSGVh
cFJhbmdlJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2JlZ2luID09IG90
aGVyLm1fYmVnaW4KLSAgICAgICAgICAgICYmIG1fZW5kID09IG90aGVyLm1fZW5kOwotICAgIH0K
LQotICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBIZWFwUmFuZ2UmIG90aGVyKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwotICAgIH0KLSAgICAKLSAgICBI
ZWFwUmFuZ2Ugb3BlcmF0b3J8KGNvbnN0IEhlYXBSYW5nZSYgb3RoZXIpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gSGVhcFJhbmdlKAotICAgICAgICAgICAgc3RkOjptaW4obV9iZWdpbiwg
b3RoZXIubV9iZWdpbiksCi0gICAgICAgICAgICBzdGQ6Om1heChtX2VuZCwgb3RoZXIubV9lbmQp
KTsKLSAgICB9Ci0gICAgCi0gICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0
dXJuIG1fYmVnaW4gIT0gbV9lbmQ7IH0KLQotICAgIHVuc2lnbmVkIGJlZ2luKCkgY29uc3QgeyBy
ZXR1cm4gbV9iZWdpbjsgfQotICAgIHVuc2lnbmVkIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5k
OyB9Ci0KLSAgICBib29sIG92ZXJsYXBzKGNvbnN0IEhlYXBSYW5nZSYgb3RoZXIpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gV1RGOjpyYW5nZXNPdmVybGFwKG1fYmVnaW4sIG1fZW5kLCBv
dGhlci5tX2JlZ2luLCBvdGhlci5tX2VuZCk7Ci0gICAgfQotCi0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIHVu
c2lnbmVkIG1fYmVnaW47Ci0gICAgdW5zaWduZWQgbV9lbmQ7Ci19OworCit0eXBlZGVmIFJhbmdl
PHVuc2lnbmVkPiBIZWFwUmFuZ2U7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2aXNpb24gMjE0
NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMzNzksMTAgKzMzNzksMTAgQEAgcHJpdmF0ZToKICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAgICAgCi0gICAgSW5kZXhTZXQ8VmFsdWU+
IG1fbG9ja2VkOyAvLyBUaGVzZSBhcmUgdmFsdWVzIHRoYXQgd2lsbCBoYXZlIG5vIFRtcCBpbiBB
aXIuCi0gICAgSW5kZXhNYXA8VmFsdWUsIFRtcD4gbV92YWx1ZVRvVG1wOyAvLyBUaGVzZSBhcmUg
dmFsdWVzIHRoYXQgbXVzdCBoYXZlIGEgVG1wIGluIEFpci4gV2Ugc2F5IHRoYXQgYSBWYWx1ZSog
d2l0aCBhIG5vbi1udWxsIFRtcCBpcyAicGlubmVkIi4KLSAgICBJbmRleE1hcDxWYWx1ZSwgVG1w
PiBtX3BoaVRvVG1wOyAvLyBFYWNoIFBoaSBnZXRzIGl0cyBvd24gVG1wLgotICAgIEluZGV4TWFw
PEIzOjpCYXNpY0Jsb2NrLCBBaXI6OkJhc2ljQmxvY2sqPiBtX2Jsb2NrVG9CbG9jazsKKyAgICBJ
bmRleFNldDxWYWx1ZSo+IG1fbG9ja2VkOyAvLyBUaGVzZSBhcmUgdmFsdWVzIHRoYXQgd2lsbCBo
YXZlIG5vIFRtcCBpbiBBaXIuCisgICAgSW5kZXhNYXA8VmFsdWUqLCBUbXA+IG1fdmFsdWVUb1Rt
cDsgLy8gVGhlc2UgYXJlIHZhbHVlcyB0aGF0IG11c3QgaGF2ZSBhIFRtcCBpbiBBaXIuIFdlIHNh
eSB0aGF0IGEgVmFsdWUqIHdpdGggYSBub24tbnVsbCBUbXAgaXMgInBpbm5lZCIuCisgICAgSW5k
ZXhNYXA8VmFsdWUqLCBUbXA+IG1fcGhpVG9UbXA7IC8vIEVhY2ggUGhpIGdldHMgaXRzIG93biBU
bXAuCisgICAgSW5kZXhNYXA8QjM6OkJhc2ljQmxvY2sqLCBBaXI6OkJhc2ljQmxvY2sqPiBtX2Js
b2NrVG9CbG9jazsKICAgICBIYXNoTWFwPEIzOjpTdGFja1Nsb3QqLCBBaXI6OlN0YWNrU2xvdCo+
IG1fc3RhY2tUb1N0YWNrOwogICAgIEhhc2hNYXA8VmFyaWFibGUqLCBUbXA+IG1fdmFyaWFibGVU
b1RtcDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTW92ZUNvbnN0YW50cy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTW92ZUNvbnN0YW50
cy5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01v
dmVDb25zdGFudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHByaXZhdGU6
CiAgICAgewogICAgICAgICBEb21pbmF0b3JzJiBkb21pbmF0b3JzID0gbV9wcm9jLmRvbWluYXRv
cnMoKTsKICAgICAgICAgSGFzaE1hcDxWYWx1ZUtleSwgVmFsdWUqPiB2YWx1ZUZvckNvbnN0YW50
OwotICAgICAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBWZWN0b3I8VmFsdWUqPj4gbWF0ZXJpYWxp
emF0aW9ucyhtX3Byb2Muc2l6ZSgpKTsKKyAgICAgICAgSW5kZXhNYXA8QmFzaWNCbG9jayosIFZl
Y3RvcjxWYWx1ZSo+PiBtYXRlcmlhbGl6YXRpb25zKG1fcHJvYy5zaXplKCkpOwogCiAgICAgICAg
IC8vIFdlIGRldGVybWluZSB3aGVyZSB0aGluZ3MgZ2V0IG1hdGVyaWFsaXplZCBiYXNlZCBvbiB3
aGVyZSB0aGV5IGFyZSB1c2VkLgogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9w
cm9jKSB7CkBAIC0yNzQsNyArMjc0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgZm9yIChhdXRvJiBl
bnRyeSA6IG1fY29uc3RUYWJsZSkKICAgICAgICAgICAgIG1fZGF0YVNlY3Rpb25bZW50cnkudmFs
dWVdID0gZW50cnkua2V5LnZhbHVlKCk7CiAKLSAgICAgICAgSW5kZXhTZXQ8VmFsdWU+IG9mZkxp
bWl0czsKKyAgICAgICAgSW5kZXhTZXQ8VmFsdWUqPiBvZmZMaW1pdHM7CiAgICAgICAgIGZvciAo
QmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2MpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
dmFsdWVJbmRleCA9IDA7IHZhbHVlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK3ZhbHVlSW5kZXgp
IHsKICAgICAgICAgICAgICAgICBTdGFja21hcFZhbHVlKiB2YWx1ZSA9IGJsb2NrLT5hdCh2YWx1
ZUluZGV4KS0+YXM8U3RhY2ttYXBWYWx1ZT4oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1BoaUNoaWxkcmVuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzUGhpQ2hpbGRyZW4uaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzUGhpQ2hpbGRyZW4uaAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDcgKzE2OCw3
IEBAIHB1YmxpYzoKICAgICBjb25zdCBWZWN0b3I8VmFsdWUqLCA4PiYgcGhpcygpIGNvbnN0IHsg
cmV0dXJuIG1fcGhpczsgfQogCiBwcml2YXRlOgotICAgIEluZGV4TWFwPFZhbHVlLCBWZWN0b3I8
VXBzaWxvblZhbHVlKj4+IG1fdXBzaWxvbnM7CisgICAgSW5kZXhNYXA8VmFsdWUqLCBWZWN0b3I8
VXBzaWxvblZhbHVlKj4+IG1fdXBzaWxvbnM7CiAgICAgVmVjdG9yPFZhbHVlKiwgOD4gbV9waGlz
OwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCShy
ZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBQcm9jZWR1cmU6Omlu
dmFsaWRhdGVDRkcoKQogCiB2b2lkIFByb2NlZHVyZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAogewotICAgIEluZGV4U2V0PFZhbHVlPiB2YWx1ZXNJbkJsb2NrczsKKyAgICBJbmRleFNl
dDxWYWx1ZSo+IHZhbHVlc0luQmxvY2tzOwogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiAq
dGhpcykgewogICAgICAgICBvdXQucHJpbnQoZGVlcER1bXAoKnRoaXMsIGJsb2NrKSk7CiAgICAg
ICAgIHZhbHVlc0luQmxvY2tzLmFkZEFsbCgqYmxvY2spOwpAQCAtMjQ1LDcgKzI0NSw3IEBAIHZv
aWQgUHJvY2VkdXJlOjpkZWxldGVWYWx1ZShWYWx1ZSogdmFsdWUKIAogdm9pZCBQcm9jZWR1cmU6
OmRlbGV0ZU9ycGhhbnMoKQogewotICAgIEluZGV4U2V0PFZhbHVlPiB2YWx1ZXNJbkJsb2NrczsK
KyAgICBJbmRleFNldDxWYWx1ZSo+IHZhbHVlc0luQmxvY2tzOwogICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiAqdGhpcykKICAgICAgICAgdmFsdWVzSW5CbG9ja3MuYWRkQWxsKCpibG9jayk7
CiAKQEAgLTMzMyw3ICszMzMsNyBAQCBWYWx1ZSogUHJvY2VkdXJlOjphZGRWYWx1ZUltcGwoVmFs
dWUqIHZhCiAKIHZvaWQgUHJvY2VkdXJlOjpzZXRCbG9ja09yZGVySW1wbChWZWN0b3I8QmFzaWNC
bG9jayo+JiBibG9ja3MpCiB7Ci0gICAgSW5kZXhTZXQ8QmFzaWNCbG9jaz4gYmxvY2tzU2V0Owor
ICAgIEluZGV4U2V0PEJhc2ljQmxvY2sqPiBibG9ja3NTZXQ7CiAgICAgYmxvY2tzU2V0LmFkZEFs
bChibG9ja3MpOwogCiAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6ICp0aGlzKSB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VEb3VibGVUb0Zsb2F0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VEb3VibGVUb0Zsb2F0
LmNwcAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVk
dWNlRG91YmxlVG9GbG9hdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyNCwxOCArNDI0LDE4IEBA
IHByaXZhdGU6CiAKICAgICAvLyBTZXQgb2YgYWxsIHRoZSBEb3VibGUgdmFsdWVzIHRoYXQgYXJl
IGFjdHVhbGx5IHVzZWQgYXMgRG91YmxlLgogICAgIC8vIENvbnZlcnRpbmcgYW55IG9mIHRoZW0g
dG8gRmxvYXQgd291bGQgbG9zZSBwcmVjaXNpb24uCi0gICAgSW5kZXhTZXQ8VmFsdWU+IG1fdmFs
dWVzVXNlZEFzRG91YmxlOworICAgIEluZGV4U2V0PFZhbHVlKj4gbV92YWx1ZXNVc2VkQXNEb3Vi
bGU7CiAKICAgICAvLyBTZXQgb2YgYWxsIHRoZSBQaGkgb2YgdHlwZSBEb3VibGUgdGhhdCByZWFs
bHkgY29udGFpbnMgYSBEb3VibGUuCiAgICAgLy8gQW55IERvdWJsZSBQaGkgbm90IGluIHRoZSBz
ZXQgY2FuIGJlIGNvbnZlcnRlZCB0byBGbG9hdCB3aXRob3V0IGxvc2luZyBwcmVjaXNpb24uCi0g
ICAgSW5kZXhTZXQ8VmFsdWU+IG1fcGhpc0NvbnRhaW5pbmdEb3VibGU7CisgICAgSW5kZXhTZXQ8
VmFsdWUqPiBtX3BoaXNDb250YWluaW5nRG91YmxlOwogCiAgICAgLy8gQW55IHZhbHVlIHRoYXQg
d2FzIGNvbnZlcnRlZCBmcm9tIHByb2R1Y2luZyBhIERvdWJsZSB0byBwcm9kdWNpbmcgYSBGbG9h
dC4KICAgICAvLyBUaGlzIHNldCBkb2VzIG5vdCBpbmNsdWRlIFBoaS1VcHNpbG9ucy4KLSAgICBJ
bmRleFNldDxWYWx1ZT4gbV9jb252ZXJ0ZWRWYWx1ZTsKKyAgICBJbmRleFNldDxWYWx1ZSo+IG1f
Y29udmVydGVkVmFsdWU7CiAKICAgICAvLyBBbnkgdmFsdWUgdGhhdCBwcmV2aW91c2x5IHByb2R1
Y2VkIERvdWJsZSBhbmQgbm93IHByb2R1Y2UgRmxvYXQuCi0gICAgSW5kZXhTZXQ8VmFsdWU+IG1f
Y29udmVydGVkUGhpczsKKyAgICBJbmRleFNldDxWYWx1ZSo+IG1fY29udmVydGVkUGhpczsKIH07
CiAKIHZvaWQgcHJpbnRHcmFwaElmQ29udmVydGluZyhQcm9jZWR1cmUmIHByb2NlZHVyZSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHJl
dmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVu
Z3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM5Miw3ICsyMzkyLDcgQEAgcHJpdmF0ZToKIAog
ICAgIHZvaWQga2lsbERlYWRDb2RlKCkKICAgICB7Ci0gICAgICAgIEdyYXBoTm9kZVdvcmtsaXN0
PFZhbHVlKiwgSW5kZXhTZXQ8VmFsdWU+PiB3b3JrbGlzdDsKKyAgICAgICAgR3JhcGhOb2RlV29y
a2xpc3Q8VmFsdWUqLCBJbmRleFNldDxWYWx1ZSo+PiB3b3JrbGlzdDsKICAgICAgICAgVmVjdG9y
PFVwc2lsb25WYWx1ZSosIDY0PiB1cHNpbG9uczsKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBi
bG9jayA6IG1fcHJvYykgewogICAgICAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiAqYmxvY2sp
IHsKQEAgLTI0MjksNyArMjQyOSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KIAotICAgICAgICBJbmRleFNldDxWYXJpYWJsZT4gbGl2ZVZhcmlhYmxlczsK
KyAgICAgICAgSW5kZXhTZXQ8VmFyaWFibGUqPiBsaXZlVmFyaWFibGVzOwogICAgICAgICAKICAg
ICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvYykgewogICAgICAgICAgICAgc2l6
ZV90IHNvdXJjZUluZGV4ID0gMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1NT
QUNhbGN1bGF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
U0FDYWxjdWxhdG9yLmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1NTQUNhbGN1bGF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTYsNyArMTU2LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgVmVjdG9yPERlZio+IG1fcGhpczsKICAgICB9OwogICAgIAotICAgIElu
ZGV4TWFwPEJhc2ljQmxvY2ssIEJsb2NrRGF0YT4gbV9kYXRhOworICAgIEluZGV4TWFwPEJhc2lj
QmxvY2sqLCBCbG9ja0RhdGE+IG1fZGF0YTsKIAogICAgIERvbWluYXRvcnMqIG1fZG9taW5hdG9y
cyB7IG51bGxwdHIgfTsKICAgICBQcm9jZWR1cmUmIG1fcHJvYzsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1VzZUNvdW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1VzZUNvdW50cy5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNVc2VDb3VudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ4LDcgKzQ4
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgdW5zaWduZWQgbnVtVXNpbmdJbnN0cnVjdGlvbnMgeyAw
IH07CiAgICAgfTsKICAgICAKLSAgICBJbmRleE1hcDxWYWx1ZSwgQ291bnRzPiBtX2NvdW50czsK
KyAgICBJbmRleE1hcDxWYWx1ZSosIENvdW50cz4gbV9jb3VudHM7CiB9OwogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCShyZXZp
c2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTIwLDcgKzEyMCw3IEBAIFN0YXRpY0xvY2sgY3Jhc2hMb2NrOwogCiBW
TSogdm07CiAKLXN0ZDo6dW5pcXVlX3B0cjxDb21waWxhdGlvbj4gY29tcGlsZShQcm9jZWR1cmUm
IHByb2NlZHVyZSwgdW5zaWduZWQgb3B0TGV2ZWwgPSAxKQorc3RkOjp1bmlxdWVfcHRyPENvbXBp
bGF0aW9uPiBjb21waWxlKFByb2NlZHVyZSYgcHJvY2VkdXJlLCB1bnNpZ25lZCBvcHRMZXZlbCA9
IGRlZmF1bHRPcHRMZXZlbCgpKQogewogICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPENvbXBp
bGF0aW9uPihCMzo6Y29tcGlsZSgqdm0sIHByb2NlZHVyZSwgb3B0TGV2ZWwpKTsKIH0KQEAgLTk5
MCw2ICs5OTAsNyBAQCB2b2lkIHRlc3RNdWxMb2FkVHdpY2UoKQogCiAgICAgdGVzdCgwKTsKICAg
ICB0ZXN0KDEpOworICAgIHRlc3QoMik7CiB9CiAKIHZvaWQgdGVzdE11bEFkZEFyZ3NMZWZ0KCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNC
eUdyYXBoQ29sb3JpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuY3BwCShyZXZpc2lvbiAy
MTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0
ZXJzQnlHcmFwaENvbG9yaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAog
I2lmIEVOQUJMRShCM19KSVQpCiAKICNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWly
Rml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCIKICNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIK
ICNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgiCkBA
IC0xNTg1LDYgKzE1ODYsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIG1fY29hbGVzY2luZ0NhbmRp
ZGF0ZXMuY2xlYXIoKTsKICAgICAgICAgbV93b3JrbGlzdE1vdmVzLmNsZWFyKCk7CiAKKyAgICAg
ICAgLy8gRklYTUU6IEl0IHNlZW1zIGxpa2Ugd2UgZG9uJ3QgbmVlZCB0byByZWNvbXB1dGUgbGl2
ZW5lc3MuIFdlIGp1c3QgbmVlZCB0byB1cGRhdGUgaXRzIGRhdGEKKyAgICAgICAgLy8gc3RydWN0
dXJlcyBzbyB0aGF0IGl0IGtub3dzIHRoYXQgdGhlIG5ld2x5IGludHJvZHVjZWQgdGVtcG9yYXJp
ZXMgYXJlIG5vdCBsaXZlIGF0IGFueSBiYXNpYworICAgICAgICAvLyBibG9jayBib3VuZGFyeS4g
VGhpcyBzaG91bGQgdHJpdmlhbGx5IGJlIHRydWUgZm9yIG5vdy4KICAgICAgICAgVG1wTGl2ZW5l
c3M8YmFuaz4gbGl2ZW5lc3MobV9jb2RlKTsKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9j
ayA6IG1fY29kZSkgewogICAgICAgICAgICAgdHlwZW5hbWUgVG1wTGl2ZW5lc3M8YmFuaz46Okxv
Y2FsQ2FsYyBsb2NhbENhbGMobGl2ZW5lc3MsIGJsb2NrKTsKQEAgLTE3OTgsNyArMTgwMiw3IEBA
IHB1YmxpYzoKICAgICAgICAgbV9udW1JdGVyYXRpb25zID0gMDsKICAgICAgICAgYWxsb2NhdGVP
bkJhbms8RlA+KCk7CiAKLSAgICAgICAgZml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMoKTsKKyAgICAg
ICAgZml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMobV9jb2RlKTsKIAogICAgICAgICBpZiAocmVwb3J0
U3RhdHMpCiAgICAgICAgICAgICBkYXRhTG9nKCJOdW0gaXRlcmF0aW9ucyA9ICIsIG1fbnVtSXRl
cmF0aW9ucywgIlxuIik7CkBAIC0xOTU0LDcgKzE5NTgsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcEZhc3QoWyZdIChUbXAm
IHRtcCkgewotICAgICAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkgfHwgdG1wLmlzR1Ao
KSA9PSAoYmFuayAhPSBHUCkpCisgICAgICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSB8
fCB0bXAuYmFuaygpICE9IGJhbmspCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAK
ICAgICAgICAgICAgICAgICAgICAgVG1wIGFsaWFzVG1wID0gYWxsb2NhdG9yLmdldEFsaWFzKHRt
cCk7CkBAIC0yMTY5LDkgKzIxNzMsMTIgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAgICAg
ICB0bXAgPSBtX2NvZGUubmV3VG1wKGJhbmspOwogICAgICAgICAgICAgICAgICAgICB1bnNwaWxs
YWJsZVRtcHMuYWRkKEFic29sdXRlVG1wTWFwcGVyPGJhbms+OjphYnNvbHV0ZUluZGV4KHRtcCkp
OworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT0g
QXJnOjpTY3JhdGNoKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAg
ICAgICAgICAgICAgIEFyZyBhcmcgPSBBcmc6OnN0YWNrKHN0YWNrU2xvdEVudHJ5LT52YWx1ZSk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzQW55VXNlKHJvbGUpICYmIHJvbGUgIT0g
QXJnOjpTY3JhdGNoKQorICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0FueVVzZShyb2xl
KSkKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoaW5zdEluZGV4
LCBtb3ZlLCBpbnN0Lm9yaWdpbiwgYXJnLCB0bXApOwogICAgICAgICAgICAgICAgICAgICBpZiAo
QXJnOjppc0FueURlZihyb2xlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNl
dC5pbnNlcnQoaW5zdEluZGV4ICsgMSwgbW92ZSwgaW5zdC5vcmlnaW4sIHRtcCwgYXJnKTsKQEAg
LTIxODcsNjYgKzIxOTQsNiBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQogCi0gICAgdm9p
ZCBmaXhTcGlsbHNBZnRlclRlcm1pbmFscygpCi0gICAgewotICAgICAgICAvLyBCZWNhdXNlIHRo
ZXJlIG1heSBiZSB0ZXJtaW5hbHMgdGhhdCBwcm9kdWNlIHZhbHVlcywgSVJDIG1heQotICAgICAg
ICAvLyB3YW50IHRvIHNwaWxsIHRob3NlIHRlcm1pbmFscy4gSXQnbGwgaGFwcGVuIHRvIHNwaWxs
IGl0IGFmdGVyCi0gICAgICAgIC8vIHRoZSB0ZXJtaW5hbC4gSWYgd2UgbGVmdCB0aGUgZ3JhcGgg
aW4gdGhpcyBzdGF0ZSwgaXQnZCBiZSBpbnZhbGlkCi0gICAgICAgIC8vIGJlY2F1c2UgYSB0ZXJt
aW5hbCBtdXN0IGJlIHRoZSBsYXN0IGluc3RydWN0aW9uIGluIGEgYmxvY2suCi0gICAgICAgIC8v
IFdlIGZpeCB0aGF0IGhlcmUuCi0KLSAgICAgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldCht
X2NvZGUpOwotCi0gICAgICAgIGJvb2wgYWRkZWRCbG9ja3MgPSBmYWxzZTsKLQotICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCB0
ZXJtaW5hbEluZGV4ID0gYmxvY2stPnNpemUoKTsKLSAgICAgICAgICAgIGJvb2wgZm91bmRUZXJt
aW5hbCA9IGZhbHNlOwotICAgICAgICAgICAgd2hpbGUgKHRlcm1pbmFsSW5kZXgtLSkgewotICAg
ICAgICAgICAgICAgIGlmIChibG9jay0+YXQodGVybWluYWxJbmRleCkuaXNUZXJtaW5hbCgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGZvdW5kVGVybWluYWwgPSB0cnVlOwotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBBU1NFUlRfVU5VU0VEKGZvdW5kVGVybWluYWwsIGZvdW5kVGVybWluYWwpOwotCi0gICAg
ICAgICAgICBpZiAodGVybWluYWxJbmRleCA9PSBibG9jay0+c2l6ZSgpIC0gMSkKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgLy8gVGhlcmUgbXVzdCBiZSBpbnN0cnVj
dGlvbnMgYWZ0ZXIgdGhlIHRlcm1pbmFsIGJlY2F1c2UgaXQncyBub3QgdGhlIGxhc3QgaW5zdHJ1
Y3Rpb24uCi0gICAgICAgICAgICBBU1NFUlQodGVybWluYWxJbmRleCA8IGJsb2NrLT5zaXplKCkg
LSAxKTsKLSAgICAgICAgICAgIFZlY3RvcjxJbnN0LCAxPiBpbnN0c1RvTW92ZTsKLSAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IHRlcm1pbmFsSW5kZXggKyAxOyBpIDwgYmxvY2stPnNpemUo
KTsgaSsrKQotICAgICAgICAgICAgICAgIGluc3RzVG9Nb3ZlLmFwcGVuZChibG9jay0+YXQoaSkp
OwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5zdHNUb01vdmUuc2l6ZSgpKTsKLQotICAg
ICAgICAgICAgZm9yIChGcmVxdWVudGVkQmxvY2smIGZyZXF1ZW50ZWRTdWNjZXNzb3IgOiBibG9j
ay0+c3VjY2Vzc29ycygpKSB7Ci0gICAgICAgICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29y
ID0gZnJlcXVlbnRlZFN1Y2Nlc3Nvci5ibG9jaygpOwotICAgICAgICAgICAgICAgIC8vIElmIHN1
Y2Nlc3NvcidzIG9ubHkgcHJlZGVjZXNzb3IgaXMgYmxvY2ssIHdlIGNhbiBwbGFudCB0aGUgc3Bp
bGwgaW5zaWRlCi0gICAgICAgICAgICAgICAgLy8gdGhlIHN1Y2Nlc3Nvci4gT3RoZXJ3aXNlLCB3
ZSBtdXN0IHNwbGl0IHRoZSBjcml0aWNhbCBlZGdlIGFuZCBjcmVhdGUKLSAgICAgICAgICAgICAg
ICAvLyBhIG5ldyBibG9jayBmb3IgdGhlIHNwaWxsLgotICAgICAgICAgICAgICAgIGlmIChzdWNj
ZXNzb3ItPm51bVByZWRlY2Vzc29ycygpID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgaW5z
ZXJ0aW9uU2V0Lmluc2VydEluc3RzKDAsIGluc3RzVG9Nb3ZlKTsKLSAgICAgICAgICAgICAgICAg
ICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoc3VjY2Vzc29yKTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICBhZGRlZEJsb2NrcyA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBXZSBwcm9iYWJseSB3YW50IGJldHRlciBibG9jayBvcmRlcmlu
ZyBoZXJlLgotICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBuZXdCbG9jayA9IG1fY29k
ZS5hZGRCbG9jaygpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IEluc3QmIGluc3Qg
OiBpbnN0c1RvTW92ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ld0Jsb2NrLT5hcHBlbmRJ
bnN0KGluc3QpOwotICAgICAgICAgICAgICAgICAgICBuZXdCbG9jay0+YXBwZW5kSW5zdChJbnN0
KEp1bXAsIGluc3RzVG9Nb3ZlLmxhc3QoKS5vcmlnaW4pKTsKLSAgICAgICAgICAgICAgICAgICAg
bmV3QmxvY2stPnN1Y2Nlc3NvcnMoKS5hcHBlbmQoc3VjY2Vzc29yKTsKLSAgICAgICAgICAgICAg
ICAgICAgZnJlcXVlbnRlZFN1Y2Nlc3Nvci5ibG9jaygpID0gbmV3QmxvY2s7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBibG9jay0+cmVzaXplKHRlcm1p
bmFsSW5kZXggKyAxKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhZGRlZEJsb2NrcykKLSAg
ICAgICAgICAgIG1fY29kZS5yZXNldFJlYWNoYWJpbGl0eSgpOwotICAgIH0KLQogICAgIENvZGUm
IG1fY29kZTsKICAgICBUbXBXaWR0aCBtX3RtcFdpZHRoOwogICAgIFVzZUNvdW50czxUbXA+JiBt
X3VzZUNvdW50czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2Nh
dGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdp
c3RlcnNCeUxpbmVhclNjYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTYzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmgiCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQXJnSW5saW5lcy5oIgorI2luY2x1
ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5oIgor
I2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgi
CisjaW5jbHVkZSAiQWlyTGl2ZW5lc3MuaCIKKyNpbmNsdWRlICJBaXJQYWRJbnRlcmZlcmVuY2Uu
aCIKKyNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCisjaW5jbHVkZSAiQWlyUmVnTGl2ZW5lc3Mu
aCIKKyNpbmNsdWRlICJBaXJUbXBJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+
CisjaW5jbHVkZSA8d3RmL1JhbmdlLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eyBuYW1lc3BhY2UgQWlyIHsKKworbmFtZXNwYWNlIHsKKworTk9fUkVUVVJOX0RVRV9UT19DUkFT
SCBORVZFUl9JTkxJTkUgdm9pZCBjcmFzaCgpCit7CisgICAgQ1JBU0goKTsKK30KKworI3VuZGVm
IFJFTEVBU0VfQVNTRVJUCisjZGVmaW5lIFJFTEVBU0VfQVNTRVJUKGFzc2VydGlvbikgZG8geyBc
CisgICAgaWYgKCEoYXNzZXJ0aW9uKSkgeyBcCisgICAgICAgIFdURlJlcG9ydEFzc2VydGlvbkZh
aWx1cmUoX19GSUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAjYXNzZXJ0aW9u
KTsgXAorICAgICAgICBjcmFzaCgpOyBcCisgICAgfSBcCit9IHdoaWxlICgwKQorCitib29sIHZl
cmJvc2UoKSB7IHJldHVybiBPcHRpb25zOjphaXJMaW5lYXJTY2FuVmVyYm9zZSgpOyB9Citib29s
IHNob3VsZFNwaWxsRXZlcnl0aGluZygpIHsgcmV0dXJuIE9wdGlvbnM6OmFpckxpbmVhclNjYW5T
cGlsbHNFdmVyeXRoaW5nKCk7IH0KKwordHlwZWRlZiBSYW5nZTxzaXplX3Q+IEludGVydmFsOwor
CitzdHJ1Y3QgVG1wRGF0YSB7CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
CisgICAgeworICAgICAgICBvdXQucHJpbnQoIntpbnRlcnZhbCA9ICIsIGludGVydmFsLCAiLCBz
cGlsbGVkID0gIiwgcG9pbnRlckR1bXAoc3BpbGxlZCksICIsIGFzc2lnbmVkID0gIiwgYXNzaWdu
ZWQsICIsIGlzVW5zcGlsbGFibGUgPSAiLCBpc1Vuc3BpbGxhYmxlLCAiLCBwb3NzaWJsZVJlZ3Mg
PSAiLCBwb3NzaWJsZVJlZ3MsICIsIGRpZEJ1aWxkUG9zc2libGVSZWdzID0gIiwgZGlkQnVpbGRQ
b3NzaWJsZVJlZ3MsICJ9Iik7CisgICAgfQorICAgIAorICAgIHZvaWQgdmFsaWRhdGUoKQorICAg
IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIShzcGlsbGVkICYmIGFzc2lnbmVkKSk7CisgICAg
fQorICAgIAorICAgIEludGVydmFsIGludGVydmFsOworICAgIFN0YWNrU2xvdCogc3BpbGxlZCB7
IG51bGxwdHIgfTsKKyAgICBSZWdpc3RlclNldCBwb3NzaWJsZVJlZ3M7CisgICAgUmVnIGFzc2ln
bmVkOworICAgIGJvb2wgaXNVbnNwaWxsYWJsZSB7IGZhbHNlIH07CisgICAgYm9vbCBkaWRCdWls
ZFBvc3NpYmxlUmVncyB7IGZhbHNlIH07Cit9OworCitzdHJ1Y3QgQ2xvYmJlciB7CisgICAgQ2xv
YmJlcigpCisgICAgeworICAgIH0KKyAgICAKKyAgICBDbG9iYmVyKHNpemVfdCBpbmRleCwgUmVn
aXN0ZXJTZXQgcmVncykKKyAgICAgICAgOiBpbmRleChpbmRleCkKKyAgICAgICAgLCByZWdzKHJl
Z3MpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKKyAgICB7CisgICAgICAgIG91dC5wcmludChpbmRleCwgIjoiLCByZWdzKTsKKyAgICB9
CisgICAgCisgICAgc2l6ZV90IGluZGV4IHsgMCB9OworICAgIFJlZ2lzdGVyU2V0IHJlZ3M7Cit9
OworCit0ZW1wbGF0ZTxCYW5rIGJhbms+CitjbGFzcyBMaW5lYXJTY2FuIHsKK3B1YmxpYzoKKyAg
ICBMaW5lYXJTY2FuKENvZGUmIGNvZGUpCisgICAgICAgIDogbV9jb2RlKGNvZGUpCisgICAgICAg
ICwgbV9zdGFydEluZGV4KGNvZGUuc2l6ZSgpKQorICAgICAgICAsIG1fbWFwKGNvZGUubnVtVG1w
cyhiYW5rKSkKKyAgICAgICAgLCBtX2luc2VydGlvblNldHMoY29kZS5zaXplKCksIGNvZGUpCisg
ICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIHJ1bigpCisgICAgeworICAgICAgICBidWlsZFJl
Z2lzdGVyU2V0KCk7CisgICAgICAgIGJ1aWxkSW5kaWNlcygpOworICAgICAgICBidWlsZEludGVy
dmFscygpOworICAgICAgICBpZiAoc2hvdWxkU3BpbGxFdmVyeXRoaW5nKCkpIHsKKyAgICAgICAg
ICAgIHNwaWxsRXZlcnl0aGluZygpOworICAgICAgICAgICAgZW1pdFNwaWxsQ29kZSgpOworICAg
ICAgICB9CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIHByZXBhcmVJbnRlcnZhbHMo
KTsKKyAgICAgICAgICAgIGF0dGVtcHRTY2FuKCk7CisgICAgICAgICAgICBpZiAoIW1fZGlkU3Bp
bGwpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBlbWl0U3BpbGxDb2RlKCk7
CisgICAgICAgIH0KKyAgICAgICAgaW5zZXJ0U3BpbGxDb2RlKCk7CisgICAgICAgIGFzc2lnblJl
Z2lzdGVycygpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgdm9pZCBidWlsZFJlZ2lzdGVy
U2V0KCkKKyAgICB7CisgICAgICAgIG1fcmVnaXN0ZXJzID0gbV9jb2RlLnJlZ3NJblByaW9yaXR5
T3JkZXIoYmFuayk7CisgICAgICAgIG1fcmVnaXN0ZXJTZXQuc2V0QWxsKG1fcmVnaXN0ZXJzKTsK
KyAgICB9CisKKyAgICB2b2lkIGJ1aWxkSW5kaWNlcygpCisgICAgeworICAgICAgICBzaXplX3Qg
aW5kZXggPSAwOworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7Cisg
ICAgICAgICAgICBtX3N0YXJ0SW5kZXhbYmxvY2tdID0gaW5kZXg7CisgICAgICAgICAgICBpbmRl
eCArPSBibG9jay0+c2l6ZSgpICsgMTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBzaXpl
X3QgaW5kZXhPZkhlYWQoQmFzaWNCbG9jayogYmxvY2spCisgICAgeworICAgICAgICByZXR1cm4g
bV9zdGFydEluZGV4W2Jsb2NrXTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IGluZGV4T2ZUYWls
KEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGluZGV4T2ZIZWFkKGJs
b2NrKSArIGJsb2NrLT5zaXplKCk7CisgICAgfQorICAgIAorICAgIHNpemVfdCBpbmRleE9mKEJh
c2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25lZCBpbnN0SW5kZXgsIEFyZzo6UGhhc2UgcGhhc2UpCisg
ICAgeworICAgICAgICByZXR1cm4gaW5kZXhPZkhlYWQoYmxvY2spICsgaW5zdEluZGV4ICsgcGhh
c2U7CisgICAgfQorICAgIAorICAgIEludGVydmFsIGludGVydmFsKHNpemVfdCBpbmRleE9mRWFy
bHksIEFyZzo6VGltaW5nIHRpbWluZykKKyAgICB7CisgICAgICAgIHN3aXRjaCAodGltaW5nKSB7
CisgICAgICAgIGNhc2UgQXJnOjpPbmx5RWFybHk6CisgICAgICAgICAgICByZXR1cm4gSW50ZXJ2
YWwoaW5kZXhPZkVhcmx5KTsKKyAgICAgICAgY2FzZSBBcmc6Ok9ubHlMYXRlOgorICAgICAgICAg
ICAgcmV0dXJuIEludGVydmFsKGluZGV4T2ZFYXJseSArIDEpOworICAgICAgICBjYXNlIEFyZzo6
RWFybHlBbmRMYXRlOgorICAgICAgICAgICAgcmV0dXJuIEludGVydmFsKGluZGV4T2ZFYXJseSwg
aW5kZXhPZkVhcmx5ICsgMik7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybiBJbnRlcnZhbCgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGJ1
aWxkSW50ZXJ2YWxzKCkKKyAgICB7CisgICAgICAgIFRtcExpdmVuZXNzPGJhbms+IGxpdmVuZXNz
KG1fY29kZSk7CisgICAgICAgIAorICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9j
b2RlKSB7CisgICAgICAgICAgICBzaXplX3QgaW5kZXhPZkhlYWQgPSB0aGlzLT5pbmRleE9mSGVh
ZChibG9jayk7CisgICAgICAgICAgICBzaXplX3QgaW5kZXhPZlRhaWwgPSB0aGlzLT5pbmRleE9m
VGFpbChibG9jayk7CisgICAgICAgICAgICBmb3IgKFRtcCB0bXAgOiBsaXZlbmVzcy5saXZlQXRI
ZWFkKGJsb2NrKSkgeworICAgICAgICAgICAgICAgIGlmICghdG1wLmlzUmVnKCkpCisgICAgICAg
ICAgICAgICAgICAgIG1fbWFwW3RtcF0uaW50ZXJ2YWwgfD0gSW50ZXJ2YWwoaW5kZXhPZkhlYWQp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChUbXAgdG1wIDogbGl2ZW5lc3MubGl2
ZUF0VGFpbChibG9jaykpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXRtcC5pc1JlZygpKQorICAg
ICAgICAgICAgICAgICAgICBtX21hcFt0bXBdLmludGVydmFsIHw9IEludGVydmFsKGluZGV4T2ZU
YWlsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnN0SW5kZXggPSAwOyBpbnN0SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK2luc3RJbmRl
eCkgeworICAgICAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsK
KyAgICAgICAgICAgICAgICBzaXplX3QgaW5kZXhPZkVhcmx5ID0gaW5kZXhPZkhlYWQgKyBpbnN0
SW5kZXg7CisgICAgICAgICAgICAgICAgaW5zdC5mb3JFYWNoVG1wKAorICAgICAgICAgICAgICAg
ICAgICBbJl0gKFRtcCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwgQmFuayB0bXBCYW5rLCBXaWR0aCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcC5pc1JlZygpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXBC
YW5rICE9IGJhbmspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgICAgICAgICAgbV9tYXBbdG1wXS5pbnRlcnZhbCB8PSBpbnRlcnZhbChpbmRleE9m
RWFybHksIEFyZzo6dGltaW5nKHJvbGUpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIFJlZ0xpdmVuZXNzOjpMb2NhbENhbGMgbG9jYWxDYWxj
KGxpdmVuZXNzLCBibG9jayk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGF1dG8gcmVjb3Jk
ID0gWyZdICh1bnNpZ25lZCBpbnN0SW5kZXgpIHsKKyAgICAgICAgICAgICAgICBSZWdpc3RlclNl
dCByZWdzID0gbG9jYWxDYWxjLmxpdmUoKTsKKyAgICAgICAgICAgICAgICBpZiAoSW5zdCogcHJl
diA9IGJsb2NrLT5nZXQoaW5zdEluZGV4IC0gMSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJl
di0+Zm9yRWFjaDxSZWc+KAorICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChSZWcmIHJlZywg
QXJnOjpSb2xlIHJvbGUsIEJhbmssIFdpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKEFyZzo6aXNMYXRlRGVmKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZWdzLmFkZChyZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChwcmV2LT5raW5kLm9wY29kZSA9PSBQYXRjaCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJlZ3MubWVyZ2UocHJldi0+ZXh0cmFDbG9iYmVyZWRSZWdzKCkpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoSW5zdCogbmV4dCA9IGJsb2NrLT5n
ZXQoaW5zdEluZGV4KSkgeworICAgICAgICAgICAgICAgICAgICBuZXh0LT5mb3JFYWNoPFJlZz4o
CisgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKFJlZyYgcmVnLCBBcmc6OlJvbGUgcm9sZSwg
QmFuaywgV2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0Vh
cmx5RGVmKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdzLmFkZChy
ZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIGlm
IChuZXh0LT5raW5kLm9wY29kZSA9PSBQYXRjaCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
Z3MubWVyZ2UobmV4dC0+ZXh0cmFFYXJseUNsb2JiZXJlZFJlZ3MoKSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJlZ3MuZmlsdGVyKG1fcmVn
aXN0ZXJTZXQpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChyZWdzLmlz
RW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIG1fY2xvYmJlcnMuYXBwZW5kKENsb2JiZXIoaW5kZXhPZkhlYWQgKyBp
bnN0SW5kZXgsIHJlZ3MpKTsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIHJlY29yZChibG9jay0+c2l6ZSgpKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5z
dEluZGV4ID0gYmxvY2stPnNpemUoKTsgaW5zdEluZGV4LS07KSB7CisgICAgICAgICAgICAgICAg
bG9jYWxDYWxjLmV4ZWN1dGUoaW5zdEluZGV4KTsKKyAgICAgICAgICAgICAgICByZWNvcmQoaW5z
dEluZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3Rk
Ojpzb3J0KAorICAgICAgICAgICAgbV9jbG9iYmVycy5iZWdpbigpLCBtX2Nsb2JiZXJzLmVuZCgp
LAorICAgICAgICAgICAgW10gKENsb2JiZXImIGEsIENsb2JiZXImIGIpIC0+IGJvb2wgeworICAg
ICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IDwgYi5pbmRleDsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICAKKyAgICAgICAgaWYgKHZlcmJvc2UoKSkgeworICAgICAgICAgICAgZGF0YUxvZygi
SW50ZXJ2YWxzOlxuIik7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHRtcEluZGV4ID0gMDsg
dG1wSW5kZXggPCBtX2NvZGUubnVtVG1wcyhiYW5rKTsgKyt0bXBJbmRleCkgeworICAgICAgICAg
ICAgICAgIFRtcCB0bXAgPSBUbXA6OnRtcEZvckluZGV4KGJhbmssIHRtcEluZGV4KTsKKyAgICAg
ICAgICAgICAgICBkYXRhTG9nKCIgICAgIiwgdG1wLCAiOiAiLCBtX21hcFt0bXBdLCAiXG4iKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIHNwaWxsRXZl
cnl0aGluZygpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIHRtcEluZGV4ID0gMDsgdG1w
SW5kZXggPCBtX2NvZGUubnVtVG1wcyhiYW5rKTsgKyt0bXBJbmRleCkgeworICAgICAgICAgICAg
aWYgKHRtcEluZGV4IDwgNjQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICBzcGlsbChUbXA6OnRtcEZvckluZGV4KGJhbmssIHRtcEluZGV4KSk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgdm9pZCBwcmVwYXJlSW50ZXJ2YWxzKCkKKyAgICB7CisgICAgICAgIG1f
dG1wcy5yZXNpemUoMCk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIHRtcEluZGV4
ID0gMDsgdG1wSW5kZXggPCBtX2NvZGUubnVtVG1wcyhiYW5rKTsgKyt0bXBJbmRleCkgeworICAg
ICAgICAgICAgVG1wIHRtcCA9IFRtcDo6dG1wRm9ySW5kZXgoYmFuaywgdG1wSW5kZXgpOworICAg
ICAgICAgICAgVG1wRGF0YSYgZGF0YSA9IG1fbWFwW3RtcF07CisgICAgICAgICAgICBpZiAoZGF0
YS5zcGlsbGVkKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBkYXRhLmFzc2lnbmVkID0gUmVnKCk7CisgICAgICAgICAgICBtX3RtcHMuYXBwZW5k
KHRtcCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0ZDo6c29ydCgKKyAgICAgICAg
ICAgIG1fdG1wcy5iZWdpbigpLCBtX3RtcHMuZW5kKCksCisgICAgICAgICAgICBbJl0gKFRtcCYg
YSwgVG1wJiBiKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fbWFwW2FdLmludGVydmFsLmJl
Z2luKCkgPCBtX21hcFtiXS5pbnRlcnZhbC5lbmQoKTsKKyAgICAgICAgICAgIH0pOworICAgICAg
ICAKKyAgICAgICAgaWYgKHZlcmJvc2UoKSkgeworICAgICAgICAgICAgZGF0YUxvZygiVG1wczog
IiwgbGlzdER1bXAobV90bXBzKSwgIlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKCJDbG9iYmVy
czogIiwgbGlzdER1bXAobV9jbG9iYmVycyksICJcbiIpOworICAgICAgICB9CisgICAgfQorICAg
IAorICAgIFRtcCBhZGRTcGlsbFRtcFdpdGhJbnRlcnZhbChJbnRlcnZhbCBpbnRlcnZhbCkKKyAg
ICB7CisgICAgICAgIFRtcERhdGEgZGF0YTsKKyAgICAgICAgZGF0YS5pbnRlcnZhbCA9IGludGVy
dmFsOworICAgICAgICBkYXRhLmlzVW5zcGlsbGFibGUgPSB0cnVlOworICAgICAgICAKKyAgICAg
ICAgVG1wIHRtcCA9IG1fY29kZS5uZXdUbXAoYmFuayk7CisgICAgICAgIG1fbWFwLmFwcGVuZCh0
bXAsIGRhdGEpOworICAgICAgICByZXR1cm4gdG1wOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0
dGVtcHRTY2FuKCkKKyAgICB7CisgICAgICAgIC8vIFRoaXMgaXMgbW9kZWxlZCBhZnRlciBMaW5l
YXJTY2FuUmVnaXN0ZXJBbGxvY2F0aW9uIGluIEZpZy4gMSBpbgorICAgICAgICAvLyBodHRwOi8v
ZGwuYWNtLm9yZy9jaXRhdGlvbi5jZm0/aWQ9MzMwMjUwLgorCisgICAgICAgIG1fZGlkU3BpbGwg
PSBmYWxzZTsKKyAgICAgICAgbV9hY3RpdmUuY2xlYXIoKTsKKyAgICAgICAgbV9hY3RpdmVSZWdz
ID0gUmVnaXN0ZXJTZXQoKTsKKyAgICAgICAgCisgICAgICAgIHNpemVfdCBjbG9iYmVySW5kZXgg
PSAwOworICAgICAgICBmb3IgKFRtcCYgdG1wIDogbV90bXBzKSB7CisgICAgICAgICAgICBUbXBE
YXRhJiBlbnRyeSA9IG1fbWFwW3RtcF07CisgICAgICAgICAgICBzaXplX3QgaW5kZXggPSBlbnRy
eS5pbnRlcnZhbC5iZWdpbigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAodmVyYm9z
ZSgpKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiSW5kZXggIyIsIGluZGV4LCAiOiAiLCB0
bXAsICJcbiIpOworICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgQWN0aXZlOlxuIik7CisgICAg
ICAgICAgICAgICAgZm9yIChUbXAgdG1wIDogbV9hY3RpdmUpCisgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coIiAgICAiLCB0bXAsICI6ICIsIG1fbWFwW3RtcF0sICJcbiIpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUaGlzIGlzIEV4cGlyZU9sZEludGVy
dmFscyBpbiBGaWcuIDEuCisgICAgICAgICAgICB3aGlsZSAoIW1fYWN0aXZlLmlzRW1wdHkoKSkg
eworICAgICAgICAgICAgICAgIFRtcCB0bXAgPSBtX2FjdGl2ZS5maXJzdCgpOworICAgICAgICAg
ICAgICAgIFRtcERhdGEmIGVudHJ5ID0gbV9tYXBbdG1wXTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBib29sIGV4cGlyZWQgPSBlbnRyeS5pbnRlcnZhbC5lbmQoKSA8PSBpbmRl
eDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIWV4cGlyZWQpCisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IG1fYWN0aXZlLnJlbW92ZUZpcnN0KCk7CisgICAgICAgICAgICAgICAgbV9hY3RpdmVSZWdzLnJl
bW92ZShlbnRyeS5hc3NpZ25lZCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIElm
IG5lY2Vzc2FyeSwgY29tcHV0ZSB0aGUgc2V0IG9mIHJlZ2lzdGVycyB0aGF0IHRoaXMgdG1wIGNv
dWxkIGV2ZW4gdXNlLiBUaGlzIGlzIG5vdAorICAgICAgICAgICAgLy8gcGFydCBvZiBGaWcuIDEs
IGJ1dCBpdCdzIGEgdGVjaG5pcXVlIHRoYXQgdGhlIGF1dGhvcnMgY2xhaW0gdG8gaGF2ZSBpbXBs
ZW1lbnRlZCBpbiBvbmUgb2YKKyAgICAgICAgICAgIC8vIHRoZWlyIHR3byBpbXBsZW1lbnRhdGlv
bnMuIFRoZXJlIG1heSBiZSBvdGhlciBtb3JlIGVmZmljaWVudCB3YXlzIHRvIGRvIHRoaXMsIGJ1
dCB0aGlzCisgICAgICAgICAgICAvLyBpbXBsZW1lbnRhdGlvbiBnZXRzIHNvbWUgcGVyZiB3aW5z
IGZyb20gcGlnZ3ktYmFja2luZyB0aGlzIGNhbGN1bGF0aW9uIGluIHRoZSBzY2FuLgorICAgICAg
ICAgICAgLy8KKyAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGUgZGlkQnVpbGQgZmxhZyBzdGlj
a3MgdGhyb3VnaCBzcGlsbGluZy4gU3BpbGxpbmcgZG9lc24ndCBjaGFuZ2UgdGhlCisgICAgICAg
ICAgICAvLyBpbnRlcmZlcmVuY2Ugc2l0dWF0aW9uLgorICAgICAgICAgICAgLy8KKyAgICAgICAg
ICAgIC8vIE5vdGUgdGhhdCB3ZSBjb3VsZCBzaG9ydC1jaXJjdWl0IHRoaXMgaWYgd2UncmUgZGVh
bGluZyB3aXRoIGEgc3BpbGxhYmxlIHRtcCwgdGhlcmUgYXJlIG5vCisgICAgICAgICAgICAvLyBm
cmVlIHJlZ2lzdGVycywgYW5kIHRoaXMgcmVnaXN0ZXIncyBpbnRlcnZhbCBlbmRzIGFmdGVyIHRo
ZSBvbmUgb24gdGhlIHRvcCBvZiB0aGUgYWN0aXZlCisgICAgICAgICAgICAvLyBzdGFjay4KKyAg
ICAgICAgICAgIGlmICghZW50cnkuZGlkQnVpbGRQb3NzaWJsZVJlZ3MpIHsKKyAgICAgICAgICAg
ICAgICAvLyBBZHZhbmNlIHRoZSBjbG9iYmVyIGluZGV4IHVudGlsIGl0J3MgYXQgYSBjbG9iYmVy
IHRoYXQgaXMgcmVsZXZhbnQgdG8gdXMuCisgICAgICAgICAgICAgICAgd2hpbGUgKGNsb2JiZXJJ
bmRleCA8IG1fY2xvYmJlcnMuc2l6ZSgpICYmIG1fY2xvYmJlcnNbY2xvYmJlckluZGV4XS5pbmRl
eCA8IGluZGV4KQorICAgICAgICAgICAgICAgICAgICBjbG9iYmVySW5kZXgrKzsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBSZWdpc3RlclNldCBwb3NzaWJsZVJlZ3MgPSBtX3Jl
Z2lzdGVyU2V0OworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBjbG9iYmVySW5kZXg7
IGkgPCBtX2Nsb2JiZXJzLnNpemUoKSAmJiBtX2Nsb2JiZXJzW2ldLmluZGV4IDwgZW50cnkuaW50
ZXJ2YWwuZW5kKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgcG9zc2libGVSZWdzLmV4Y2x1
ZGUobV9jbG9iYmVyc1tpXS5yZWdzKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBlbnRyeS5wb3NzaWJsZVJlZ3MgPSBwb3NzaWJsZVJlZ3M7CisgICAgICAgICAgICAgICAgZW50
cnkuZGlkQnVpbGRQb3NzaWJsZVJlZ3MgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICAvLyBGaW5kIGEgZnJlZSByZWdpc3RlciB0aGF0IHdlIGFyZSBhbGxv
d2VkIHRvIHVzZS4KKyAgICAgICAgICAgIGlmIChtX2FjdGl2ZS5zaXplKCkgIT0gbV9yZWdpc3Rl
cnMuc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgYm9vbCBkaWRBc3NpZ24gPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiBtX3JlZ2lzdGVycykgeworICAgICAgICAgICAg
ICAgICAgICBpZiAoIW1fYWN0aXZlUmVncy5jb250YWlucyhyZWcpICYmIGVudHJ5LnBvc3NpYmxl
UmVncy5jb250YWlucyhyZWcpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhc3NpZ24odG1w
LCByZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgZGlkQXNzaWduID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChkaWRBc3NpZ24pCisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAg
ICAvLyBUaGlzIGlzIFNwaWxsQXRJbnRlcnZhbCBpbiBGaWcuIDEsIGJ1dCBtb2RpZmllZCB0byBo
YW5kbGUgY2xvYmJlcnMuCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9hY3RpdmUuaXNF
bXB0eSgpKTsKKyAgICAgICAgICAgIFRtcCBzcGlsbFRtcCA9IG1fYWN0aXZlLnRha2VMYXN0KAor
ICAgICAgICAgICAgICAgIFsmXSAoVG1wIHNwaWxsQ2FuZGlkYXRlKSAtPiBib29sIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5LnBvc3NpYmxlUmVncy5jb250YWlucyhtX21hcFtz
cGlsbENhbmRpZGF0ZV0uYXNzaWduZWQpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgaWYgKCFzcGlsbFRtcCkgeworICAgICAgICAgICAgICAgIHNwaWxsKHRtcCk7CisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBUbXBEYXRhJiBz
cGlsbEVudHJ5ID0gbV9tYXBbc3BpbGxUbXBdOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
c3BpbGxFbnRyeS5hc3NpZ25lZCk7CisgICAgICAgICAgICBpZiAoc3BpbGxFbnRyeS5pc1Vuc3Bp
bGxhYmxlIHx8CisgICAgICAgICAgICAgICAgKCFlbnRyeS5pc1Vuc3BpbGxhYmxlICYmIHNwaWxs
RW50cnkuaW50ZXJ2YWwuZW5kKCkgPD0gZW50cnkuaW50ZXJ2YWwuZW5kKCkpKSB7CisgICAgICAg
ICAgICAgICAgc3BpbGwodG1wKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9hY3RpdmUucmVtb3ZlTGFzdCgpOwor
ICAgICAgICAgICAgYXNzaWduKHRtcCwgc3BpbGxFbnRyeS5hc3NpZ25lZCk7CisgICAgICAgICAg
ICBzcGlsbChzcGlsbFRtcCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBhc3Np
Z24oVG1wIHRtcCwgUmVnIHJlZykKKyAgICB7CisgICAgICAgIFRtcERhdGEmIGVudHJ5ID0gbV9t
YXBbdG1wXTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWVudHJ5LnNwaWxsZWQpOworICAgICAg
ICBlbnRyeS5hc3NpZ25lZCA9IHJlZzsKKyAgICAgICAgbV9hY3RpdmVSZWdzLmFkZChyZWcpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKG1fbWFwW3RtcF0uaXNVbnNwaWxsYWJsZSkgeworICAgICAg
ICAgICAgLy8gV2Ugd2FudCB0aGUgc3BpbGwgdG1wcyAocmVhZDogdW5zcGlsbGFibGUgdG1wcykg
Zmlyc3QuCisgICAgICAgICAgICBtX2FjdGl2ZS5wcmVwZW5kKHRtcCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fYWN0aXZlLmFwcGVuZEFuZEJ1
YmJsZSgKKyAgICAgICAgICAgIHRtcCwKKyAgICAgICAgICAgIFsmXSAoVG1wIG90aGVyVG1wKSAt
PiBib29sIHsKKyAgICAgICAgICAgICAgICBUbXBEYXRhJiBvdGhlckVudHJ5ID0gbV9tYXBbb3Ro
ZXJUbXBdOworICAgICAgICAgICAgICAgIGlmIChvdGhlckVudHJ5LmlzVW5zcGlsbGFibGUpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
bV9tYXBbb3RoZXJUbXBdLmludGVydmFsLmVuZCgpID4gbV9tYXBbdG1wXS5pbnRlcnZhbC5lbmQo
KTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNwaWxsKFRtcCB0bXAp
CisgICAgeworICAgICAgICBUbXBEYXRhJiBlbnRyeSA9IG1fbWFwW3RtcF07CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFlbnRyeS5pc1Vuc3BpbGxhYmxlKTsKKyAgICAgICAgZW50cnkuc3BpbGxl
ZCA9IG1fY29kZS5hZGRTdGFja1Nsb3QoOCwgU3RhY2tTbG90S2luZDo6U3BpbGwpOworICAgICAg
ICBlbnRyeS5hc3NpZ25lZCA9IFJlZygpOworICAgICAgICBtX2RpZFNwaWxsID0gdHJ1ZTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBlbWl0U3BpbGxDb2RlKCkKKyAgICB7CisgICAgICAgIGZvciAo
QmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsKKyAgICAgICAgICAgIHNpemVfdCBpbmRleE9m
SGVhZCA9IHRoaXMtPmluZGV4T2ZIZWFkKGJsb2NrKTsKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaW5zdEluZGV4ID0gMDsgaW5zdEluZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbnN0SW5kZXgp
IHsKKyAgICAgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7Cisg
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXhPZkVhcmx5ID0gaW5kZXhPZkhlYWQgKyBpbnN0
SW5kZXg7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gRmlyc3QgdHJ5IHRv
IHNwaWxsIGRpcmVjdGx5LgorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBpbnN0LmFyZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgQXJnJiBhcmcg
PSBpbnN0LmFyZ3NbaV07CisgICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlzVG1wKCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGFyZy5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChhcmcuYmFuaygpICE9IGJhbmspCisgICAgICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzcGlsbGVkID0g
bV9tYXBbYXJnLnRtcCgpXS5zcGlsbGVkOworICAgICAgICAgICAgICAgICAgICBpZiAoIXNwaWxs
ZWQpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFpbnN0LmFkbWl0c1N0YWNrKGkpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgICAgIGFyZyA9IEFyZzo6c3RhY2soc3BpbGxlZCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIEZh
bGwgYmFjayBvbiB0aGUgaGFyZCB3YXkuCisgICAgICAgICAgICAgICAgaW5zdC5mb3JFYWNoVG1w
KAorICAgICAgICAgICAgICAgICAgICBbJl0gKFRtcCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwgQmFu
ayB0bXBCYW5rLCBXaWR0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcC5pc1Jl
ZygpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh0bXBCYW5rICE9IGJhbmspCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzcGlsbGVkID0g
bV9tYXBbdG1wXS5zcGlsbGVkOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzcGlsbGVk
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIE9wY29kZSBtb3ZlID0gYmFuayA9PSBHUCA/IE1vdmUgOiBNb3ZlRG91YmxlOworICAg
ICAgICAgICAgICAgICAgICAgICAgdG1wID0gYWRkU3BpbGxUbXBXaXRoSW50ZXJ2YWwoaW50ZXJ2
YWwoaW5kZXhPZkVhcmx5LCBBcmc6OnRpbWluZyhyb2xlKSkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHJvbGUgPT0gQXJnOjpTY3JhdGNoKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzQW55VXNlKHJv
bGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0c1tibG9ja10u
aW5zZXJ0KGluc3RJbmRleCwgbW92ZSwgaW5zdC5vcmlnaW4sIEFyZzo6c3RhY2soc3BpbGxlZCks
IHRtcCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0FueURlZihyb2xlKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldHNbYmxvY2tdLmluc2Vy
dChpbnN0SW5kZXggKyAxLCBtb3ZlLCBpbnN0Lm9yaWdpbiwgdG1wLCBBcmc6OnN0YWNrKHNwaWxs
ZWQpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgdm9pZCBpbnNlcnRTcGlsbENvZGUoKQorICAgIHsKKyAgICAgICAg
Zm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fY29kZSkKKyAgICAgICAgICAgIG1faW5zZXJ0aW9u
U2V0c1tibG9ja10uZXhlY3V0ZShibG9jayk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXNzaWdu
UmVnaXN0ZXJzKCkKKyAgICB7CisgICAgICAgIGlmICh2ZXJib3NlKCkpIHsKKyAgICAgICAgICAg
IGRhdGFMb2coIkFib3V0IHRvIGFsbG9jYXRlIHJlZ2lzdGVycy4gU3RhdGUgb2YgYWxsIHRtcHM6
XG4iKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgdG1wSW5kZXggPSAwOyB0bXBJbmRleCA8
IG1fY29kZS5udW1UbXBzKGJhbmspOyArK3RtcEluZGV4KSB7CisgICAgICAgICAgICAgICAgVG1w
IHRtcCA9IFRtcDo6dG1wRm9ySW5kZXgoYmFuaywgdG1wSW5kZXgpOworICAgICAgICAgICAgICAg
IGRhdGFMb2coIiAgICAiLCB0bXAsICI6ICIsIG1fbWFwW3RtcF0sICJcbiIpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZGF0YUxvZygiSVI6XG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2co
bV9jb2RlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBi
bG9jayA6IG1fY29kZSkgeworICAgICAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogKmJsb2NrKSB7
CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UoKSkKKyAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZygiQXQ6ICIsIGluc3QsICJcbiIpOworICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaFRt
cEZhc3QoCisgICAgICAgICAgICAgICAgICAgIFsmXSAoVG1wJiB0bXApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wLmJhbmsoKSAhPSBiYW5r
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgUmVnIHJlZyA9IG1fbWFwW3RtcF0uYXNz
aWduZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlZykgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2coIkZhaWxlZCB0byBhbGxvY2F0ZSByZWcgZm9yOiAiLCB0
bXAsICJcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICB0bXAgPSBUbXAocmVnKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgQ29kZSYgbV9jb2RlOworICAgIFZl
Y3RvcjxSZWc+IG1fcmVnaXN0ZXJzOworICAgIFJlZ2lzdGVyU2V0IG1fcmVnaXN0ZXJTZXQ7Cisg
ICAgSW5kZXhNYXA8QmFzaWNCbG9jayosIHNpemVfdD4gbV9zdGFydEluZGV4OworICAgIEluZGV4
TWFwPFRtcDo6SW5kZXhlZDxiYW5rPiwgVG1wRGF0YT4gbV9tYXA7CisgICAgSW5kZXhNYXA8QmFz
aWNCbG9jayosIEluc2VydGlvblNldD4gbV9pbnNlcnRpb25TZXRzOworICAgIFZlY3RvcjxDbG9i
YmVyPiBtX2Nsb2JiZXJzOyAvLyBBZnRlciB3ZSBhbGxvY2F0ZSB0aGlzLCB3ZSBoYXBwaWx5IHBv
aW50IHBvaW50ZXJzIGludG8gaXQuCisgICAgVmVjdG9yPFRtcD4gbV90bXBzOworICAgIERlcXVl
PFRtcD4gbV9hY3RpdmU7CisgICAgUmVnaXN0ZXJTZXQgbV9hY3RpdmVSZWdzOworICAgIGJvb2wg
bV9kaWRTcGlsbCB7IGZhbHNlIH07Cit9OworCit0ZW1wbGF0ZTxCYW5rIGJhbms+Cit2b2lkIHJ1
bkxpbmVhclNjYW4oQ29kZSYgY29kZSkKK3sKKyAgICBpZiAodmVyYm9zZSgpKQorICAgICAgICBk
YXRhTG9nKCJBaXIgYmVmb3JlIGxpbmVhciBzY2FuIGZvciAiLCBiYW5rLCAiOlxuIiwgY29kZSk7
CisgICAgTGluZWFyU2NhbjxiYW5rPiBsaW5lYXJTY2FuKGNvZGUpOworICAgIGxpbmVhclNjYW4u
cnVuKCk7CisgICAgaWYgKHZlcmJvc2UoKSkKKyAgICAgICAgZGF0YUxvZygiQWlyIGFmdGVyIGxp
bmVhciBzY2FuIGZvciAiLCBiYW5rLCAiOlxuIiwgY29kZSk7Cit9CisKK30gLy8gYW5vbnltb3Vz
IG5hbWVzcGFjZQorCit2b2lkIGFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuKENvZGUmIGNv
ZGUpCit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJhbGxvY2F0ZVJlZ2lzdGVy
c0J5TGluZWFyU2NhbiIpOworICAgIHBhZEludGVyZmVyZW5jZShjb2RlKTsKKyAgICBydW5MaW5l
YXJTY2FuPEZQPihjb2RlKTsKKyAgICBydW5MaW5lYXJTY2FuPEdQPihjb2RlKTsKKyAgICBmaXhT
cGlsbHNBZnRlclRlcm1pbmFscyhjb2RlKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJz
QnlMaW5lYXJTY2FuLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJDUFUu
aCIKKyNpbmNsdWRlICJPcHRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKworLy8gVGhpcyBpbXBsZW1lbnRzIHRo
ZSBQb2xldHRvIGFuZCBTYXJrZXIgcmVnaXN0ZXIgYWxsb2NhdG9yIGNhbGxlZCAibGluZWFyIHNj
YW4iOgorLy8gaHR0cDovL2RsLmFjbS5vcmcvY2l0YXRpb24uY2ZtP2lkPTMzMDI1MAorLy8KKy8v
IFRoaXMgaXMgbm90IEFpcidzIHByaW1hcnkgcmVnaXN0ZXIgYWxsb2NhdG9yLiBXZSB1c2UgaXQg
b25seSB3aGVuIHJ1bm5pbmcgYXQgb3B0TGV2ZWw9MC4gVGhhdCdzIG5vdAorLy8gdGhlIGRlZmF1
bHQgbGV2ZWwuIFRoaXMgcmVnaXN0ZXIgYWxsb2NhdG9yIGlzIG9wdGltaXplZCBwcmltYXJpbHkg
Zm9yIHJ1bm5pbmcgcXVpY2tseS4gSXQncyBleHBlY3RlZAorLy8gdGhhdCBpbXByb3ZlbWVudHMg
dG8gdGhpcyByZWdpc3RlciBhbGxvY2F0b3Igc2hvdWxkIGZvY3VzIHByaW1hcmlseSBvbiBpbXBy
b3ZpbmcgaXRzIGV4ZWN1dGlvbiB0aW1lCisvLyB3aXRob3V0IG11Y2ggcmVnYXJkIGZvciB0aGUg
cXVhbGl0eSBvZiBnZW5lcmF0ZWQgY29kZS4KKy8vCisvLyBGb3IgQWlyJ3MgcHJpbWFyeSByZWdp
c3RlciBhbGxvY2F0b3IsIHNlZSBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5o
fGNwcC4KK3ZvaWQgYWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4oQ29kZSYpOworCit9IH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3Rh
Y2suY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckFsbG9jYXRlU3RhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjEsNyArMTYxLDcgQEAg
dm9pZCBhbGxvY2F0ZVN0YWNrKENvZGUmIGNvZGUpCiAKICAgICAvLyBOb3cgd2UgaGFuZGxlIHRo
ZSBzcGlsbCBzbG90cy4KICAgICBTdGFja1Nsb3RMaXZlbmVzcyBsaXZlbmVzcyhjb2RlKTsKLSAg
ICBJbmRleE1hcDxTdGFja1Nsb3QsIEhhc2hTZXQ8U3RhY2tTbG90Kj4+IGludGVyZmVyZW5jZShj
b2RlLnN0YWNrU2xvdHMoKS5zaXplKCkpOworICAgIEluZGV4TWFwPFN0YWNrU2xvdCosIEhhc2hT
ZXQ8U3RhY2tTbG90Kj4+IGludGVyZmVyZW5jZShjb2RlLnN0YWNrU2xvdHMoKS5zaXplKCkpOwog
ICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBzbG90czsKIAogICAgIC8vIFdlIHdpbGwgcGVyZm9ybSBz
b21lIHNwaWxsIGNvYWxlc2NpbmcuIFRvIG1ha2UgdGhhdCBlZmZlY3RpdmUsIHdlIG5lZWQgdG8g
YmUgYWJsZSB0byBpZGVudGlmeQpAQCAtMzA5LDcgKzMwOSw3IEBAIHZvaWQgYWxsb2NhdGVTdGFj
ayhDb2RlJiBjb2RlKQogICAgICAgICAgICAgcmV0dXJuIGEuZnJlcXVlbmN5ID4gYi5mcmVxdWVu
Y3k7CiAgICAgICAgIH0pOwogICAgIAotICAgIEluZGV4TWFwPFN0YWNrU2xvdCwgU3RhY2tTbG90
Kj4gcmVtYXBwZWRTdGFja1Nsb3RzKGNvZGUuc3RhY2tTbG90cygpLnNpemUoKSk7CisgICAgSW5k
ZXhNYXA8U3RhY2tTbG90KiwgU3RhY2tTbG90Kj4gcmVtYXBwZWRTdGFja1Nsb3RzKGNvZGUuc3Rh
Y2tTbG90cygpLnNpemUoKSk7CiAgICAgYXV0byByZW1hcCA9IFsmXSAoU3RhY2tTbG90KiBzbG90
KSAtPiBTdGFja1Nsb3QqIHsKICAgICAgICAgaWYgKCFzbG90KQogICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCShy
ZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI4Miw2ICsyODIsMzcgQEAgdm9pZCBwcmludEludGVybmFs
KFByaW50U3RyZWFtJiBvdXQsIEFyZwogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiB9CiAKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBcmc6OlBoYXNlIHBo
YXNlKQoreworICAgIHN3aXRjaCAocGhhc2UpIHsKKyAgICBjYXNlIEFyZzo6RWFybHk6CisgICAg
ICAgIG91dC5wcmludCgiRWFybHkiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJnOjpM
YXRlOgorICAgICAgICBvdXQucHJpbnQoIkxhdGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgcHJpbnRJbnRl
cm5hbChQcmludFN0cmVhbSYgb3V0LCBBcmc6OlRpbWluZyB0aW1pbmcpCit7CisgICAgc3dpdGNo
ICh0aW1pbmcpIHsKKyAgICBjYXNlIEFyZzo6T25seUVhcmx5OgorICAgICAgICBvdXQucHJpbnQo
Ik9ubHlFYXJseSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcmc6Ok9ubHlMYXRlOgor
ICAgICAgICBvdXQucHJpbnQoIk9ubHlMYXRlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEFyZzo6RWFybHlBbmRMYXRlOgorICAgICAgICBvdXQucHJpbnQoIkVhcmx5QW5kTGF0ZSIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKK30KKwogdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEFyZzo6Um9sZSBy
b2xlKQogewogICAgIHN3aXRjaCAocm9sZSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJBcmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckFyZy5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckFyZy5oCSh3b3JraW5nIGNvcHkpCkBAIC05Miw2ICs5MiwxNyBAQCBwdWJsaWM6
CiAgICAgICAgIENvbGQsCiAgICAgICAgIFdhcm0KICAgICB9OworICAgIAorICAgIGVudW0gUGhh
c2UgOiBpbnQ4X3QgeworICAgICAgICBFYXJseSwKKyAgICAgICAgTGF0ZQorICAgIH07CisgICAg
CisgICAgZW51bSBUaW1pbmcgOiBpbnQ4X3QgeworICAgICAgICBPbmx5RWFybHksCisgICAgICAg
IE9ubHlMYXRlLAorICAgICAgICBFYXJseUFuZExhdGUKKyAgICB9OwogCiAgICAgZW51bSBSb2xl
IDogaW50OF90IHsKICAgICAgICAgLy8gVXNlIG1lYW5zIHRoYXQgdGhlIEluc3Qgd2lsbCByZWFk
IGZyb20gdGhpcyB2YWx1ZSBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZS4KQEAgLTI1Myw3ICsy
NjQsODIgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIGlzQ29sZFVzZShyb2xlKSA/
IENvbGQgOiBXYXJtOwogICAgIH0KLQorICAgIAorICAgIHN0YXRpYyBib29sIGFjdGl2ZUF0KFJv
bGUgcm9sZSwgUGhhc2UgcGhhc2UpCisgICAgeworICAgICAgICBzd2l0Y2ggKHJvbGUpIHsKKyAg
ICAgICAgY2FzZSBVc2U6CisgICAgICAgIGNhc2UgQ29sZFVzZToKKyAgICAgICAgY2FzZSBFYXJs
eURlZjoKKyAgICAgICAgY2FzZSBFYXJseVpEZWY6CisgICAgICAgIGNhc2UgVXNlQWRkcjoKKyAg
ICAgICAgICAgIHJldHVybiBwaGFzZSA9PSBFYXJseTsKKyAgICAgICAgY2FzZSBMYXRlVXNlOgor
ICAgICAgICBjYXNlIExhdGVDb2xkVXNlOgorICAgICAgICBjYXNlIERlZjoKKyAgICAgICAgY2Fz
ZSBaRGVmOgorICAgICAgICAgICAgcmV0dXJuIHBoYXNlID09IExhdGU7CisgICAgICAgIGNhc2Ug
VXNlRGVmOgorICAgICAgICBjYXNlIFVzZVpEZWY6CisgICAgICAgIGNhc2UgU2NyYXRjaDoKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCBhY3RpdmVBdChUaW1pbmcgdGlt
aW5nLCBQaGFzZSBwaGFzZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodGltaW5nKSB7CisgICAg
ICAgIGNhc2UgT25seUVhcmx5OgorICAgICAgICAgICAgcmV0dXJuIHBoYXNlID09IEVhcmx5Owor
ICAgICAgICBjYXNlIE9ubHlMYXRlOgorICAgICAgICAgICAgcmV0dXJuIHBoYXNlID09IExhdGU7
CisgICAgICAgIGNhc2UgRWFybHlBbmRMYXRlOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAg
IHN0YXRpYyBUaW1pbmcgdGltaW5nKFJvbGUgcm9sZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
cm9sZSkgeworICAgICAgICBjYXNlIFVzZToKKyAgICAgICAgY2FzZSBDb2xkVXNlOgorICAgICAg
ICBjYXNlIEVhcmx5RGVmOgorICAgICAgICBjYXNlIEVhcmx5WkRlZjoKKyAgICAgICAgY2FzZSBV
c2VBZGRyOgorICAgICAgICAgICAgcmV0dXJuIE9ubHlFYXJseTsKKyAgICAgICAgY2FzZSBMYXRl
VXNlOgorICAgICAgICBjYXNlIExhdGVDb2xkVXNlOgorICAgICAgICBjYXNlIERlZjoKKyAgICAg
ICAgY2FzZSBaRGVmOgorICAgICAgICAgICAgcmV0dXJuIE9ubHlMYXRlOworICAgICAgICBjYXNl
IFVzZURlZjoKKyAgICAgICAgY2FzZSBVc2VaRGVmOgorICAgICAgICBjYXNlIFNjcmF0Y2g6Cisg
ICAgICAgICAgICByZXR1cm4gRWFybHlBbmRMYXRlOworICAgICAgICB9CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
PgorICAgIHN0YXRpYyB2b2lkIGZvckVhY2hQaGFzZShUaW1pbmcgdGltaW5nLCBjb25zdCBGdW5j
JiBmdW5jKQorICAgIHsKKyAgICAgICAgaWYgKGFjdGl2ZUF0KHRpbWluZywgRWFybHkpKQorICAg
ICAgICAgICAgZnVuYyhFYXJseSk7CisgICAgICAgIGlmIChhY3RpdmVBdCh0aW1pbmcsIExhdGUp
KQorICAgICAgICAgICAgZnVuYyhMYXRlKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuYz4KKyAgICBzdGF0aWMgdm9pZCBmb3JFYWNoUGhhc2UoUm9sZSByb2xlLCBjb25z
dCBGdW5jJiBmdW5jKQorICAgIHsKKyAgICAgICAgaWYgKGFjdGl2ZUF0KHJvbGUsIEVhcmx5KSkK
KyAgICAgICAgICAgIGZ1bmMoRWFybHkpOworICAgICAgICBpZiAoYWN0aXZlQXQocm9sZSwgTGF0
ZSkpCisgICAgICAgICAgICBmdW5jKExhdGUpOworICAgIH0KKyAgICAKICAgICAvLyBSZXR1cm5z
IHRydWUgaWYgdGhlIFJvbGUgaW1wbGllcyB0aGF0IHRoZSBJbnN0IHdpbGwgVXNlIHRoZSBBcmcg
YmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UuCiAgICAgc3RhdGljIGJvb2wgaXNFYXJseVVzZShS
b2xlIHJvbGUpCiAgICAgewpAQCAtMTM1NCw2ICsxNDQwLDggQEAgbmFtZXNwYWNlIFdURiB7CiAK
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6
QjM6OkFpcjo6QXJnOjpLaW5kKTsKIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJpbnRJbnRlcm5h
bChQcmludFN0cmVhbSYsIEpTQzo6QjM6OkFpcjo6QXJnOjpUZW1wZXJhdHVyZSk7CitKU19FWFBP
UlRfUFJJVkFURSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpBaXI6
OkFyZzo6UGhhc2UpOworSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmludEludGVybmFsKFByaW50
U3RyZWFtJiwgSlNDOjpCMzo6QWlyOjpBcmc6OlRpbWluZyk7CiBKU19FWFBPUlRfUFJJVkFURSB2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpBaXI6OkFyZzo6Um9sZSk7
CiBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6
OkIzOjpBaXI6OkFyZzo6U2lnbmVkbmVzcyk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQmxvY2tXb3JrbGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQmxvY2tXb3JrbGlzdC5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJsb2NrV29ya2xpc3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zMiw3ICszMiw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1l
c3BhY2UgQWlyIHsKIAotdHlwZWRlZiBHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5k
ZXhTZXQ8QmFzaWNCbG9jaz4+IEJsb2NrV29ya2xpc3Q7Cit0eXBlZGVmIEdyYXBoTm9kZVdvcmts
aXN0PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+IEJsb2NrV29ya2xpc3Q7CiAK
IC8vIFdoZW4geW91IHNheSBCbG9ja1dpdGg8aW50PiB5b3Ugc2hvdWxkIHJlYWQgaXQgYXMgImJs
b2NrIHdpdGggYW4gaW50Ii4KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5nIEJsb2NrV2l0aCA9
IEdyYXBoTm9kZVdpdGg8QmFzaWNCbG9jayosIFQ+OwpAQCAtNDEsMTEgKzQxLDExIEBAIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHVzaW5nIEJsb2NrV2l0aCA9IEcKIC8vIHBlcm1pdHMgZm9yY2libHkg
ZW5xdWV1ZWluZyB0aGluZ3MgZXZlbiBpZiB0aGUgYmxvY2sgaGFzIGFscmVhZHkgYmVlbiBzZWVu
LiBJdCdzIHVzZWZ1bCBmb3IKIC8vIHRoaW5ncyBsaWtlIGJ1aWxkaW5nIGEgc3Bhbm5pbmcgdHJl
ZSwgaW4gd2hpY2ggY2FzZSBUICh0aGUgYXV4aWxpYXJ5IHBheWxvYWQpIHdvdWxkIGJlIHRoZQog
Ly8gc3VjY2Vzc29yIGluZGV4LgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcgRXh0ZW5kZWRC
bG9ja1dvcmtsaXN0ID0gRXh0ZW5kZWRHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgVCwg
SW5kZXhTZXQ8QmFzaWNCbG9jaz4+OwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcgRXh0ZW5k
ZWRCbG9ja1dvcmtsaXN0ID0gRXh0ZW5kZWRHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwg
VCwgSW5kZXhTZXQ8QmFzaWNCbG9jayo+PjsKIAogdHlwZWRlZiBHcmFwaE5vZGVXaXRoT3JkZXI8
QmFzaWNCbG9jayo+IEJsb2NrV2l0aE9yZGVyOwogCi10eXBlZGVmIFBvc3RPcmRlckdyYXBoTm9k
ZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrPj4gUG9zdE9yZGVyQmxv
Y2tXb3JrbGlzdDsKK3R5cGVkZWYgUG9zdE9yZGVyR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9j
ayosIEluZGV4U2V0PEJhc2ljQmxvY2sqPj4gUG9zdE9yZGVyQmxvY2tXb3JrbGlzdDsKIAogfSB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckNGRy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQ0ZHLmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQ0ZHLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDggKzM5LDggQEAgY2xhc3Mg
Q0ZHIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICB0eXBlZGVm
IEJhc2ljQmxvY2sqIE5vZGU7Ci0gICAgdHlwZWRlZiBJbmRleFNldDxCYXNpY0Jsb2NrPiBTZXQ7
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcgTWFwID0gSW5kZXhNYXA8QmFzaWNCbG9j
aywgVD47CisgICAgdHlwZWRlZiBJbmRleFNldDxCYXNpY0Jsb2NrKj4gU2V0OworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHVzaW5nIE1hcCA9IEluZGV4TWFwPEJhc2ljQmxvY2sqLCBUPjsKICAg
ICB0eXBlZGVmIFZlY3RvcjxCYXNpY0Jsb2NrKiwgND4gTGlzdDsKIAogICAgIENGRyhDb2RlJiBj
b2RlKQpAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAgICAgTm9kZSByb290KCkgeyByZXR1cm4g
bV9jb2RlWzBdOyB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIE1hcDxUPiBuZXdN
YXAoKSB7IHJldHVybiBJbmRleE1hcDxKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2ssIFQ+KG1fY29k
ZS5zaXplKCkpOyB9CisgICAgTWFwPFQ+IG5ld01hcCgpIHsgcmV0dXJuIEluZGV4TWFwPEpTQzo6
QjM6OkFpcjo6QmFzaWNCbG9jayosIFQ+KG1fY29kZS5zaXplKCkpOyB9CiAKICAgICBTdWNjZXNz
b3JDb2xsZWN0aW9uPEJhc2ljQmxvY2ssIEJhc2ljQmxvY2s6OlN1Y2Nlc3Nvckxpc3Q+IHN1Y2Nl
c3NvcnMoTm9kZSBub2RlKSB7IHJldHVybiBub2RlLT5zdWNjZXNzb3JCbG9ja3MoKTsgfQogICAg
IEJhc2ljQmxvY2s6OlByZWRlY2Vzc29yTGlzdCYgcHJlZGVjZXNzb3JzKE5vZGUgbm9kZSkgeyBy
ZXR1cm4gbm9kZS0+cHJlZGVjZXNzb3JzKCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyRWxpbWluYXRlRGVhZENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRWxpbWluYXRlRGVhZENvZGUuY3BwCShyZXZpc2lvbiAy
MTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckVsaW1pbmF0ZURlYWRD
b2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBib29sIGVsaW1pbmF0ZURl
YWRDb2RlKENvZGUmIGNvZGUpCiAgICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJlbGlt
aW5hdGVEZWFkQ29kZSIpOwogCiAgICAgSGFzaFNldDxUbXA+IGxpdmVUbXBzOwotICAgIEluZGV4
U2V0PFN0YWNrU2xvdD4gbGl2ZVN0YWNrU2xvdHM7CisgICAgSW5kZXhTZXQ8U3RhY2tTbG90Kj4g
bGl2ZVN0YWNrU2xvdHM7CiAgICAgYm9vbCBjaGFuZ2VkOwogCiAgICAgYXV0byBpc0FyZ0xpdmUg
PSBbJl0gKGNvbnN0IEFyZyYgYXJnKSAtPiBib29sIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyRml4T2J2aW91c1NwaWxscy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhPYnZpb3VzU3BpbGxzLmNwcAkocmV2aXNpb24g
MjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhPYnZpb3VzU3Bp
bGxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQ3LDcgKzU0Nyw3IEBAIHByaXZhdGU6CiAgICAg
fTsKIAogICAgIENvZGUmIG1fY29kZTsKLSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBTdGF0ZT4g
bV9hdEhlYWQ7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jayosIFN0YXRlPiBtX2F0SGVhZDsKICAg
ICBTdGF0ZSBtX3N0YXRlOwogICAgIEJhc2ljQmxvY2sqIG1fYmxvY2sgeyBudWxscHRyIH07CiAg
ICAgdW5zaWduZWQgbV9pbnN0SW5kZXggeyAwIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckZpeFBhcnRpYWxSZWdpc3RlclN0YWxscy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMu
Y3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckZpeFBhcnRpYWxSZWdpc3RlclN0YWxscy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NSwxMCAr
MTU1LDEwIEBAIHZvaWQgZml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzKENvZGUmIGNvZGUKIAogICAg
IC8vIEZvciBlYWNoIGJsb2NrLCB0aGlzIHByb3ZpZGVzIHRoZSBkaXN0YW5jZSB0byB0aGUgbGFz
dCBpbnN0cnVjdGlvbiBzZXR0aW5nIGVhY2ggcmVnaXN0ZXIKICAgICAvLyBvbiBibG9jayAqZW50
cnkqLgotICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIEZQRGVmRGlzdGFuY2U+IGxhc3REZWZEaXN0
YW5jZShjb2RlLnNpemUoKSk7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jayosIEZQRGVmRGlzdGFu
Y2U+IGxhc3REZWZEaXN0YW5jZShjb2RlLnNpemUoKSk7CiAKICAgICAvLyBCbG9ja3Mgd2l0aCBk
aXJ0eSBkaXN0YW5jZSBhdCBoZWFkLgotICAgIEluZGV4U2V0PEJhc2ljQmxvY2s+IGRpcnR5Owor
ICAgIEluZGV4U2V0PEJhc2ljQmxvY2sqPiBkaXJ0eTsKIAogICAgIC8vIEZpcnN0LCB3ZSBjb21w
dXRlIHRoZSBsb2NhbCBkaXN0YW5jZSBmb3IgZWFjaCBibG9jayBhbmQgcHVzaCBpdCB0byB0aGUg
c3VjY2Vzc29ycy4KICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhTcGls
bHNBZnRlclRlcm1pbmFscy5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJGaXhTcGlsbHNBZnRlclRl
cm1pbmFscy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckJsb2NrSW5z
ZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckluc2VydGlv
blNldC5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisjaW5jbHVkZSAiQWlyVG1wSW5s
aW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7
CisKK3ZvaWQgZml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMoQ29kZSYgY29kZSkKK3sKKyAgICAvLyBC
ZWNhdXNlIHRoZXJlIG1heSBiZSB0ZXJtaW5hbHMgdGhhdCBwcm9kdWNlIHZhbHVlcywgSVJDIG1h
eQorICAgIC8vIHdhbnQgdG8gc3BpbGwgdGhvc2UgdGVybWluYWxzLiBJdCdsbCBoYXBwZW4gdG8g
c3BpbGwgaXQgYWZ0ZXIKKyAgICAvLyB0aGUgdGVybWluYWwuIElmIHdlIGxlZnQgdGhlIGdyYXBo
IGluIHRoaXMgc3RhdGUsIGl0J2QgYmUgaW52YWxpZAorICAgIC8vIGJlY2F1c2UgYSB0ZXJtaW5h
bCBtdXN0IGJlIHRoZSBsYXN0IGluc3RydWN0aW9uIGluIGEgYmxvY2suCisgICAgLy8gV2UgZml4
IHRoYXQgaGVyZS4KKworICAgIEJsb2NrSW5zZXJ0aW9uU2V0IGJsb2NrSW5zZXJ0aW9uU2V0KGNv
ZGUpOworICAgIEluc2VydGlvblNldCBpbnNlcnRpb25TZXQoY29kZSk7CisKKyAgICBmb3IgKEJh
c2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICB1bnNpZ25lZCB0ZXJtaW5hbEluZGV4
ID0gYmxvY2stPnNpemUoKTsKKyAgICAgICAgYm9vbCBmb3VuZFRlcm1pbmFsID0gZmFsc2U7Cisg
ICAgICAgIHdoaWxlICh0ZXJtaW5hbEluZGV4LS0pIHsKKyAgICAgICAgICAgIGlmIChibG9jay0+
YXQodGVybWluYWxJbmRleCkuaXNUZXJtaW5hbCgpKSB7CisgICAgICAgICAgICAgICAgZm91bmRU
ZXJtaW5hbCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgQVNTRVJUX1VOVVNFRChmb3VuZFRlcm1pbmFsLCBmb3VuZFRlcm1p
bmFsKTsKKworICAgICAgICBpZiAodGVybWluYWxJbmRleCA9PSBibG9jay0+c2l6ZSgpIC0gMSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8vIFRoZXJlIG11c3QgYmUgaW5zdHJ1
Y3Rpb25zIGFmdGVyIHRoZSB0ZXJtaW5hbCBiZWNhdXNlIGl0J3Mgbm90IHRoZSBsYXN0IGluc3Ry
dWN0aW9uLgorICAgICAgICBBU1NFUlQodGVybWluYWxJbmRleCA8IGJsb2NrLT5zaXplKCkgLSAx
KTsKKyAgICAgICAgVmVjdG9yPEluc3QsIDE+IGluc3RzVG9Nb3ZlOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSB0ZXJtaW5hbEluZGV4ICsgMTsgaSA8IGJsb2NrLT5zaXplKCk7IGkrKykKKyAg
ICAgICAgICAgIGluc3RzVG9Nb3ZlLmFwcGVuZChibG9jay0+YXQoaSkpOworICAgICAgICBSRUxF
QVNFX0FTU0VSVChpbnN0c1RvTW92ZS5zaXplKCkpOworCisgICAgICAgIGZvciAoRnJlcXVlbnRl
ZEJsb2NrJiBmcmVxdWVudGVkU3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3NvcnMoKSkgeworICAg
ICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yID0gZnJlcXVlbnRlZFN1Y2Nlc3Nvci5ibG9j
aygpOworICAgICAgICAgICAgLy8gSWYgc3VjY2Vzc29yJ3Mgb25seSBwcmVkZWNlc3NvciBpcyBi
bG9jaywgd2UgY2FuIHBsYW50IHRoZSBzcGlsbCBpbnNpZGUKKyAgICAgICAgICAgIC8vIHRoZSBz
dWNjZXNzb3IuIE90aGVyd2lzZSwgd2UgbXVzdCBzcGxpdCB0aGUgY3JpdGljYWwgZWRnZSBhbmQg
Y3JlYXRlCisgICAgICAgICAgICAvLyBhIG5ldyBibG9jayBmb3IgdGhlIHNwaWxsLgorICAgICAg
ICAgICAgaWYgKHN1Y2Nlc3Nvci0+bnVtUHJlZGVjZXNzb3JzKCkgPT0gMSkgeworICAgICAgICAg
ICAgICAgIGluc2VydGlvblNldC5pbnNlcnRJbnN0cygwLCBpbnN0c1RvTW92ZSk7CisgICAgICAg
ICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoc3VjY2Vzc29yKTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogbmV3QmxvY2sgPSBibG9ja0luc2Vy
dGlvblNldC5pbnNlcnRCZWZvcmUoc3VjY2Vzc29yLCBzdWNjZXNzb3ItPmZyZXF1ZW5jeSgpKTsK
KyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IEluc3QmIGluc3QgOiBpbnN0c1RvTW92ZSkKKyAg
ICAgICAgICAgICAgICAgICAgbmV3QmxvY2stPmFwcGVuZEluc3QoaW5zdCk7CisgICAgICAgICAg
ICAgICAgbmV3QmxvY2stPmFwcGVuZEluc3QoSW5zdChKdW1wLCBpbnN0c1RvTW92ZS5sYXN0KCku
b3JpZ2luKSk7CisgICAgICAgICAgICAgICAgbmV3QmxvY2stPnN1Y2Nlc3NvcnMoKS5hcHBlbmQo
c3VjY2Vzc29yKTsKKyAgICAgICAgICAgICAgICBmcmVxdWVudGVkU3VjY2Vzc29yLmJsb2NrKCkg
PSBuZXdCbG9jazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGJsb2NrLT5y
ZXNpemUodGVybWluYWxJbmRleCArIDEpOworICAgIH0KKworICAgIGlmIChibG9ja0luc2VydGlv
blNldC5leGVjdXRlKCkpCisgICAgICAgIGNvZGUucmVzZXRSZWFjaGFiaWxpdHkoKTsKK30KKwor
fSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhTcGlsbHNBZnRl
clRlcm1pbmFscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOwor
CisvLyBCZWNhdXNlIHRoZXJlIG1heSBiZSB0ZXJtaW5hbHMgdGhhdCBwcm9kdWNlIHZhbHVlcywg
dGhlIHJlZ2lzdGVyIGFsbG9jYXRvciBtYXkKKy8vIHdhbnQgdG8gc3BpbGwgdGhvc2UgdGVybWlu
YWxzLiBJdCdsbCBoYXBwZW4gdG8gc3BpbGwgaXQgYWZ0ZXIKKy8vIHRoZSB0ZXJtaW5hbC4gSWYg
d2UgbGVmdCB0aGUgZ3JhcGggaW4gdGhpcyBzdGF0ZSwgaXQnZCBiZSBpbnZhbGlkCisvLyBiZWNh
dXNlIGEgdGVybWluYWwgbXVzdCBiZSB0aGUgbGFzdCBpbnN0cnVjdGlvbiBpbiBhIGJsb2NrLgor
Ly8gV2UgZml4IHRoYXQgaGVyZS4KK3ZvaWQgZml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMoQ29kZSYp
OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVy
YXRlLmNwcAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJHZW5lcmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBF
TkFCTEUoQjNfSklUKQogCiAjaW5jbHVkZSAiQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29s
b3JpbmcuaCIKKyNpbmNsdWRlICJBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5oIgog
I2luY2x1ZGUgIkFpckFsbG9jYXRlU3RhY2suaCIKICNpbmNsdWRlICJBaXJDb2RlLmgiCiAjaW5j
bHVkZSAiQWlyRWxpbWluYXRlRGVhZENvZGUuaCIKQEAgLTU3LDcgKzU4LDcgQEAKIAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewogCi12b2lkIHByZXBhcmVG
b3JHZW5lcmF0aW9uKENvZGUmIGNvZGUpCit2b2lkIHByZXBhcmVGb3JHZW5lcmF0aW9uKENvZGUm
IGNvZGUsIHVuc2lnbmVkIG9wdExldmVsKQogewogICAgIFRpbWluZ1Njb3BlIHRpbWluZ1Njb3Bl
KCJBaXI6OnByZXBhcmVGb3JHZW5lcmF0aW9uIik7CiAgICAgCkBAIC04OSwxOCArOTAsMjIgQEAg
dm9pZCBwcmVwYXJlRm9yR2VuZXJhdGlvbihDb2RlJiBjb2RlKQogICAgIC8vIEZvciBkZWJ1Z2dp
bmcsIHlvdSBjYW4gdXNlIHNwaWxsRXZlcnl0aGluZygpIHRvIHB1dCBldmVyeXRoaW5nIHRvIHRo
ZSBzdGFjayBiZXR3ZWVuIGVhY2ggSW5zdC4KICAgICBpZiAoT3B0aW9uczo6YWlyU3BpbGxzRXZl
cnl0aGluZygpKQogICAgICAgICBzcGlsbEV2ZXJ5dGhpbmcoY29kZSk7Ci0gICAgZWxzZQorICAg
IGVsc2UgaWYgKG9wdExldmVsID49IDIgJiYgZmFsc2UpIC8vIE9PUFMhISBUaGlzIHdhcyBqdXN0
IGZvciB0ZXN0aW5nLgogICAgICAgICBhbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZyhj
b2RlKTsKKyAgICBlbHNlCisgICAgICAgIGFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuKGNv
ZGUpOwogCiAgICAgaWYgKE9wdGlvbnM6OmxvZ0FpclJlZ2lzdGVyUHJlc3N1cmUoKSkgewogICAg
ICAgICBkYXRhTG9nKCJSZWdpc3RlciBwcmVzc3VyZSBhZnRlciByZWdpc3RlciBhbGxvY2F0aW9u
OlxuIik7CiAgICAgICAgIGxvZ1JlZ2lzdGVyUHJlc3N1cmUoY29kZSk7CiAgICAgfQotCi0gICAg
Ly8gVGhpcyByZXBsYWNlcyB1c2VzIG9mIHNwaWxsIHNsb3RzIHdpdGggcmVnaXN0ZXJzIG9yIGNv
bnN0YW50cyBpZiBwb3NzaWJsZS4gSXQgZG9lcyB0aGlzIGJ5Ci0gICAgLy8gbWluaW1pemluZyB0
aGUgYW1vdW50IHRoYXQgd2UgcGVydHVyYiB0aGUgYWxyZWFkeS1jaG9zZW4gcmVnaXN0ZXIgYWxs
b2NhdGlvbi4gSXQgbWF5IGV4dGVuZAotICAgIC8vIHRoZSBsaXZlIHJhbmdlcyBvZiByZWdpc3Rl
cnMgdGhvdWdoLgotICAgIGZpeE9idmlvdXNTcGlsbHMoY29kZSk7CisgICAgCisgICAgaWYgKG9w
dExldmVsID49IDIpIHsKKyAgICAgICAgLy8gVGhpcyByZXBsYWNlcyB1c2VzIG9mIHNwaWxsIHNs
b3RzIHdpdGggcmVnaXN0ZXJzIG9yIGNvbnN0YW50cyBpZiBwb3NzaWJsZS4gSXQgZG9lcyB0aGlz
IGJ5CisgICAgICAgIC8vIG1pbmltaXppbmcgdGhlIGFtb3VudCB0aGF0IHdlIHBlcnR1cmIgdGhl
IGFscmVhZHktY2hvc2VuIHJlZ2lzdGVyIGFsbG9jYXRpb24uIEl0IG1heSBleHRlbmQKKyAgICAg
ICAgLy8gdGhlIGxpdmUgcmFuZ2VzIG9mIHJlZ2lzdGVycyB0aG91Z2guCisgICAgICAgIGZpeE9i
dmlvdXNTcGlsbHMoY29kZSk7CisgICAgfQogCiAgICAgbG93ZXJBZnRlclJlZ0FsbG9jKGNvZGUp
OwogCkBAIC0xNjUsNyArMTcwLDcgQEAgdm9pZCBnZW5lcmF0ZShDb2RlJiBjb2RlLCBDQ2FsbEhl
bHBlcnMmIAogICAgICAgICBpZiAoYmxvY2spCiAgICAgICAgICAgICBjb250ZXh0LmJsb2NrTGFi
ZWxzW2Jsb2NrXSA9IEJveDxDQ2FsbEhlbHBlcnM6OkxhYmVsPjo6Y3JlYXRlKCk7CiAgICAgfQot
ICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIENDYWxsSGVscGVyczo6SnVtcExpc3Q+IGJsb2NrSnVt
cHMoY29kZS5zaXplKCkpOworICAgIEluZGV4TWFwPEJhc2ljQmxvY2sqLCBDQ2FsbEhlbHBlcnM6
Okp1bXBMaXN0PiBibG9ja0p1bXBzKGNvZGUuc2l6ZSgpKTsKIAogICAgIGF1dG8gbGluayA9IFsm
XSAoQ0NhbGxIZWxwZXJzOjpKdW1wIGp1bXAsIEJhc2ljQmxvY2sqIHRhcmdldCkgewogICAgICAg
ICBpZiAoY29udGV4dC5ibG9ja0xhYmVsc1t0YXJnZXRdLT5pc1NldCgpKSB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5oCShyZXZpc2lvbiAyMTQ0Mjcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yNyw2ICsyNyw4IEBACiAKICNpZiBFTkFCTEUoQjNfSklUKQogCisjaW5jbHVk
ZSAiQjNDb21tb24uaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENDYWxsSGVscGVyczsK
QEAgLTM3LDcgKzM5LDcgQEAgY2xhc3MgQ29kZTsKIAogLy8gVGhpcyB0YWtlcyBhbiBBaXI6OkNv
ZGUgdGhhdCBoYXNuJ3QgaGFkIGFueSBzdGFjayBhbGxvY2F0aW9uIGFuZCBvcHRpb25hbGx5IGhh
c24ndCBoYWQgYW55CiAvLyByZWdpc3RlciBhbGxvY2F0aW9uIGFuZCBkb2VzIGJvdGggb2YgdGhv
c2UgdGhpbmdzLgotSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmVwYXJlRm9yR2VuZXJhdGlvbihD
b2RlJik7CitKU19FWFBPUlRfUFJJVkFURSB2b2lkIHByZXBhcmVGb3JHZW5lcmF0aW9uKENvZGUm
LCB1bnNpZ25lZCBvcHRMZXZlbCA9IGRlZmF1bHRPcHRMZXZlbCgpKTsKIAogLy8gVGhpcyBnZW5l
cmF0ZXMgdGhlIGNvZGUgdXNpbmcgdGhlIGdpdmVuIENDYWxsSGVscGVycyBpbnN0YW5jZS4gTm90
ZSB0aGF0IHRoaXMgbWF5IGNhbGwgY2FsbGJhY2tzCiAvLyBpbiB0aGUgc3VwcGxpZWQgY29kZSBh
cyBpdCBpcyBnZW5lcmF0aW5nLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJHZW5lcmF0aW9uQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyR2VuZXJhdGlvbkNvbnRleHQuaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0aW9uQ29udGV4dC5oCSh3b3JraW5n
IGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIFNoYXJlZFRhc2s8
TGF0ZVBhdGhGdW5jdGlvbj4gTGF0ZVBhdGg7CiAKICAgICBWZWN0b3I8UmVmUHRyPExhdGVQYXRo
Pj4gbGF0ZVBhdGhzOwotICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIEJveDxDQ2FsbEhlbHBlcnM6
OkxhYmVsPj4gYmxvY2tMYWJlbHM7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jayosIEJveDxDQ2Fs
bEhlbHBlcnM6OkxhYmVsPj4gYmxvY2tMYWJlbHM7CiAgICAgQmFzaWNCbG9jayogY3VycmVudEJs
b2NrIHsgbnVsbHB0ciB9OwogICAgIHVuc2lnbmVkIGluZGV4SW5CbG9jayB7IFVJTlRfTUFYIH07
CiAgICAgQ29kZSogY29kZSB7IG51bGxwdHIgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAJKHJldmlzaW9u
IDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJBZnRlclJl
Z0FsbG9jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsMTEgQEAgdm9pZCBsb3dlckFm
dGVyUmVnQWxsb2MoQ29kZSYgY29kZSkKIAogICAgIGlmICh2ZXJib3NlKQogICAgICAgICBkYXRh
TG9nKCJDb2RlIGJlZm9yZSBsb3dlckFmdGVyUmVnQWxsb2M6XG4iLCBjb2RlKTsKKyAgICAKKyAg
ICAvLyBGSVhNRToKKyAgICAvLyAxKSBUaGlzIHNob3VsZCBiYWlsIGVhcmx5IGlmIHRoZXJlIGFy
ZSBubyBTaHVmZmxlcyBvciBDb2xkQ0NhbGxzLiAoT09QUyEhIG5lZWQgYnVnIHVybCkKKyAgICAv
LyAyKSBXZSBzaG91bGQgbm90IGludHJvZHVjZSBTaHVmZmxlcyBmb3Igbm9ybWFsIGNhbGxzLiAo
T09QUyEhIG5lZWQgYnVnIHVybCkKKyAgICAvLyAzKSBXZSBzaG91bGQgZW1pdCBDb2xkQ0NhbGwg
b25seSBhdCBvcHRMZXZlbD09MS4gKE9PUFMhISBuZWVkIGJ1ZyB1cmwpCiAKICAgICBIYXNoTWFw
PEluc3QqLCBSZWdpc3RlclNldD4gdXNlZFJlZ2lzdGVyczsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlckVudHJ5U3dpdGNoLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyRW50cnlTd2l0Y2guY3BwCShyZXZp
c2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyRW50
cnlTd2l0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIHZvaWQgbG93ZXJF
bnRyeVN3aXRjaChDb2RlJiBjb2RlKQogICAgIC8vIE5vdyBkdXBsaWNhdGUgdGhlbS4KICAgICBW
ZWN0b3I8RnJlcXVlbnRlZEJsb2NrPiBlbnRyeXBvaW50czsKICAgICBlbnRyeXBvaW50cy5hcHBl
bmQoRnJlcXVlbnRlZEJsb2NrKGNvZGVbMF0sIGVudHJ5cG9pbnRGcmVxdWVuY2llc1swXSkpOwot
ICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIEJhc2ljQmxvY2sqPiBtYXAoY29kZS5zaXplKCkpOwor
ICAgIEluZGV4TWFwPEJhc2ljQmxvY2sqLCBCYXNpY0Jsb2NrKj4gbWFwKGNvZGUuc2l6ZSgpKTsK
ICAgICBmb3IgKHVuc2lnbmVkIGVudHJ5cG9pbnRJbmRleCA9IDE7IGVudHJ5cG9pbnRJbmRleCA8
IGNvZGUucHJvYygpLm51bUVudHJ5cG9pbnRzKCk7ICsrZW50cnlwb2ludEluZGV4KSB7CiAgICAg
ICAgIG1hcC5jbGVhcigpOwogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogd29ya2xp
c3Quc2VlbigpLnZhbHVlcyhjb2RlKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyT3Bjb2RlLm9wY29kZXMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcwkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwkod29ya2luZyBjb3B5KQpAQCAt
NjQ5LDcgKzY0OSw3IEBAIE1vdmUzMiBVOkc6MzIsIFpEOkc6MzIKIE1vdmUzMiBVOkc6MzIsIFpE
Okc6MzIsIFM6RzozMgogICAgIEFkZHIsIEFkZHIsIFRtcAogCi1TdG9yZVplcm8zMiBVOkc6MzIK
K1N0b3JlWmVybzMyIEQ6RzozMgogICAgIEFkZHIKICAgICBJbmRleAogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ0xpdmVuZXNzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdMaXZlbmVzcy5oCShyZXZpc2lvbiAyMTQ0
MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ0xpdmVuZXNzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJBaXJCYXNpY0Jsb2NrLmgi
CiAjaW5jbHVkZSAiQWlyQ29kZS5oIgogI2luY2x1ZGUgIkFpckluc3QuaCIKKyNpbmNsdWRlICJB
aXJMaXZlbmVzcy5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKQEAgLTU0LDYgKzU1LDE5IEBAIHB1Ymxp
YzoKICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICAvLyBJZiB5b3UgY29t
cHV0ZWQgVG1wIGxpdmVuZXNzIGZvciBzb21lIGJhbmssIHlvdSBjYW4gdXNlIHJlZyBsaXZlbmVz
cyB0byBmaWxsIGluIHRoZSBibGFua3MuCisgICAgICAgIC8vIE5vdGUgdGhhdCB3aGF0IGhhcHBl
bnMgdG8gdGhlIHJlZ2lzdGVycyBub3QgYmVsb25naW5nIHRvIHRoZSBiYW5rIGlzIGFyYml0cmFy
eSAtIHRoZXkgbWF5IGdldAorICAgICAgICAvLyBzZXQgb3Igbm90LgorICAgICAgICB0ZW1wbGF0
ZTxCYW5rIGJhbms+CisgICAgICAgIExvY2FsQ2FsYyhUbXBMaXZlbmVzczxiYW5rPiYgbGl2ZW5l
c3MsIEJhc2ljQmxvY2sqIGJsb2NrKQorICAgICAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAg
ICAgICB7CisgICAgICAgICAgICBmb3IgKFRtcCB0bXAgOiBsaXZlbmVzcy5saXZlQXRUYWlsKGJs
b2NrKSkgeworICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAg
ICAgICAgbV93b3Jrc2V0LnNldCh0bXAucmVnKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIAogICAgICAgICBjb25zdCBSZWdpc3RlclNldCYgbGl2ZSgpIGNvbnN0CiAgICAg
ICAgIHsKICAgICAgICAgICAgIHJldHVybiBtX3dvcmtzZXQ7CkBAIC04NCw4ICs5OCw4IEBAIHB1
YmxpYzoKICAgICB9CiAgICAgCiBwcml2YXRlOgotICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIFJl
Z2lzdGVyU2V0PiBtX2xpdmVBdEhlYWQ7Ci0gICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgUmVnaXN0
ZXJTZXQ+IG1fbGl2ZUF0VGFpbDsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgUmVnaXN0ZXJT
ZXQ+IG1fbGl2ZUF0SGVhZDsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgUmVnaXN0ZXJTZXQ+
IG1fbGl2ZUF0VGFpbDsKIH07CiAKIH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0
aGluZy5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBA
QAogCiAjaW5jbHVkZSAiQWlyQXJnSW5saW5lcy5oIgogI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNp
bmNsdWRlICJBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5oIgogI2luY2x1ZGUgIkFpckluc2Vy
dGlvblNldC5oIgogI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQWlyTGl2
ZW5lc3MuaCIKQEAgLTQ2LDcgKzQ3LDcgQEAgdm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYgY29k
ZSkKICAgICBwYWRJbnRlcmZlcmVuY2UoY29kZSk7CiAKICAgICAvLyBXZSB3YW50IHRvIGtub3cg
dGhlIHNldCBvZiByZWdpc3RlcnMgdXNlZCBhdCBldmVyeSBwb2ludCBpbiBldmVyeSBiYXNpYyBi
bG9jay4KLSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBWZWN0b3I8UmVnaXN0ZXJTZXQ+PiB1c2Vk
UmVnaXN0ZXJzKGNvZGUuc2l6ZSgpKTsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgVmVjdG9y
PFJlZ2lzdGVyU2V0Pj4gdXNlZFJlZ2lzdGVycyhjb2RlLnNpemUoKSk7CiAgICAgR1BMaXZlbmVz
cyBncExpdmVuZXNzKGNvZGUpOwogICAgIEZQTGl2ZW5lc3MgZnBMaXZlbmVzcyhjb2RlKTsKICAg
ICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgewpAQCAtMTczLDEwICsxNzQsMTMgQEAg
dm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYgY29kZSkKICAgICAgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoY2hvc2VuUmVnKTsKIAogICAgICAgICAgICAgICAgICAgICB0bXAgPSBUbXAo
Y2hvc2VuUmVnKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlm
IChyb2xlID09IEFyZzo6U2NyYXRjaCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
IAogICAgICAgICAgICAgICAgICAgICBPcGNvZGUgbW92ZSA9IGJhbmsgPT0gR1AgPyBNb3ZlIDog
TW92ZURvdWJsZTsKIAotICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0FueVVzZShyb2xl
KSAmJiByb2xlICE9IEFyZzo6U2NyYXRjaCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6
aXNBbnlVc2Uocm9sZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5z
ZXJ0KGluc3RJbmRleCwgbW92ZSwgaW5zdC5vcmlnaW4sIGFyZywgdG1wKTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKEFyZzo6aXNBbnlEZWYocm9sZSkpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnNlcnRpb25TZXQuaW5zZXJ0KGluc3RJbmRleCArIDEsIG1vdmUsIGluc3Qub3JpZ2luLCB0
bXAsIGFyZyk7CkBAIC0xODQsNiArMTg4LDggQEAgdm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYg
Y29kZSkKICAgICAgICAgfQogICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CiAg
ICAgfQorICAgIAorICAgIGZpeFNwaWxsc0FmdGVyVGVybWluYWxzKGNvZGUpOwogfQogCiB9IH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpclRtcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJUbXAuY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclRtcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsOCArMjgsMTUgQEAKIAogI2lm
IEVOQUJMRShCM19KSVQpCiAKKyNpbmNsdWRlICJBaXJUbXBJbmxpbmVzLmgiCisKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKIAordGVtcGxhdGU8PiBjb25z
dCBjaGFyKiBjb25zdCBUbXA6OkluZGV4ZWQ8R1A+OjpkdW1wUHJlZml4ID0gIiV0bXAiOwordGVt
cGxhdGU8PiBjb25zdCBjaGFyKiBjb25zdCBUbXA6OkluZGV4ZWQ8RlA+OjpkdW1wUHJlZml4ID0g
IiVmdG1wIjsKK3RlbXBsYXRlPD4gY29uc3QgY2hhciogY29uc3QgVG1wOjpBYnNvbHV0ZWx5SW5k
ZXhlZDxHUD46OmR1bXBQcmVmaXggPSAiJWFicyI7Cit0ZW1wbGF0ZTw+IGNvbnN0IGNoYXIqIGNv
bnN0IFRtcDo6QWJzb2x1dGVseUluZGV4ZWQ8RlA+OjpkdW1wUHJlZml4ID0gIiVmYWJzIjsKKwog
dm9pZCBUbXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBpZiAoISp0aGlz
KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmgJKHJldmlzaW9uIDIx
NDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNzQsNiArNzQsMTQgQEAgcHVibGljOgogICAgICAgICByZXN1bHQubV92YWx1ZSA9IGVu
Y29kZUZQVG1wKGluZGV4KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CisgICAgCisg
ICAgc3RhdGljIFRtcCB0bXBGb3JJbmRleChCYW5rIGJhbmssIHVuc2lnbmVkIGluZGV4KQorICAg
IHsKKyAgICAgICAgaWYgKGJhbmsgPT0gR1ApCisgICAgICAgICAgICByZXR1cm4gZ3BUbXBGb3JJ
bmRleChpbmRleCk7CisgICAgICAgIEFTU0VSVChiYW5rID09IEZQKTsKKyAgICAgICAgcmV0dXJu
IGZwVG1wRm9ySW5kZXgoaW5kZXgpOworICAgIH0KIAogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJv
b2woKSBjb25zdCB7IHJldHVybiAhIW1fdmFsdWU7IH0KICAgICAKQEAgLTE1NCw3ICsxNjIsMTYg
QEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIGdwVG1wSW5kZXgoKTsKICAgICAgICAgcmV0
dXJuIGZwVG1wSW5kZXgoKTsKICAgICB9Ci0KKyAgICAKKyAgICB0ZW1wbGF0ZTxCYW5rIGJhbms+
IGNsYXNzIEluZGV4ZWQ7CisgICAgdGVtcGxhdGU8QmFuayBiYW5rPiBjbGFzcyBBYnNvbHV0ZWx5
SW5kZXhlZDsKKyAgICAKKyAgICB0ZW1wbGF0ZTxCYW5rIGJhbms+CisgICAgSW5kZXhlZDxiYW5r
PiBpbmRleGVkKCkgY29uc3Q7CisgICAgCisgICAgdGVtcGxhdGU8QmFuayBiYW5rPgorICAgIEFi
c29sdXRlbHlJbmRleGVkPGJhbms+IGFic29sdXRlbHlJbmRleGVkKCkgY29uc3Q7CisgICAgCiAg
ICAgYm9vbCBpc0FsaXZlKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiAhISp0aGlzOwpA
QCAtMTk1LDYgKzIxMiw4IEBAIHB1YmxpYzoKICAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSBzdGF0
aWNfY2FzdDxpbnQ+KGluZGV4KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CisgICAg
CisgICAgc3RhdGljIFRtcCB0bXBGb3JBYnNvbHV0ZUluZGV4KEJhbmssIHVuc2lnbmVkKTsKIAog
cHJpdmF0ZToKICAgICBzdGF0aWMgaW50IGVuY29kZUdQKHVuc2lnbmVkIGluZGV4KQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXBJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXBJbmxpbmVzLmgJKHJldmlzaW9u
IDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wSW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC05Miw2ICs5Miw1OCBAQCBzdHJ1Y3QgQWJzb2x1dGVUbXBNYXBw
ZXI8RlA+IHsKICAgICB9CiB9OwogCit0ZW1wbGF0ZTxCYW5rIHRoZUJhbms+CitjbGFzcyBUbXA6
OkluZGV4ZWQgOiBwdWJsaWMgVG1wIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgY2hhciog
Y29uc3QgZHVtcFByZWZpeDsKKyAgICAKKyAgICBJbmRleGVkKFRtcCB0bXApCisgICAgICAgIDog
VG1wKHRtcCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiB0bXBJbmRleCh0aGVCYW5rKTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTxCYW5rIHRoZUJhbms+CitjbGFzcyBUbXA6OkFic29sdXRlbHlJbmRleGVkIDogcHVi
bGljIFRtcCB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGR1bXBQcmVm
aXg7CisKKyAgICBBYnNvbHV0ZWx5SW5kZXhlZChUbXAgdG1wKQorICAgICAgICA6IFRtcCh0bXAp
CisgICAgeworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gQWJzb2x1dGVUbXBNYXBwZXI8dGhlQmFuaz46OmFic29sdXRlSW5kZXgo
KnRoaXMpOworICAgIH0KK307CisKK3RlbXBsYXRlPEJhbmsgdGhlQmFuaz4KK1RtcDo6SW5kZXhl
ZDx0aGVCYW5rPiBUbXA6OmluZGV4ZWQoKSBjb25zdAoreworICAgIHJldHVybiBJbmRleGVkPHRo
ZUJhbms+KCp0aGlzKTsKK30KKwordGVtcGxhdGU8QmFuayB0aGVCYW5rPgorVG1wOjpBYnNvbHV0
ZWx5SW5kZXhlZDx0aGVCYW5rPiBUbXA6OmFic29sdXRlbHlJbmRleGVkKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gQWJzb2x1dGVseUluZGV4ZWQ8dGhlQmFuaz4oKnRoaXMpOworfQorCitUbXAgVG1w
Ojp0bXBGb3JBYnNvbHV0ZUluZGV4KEJhbmsgYmFuaywgdW5zaWduZWQgaW5kZXgpCit7CisgICAg
aWYgKGJhbmsgPT0gR1ApCisgICAgICAgIHJldHVybiBBYnNvbHV0ZVRtcE1hcHBlcjxHUD46OnRt
cEZyb21BYnNvbHV0ZUluZGV4KGluZGV4KTsKKyAgICBBU1NFUlQoYmFuayA9PSBGUCk7CisgICAg
cmV0dXJuIEFic29sdXRlVG1wTWFwcGVyPEZQPjo6dG1wRnJvbUFic29sdXRlSW5kZXgoaW5kZXgp
OworfQorCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCiAKICNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAko
cmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNl
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsOCArMTAyLDE2IEBAIHB1YmxpYzoKICAgICB9CiAg
ICAgCiAgICAgLy8gQWxzbyBhbGxvdyBhZGQvcmVtb3ZlL2NvbnRhaW5zIHRlcm1pbm9sb2d5LCB3
aGljaCBtZWFucyB0aGUgc2FtZSB0aGluZyBhcyBzZXQvY2xlYXIvZ2V0LgotICAgIHZvaWQgYWRk
KFJlZyByZWcpIHsgc2V0KHJlZyk7IH0KLSAgICB2b2lkIHJlbW92ZShSZWcgcmVnKSB7IGNsZWFy
KHJlZyk7IH0KKyAgICBib29sIGFkZChSZWcgcmVnKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCEh
cmVnKTsKKyAgICAgICAgcmV0dXJuICFtX2JpdHMudGVzdEFuZFNldChyZWcuaW5kZXgoKSk7Cisg
ICAgfQorICAgIGJvb2wgcmVtb3ZlKFJlZyByZWcpCisgICAgeworICAgICAgICBBU1NFUlQoISFy
ZWcpOworICAgICAgICByZXR1cm4gbV9iaXRzLnRlc3RBbmRDbGVhcihyZWcuaW5kZXgoKSk7Cisg
ICAgfQogICAgIGJvb2wgY29udGFpbnMoUmVnIHJlZykgY29uc3QgeyByZXR1cm4gZ2V0KHJlZyk7
IH0KICAgICAKICAgICB2b2lkIG1lcmdlKGNvbnN0IFJlZ2lzdGVyU2V0JiBvdGhlcikgeyBtX2Jp
dHMubWVyZ2Uob3RoZXIubV9iaXRzKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjUsNiArMjI1LDcgQEAgdHlw
ZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgdihib29sLCB1c2VGVExKSVQsIHRy
dWUsIE5vcm1hbCwgImFsbG93cyB0aGUgRlRMIEpJVCB0byBiZSB1c2VkIGlmIHRydWUiKSBcCiAg
ICAgdihib29sLCB1c2VGVExUQkFBLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJv
b2wsIHZhbGlkYXRlRlRMT1NSRXhpdExpdmVuZXNzLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBc
CisgICAgdih1bnNpZ25lZCwgZGVmYXVsdEIzT3B0TGV2ZWwsIDIsIE5vcm1hbCwgbnVsbHB0cikg
XAogICAgIHYoYm9vbCwgYjNBbHdheXNGYWlsc0JlZm9yZUNvbXBpbGUsIGZhbHNlLCBOb3JtYWws
IG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGIzQWx3YXlzRmFpbHNCZWZvcmVMaW5rLCBmYWxzZSwg
Tm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCBmdGxDcmFzaGVzLCBmYWxzZSwgTm9ybWFs
LCBudWxscHRyKSAvKiBmb29sLXByb29mIHdheSBvZiBjaGVja2luZyB0aGF0IHlvdSBlbmRlZCB1
cCBpbiB0aGUgRlRMLiA7LSkgKi9cCkBAIC0zOTcsNiArMzk4LDggQEAgdHlwZWRlZiBjb25zdCBj
aGFyKiBvcHRpb25TdHJpbmc7CiAgICAgdihib29sLCBsb2dCM1BoYXNlVGltZXMsIGZhbHNlLCBO
b3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGRvdWJsZSwgcmFyZUJsb2NrUGVuYWx0eSwgMC4wMDEs
IE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgYWlyU3BpbGxzRXZlcnl0aGluZywgZmFs
c2UsIE5vcm1hbCwgbnVsbHB0cikgXAorICAgIHYoYm9vbCwgYWlyTGluZWFyU2NhblZlcmJvc2Us
IGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KGJvb2wsIGFpckxpbmVhclNjYW5TcGls
bHNFdmVyeXRoaW5nLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCBhaXJG
b3JjZUJyaWdnc0FsbG9jYXRvciwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9v
bCwgYWlyRm9yY2VJUkNBbGxvY2F0b3IsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2
KGJvb2wsIGNvYWxlc2NlU3BpbGxTbG90cywgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgJKHJl
dmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2Vu
ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkFT
U0VNQkxZKQogCisjaW5jbHVkZSAiQjNDb21tb24uaCIKICNpbmNsdWRlICJCM0NvbXBpbGF0aW9u
LmgiCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCiAjaW5jbHVkZSAiVk0uaCIKQEAgLTQ3LDcg
KzQ4LDcgQEAgc3RydWN0IENvbXBpbGF0aW9uQ29udGV4dCB7CiAgICAgQ0NhbGxIZWxwZXJzOjpD
YWxsIGpzRW50cnlwb2ludFRvV2FzbUVudHJ5cG9pbnRDYWxsOwogfTsKIAotRXhwZWN0ZWQ8c3Rk
Ojp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBp
bGUoVk0mLCBDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25z
dCBTaWduYXR1cmUqLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBNb2R1
bGVJbmZvcm1hdGlvbiYsIGNvbnN0IFZlY3RvcjxTaWduYXR1cmVJbmRleD4mLCB1bnNpZ25lZCBv
cHRMZXZlbCA9IDEpOworRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0
aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoVk0mLCBDb21waWxhdGlvbkNvbnRleHQmLCBj
b25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBTaWduYXR1cmUqLCBWZWN0b3I8VW5saW5rZWRX
YXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIGNvbnN0IFZlY3RvcjxT
aWduYXR1cmVJbmRleD4mLCB1bnNpZ25lZCBvcHRMZXZlbCA9IEIzOjpkZWZhdWx0T3B0TGV2ZWwo
KSk7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKSW5kZXg6IFNvdXJjZS9XVEYvV1RG
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9XVEYu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL1dU
Ri9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjMsNiAr
MjMsOCBAQAogLyogQmVnaW4gUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KIAkJMEYwRDg1QjQxNzIz
NENDMTAwMzM4MjEwIC8qIE5vTG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYwRDg1QjMxNzIzNENCMTAwMzM4MjEwIC8qIE5vTG9jay5oICovOyB9
OwogCQkwRjBGQ0RERTFERDE2N0Y5MDBDQ0FCNTMgLyogTG9ja0FsZ29yaXRobS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwRkNEREQxREQxNjdGOTAw
Q0NBQjUzIC8qIExvY2tBbGdvcml0aG0uaCAqLzsgfTsKKwkJMEYyQUM1NjExRTg5RjcwQzAwMDFF
RTNGIC8qIFJhbmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjJBQzU2MDFFODlGNzBDMDAwMUVFM0YgLyogUmFuZ2UuaCAqLzsgfTsKKwkJMEYyQUM1
NjMxRThBMDE0OTAwMDFFRTNGIC8qIEluZGV4S2V5VHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQUM1NjIxRThBMDE0OTAwMDFFRTNGIC8qIElu
ZGV4S2V5VHlwZS5oICovOyB9OwogCQkwRjJCNjZBNjE3QjZCNEZCMDBBN0FFM0YgLyogRGVmZXJy
YWJsZVJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMkI2NkE0MTdCNkI0RjcwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5o
ICovOyB9OwogCQkwRjJCNjZBNzE3QjZCNEZEMDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBNTE3QjZCNEY3
MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggKi87IH07CiAJCTBGMzBCQTkwMUU3ODcwOEUwMDJDQTg0
NyAvKiBHbG9iYWxWZXJzaW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMzBCQThBMUU3ODcwOEUwMDJDQTg0NyAvKiBHbG9iYWxWZXJzaW9uLmNw
cCAqLzsgfTsKQEAgLTQwOCw2ICs0MTAsOCBAQAogLyogQmVnaW4gUEJYRmlsZVJlZmVyZW5jZSBz
ZWN0aW9uICovCiAJCTBGMEQ4NUIzMTcyMzRDQjEwMDMzODIxMCAvKiBOb0xvY2suaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTm9Mb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMEZDRERE
MUREMTY3RjkwMENDQUI1MyAvKiBMb2NrQWxnb3JpdGhtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IExvY2tBbGdvcml0aG0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEYyQUM1NjAxRTg5RjcwQzAwMDFFRTNGIC8qIFJhbmdlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFJhbmdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MkFDNTYyMUU4QTAxNDkwMDAxRUUzRiAvKiBJbmRleEtleVR5cGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW5kZXhLZXlUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMkI2NkE0MTdCNkI0RjcwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBEZWZlcnJhYmxlUmVmQ291bnRlZC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjJCNjZBNTE3QjZCNEY3MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEZsaXBCeXRlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjMwMEI3RDE4QUI0OEI0MDBBNkQ3MkUgLyogSGFzaE1ldGhvZC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBI
YXNoTWV0aG9kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDE4LDEwICsxMDIy
LDExIEBACiAJCQkJQThBNDcyQkExNTFBODI1QTAwNDEyM0ZGIC8qIEhhc2hUcmFpdHMuaCAqLywK
IAkJCQlBOEE0NzJCQjE1MUE4MjVBMDA0MTIzRkYgLyogSGV4TnVtYmVyLmggKi8sCiAJCQkJRkU4
OTI1QUYxRDAwREFFQzAwNDY5MDdFIC8qIEluZGVudGVyLmggKi8sCi0JCQkJOUM2N0M1NDI1ODkz
NDhFMjg1QjQ5Njk5IC8qIEluZGV4ZWRDb250YWluZXJJdGVyYXRvci5oICovLAorCQkJCTBGMkFD
NTYyMUU4QTAxNDkwMDAxRUUzRiAvKiBJbmRleEtleVR5cGUuaCAqLywKIAkJCQk1QjQzMzgzQTVE
MEI0NjNDOTQzM0Q5MzMgLyogSW5kZXhNYXAuaCAqLywKIAkJCQkzMTM3RTFEN0RCRDg0QUMzOEZB
RTREMzQgLyogSW5kZXhTZXQuaCAqLywKIAkJCQkyNjg0RDQzNTFDMDAwRDQwMDA4MUQ2NjMgLyog
SW5kZXhTcGFyc2VTZXQuaCAqLywKKwkJCQk5QzY3QzU0MjU4OTM0OEUyODVCNDk2OTkgLyogSW5k
ZXhlZENvbnRhaW5lckl0ZXJhdG9yLmggKi8sCiAJCQkJQThBNDcyQkMxNTFBODI1QTAwNDEyM0ZG
IC8qIElubGluZUFTTS5oICovLAogCQkJCUE3MERBMDgyMTc5OUYwNEQwMDUyOUE5QiAvKiBJbnNl
cnRpb24uaCAqLywKIAkJCQk3Q0REN0ZGNzE4NkQyOTFFMDA3NDMzQ0QgLyogSXRlcmF0b3JBZGFw
dG9ycy5oICovLApAQCAtMTEwMCw2ICsxMTA1LDcgQEAKIAkJCQlBOEE0NzJGQjE1MUE4MjVCMDA0
MTIzRkYgLyogUmFuZG9tTnVtYmVyLmNwcCAqLywKIAkJCQlBOEE0NzJGQzE1MUE4MjVCMDA0MTIz
RkYgLyogUmFuZG9tTnVtYmVyLmggKi8sCiAJCQkJQThBNDcyRkQxNTFBODI1QjAwNDEyM0ZGIC8q
IFJhbmRvbU51bWJlclNlZWQuaCAqLywKKwkJCQkwRjJBQzU2MDFFODlGNzBDMDAwMUVFM0YgLyog
UmFuZ2UuaCAqLywKIAkJCQkwRjcyNUNBQjFDNTA0NjE2MDBBRDk0M0EgLyogUmFuZ2VTZXQuaCAq
LywKIAkJCQkwRjg3MTA1OTE2NjQzRjE5MDA5MEIwQUQgLyogUmF3UG9pbnRlci5oICovLAogCQkJ
CTBGREU4N0Y2MURGRDA3Q0MwMDY0QzM5MCAvKiBSZWN1cnNpdmVMb2NrQWRhcHRlci5oICovLApA
QCAtMTQ4NSw2ICsxNDkxLDcgQEAKIAkJCQlDOTE2Qjk3NUYwMkY0RjdFOEI0QUIxMkQgLyogSW5k
ZXhNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUM4QjBFMUExRTAxQTQ4NkVCOTVFMEQxMSAvKiBJ
bmRleFNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjY4NEQ0MzYxQzAwMEQ0MDAwODFENjYzIC8q
IEluZGV4U3BhcnNlU2V0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJBQzU2MzFFOEEwMTQ5MDAw
MUVFM0YgLyogSW5kZXhLZXlUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNEQzE1MUE4
MjVCMDA0MTIzRkYgLyogSW5saW5lQVNNLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzBEQTA4NDE3
OTlGMDREMDA1MjlBOUIgLyogSW5zZXJ0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkyNjE0N0Iw
QTE1RERDQ0RDMDBEREI5MDcgLyogSW50ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5oIGluIEhlYWRl
cnMgKi8sCkBAIC0xNTg2LDYgKzE1OTMsNyBAQAogCQkJCTQzMEI0Nzg5MUFBQUFDMUEwMDEyMjNE
QSAvKiBTdHJpbmdDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDNFMTUxQTgyNUIw
MDQxMjNGRiAvKiBTdHJpbmdDb25jYXRlbmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0NENEMy
NzAxRTJDODJCOTAwOTI5NDcwIC8qIFN0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEYyQUM1NjExRTg5RjcwQzAwMDFFRTNGIC8qIFJhbmdlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBOEE0NzQyQzE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nRXh0cmFzLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBOEE0NzQzRjE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nSGFzaC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0ODc0NTQxN0EwQkRBRTAwRkEwNENCIC8qIFN0cmluZ0hh
c2hEdW1wQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9DTWFr
ZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAko
cmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTEwMCw2ICsxMDAsNyBAQCBzZXQoV1RGX0hFQURFUlMKICAgICBSQU1TaXpl
LmgKICAgICBSYW5kb21OdW1iZXIuaAogICAgIFJhbmRvbU51bWJlclNlZWQuaAorICAgIFJhbmdl
LmgKICAgICBSYW5nZVNldC5oCiAgICAgUmF3UG9pbnRlci5oCiAgICAgUmVjdXJzaXZlTG9ja0Fk
YXB0ZXIuaApJbmRleDogU291cmNlL1dURi93dGYvRGVxdWUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9EZXF1ZS5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvV1RGL3d0Zi9E
ZXF1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNywgMjAwOCwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDctMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKQEAgLTg5LDYgKzg5LDE5IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92
ZUxhc3QoKTsKICAgICB2b2lkIHJlbW92ZShpdGVyYXRvciYpOwogICAgIHZvaWQgcmVtb3ZlKGNv
bnN0X2l0ZXJhdG9yJik7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4gdm9pZCBy
ZW1vdmVBbGxNYXRjaGluZyhjb25zdCBGdW5jJik7CisgICAgCisgICAgLy8gVGhpcyBpcyBhIHBy
aW9yaXR5IGVucXVldWUuIFRoZSBjYWxsYmFjayBpcyBnaXZlbiBhIHZhbHVlLCBhbmQgaWYgaXQg
cmV0dXJucyB0cnVlLCB0aGVuIHRoaXMKKyAgICAvLyB3aWxsIHB1dCB0aGUgYXBwZW5kZWQgdmFs
dWUgYmVmb3JlIHRoYXQgdmFsdWUuIEl0IHdpbGwga2VlcCBidWJibGluZyB1bnRpbCB0aGUgY2Fs
bGJhY2sgcmV0dXJucworICAgIC8vIGZhbHNlIG9yIHRoZSB2YWx1ZSBlbmRzIHVwIGF0IHRoZSBo
ZWFkIG9mIHRoZSBxdWV1ZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCB0eXBlbmFtZSBGdW5j
PgorICAgIHZvaWQgYXBwZW5kQW5kQnViYmxlKFUmJiwgY29uc3QgRnVuYyYpOworICAgIAorICAg
IC8vIFJlbW92ZSBhbmQgcmV0dXJuIHRoZSBsYXN0IGVsZW1lbnQgZm9yIHdoaWNoIHRoZSBjYWxs
YmFjayByZXR1cm5zIHRydWUuIFJldHVybnMgYSBudWxsIHZlcnNpb24gb2YKKyAgICAvLyBUIGlm
IGl0IHRoZSBjYWxsYmFjayBhbHdheXMgcmV0dXJucyBmYWxzZS4KKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jPgorICAgIFQgdGFrZUxhc3QoY29uc3QgRnVuYyYpOwogCiAgICAgdm9pZCBjbGVh
cigpOwogCkBAIC01MjQsNiArNTM3LDU1IEBAIGlubGluZSB2b2lkIERlcXVlPFQsIGlubGluZUNh
cGFjaXR5Pjo6cmUKICAgICBjaGVja1ZhbGlkaXR5KCk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Citpbmxp
bmUgdm9pZCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OnJlbW92ZUFsbE1hdGNoaW5nKGNvbnN0
IEZ1bmMmIGZ1bmMpCit7CisgICAgc2l6ZV90IGNvdW50ID0gc2l6ZSgpOworICAgIHdoaWxlIChj
b3VudC0tKSB7CisgICAgICAgIFQgdmFsdWUgPSB0YWtlRmlyc3QoKTsKKyAgICAgICAgaWYgKCFm
dW5jKHZhbHVlKSkKKyAgICAgICAgICAgIGFwcGVuZChXVEZNb3ZlKHZhbHVlKSk7CisgICAgfQor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBVLCB0eXBlbmFtZSBGdW5jPgoraW5saW5lIHZvaWQgRGVxdWU8VCwgaW5saW5l
Q2FwYWNpdHk+OjphcHBlbmRBbmRCdWJibGUoVSYmIHZhbHVlLCBjb25zdCBGdW5jJiBmdW5jKQor
eworICAgIGFwcGVuZChXVEZNb3ZlKHZhbHVlKSk7CisgICAgaXRlcmF0b3IgYmVnaW4gPSB0aGlz
LT5iZWdpbigpOworICAgIGl0ZXJhdG9yIGl0ZXIgPSBlbmQoKTsKKyAgICAtLWl0ZXI7CisgICAg
d2hpbGUgKGl0ZXIgIT0gYmVnaW4pIHsKKyAgICAgICAgaXRlcmF0b3IgcHJldiA9IGl0ZXI7Cisg
ICAgICAgIC0tcHJldjsKKyAgICAgICAgaWYgKCFmdW5jKCpwcmV2KSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgc3RkOjpzd2FwKCpwcmV2LCAqaXRlcik7CisgICAgICAgIGl0ZXIgPSBw
cmV2OworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFj
aXR5PgordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK2lubGluZSBUIERlcXVlPFQsIGlubGluZUNh
cGFjaXR5Pjo6dGFrZUxhc3QoY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICB1bnNpZ25lZCBjb3Vu
dCA9IDA7CisgICAgdW5zaWduZWQgc2l6ZSA9IHRoaXMtPnNpemUoKTsKKyAgICB3aGlsZSAoY291
bnQgPCBzaXplKSB7CisgICAgICAgIFQgY2FuZGlkYXRlID0gdGFrZUxhc3QoKTsKKyAgICAgICAg
aWYgKGZ1bmMoY2FuZGlkYXRlKSkgeworICAgICAgICAgICAgd2hpbGUgKGNvdW50LS0pCisgICAg
ICAgICAgICAgICAgYXBwZW5kKHRha2VGaXJzdCgpKTsKKyAgICAgICAgICAgIHJldHVybiBjYW5k
aWRhdGU7CisgICAgICAgIH0KKyAgICAgICAgY291bnQrKzsKKyAgICAgICAgcHJlcGVuZChXVEZN
b3ZlKGNhbmRpZGF0ZSkpOworICAgIH0KKyAgICByZXR1cm4gVCgpOworfQorCiAjaWZkZWYgTkRF
QlVHCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+IGlubGluZSB2
b2lkIERlcXVlSXRlcmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5Pjo6Y2hlY2tWYWxpZGl0eSgp
IGNvbnN0IHsgfQogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBp
bmxpbmUgdm9pZCBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT46OmNoZWNrVmFs
aWRpdHkoY29uc3QgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+JikgY29uc3Qg
eyB9CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9JbmRleEtleVR5cGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9JbmRleEtleVR5cGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RG
L3d0Zi9JbmRleEtleVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQor
CituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBJbmRleEtl
eVR5cGUgeworICAgIHN0YXRpYyBzaXplX3QgaW5kZXgoY29uc3QgVCYga2V5KSB7IHJldHVybiBr
ZXkuaW5kZXgoKTsgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBJbmRleEtl
eVR5cGU8VCo+IHsKKyAgICBzdGF0aWMgc2l6ZV90IGluZGV4KFQqIGtleSkgeyByZXR1cm4ga2V5
LT5pbmRleCgpOyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNlL1dU
Ri93dGYvSW5kZXhNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9JbmRleE1hcC5o
CShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvV1RGL3d0Zi9JbmRleE1hcC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSA8d3Rm
L0luZGV4S2V5VHlwZS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdU
RiB7CkBAIC03MCwxOCArNzEsMjQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV92ZWN0b3Jb
aW5kZXhdOwogICAgIH0KICAgICAKLSAgICBWYWx1ZSYgb3BlcmF0b3JbXShLZXkqIGtleSkKKyAg
ICBWYWx1ZSYgb3BlcmF0b3JbXShjb25zdCBLZXkmIGtleSkKICAgICB7Ci0gICAgICAgIHJldHVy
biBtX3ZlY3RvcltrZXktPmluZGV4KCldOworICAgICAgICByZXR1cm4gbV92ZWN0b3JbSW5kZXhL
ZXlUeXBlPEtleT46OmluZGV4KGtleSldOwogICAgIH0KICAgICAKLSAgICBjb25zdCBWYWx1ZSYg
b3BlcmF0b3JbXShLZXkqIGtleSkgY29uc3QKKyAgICBjb25zdCBWYWx1ZSYgb3BlcmF0b3JbXShj
b25zdCBLZXkmIGtleSkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3ZlY3RvcltrZXkt
PmluZGV4KCldOworICAgICAgICByZXR1cm4gbV92ZWN0b3JbSW5kZXhLZXlUeXBlPEtleT46Omlu
ZGV4KGtleSldOworICAgIH0KKyAgICAKKyAgICB2b2lkIGFwcGVuZChjb25zdCBLZXkmIGtleSwg
VmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChJbmRleEtleVR5cGU8
S2V5Pjo6aW5kZXgoa2V5KSA9PSBtX3ZlY3Rvci5zaXplKCkpOworICAgICAgICBtX3ZlY3Rvci5h
cHBlbmQodmFsdWUpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBWZWN0b3I8VmFsdWU+IG1fdmVj
dG9yOworICAgIFZlY3RvcjxWYWx1ZSwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fdmVjdG9y
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9JbmRleFNl
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0luZGV4U2V0LmgJKHJldmlzaW9uIDIx
NDQyNykKKysrIFNvdXJjZS9XVEYvd3RmL0luZGV4U2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
Nyw2ICsyNyw3IEBACiAKICNpbmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+CiAjaW5jbHVkZSA8d3Rm
L0NvbW1hUHJpbnRlci5oPgorI2luY2x1ZGUgPHd0Zi9JbmRleEtleVR5cGUuaD4KIAogbmFtZXNw
YWNlIFdURiB7CiAKQEAgLTQyLDMwICs0MywzMCBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAot
ICAgIGJvb2wgYWRkKFQqIHZhbHVlKQorICAgIGJvb2wgYWRkKGNvbnN0IFQmIHZhbHVlKQogICAg
IHsKLSAgICAgICAgcmV0dXJuICFtX3NldC5zZXQodmFsdWUtPmluZGV4KCkpOworICAgICAgICBy
ZXR1cm4gIW1fc2V0LnNldChJbmRleEtleVR5cGU8VD46OmluZGV4KHZhbHVlKSk7CiAgICAgfQog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmFibGU+CiAgICAgYm9vbCBhZGRBbGwoY29uc3Qg
SXRlcmFibGUmIGl0ZXJhYmxlKQogICAgIHsKICAgICAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsK
LSAgICAgICAgZm9yIChUKiB2YWx1ZSA6IGl0ZXJhYmxlKQorICAgICAgICBmb3IgKGNvbnN0IFQm
IHZhbHVlIDogaXRlcmFibGUpCiAgICAgICAgICAgICByZXN1bHQgfD0gYWRkKHZhbHVlKTsKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBib29sIHJlbW92ZShUKiB2YWx1ZSkK
KyAgICBib29sIHJlbW92ZShjb25zdCBUJiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBt
X3NldC5jbGVhcih2YWx1ZS0+aW5kZXgoKSk7CisgICAgICAgIHJldHVybiBtX3NldC5jbGVhcihJ
bmRleEtleVR5cGU8VD46OmluZGV4KHZhbHVlKSk7CiAgICAgfQogCi0gICAgYm9vbCBjb250YWlu
cyhUKiB2YWx1ZSkgY29uc3QKKyAgICBib29sIGNvbnRhaW5zKGNvbnN0IFQmIHZhbHVlKSBjb25z
dAogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgcmV0dXJuIG1fc2V0LmdldCh2YWx1ZS0+aW5kZXgoKSk7CisgICAgICAgIHJldHVy
biBtX3NldC5nZXQoSW5kZXhLZXlUeXBlPFQ+OjppbmRleCh2YWx1ZSkpOwogICAgIH0KIAogICAg
IHNpemVfdCBzaXplKCkgY29uc3QKQEAgLTEwMCw3ICsxMDEsNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIFQqIG9wZXJhdG9yKigpCisgICAg
ICAgICAgICBUIG9wZXJhdG9yKigpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIG1fY29sbGVjdGlvbi0+YXQoKm1faXRlcik7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9SYW5nZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1JhbmdlLmgJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvUmFuZ2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVk
ZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFt
ZXNwYWNlIFdURiB7CisKKy8vIE5vdGUgdGhhdCB0aGUgJ2JlZ2luJyBpcyBpbmNsdXNpdmUsIHdo
aWxlIHRoZSAnZW5kJyBpcyBleGNsdXNpdmUuIFRoZXNlIHR3byByYW5nZXMgYXJlIG5vbi0KKy8v
IG92ZXJsYXBwaW5nOgorLy8KKy8vICAgICByYW5nZUEgPSAwLi4uOAorLy8gICAgIHJhbmdlQiA9
IDguLi4xNgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBQYXNzZWRUeXBlPgorY2xhc3MgUmFuZ2Ugewor
cHVibGljOgorICAgIHR5cGVkZWYgUGFzc2VkVHlwZSBUeXBlOworICAgIAorICAgIFJhbmdlKCkK
KyAgICAgICAgOiBtX2JlZ2luKDApCisgICAgICAgICwgbV9lbmQoMCkKKyAgICB7CisgICAgfQor
CisgICAgZXhwbGljaXQgUmFuZ2UoVHlwZSB2YWx1ZSkKKyAgICAgICAgOiBtX2JlZ2luKHZhbHVl
KQorICAgICAgICAsIG1fZW5kKHZhbHVlICsgMSkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2Vu
ZCA+PSBtX2JlZ2luKTsKKyAgICB9CisKKyAgICBSYW5nZShUeXBlIGJlZ2luLCBUeXBlIGVuZCkK
KyAgICAgICAgOiBtX2JlZ2luKGJlZ2luKQorICAgICAgICAsIG1fZW5kKGVuZCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChtX2VuZCA+PSBtX2JlZ2luKTsKKyAgICAgICAgaWYgKG1fYmVnaW4gPT0g
bV9lbmQpIHsKKyAgICAgICAgICAgIC8vIENhbm9uaWNhbGl6ZSBlbXB0eSByYW5nZXMuCisgICAg
ICAgICAgICBtX2JlZ2luID0gMDsKKyAgICAgICAgICAgIG1fZW5kID0gMDsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHN0YXRpYyBSYW5nZSB0b3AoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFJh
bmdlKHN0ZDo6bnVtZXJpY19saW1pdHM8VHlwZT46Om1pbigpLCBzdGQ6Om51bWVyaWNfbGltaXRz
PFR5cGU+OjptYXgoKSk7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJhbmdl
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2JlZ2luID09IG90aGVyLm1f
YmVnaW4KKyAgICAgICAgICAgICYmIG1fZW5kID09IG90aGVyLm1fZW5kOworICAgIH0KKworICAg
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBSYW5nZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IG9w
ZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX2JlZ2luICE9IG1fZW5kOyB9CisKKyAgICBS
YW5nZSBvcGVyYXRvcnwoY29uc3QgUmFuZ2UmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
aWYgKCEqdGhpcykKKyAgICAgICAgICAgIHJldHVybiBvdGhlcjsKKyAgICAgICAgaWYgKCFvdGhl
cikKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgcmV0dXJuIFJhbmdlKAorICAg
ICAgICAgICAgc3RkOjptaW4obV9iZWdpbiwgb3RoZXIubV9iZWdpbiksCisgICAgICAgICAgICBz
dGQ6Om1heChtX2VuZCwgb3RoZXIubV9lbmQpKTsKKyAgICB9CisgICAgCisgICAgUmFuZ2UmIG9w
ZXJhdG9yfD0oY29uc3QgUmFuZ2UmIG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlz
ID0gKnRoaXMgfCBvdGhlcjsKKyAgICB9CisgICAgCisgICAgVHlwZSBiZWdpbigpIGNvbnN0IHsg
cmV0dXJuIG1fYmVnaW47IH0KKyAgICBUeXBlIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kOyB9
CisKKyAgICBib29sIG92ZXJsYXBzKGNvbnN0IFJhbmdlJiBvdGhlcikgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBXVEY6OnJhbmdlc092ZXJsYXAobV9iZWdpbiwgbV9lbmQsIG90aGVyLm1f
YmVnaW4sIG90aGVyLm1fZW5kKTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICgqdGhpcyA9PSBSYW5nZSgpKSB7CisgICAg
ICAgICAgICBvdXQucHJpbnQoIkJvdHRvbSIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIGlmICgqdGhpcyA9PSB0b3AoKSkgeworICAgICAgICAgICAgb3V0LnByaW50
KCJUb3AiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9i
ZWdpbiA9PSBtX2VuZCArIDEpIHsKKyAgICAgICAgICAgIG91dC5wcmludChtX2JlZ2luKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBvdXQucHJpbnQobV9iZWdpbiwg
Ii4uLiIsIG1fZW5kKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVHlwZSBtX2JlZ2luOworICAg
IFR5cGUgbV9lbmQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpSYW5n
ZTsKKwpJbmRleDogU291cmNlL1dURi93dGYvUmFuZ2VTZXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9SYW5nZVNldC5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvV1RGL3d0
Zi9SYW5nZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw2ICs3NywxMCBAQCBwdWJsaWM6CiAg
ICAgICAgIG1faXNDb21wYWN0ID0gZmFsc2U7CiAKICAgICAgICAgLy8gV2UgYXBwZW5kIHdpdGhv
dXQgY29tcGFjdGluZyBvbmx5IGlmIGRvaW5nIHNvIGlzIGd1YXJhbnRlZWQgbm90IHRvIHJlc2l6
ZSB0aGUgdmVjdG9yLgorICAgICAgICAvLyBGSVhNRTogVGhpcyBoZXVyaXN0aWMgaXMgYWxtb3N0
IGNlcnRhaW5seSB3cm9uZywgYmVjYXVzZSB3ZSBkb24ndCBjb250cm9sIHRoZSBjYXBhY2l0eS4g
SQorICAgICAgICAvLyB0aGluayB0aGF0IHRoaXMgbWVhbnMgdGhhdCB3ZSB3aWxsIHNvbWV0aW1l
cyBiZSByYWdlLWNvbXBhY3Rpbmcgd2hlbiB3ZSBhcmUganVzdCBzaHkgb2YgdGhlCisgICAgICAg
IC8vIGNhcGFjaXR5LgorICAgICAgICAvLyBPT1BTOiBuZWVkIGJ1ZyB1cmwKICAgICAgICAgaWYg
KG1fcmFuZ2VzLnNpemUoKSArIDEgPCBtX3Jhbmdlcy5jYXBhY2l0eSgpKSB7CiAgICAgICAgICAg
ICBtX3Jhbmdlcy5hcHBlbmQocmFuZ2UpOwogICAgICAgICAgICAgcmV0dXJuOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305829</attachid>
            <date>2017-03-29 21:27:03 -0700</date>
            <delta_ts>2017-03-29 21:31:22 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>114507</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIxNDQyNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMTQwLDcgKzE0MCw2IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYjMvQjNG
b2xkUGF0aENvbnN0YW50cy5jcHAKICAgICBiMy9CM0ZyZXF1ZW5jeUNsYXNzLmNwcAogICAgIGIz
L0IzR2VuZXJhdGUuY3BwCi0gICAgYjMvQjNIZWFwUmFuZ2UuY3BwCiAgICAgYjMvQjNJbmZlclN3
aXRjaGVzLmNwcAogICAgIGIzL0IzSW5zZXJ0aW9uU2V0LmNwcAogICAgIGIzL0IzS2luZC5jcHAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTgzLDYgKzE4MywxMCBAQAogCQkwRjI1RjFCMjE4MTYz
NUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1RjFBQjE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xv
d1BhdGhDYWxsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEYyNUYxQjMxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1RjFBQzE4
MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5LmNwcCAqLzsgfTsKIAkJMEYyNUYx
QjQxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNUYxQUQxODE2MzVGMzAwNTIyRjM5
IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGMkFDNTY2MUU4QTBCNzcwMDAxRUUzRiAvKiBBaXJGaXhTcGls
bHNBZnRlclRlcm1pbmFscy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjJBQzU2NDFFOEEwQjc2MDAwMUVFM0YgLyogQWlyRml4U3BpbGxzQWZ0ZXJU
ZXJtaW5hbHMuY3BwICovOyB9OworCQkwRjJBQzU2NzFFOEEwQjc5MDAwMUVFM0YgLyogQWlyRml4
U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMkFDNTY1MUU4QTBCNzYwMDAxRUUzRiAvKiBBaXJGaXhTcGlsbHNBZnRl
clRlcm1pbmFscy5oICovOyB9OworCQkwRjJBQzU2QTFFOEEwQkQzMDAwMUVFM0YgLyogQWlyQWxs
b2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQUM1NjgxRThBMEJEMTAwMDFFRTNGIC8qIEFpckFsbG9j
YXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcCAqLzsgfTsKKwkJMEYyQUM1NkIxRThBMEJENTAw
MDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJBQzU2OTFFOEEwQkQxMDAwMUVF
M0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaCAqLzsgfTsKIAkJMEYyQjY2
QUMxN0I2QjUzRjAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBODE3QjZCNTNEMDBBN0FF
M0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJCNjZBRDE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNv
bWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJCNjZBOTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNv
dW50ZWRJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEYyQjY2QUUxN0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVk
U2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJC
NjZBQTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTY5LDcgKzk3Myw2
IEBACiAJCTBGRUM4NUJDMUJFMTQ2MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0cmVuZ3RoLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUI3MUJF
MTQ2MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0cmVuZ3RoLmNwcCAqLzsgfTsKIAkJMEZFQzg1QkQx
QkUxNDYyRjAwODBGRjc0IC8qIEIzUmVkdWNlU3RyZW5ndGguaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUI4MUJFMTQ2MkYwMDgwRkY3NCAvKiBC
M1JlZHVjZVN0cmVuZ3RoLmggKi87IH07CiAJCTBGRUM4NUMxMUJFMTY3QTAwMDgwRkY3NCAvKiBC
M0VmZmVjdHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NUJFMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0VmZmVjdHMuaCAqLzsgfTsKLQkJMEZFQzg1
QzIxQkUxNjdBMDAwODBGRjc0IC8qIEIzSGVhcFJhbmdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUJGMUJFMTY3QTAwMDgwRkY3NCAvKiBC
M0hlYXBSYW5nZS5jcHAgKi87IH07CiAJCTBGRUM4NUMzMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hl
YXBSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg1QzAxQkUxNjdBMDAwODBGRjc0IC8qIEIzSGVhcFJhbmdlLmggKi87IH07CiAJCTBGRUM4
NUM1MUJFMTZGNUEwMDgwRkY3NCAvKiBCM0VmZmVjdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1QzQxQkUxNkY1QTAwODBGRjc0IC8qIEIz
RWZmZWN0cy5jcHAgKi87IH07CiAJCTBGRUQ2N0I5MUIyNjI1NkQwMDY2Q0UxNSAvKiBERkdDb25z
dGFudEhvaXN0aW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFRDY3QjcxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0YW50SG9pc3Rp
bmdQaGFzZS5jcHAgKi87IH07CkBAIC0yNzAzLDYgKzI3MDYsMTAgQEAKIAkJMEYyNUYxQUIxODE2
MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBGVExTbG93UGF0aENhbGwuaDsgcGF0aCA9IGZ0bC9GVExTbG93UGF0aENhbGwu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNUYxQUMxODE2MzVGMzAwNTIyRjM5
IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBGVExTbG93UGF0aENhbGxLZXkuY3BwOyBwYXRoID0gZnRsL0ZUTFNsb3dQYXRoQ2Fs
bEtleS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjVGMUFEMTgxNjM1RjMw
MDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gRlRMU2xvd1BhdGhDYWxsS2V5Lmg7IHBhdGggPSBmdGwvRlRMU2xvd1BhdGhDYWxs
S2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkFDNTY0MUU4QTBCNzYwMDAx
RUUzRiAvKiBBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5jcHA7IHBhdGgg
PSBiMy9haXIvQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjJBQzU2NTFFOEEwQjc2MDAwMUVFM0YgLyogQWlyRml4U3BpbGxzQWZ0
ZXJUZXJtaW5hbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyRml4U3Bp
bGxzQWZ0ZXJUZXJtaW5hbHMuaDsgcGF0aCA9IGIzL2Fpci9BaXJGaXhTcGlsbHNBZnRlclRlcm1p
bmFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJBQzU2ODFFOEEwQkQxMDAw
MUVFM0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNj
YW4uY3BwOyBwYXRoID0gYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQUM1NjkxRThBMEJEMTAwMDFFRTNG
IC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmg7IHBhdGgg
PSBiMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQjY2QTgxN0I2QjUzRDAwQTdBRTNGIC8qIEdDSW5jb21pbmdS
ZWZDb3VudGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5jb21pbmdSZWZDb3VudGVkLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkE5MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0lu
Y29taW5nUmVmQ291bnRlZElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR0NJbmNvbWluZ1JlZkNv
dW50ZWRJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkFBMTdC
NkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMzQ5Niw3ICszNTAzLDYgQEAKIAkJMEZFQzg1QjcxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVk
dWNlU3RyZW5ndGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNS
ZWR1Y2VTdHJlbmd0aC5jcHA7IHBhdGggPSBiMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQzg1QjgxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVk
dWNlU3RyZW5ndGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNSZWR1Y2VT
dHJlbmd0aC5oOyBwYXRoID0gYjMvQjNSZWR1Y2VTdHJlbmd0aC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkVDODVCRTFCRTE2N0EwMDA4MEZGNzQgLyogQjNFZmZlY3RzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzRWZmZWN0cy5oOyBwYXRoID0gYjMvQjNF
ZmZlY3RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGRUM4NUJGMUJFMTY3QTAw
MDgwRkY3NCAvKiBCM0hlYXBSYW5nZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBCM0hlYXBSYW5nZS5jcHA7IHBhdGggPSBiMy9CM0hlYXBSYW5nZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUM4NUMwMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hl
YXBSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0hlYXBSYW5nZS5o
OyBwYXRoID0gYjMvQjNIZWFwUmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZFQzg1QzQxQkUxNkY1QTAwODBGRjc0IC8qIEIzRWZmZWN0cy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0VmZmVjdHMuY3BwOyBwYXRoID0gYjMvQjNFZmZlY3Rz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFRDY3QjcxQjI2MjU2RDAwNjZD
RTE1IC8qIERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuY3BwOyBwYXRoID0gZGZn
L0RGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01NDE5LDcgKzU0MjUsNiBAQAogCQkJCTBGRUM4NENGMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0dlbmVyYXRlLmggKi8sCiAJCQkJMEYyQzYzQjUxRTYzNDNFODAwQzEzODM5IC8qIEIzR2VuZXJp
Y0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi8sCiAJCQkJMEZFQzg0RDAxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oICovLAotCQkJCTBGRUM4NUJGMUJFMTY3QTAwMDgw
RkY3NCAvKiBCM0hlYXBSYW5nZS5jcHAgKi8sCiAJCQkJMEZFQzg1QzAxQkUxNjdBMDAwODBGRjc0
IC8qIEIzSGVhcFJhbmdlLmggKi8sCiAJCQkJREM2OUI5OUExRDE1RjkwRjAwMkUzQzAwIC8qIEIz
SW5mZXJTd2l0Y2hlcy5jcHAgKi8sCiAJCQkJREM2OUI5OUIxRDE1RjkwRjAwMkUzQzAwIC8qIEIz
SW5mZXJTd2l0Y2hlcy5oICovLApAQCAtNTUyOCw2ICs1NTMzLDggQEAKIAkJMEZFQzg0QjMxQkRB
Q0Q4ODAwODBGRjc0IC8qIGFpciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCisJCQkJMEYyQUM1NjgxRThBMEJEMTAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0
ZXJzQnlMaW5lYXJTY2FuLmNwcCAqLywKKwkJCQkwRjJBQzU2OTFFOEEwQkQxMDAwMUVFM0YgLyog
QWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaCAqLywKIAkJCQk3OTY1QzIxNDFFNUQ3
OTk2MDBCNzU5MUQgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuY3BwICov
LAogCQkJCTc5NjVDMjE1MUU1RDc5OTYwMEI3NTkxRCAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5
R3JhcGhDb2xvcmluZy5oICovLAogCQkJCTBGRUM4NTQ4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJB
bGxvY2F0ZVN0YWNrLmNwcCAqLywKQEAgLTU1NjEsNiArNTU2OCw4IEBACiAJCQkJMEY0REUxQ0Qx
QzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCAqLywKIAkJCQkyNjJEODVC
NDFDMEQ2NTBGMDA2QUNCNjEgLyogQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmNwcCAqLywK
IAkJCQkyNjJEODVCNTFDMEQ2NTBGMDA2QUNCNjEgLyogQWlyRml4UGFydGlhbFJlZ2lzdGVyU3Rh
bGxzLmggKi8sCisJCQkJMEYyQUM1NjQxRThBMEI3NjAwMDFFRTNGIC8qIEFpckZpeFNwaWxsc0Fm
dGVyVGVybWluYWxzLmNwcCAqLywKKwkJCQkwRjJBQzU2NTFFOEEwQjc2MDAwMUVFM0YgLyogQWly
Rml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCAqLywKIAkJCQkwRkVDODU1MjFCREFDREM3MDA4MEZG
NzQgLyogQWlyRnJlcXVlbnRlZEJsb2NrLmggKi8sCiAJCQkJMEZFQzg1NTMxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckdlbmVyYXRlLmNwcCAqLywKIAkJCQkwRkVDODU1NDFCREFDREM3MDA4MEZGNzQg
LyogQWlyR2VuZXJhdGUuaCAqLywKQEAgLTgxMzksNiArODE0OCw3IEBACiAJCQkJMEZFQzg1MTAx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkVDODUxMjFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0MzQyMkE2MzFDMTU4RTZEMDBFMkVCOTggLyogQjNDb25zdEZsb2F0VmFsdWUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkFDNTZCMUU4QTBCRDUwMDAxRUUzRiAvKiBBaXJBbGxv
Y2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1QjMx
QkRFRDk1NzAwODBGRjc0IC8qIEIzQ29uc3RQdHJWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYzMzhERjYxQkU5M0Q1NTAwMTNDODhGIC8qIEIzQ29uc3RyYWluZWRWYWx1ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyQzYzQjgxRTYzNDNGNzAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2NrSW5z
ZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKQEAgLTkzNjIsNiArOTM3Miw3IEBACiAJCQkJNzA5
RkI4NkExQUUzMzVDNjAwMzlEMDY5IC8qIFdlYWtTZXRDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMTQxNTAxMzMxNTRCQjEzRjAwNUQ4Qzk4IC8qIFdlYWtTZXRJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3MDlGQjg2QzFBRTMzNUM2MDAzOUQwNjkgLyogV2Vha1NldFByb3Rv
dHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQUM1NjcxRThBMEI3OTAwMDFFRTNGIC8qIEFp
ckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JFRDFE
QjU4REFEMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNDMTYxREI1OUNCMjAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5
Q29tcGlsZUVycm9yQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JF
RjFEQjU4REFEMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90b3R5cGUuaCBp
biBIZWFkZXJzICovLApAQCAtOTk4OCw3ICs5OTk5LDYgQEAKIAkJCQkwRjcyNUNBRjFDNTA2RDNC
MDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkVDODUxNTFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkVDODUxODFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQkwRkVDODVDMjFCRTE2N0EwMDA4MEZGNzQgLyogQjNIZWFwUmFuZ2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJREM2OUI5OUMxRDE1RjkxMjAwMkUzQzAwIC8qIEIzSW5m
ZXJTd2l0Y2hlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVDODVCOTFCRTE0NjJGMDA4MEZG
NzQgLyogQjNJbnNlcnRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZERjY3RDMxRDlD
NkQyQTAwMUI5ODI1IC8qIEIzS2luZC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMTU0LDYgKzEw
MTY0LDcgQEAKIAkJCQlBNzhBOTc3NjE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkJEQzE1MTUxQzVENEQwMENEODkxMCAvKiBERkdGaXh1
cFBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjAxNzdGMURDQURDMzMwMEVBNTk1MCAv
KiBERkdGbG93SW5kZXhpbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQUM1NkExRThBMEJE
MzAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGOUQzMzk2MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRjcxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0ZsdXNo
Rm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNjlDQzg4MTkzQUM2MEEwMDQ1NzU5RSAv
KiBERkdGcm96ZW5WYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMjYzLDYgKzEwMjc0LDcg
QEAKIAkJCQkyQTgzNjM4NTE4RDdEMEVFMDAwMEVCQ0MgLyogRWRlbkdDQWN0aXZpdHlDYWxsYmFj
ay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OUU0NUEyNTE4QTFCMjU5MDAyNkQ4OEYgLyogRW5j
b2RlZFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUM3MTA3RUMzNzYwMDQyN0E0
OCAvKiBFcnJvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJBQzU2NjFFOEEwQjc3MDAwMUVF
M0YgLyogQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQ3RjM5QzgxMDdFQzM3NjAwNDI3QTQ4IC8qIEVycm9yQ29uc3RydWN0b3IuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRkVCNThDMTQxODdCOEIxNjAwOThFRjBCIC8qIEVycm9ySGFuZGxpbmdTY29w
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDOTEwN0VDMzc2MDA0MjdBNDggLyogRXJy
b3JJbnN0YW5jZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrVXRpbHMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTE0LDcgKzExNCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+CiBWZWN0b3I8QmFz
aWNCbG9jayo+IGJsb2Nrc0luUHJlT3JkZXIoQmFzaWNCbG9jayogcm9vdCkKIHsKICAgICBWZWN0
b3I8QmFzaWNCbG9jayo+IHJlc3VsdDsKLSAgICBHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2Nr
KiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IHdvcmtsaXN0OworICAgIEdyYXBoTm9kZVdvcmtsaXN0
PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+IHdvcmtsaXN0OwogICAgIHdvcmts
aXN0LnB1c2gocm9vdCk7CiAgICAgd2hpbGUgKEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3Qu
cG9wKCkpIHsKICAgICAgICAgcmVzdWx0LmFwcGVuZChibG9jayk7CkBAIC0xMjgsNyArMTI4LDcg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KIFZlY3RvcjxCYXNpY0Jsb2NrKj4gYmxv
Y2tzSW5Qb3N0T3JkZXIoQmFzaWNCbG9jayogcm9vdCkKIHsKICAgICBWZWN0b3I8QmFzaWNCbG9j
ayo+IHJlc3VsdDsKLSAgICBQb3N0T3JkZXJHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwg
SW5kZXhTZXQ8QmFzaWNCbG9jaz4+IHdvcmtsaXN0OworICAgIFBvc3RPcmRlckdyYXBoTm9kZVdv
cmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+IHdvcmtsaXN0OwogICAg
IHdvcmtsaXN0LnB1c2gocm9vdCk7CiAgICAgd2hpbGUgKEdyYXBoTm9kZVdpdGhPcmRlcjxCYXNp
Y0Jsb2NrKj4gaXRlbSA9IHdvcmtsaXN0LnBvcCgpKSB7CiAgICAgICAgIHN3aXRjaCAoaXRlbS5v
cmRlcikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tXb3JrbGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrV29ya2xpc3Qu
aAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tX
b3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CiAKIGNsYXNzIEJhc2ljQmxvY2s7CiAKLXR5cGVkZWYgR3JhcGhOb2RlV29y
a2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2s+PiBCbG9ja1dvcmtsaXN0Owor
dHlwZWRlZiBHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9j
ayo+PiBCbG9ja1dvcmtsaXN0OwogCiAvLyBXaGVuIHlvdSBzYXkgQmxvY2tXaXRoPGludD4geW91
IHNob3VsZCByZWFkIGl0IGFzICJibG9jayB3aXRoIGFuIGludCIuCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB1c2luZyBCbG9ja1dpdGggPSBHcmFwaE5vZGVXaXRoPEJhc2ljQmxvY2sqLCBUPjsKQEAg
LTQ0LDEzICs0NCwxMyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBCbG9ja1dpdGggPSBH
CiAvLyBwZXJtaXRzIGZvcmNpYmx5IGVucXVldWVpbmcgdGhpbmdzIGV2ZW4gaWYgdGhlIGJsb2Nr
IGhhcyBhbHJlYWR5IGJlZW4gc2Vlbi4gSXQncyB1c2VmdWwgZm9yCiAvLyB0aGluZ3MgbGlrZSBi
dWlsZGluZyBhIHNwYW5uaW5nIHRyZWUsIGluIHdoaWNoIGNhc2UgVCAodGhlIGF1eGlsaWFyeSBw
YXlsb2FkKSB3b3VsZCBiZSB0aGUKIC8vIHN1Y2Nlc3NvciBpbmRleC4KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3JrbGlzdCA9IEV4dGVuZGVkR3JhcGhOb2RlV29y
a2xpc3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0PEJhc2ljQmxvY2s+PjsKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3JrbGlzdCA9IEV4dGVuZGVkR3JhcGhOb2Rl
V29ya2xpc3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0PEJhc2ljQmxvY2sqPj47CiAKIHR5cGVk
ZWYgR3JhcGhWaXNpdE9yZGVyIFZpc2l0T3JkZXI7CiAKIHR5cGVkZWYgR3JhcGhOb2RlV2l0aE9y
ZGVyPEJhc2ljQmxvY2sqPiBCbG9ja1dpdGhPcmRlcjsKIAotdHlwZWRlZiBQb3N0T3JkZXJHcmFw
aE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IFBvc3RPcmRl
ckJsb2NrV29ya2xpc3Q7Cit0eXBlZGVmIFBvc3RPcmRlckdyYXBoTm9kZVdvcmtsaXN0PEJhc2lj
QmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+IFBvc3RPcmRlckJsb2NrV29ya2xpc3Q7CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDRkcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDRkcu
aAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ0ZHLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzksOCArMzksOCBAQCBjbGFzcyBDRkcgewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIHR5cGVkZWYgQmFzaWNCbG9jayogTm9kZTsKLSAg
ICB0eXBlZGVmIEluZGV4U2V0PEJhc2ljQmxvY2s+IFNldDsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB1c2luZyBNYXAgPSBJbmRleE1hcDxCYXNpY0Jsb2NrLCBUPjsKKyAgICB0eXBlZGVmIElu
ZGV4U2V0PEJhc2ljQmxvY2sqPiBTZXQ7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcg
TWFwID0gSW5kZXhNYXA8QmFzaWNCbG9jayosIFQ+OwogICAgIHR5cGVkZWYgVmVjdG9yPEJhc2lj
QmxvY2sqLCA0PiBMaXN0OwogCiAgICAgQ0ZHKFByb2NlZHVyZSYgcHJvYykKQEAgLTUxLDcgKzUx
LDcgQEAgcHVibGljOgogICAgIE5vZGUgcm9vdCgpIHsgcmV0dXJuIG1fcHJvY1swXTsgfQogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBNYXA8VD4gbmV3TWFwKCkgeyByZXR1cm4gSW5k
ZXhNYXA8SlNDOjpCMzo6QmFzaWNCbG9jaywgVD4obV9wcm9jLnNpemUoKSk7IH0KKyAgICBNYXA8
VD4gbmV3TWFwKCkgeyByZXR1cm4gSW5kZXhNYXA8SlNDOjpCMzo6QmFzaWNCbG9jayosIFQ+KG1f
cHJvYy5zaXplKCkpOyB9CiAKICAgICBTdWNjZXNzb3JDb2xsZWN0aW9uPEJhc2ljQmxvY2ssIEJh
c2ljQmxvY2s6OlN1Y2Nlc3Nvckxpc3Q+IHN1Y2Nlc3NvcnMoTm9kZSBub2RlKSB7IHJldHVybiBu
b2RlLT5zdWNjZXNzb3JCbG9ja3MoKTsgfQogICAgIEJhc2ljQmxvY2s6OlByZWRlY2Vzc29yTGlz
dCYgcHJlZGVjZXNzb3JzKE5vZGUgbm9kZSkgeyByZXR1cm4gbm9kZS0+cHJlZGVjZXNzb3JzKCk7
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCShyZXZpc2lvbiAyMTQ0Mjcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uaAkod29ya2luZyBjb3B5KQpA
QCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShCM19KSVQpCiAKICNpbmNsdWRlICJKU0V4cG9y
dE1hY3Jvcy5oIgorI2luY2x1ZGUgIk9wdGlvbnMuaCIKICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CkBAIC0xNzAsNiArMTcxLDEzIEBA
IHN0YXRpYyBJbnRUeXBlIHJvdGF0ZUxlZnQoSW50VHlwZSB2YWx1ZSwKICAgICByZXR1cm4gKHVW
YWx1ZSA8PCBzaGlmdCkgfCAodVZhbHVlID4+ICgoYml0cyAtIHNoaWZ0KSAmIG1hc2spKTsKIH0K
IAoraW5saW5lIHVuc2lnbmVkIGRlZmF1bHRPcHRMZXZlbCgpCit7CisgICAgLy8gVGhpcyBzaG91
bGQgYWxtb3N0IGFsd2F5cyByZXR1cm4gMiwgYnV0IHdlIGFsbG93IHRoaXMgZGVmYXVsdCB0byBi
ZSBsb3dlcmVkIGZvciB0ZXN0aW5nLiBTb21lCisgICAgLy8gY29tcG9uZW50cyB3aWxsIGRlbGli
ZXJhdGVseSBzZXQgdGhlIG9wdExldmVsLgorICAgIHJldHVybiBPcHRpb25zOjpkZWZhdWx0QjNP
cHRMZXZlbCgpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKIAogI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsZS5oCShyZXZp
c2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShCM19KSVQpCiAKKyNp
bmNsdWRlICJCM0NvbW1vbi5oIgogI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKIAogbmFtZXNw
YWNlIEpTQyB7CkBAIC00NSw3ICs0Niw3IEBAIGNsYXNzIFByb2NlZHVyZTsKIC8vIFRoZW4geW91
IGtlZXAgdGhlIENvbXBpbGF0aW9uIG9iamVjdCBhbGl2ZSBmb3IgYXMgbG9uZyBhcyB5b3Ugd2Fu
dCB0byBiZSBhYmxlIHRvIHJ1biB0aGUgY29kZS4KIC8vIElmIHRoaXMgQVBJIGZlZWxzIHRvbyBo
aWdoLWxldmVsLCB5b3UgY2FuIHVzZSBCMzo6Z2VuZXJhdGUoKSBkaXJlY3RseS4KIAotSlNfRVhQ
T1JUX1BSSVZBVEUgQ29tcGlsYXRpb24gY29tcGlsZShWTSYsIFByb2NlZHVyZSYsIHVuc2lnbmVk
IG9wdExldmVsID0gMSk7CitKU19FWFBPUlRfUFJJVkFURSBDb21waWxhdGlvbiBjb21waWxlKFZN
JiwgUHJvY2VkdXJlJiwgdW5zaWduZWQgb3B0TGV2ZWwgPSBkZWZhdWx0T3B0TGV2ZWwoKSk7CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNEdXBsaWNhdGVUYWlscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzRHVwbGljYXRlVGFpbHMuY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNEdXBsaWNhdGVUYWlscy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY4LDcgKzY4LDcgQEAgcHVibGljOgogCiAgICAgICAgIG1fcHJvYy5yZXNldFZhbHVlT3duZXJz
KCk7CiAKLSAgICAgICAgSW5kZXhTZXQ8QmFzaWNCbG9jaz4gY2FuZGlkYXRlczsKKyAgICAgICAg
SW5kZXhTZXQ8QmFzaWNCbG9jayo+IGNhbmRpZGF0ZXM7CiAKICAgICAgICAgZm9yIChCYXNpY0Js
b2NrKiBibG9jayA6IG1fcHJvYykgewogICAgICAgICAgICAgaWYgKGJsb2NrLT5zaXplKCkgPiBt
X21heFNpemUpCkBAIC04Miw3ICs4Miw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogCiAgICAgICAg
IC8vIENvbGxlY3QgdGhlIHNldCBvZiB2YWx1ZXMgdGhhdCBtdXN0IGJlIGRlLVNTQSdkLgotICAg
ICAgICBJbmRleFNldDxWYWx1ZT4gdmFsdWVzVG9EZW1vdGU7CisgICAgICAgIEluZGV4U2V0PFZh
bHVlKj4gdmFsdWVzVG9EZW1vdGU7CiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBt
X3Byb2MpIHsKICAgICAgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogKmJsb2NrKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSA9PSBQaGkgJiYgY2FuZGlkYXRlcy5jb250
YWlucyhibG9jaykpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVD
b21tb25TdWJleHByZXNzaW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuY3BwCShyZXZpc2lvbiAyMTQ0
MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVDb21tb25TdWJleHBy
ZXNzaW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4Miw3ICs2ODIsNyBAQCBwcml2YXRlOgog
ICAgIERvbWluYXRvcnMmIG1fZG9taW5hdG9yczsKICAgICBQdXJlQ1NFIG1fcHVyZUNTRTsKICAg
ICAKLSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBJbXB1cmVCbG9ja0RhdGE+IG1faW1wdXJlQmxv
Y2tEYXRhOworICAgIEluZGV4TWFwPEJhc2ljQmxvY2sqLCBJbXB1cmVCbG9ja0RhdGE+IG1faW1w
dXJlQmxvY2tEYXRhOwogCiAgICAgSW1wdXJlQmxvY2tEYXRhIG1fZGF0YTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRml4U1NBLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNGaXhTU0EuY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGaXhTU0EuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3
ICs0OSw3IEBAIG5hbWVzcGFjZSB7CiBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIH0gLy8g
YW5vbnltb3VzIG5hbWVzcGFjZQogCi12b2lkIGRlbW90ZVZhbHVlcyhQcm9jZWR1cmUmIHByb2Ms
IGNvbnN0IEluZGV4U2V0PFZhbHVlPiYgdmFsdWVzKQordm9pZCBkZW1vdGVWYWx1ZXMoUHJvY2Vk
dXJlJiBwcm9jLCBjb25zdCBJbmRleFNldDxWYWx1ZSo+JiB2YWx1ZXMpCiB7CiAgICAgSGFzaE1h
cDxWYWx1ZSosIFZhcmlhYmxlKj4gbWFwOwogICAgIEhhc2hNYXA8VmFsdWUqLCBWYXJpYWJsZSo+
IHBoaU1hcDsKQEAgLTEyMSw3ICsxMjEsNyBAQCBib29sIGZpeFNTQShQcm9jZWR1cmUmIHByb2Mp
CiAgICAgLy8gSnVzdCBmb3Igc2FuaXR5LCByZW1vdmUgYW55IHVudXNlZCB2YXJpYWJsZXMgZmly
c3QuIEl0J3MgdW5saWtlbHkgdGhhdCB0aGlzIGNvZGUgaGFzIGFueQogICAgIC8vIGJ1Z3MgaGF2
aW5nIHRvIGRvIHdpdGggZGVhZCB2YXJpYWJsZXMsIGJ1dCBpdCB3b3VsZCBiZSBzaWxseSB0byBo
YXZlIHRvIGZpeCBzdWNoIGEgYnVnIGlmCiAgICAgLy8gaXQgZGlkIGFyaXNlLgotICAgIEluZGV4
U2V0PFZhcmlhYmxlPiBsaXZlVmFyaWFibGVzOworICAgIEluZGV4U2V0PFZhcmlhYmxlKj4gbGl2
ZVZhcmlhYmxlczsKICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IHByb2MudmFsdWVzKCkpIHsKICAg
ICAgICAgaWYgKFZhcmlhYmxlVmFsdWUqIHZhcmlhYmxlVmFsdWUgPSB2YWx1ZS0+YXM8VmFyaWFi
bGVWYWx1ZT4oKSkKICAgICAgICAgICAgIGxpdmVWYXJpYWJsZXMuYWRkKHZhcmlhYmxlVmFsdWUt
PnZhcmlhYmxlKCkpOwpAQCAtMTQ1LDcgKzE0NSw3IEBAIGJvb2wgZml4U1NBKFByb2NlZHVyZSYg
cHJvYykKIAogICAgIC8vIENyZWF0ZSBhIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlICgiY2FsY1Zh
ciIpIGZvciBldmVyeSB2YXJpYWJsZS4KICAgICBWZWN0b3I8VmFyaWFibGUqPiBjYWxjVmFyVG9W
YXJpYWJsZTsKLSAgICBJbmRleE1hcDxWYXJpYWJsZSwgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUq
PiB2YXJpYWJsZVRvQ2FsY1Zhcihwcm9jLnZhcmlhYmxlcygpLnNpemUoKSk7CisgICAgSW5kZXhN
YXA8VmFyaWFibGUqLCBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSo+IHZhcmlhYmxlVG9DYWxjVmFy
KHByb2MudmFyaWFibGVzKCkuc2l6ZSgpKTsKIAogICAgIGZvciAoVmFyaWFibGUqIHZhcmlhYmxl
IDogcHJvYy52YXJpYWJsZXMoKSkgewogICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSog
Y2FsY1ZhciA9IHNzYS5uZXdWYXJpYWJsZSgpOwpAQCAtMTg1LDcgKzE4NSw3IEBAIGJvb2wgZml4
U1NBKFByb2NlZHVyZSYgcHJvYykKIAogICAgIC8vIE5vdyBwZXJmb3JtIHRoZSBjb252ZXJzaW9u
LgogICAgIEluc2VydGlvblNldCBpbnNlcnRpb25TZXQocHJvYyk7Ci0gICAgSW5kZXhNYXA8VmFy
aWFibGUsIFZhbHVlKj4gbWFwcGluZyhwcm9jLnZhcmlhYmxlcygpLnNpemUoKSk7CisgICAgSW5k
ZXhNYXA8VmFyaWFibGUqLCBWYWx1ZSo+IG1hcHBpbmcocHJvYy52YXJpYWJsZXMoKS5zaXplKCkp
OwogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBwcm9jLmJsb2Nrc0luUHJlT3JkZXIoKSkg
ewogICAgICAgICBtYXBwaW5nLmNsZWFyKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0ZpeFNTQS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0ZpeFNTQS5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNGaXhTU0EuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNyw3ICszNyw3IEBAIGNsYXNzIFByb2NlZHVyZTsK
IAogLy8gVHVybnMgYWxsIG1lbnRpb25zIG9mIHRoZSBnaXZlbiB2YWx1ZXMgaW50byBhY2Nlc3Nl
cyB0byB2YXJpYWJsZXMuIFRoaXMgaXMgbWVhbnQgdG8gYmUgdXNlZAogLy8gZnJvbSBwaGFzZXMg
dGhhdCBkb24ndCBsaWtlIFNTQSBmb3Igd2hhdGV2ZXIgcmVhc29uLgotdm9pZCBkZW1vdGVWYWx1
ZXMoUHJvY2VkdXJlJiwgY29uc3QgSW5kZXhTZXQ8VmFsdWU+Jik7Cit2b2lkIGRlbW90ZVZhbHVl
cyhQcm9jZWR1cmUmLCBjb25zdCBJbmRleFNldDxWYWx1ZSo+Jik7CiAKIC8vIFRoaXMgZml4ZXMg
U1NBIGZvciB5b3UuIFVzZSB0aGlzIGFmdGVyIHlvdSBoYXZlIGRvbmUgZGVtb3RlVmFsdWVzKCkg
YW5kIHlvdSBoYXZlIHBlcmZvcm1lZAogLy8gd2hhdGV2ZXIgZXZpbCB0cmFuc2Zvcm1hdGlvbiB5
b3UgbmVlZGVkLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAko
cmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQgcHJlcGFyZUZvckdlbmVy
YXRpb24oUHJvY2VkdXJlJiBwcm8KICAgICBUaW1pbmdTY29wZSB0aW1pbmdTY29wZSgicHJlcGFy
ZUZvckdlbmVyYXRpb24iKTsKIAogICAgIGdlbmVyYXRlVG9BaXIocHJvY2VkdXJlLCBvcHRMZXZl
bCk7Ci0gICAgQWlyOjpwcmVwYXJlRm9yR2VuZXJhdGlvbihwcm9jZWR1cmUuY29kZSgpKTsKKyAg
ICBBaXI6OnByZXBhcmVGb3JHZW5lcmF0aW9uKHByb2NlZHVyZS5jb2RlKCksIG9wdExldmVsKTsK
IH0KIAogdm9pZCBnZW5lcmF0ZShQcm9jZWR1cmUmIHByb2NlZHVyZSwgQ0NhbGxIZWxwZXJzJiBq
aXQpCkBAIC04MCw3ICs4MCw3IEBAIHZvaWQgZ2VuZXJhdGVUb0FpcihQcm9jZWR1cmUmIHByb2Nl
ZHVyZSwKICAgICBpZiAoc2hvdWxkVmFsaWRhdGVJUigpKQogICAgICAgICB2YWxpZGF0ZShwcm9j
ZWR1cmUpOwogCi0gICAgaWYgKG9wdExldmVsID49IDEpIHsKKyAgICBpZiAob3B0TGV2ZWwgPj0g
MikgewogICAgICAgICByZWR1Y2VEb3VibGVUb0Zsb2F0KHByb2NlZHVyZSk7CiAgICAgICAgIHJl
ZHVjZVN0cmVuZ3RoKHByb2NlZHVyZSk7CiAgICAgICAgIGVsaW1pbmF0ZUNvbW1vblN1YmV4cHJl
c3Npb25zKHByb2NlZHVyZSk7CkBAIC05MSwxMiArOTEsMTUgQEAgdm9pZCBnZW5lcmF0ZVRvQWly
KFByb2NlZHVyZSYgcHJvY2VkdXJlLAogICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IEFkZCBt
b3JlIG9wdGltaXphdGlvbnMgaGVyZS4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1MDUwNworICAgIH0gZWxzZSBpZiAob3B0TGV2ZWwgPj0gMSkg
eworICAgICAgICAvLyBGSVhNRTogRXhwbG9yZSBiZXR0ZXIgInF1aWNrIG1vZGUiIG9wdGltaXph
dGlvbnMuCisgICAgICAgIHJlZHVjZVN0cmVuZ3RoKHByb2NlZHVyZSk7CiAgICAgfQogCiAgICAg
Ly8gVGhpcyBwdXRzIHRoZSBJUiBpbiBxdWlya3MgbW9kZS4KICAgICBsb3dlck1hY3Jvcyhwcm9j
ZWR1cmUpOwogCi0gICAgaWYgKG9wdExldmVsID49IDEpIHsKKyAgICBpZiAob3B0TGV2ZWwgPj0g
MikgewogICAgICAgICByZWR1Y2VTdHJlbmd0aChwcm9jZWR1cmUpOwogCiAgICAgICAgIC8vIEZJ
WE1FOiBBZGQgbW9yZSBvcHRpbWl6YXRpb25zIGhlcmUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNHZW5lcmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0dlbmVyYXRlLmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0dlbmVyYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDggQEAKIAog
I2lmIEVOQUJMRShCM19KSVQpCiAKKyNpbmNsdWRlICJCM0NvbW1vbi5oIgorCiBuYW1lc3BhY2Ug
SlNDIHsKIAogY2xhc3MgQ0NhbGxIZWxwZXJzOwpAQCAtMzgsNyArNDAsNyBAQCBuYW1lc3BhY2Ug
QWlyIHsgY2xhc3MgQ29kZTsgfQogCiAvLyBUaGlzIHRha2VzIGEgQjM6OlByb2NlZHVyZSwgb3B0
aW1pemVzIGl0IGluLXBsYWNlLCBsb3dlcnMgaXQgdG8gQWlyLCBhbmQgcHJlcGFyZXMgdGhlIEFp
ciBmb3IKIC8vIGdlbmVyYXRpb24uCi1KU19FWFBPUlRfUFJJVkFURSB2b2lkIHByZXBhcmVGb3JH
ZW5lcmF0aW9uKFByb2NlZHVyZSYsIHVuc2lnbmVkIG9wdExldmVsID0gMSk7CitKU19FWFBPUlRf
UFJJVkFURSB2b2lkIHByZXBhcmVGb3JHZW5lcmF0aW9uKFByb2NlZHVyZSYsIHVuc2lnbmVkIG9w
dExldmVsID0gZGVmYXVsdE9wdExldmVsKCkpOwogCiAvLyBUaGlzIHRha2VzIGEgQjM6OlByb2Nl
ZHVyZSB0aGF0IGhhcyBiZWVuIHByZXBhcmVkIGZvciBnZW5lcmF0aW9uIChpLmUuIGl0IGhhcyBi
ZWVuIGxvd2VyZWQgdG8gQWlyIGFuZAogLy8gdGhlIEFpciBoYXMgYmVlbiBwcmVwYXJlZCBmb3Ig
Z2VuZXJhdGlvbikgYW5kIGdlbmVyYXRlcyBpdC4gVGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvZiBj
YWxsaW5nCkBAIC00OCw3ICs1MCw3IEBAIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZ2VuZXJhdGUo
UHJvY2VkdXIKIC8vIFRoaXMgdGFrZXMgYSBCMzo6UHJvY2VkdXJlLCBvcHRpbWl6ZXMgaXQgaW4t
cGxhY2UsIGFuZCBsb3dlcnMgaXQgdG8gQWlyLiBZb3UgY2FuIHRoZW4gZ2VuZXJhdGUKIC8vIHRo
ZSBBaXIgdG8gbWFjaGluZSBjb2RlIHVzaW5nIEFpcjo6cHJlcGFyZUZvckdlbmVyYXRpb24oKSBh
bmQgQWlyOjpnZW5lcmF0ZSgpIG9uIHRoZSBQcm9jZWR1cmUncwogLy8gY29kZSgpLgotdm9pZCBn
ZW5lcmF0ZVRvQWlyKFByb2NlZHVyZSYsIHVuc2lnbmVkIG9wdExldmVsID0gMSk7Cit2b2lkIGdl
bmVyYXRlVG9BaXIoUHJvY2VkdXJlJiwgdW5zaWduZWQgb3B0TGV2ZWwgPSBkZWZhdWx0T3B0TGV2
ZWwoKSk7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNIZWFwUmFuZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw0OSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJCM0hlYXBSYW5nZS5oIgotCi0jaWYgRU5BQkxF
KEIzX0pJVCkKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7Ci0KLXZvaWQgSGVhcFJh
bmdlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAgaWYgKCp0aGlzID09IEhl
YXBSYW5nZSgpKSB7Ci0gICAgICAgIG91dC5wcmludCgiQm90dG9tIik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgaWYgKCp0aGlzID09IHRvcCgpKSB7Ci0gICAgICAgIG91dC5wcmludCgi
VG9wIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgb3V0LnByaW50KG1fYmVnaW4sICIu
Li4iLCBtX2VuZCk7Ci19Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwotCi0jZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJh
bmdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJhbmdl
LmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBS
YW5nZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw5MCArMjcsMTUgQEAKIAogI2lmIEVOQUJMRShC
M19KSVQpCiAKLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgotI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorI2luY2x1ZGUgPHd0Zi9SYW5nZS5oPgog
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAogLy8gQWxpYXMgYW5hbHlzaXMgaW4g
QjMgaXMgZG9uZSBieSBjaGVja2luZyBpZiB0d28gaW50ZWdlciByYW5nZXMgb3ZlcmxhcC4gVGhp
cyBpcyBwb3dlcmZ1bCBlbm91Z2gKIC8vIHRvIGJlIHVzZWQgZm9yIFRCQUEtc3R5bGUgYWxpYXMg
YW5hbHlzaXMgdXNlZCBieSB0aGUgREZHLCBGVEwsIGFuZCBMTFZNOiB5b3UganVzdCB0dXJuIGVh
Y2ggbm9kZQogLy8gaW4gdGhlIHRyZWUgb2YgYWJzdHJhY3QgaGVhcHMgaW50byBhIHByZS9wb3N0
IHJhbmdlLgotLy8KLS8vIE5vdGUgdGhhdCB0aGUgJ2JlZ2luJyBpcyBpbmNsdXNpdmUsIHdoaWxl
IHRoZSAnZW5kJyBpcyBleGNsdXNpdmUuIFRoZXNlIHR3byByYW5nZXMgYXJlIG5vbi0KLS8vIG92
ZXJsYXBwaW5nOgotLy8KLS8vICAgICByYW5nZUEgPSAwLi4uOAotLy8gICAgIHJhbmdlQiA9IDgu
Li4xNgotCi1jbGFzcyBIZWFwUmFuZ2UgewotcHVibGljOgotICAgIHR5cGVkZWYgdW5zaWduZWQg
VHlwZTsKLSAgICAKLSAgICBIZWFwUmFuZ2UoKQotICAgICAgICA6IG1fYmVnaW4oMCkKLSAgICAg
ICAgLCBtX2VuZCgwKQotICAgIHsKLSAgICB9Ci0KLSAgICBleHBsaWNpdCBIZWFwUmFuZ2UodW5z
aWduZWQgdmFsdWUpCi0gICAgICAgIDogbV9iZWdpbih2YWx1ZSkKLSAgICAgICAgLCBtX2VuZCh2
YWx1ZSArIDEpCi0gICAgewotICAgICAgICBBU1NFUlQobV9lbmQgPj0gbV9iZWdpbik7Ci0gICAg
fQotCi0gICAgSGVhcFJhbmdlKHVuc2lnbmVkIGJlZ2luLCB1bnNpZ25lZCBlbmQpCi0gICAgICAg
IDogbV9iZWdpbihiZWdpbikKLSAgICAgICAgLCBtX2VuZChlbmQpCi0gICAgewotICAgICAgICBB
U1NFUlQobV9lbmQgPj0gbV9iZWdpbik7Ci0gICAgICAgIGlmIChtX2JlZ2luID09IG1fZW5kKSB7
Ci0gICAgICAgICAgICAvLyBDYW5vbmljYWxpemUgZW1wdHkgcmFuZ2VzLgotICAgICAgICAgICAg
bV9iZWdpbiA9IDA7Ci0gICAgICAgICAgICBtX2VuZCA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBzdGF0aWMgSGVhcFJhbmdlIHRvcCgpCi0gICAgewotICAgICAgICByZXR1cm4gSGVhcFJh
bmdlKDAsIFVJTlRfTUFYKTsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSGVh
cFJhbmdlJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2JlZ2luID09IG90
aGVyLm1fYmVnaW4KLSAgICAgICAgICAgICYmIG1fZW5kID09IG90aGVyLm1fZW5kOwotICAgIH0K
LQotICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBIZWFwUmFuZ2UmIG90aGVyKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwotICAgIH0KLSAgICAKLSAgICBI
ZWFwUmFuZ2Ugb3BlcmF0b3J8KGNvbnN0IEhlYXBSYW5nZSYgb3RoZXIpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gSGVhcFJhbmdlKAotICAgICAgICAgICAgc3RkOjptaW4obV9iZWdpbiwg
b3RoZXIubV9iZWdpbiksCi0gICAgICAgICAgICBzdGQ6Om1heChtX2VuZCwgb3RoZXIubV9lbmQp
KTsKLSAgICB9Ci0gICAgCi0gICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0
dXJuIG1fYmVnaW4gIT0gbV9lbmQ7IH0KLQotICAgIHVuc2lnbmVkIGJlZ2luKCkgY29uc3QgeyBy
ZXR1cm4gbV9iZWdpbjsgfQotICAgIHVuc2lnbmVkIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5k
OyB9Ci0KLSAgICBib29sIG92ZXJsYXBzKGNvbnN0IEhlYXBSYW5nZSYgb3RoZXIpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gV1RGOjpyYW5nZXNPdmVybGFwKG1fYmVnaW4sIG1fZW5kLCBv
dGhlci5tX2JlZ2luLCBvdGhlci5tX2VuZCk7Ci0gICAgfQotCi0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIHVu
c2lnbmVkIG1fYmVnaW47Ci0gICAgdW5zaWduZWQgbV9lbmQ7Ci19OworCit0eXBlZGVmIFJhbmdl
PHVuc2lnbmVkPiBIZWFwUmFuZ2U7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2aXNpb24gMjE0
NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMzNzksMTAgKzMzNzksMTAgQEAgcHJpdmF0ZToKICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAgICAgCi0gICAgSW5kZXhTZXQ8VmFsdWU+
IG1fbG9ja2VkOyAvLyBUaGVzZSBhcmUgdmFsdWVzIHRoYXQgd2lsbCBoYXZlIG5vIFRtcCBpbiBB
aXIuCi0gICAgSW5kZXhNYXA8VmFsdWUsIFRtcD4gbV92YWx1ZVRvVG1wOyAvLyBUaGVzZSBhcmUg
dmFsdWVzIHRoYXQgbXVzdCBoYXZlIGEgVG1wIGluIEFpci4gV2Ugc2F5IHRoYXQgYSBWYWx1ZSog
d2l0aCBhIG5vbi1udWxsIFRtcCBpcyAicGlubmVkIi4KLSAgICBJbmRleE1hcDxWYWx1ZSwgVG1w
PiBtX3BoaVRvVG1wOyAvLyBFYWNoIFBoaSBnZXRzIGl0cyBvd24gVG1wLgotICAgIEluZGV4TWFw
PEIzOjpCYXNpY0Jsb2NrLCBBaXI6OkJhc2ljQmxvY2sqPiBtX2Jsb2NrVG9CbG9jazsKKyAgICBJ
bmRleFNldDxWYWx1ZSo+IG1fbG9ja2VkOyAvLyBUaGVzZSBhcmUgdmFsdWVzIHRoYXQgd2lsbCBo
YXZlIG5vIFRtcCBpbiBBaXIuCisgICAgSW5kZXhNYXA8VmFsdWUqLCBUbXA+IG1fdmFsdWVUb1Rt
cDsgLy8gVGhlc2UgYXJlIHZhbHVlcyB0aGF0IG11c3QgaGF2ZSBhIFRtcCBpbiBBaXIuIFdlIHNh
eSB0aGF0IGEgVmFsdWUqIHdpdGggYSBub24tbnVsbCBUbXAgaXMgInBpbm5lZCIuCisgICAgSW5k
ZXhNYXA8VmFsdWUqLCBUbXA+IG1fcGhpVG9UbXA7IC8vIEVhY2ggUGhpIGdldHMgaXRzIG93biBU
bXAuCisgICAgSW5kZXhNYXA8QjM6OkJhc2ljQmxvY2sqLCBBaXI6OkJhc2ljQmxvY2sqPiBtX2Js
b2NrVG9CbG9jazsKICAgICBIYXNoTWFwPEIzOjpTdGFja1Nsb3QqLCBBaXI6OlN0YWNrU2xvdCo+
IG1fc3RhY2tUb1N0YWNrOwogICAgIEhhc2hNYXA8VmFyaWFibGUqLCBUbXA+IG1fdmFyaWFibGVU
b1RtcDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTW92ZUNvbnN0YW50cy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTW92ZUNvbnN0YW50
cy5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01v
dmVDb25zdGFudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHByaXZhdGU6
CiAgICAgewogICAgICAgICBEb21pbmF0b3JzJiBkb21pbmF0b3JzID0gbV9wcm9jLmRvbWluYXRv
cnMoKTsKICAgICAgICAgSGFzaE1hcDxWYWx1ZUtleSwgVmFsdWUqPiB2YWx1ZUZvckNvbnN0YW50
OwotICAgICAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBWZWN0b3I8VmFsdWUqPj4gbWF0ZXJpYWxp
emF0aW9ucyhtX3Byb2Muc2l6ZSgpKTsKKyAgICAgICAgSW5kZXhNYXA8QmFzaWNCbG9jayosIFZl
Y3RvcjxWYWx1ZSo+PiBtYXRlcmlhbGl6YXRpb25zKG1fcHJvYy5zaXplKCkpOwogCiAgICAgICAg
IC8vIFdlIGRldGVybWluZSB3aGVyZSB0aGluZ3MgZ2V0IG1hdGVyaWFsaXplZCBiYXNlZCBvbiB3
aGVyZSB0aGV5IGFyZSB1c2VkLgogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9w
cm9jKSB7CkBAIC0yNzQsNyArMjc0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgZm9yIChhdXRvJiBl
bnRyeSA6IG1fY29uc3RUYWJsZSkKICAgICAgICAgICAgIG1fZGF0YVNlY3Rpb25bZW50cnkudmFs
dWVdID0gZW50cnkua2V5LnZhbHVlKCk7CiAKLSAgICAgICAgSW5kZXhTZXQ8VmFsdWU+IG9mZkxp
bWl0czsKKyAgICAgICAgSW5kZXhTZXQ8VmFsdWUqPiBvZmZMaW1pdHM7CiAgICAgICAgIGZvciAo
QmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2MpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
dmFsdWVJbmRleCA9IDA7IHZhbHVlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK3ZhbHVlSW5kZXgp
IHsKICAgICAgICAgICAgICAgICBTdGFja21hcFZhbHVlKiB2YWx1ZSA9IGJsb2NrLT5hdCh2YWx1
ZUluZGV4KS0+YXM8U3RhY2ttYXBWYWx1ZT4oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1BoaUNoaWxkcmVuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzUGhpQ2hpbGRyZW4uaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzUGhpQ2hpbGRyZW4uaAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDcgKzE2OCw3
IEBAIHB1YmxpYzoKICAgICBjb25zdCBWZWN0b3I8VmFsdWUqLCA4PiYgcGhpcygpIGNvbnN0IHsg
cmV0dXJuIG1fcGhpczsgfQogCiBwcml2YXRlOgotICAgIEluZGV4TWFwPFZhbHVlLCBWZWN0b3I8
VXBzaWxvblZhbHVlKj4+IG1fdXBzaWxvbnM7CisgICAgSW5kZXhNYXA8VmFsdWUqLCBWZWN0b3I8
VXBzaWxvblZhbHVlKj4+IG1fdXBzaWxvbnM7CiAgICAgVmVjdG9yPFZhbHVlKiwgOD4gbV9waGlz
OwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCShy
ZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBQcm9jZWR1cmU6Omlu
dmFsaWRhdGVDRkcoKQogCiB2b2lkIFByb2NlZHVyZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAogewotICAgIEluZGV4U2V0PFZhbHVlPiB2YWx1ZXNJbkJsb2NrczsKKyAgICBJbmRleFNl
dDxWYWx1ZSo+IHZhbHVlc0luQmxvY2tzOwogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiAq
dGhpcykgewogICAgICAgICBvdXQucHJpbnQoZGVlcER1bXAoKnRoaXMsIGJsb2NrKSk7CiAgICAg
ICAgIHZhbHVlc0luQmxvY2tzLmFkZEFsbCgqYmxvY2spOwpAQCAtMjQ1LDcgKzI0NSw3IEBAIHZv
aWQgUHJvY2VkdXJlOjpkZWxldGVWYWx1ZShWYWx1ZSogdmFsdWUKIAogdm9pZCBQcm9jZWR1cmU6
OmRlbGV0ZU9ycGhhbnMoKQogewotICAgIEluZGV4U2V0PFZhbHVlPiB2YWx1ZXNJbkJsb2NrczsK
KyAgICBJbmRleFNldDxWYWx1ZSo+IHZhbHVlc0luQmxvY2tzOwogICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiAqdGhpcykKICAgICAgICAgdmFsdWVzSW5CbG9ja3MuYWRkQWxsKCpibG9jayk7
CiAKQEAgLTMzMyw3ICszMzMsNyBAQCBWYWx1ZSogUHJvY2VkdXJlOjphZGRWYWx1ZUltcGwoVmFs
dWUqIHZhCiAKIHZvaWQgUHJvY2VkdXJlOjpzZXRCbG9ja09yZGVySW1wbChWZWN0b3I8QmFzaWNC
bG9jayo+JiBibG9ja3MpCiB7Ci0gICAgSW5kZXhTZXQ8QmFzaWNCbG9jaz4gYmxvY2tzU2V0Owor
ICAgIEluZGV4U2V0PEJhc2ljQmxvY2sqPiBibG9ja3NTZXQ7CiAgICAgYmxvY2tzU2V0LmFkZEFs
bChibG9ja3MpOwogCiAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6ICp0aGlzKSB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VEb3VibGVUb0Zsb2F0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VEb3VibGVUb0Zsb2F0
LmNwcAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVk
dWNlRG91YmxlVG9GbG9hdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyNCwxOCArNDI0LDE4IEBA
IHByaXZhdGU6CiAKICAgICAvLyBTZXQgb2YgYWxsIHRoZSBEb3VibGUgdmFsdWVzIHRoYXQgYXJl
IGFjdHVhbGx5IHVzZWQgYXMgRG91YmxlLgogICAgIC8vIENvbnZlcnRpbmcgYW55IG9mIHRoZW0g
dG8gRmxvYXQgd291bGQgbG9zZSBwcmVjaXNpb24uCi0gICAgSW5kZXhTZXQ8VmFsdWU+IG1fdmFs
dWVzVXNlZEFzRG91YmxlOworICAgIEluZGV4U2V0PFZhbHVlKj4gbV92YWx1ZXNVc2VkQXNEb3Vi
bGU7CiAKICAgICAvLyBTZXQgb2YgYWxsIHRoZSBQaGkgb2YgdHlwZSBEb3VibGUgdGhhdCByZWFs
bHkgY29udGFpbnMgYSBEb3VibGUuCiAgICAgLy8gQW55IERvdWJsZSBQaGkgbm90IGluIHRoZSBz
ZXQgY2FuIGJlIGNvbnZlcnRlZCB0byBGbG9hdCB3aXRob3V0IGxvc2luZyBwcmVjaXNpb24uCi0g
ICAgSW5kZXhTZXQ8VmFsdWU+IG1fcGhpc0NvbnRhaW5pbmdEb3VibGU7CisgICAgSW5kZXhTZXQ8
VmFsdWUqPiBtX3BoaXNDb250YWluaW5nRG91YmxlOwogCiAgICAgLy8gQW55IHZhbHVlIHRoYXQg
d2FzIGNvbnZlcnRlZCBmcm9tIHByb2R1Y2luZyBhIERvdWJsZSB0byBwcm9kdWNpbmcgYSBGbG9h
dC4KICAgICAvLyBUaGlzIHNldCBkb2VzIG5vdCBpbmNsdWRlIFBoaS1VcHNpbG9ucy4KLSAgICBJ
bmRleFNldDxWYWx1ZT4gbV9jb252ZXJ0ZWRWYWx1ZTsKKyAgICBJbmRleFNldDxWYWx1ZSo+IG1f
Y29udmVydGVkVmFsdWU7CiAKICAgICAvLyBBbnkgdmFsdWUgdGhhdCBwcmV2aW91c2x5IHByb2R1
Y2VkIERvdWJsZSBhbmQgbm93IHByb2R1Y2UgRmxvYXQuCi0gICAgSW5kZXhTZXQ8VmFsdWU+IG1f
Y29udmVydGVkUGhpczsKKyAgICBJbmRleFNldDxWYWx1ZSo+IG1fY29udmVydGVkUGhpczsKIH07
CiAKIHZvaWQgcHJpbnRHcmFwaElmQ29udmVydGluZyhQcm9jZWR1cmUmIHByb2NlZHVyZSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHJl
dmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVu
Z3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM5Miw3ICsyMzkyLDcgQEAgcHJpdmF0ZToKIAog
ICAgIHZvaWQga2lsbERlYWRDb2RlKCkKICAgICB7Ci0gICAgICAgIEdyYXBoTm9kZVdvcmtsaXN0
PFZhbHVlKiwgSW5kZXhTZXQ8VmFsdWU+PiB3b3JrbGlzdDsKKyAgICAgICAgR3JhcGhOb2RlV29y
a2xpc3Q8VmFsdWUqLCBJbmRleFNldDxWYWx1ZSo+PiB3b3JrbGlzdDsKICAgICAgICAgVmVjdG9y
PFVwc2lsb25WYWx1ZSosIDY0PiB1cHNpbG9uczsKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBi
bG9jayA6IG1fcHJvYykgewogICAgICAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiAqYmxvY2sp
IHsKQEAgLTI0MjksNyArMjQyOSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KIAotICAgICAgICBJbmRleFNldDxWYXJpYWJsZT4gbGl2ZVZhcmlhYmxlczsK
KyAgICAgICAgSW5kZXhTZXQ8VmFyaWFibGUqPiBsaXZlVmFyaWFibGVzOwogICAgICAgICAKICAg
ICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvYykgewogICAgICAgICAgICAgc2l6
ZV90IHNvdXJjZUluZGV4ID0gMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1NT
QUNhbGN1bGF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
U0FDYWxjdWxhdG9yLmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1NTQUNhbGN1bGF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTYsNyArMTU2LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgVmVjdG9yPERlZio+IG1fcGhpczsKICAgICB9OwogICAgIAotICAgIElu
ZGV4TWFwPEJhc2ljQmxvY2ssIEJsb2NrRGF0YT4gbV9kYXRhOworICAgIEluZGV4TWFwPEJhc2lj
QmxvY2sqLCBCbG9ja0RhdGE+IG1fZGF0YTsKIAogICAgIERvbWluYXRvcnMqIG1fZG9taW5hdG9y
cyB7IG51bGxwdHIgfTsKICAgICBQcm9jZWR1cmUmIG1fcHJvYzsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1VzZUNvdW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1VzZUNvdW50cy5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNVc2VDb3VudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ4LDcgKzQ4
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgdW5zaWduZWQgbnVtVXNpbmdJbnN0cnVjdGlvbnMgeyAw
IH07CiAgICAgfTsKICAgICAKLSAgICBJbmRleE1hcDxWYWx1ZSwgQ291bnRzPiBtX2NvdW50czsK
KyAgICBJbmRleE1hcDxWYWx1ZSosIENvdW50cz4gbV9jb3VudHM7CiB9OwogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCShyZXZp
c2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTIwLDcgKzEyMCw3IEBAIFN0YXRpY0xvY2sgY3Jhc2hMb2NrOwogCiBW
TSogdm07CiAKLXN0ZDo6dW5pcXVlX3B0cjxDb21waWxhdGlvbj4gY29tcGlsZShQcm9jZWR1cmUm
IHByb2NlZHVyZSwgdW5zaWduZWQgb3B0TGV2ZWwgPSAxKQorc3RkOjp1bmlxdWVfcHRyPENvbXBp
bGF0aW9uPiBjb21waWxlKFByb2NlZHVyZSYgcHJvY2VkdXJlLCB1bnNpZ25lZCBvcHRMZXZlbCA9
IGRlZmF1bHRPcHRMZXZlbCgpKQogewogICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPENvbXBp
bGF0aW9uPihCMzo6Y29tcGlsZSgqdm0sIHByb2NlZHVyZSwgb3B0TGV2ZWwpKTsKIH0KQEAgLTk5
MCw2ICs5OTAsNyBAQCB2b2lkIHRlc3RNdWxMb2FkVHdpY2UoKQogCiAgICAgdGVzdCgwKTsKICAg
ICB0ZXN0KDEpOworICAgIHRlc3QoMik7CiB9CiAKIHZvaWQgdGVzdE11bEFkZEFyZ3NMZWZ0KCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNC
eUdyYXBoQ29sb3JpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuY3BwCShyZXZpc2lvbiAy
MTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0
ZXJzQnlHcmFwaENvbG9yaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAog
I2lmIEVOQUJMRShCM19KSVQpCiAKICNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWly
Rml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCIKICNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIK
ICNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgiCkBA
IC0xNTg1LDYgKzE1ODYsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIG1fY29hbGVzY2luZ0NhbmRp
ZGF0ZXMuY2xlYXIoKTsKICAgICAgICAgbV93b3JrbGlzdE1vdmVzLmNsZWFyKCk7CiAKKyAgICAg
ICAgLy8gRklYTUU6IEl0IHNlZW1zIGxpa2Ugd2UgZG9uJ3QgbmVlZCB0byByZWNvbXB1dGUgbGl2
ZW5lc3MuIFdlIGp1c3QgbmVlZCB0byB1cGRhdGUgaXRzIGRhdGEKKyAgICAgICAgLy8gc3RydWN0
dXJlcyBzbyB0aGF0IGl0IGtub3dzIHRoYXQgdGhlIG5ld2x5IGludHJvZHVjZWQgdGVtcG9yYXJp
ZXMgYXJlIG5vdCBsaXZlIGF0IGFueSBiYXNpYworICAgICAgICAvLyBibG9jayBib3VuZGFyeS4g
VGhpcyBzaG91bGQgdHJpdmlhbGx5IGJlIHRydWUgZm9yIG5vdy4KICAgICAgICAgVG1wTGl2ZW5l
c3M8YmFuaz4gbGl2ZW5lc3MobV9jb2RlKTsKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9j
ayA6IG1fY29kZSkgewogICAgICAgICAgICAgdHlwZW5hbWUgVG1wTGl2ZW5lc3M8YmFuaz46Okxv
Y2FsQ2FsYyBsb2NhbENhbGMobGl2ZW5lc3MsIGJsb2NrKTsKQEAgLTE3OTgsNyArMTgwMiw3IEBA
IHB1YmxpYzoKICAgICAgICAgbV9udW1JdGVyYXRpb25zID0gMDsKICAgICAgICAgYWxsb2NhdGVP
bkJhbms8RlA+KCk7CiAKLSAgICAgICAgZml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMoKTsKKyAgICAg
ICAgZml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMobV9jb2RlKTsKIAogICAgICAgICBpZiAocmVwb3J0
U3RhdHMpCiAgICAgICAgICAgICBkYXRhTG9nKCJOdW0gaXRlcmF0aW9ucyA9ICIsIG1fbnVtSXRl
cmF0aW9ucywgIlxuIik7CkBAIC0xOTU0LDcgKzE5NTgsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcEZhc3QoWyZdIChUbXAm
IHRtcCkgewotICAgICAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkgfHwgdG1wLmlzR1Ao
KSA9PSAoYmFuayAhPSBHUCkpCisgICAgICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSB8
fCB0bXAuYmFuaygpICE9IGJhbmspCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAK
ICAgICAgICAgICAgICAgICAgICAgVG1wIGFsaWFzVG1wID0gYWxsb2NhdG9yLmdldEFsaWFzKHRt
cCk7CkBAIC0yMTY5LDkgKzIxNzMsMTIgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAgICAg
ICB0bXAgPSBtX2NvZGUubmV3VG1wKGJhbmspOwogICAgICAgICAgICAgICAgICAgICB1bnNwaWxs
YWJsZVRtcHMuYWRkKEFic29sdXRlVG1wTWFwcGVyPGJhbms+OjphYnNvbHV0ZUluZGV4KHRtcCkp
OworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT0g
QXJnOjpTY3JhdGNoKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAg
ICAgICAgICAgICAgIEFyZyBhcmcgPSBBcmc6OnN0YWNrKHN0YWNrU2xvdEVudHJ5LT52YWx1ZSk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzQW55VXNlKHJvbGUpICYmIHJvbGUgIT0g
QXJnOjpTY3JhdGNoKQorICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0FueVVzZShyb2xl
KSkKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoaW5zdEluZGV4
LCBtb3ZlLCBpbnN0Lm9yaWdpbiwgYXJnLCB0bXApOwogICAgICAgICAgICAgICAgICAgICBpZiAo
QXJnOjppc0FueURlZihyb2xlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNl
dC5pbnNlcnQoaW5zdEluZGV4ICsgMSwgbW92ZSwgaW5zdC5vcmlnaW4sIHRtcCwgYXJnKTsKQEAg
LTIxODcsNjYgKzIxOTQsNiBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQogCi0gICAgdm9p
ZCBmaXhTcGlsbHNBZnRlclRlcm1pbmFscygpCi0gICAgewotICAgICAgICAvLyBCZWNhdXNlIHRo
ZXJlIG1heSBiZSB0ZXJtaW5hbHMgdGhhdCBwcm9kdWNlIHZhbHVlcywgSVJDIG1heQotICAgICAg
ICAvLyB3YW50IHRvIHNwaWxsIHRob3NlIHRlcm1pbmFscy4gSXQnbGwgaGFwcGVuIHRvIHNwaWxs
IGl0IGFmdGVyCi0gICAgICAgIC8vIHRoZSB0ZXJtaW5hbC4gSWYgd2UgbGVmdCB0aGUgZ3JhcGgg
aW4gdGhpcyBzdGF0ZSwgaXQnZCBiZSBpbnZhbGlkCi0gICAgICAgIC8vIGJlY2F1c2UgYSB0ZXJt
aW5hbCBtdXN0IGJlIHRoZSBsYXN0IGluc3RydWN0aW9uIGluIGEgYmxvY2suCi0gICAgICAgIC8v
IFdlIGZpeCB0aGF0IGhlcmUuCi0KLSAgICAgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldCht
X2NvZGUpOwotCi0gICAgICAgIGJvb2wgYWRkZWRCbG9ja3MgPSBmYWxzZTsKLQotICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCB0
ZXJtaW5hbEluZGV4ID0gYmxvY2stPnNpemUoKTsKLSAgICAgICAgICAgIGJvb2wgZm91bmRUZXJt
aW5hbCA9IGZhbHNlOwotICAgICAgICAgICAgd2hpbGUgKHRlcm1pbmFsSW5kZXgtLSkgewotICAg
ICAgICAgICAgICAgIGlmIChibG9jay0+YXQodGVybWluYWxJbmRleCkuaXNUZXJtaW5hbCgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGZvdW5kVGVybWluYWwgPSB0cnVlOwotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBBU1NFUlRfVU5VU0VEKGZvdW5kVGVybWluYWwsIGZvdW5kVGVybWluYWwpOwotCi0gICAg
ICAgICAgICBpZiAodGVybWluYWxJbmRleCA9PSBibG9jay0+c2l6ZSgpIC0gMSkKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgLy8gVGhlcmUgbXVzdCBiZSBpbnN0cnVj
dGlvbnMgYWZ0ZXIgdGhlIHRlcm1pbmFsIGJlY2F1c2UgaXQncyBub3QgdGhlIGxhc3QgaW5zdHJ1
Y3Rpb24uCi0gICAgICAgICAgICBBU1NFUlQodGVybWluYWxJbmRleCA8IGJsb2NrLT5zaXplKCkg
LSAxKTsKLSAgICAgICAgICAgIFZlY3RvcjxJbnN0LCAxPiBpbnN0c1RvTW92ZTsKLSAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IHRlcm1pbmFsSW5kZXggKyAxOyBpIDwgYmxvY2stPnNpemUo
KTsgaSsrKQotICAgICAgICAgICAgICAgIGluc3RzVG9Nb3ZlLmFwcGVuZChibG9jay0+YXQoaSkp
OwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5zdHNUb01vdmUuc2l6ZSgpKTsKLQotICAg
ICAgICAgICAgZm9yIChGcmVxdWVudGVkQmxvY2smIGZyZXF1ZW50ZWRTdWNjZXNzb3IgOiBibG9j
ay0+c3VjY2Vzc29ycygpKSB7Ci0gICAgICAgICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29y
ID0gZnJlcXVlbnRlZFN1Y2Nlc3Nvci5ibG9jaygpOwotICAgICAgICAgICAgICAgIC8vIElmIHN1
Y2Nlc3NvcidzIG9ubHkgcHJlZGVjZXNzb3IgaXMgYmxvY2ssIHdlIGNhbiBwbGFudCB0aGUgc3Bp
bGwgaW5zaWRlCi0gICAgICAgICAgICAgICAgLy8gdGhlIHN1Y2Nlc3Nvci4gT3RoZXJ3aXNlLCB3
ZSBtdXN0IHNwbGl0IHRoZSBjcml0aWNhbCBlZGdlIGFuZCBjcmVhdGUKLSAgICAgICAgICAgICAg
ICAvLyBhIG5ldyBibG9jayBmb3IgdGhlIHNwaWxsLgotICAgICAgICAgICAgICAgIGlmIChzdWNj
ZXNzb3ItPm51bVByZWRlY2Vzc29ycygpID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgaW5z
ZXJ0aW9uU2V0Lmluc2VydEluc3RzKDAsIGluc3RzVG9Nb3ZlKTsKLSAgICAgICAgICAgICAgICAg
ICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoc3VjY2Vzc29yKTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICBhZGRlZEJsb2NrcyA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBXZSBwcm9iYWJseSB3YW50IGJldHRlciBibG9jayBvcmRlcmlu
ZyBoZXJlLgotICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBuZXdCbG9jayA9IG1fY29k
ZS5hZGRCbG9jaygpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IEluc3QmIGluc3Qg
OiBpbnN0c1RvTW92ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ld0Jsb2NrLT5hcHBlbmRJ
bnN0KGluc3QpOwotICAgICAgICAgICAgICAgICAgICBuZXdCbG9jay0+YXBwZW5kSW5zdChJbnN0
KEp1bXAsIGluc3RzVG9Nb3ZlLmxhc3QoKS5vcmlnaW4pKTsKLSAgICAgICAgICAgICAgICAgICAg
bmV3QmxvY2stPnN1Y2Nlc3NvcnMoKS5hcHBlbmQoc3VjY2Vzc29yKTsKLSAgICAgICAgICAgICAg
ICAgICAgZnJlcXVlbnRlZFN1Y2Nlc3Nvci5ibG9jaygpID0gbmV3QmxvY2s7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBibG9jay0+cmVzaXplKHRlcm1p
bmFsSW5kZXggKyAxKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhZGRlZEJsb2NrcykKLSAg
ICAgICAgICAgIG1fY29kZS5yZXNldFJlYWNoYWJpbGl0eSgpOwotICAgIH0KLQogICAgIENvZGUm
IG1fY29kZTsKICAgICBUbXBXaWR0aCBtX3RtcFdpZHRoOwogICAgIFVzZUNvdW50czxUbXA+JiBt
X3VzZUNvdW50czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2Nh
dGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdp
c3RlcnNCeUxpbmVhclNjYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTY0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmgiCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQXJnSW5saW5lcy5oIgorI2luY2x1
ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5oIgor
I2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgi
CisjaW5jbHVkZSAiQWlyTGl2ZW5lc3MuaCIKKyNpbmNsdWRlICJBaXJQYWRJbnRlcmZlcmVuY2Uu
aCIKKyNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCisjaW5jbHVkZSAiQWlyUmVnTGl2ZW5lc3Mu
aCIKKyNpbmNsdWRlICJBaXJUbXBJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+
CisjaW5jbHVkZSA8d3RmL1JhbmdlLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eyBuYW1lc3BhY2UgQWlyIHsKKworbmFtZXNwYWNlIHsKKworTk9fUkVUVVJOX0RVRV9UT19DUkFT
SCBORVZFUl9JTkxJTkUgdm9pZCBjcmFzaCgpCit7CisgICAgQ1JBU0goKTsKK30KKworI3VuZGVm
IFJFTEVBU0VfQVNTRVJUCisjZGVmaW5lIFJFTEVBU0VfQVNTRVJUKGFzc2VydGlvbikgZG8geyBc
CisgICAgaWYgKCEoYXNzZXJ0aW9uKSkgeyBcCisgICAgICAgIFdURlJlcG9ydEFzc2VydGlvbkZh
aWx1cmUoX19GSUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAjYXNzZXJ0aW9u
KTsgXAorICAgICAgICBjcmFzaCgpOyBcCisgICAgfSBcCit9IHdoaWxlICgwKQorCitib29sIHZl
cmJvc2UoKSB7IHJldHVybiBPcHRpb25zOjphaXJMaW5lYXJTY2FuVmVyYm9zZSgpOyB9Citib29s
IHNob3VsZFNwaWxsRXZlcnl0aGluZygpIHsgcmV0dXJuIE9wdGlvbnM6OmFpckxpbmVhclNjYW5T
cGlsbHNFdmVyeXRoaW5nKCk7IH0KKwordHlwZWRlZiBSYW5nZTxzaXplX3Q+IEludGVydmFsOwor
CitzdHJ1Y3QgVG1wRGF0YSB7CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
CisgICAgeworICAgICAgICBvdXQucHJpbnQoIntpbnRlcnZhbCA9ICIsIGludGVydmFsLCAiLCBz
cGlsbGVkID0gIiwgcG9pbnRlckR1bXAoc3BpbGxlZCksICIsIGFzc2lnbmVkID0gIiwgYXNzaWdu
ZWQsICIsIGlzVW5zcGlsbGFibGUgPSAiLCBpc1Vuc3BpbGxhYmxlLCAiLCBwb3NzaWJsZVJlZ3Mg
PSAiLCBwb3NzaWJsZVJlZ3MsICIsIGRpZEJ1aWxkUG9zc2libGVSZWdzID0gIiwgZGlkQnVpbGRQ
b3NzaWJsZVJlZ3MsICJ9Iik7CisgICAgfQorICAgIAorICAgIHZvaWQgdmFsaWRhdGUoKQorICAg
IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIShzcGlsbGVkICYmIGFzc2lnbmVkKSk7CisgICAg
fQorICAgIAorICAgIEludGVydmFsIGludGVydmFsOworICAgIFN0YWNrU2xvdCogc3BpbGxlZCB7
IG51bGxwdHIgfTsKKyAgICBSZWdpc3RlclNldCBwb3NzaWJsZVJlZ3M7CisgICAgUmVnIGFzc2ln
bmVkOworICAgIGJvb2wgaXNVbnNwaWxsYWJsZSB7IGZhbHNlIH07CisgICAgYm9vbCBkaWRCdWls
ZFBvc3NpYmxlUmVncyB7IGZhbHNlIH07Cit9OworCitzdHJ1Y3QgQ2xvYmJlciB7CisgICAgQ2xv
YmJlcigpCisgICAgeworICAgIH0KKyAgICAKKyAgICBDbG9iYmVyKHNpemVfdCBpbmRleCwgUmVn
aXN0ZXJTZXQgcmVncykKKyAgICAgICAgOiBpbmRleChpbmRleCkKKyAgICAgICAgLCByZWdzKHJl
Z3MpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKKyAgICB7CisgICAgICAgIG91dC5wcmludChpbmRleCwgIjoiLCByZWdzKTsKKyAgICB9
CisgICAgCisgICAgc2l6ZV90IGluZGV4IHsgMCB9OworICAgIFJlZ2lzdGVyU2V0IHJlZ3M7Cit9
OworCit0ZW1wbGF0ZTxCYW5rIGJhbms+CitjbGFzcyBMaW5lYXJTY2FuIHsKK3B1YmxpYzoKKyAg
ICBMaW5lYXJTY2FuKENvZGUmIGNvZGUpCisgICAgICAgIDogbV9jb2RlKGNvZGUpCisgICAgICAg
ICwgbV9zdGFydEluZGV4KGNvZGUuc2l6ZSgpKQorICAgICAgICAsIG1fbWFwKGNvZGUubnVtVG1w
cyhiYW5rKSkKKyAgICAgICAgLCBtX2luc2VydGlvblNldHMoY29kZS5zaXplKCksIGNvZGUpCisg
ICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIHJ1bigpCisgICAgeworICAgICAgICBidWlsZFJl
Z2lzdGVyU2V0KCk7CisgICAgICAgIGJ1aWxkSW5kaWNlcygpOworICAgICAgICBidWlsZEludGVy
dmFscygpOworICAgICAgICBpZiAoc2hvdWxkU3BpbGxFdmVyeXRoaW5nKCkpIHsKKyAgICAgICAg
ICAgIHNwaWxsRXZlcnl0aGluZygpOworICAgICAgICAgICAgZW1pdFNwaWxsQ29kZSgpOworICAg
ICAgICB9CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIHByZXBhcmVJbnRlcnZhbHMo
KTsKKyAgICAgICAgICAgIGF0dGVtcHRTY2FuKCk7CisgICAgICAgICAgICBpZiAoIW1fZGlkU3Bp
bGwpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBlbWl0U3BpbGxDb2RlKCk7
CisgICAgICAgIH0KKyAgICAgICAgaW5zZXJ0U3BpbGxDb2RlKCk7CisgICAgICAgIGFzc2lnblJl
Z2lzdGVycygpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgdm9pZCBidWlsZFJlZ2lzdGVy
U2V0KCkKKyAgICB7CisgICAgICAgIG1fcmVnaXN0ZXJzID0gbV9jb2RlLnJlZ3NJblByaW9yaXR5
T3JkZXIoYmFuayk7CisgICAgICAgIG1fcmVnaXN0ZXJTZXQuc2V0QWxsKG1fcmVnaXN0ZXJzKTsK
KyAgICB9CisKKyAgICB2b2lkIGJ1aWxkSW5kaWNlcygpCisgICAgeworICAgICAgICBzaXplX3Qg
aW5kZXggPSAwOworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7Cisg
ICAgICAgICAgICBtX3N0YXJ0SW5kZXhbYmxvY2tdID0gaW5kZXg7CisgICAgICAgICAgICBpbmRl
eCArPSBibG9jay0+c2l6ZSgpICsgMTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBzaXpl
X3QgaW5kZXhPZkhlYWQoQmFzaWNCbG9jayogYmxvY2spCisgICAgeworICAgICAgICByZXR1cm4g
bV9zdGFydEluZGV4W2Jsb2NrXTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IGluZGV4T2ZUYWls
KEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGluZGV4T2ZIZWFkKGJs
b2NrKSArIGJsb2NrLT5zaXplKCk7CisgICAgfQorICAgIAorICAgIHNpemVfdCBpbmRleE9mKEJh
c2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25lZCBpbnN0SW5kZXgsIEFyZzo6UGhhc2UgcGhhc2UpCisg
ICAgeworICAgICAgICByZXR1cm4gaW5kZXhPZkhlYWQoYmxvY2spICsgaW5zdEluZGV4ICsgcGhh
c2U7CisgICAgfQorICAgIAorICAgIEludGVydmFsIGludGVydmFsKHNpemVfdCBpbmRleE9mRWFy
bHksIEFyZzo6VGltaW5nIHRpbWluZykKKyAgICB7CisgICAgICAgIHN3aXRjaCAodGltaW5nKSB7
CisgICAgICAgIGNhc2UgQXJnOjpPbmx5RWFybHk6CisgICAgICAgICAgICByZXR1cm4gSW50ZXJ2
YWwoaW5kZXhPZkVhcmx5KTsKKyAgICAgICAgY2FzZSBBcmc6Ok9ubHlMYXRlOgorICAgICAgICAg
ICAgcmV0dXJuIEludGVydmFsKGluZGV4T2ZFYXJseSArIDEpOworICAgICAgICBjYXNlIEFyZzo6
RWFybHlBbmRMYXRlOgorICAgICAgICAgICAgcmV0dXJuIEludGVydmFsKGluZGV4T2ZFYXJseSwg
aW5kZXhPZkVhcmx5ICsgMik7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybiBJbnRlcnZhbCgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGJ1
aWxkSW50ZXJ2YWxzKCkKKyAgICB7CisgICAgICAgIFRtcExpdmVuZXNzPGJhbms+IGxpdmVuZXNz
KG1fY29kZSk7CisgICAgICAgIAorICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9j
b2RlKSB7CisgICAgICAgICAgICBzaXplX3QgaW5kZXhPZkhlYWQgPSB0aGlzLT5pbmRleE9mSGVh
ZChibG9jayk7CisgICAgICAgICAgICBzaXplX3QgaW5kZXhPZlRhaWwgPSB0aGlzLT5pbmRleE9m
VGFpbChibG9jayk7CisgICAgICAgICAgICBmb3IgKFRtcCB0bXAgOiBsaXZlbmVzcy5saXZlQXRI
ZWFkKGJsb2NrKSkgeworICAgICAgICAgICAgICAgIGlmICghdG1wLmlzUmVnKCkpCisgICAgICAg
ICAgICAgICAgICAgIG1fbWFwW3RtcF0uaW50ZXJ2YWwgfD0gSW50ZXJ2YWwoaW5kZXhPZkhlYWQp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChUbXAgdG1wIDogbGl2ZW5lc3MubGl2
ZUF0VGFpbChibG9jaykpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXRtcC5pc1JlZygpKQorICAg
ICAgICAgICAgICAgICAgICBtX21hcFt0bXBdLmludGVydmFsIHw9IEludGVydmFsKGluZGV4T2ZU
YWlsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnN0SW5kZXggPSAwOyBpbnN0SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK2luc3RJbmRl
eCkgeworICAgICAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsK
KyAgICAgICAgICAgICAgICBzaXplX3QgaW5kZXhPZkVhcmx5ID0gaW5kZXhPZkhlYWQgKyBpbnN0
SW5kZXg7CisgICAgICAgICAgICAgICAgaW5zdC5mb3JFYWNoVG1wKAorICAgICAgICAgICAgICAg
ICAgICBbJl0gKFRtcCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwgQmFuayB0bXBCYW5rLCBXaWR0aCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcC5pc1JlZygpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXBC
YW5rICE9IGJhbmspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgICAgICAgICAgbV9tYXBbdG1wXS5pbnRlcnZhbCB8PSBpbnRlcnZhbChpbmRleE9m
RWFybHksIEFyZzo6dGltaW5nKHJvbGUpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIFJlZ0xpdmVuZXNzOjpMb2NhbENhbGMgbG9jYWxDYWxj
KGxpdmVuZXNzLCBibG9jayk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGF1dG8gcmVjb3Jk
ID0gWyZdICh1bnNpZ25lZCBpbnN0SW5kZXgpIHsKKyAgICAgICAgICAgICAgICBSZWdpc3RlclNl
dCByZWdzID0gbG9jYWxDYWxjLmxpdmUoKTsKKyAgICAgICAgICAgICAgICBpZiAoSW5zdCogcHJl
diA9IGJsb2NrLT5nZXQoaW5zdEluZGV4IC0gMSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJl
di0+Zm9yRWFjaDxSZWc+KAorICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChSZWcmIHJlZywg
QXJnOjpSb2xlIHJvbGUsIEJhbmssIFdpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKEFyZzo6aXNMYXRlRGVmKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZWdzLmFkZChyZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChwcmV2LT5raW5kLm9wY29kZSA9PSBQYXRjaCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJlZ3MubWVyZ2UocHJldi0+ZXh0cmFDbG9iYmVyZWRSZWdzKCkpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoSW5zdCogbmV4dCA9IGJsb2NrLT5n
ZXQoaW5zdEluZGV4KSkgeworICAgICAgICAgICAgICAgICAgICBuZXh0LT5mb3JFYWNoPFJlZz4o
CisgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKFJlZyYgcmVnLCBBcmc6OlJvbGUgcm9sZSwg
QmFuaywgV2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0Vh
cmx5RGVmKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdzLmFkZChy
ZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIGlm
IChuZXh0LT5raW5kLm9wY29kZSA9PSBQYXRjaCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
Z3MubWVyZ2UobmV4dC0+ZXh0cmFFYXJseUNsb2JiZXJlZFJlZ3MoKSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJlZ3MuZmlsdGVyKG1fcmVn
aXN0ZXJTZXQpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChyZWdzLmlz
RW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIG1fY2xvYmJlcnMuYXBwZW5kKENsb2JiZXIoaW5kZXhPZkhlYWQgKyBp
bnN0SW5kZXgsIHJlZ3MpKTsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIHJlY29yZChibG9jay0+c2l6ZSgpKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5z
dEluZGV4ID0gYmxvY2stPnNpemUoKTsgaW5zdEluZGV4LS07KSB7CisgICAgICAgICAgICAgICAg
bG9jYWxDYWxjLmV4ZWN1dGUoaW5zdEluZGV4KTsKKyAgICAgICAgICAgICAgICByZWNvcmQoaW5z
dEluZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3Rk
Ojpzb3J0KAorICAgICAgICAgICAgbV9jbG9iYmVycy5iZWdpbigpLCBtX2Nsb2JiZXJzLmVuZCgp
LAorICAgICAgICAgICAgW10gKENsb2JiZXImIGEsIENsb2JiZXImIGIpIC0+IGJvb2wgeworICAg
ICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IDwgYi5pbmRleDsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICAKKyAgICAgICAgaWYgKHZlcmJvc2UoKSkgeworICAgICAgICAgICAgZGF0YUxvZygi
SW50ZXJ2YWxzOlxuIik7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHRtcEluZGV4ID0gMDsg
dG1wSW5kZXggPCBtX2NvZGUubnVtVG1wcyhiYW5rKTsgKyt0bXBJbmRleCkgeworICAgICAgICAg
ICAgICAgIFRtcCB0bXAgPSBUbXA6OnRtcEZvckluZGV4KGJhbmssIHRtcEluZGV4KTsKKyAgICAg
ICAgICAgICAgICBkYXRhTG9nKCIgICAgIiwgdG1wLCAiOiAiLCBtX21hcFt0bXBdLCAiXG4iKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIHNwaWxsRXZl
cnl0aGluZygpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIHRtcEluZGV4ID0gMDsgdG1w
SW5kZXggPCBtX2NvZGUubnVtVG1wcyhiYW5rKTsgKyt0bXBJbmRleCkKKyAgICAgICAgICAgIHNw
aWxsKFRtcDo6dG1wRm9ySW5kZXgoYmFuaywgdG1wSW5kZXgpKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBwcmVwYXJlSW50ZXJ2YWxzKCkKKyAgICB7CisgICAgICAgIG1fdG1wcy5yZXNpemUoMCk7
CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIHRtcEluZGV4ID0gMDsgdG1wSW5kZXgg
PCBtX2NvZGUubnVtVG1wcyhiYW5rKTsgKyt0bXBJbmRleCkgeworICAgICAgICAgICAgVG1wIHRt
cCA9IFRtcDo6dG1wRm9ySW5kZXgoYmFuaywgdG1wSW5kZXgpOworICAgICAgICAgICAgVG1wRGF0
YSYgZGF0YSA9IG1fbWFwW3RtcF07CisgICAgICAgICAgICBpZiAoZGF0YS5zcGlsbGVkKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBkYXRhLmFz
c2lnbmVkID0gUmVnKCk7CisgICAgICAgICAgICBtX3RtcHMuYXBwZW5kKHRtcCk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIHN0ZDo6c29ydCgKKyAgICAgICAgICAgIG1fdG1wcy5iZWdp
bigpLCBtX3RtcHMuZW5kKCksCisgICAgICAgICAgICBbJl0gKFRtcCYgYSwgVG1wJiBiKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIG1fbWFwW2FdLmludGVydmFsLmJlZ2luKCkgPCBtX21hcFti
XS5pbnRlcnZhbC5iZWdpbigpOworICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICBp
ZiAodmVyYm9zZSgpKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJUbXBzOiAiLCBsaXN0RHVtcCht
X3RtcHMpLCAiXG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2coIkNsb2JiZXJzOiAiLCBsaXN0RHVt
cChtX2Nsb2JiZXJzKSwgIlxuIik7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgVG1wIGFk
ZFNwaWxsVG1wV2l0aEludGVydmFsKEludGVydmFsIGludGVydmFsKQorICAgIHsKKyAgICAgICAg
VG1wRGF0YSBkYXRhOworICAgICAgICBkYXRhLmludGVydmFsID0gaW50ZXJ2YWw7CisgICAgICAg
IGRhdGEuaXNVbnNwaWxsYWJsZSA9IHRydWU7CisgICAgICAgIAorICAgICAgICBUbXAgdG1wID0g
bV9jb2RlLm5ld1RtcChiYW5rKTsKKyAgICAgICAgbV9tYXAuYXBwZW5kKHRtcCwgZGF0YSk7Cisg
ICAgICAgIHJldHVybiB0bXA7CisgICAgfQorICAgIAorICAgIHZvaWQgYXR0ZW1wdFNjYW4oKQor
ICAgIHsKKyAgICAgICAgLy8gVGhpcyBpcyBtb2RlbGVkIGFmdGVyIExpbmVhclNjYW5SZWdpc3Rl
ckFsbG9jYXRpb24gaW4gRmlnLiAxIGluCisgICAgICAgIC8vIGh0dHA6Ly9kbC5hY20ub3JnL2Np
dGF0aW9uLmNmbT9pZD0zMzAyNTAuCisKKyAgICAgICAgbV9kaWRTcGlsbCA9IGZhbHNlOworICAg
ICAgICBtX2FjdGl2ZS5jbGVhcigpOworICAgICAgICBtX2FjdGl2ZVJlZ3MgPSBSZWdpc3RlclNl
dCgpOworICAgICAgICAKKyAgICAgICAgc2l6ZV90IGNsb2JiZXJJbmRleCA9IDA7CisgICAgICAg
IGZvciAoVG1wJiB0bXAgOiBtX3RtcHMpIHsKKyAgICAgICAgICAgIFRtcERhdGEmIGVudHJ5ID0g
bV9tYXBbdG1wXTsKKyAgICAgICAgICAgIHNpemVfdCBpbmRleCA9IGVudHJ5LmludGVydmFsLmJl
Z2luKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKCkpIHsKKyAgICAg
ICAgICAgICAgICBkYXRhTG9nKCJJbmRleCAjIiwgaW5kZXgsICI6ICIsIHRtcCwgIlxuIik7Cisg
ICAgICAgICAgICAgICAgZGF0YUxvZygiICAiLCB0bXAsICI6ICIsIGVudHJ5LCAiXG4iKTsKKyAg
ICAgICAgICAgICAgICBkYXRhTG9nKCIgIGNsb2JiZXJJbmRleCA9ICIsIGNsb2JiZXJJbmRleCwg
IlxuIik7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiICBBY3RpdmU6XG4iKTsKKyAgICAgICAg
ICAgICAgICBmb3IgKFRtcCB0bXAgOiBtX2FjdGl2ZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZygiICAgICIsIHRtcCwgIjogIiwgbV9tYXBbdG1wXSwgIlxuIik7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgRXhwaXJlT2xkSW50ZXJ2YWxz
IGluIEZpZy4gMS4KKyAgICAgICAgICAgIHdoaWxlICghbV9hY3RpdmUuaXNFbXB0eSgpKSB7Cisg
ICAgICAgICAgICAgICAgVG1wIHRtcCA9IG1fYWN0aXZlLmZpcnN0KCk7CisgICAgICAgICAgICAg
ICAgVG1wRGF0YSYgZW50cnkgPSBtX21hcFt0bXBdOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGJvb2wgZXhwaXJlZCA9IGVudHJ5LmludGVydmFsLmVuZCgpIDw9IGluZGV4Owor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICghZXhwaXJlZCkKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9h
Y3RpdmUucmVtb3ZlRmlyc3QoKTsKKyAgICAgICAgICAgICAgICBtX2FjdGl2ZVJlZ3MucmVtb3Zl
KGVudHJ5LmFzc2lnbmVkKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gSWYgbmVj
ZXNzYXJ5LCBjb21wdXRlIHRoZSBzZXQgb2YgcmVnaXN0ZXJzIHRoYXQgdGhpcyB0bXAgY291bGQg
ZXZlbiB1c2UuIFRoaXMgaXMgbm90CisgICAgICAgICAgICAvLyBwYXJ0IG9mIEZpZy4gMSwgYnV0
IGl0J3MgYSB0ZWNobmlxdWUgdGhhdCB0aGUgYXV0aG9ycyBjbGFpbSB0byBoYXZlIGltcGxlbWVu
dGVkIGluIG9uZSBvZgorICAgICAgICAgICAgLy8gdGhlaXIgdHdvIGltcGxlbWVudGF0aW9ucy4g
VGhlcmUgbWF5IGJlIG90aGVyIG1vcmUgZWZmaWNpZW50IHdheXMgdG8gZG8gdGhpcywgYnV0IHRo
aXMKKyAgICAgICAgICAgIC8vIGltcGxlbWVudGF0aW9uIGdldHMgc29tZSBwZXJmIHdpbnMgZnJv
bSBwaWdneS1iYWNraW5nIHRoaXMgY2FsY3VsYXRpb24gaW4gdGhlIHNjYW4uCisgICAgICAgICAg
ICAvLworICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHRoZSBkaWRCdWlsZCBmbGFnIHN0aWNrcyB0
aHJvdWdoIHNwaWxsaW5nLiBTcGlsbGluZyBkb2Vzbid0IGNoYW5nZSB0aGUKKyAgICAgICAgICAg
IC8vIGludGVyZmVyZW5jZSBzaXR1YXRpb24uCisgICAgICAgICAgICAvLworICAgICAgICAgICAg
Ly8gTm90ZSB0aGF0IHdlIGNvdWxkIHNob3J0LWNpcmN1aXQgdGhpcyBpZiB3ZSdyZSBkZWFsaW5n
IHdpdGggYSBzcGlsbGFibGUgdG1wLCB0aGVyZSBhcmUgbm8KKyAgICAgICAgICAgIC8vIGZyZWUg
cmVnaXN0ZXJzLCBhbmQgdGhpcyByZWdpc3RlcidzIGludGVydmFsIGVuZHMgYWZ0ZXIgdGhlIG9u
ZSBvbiB0aGUgdG9wIG9mIHRoZSBhY3RpdmUKKyAgICAgICAgICAgIC8vIHN0YWNrLgorICAgICAg
ICAgICAgaWYgKCFlbnRyeS5kaWRCdWlsZFBvc3NpYmxlUmVncykgeworICAgICAgICAgICAgICAg
IC8vIEFkdmFuY2UgdGhlIGNsb2JiZXIgaW5kZXggdW50aWwgaXQncyBhdCBhIGNsb2JiZXIgdGhh
dCBpcyByZWxldmFudCB0byB1cy4KKyAgICAgICAgICAgICAgICB3aGlsZSAoY2xvYmJlckluZGV4
IDwgbV9jbG9iYmVycy5zaXplKCkgJiYgbV9jbG9iYmVyc1tjbG9iYmVySW5kZXhdLmluZGV4IDwg
aW5kZXgpCisgICAgICAgICAgICAgICAgICAgIGNsb2JiZXJJbmRleCsrOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHBvc3NpYmxlUmVncyA9IG1fcmVnaXN0
ZXJTZXQ7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IGNsb2JiZXJJbmRleDsgaSA8
IG1fY2xvYmJlcnMuc2l6ZSgpICYmIG1fY2xvYmJlcnNbaV0uaW5kZXggPCBlbnRyeS5pbnRlcnZh
bC5lbmQoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZVJlZ3MuZXhjbHVkZSht
X2Nsb2JiZXJzW2ldLnJlZ3MpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGVu
dHJ5LnBvc3NpYmxlUmVncyA9IHBvc3NpYmxlUmVnczsKKyAgICAgICAgICAgICAgICBlbnRyeS5k
aWRCdWlsZFBvc3NpYmxlUmVncyA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGlmICh2ZXJib3NlKCkpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiICBQ
b3NzaWJsZSByZWdzOiAiLCBlbnRyeS5wb3NzaWJsZVJlZ3MsICJcbiIpOworICAgICAgICAgICAg
CisgICAgICAgICAgICAvLyBGaW5kIGEgZnJlZSByZWdpc3RlciB0aGF0IHdlIGFyZSBhbGxvd2Vk
IHRvIHVzZS4KKyAgICAgICAgICAgIGlmIChtX2FjdGl2ZS5zaXplKCkgIT0gbV9yZWdpc3RlcnMu
c2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgYm9vbCBkaWRBc3NpZ24gPSBmYWxzZTsKKyAgICAg
ICAgICAgICAgICBmb3IgKFJlZyByZWcgOiBtX3JlZ2lzdGVycykgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoIW1fYWN0aXZlUmVncy5jb250YWlucyhyZWcpICYmIGVudHJ5LnBvc3NpYmxlUmVn
cy5jb250YWlucyhyZWcpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhc3NpZ24odG1wLCBy
ZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgZGlkQXNzaWduID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChkaWRBc3NpZ24pCisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAv
LyBUaGlzIGlzIFNwaWxsQXRJbnRlcnZhbCBpbiBGaWcuIDEsIGJ1dCBtb2RpZmllZCB0byBoYW5k
bGUgY2xvYmJlcnMuCisgICAgICAgICAgICBUbXAgc3BpbGxUbXAgPSBtX2FjdGl2ZS50YWtlTGFz
dCgKKyAgICAgICAgICAgICAgICBbJl0gKFRtcCBzcGlsbENhbmRpZGF0ZSkgLT4gYm9vbCB7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeS5wb3NzaWJsZVJlZ3MuY29udGFpbnMobV9t
YXBbc3BpbGxDYW5kaWRhdGVdLmFzc2lnbmVkKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIGlmICghc3BpbGxUbXApIHsKKyAgICAgICAgICAgICAgICBzcGlsbCh0bXApOworICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgVG1wRGF0
YSYgc3BpbGxFbnRyeSA9IG1fbWFwW3NwaWxsVG1wXTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHNwaWxsRW50cnkuYXNzaWduZWQpOworICAgICAgICAgICAgaWYgKHNwaWxsRW50cnkuaXNV
bnNwaWxsYWJsZSB8fAorICAgICAgICAgICAgICAgICghZW50cnkuaXNVbnNwaWxsYWJsZSAmJiBz
cGlsbEVudHJ5LmludGVydmFsLmVuZCgpIDw9IGVudHJ5LmludGVydmFsLmVuZCgpKSkgeworICAg
ICAgICAgICAgICAgIHNwaWxsKHRtcCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fYWN0aXZlLnJlbW92ZUxhc3Qo
KTsKKyAgICAgICAgICAgIGFzc2lnbih0bXAsIHNwaWxsRW50cnkuYXNzaWduZWQpOworICAgICAg
ICAgICAgc3BpbGwoc3BpbGxUbXApOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQg
YXNzaWduKFRtcCB0bXAsIFJlZyByZWcpCisgICAgeworICAgICAgICBUbXBEYXRhJiBlbnRyeSA9
IG1fbWFwW3RtcF07CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFlbnRyeS5zcGlsbGVkKTsKKyAg
ICAgICAgZW50cnkuYXNzaWduZWQgPSByZWc7CisgICAgICAgIG1fYWN0aXZlUmVncy5hZGQocmVn
KTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX21hcFt0bXBdLmlzVW5zcGlsbGFibGUpIHsKKyAg
ICAgICAgICAgIC8vIFdlIHdhbnQgdGhlIHNwaWxsIHRtcHMgKHJlYWQ6IHVuc3BpbGxhYmxlIHRt
cHMpIGZpcnN0LgorICAgICAgICAgICAgbV9hY3RpdmUucHJlcGVuZCh0bXApOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2FjdGl2ZS5hcHBlbmRB
bmRCdWJibGUoCisgICAgICAgICAgICB0bXAsCisgICAgICAgICAgICBbJl0gKFRtcCBvdGhlclRt
cCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgVG1wRGF0YSYgb3RoZXJFbnRyeSA9IG1fbWFw
W290aGVyVG1wXTsKKyAgICAgICAgICAgICAgICBpZiAob3RoZXJFbnRyeS5pc1Vuc3BpbGxhYmxl
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0
dXJuIG1fbWFwW290aGVyVG1wXS5pbnRlcnZhbC5lbmQoKSA+IG1fbWFwW3RtcF0uaW50ZXJ2YWwu
ZW5kKCk7CisgICAgICAgICAgICB9KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzcGlsbChUbXAg
dG1wKQorICAgIHsKKyAgICAgICAgVG1wRGF0YSYgZW50cnkgPSBtX21hcFt0bXBdOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghZW50cnkuaXNVbnNwaWxsYWJsZSk7CisgICAgICAgIGVudHJ5LnNw
aWxsZWQgPSBtX2NvZGUuYWRkU3RhY2tTbG90KDgsIFN0YWNrU2xvdEtpbmQ6OlNwaWxsKTsKKyAg
ICAgICAgZW50cnkuYXNzaWduZWQgPSBSZWcoKTsKKyAgICAgICAgbV9kaWRTcGlsbCA9IHRydWU7
CisgICAgfQorICAgIAorICAgIHZvaWQgZW1pdFNwaWxsQ29kZSgpCisgICAgeworICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7CisgICAgICAgICAgICBzaXplX3QgaW5k
ZXhPZkhlYWQgPSB0aGlzLT5pbmRleE9mSGVhZChibG9jayk7CisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGluc3RJbmRleCA9IDA7IGluc3RJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsraW5zdElu
ZGV4KSB7CisgICAgICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgp
OworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4T2ZFYXJseSA9IGluZGV4T2ZIZWFkICsg
aW5zdEluZGV4OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIEZpcnN0IHRy
eSB0byBzcGlsbCBkaXJlY3RseS4KKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgaW5zdC5hcmdzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIEFyZyYg
YXJnID0gaW5zdC5hcmdzW2ldOworICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZy5pc1RtcCgp
KQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAg
IGlmIChhcmcuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgICAgICBpZiAoYXJnLmJhbmsoKSAhPSBiYW5rKQorICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc3BpbGxl
ZCA9IG1fbWFwW2FyZy50bXAoKV0uc3BpbGxlZDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFz
cGlsbGVkKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgICAgIGlmICghaW5zdC5hZG1pdHNTdGFjayhpKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBhcmcgPSBBcmc6OnN0YWNrKHNwaWxsZWQp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAv
LyBGYWxsIGJhY2sgb24gdGhlIGhhcmQgd2F5LgorICAgICAgICAgICAgICAgIGluc3QuZm9yRWFj
aFRtcCgKKyAgICAgICAgICAgICAgICAgICAgWyZdIChUbXAmIHRtcCwgQXJnOjpSb2xlIHJvbGUs
IEJhbmsgdG1wQmFuaywgV2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXAu
aXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAodG1wQmFuayAhPSBiYW5rKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc3BpbGxl
ZCA9IG1fbWFwW3RtcF0uc3BpbGxlZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3Bp
bGxlZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgICAgICAgICBPcGNvZGUgbW92ZSA9IGJhbmsgPT0gR1AgPyBNb3ZlIDogTW92ZURvdWJsZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IGFkZFNwaWxsVG1wV2l0aEludGVydmFsKGlu
dGVydmFsKGluZGV4T2ZFYXJseSwgQXJnOjp0aW1pbmcocm9sZSkpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChyb2xlID09IEFyZzo6U2NyYXRjaCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0FueVVz
ZShyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldHNbYmxv
Y2tdLmluc2VydChpbnN0SW5kZXgsIG1vdmUsIGluc3Qub3JpZ2luLCBBcmc6OnN0YWNrKHNwaWxs
ZWQpLCB0bXApOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlEZWYocm9s
ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXRzW2Jsb2NrXS5p
bnNlcnQoaW5zdEluZGV4ICsgMSwgbW92ZSwgaW5zdC5vcmlnaW4sIHRtcCwgQXJnOjpzdGFjayhz
cGlsbGVkKSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIHZvaWQgaW5zZXJ0U3BpbGxDb2RlKCkKKyAgICB7CisgICAg
ICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpCisgICAgICAgICAgICBtX2luc2Vy
dGlvblNldHNbYmxvY2tdLmV4ZWN1dGUoYmxvY2spOworICAgIH0KKyAgICAKKyAgICB2b2lkIGFz
c2lnblJlZ2lzdGVycygpCisgICAgeworICAgICAgICBpZiAodmVyYm9zZSgpKSB7CisgICAgICAg
ICAgICBkYXRhTG9nKCJBYm91dCB0byBhbGxvY2F0ZSByZWdpc3RlcnMuIFN0YXRlIG9mIGFsbCB0
bXBzOlxuIik7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHRtcEluZGV4ID0gMDsgdG1wSW5k
ZXggPCBtX2NvZGUubnVtVG1wcyhiYW5rKTsgKyt0bXBJbmRleCkgeworICAgICAgICAgICAgICAg
IFRtcCB0bXAgPSBUbXA6OnRtcEZvckluZGV4KGJhbmssIHRtcEluZGV4KTsKKyAgICAgICAgICAg
ICAgICBkYXRhTG9nKCIgICAgIiwgdG1wLCAiOiAiLCBtX21hcFt0bXBdLCAiXG4iKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGRhdGFMb2coIklSOlxuIik7CisgICAgICAgICAgICBkYXRh
TG9nKG1fY29kZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBtX2NvZGUpIHsKKyAgICAgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6ICpibG9j
aykgeworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKCkpCisgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coIkF0OiAiLCBpbnN0LCAiXG4iKTsKKyAgICAgICAgICAgICAgICBpbnN0LmZvckVh
Y2hUbXBGYXN0KAorICAgICAgICAgICAgICAgICAgICBbJl0gKFRtcCYgdG1wKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcC5iYW5rKCkgIT0g
YmFuaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlZyByZWcgPSBtX21hcFt0bXBd
LmFzc2lnbmVkOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWcpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJGYWlsZWQgdG8gYWxsb2NhdGUgcmVnIGZvcjog
IiwgdG1wLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgdG1wID0gVG1wKHJlZyk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIENvZGUmIG1fY29kZTsKKyAg
ICBWZWN0b3I8UmVnPiBtX3JlZ2lzdGVyczsKKyAgICBSZWdpc3RlclNldCBtX3JlZ2lzdGVyU2V0
OworICAgIEluZGV4TWFwPEJhc2ljQmxvY2sqLCBzaXplX3Q+IG1fc3RhcnRJbmRleDsKKyAgICBJ
bmRleE1hcDxUbXA6OkluZGV4ZWQ8YmFuaz4sIFRtcERhdGE+IG1fbWFwOworICAgIEluZGV4TWFw
PEJhc2ljQmxvY2sqLCBJbnNlcnRpb25TZXQ+IG1faW5zZXJ0aW9uU2V0czsKKyAgICBWZWN0b3I8
Q2xvYmJlcj4gbV9jbG9iYmVyczsgLy8gQWZ0ZXIgd2UgYWxsb2NhdGUgdGhpcywgd2UgaGFwcGls
eSBwb2ludCBwb2ludGVycyBpbnRvIGl0LgorICAgIFZlY3RvcjxUbXA+IG1fdG1wczsKKyAgICBE
ZXF1ZTxUbXA+IG1fYWN0aXZlOworICAgIFJlZ2lzdGVyU2V0IG1fYWN0aXZlUmVnczsKKyAgICBi
b29sIG1fZGlkU3BpbGwgeyBmYWxzZSB9OworfTsKKwordGVtcGxhdGU8QmFuayBiYW5rPgordm9p
ZCBydW5MaW5lYXJTY2FuKENvZGUmIGNvZGUpCit7CisgICAgaWYgKHZlcmJvc2UoKSkKKyAgICAg
ICAgZGF0YUxvZygiQWlyIGJlZm9yZSBsaW5lYXIgc2NhbiBmb3IgIiwgYmFuaywgIjpcbiIsIGNv
ZGUpOworICAgIExpbmVhclNjYW48YmFuaz4gbGluZWFyU2Nhbihjb2RlKTsKKyAgICBsaW5lYXJT
Y2FuLnJ1bigpOworICAgIGlmICh2ZXJib3NlKCkpCisgICAgICAgIGRhdGFMb2coIkFpciBhZnRl
ciBsaW5lYXIgc2NhbiBmb3IgIiwgYmFuaywgIjpcbiIsIGNvZGUpOworfQorCit9IC8vIGFub255
bW91cyBuYW1lc3BhY2UKKwordm9pZCBhbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2NhbihDb2Rl
JiBjb2RlKQoreworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAiYWxsb2NhdGVSZWdp
c3RlcnNCeUxpbmVhclNjYW4iKTsKKyAgICBwYWRJbnRlcmZlcmVuY2UoY29kZSk7CisgICAgcnVu
TGluZWFyU2NhbjxGUD4oY29kZSk7CisgICAgcnVuTGluZWFyU2NhbjxHUD4oY29kZSk7CisgICAg
Zml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMoY29kZSk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lz
dGVyc0J5TGluZWFyU2Nhbi5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
Q1BVLmgiCisjaW5jbHVkZSAiT3B0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKKy8vIFRoaXMgaW1wbGVtZW50
cyB0aGUgUG9sZXR0byBhbmQgU2Fya2VyIHJlZ2lzdGVyIGFsbG9jYXRvciBjYWxsZWQgImxpbmVh
ciBzY2FuIjoKKy8vIGh0dHA6Ly9kbC5hY20ub3JnL2NpdGF0aW9uLmNmbT9pZD0zMzAyNTAKKy8v
CisvLyBUaGlzIGlzIG5vdCBBaXIncyBwcmltYXJ5IHJlZ2lzdGVyIGFsbG9jYXRvci4gV2UgdXNl
IGl0IG9ubHkgd2hlbiBydW5uaW5nIGF0IG9wdExldmVsPTAuIFRoYXQncyBub3QKKy8vIHRoZSBk
ZWZhdWx0IGxldmVsLiBUaGlzIHJlZ2lzdGVyIGFsbG9jYXRvciBpcyBvcHRpbWl6ZWQgcHJpbWFy
aWx5IGZvciBydW5uaW5nIHF1aWNrbHkuIEl0J3MgZXhwZWN0ZWQKKy8vIHRoYXQgaW1wcm92ZW1l
bnRzIHRvIHRoaXMgcmVnaXN0ZXIgYWxsb2NhdG9yIHNob3VsZCBmb2N1cyBwcmltYXJpbHkgb24g
aW1wcm92aW5nIGl0cyBleGVjdXRpb24gdGltZQorLy8gd2l0aG91dCBtdWNoIHJlZ2FyZCBmb3Ig
dGhlIHF1YWxpdHkgb2YgZ2VuZXJhdGVkIGNvZGUuCisvLworLy8gRm9yIEFpcidzIHByaW1hcnkg
cmVnaXN0ZXIgYWxsb2NhdG9yLCBzZWUgQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3Jp
bmcuaHxjcHAuCit2b2lkIGFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuKENvZGUmKTsKKwor
fSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0
ZVN0YWNrLmNwcAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYxLDcgKzE2MSw3
IEBAIHZvaWQgYWxsb2NhdGVTdGFjayhDb2RlJiBjb2RlKQogCiAgICAgLy8gTm93IHdlIGhhbmRs
ZSB0aGUgc3BpbGwgc2xvdHMuCiAgICAgU3RhY2tTbG90TGl2ZW5lc3MgbGl2ZW5lc3MoY29kZSk7
Ci0gICAgSW5kZXhNYXA8U3RhY2tTbG90LCBIYXNoU2V0PFN0YWNrU2xvdCo+PiBpbnRlcmZlcmVu
Y2UoY29kZS5zdGFja1Nsb3RzKCkuc2l6ZSgpKTsKKyAgICBJbmRleE1hcDxTdGFja1Nsb3QqLCBI
YXNoU2V0PFN0YWNrU2xvdCo+PiBpbnRlcmZlcmVuY2UoY29kZS5zdGFja1Nsb3RzKCkuc2l6ZSgp
KTsKICAgICBWZWN0b3I8U3RhY2tTbG90Kj4gc2xvdHM7CiAKICAgICAvLyBXZSB3aWxsIHBlcmZv
cm0gc29tZSBzcGlsbCBjb2FsZXNjaW5nLiBUbyBtYWtlIHRoYXQgZWZmZWN0aXZlLCB3ZSBuZWVk
IHRvIGJlIGFibGUgdG8gaWRlbnRpZnkKQEAgLTMwOSw3ICszMDksNyBAQCB2b2lkIGFsbG9jYXRl
U3RhY2soQ29kZSYgY29kZSkKICAgICAgICAgICAgIHJldHVybiBhLmZyZXF1ZW5jeSA+IGIuZnJl
cXVlbmN5OwogICAgICAgICB9KTsKICAgICAKLSAgICBJbmRleE1hcDxTdGFja1Nsb3QsIFN0YWNr
U2xvdCo+IHJlbWFwcGVkU3RhY2tTbG90cyhjb2RlLnN0YWNrU2xvdHMoKS5zaXplKCkpOworICAg
IEluZGV4TWFwPFN0YWNrU2xvdCosIFN0YWNrU2xvdCo+IHJlbWFwcGVkU3RhY2tTbG90cyhjb2Rl
LnN0YWNrU2xvdHMoKS5zaXplKCkpOwogICAgIGF1dG8gcmVtYXAgPSBbJl0gKFN0YWNrU2xvdCog
c2xvdCkgLT4gU3RhY2tTbG90KiB7CiAgICAgICAgIGlmICghc2xvdCkKICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNw
cAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJB
cmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODIsNiArMjgyLDM3IEBAIHZvaWQgcHJpbnRJbnRl
cm5hbChQcmludFN0cmVhbSYgb3V0LCBBcmcKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogfQogCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQXJnOjpQaGFz
ZSBwaGFzZSkKK3sKKyAgICBzd2l0Y2ggKHBoYXNlKSB7CisgICAgY2FzZSBBcmc6OkVhcmx5Ogor
ICAgICAgICBvdXQucHJpbnQoIkVhcmx5Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFy
Zzo6TGF0ZToKKyAgICAgICAgb3V0LnByaW50KCJMYXRlIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIHByaW50
SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQXJnOjpUaW1pbmcgdGltaW5nKQoreworICAgIHN3
aXRjaCAodGltaW5nKSB7CisgICAgY2FzZSBBcmc6Ok9ubHlFYXJseToKKyAgICAgICAgb3V0LnBy
aW50KCJPbmx5RWFybHkiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJnOjpPbmx5TGF0
ZToKKyAgICAgICAgb3V0LnByaW50KCJPbmx5TGF0ZSIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBBcmc6OkVhcmx5QW5kTGF0ZToKKyAgICAgICAgb3V0LnByaW50KCJFYXJseUFuZExhdGUi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Cit9CisKIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBcmc6OlJv
bGUgcm9sZSkKIHsKICAgICBzd2l0Y2ggKHJvbGUpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQXJnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJBcmcuaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJBcmcuaAkod29ya2luZyBjb3B5KQpAQCAtOTIsNiArOTIsMTcgQEAgcHVi
bGljOgogICAgICAgICBDb2xkLAogICAgICAgICBXYXJtCiAgICAgfTsKKyAgICAKKyAgICBlbnVt
IFBoYXNlIDogaW50OF90IHsKKyAgICAgICAgRWFybHksCisgICAgICAgIExhdGUKKyAgICB9Owor
ICAgIAorICAgIGVudW0gVGltaW5nIDogaW50OF90IHsKKyAgICAgICAgT25seUVhcmx5LAorICAg
ICAgICBPbmx5TGF0ZSwKKyAgICAgICAgRWFybHlBbmRMYXRlCisgICAgfTsKIAogICAgIGVudW0g
Um9sZSA6IGludDhfdCB7CiAgICAgICAgIC8vIFVzZSBtZWFucyB0aGF0IHRoZSBJbnN0IHdpbGwg
cmVhZCBmcm9tIHRoaXMgdmFsdWUgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UuCkBAIC0yNTMs
NyArMjY0LDgyIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBpc0NvbGRVc2Uocm9s
ZSkgPyBDb2xkIDogV2FybTsKICAgICB9Ci0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCBhY3RpdmVB
dChSb2xlIHJvbGUsIFBoYXNlIHBoYXNlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChyb2xlKSB7
CisgICAgICAgIGNhc2UgVXNlOgorICAgICAgICBjYXNlIENvbGRVc2U6CisgICAgICAgIGNhc2Ug
RWFybHlEZWY6CisgICAgICAgIGNhc2UgRWFybHlaRGVmOgorICAgICAgICBjYXNlIFVzZUFkZHI6
CisgICAgICAgICAgICByZXR1cm4gcGhhc2UgPT0gRWFybHk7CisgICAgICAgIGNhc2UgTGF0ZVVz
ZToKKyAgICAgICAgY2FzZSBMYXRlQ29sZFVzZToKKyAgICAgICAgY2FzZSBEZWY6CisgICAgICAg
IGNhc2UgWkRlZjoKKyAgICAgICAgICAgIHJldHVybiBwaGFzZSA9PSBMYXRlOworICAgICAgICBj
YXNlIFVzZURlZjoKKyAgICAgICAgY2FzZSBVc2VaRGVmOgorICAgICAgICBjYXNlIFNjcmF0Y2g6
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGJvb2wgYWN0aXZlQXQoVGltaW5n
IHRpbWluZywgUGhhc2UgcGhhc2UpCisgICAgeworICAgICAgICBzd2l0Y2ggKHRpbWluZykgewor
ICAgICAgICBjYXNlIE9ubHlFYXJseToKKyAgICAgICAgICAgIHJldHVybiBwaGFzZSA9PSBFYXJs
eTsKKyAgICAgICAgY2FzZSBPbmx5TGF0ZToKKyAgICAgICAgICAgIHJldHVybiBwaGFzZSA9PSBM
YXRlOworICAgICAgICBjYXNlIEVhcmx5QW5kTGF0ZToKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAK
KyAgICBzdGF0aWMgVGltaW5nIHRpbWluZyhSb2xlIHJvbGUpCisgICAgeworICAgICAgICBzd2l0
Y2ggKHJvbGUpIHsKKyAgICAgICAgY2FzZSBVc2U6CisgICAgICAgIGNhc2UgQ29sZFVzZToKKyAg
ICAgICAgY2FzZSBFYXJseURlZjoKKyAgICAgICAgY2FzZSBFYXJseVpEZWY6CisgICAgICAgIGNh
c2UgVXNlQWRkcjoKKyAgICAgICAgICAgIHJldHVybiBPbmx5RWFybHk7CisgICAgICAgIGNhc2Ug
TGF0ZVVzZToKKyAgICAgICAgY2FzZSBMYXRlQ29sZFVzZToKKyAgICAgICAgY2FzZSBEZWY6Cisg
ICAgICAgIGNhc2UgWkRlZjoKKyAgICAgICAgICAgIHJldHVybiBPbmx5TGF0ZTsKKyAgICAgICAg
Y2FzZSBVc2VEZWY6CisgICAgICAgIGNhc2UgVXNlWkRlZjoKKyAgICAgICAgY2FzZSBTY3JhdGNo
OgorICAgICAgICAgICAgcmV0dXJuIEVhcmx5QW5kTGF0ZTsKKyAgICAgICAgfQorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuYz4KKyAgICBzdGF0aWMgdm9pZCBmb3JFYWNoUGhhc2UoVGltaW5nIHRpbWluZywgY29uc3Qg
RnVuYyYgZnVuYykKKyAgICB7CisgICAgICAgIGlmIChhY3RpdmVBdCh0aW1pbmcsIEVhcmx5KSkK
KyAgICAgICAgICAgIGZ1bmMoRWFybHkpOworICAgICAgICBpZiAoYWN0aXZlQXQodGltaW5nLCBM
YXRlKSkKKyAgICAgICAgICAgIGZ1bmMoTGF0ZSk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmM+CisgICAgc3RhdGljIHZvaWQgZm9yRWFjaFBoYXNlKFJvbGUgcm9sZSwg
Y29uc3QgRnVuYyYgZnVuYykKKyAgICB7CisgICAgICAgIGlmIChhY3RpdmVBdChyb2xlLCBFYXJs
eSkpCisgICAgICAgICAgICBmdW5jKEVhcmx5KTsKKyAgICAgICAgaWYgKGFjdGl2ZUF0KHJvbGUs
IExhdGUpKQorICAgICAgICAgICAgZnVuYyhMYXRlKTsKKyAgICB9CisgICAgCiAgICAgLy8gUmV0
dXJucyB0cnVlIGlmIHRoZSBSb2xlIGltcGxpZXMgdGhhdCB0aGUgSW5zdCB3aWxsIFVzZSB0aGUg
QXJnIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLgogICAgIHN0YXRpYyBib29sIGlzRWFybHlV
c2UoUm9sZSByb2xlKQogICAgIHsKQEAgLTEzNTQsNiArMTQ0MCw4IEBAIG5hbWVzcGFjZSBXVEYg
ewogCiBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBK
U0M6OkIzOjpBaXI6OkFyZzo6S2luZCk7CiBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpBaXI6OkFyZzo6VGVtcGVyYXR1cmUpOworSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6
QWlyOjpBcmc6OlBoYXNlKTsKK0pTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJpbnRJbnRlcm5hbChQ
cmludFN0cmVhbSYsIEpTQzo6QjM6OkFpcjo6QXJnOjpUaW1pbmcpOwogSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6QWlyOjpBcmc6OlJv
bGUpOwogSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwg
SlNDOjpCMzo6QWlyOjpBcmc6OlNpZ25lZG5lc3MpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckJsb2NrV29ya2xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckJsb2NrV29ya2xpc3QuaAkocmV2aXNpb24gMjE0NDI3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja1dvcmtsaXN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzIsNyArMzIsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsg
bmFtZXNwYWNlIEFpciB7CiAKLXR5cGVkZWYgR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayos
IEluZGV4U2V0PEJhc2ljQmxvY2s+PiBCbG9ja1dvcmtsaXN0OwordHlwZWRlZiBHcmFwaE5vZGVX
b3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jayo+PiBCbG9ja1dvcmtsaXN0
OwogCiAvLyBXaGVuIHlvdSBzYXkgQmxvY2tXaXRoPGludD4geW91IHNob3VsZCByZWFkIGl0IGFz
ICJibG9jayB3aXRoIGFuIGludCIuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBCbG9ja1dp
dGggPSBHcmFwaE5vZGVXaXRoPEJhc2ljQmxvY2sqLCBUPjsKQEAgLTQxLDExICs0MSwxMSBAQCB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBCbG9ja1dpdGggPSBHCiAvLyBwZXJtaXRzIGZvcmNp
Ymx5IGVucXVldWVpbmcgdGhpbmdzIGV2ZW4gaWYgdGhlIGJsb2NrIGhhcyBhbHJlYWR5IGJlZW4g
c2Vlbi4gSXQncyB1c2VmdWwgZm9yCiAvLyB0aGluZ3MgbGlrZSBidWlsZGluZyBhIHNwYW5uaW5n
IHRyZWUsIGluIHdoaWNoIGNhc2UgVCAodGhlIGF1eGlsaWFyeSBwYXlsb2FkKSB3b3VsZCBiZSB0
aGUKIC8vIHN1Y2Nlc3NvciBpbmRleC4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5nIEV4dGVu
ZGVkQmxvY2tXb3JrbGlzdCA9IEV4dGVuZGVkR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayos
IFQsIEluZGV4U2V0PEJhc2ljQmxvY2s+PjsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5nIEV4
dGVuZGVkQmxvY2tXb3JrbGlzdCA9IEV4dGVuZGVkR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9j
ayosIFQsIEluZGV4U2V0PEJhc2ljQmxvY2sqPj47CiAKIHR5cGVkZWYgR3JhcGhOb2RlV2l0aE9y
ZGVyPEJhc2ljQmxvY2sqPiBCbG9ja1dpdGhPcmRlcjsKIAotdHlwZWRlZiBQb3N0T3JkZXJHcmFw
aE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IFBvc3RPcmRl
ckJsb2NrV29ya2xpc3Q7Cit0eXBlZGVmIFBvc3RPcmRlckdyYXBoTm9kZVdvcmtsaXN0PEJhc2lj
QmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+IFBvc3RPcmRlckJsb2NrV29ya2xpc3Q7CiAK
IH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJDRkcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckNGRy5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckNGRy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw4ICszOSw4IEBAIGNs
YXNzIENGRyB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgdHlw
ZWRlZiBCYXNpY0Jsb2NrKiBOb2RlOwotICAgIHR5cGVkZWYgSW5kZXhTZXQ8QmFzaWNCbG9jaz4g
U2V0OwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5nIE1hcCA9IEluZGV4TWFwPEJhc2lj
QmxvY2ssIFQ+OworICAgIHR5cGVkZWYgSW5kZXhTZXQ8QmFzaWNCbG9jayo+IFNldDsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBNYXAgPSBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgVD47
CiAgICAgdHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9jayosIDQ+IExpc3Q7CiAKICAgICBDRkcoQ29k
ZSYgY29kZSkKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogICAgIE5vZGUgcm9vdCgpIHsgcmV0
dXJuIG1fY29kZVswXTsgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBNYXA8VD4g
bmV3TWFwKCkgeyByZXR1cm4gSW5kZXhNYXA8SlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrLCBUPiht
X2NvZGUuc2l6ZSgpKTsgfQorICAgIE1hcDxUPiBuZXdNYXAoKSB7IHJldHVybiBJbmRleE1hcDxK
U0M6OkIzOjpBaXI6OkJhc2ljQmxvY2sqLCBUPihtX2NvZGUuc2l6ZSgpKTsgfQogCiAgICAgU3Vj
Y2Vzc29yQ29sbGVjdGlvbjxCYXNpY0Jsb2NrLCBCYXNpY0Jsb2NrOjpTdWNjZXNzb3JMaXN0PiBz
dWNjZXNzb3JzKE5vZGUgbm9kZSkgeyByZXR1cm4gbm9kZS0+c3VjY2Vzc29yQmxvY2tzKCk7IH0K
ICAgICBCYXNpY0Jsb2NrOjpQcmVkZWNlc3Nvckxpc3QmIHByZWRlY2Vzc29ycyhOb2RlIG5vZGUp
IHsgcmV0dXJuIG5vZGUtPnByZWRlY2Vzc29ycygpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckVsaW1pbmF0ZURlYWRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckVsaW1pbmF0ZURlYWRDb2RlLmNwcAkocmV2aXNp
b24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbGltaW5hdGVE
ZWFkQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgYm9vbCBlbGltaW5h
dGVEZWFkQ29kZShDb2RlJiBjb2RlKQogICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAi
ZWxpbWluYXRlRGVhZENvZGUiKTsKIAogICAgIEhhc2hTZXQ8VG1wPiBsaXZlVG1wczsKLSAgICBJ
bmRleFNldDxTdGFja1Nsb3Q+IGxpdmVTdGFja1Nsb3RzOworICAgIEluZGV4U2V0PFN0YWNrU2xv
dCo+IGxpdmVTdGFja1Nsb3RzOwogICAgIGJvb2wgY2hhbmdlZDsKIAogICAgIGF1dG8gaXNBcmdM
aXZlID0gWyZdIChjb25zdCBBcmcmIGFyZykgLT4gYm9vbCB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckZpeE9idmlvdXNTcGlsbHMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4T2J2aW91c1NwaWxscy5jcHAJKHJldmlz
aW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4T2J2aW91
c1NwaWxscy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0Nyw3ICs1NDcsNyBAQCBwcml2YXRlOgog
ICAgIH07CiAKICAgICBDb2RlJiBtX2NvZGU7Ci0gICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgU3Rh
dGU+IG1fYXRIZWFkOworICAgIEluZGV4TWFwPEJhc2ljQmxvY2sqLCBTdGF0ZT4gbV9hdEhlYWQ7
CiAgICAgU3RhdGUgbV9zdGF0ZTsKICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrIHsgbnVsbHB0ciB9
OwogICAgIHVuc2lnbmVkIG1faW5zdEluZGV4IHsgMCB9OwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJGaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4UGFydGlhbFJlZ2lzdGVyU3Rh
bGxzLmNwcAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJGaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUs
MTAgKzE1NSwxMCBAQCB2b2lkIGZpeFBhcnRpYWxSZWdpc3RlclN0YWxscyhDb2RlJiBjb2RlCiAK
ICAgICAvLyBGb3IgZWFjaCBibG9jaywgdGhpcyBwcm92aWRlcyB0aGUgZGlzdGFuY2UgdG8gdGhl
IGxhc3QgaW5zdHJ1Y3Rpb24gc2V0dGluZyBlYWNoIHJlZ2lzdGVyCiAgICAgLy8gb24gYmxvY2sg
KmVudHJ5Ki4KLSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBGUERlZkRpc3RhbmNlPiBsYXN0RGVm
RGlzdGFuY2UoY29kZS5zaXplKCkpOworICAgIEluZGV4TWFwPEJhc2ljQmxvY2sqLCBGUERlZkRp
c3RhbmNlPiBsYXN0RGVmRGlzdGFuY2UoY29kZS5zaXplKCkpOwogCiAgICAgLy8gQmxvY2tzIHdp
dGggZGlydHkgZGlzdGFuY2UgYXQgaGVhZC4KLSAgICBJbmRleFNldDxCYXNpY0Jsb2NrPiBkaXJ0
eTsKKyAgICBJbmRleFNldDxCYXNpY0Jsb2NrKj4gZGlydHk7CiAKICAgICAvLyBGaXJzdCwgd2Ug
Y29tcHV0ZSB0aGUgbG9jYWwgZGlzdGFuY2UgZm9yIGVhY2ggYmxvY2sgYW5kIHB1c2ggaXQgdG8g
dGhlIHN1Y2Nlc3NvcnMuCiAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5h
bHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4
U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyRml4U3BpbGxzQWZ0
ZXJUZXJtaW5hbHMuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJCbG9j
a0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJJbnNl
cnRpb25TZXQuaCIKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgorI2luY2x1ZGUgIkFpclRt
cElubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBB
aXIgeworCit2b2lkIGZpeFNwaWxsc0FmdGVyVGVybWluYWxzKENvZGUmIGNvZGUpCit7CisgICAg
Ly8gQmVjYXVzZSB0aGVyZSBtYXkgYmUgdGVybWluYWxzIHRoYXQgcHJvZHVjZSB2YWx1ZXMsIElS
QyBtYXkKKyAgICAvLyB3YW50IHRvIHNwaWxsIHRob3NlIHRlcm1pbmFscy4gSXQnbGwgaGFwcGVu
IHRvIHNwaWxsIGl0IGFmdGVyCisgICAgLy8gdGhlIHRlcm1pbmFsLiBJZiB3ZSBsZWZ0IHRoZSBn
cmFwaCBpbiB0aGlzIHN0YXRlLCBpdCdkIGJlIGludmFsaWQKKyAgICAvLyBiZWNhdXNlIGEgdGVy
bWluYWwgbXVzdCBiZSB0aGUgbGFzdCBpbnN0cnVjdGlvbiBpbiBhIGJsb2NrLgorICAgIC8vIFdl
IGZpeCB0aGF0IGhlcmUuCisKKyAgICBCbG9ja0luc2VydGlvblNldCBibG9ja0luc2VydGlvblNl
dChjb2RlKTsKKyAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KGNvZGUpOworCisgICAgZm9y
IChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgdW5zaWduZWQgdGVybWluYWxJ
bmRleCA9IGJsb2NrLT5zaXplKCk7CisgICAgICAgIGJvb2wgZm91bmRUZXJtaW5hbCA9IGZhbHNl
OworICAgICAgICB3aGlsZSAodGVybWluYWxJbmRleC0tKSB7CisgICAgICAgICAgICBpZiAoYmxv
Y2stPmF0KHRlcm1pbmFsSW5kZXgpLmlzVGVybWluYWwoKSkgeworICAgICAgICAgICAgICAgIGZv
dW5kVGVybWluYWwgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIEFTU0VSVF9VTlVTRUQoZm91bmRUZXJtaW5hbCwgZm91bmRU
ZXJtaW5hbCk7CisKKyAgICAgICAgaWYgKHRlcm1pbmFsSW5kZXggPT0gYmxvY2stPnNpemUoKSAt
IDEpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBUaGVyZSBtdXN0IGJlIGlu
c3RydWN0aW9ucyBhZnRlciB0aGUgdGVybWluYWwgYmVjYXVzZSBpdCdzIG5vdCB0aGUgbGFzdCBp
bnN0cnVjdGlvbi4KKyAgICAgICAgQVNTRVJUKHRlcm1pbmFsSW5kZXggPCBibG9jay0+c2l6ZSgp
IC0gMSk7CisgICAgICAgIFZlY3RvcjxJbnN0LCAxPiBpbnN0c1RvTW92ZTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gdGVybWluYWxJbmRleCArIDE7IGkgPCBibG9jay0+c2l6ZSgpOyBpKysp
CisgICAgICAgICAgICBpbnN0c1RvTW92ZS5hcHBlbmQoYmxvY2stPmF0KGkpKTsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoaW5zdHNUb01vdmUuc2l6ZSgpKTsKKworICAgICAgICBmb3IgKEZyZXF1
ZW50ZWRCbG9jayYgZnJlcXVlbnRlZFN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsK
KyAgICAgICAgICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA9IGZyZXF1ZW50ZWRTdWNjZXNzb3Iu
YmxvY2soKTsKKyAgICAgICAgICAgIC8vIElmIHN1Y2Nlc3NvcidzIG9ubHkgcHJlZGVjZXNzb3Ig
aXMgYmxvY2ssIHdlIGNhbiBwbGFudCB0aGUgc3BpbGwgaW5zaWRlCisgICAgICAgICAgICAvLyB0
aGUgc3VjY2Vzc29yLiBPdGhlcndpc2UsIHdlIG11c3Qgc3BsaXQgdGhlIGNyaXRpY2FsIGVkZ2Ug
YW5kIGNyZWF0ZQorICAgICAgICAgICAgLy8gYSBuZXcgYmxvY2sgZm9yIHRoZSBzcGlsbC4KKyAg
ICAgICAgICAgIGlmIChzdWNjZXNzb3ItPm51bVByZWRlY2Vzc29ycygpID09IDEpIHsKKyAgICAg
ICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0SW5zdHMoMCwgaW5zdHNUb01vdmUpOworICAg
ICAgICAgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKHN1Y2Nlc3Nvcik7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIG5ld0Jsb2NrID0gYmxvY2tJ
bnNlcnRpb25TZXQuaW5zZXJ0QmVmb3JlKHN1Y2Nlc3Nvciwgc3VjY2Vzc29yLT5mcmVxdWVuY3ko
KSk7CisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBJbnN0JiBpbnN0IDogaW5zdHNUb01vdmUp
CisgICAgICAgICAgICAgICAgICAgIG5ld0Jsb2NrLT5hcHBlbmRJbnN0KGluc3QpOworICAgICAg
ICAgICAgICAgIG5ld0Jsb2NrLT5hcHBlbmRJbnN0KEluc3QoSnVtcCwgaW5zdHNUb01vdmUubGFz
dCgpLm9yaWdpbikpOworICAgICAgICAgICAgICAgIG5ld0Jsb2NrLT5zdWNjZXNzb3JzKCkuYXBw
ZW5kKHN1Y2Nlc3Nvcik7CisgICAgICAgICAgICAgICAgZnJlcXVlbnRlZFN1Y2Nlc3Nvci5ibG9j
aygpID0gbmV3QmxvY2s7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBibG9j
ay0+cmVzaXplKHRlcm1pbmFsSW5kZXggKyAxKTsKKyAgICB9CisKKyAgICBpZiAoYmxvY2tJbnNl
cnRpb25TZXQuZXhlY3V0ZSgpKQorICAgICAgICBjb2RlLnJlc2V0UmVhY2hhYmlsaXR5KCk7Cit9
CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4U3BpbGxz
QWZ0ZXJUZXJtaW5hbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29k
ZTsKKworLy8gQmVjYXVzZSB0aGVyZSBtYXkgYmUgdGVybWluYWxzIHRoYXQgcHJvZHVjZSB2YWx1
ZXMsIHRoZSByZWdpc3RlciBhbGxvY2F0b3IgbWF5CisvLyB3YW50IHRvIHNwaWxsIHRob3NlIHRl
cm1pbmFscy4gSXQnbGwgaGFwcGVuIHRvIHNwaWxsIGl0IGFmdGVyCisvLyB0aGUgdGVybWluYWwu
IElmIHdlIGxlZnQgdGhlIGdyYXBoIGluIHRoaXMgc3RhdGUsIGl0J2QgYmUgaW52YWxpZAorLy8g
YmVjYXVzZSBhIHRlcm1pbmFsIG11c3QgYmUgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24gaW4gYSBibG9j
ay4KKy8vIFdlIGZpeCB0aGF0IGhlcmUuCit2b2lkIGZpeFNwaWxsc0FmdGVyVGVybWluYWxzKENv
ZGUmKTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5l
cmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJH
ZW5lcmF0ZS5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyR2VuZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAj
aWYgRU5BQkxFKEIzX0pJVCkKIAogI2luY2x1ZGUgIkFpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFw
aENvbG9yaW5nLmgiCisjaW5jbHVkZSAiQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4u
aCIKICNpbmNsdWRlICJBaXJBbGxvY2F0ZVN0YWNrLmgiCiAjaW5jbHVkZSAiQWlyQ29kZS5oIgog
I2luY2x1ZGUgIkFpckVsaW1pbmF0ZURlYWRDb2RlLmgiCkBAIC01Nyw3ICs1OCw3IEBACiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKIAotdm9pZCBwcmVw
YXJlRm9yR2VuZXJhdGlvbihDb2RlJiBjb2RlKQordm9pZCBwcmVwYXJlRm9yR2VuZXJhdGlvbihD
b2RlJiBjb2RlLCB1bnNpZ25lZCBvcHRMZXZlbCkKIHsKICAgICBUaW1pbmdTY29wZSB0aW1pbmdT
Y29wZSgiQWlyOjpwcmVwYXJlRm9yR2VuZXJhdGlvbiIpOwogICAgIApAQCAtODksMTggKzkwLDIy
IEBAIHZvaWQgcHJlcGFyZUZvckdlbmVyYXRpb24oQ29kZSYgY29kZSkKICAgICAvLyBGb3IgZGVi
dWdnaW5nLCB5b3UgY2FuIHVzZSBzcGlsbEV2ZXJ5dGhpbmcoKSB0byBwdXQgZXZlcnl0aGluZyB0
byB0aGUgc3RhY2sgYmV0d2VlbiBlYWNoIEluc3QuCiAgICAgaWYgKE9wdGlvbnM6OmFpclNwaWxs
c0V2ZXJ5dGhpbmcoKSkKICAgICAgICAgc3BpbGxFdmVyeXRoaW5nKGNvZGUpOwotICAgIGVsc2UK
KyAgICBlbHNlIGlmIChvcHRMZXZlbCA+PSAyICYmIGZhbHNlKSAvLyBPT1BTISEgVGhpcyB3YXMg
anVzdCBmb3IgdGVzdGluZy4KICAgICAgICAgYWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3Jp
bmcoY29kZSk7CisgICAgZWxzZQorICAgICAgICBhbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nh
bihjb2RlKTsKIAogICAgIGlmIChPcHRpb25zOjpsb2dBaXJSZWdpc3RlclByZXNzdXJlKCkpIHsK
ICAgICAgICAgZGF0YUxvZygiUmVnaXN0ZXIgcHJlc3N1cmUgYWZ0ZXIgcmVnaXN0ZXIgYWxsb2Nh
dGlvbjpcbiIpOwogICAgICAgICBsb2dSZWdpc3RlclByZXNzdXJlKGNvZGUpOwogICAgIH0KLQot
ICAgIC8vIFRoaXMgcmVwbGFjZXMgdXNlcyBvZiBzcGlsbCBzbG90cyB3aXRoIHJlZ2lzdGVycyBv
ciBjb25zdGFudHMgaWYgcG9zc2libGUuIEl0IGRvZXMgdGhpcyBieQotICAgIC8vIG1pbmltaXpp
bmcgdGhlIGFtb3VudCB0aGF0IHdlIHBlcnR1cmIgdGhlIGFscmVhZHktY2hvc2VuIHJlZ2lzdGVy
IGFsbG9jYXRpb24uIEl0IG1heSBleHRlbmQKLSAgICAvLyB0aGUgbGl2ZSByYW5nZXMgb2YgcmVn
aXN0ZXJzIHRob3VnaC4KLSAgICBmaXhPYnZpb3VzU3BpbGxzKGNvZGUpOworICAgIAorICAgIGlm
IChvcHRMZXZlbCA+PSAyKSB7CisgICAgICAgIC8vIFRoaXMgcmVwbGFjZXMgdXNlcyBvZiBzcGls
bCBzbG90cyB3aXRoIHJlZ2lzdGVycyBvciBjb25zdGFudHMgaWYgcG9zc2libGUuIEl0IGRvZXMg
dGhpcyBieQorICAgICAgICAvLyBtaW5pbWl6aW5nIHRoZSBhbW91bnQgdGhhdCB3ZSBwZXJ0dXJi
IHRoZSBhbHJlYWR5LWNob3NlbiByZWdpc3RlciBhbGxvY2F0aW9uLiBJdCBtYXkgZXh0ZW5kCisg
ICAgICAgIC8vIHRoZSBsaXZlIHJhbmdlcyBvZiByZWdpc3RlcnMgdGhvdWdoLgorICAgICAgICBm
aXhPYnZpb3VzU3BpbGxzKGNvZGUpOworICAgIH0KIAogICAgIGxvd2VyQWZ0ZXJSZWdBbGxvYyhj
b2RlKTsKIApAQCAtMTY1LDcgKzE3MCw3IEBAIHZvaWQgZ2VuZXJhdGUoQ29kZSYgY29kZSwgQ0Nh
bGxIZWxwZXJzJiAKICAgICAgICAgaWYgKGJsb2NrKQogICAgICAgICAgICAgY29udGV4dC5ibG9j
a0xhYmVsc1tibG9ja10gPSBCb3g8Q0NhbGxIZWxwZXJzOjpMYWJlbD46OmNyZWF0ZSgpOwogICAg
IH0KLSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0PiBibG9j
a0p1bXBzKGNvZGUuc2l6ZSgpKTsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgQ0NhbGxIZWxw
ZXJzOjpKdW1wTGlzdD4gYmxvY2tKdW1wcyhjb2RlLnNpemUoKSk7CiAKICAgICBhdXRvIGxpbmsg
PSBbJl0gKENDYWxsSGVscGVyczo6SnVtcCBqdW1wLCBCYXNpY0Jsb2NrKiB0YXJnZXQpIHsKICAg
ICAgICAgaWYgKGNvbnRleHQuYmxvY2tMYWJlbHNbdGFyZ2V0XS0+aXNTZXQoKSkgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuaAkocmV2aXNpb24gMjE0
NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjcsNiArMjcsOCBAQAogCiAjaWYgRU5BQkxFKEIzX0pJVCkKIAorI2lu
Y2x1ZGUgIkIzQ29tbW9uLmgiCisKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDQ2FsbEhlbHBl
cnM7CkBAIC0zNyw3ICszOSw3IEBAIGNsYXNzIENvZGU7CiAKIC8vIFRoaXMgdGFrZXMgYW4gQWly
OjpDb2RlIHRoYXQgaGFzbid0IGhhZCBhbnkgc3RhY2sgYWxsb2NhdGlvbiBhbmQgb3B0aW9uYWxs
eSBoYXNuJ3QgaGFkIGFueQogLy8gcmVnaXN0ZXIgYWxsb2NhdGlvbiBhbmQgZG9lcyBib3RoIG9m
IHRob3NlIHRoaW5ncy4KLUpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJlcGFyZUZvckdlbmVyYXRp
b24oQ29kZSYpOworSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmVwYXJlRm9yR2VuZXJhdGlvbihD
b2RlJiwgdW5zaWduZWQgb3B0TGV2ZWwgPSBkZWZhdWx0T3B0TGV2ZWwoKSk7CiAKIC8vIFRoaXMg
Z2VuZXJhdGVzIHRoZSBjb2RlIHVzaW5nIHRoZSBnaXZlbiBDQ2FsbEhlbHBlcnMgaW5zdGFuY2Uu
IE5vdGUgdGhhdCB0aGlzIG1heSBjYWxsIGNhbGxiYWNrcwogLy8gaW4gdGhlIHN1cHBsaWVkIGNv
ZGUgYXMgaXQgaXMgZ2VuZXJhdGluZy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyR2VuZXJhdGlvbkNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckdlbmVyYXRpb25Db250ZXh0LmgJKHJldmlzaW9uIDIxNDQyNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGlvbkNvbnRleHQuaAkod29y
a2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBTaGFyZWRU
YXNrPExhdGVQYXRoRnVuY3Rpb24+IExhdGVQYXRoOwogCiAgICAgVmVjdG9yPFJlZlB0cjxMYXRl
UGF0aD4+IGxhdGVQYXRoczsKLSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBCb3g8Q0NhbGxIZWxw
ZXJzOjpMYWJlbD4+IGJsb2NrTGFiZWxzOworICAgIEluZGV4TWFwPEJhc2ljQmxvY2sqLCBCb3g8
Q0NhbGxIZWxwZXJzOjpMYWJlbD4+IGJsb2NrTGFiZWxzOwogICAgIEJhc2ljQmxvY2sqIGN1cnJl
bnRCbG9jayB7IG51bGxwdHIgfTsKICAgICB1bnNpZ25lZCBpbmRleEluQmxvY2sgeyBVSU5UX01B
WCB9OwogICAgIENvZGUqIGNvZGUgeyBudWxscHRyIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwCShyZXZp
c2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyQWZ0
ZXJSZWdBbGxvYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDExIEBAIHZvaWQgbG93
ZXJBZnRlclJlZ0FsbG9jKENvZGUmIGNvZGUpCiAKICAgICBpZiAodmVyYm9zZSkKICAgICAgICAg
ZGF0YUxvZygiQ29kZSBiZWZvcmUgbG93ZXJBZnRlclJlZ0FsbG9jOlxuIiwgY29kZSk7CisgICAg
CisgICAgLy8gRklYTUU6CisgICAgLy8gMSkgVGhpcyBzaG91bGQgYmFpbCBlYXJseSBpZiB0aGVy
ZSBhcmUgbm8gU2h1ZmZsZXMgb3IgQ29sZENDYWxscy4gKE9PUFMhISBuZWVkIGJ1ZyB1cmwpCisg
ICAgLy8gMikgV2Ugc2hvdWxkIG5vdCBpbnRyb2R1Y2UgU2h1ZmZsZXMgZm9yIG5vcm1hbCBjYWxs
cy4gKE9PUFMhISBuZWVkIGJ1ZyB1cmwpCisgICAgLy8gMykgV2Ugc2hvdWxkIGVtaXQgQ29sZEND
YWxsIG9ubHkgYXQgb3B0TGV2ZWw9PTEuIChPT1BTISEgbmVlZCBidWcgdXJsKQogCiAgICAgSGFz
aE1hcDxJbnN0KiwgUmVnaXN0ZXJTZXQ+IHVzZWRSZWdpc3RlcnM7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJFbnRyeVN3aXRjaC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlckVudHJ5U3dpdGNoLmNwcAko
cmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dl
ckVudHJ5U3dpdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsNyArODIsNyBAQCB2b2lkIGxv
d2VyRW50cnlTd2l0Y2goQ29kZSYgY29kZSkKICAgICAvLyBOb3cgZHVwbGljYXRlIHRoZW0uCiAg
ICAgVmVjdG9yPEZyZXF1ZW50ZWRCbG9jaz4gZW50cnlwb2ludHM7CiAgICAgZW50cnlwb2ludHMu
YXBwZW5kKEZyZXF1ZW50ZWRCbG9jayhjb2RlWzBdLCBlbnRyeXBvaW50RnJlcXVlbmNpZXNbMF0p
KTsKLSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBCYXNpY0Jsb2NrKj4gbWFwKGNvZGUuc2l6ZSgp
KTsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgQmFzaWNCbG9jayo+IG1hcChjb2RlLnNpemUo
KSk7CiAgICAgZm9yICh1bnNpZ25lZCBlbnRyeXBvaW50SW5kZXggPSAxOyBlbnRyeXBvaW50SW5k
ZXggPCBjb2RlLnByb2MoKS5udW1FbnRyeXBvaW50cygpOyArK2VudHJ5cG9pbnRJbmRleCkgewog
ICAgICAgICBtYXAuY2xlYXIoKTsKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IHdv
cmtsaXN0LnNlZW4oKS52YWx1ZXMoY29kZSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHdvcmtpbmcgY29weSkK
QEAgLTY0OSw3ICs2NDksNyBAQCBNb3ZlMzIgVTpHOjMyLCBaRDpHOjMyCiBNb3ZlMzIgVTpHOjMy
LCBaRDpHOjMyLCBTOkc6MzIKICAgICBBZGRyLCBBZGRyLCBUbXAKIAotU3RvcmVaZXJvMzIgVTpH
OjMyCitTdG9yZVplcm8zMiBEOkc6MzIKICAgICBBZGRyCiAgICAgSW5kZXgKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdMaXZlbmVzcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnTGl2ZW5lc3MuaAkocmV2aXNpb24g
MjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdMaXZlbmVzcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiQWlyQmFzaWNCbG9j
ay5oIgogI2luY2x1ZGUgIkFpckNvZGUuaCIKICNpbmNsdWRlICJBaXJJbnN0LmgiCisjaW5jbHVk
ZSAiQWlyTGl2ZW5lc3MuaCIKICNpbmNsdWRlICJSZWdpc3RlclNldC5oIgogCiBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CkBAIC01NCw2ICs1NSwxOSBAQCBw
dWJsaWM6CiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgLy8gSWYgeW91
IGNvbXB1dGVkIFRtcCBsaXZlbmVzcyBmb3Igc29tZSBiYW5rLCB5b3UgY2FuIHVzZSByZWcgbGl2
ZW5lc3MgdG8gZmlsbCBpbiB0aGUgYmxhbmtzLgorICAgICAgICAvLyBOb3RlIHRoYXQgd2hhdCBo
YXBwZW5zIHRvIHRoZSByZWdpc3RlcnMgbm90IGJlbG9uZ2luZyB0byB0aGUgYmFuayBpcyBhcmJp
dHJhcnkgLSB0aGV5IG1heSBnZXQKKyAgICAgICAgLy8gc2V0IG9yIG5vdC4KKyAgICAgICAgdGVt
cGxhdGU8QmFuayBiYW5rPgorICAgICAgICBMb2NhbENhbGMoVG1wTGl2ZW5lc3M8YmFuaz4mIGxp
dmVuZXNzLCBCYXNpY0Jsb2NrKiBibG9jaykKKyAgICAgICAgICAgIDogbV9ibG9jayhibG9jaykK
KyAgICAgICAgeworICAgICAgICAgICAgZm9yIChUbXAgdG1wIDogbGl2ZW5lc3MubGl2ZUF0VGFp
bChibG9jaykpIHsKKyAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkpCisgICAgICAgICAg
ICAgICAgICAgIG1fd29ya3NldC5zZXQodG1wLnJlZygpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICAKICAgICAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGxpdmUoKSBjb25zdAog
ICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gbV93b3Jrc2V0OwpAQCAtODQsOCArOTgsOCBA
QCBwdWJsaWM6CiAgICAgfQogICAgIAogcHJpdmF0ZToKLSAgICBJbmRleE1hcDxCYXNpY0Jsb2Nr
LCBSZWdpc3RlclNldD4gbV9saXZlQXRIZWFkOwotICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIFJl
Z2lzdGVyU2V0PiBtX2xpdmVBdFRhaWw7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jayosIFJlZ2lz
dGVyU2V0PiBtX2xpdmVBdEhlYWQ7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jayosIFJlZ2lzdGVy
U2V0PiBtX2xpdmVBdFRhaWw7CiB9OwogCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWly
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2
ZXJ5dGhpbmcuY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMw
LDcgQEAKIAogI2luY2x1ZGUgIkFpckFyZ0lubGluZXMuaCIKICNpbmNsdWRlICJBaXJDb2RlLmgi
CisjaW5jbHVkZSAiQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCIKICNpbmNsdWRlICJBaXJJ
bnNlcnRpb25TZXQuaCIKICNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkFp
ckxpdmVuZXNzLmgiCkBAIC00Niw3ICs0Nyw3IEBAIHZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUm
IGNvZGUpCiAgICAgcGFkSW50ZXJmZXJlbmNlKGNvZGUpOwogCiAgICAgLy8gV2Ugd2FudCB0byBr
bm93IHRoZSBzZXQgb2YgcmVnaXN0ZXJzIHVzZWQgYXQgZXZlcnkgcG9pbnQgaW4gZXZlcnkgYmFz
aWMgYmxvY2suCi0gICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgVmVjdG9yPFJlZ2lzdGVyU2V0Pj4g
dXNlZFJlZ2lzdGVycyhjb2RlLnNpemUoKSk7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jayosIFZl
Y3RvcjxSZWdpc3RlclNldD4+IHVzZWRSZWdpc3RlcnMoY29kZS5zaXplKCkpOwogICAgIEdQTGl2
ZW5lc3MgZ3BMaXZlbmVzcyhjb2RlKTsKICAgICBGUExpdmVuZXNzIGZwTGl2ZW5lc3MoY29kZSk7
CiAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKQEAgLTE3MywxMCArMTc0LDEz
IEBAIHZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUmIGNvZGUpCiAgICAgICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGNob3NlblJlZyk7CiAKICAgICAgICAgICAgICAgICAgICAgdG1wID0g
VG1wKGNob3NlblJlZyk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICBpZiAocm9sZSA9PSBBcmc6OlNjcmF0Y2gpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47CiAKICAgICAgICAgICAgICAgICAgICAgT3Bjb2RlIG1vdmUgPSBiYW5rID09IEdQID8gTW92
ZSA6IE1vdmVEb3VibGU7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlVc2Uo
cm9sZSkgJiYgcm9sZSAhPSBBcmc6OlNjcmF0Y2gpCisgICAgICAgICAgICAgICAgICAgIGlmIChB
cmc6OmlzQW55VXNlKHJvbGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0
Lmluc2VydChpbnN0SW5kZXgsIG1vdmUsIGluc3Qub3JpZ2luLCBhcmcsIHRtcCk7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChBcmc6OmlzQW55RGVmKHJvbGUpKQogICAgICAgICAgICAgICAgICAg
ICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydChpbnN0SW5kZXggKyAxLCBtb3ZlLCBpbnN0Lm9yaWdp
biwgdG1wLCBhcmcpOwpAQCAtMTg0LDYgKzE4OCw4IEBAIHZvaWQgc3BpbGxFdmVyeXRoaW5nKENv
ZGUmIGNvZGUpCiAgICAgICAgIH0KICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2sp
OwogICAgIH0KKyAgICAKKyAgICBmaXhTcGlsbHNBZnRlclRlcm1pbmFscyhjb2RlKTsKIH0KIAog
fSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJUbXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyVG1wLmNwcAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJUbXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDggKzI4LDE1IEBACiAK
ICNpZiBFTkFCTEUoQjNfSklUKQogCisjaW5jbHVkZSAiQWlyVG1wSW5saW5lcy5oIgorCiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CiAKK3RlbXBsYXRlPD4g
Y29uc3QgY2hhciogY29uc3QgVG1wOjpJbmRleGVkPEdQPjo6ZHVtcFByZWZpeCA9ICIldG1wIjsK
K3RlbXBsYXRlPD4gY29uc3QgY2hhciogY29uc3QgVG1wOjpJbmRleGVkPEZQPjo6ZHVtcFByZWZp
eCA9ICIlZnRtcCI7Cit0ZW1wbGF0ZTw+IGNvbnN0IGNoYXIqIGNvbnN0IFRtcDo6QWJzb2x1dGVs
eUluZGV4ZWQ8R1A+OjpkdW1wUHJlZml4ID0gIiVhYnMiOwordGVtcGxhdGU8PiBjb25zdCBjaGFy
KiBjb25zdCBUbXA6OkFic29sdXRlbHlJbmRleGVkPEZQPjo6ZHVtcFByZWZpeCA9ICIlZmFicyI7
CisKIHZvaWQgVG1wOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgaWYgKCEq
dGhpcykgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCShyZXZpc2lv
biAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTc0LDYgKzc0LDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmVzdWx0Lm1fdmFsdWUg
PSBlbmNvZGVGUFRtcChpbmRleCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQorICAg
IAorICAgIHN0YXRpYyBUbXAgdG1wRm9ySW5kZXgoQmFuayBiYW5rLCB1bnNpZ25lZCBpbmRleCkK
KyAgICB7CisgICAgICAgIGlmIChiYW5rID09IEdQKQorICAgICAgICAgICAgcmV0dXJuIGdwVG1w
Rm9ySW5kZXgoaW5kZXgpOworICAgICAgICBBU1NFUlQoYmFuayA9PSBGUCk7CisgICAgICAgIHJl
dHVybiBmcFRtcEZvckluZGV4KGluZGV4KTsKKyAgICB9CiAKICAgICBleHBsaWNpdCBvcGVyYXRv
ciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX3ZhbHVlOyB9CiAgICAgCkBAIC0xNTQsNyArMTYy
LDE2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBncFRtcEluZGV4KCk7CiAgICAgICAg
IHJldHVybiBmcFRtcEluZGV4KCk7CiAgICAgfQotCisgICAgCisgICAgdGVtcGxhdGU8QmFuayBi
YW5rPiBjbGFzcyBJbmRleGVkOworICAgIHRlbXBsYXRlPEJhbmsgYmFuaz4gY2xhc3MgQWJzb2x1
dGVseUluZGV4ZWQ7CisgICAgCisgICAgdGVtcGxhdGU8QmFuayBiYW5rPgorICAgIEluZGV4ZWQ8
YmFuaz4gaW5kZXhlZCgpIGNvbnN0OworICAgIAorICAgIHRlbXBsYXRlPEJhbmsgYmFuaz4KKyAg
ICBBYnNvbHV0ZWx5SW5kZXhlZDxiYW5rPiBhYnNvbHV0ZWx5SW5kZXhlZCgpIGNvbnN0OworICAg
IAogICAgIGJvb2wgaXNBbGl2ZSgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gISEqdGhp
czsKQEAgLTE5NSw2ICsyMTIsOCBAQCBwdWJsaWM6CiAgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0g
c3RhdGljX2Nhc3Q8aW50PihpbmRleCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQor
ICAgIAorICAgIHN0YXRpYyBUbXAgdG1wRm9yQWJzb2x1dGVJbmRleChCYW5rLCB1bnNpZ25lZCk7
CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBlbmNvZGVHUCh1bnNpZ25lZCBpbmRleCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wSW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wSW5saW5lcy5oCShyZXZp
c2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcElubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtOTIsNiArOTIsNTggQEAgc3RydWN0IEFic29sdXRlVG1w
TWFwcGVyPEZQPiB7CiAgICAgfQogfTsKIAordGVtcGxhdGU8QmFuayB0aGVCYW5rPgorY2xhc3Mg
VG1wOjpJbmRleGVkIDogcHVibGljIFRtcCB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IGNo
YXIqIGNvbnN0IGR1bXBQcmVmaXg7CisgICAgCisgICAgSW5kZXhlZChUbXAgdG1wKQorICAgICAg
ICA6IFRtcCh0bXApCisgICAgeworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBpbmRleCgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gdG1wSW5kZXgodGhlQmFuayk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8QmFuayB0aGVCYW5rPgorY2xhc3MgVG1wOjpBYnNvbHV0ZWx5SW5kZXhlZCA6
IHB1YmxpYyBUbXAgeworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBkdW1w
UHJlZml4OworCisgICAgQWJzb2x1dGVseUluZGV4ZWQoVG1wIHRtcCkKKyAgICAgICAgOiBUbXAo
dG1wKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIEFic29sdXRlVG1wTWFwcGVyPHRoZUJhbms+OjphYnNvbHV0ZUlu
ZGV4KCp0aGlzKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTxCYW5rIHRoZUJhbms+CitUbXA6Oklu
ZGV4ZWQ8dGhlQmFuaz4gVG1wOjppbmRleGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW5kZXhl
ZDx0aGVCYW5rPigqdGhpcyk7Cit9CisKK3RlbXBsYXRlPEJhbmsgdGhlQmFuaz4KK1RtcDo6QWJz
b2x1dGVseUluZGV4ZWQ8dGhlQmFuaz4gVG1wOjphYnNvbHV0ZWx5SW5kZXhlZCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIEFic29sdXRlbHlJbmRleGVkPHRoZUJhbms+KCp0aGlzKTsKK30KKworVG1w
IFRtcDo6dG1wRm9yQWJzb2x1dGVJbmRleChCYW5rIGJhbmssIHVuc2lnbmVkIGluZGV4KQorewor
ICAgIGlmIChiYW5rID09IEdQKQorICAgICAgICByZXR1cm4gQWJzb2x1dGVUbXBNYXBwZXI8R1A+
Ojp0bXBGcm9tQWJzb2x1dGVJbmRleChpbmRleCk7CisgICAgQVNTRVJUKGJhbmsgPT0gRlApOwor
ICAgIHJldHVybiBBYnNvbHV0ZVRtcE1hcHBlcjxGUD46OnRtcEZyb21BYnNvbHV0ZUluZGV4KGlu
ZGV4KTsKK30KKwogfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgogCiAjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJT
ZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0
LmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0
ZXJTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDggKzEwMiwxNiBAQCBwdWJsaWM6CiAgICAg
fQogICAgIAogICAgIC8vIEFsc28gYWxsb3cgYWRkL3JlbW92ZS9jb250YWlucyB0ZXJtaW5vbG9n
eSwgd2hpY2ggbWVhbnMgdGhlIHNhbWUgdGhpbmcgYXMgc2V0L2NsZWFyL2dldC4KLSAgICB2b2lk
IGFkZChSZWcgcmVnKSB7IHNldChyZWcpOyB9Ci0gICAgdm9pZCByZW1vdmUoUmVnIHJlZykgeyBj
bGVhcihyZWcpOyB9CisgICAgYm9vbCBhZGQoUmVnIHJlZykKKyAgICB7CisgICAgICAgIEFTU0VS
VCghIXJlZyk7CisgICAgICAgIHJldHVybiAhbV9iaXRzLnRlc3RBbmRTZXQocmVnLmluZGV4KCkp
OworICAgIH0KKyAgICBib29sIHJlbW92ZShSZWcgcmVnKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KCEhcmVnKTsKKyAgICAgICAgcmV0dXJuIG1fYml0cy50ZXN0QW5kQ2xlYXIocmVnLmluZGV4KCkp
OworICAgIH0KICAgICBib29sIGNvbnRhaW5zKFJlZyByZWcpIGNvbnN0IHsgcmV0dXJuIGdldChy
ZWcpOyB9CiAgICAgCiAgICAgdm9pZCBtZXJnZShjb25zdCBSZWdpc3RlclNldCYgb3RoZXIpIHsg
bV9iaXRzLm1lcmdlKG90aGVyLm1fYml0cyk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjI1LDYgKzIyNSw3IEBA
IHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYoYm9vbCwgdXNlRlRMSklU
LCB0cnVlLCBOb3JtYWwsICJhbGxvd3MgdGhlIEZUTCBKSVQgdG8gYmUgdXNlZCBpZiB0cnVlIikg
XAogICAgIHYoYm9vbCwgdXNlRlRMVEJBQSwgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAg
dihib29sLCB2YWxpZGF0ZUZUTE9TUkV4aXRMaXZlbmVzcywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0
cikgXAorICAgIHYodW5zaWduZWQsIGRlZmF1bHRCM09wdExldmVsLCAyLCBOb3JtYWwsIG51bGxw
dHIpIFwKICAgICB2KGJvb2wsIGIzQWx3YXlzRmFpbHNCZWZvcmVDb21waWxlLCBmYWxzZSwgTm9y
bWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCBiM0Fsd2F5c0ZhaWxzQmVmb3JlTGluaywgZmFs
c2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgZnRsQ3Jhc2hlcywgZmFsc2UsIE5v
cm1hbCwgbnVsbHB0cikgLyogZm9vbC1wcm9vZiB3YXkgb2YgY2hlY2tpbmcgdGhhdCB5b3UgZW5k
ZWQgdXAgaW4gdGhlIEZUTC4gOy0pICovXApAQCAtMzk3LDYgKzM5OCw4IEBAIHR5cGVkZWYgY29u
c3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYoYm9vbCwgbG9nQjNQaGFzZVRpbWVzLCBmYWxz
ZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihkb3VibGUsIHJhcmVCbG9ja1BlbmFsdHksIDAu
MDAxLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGFpclNwaWxsc0V2ZXJ5dGhpbmcs
IGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KGJvb2wsIGFpckxpbmVhclNjYW5WZXJi
b3NlLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdihib29sLCBhaXJMaW5lYXJTY2Fu
U3BpbGxzRXZlcnl0aGluZywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwg
YWlyRm9yY2VCcmlnZ3NBbGxvY2F0b3IsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2
KGJvb2wsIGFpckZvcmNlSVJDQWxsb2NhdG9yLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAg
ICAgdihib29sLCBjb2FsZXNjZVNwaWxsU2xvdHMsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5o
CShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJ
UkdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKIAorI2luY2x1ZGUgIkIzQ29tbW9uLmgiCiAjaW5jbHVkZSAiQjNDb21waWxh
dGlvbi5oIgogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgogI2luY2x1ZGUgIlZNLmgiCkBAIC00
Nyw3ICs0OCw3IEBAIHN0cnVjdCBDb21waWxhdGlvbkNvbnRleHQgewogICAgIENDYWxsSGVscGVy
czo6Q2FsbCBqc0VudHJ5cG9pbnRUb1dhc21FbnRyeXBvaW50Q2FsbDsKIH07CiAKLUV4cGVjdGVk
PHN0ZDo6dW5pcXVlX3B0cjxXYXNtSW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRD
b21waWxlKFZNJiwgQ29tcGlsYXRpb25Db250ZXh0JiwgY29uc3QgdWludDhfdCosIHNpemVfdCwg
Y29uc3QgU2lnbmF0dXJlKiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgY29uc3Qg
TW9kdWxlSW5mb3JtYXRpb24mLCBjb25zdCBWZWN0b3I8U2lnbmF0dXJlSW5kZXg+JiwgdW5zaWdu
ZWQgb3B0TGV2ZWwgPSAxKTsKK0V4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxXYXNtSW50ZXJuYWxG
dW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKFZNJiwgQ29tcGlsYXRpb25Db250ZXh0
JiwgY29uc3QgdWludDhfdCosIHNpemVfdCwgY29uc3QgU2lnbmF0dXJlKiwgVmVjdG9yPFVubGlu
a2VkV2FzbVRvV2FzbUNhbGw+JiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBjb25zdCBWZWN0
b3I8U2lnbmF0dXJlSW5kZXg+JiwgdW5zaWduZWQgb3B0TGV2ZWwgPSBCMzo6ZGVmYXVsdE9wdExl
dmVsKCkpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCkluZGV4OiBTb3VyY2UvV1RG
L1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
V1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJj
ZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIz
LDYgKzIzLDggQEAKIC8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCiAJCTBGMEQ4NUI0
MTcyMzRDQzEwMDMzODIxMCAvKiBOb0xvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEQ4NUIzMTcyMzRDQjEwMDMzODIxMCAvKiBOb0xvY2suaCAq
LzsgfTsKIAkJMEYwRkNEREUxREQxNjdGOTAwQ0NBQjUzIC8qIExvY2tBbGdvcml0aG0uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEZDREREMUREMTY3
RjkwMENDQUI1MyAvKiBMb2NrQWxnb3JpdGhtLmggKi87IH07CisJCTBGMkFDNTYxMUU4OUY3MEMw
MDAxRUUzRiAvKiBSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyQUM1NjAxRTg5RjcwQzAwMDFFRTNGIC8qIFJhbmdlLmggKi87IH07CisJCTBG
MkFDNTYzMUU4QTAxNDkwMDAxRUUzRiAvKiBJbmRleEtleVR5cGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkFDNTYyMUU4QTAxNDkwMDAxRUUzRiAv
KiBJbmRleEtleVR5cGUuaCAqLzsgfTsKIAkJMEYyQjY2QTYxN0I2QjRGQjAwQTdBRTNGIC8qIERl
ZmVycmFibGVSZWZDb3VudGVkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjJCNjZBNDE3QjZCNEY3MDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50
ZWQuaCAqLzsgfTsKIAkJMEYyQjY2QTcxN0I2QjRGRDAwQTdBRTNGIC8qIEZsaXBCeXRlcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QTUxN0I2
QjRGNzAwQTdBRTNGIC8qIEZsaXBCeXRlcy5oICovOyB9OwogCQkwRjMwQkE5MDFFNzg3MDhFMDAy
Q0E4NDcgLyogR2xvYmFsVmVyc2lvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjMwQkE4QTFFNzg3MDhFMDAyQ0E4NDcgLyogR2xvYmFsVmVyc2lv
bi5jcHAgKi87IH07CkBAIC00MDgsNiArNDEwLDggQEAKIC8qIEJlZ2luIFBCWEZpbGVSZWZlcmVu
Y2Ugc2VjdGlvbiAqLwogCQkwRjBEODVCMzE3MjM0Q0IxMDAzMzgyMTAgLyogTm9Mb2NrLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IE5vTG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBG
Q0RERDFERDE2N0Y5MDBDQ0FCNTMgLyogTG9ja0FsZ29yaXRobS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBMb2NrQWxnb3JpdGhtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGMkFDNTYwMUU4OUY3MEMwMDAxRUUzRiAvKiBSYW5nZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSYW5nZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjJBQzU2MjFFOEEwMTQ5MDAwMUVFM0YgLyogSW5kZXhLZXlUeXBlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZGV4S2V5VHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjJCNjZBNDE3QjZCNEY3MDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50
ZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGVmZXJyYWJsZVJlZkNvdW50ZWQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQjY2QTUxN0I2QjRGNzAwQTdBRTNGIC8qIEZsaXBCeXRlcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBGbGlwQnl0ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYzMDBCN0QxOEFCNDhCNDAwQTZENzJFIC8qIEhhc2hNZXRob2QuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSGFzaE1ldGhvZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTAxOCwxMCAr
MTAyMiwxMSBAQAogCQkJCUE4QTQ3MkJBMTUxQTgyNUEwMDQxMjNGRiAvKiBIYXNoVHJhaXRzLmgg
Ki8sCiAJCQkJQThBNDcyQkIxNTFBODI1QTAwNDEyM0ZGIC8qIEhleE51bWJlci5oICovLAogCQkJ
CUZFODkyNUFGMUQwMERBRUMwMDQ2OTA3RSAvKiBJbmRlbnRlci5oICovLAotCQkJCTlDNjdDNTQy
NTg5MzQ4RTI4NUI0OTY5OSAvKiBJbmRleGVkQ29udGFpbmVySXRlcmF0b3IuaCAqLywKKwkJCQkw
RjJBQzU2MjFFOEEwMTQ5MDAwMUVFM0YgLyogSW5kZXhLZXlUeXBlLmggKi8sCiAJCQkJNUI0MzM4
M0E1RDBCNDYzQzk0MzNEOTMzIC8qIEluZGV4TWFwLmggKi8sCiAJCQkJMzEzN0UxRDdEQkQ4NEFD
MzhGQUU0RDM0IC8qIEluZGV4U2V0LmggKi8sCiAJCQkJMjY4NEQ0MzUxQzAwMEQ0MDAwODFENjYz
IC8qIEluZGV4U3BhcnNlU2V0LmggKi8sCisJCQkJOUM2N0M1NDI1ODkzNDhFMjg1QjQ5Njk5IC8q
IEluZGV4ZWRDb250YWluZXJJdGVyYXRvci5oICovLAogCQkJCUE4QTQ3MkJDMTUxQTgyNUEwMDQx
MjNGRiAvKiBJbmxpbmVBU00uaCAqLywKIAkJCQlBNzBEQTA4MjE3OTlGMDREMDA1MjlBOUIgLyog
SW5zZXJ0aW9uLmggKi8sCiAJCQkJN0NERDdGRjcxODZEMjkxRTAwNzQzM0NEIC8qIEl0ZXJhdG9y
QWRhcHRvcnMuaCAqLywKQEAgLTExMDAsNiArMTEwNSw3IEBACiAJCQkJQThBNDcyRkIxNTFBODI1
QjAwNDEyM0ZGIC8qIFJhbmRvbU51bWJlci5jcHAgKi8sCiAJCQkJQThBNDcyRkMxNTFBODI1QjAw
NDEyM0ZGIC8qIFJhbmRvbU51bWJlci5oICovLAogCQkJCUE4QTQ3MkZEMTUxQTgyNUIwMDQxMjNG
RiAvKiBSYW5kb21OdW1iZXJTZWVkLmggKi8sCisJCQkJMEYyQUM1NjAxRTg5RjcwQzAwMDFFRTNG
IC8qIFJhbmdlLmggKi8sCiAJCQkJMEY3MjVDQUIxQzUwNDYxNjAwQUQ5NDNBIC8qIFJhbmdlU2V0
LmggKi8sCiAJCQkJMEY4NzEwNTkxNjY0M0YxOTAwOTBCMEFEIC8qIFJhd1BvaW50ZXIuaCAqLywK
IAkJCQkwRkRFODdGNjFERkQwN0NDMDA2NEMzOTAgLyogUmVjdXJzaXZlTG9ja0FkYXB0ZXIuaCAq
LywKQEAgLTE0ODUsNiArMTQ5MSw3IEBACiAJCQkJQzkxNkI5NzVGMDJGNEY3RThCNEFCMTJEIC8q
IEluZGV4TWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlDOEIwRTFBMUUwMUE0ODZFQjk1RTBEMTEg
LyogSW5kZXhTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTI2ODRENDM2MUMwMDBENDAwMDgxRDY2
MyAvKiBJbmRleFNwYXJzZVNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQUM1NjMxRThBMDE0
OTAwMDFFRTNGIC8qIEluZGV4S2V5VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczREMx
NTFBODI1QjAwNDEyM0ZGIC8qIElubGluZUFTTS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwREEw
ODQxNzk5RjA0RDAwNTI5QTlCIC8qIEluc2VydGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjYx
NDdCMEExNUREQ0NEQzAwRERCOTA3IC8qIEludGVnZXJUb1N0cmluZ0NvbnZlcnNpb24uaCBpbiBI
ZWFkZXJzICovLApAQCAtMTU4Niw2ICsxNTkzLDcgQEAKIAkJCQk0MzBCNDc4OTFBQUFBQzFBMDAx
MjIzREEgLyogU3RyaW5nQ29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQzRTE1MUE4
MjVCMDA0MTIzRkYgLyogU3RyaW5nQ29uY2F0ZW5hdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTdD
RDRDMjcwMUUyQzgyQjkwMDkyOTQ3MCAvKiBTdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGMkFDNTYxMUU4OUY3MEMwMDAxRUUzRiAvKiBSYW5nZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQThBNDc0MkMxNTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ0V4dHJhcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0M0YxNTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ0hh
c2guaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDg3NDU0MTdBMEJEQUUwMEZBMDRDQiAvKiBTdHJp
bmdIYXNoRHVtcENvbnRleHQuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dURi93dGYv
Q01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50
eHQJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC0xMDAsNiArMTAwLDcgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgUkFN
U2l6ZS5oCiAgICAgUmFuZG9tTnVtYmVyLmgKICAgICBSYW5kb21OdW1iZXJTZWVkLmgKKyAgICBS
YW5nZS5oCiAgICAgUmFuZ2VTZXQuaAogICAgIFJhd1BvaW50ZXIuaAogICAgIFJlY3Vyc2l2ZUxv
Y2tBZGFwdGVyLmgKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0RlcXVlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvRGVxdWUuaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL1dURi93
dGYvRGVxdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDcsIDIwMDgsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CkBAIC04OSw2ICs4OSwxOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBy
ZW1vdmVMYXN0KCk7CiAgICAgdm9pZCByZW1vdmUoaXRlcmF0b3ImKTsKICAgICB2b2lkIHJlbW92
ZShjb25zdF9pdGVyYXRvciYpOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+IHZv
aWQgcmVtb3ZlQWxsTWF0Y2hpbmcoY29uc3QgRnVuYyYpOworICAgIAorICAgIC8vIFRoaXMgaXMg
YSBwcmlvcml0eSBlbnF1ZXVlLiBUaGUgY2FsbGJhY2sgaXMgZ2l2ZW4gYSB2YWx1ZSwgYW5kIGlm
IGl0IHJldHVybnMgdHJ1ZSwgdGhlbiB0aGlzCisgICAgLy8gd2lsbCBwdXQgdGhlIGFwcGVuZGVk
IHZhbHVlIGJlZm9yZSB0aGF0IHZhbHVlLiBJdCB3aWxsIGtlZXAgYnViYmxpbmcgdW50aWwgdGhl
IGNhbGxiYWNrIHJldHVybnMKKyAgICAvLyBmYWxzZSBvciB0aGUgdmFsdWUgZW5kcyB1cCBhdCB0
aGUgaGVhZCBvZiB0aGUgcXVldWUuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgdHlwZW5hbWUg
RnVuYz4KKyAgICB2b2lkIGFwcGVuZEFuZEJ1YmJsZShVJiYsIGNvbnN0IEZ1bmMmKTsKKyAgICAK
KyAgICAvLyBSZW1vdmUgYW5kIHJldHVybiB0aGUgbGFzdCBlbGVtZW50IGZvciB3aGljaCB0aGUg
Y2FsbGJhY2sgcmV0dXJucyB0cnVlLiBSZXR1cm5zIGEgbnVsbCB2ZXJzaW9uIG9mCisgICAgLy8g
VCBpZiBpdCB0aGUgY2FsbGJhY2sgYWx3YXlzIHJldHVybnMgZmFsc2UuCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuYz4KKyAgICBUIHRha2VMYXN0KGNvbnN0IEZ1bmMmKTsKIAogICAgIHZvaWQg
Y2xlYXIoKTsKIApAQCAtNTI0LDYgKzUzNyw1NSBAQCBpbmxpbmUgdm9pZCBEZXF1ZTxULCBpbmxp
bmVDYXBhY2l0eT46OnJlCiAgICAgY2hlY2tWYWxpZGl0eSgpOwogfQogCit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgor
aW5saW5lIHZvaWQgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+OjpyZW1vdmVBbGxNYXRjaGluZyhj
b25zdCBGdW5jJiBmdW5jKQoreworICAgIHNpemVfdCBjb3VudCA9IHNpemUoKTsKKyAgICB3aGls
ZSAoY291bnQtLSkgeworICAgICAgICBUIHZhbHVlID0gdGFrZUZpcnN0KCk7CisgICAgICAgIGlm
ICghZnVuYyh2YWx1ZSkpCisgICAgICAgICAgICBhcHBlbmQoV1RGTW92ZSh2YWx1ZSkpOworICAg
IH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgordGVt
cGxhdGU8dHlwZW5hbWUgVSwgdHlwZW5hbWUgRnVuYz4KK2lubGluZSB2b2lkIERlcXVlPFQsIGlu
bGluZUNhcGFjaXR5Pjo6YXBwZW5kQW5kQnViYmxlKFUmJiB2YWx1ZSwgY29uc3QgRnVuYyYgZnVu
YykKK3sKKyAgICBhcHBlbmQoV1RGTW92ZSh2YWx1ZSkpOworICAgIGl0ZXJhdG9yIGJlZ2luID0g
dGhpcy0+YmVnaW4oKTsKKyAgICBpdGVyYXRvciBpdGVyID0gZW5kKCk7CisgICAgLS1pdGVyOwor
ICAgIHdoaWxlIChpdGVyICE9IGJlZ2luKSB7CisgICAgICAgIGl0ZXJhdG9yIHByZXYgPSBpdGVy
OworICAgICAgICAtLXByZXY7CisgICAgICAgIGlmICghZnVuYygqcHJldikpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIHN0ZDo6c3dhcCgqcHJldiwgKml0ZXIpOworICAgICAgICBpdGVy
ID0gcHJldjsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVD
YXBhY2l0eT4KK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CitpbmxpbmUgVCBEZXF1ZTxULCBpbmxp
bmVDYXBhY2l0eT46OnRha2VMYXN0KGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgdW5zaWduZWQg
Y291bnQgPSAwOworICAgIHVuc2lnbmVkIHNpemUgPSB0aGlzLT5zaXplKCk7CisgICAgd2hpbGUg
KGNvdW50IDwgc2l6ZSkgeworICAgICAgICBUIGNhbmRpZGF0ZSA9IHRha2VMYXN0KCk7CisgICAg
ICAgIGlmIChmdW5jKGNhbmRpZGF0ZSkpIHsKKyAgICAgICAgICAgIHdoaWxlIChjb3VudC0tKQor
ICAgICAgICAgICAgICAgIGFwcGVuZCh0YWtlRmlyc3QoKSk7CisgICAgICAgICAgICByZXR1cm4g
Y2FuZGlkYXRlOworICAgICAgICB9CisgICAgICAgIGNvdW50Kys7CisgICAgICAgIHByZXBlbmQo
V1RGTW92ZShjYW5kaWRhdGUpKTsKKyAgICB9CisgICAgcmV0dXJuIFQoKTsKK30KKwogI2lmZGVm
IE5ERUJVRwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBpbmxp
bmUgdm9pZCBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT46OmNoZWNrVmFsaWRp
dHkoKSBjb25zdCB7IH0KIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0
eT4gaW5saW5lIHZvaWQgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+OjpjaGVj
a1ZhbGlkaXR5KGNvbnN0IERlcXVlSXRlcmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5PiYpIGNv
bnN0IHsgfQpJbmRleDogU291cmNlL1dURi93dGYvSW5kZXhLZXlUeXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvSW5kZXhLZXlUeXBlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L1dURi93dGYvSW5kZXhLZXlUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9u
Y2UKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgSW5k
ZXhLZXlUeXBlIHsKKyAgICBzdGF0aWMgc2l6ZV90IGluZGV4KGNvbnN0IFQmIGtleSkgeyByZXR1
cm4ga2V5LmluZGV4KCk7IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgSW5k
ZXhLZXlUeXBlPFQqPiB7CisgICAgc3RhdGljIHNpemVfdCBpbmRleChUKiBrZXkpIHsgcmV0dXJu
IGtleS0+aW5kZXgoKTsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL0luZGV4TWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSW5kZXhN
YXAuaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL1dURi93dGYvSW5kZXhNYXAuaAkod29y
a2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUg
PHd0Zi9JbmRleEtleVR5cGUuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFj
ZSBXVEYgewpAQCAtNzAsMTggKzcxLDI0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fdmVj
dG9yW2luZGV4XTsKICAgICB9CiAgICAgCi0gICAgVmFsdWUmIG9wZXJhdG9yW10oS2V5KiBrZXkp
CisgICAgVmFsdWUmIG9wZXJhdG9yW10oY29uc3QgS2V5JiBrZXkpCiAgICAgewotICAgICAgICBy
ZXR1cm4gbV92ZWN0b3Jba2V5LT5pbmRleCgpXTsKKyAgICAgICAgcmV0dXJuIG1fdmVjdG9yW0lu
ZGV4S2V5VHlwZTxLZXk+OjppbmRleChrZXkpXTsKICAgICB9CiAgICAgCi0gICAgY29uc3QgVmFs
dWUmIG9wZXJhdG9yW10oS2V5KiBrZXkpIGNvbnN0CisgICAgY29uc3QgVmFsdWUmIG9wZXJhdG9y
W10oY29uc3QgS2V5JiBrZXkpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV92ZWN0b3Jb
a2V5LT5pbmRleCgpXTsKKyAgICAgICAgcmV0dXJuIG1fdmVjdG9yW0luZGV4S2V5VHlwZTxLZXk+
OjppbmRleChrZXkpXTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhcHBlbmQoY29uc3QgS2V5JiBr
ZXksIFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoSW5kZXhLZXlU
eXBlPEtleT46OmluZGV4KGtleSkgPT0gbV92ZWN0b3Iuc2l6ZSgpKTsKKyAgICAgICAgbV92ZWN0
b3IuYXBwZW5kKHZhbHVlKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgVmVjdG9yPFZhbHVlPiBt
X3ZlY3RvcjsKKyAgICBWZWN0b3I8VmFsdWUsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX3Zl
Y3RvcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL1dURi93dGYvSW5k
ZXhTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9JbmRleFNldC5oCShyZXZpc2lv
biAyMTQ0MjcpCisrKyBTb3VyY2UvV1RGL3d0Zi9JbmRleFNldC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSA8d3RmL0JpdFZlY3Rvci5oPgogI2luY2x1ZGUg
PHd0Zi9Db21tYVByaW50ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSW5kZXhLZXlUeXBlLmg+CiAKIG5h
bWVzcGFjZSBXVEYgewogCkBAIC00MiwzMCArNDMsMzAgQEAgcHVibGljOgogICAgIHsKICAgICB9
CiAKLSAgICBib29sIGFkZChUKiB2YWx1ZSkKKyAgICBib29sIGFkZChjb25zdCBUJiB2YWx1ZSkK
ICAgICB7Ci0gICAgICAgIHJldHVybiAhbV9zZXQuc2V0KHZhbHVlLT5pbmRleCgpKTsKKyAgICAg
ICAgcmV0dXJuICFtX3NldC5zZXQoSW5kZXhLZXlUeXBlPFQ+OjppbmRleCh2YWx1ZSkpOwogICAg
IH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhYmxlPgogICAgIGJvb2wgYWRkQWxsKGNv
bnN0IEl0ZXJhYmxlJiBpdGVyYWJsZSkKICAgICB7CiAgICAgICAgIGJvb2wgcmVzdWx0ID0gZmFs
c2U7Ci0gICAgICAgIGZvciAoVCogdmFsdWUgOiBpdGVyYWJsZSkKKyAgICAgICAgZm9yIChjb25z
dCBUJiB2YWx1ZSA6IGl0ZXJhYmxlKQogICAgICAgICAgICAgcmVzdWx0IHw9IGFkZCh2YWx1ZSk7
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgYm9vbCByZW1vdmUoVCogdmFs
dWUpCisgICAgYm9vbCByZW1vdmUoY29uc3QgVCYgdmFsdWUpCiAgICAgewotICAgICAgICByZXR1
cm4gbV9zZXQuY2xlYXIodmFsdWUtPmluZGV4KCkpOworICAgICAgICByZXR1cm4gbV9zZXQuY2xl
YXIoSW5kZXhLZXlUeXBlPFQ+OjppbmRleCh2YWx1ZSkpOwogICAgIH0KIAotICAgIGJvb2wgY29u
dGFpbnMoVCogdmFsdWUpIGNvbnN0CisgICAgYm9vbCBjb250YWlucyhjb25zdCBUJiB2YWx1ZSkg
Y29uc3QKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIHJldHVybiBtX3NldC5nZXQodmFsdWUtPmluZGV4KCkpOworICAgICAgICBy
ZXR1cm4gbV9zZXQuZ2V0KEluZGV4S2V5VHlwZTxUPjo6aW5kZXgodmFsdWUpKTsKICAgICB9CiAK
ICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0CkBAIC0xMDAsNyArMTAxLDcgQEAgcHVibGljOgogICAg
ICAgICAgICAgewogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBUKiBvcGVyYXRvciooKQor
ICAgICAgICAgICAgVCBvcGVyYXRvciooKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
IHJldHVybiBtX2NvbGxlY3Rpb24tPmF0KCptX2l0ZXIpOwogICAgICAgICAgICAgfQpJbmRleDog
U291cmNlL1dURi93dGYvUmFuZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9SYW5n
ZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL1JhbmdlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPGxpbWl0cy5oPgorI2lu
Y2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisK
K25hbWVzcGFjZSBXVEYgeworCisvLyBOb3RlIHRoYXQgdGhlICdiZWdpbicgaXMgaW5jbHVzaXZl
LCB3aGlsZSB0aGUgJ2VuZCcgaXMgZXhjbHVzaXZlLiBUaGVzZSB0d28gcmFuZ2VzIGFyZSBub24t
CisvLyBvdmVybGFwcGluZzoKKy8vCisvLyAgICAgcmFuZ2VBID0gMC4uLjgKKy8vICAgICByYW5n
ZUIgPSA4Li4uMTYKKwordGVtcGxhdGU8dHlwZW5hbWUgUGFzc2VkVHlwZT4KK2NsYXNzIFJhbmdl
IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFBhc3NlZFR5cGUgVHlwZTsKKyAgICAKKyAgICBSYW5n
ZSgpCisgICAgICAgIDogbV9iZWdpbigwKQorICAgICAgICAsIG1fZW5kKDApCisgICAgeworICAg
IH0KKworICAgIGV4cGxpY2l0IFJhbmdlKFR5cGUgdmFsdWUpCisgICAgICAgIDogbV9iZWdpbih2
YWx1ZSkKKyAgICAgICAgLCBtX2VuZCh2YWx1ZSArIDEpCisgICAgeworICAgICAgICBBU1NFUlQo
bV9lbmQgPj0gbV9iZWdpbik7CisgICAgfQorCisgICAgUmFuZ2UoVHlwZSBiZWdpbiwgVHlwZSBl
bmQpCisgICAgICAgIDogbV9iZWdpbihiZWdpbikKKyAgICAgICAgLCBtX2VuZChlbmQpCisgICAg
eworICAgICAgICBBU1NFUlQobV9lbmQgPj0gbV9iZWdpbik7CisgICAgICAgIGlmIChtX2JlZ2lu
ID09IG1fZW5kKSB7CisgICAgICAgICAgICAvLyBDYW5vbmljYWxpemUgZW1wdHkgcmFuZ2VzLgor
ICAgICAgICAgICAgbV9iZWdpbiA9IDA7CisgICAgICAgICAgICBtX2VuZCA9IDA7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBzdGF0aWMgUmFuZ2UgdG9wKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBSYW5nZShzdGQ6Om51bWVyaWNfbGltaXRzPFR5cGU+OjptaW4oKSwgc3RkOjpudW1lcmljX2xp
bWl0czxUeXBlPjo6bWF4KCkpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBS
YW5nZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9iZWdpbiA9PSBvdGhl
ci5tX2JlZ2luCisgICAgICAgICAgICAmJiBtX2VuZCA9PSBvdGhlci5tX2VuZDsKKyAgICB9CisK
KyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgUmFuZ2UmIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKyAgICAKKyAgICBleHBsaWNp
dCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9iZWdpbiAhPSBtX2VuZDsgfQorCisg
ICAgUmFuZ2Ugb3BlcmF0b3J8KGNvbnN0IFJhbmdlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAg
ICAgIGlmICghKnRoaXMpCisgICAgICAgICAgICByZXR1cm4gb3RoZXI7CisgICAgICAgIGlmICgh
b3RoZXIpCisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIHJldHVybiBSYW5nZSgK
KyAgICAgICAgICAgIHN0ZDo6bWluKG1fYmVnaW4sIG90aGVyLm1fYmVnaW4pLAorICAgICAgICAg
ICAgc3RkOjptYXgobV9lbmQsIG90aGVyLm1fZW5kKSk7CisgICAgfQorICAgIAorICAgIFJhbmdl
JiBvcGVyYXRvcnw9KGNvbnN0IFJhbmdlJiBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiAq
dGhpcyA9ICp0aGlzIHwgb3RoZXI7CisgICAgfQorICAgIAorICAgIFR5cGUgYmVnaW4oKSBjb25z
dCB7IHJldHVybiBtX2JlZ2luOyB9CisgICAgVHlwZSBlbmQoKSBjb25zdCB7IHJldHVybiBtX2Vu
ZDsgfQorCisgICAgYm9vbCBvdmVybGFwcyhjb25zdCBSYW5nZSYgb3RoZXIpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gV1RGOjpyYW5nZXNPdmVybGFwKG1fYmVnaW4sIG1fZW5kLCBvdGhl
ci5tX2JlZ2luLCBvdGhlci5tX2VuZCk7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoKnRoaXMgPT0gUmFuZ2UoKSkgewor
ICAgICAgICAgICAgb3V0LnByaW50KCJCb3R0b20iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoKnRoaXMgPT0gdG9wKCkpIHsKKyAgICAgICAgICAgIG91dC5w
cmludCgiVG9wIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYg
KG1fYmVnaW4gPT0gbV9lbmQgKyAxKSB7CisgICAgICAgICAgICBvdXQucHJpbnQobV9iZWdpbik7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgb3V0LnByaW50KG1fYmVn
aW4sICIuLi4iLCBtX2VuZCk7CisgICAgfQorCitwcml2YXRlOgorICAgIFR5cGUgbV9iZWdpbjsK
KyAgICBUeXBlIG1fZW5kOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6
UmFuZ2U7CisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1JhbmdlU2V0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvUmFuZ2VTZXQuaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL1dU
Ri93dGYvUmFuZ2VTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsNiArNzcsMTAgQEAgcHVibGlj
OgogICAgICAgICBtX2lzQ29tcGFjdCA9IGZhbHNlOwogCiAgICAgICAgIC8vIFdlIGFwcGVuZCB3
aXRob3V0IGNvbXBhY3Rpbmcgb25seSBpZiBkb2luZyBzbyBpcyBndWFyYW50ZWVkIG5vdCB0byBy
ZXNpemUgdGhlIHZlY3Rvci4KKyAgICAgICAgLy8gRklYTUU6IFRoaXMgaGV1cmlzdGljIGlzIGFs
bW9zdCBjZXJ0YWlubHkgd3JvbmcsIGJlY2F1c2Ugd2UgZG9uJ3QgY29udHJvbCB0aGUgY2FwYWNp
dHkuIEkKKyAgICAgICAgLy8gdGhpbmsgdGhhdCB0aGlzIG1lYW5zIHRoYXQgd2Ugd2lsbCBzb21l
dGltZXMgYmUgcmFnZS1jb21wYWN0aW5nIHdoZW4gd2UgYXJlIGp1c3Qgc2h5IG9mIHRoZQorICAg
ICAgICAvLyBjYXBhY2l0eS4KKyAgICAgICAgLy8gT09QUzogbmVlZCBidWcgdXJsCiAgICAgICAg
IGlmIChtX3Jhbmdlcy5zaXplKCkgKyAxIDwgbV9yYW5nZXMuY2FwYWNpdHkoKSkgewogICAgICAg
ICAgICAgbV9yYW5nZXMuYXBwZW5kKHJhbmdlKTsKICAgICAgICAgICAgIHJldHVybjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305830</attachid>
            <date>2017-03-29 21:31:22 -0700</date>
            <delta_ts>2017-03-29 21:52:43 -0700</delta_ts>
            <desc>not failing so many tests anymore</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>114507</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIxNDQyNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMTQwLDcgKzE0MCw2IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYjMvQjNG
b2xkUGF0aENvbnN0YW50cy5jcHAKICAgICBiMy9CM0ZyZXF1ZW5jeUNsYXNzLmNwcAogICAgIGIz
L0IzR2VuZXJhdGUuY3BwCi0gICAgYjMvQjNIZWFwUmFuZ2UuY3BwCiAgICAgYjMvQjNJbmZlclN3
aXRjaGVzLmNwcAogICAgIGIzL0IzSW5zZXJ0aW9uU2V0LmNwcAogICAgIGIzL0IzS2luZC5jcHAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTgzLDYgKzE4MywxMCBAQAogCQkwRjI1RjFCMjE4MTYz
NUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1RjFBQjE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xv
d1BhdGhDYWxsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEYyNUYxQjMxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1RjFBQzE4
MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5LmNwcCAqLzsgfTsKIAkJMEYyNUYx
QjQxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNUYxQUQxODE2MzVGMzAwNTIyRjM5
IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGMkFDNTY2MUU4QTBCNzcwMDAxRUUzRiAvKiBBaXJGaXhTcGls
bHNBZnRlclRlcm1pbmFscy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjJBQzU2NDFFOEEwQjc2MDAwMUVFM0YgLyogQWlyRml4U3BpbGxzQWZ0ZXJU
ZXJtaW5hbHMuY3BwICovOyB9OworCQkwRjJBQzU2NzFFOEEwQjc5MDAwMUVFM0YgLyogQWlyRml4
U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMkFDNTY1MUU4QTBCNzYwMDAxRUUzRiAvKiBBaXJGaXhTcGlsbHNBZnRl
clRlcm1pbmFscy5oICovOyB9OworCQkwRjJBQzU2QTFFOEEwQkQzMDAwMUVFM0YgLyogQWlyQWxs
b2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQUM1NjgxRThBMEJEMTAwMDFFRTNGIC8qIEFpckFsbG9j
YXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcCAqLzsgfTsKKwkJMEYyQUM1NkIxRThBMEJENTAw
MDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJBQzU2OTFFOEEwQkQxMDAwMUVF
M0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaCAqLzsgfTsKIAkJMEYyQjY2
QUMxN0I2QjUzRjAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBODE3QjZCNTNEMDBBN0FF
M0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJCNjZBRDE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNv
bWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJCNjZBOTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNv
dW50ZWRJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEYyQjY2QUUxN0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVk
U2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJC
NjZBQTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTY5LDcgKzk3Myw2
IEBACiAJCTBGRUM4NUJDMUJFMTQ2MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0cmVuZ3RoLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUI3MUJF
MTQ2MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0cmVuZ3RoLmNwcCAqLzsgfTsKIAkJMEZFQzg1QkQx
QkUxNDYyRjAwODBGRjc0IC8qIEIzUmVkdWNlU3RyZW5ndGguaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUI4MUJFMTQ2MkYwMDgwRkY3NCAvKiBC
M1JlZHVjZVN0cmVuZ3RoLmggKi87IH07CiAJCTBGRUM4NUMxMUJFMTY3QTAwMDgwRkY3NCAvKiBC
M0VmZmVjdHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NUJFMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0VmZmVjdHMuaCAqLzsgfTsKLQkJMEZFQzg1
QzIxQkUxNjdBMDAwODBGRjc0IC8qIEIzSGVhcFJhbmdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUJGMUJFMTY3QTAwMDgwRkY3NCAvKiBC
M0hlYXBSYW5nZS5jcHAgKi87IH07CiAJCTBGRUM4NUMzMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hl
YXBSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg1QzAxQkUxNjdBMDAwODBGRjc0IC8qIEIzSGVhcFJhbmdlLmggKi87IH07CiAJCTBGRUM4
NUM1MUJFMTZGNUEwMDgwRkY3NCAvKiBCM0VmZmVjdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1QzQxQkUxNkY1QTAwODBGRjc0IC8qIEIz
RWZmZWN0cy5jcHAgKi87IH07CiAJCTBGRUQ2N0I5MUIyNjI1NkQwMDY2Q0UxNSAvKiBERkdDb25z
dGFudEhvaXN0aW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFRDY3QjcxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0YW50SG9pc3Rp
bmdQaGFzZS5jcHAgKi87IH07CkBAIC0yNzAzLDYgKzI3MDYsMTAgQEAKIAkJMEYyNUYxQUIxODE2
MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBGVExTbG93UGF0aENhbGwuaDsgcGF0aCA9IGZ0bC9GVExTbG93UGF0aENhbGwu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNUYxQUMxODE2MzVGMzAwNTIyRjM5
IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBGVExTbG93UGF0aENhbGxLZXkuY3BwOyBwYXRoID0gZnRsL0ZUTFNsb3dQYXRoQ2Fs
bEtleS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjVGMUFEMTgxNjM1RjMw
MDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gRlRMU2xvd1BhdGhDYWxsS2V5Lmg7IHBhdGggPSBmdGwvRlRMU2xvd1BhdGhDYWxs
S2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkFDNTY0MUU4QTBCNzYwMDAx
RUUzRiAvKiBBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5jcHA7IHBhdGgg
PSBiMy9haXIvQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjJBQzU2NTFFOEEwQjc2MDAwMUVFM0YgLyogQWlyRml4U3BpbGxzQWZ0
ZXJUZXJtaW5hbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyRml4U3Bp
bGxzQWZ0ZXJUZXJtaW5hbHMuaDsgcGF0aCA9IGIzL2Fpci9BaXJGaXhTcGlsbHNBZnRlclRlcm1p
bmFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJBQzU2ODFFOEEwQkQxMDAw
MUVFM0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNj
YW4uY3BwOyBwYXRoID0gYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQUM1NjkxRThBMEJEMTAwMDFFRTNG
IC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmg7IHBhdGgg
PSBiMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQjY2QTgxN0I2QjUzRDAwQTdBRTNGIC8qIEdDSW5jb21pbmdS
ZWZDb3VudGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5jb21pbmdSZWZDb3VudGVkLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkE5MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0lu
Y29taW5nUmVmQ291bnRlZElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR0NJbmNvbWluZ1JlZkNv
dW50ZWRJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkFBMTdC
NkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMzQ5Niw3ICszNTAzLDYgQEAKIAkJMEZFQzg1QjcxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVk
dWNlU3RyZW5ndGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNS
ZWR1Y2VTdHJlbmd0aC5jcHA7IHBhdGggPSBiMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQzg1QjgxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVk
dWNlU3RyZW5ndGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNSZWR1Y2VT
dHJlbmd0aC5oOyBwYXRoID0gYjMvQjNSZWR1Y2VTdHJlbmd0aC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkVDODVCRTFCRTE2N0EwMDA4MEZGNzQgLyogQjNFZmZlY3RzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzRWZmZWN0cy5oOyBwYXRoID0gYjMvQjNF
ZmZlY3RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGRUM4NUJGMUJFMTY3QTAw
MDgwRkY3NCAvKiBCM0hlYXBSYW5nZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBCM0hlYXBSYW5nZS5jcHA7IHBhdGggPSBiMy9CM0hlYXBSYW5nZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUM4NUMwMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hl
YXBSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0hlYXBSYW5nZS5o
OyBwYXRoID0gYjMvQjNIZWFwUmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZFQzg1QzQxQkUxNkY1QTAwODBGRjc0IC8qIEIzRWZmZWN0cy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0VmZmVjdHMuY3BwOyBwYXRoID0gYjMvQjNFZmZlY3Rz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFRDY3QjcxQjI2MjU2RDAwNjZD
RTE1IC8qIERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuY3BwOyBwYXRoID0gZGZn
L0RGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01NDE5LDcgKzU0MjUsNiBAQAogCQkJCTBGRUM4NENGMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0dlbmVyYXRlLmggKi8sCiAJCQkJMEYyQzYzQjUxRTYzNDNFODAwQzEzODM5IC8qIEIzR2VuZXJp
Y0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi8sCiAJCQkJMEZFQzg0RDAxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oICovLAotCQkJCTBGRUM4NUJGMUJFMTY3QTAwMDgw
RkY3NCAvKiBCM0hlYXBSYW5nZS5jcHAgKi8sCiAJCQkJMEZFQzg1QzAxQkUxNjdBMDAwODBGRjc0
IC8qIEIzSGVhcFJhbmdlLmggKi8sCiAJCQkJREM2OUI5OUExRDE1RjkwRjAwMkUzQzAwIC8qIEIz
SW5mZXJTd2l0Y2hlcy5jcHAgKi8sCiAJCQkJREM2OUI5OUIxRDE1RjkwRjAwMkUzQzAwIC8qIEIz
SW5mZXJTd2l0Y2hlcy5oICovLApAQCAtNTUyOCw2ICs1NTMzLDggQEAKIAkJMEZFQzg0QjMxQkRB
Q0Q4ODAwODBGRjc0IC8qIGFpciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCisJCQkJMEYyQUM1NjgxRThBMEJEMTAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0
ZXJzQnlMaW5lYXJTY2FuLmNwcCAqLywKKwkJCQkwRjJBQzU2OTFFOEEwQkQxMDAwMUVFM0YgLyog
QWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaCAqLywKIAkJCQk3OTY1QzIxNDFFNUQ3
OTk2MDBCNzU5MUQgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuY3BwICov
LAogCQkJCTc5NjVDMjE1MUU1RDc5OTYwMEI3NTkxRCAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5
R3JhcGhDb2xvcmluZy5oICovLAogCQkJCTBGRUM4NTQ4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJB
bGxvY2F0ZVN0YWNrLmNwcCAqLywKQEAgLTU1NjEsNiArNTU2OCw4IEBACiAJCQkJMEY0REUxQ0Qx
QzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCAqLywKIAkJCQkyNjJEODVC
NDFDMEQ2NTBGMDA2QUNCNjEgLyogQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmNwcCAqLywK
IAkJCQkyNjJEODVCNTFDMEQ2NTBGMDA2QUNCNjEgLyogQWlyRml4UGFydGlhbFJlZ2lzdGVyU3Rh
bGxzLmggKi8sCisJCQkJMEYyQUM1NjQxRThBMEI3NjAwMDFFRTNGIC8qIEFpckZpeFNwaWxsc0Fm
dGVyVGVybWluYWxzLmNwcCAqLywKKwkJCQkwRjJBQzU2NTFFOEEwQjc2MDAwMUVFM0YgLyogQWly
Rml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCAqLywKIAkJCQkwRkVDODU1MjFCREFDREM3MDA4MEZG
NzQgLyogQWlyRnJlcXVlbnRlZEJsb2NrLmggKi8sCiAJCQkJMEZFQzg1NTMxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckdlbmVyYXRlLmNwcCAqLywKIAkJCQkwRkVDODU1NDFCREFDREM3MDA4MEZGNzQg
LyogQWlyR2VuZXJhdGUuaCAqLywKQEAgLTgxMzksNiArODE0OCw3IEBACiAJCQkJMEZFQzg1MTAx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkVDODUxMjFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0MzQyMkE2MzFDMTU4RTZEMDBFMkVCOTggLyogQjNDb25zdEZsb2F0VmFsdWUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkFDNTZCMUU4QTBCRDUwMDAxRUUzRiAvKiBBaXJBbGxv
Y2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1QjMx
QkRFRDk1NzAwODBGRjc0IC8qIEIzQ29uc3RQdHJWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYzMzhERjYxQkU5M0Q1NTAwMTNDODhGIC8qIEIzQ29uc3RyYWluZWRWYWx1ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyQzYzQjgxRTYzNDNGNzAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2NrSW5z
ZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKQEAgLTkzNjIsNiArOTM3Miw3IEBACiAJCQkJNzA5
RkI4NkExQUUzMzVDNjAwMzlEMDY5IC8qIFdlYWtTZXRDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMTQxNTAxMzMxNTRCQjEzRjAwNUQ4Qzk4IC8qIFdlYWtTZXRJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3MDlGQjg2QzFBRTMzNUM2MDAzOUQwNjkgLyogV2Vha1NldFByb3Rv
dHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQUM1NjcxRThBMEI3OTAwMDFFRTNGIC8qIEFp
ckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JFRDFE
QjU4REFEMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNDMTYxREI1OUNCMjAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5
Q29tcGlsZUVycm9yQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JF
RjFEQjU4REFEMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90b3R5cGUuaCBp
biBIZWFkZXJzICovLApAQCAtOTk4OCw3ICs5OTk5LDYgQEAKIAkJCQkwRjcyNUNBRjFDNTA2RDNC
MDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkVDODUxNTFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkVDODUxODFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQkwRkVDODVDMjFCRTE2N0EwMDA4MEZGNzQgLyogQjNIZWFwUmFuZ2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJREM2OUI5OUMxRDE1RjkxMjAwMkUzQzAwIC8qIEIzSW5m
ZXJTd2l0Y2hlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVDODVCOTFCRTE0NjJGMDA4MEZG
NzQgLyogQjNJbnNlcnRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZERjY3RDMxRDlD
NkQyQTAwMUI5ODI1IC8qIEIzS2luZC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMTU0LDYgKzEw
MTY0LDcgQEAKIAkJCQlBNzhBOTc3NjE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkJEQzE1MTUxQzVENEQwMENEODkxMCAvKiBERkdGaXh1
cFBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjAxNzdGMURDQURDMzMwMEVBNTk1MCAv
KiBERkdGbG93SW5kZXhpbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQUM1NkExRThBMEJE
MzAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGOUQzMzk2MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRjcxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0ZsdXNo
Rm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNjlDQzg4MTkzQUM2MEEwMDQ1NzU5RSAv
KiBERkdGcm96ZW5WYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMjYzLDYgKzEwMjc0LDcg
QEAKIAkJCQkyQTgzNjM4NTE4RDdEMEVFMDAwMEVCQ0MgLyogRWRlbkdDQWN0aXZpdHlDYWxsYmFj
ay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OUU0NUEyNTE4QTFCMjU5MDAyNkQ4OEYgLyogRW5j
b2RlZFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUM3MTA3RUMzNzYwMDQyN0E0
OCAvKiBFcnJvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJBQzU2NjFFOEEwQjc3MDAwMUVF
M0YgLyogQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQ3RjM5QzgxMDdFQzM3NjAwNDI3QTQ4IC8qIEVycm9yQ29uc3RydWN0b3IuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRkVCNThDMTQxODdCOEIxNjAwOThFRjBCIC8qIEVycm9ySGFuZGxpbmdTY29w
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDOTEwN0VDMzc2MDA0MjdBNDggLyogRXJy
b3JJbnN0YW5jZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrVXRpbHMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTE0LDcgKzExNCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+CiBWZWN0b3I8QmFz
aWNCbG9jayo+IGJsb2Nrc0luUHJlT3JkZXIoQmFzaWNCbG9jayogcm9vdCkKIHsKICAgICBWZWN0
b3I8QmFzaWNCbG9jayo+IHJlc3VsdDsKLSAgICBHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2Nr
KiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IHdvcmtsaXN0OworICAgIEdyYXBoTm9kZVdvcmtsaXN0
PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+IHdvcmtsaXN0OwogICAgIHdvcmts
aXN0LnB1c2gocm9vdCk7CiAgICAgd2hpbGUgKEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3Qu
cG9wKCkpIHsKICAgICAgICAgcmVzdWx0LmFwcGVuZChibG9jayk7CkBAIC0xMjgsNyArMTI4LDcg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KIFZlY3RvcjxCYXNpY0Jsb2NrKj4gYmxv
Y2tzSW5Qb3N0T3JkZXIoQmFzaWNCbG9jayogcm9vdCkKIHsKICAgICBWZWN0b3I8QmFzaWNCbG9j
ayo+IHJlc3VsdDsKLSAgICBQb3N0T3JkZXJHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwg
SW5kZXhTZXQ8QmFzaWNCbG9jaz4+IHdvcmtsaXN0OworICAgIFBvc3RPcmRlckdyYXBoTm9kZVdv
cmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+IHdvcmtsaXN0OwogICAg
IHdvcmtsaXN0LnB1c2gocm9vdCk7CiAgICAgd2hpbGUgKEdyYXBoTm9kZVdpdGhPcmRlcjxCYXNp
Y0Jsb2NrKj4gaXRlbSA9IHdvcmtsaXN0LnBvcCgpKSB7CiAgICAgICAgIHN3aXRjaCAoaXRlbS5v
cmRlcikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tXb3JrbGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrV29ya2xpc3Qu
aAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tX
b3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CiAKIGNsYXNzIEJhc2ljQmxvY2s7CiAKLXR5cGVkZWYgR3JhcGhOb2RlV29y
a2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2s+PiBCbG9ja1dvcmtsaXN0Owor
dHlwZWRlZiBHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9j
ayo+PiBCbG9ja1dvcmtsaXN0OwogCiAvLyBXaGVuIHlvdSBzYXkgQmxvY2tXaXRoPGludD4geW91
IHNob3VsZCByZWFkIGl0IGFzICJibG9jayB3aXRoIGFuIGludCIuCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB1c2luZyBCbG9ja1dpdGggPSBHcmFwaE5vZGVXaXRoPEJhc2ljQmxvY2sqLCBUPjsKQEAg
LTQ0LDEzICs0NCwxMyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBCbG9ja1dpdGggPSBH
CiAvLyBwZXJtaXRzIGZvcmNpYmx5IGVucXVldWVpbmcgdGhpbmdzIGV2ZW4gaWYgdGhlIGJsb2Nr
IGhhcyBhbHJlYWR5IGJlZW4gc2Vlbi4gSXQncyB1c2VmdWwgZm9yCiAvLyB0aGluZ3MgbGlrZSBi
dWlsZGluZyBhIHNwYW5uaW5nIHRyZWUsIGluIHdoaWNoIGNhc2UgVCAodGhlIGF1eGlsaWFyeSBw
YXlsb2FkKSB3b3VsZCBiZSB0aGUKIC8vIHN1Y2Nlc3NvciBpbmRleC4KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3JrbGlzdCA9IEV4dGVuZGVkR3JhcGhOb2RlV29y
a2xpc3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0PEJhc2ljQmxvY2s+PjsKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3JrbGlzdCA9IEV4dGVuZGVkR3JhcGhOb2Rl
V29ya2xpc3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0PEJhc2ljQmxvY2sqPj47CiAKIHR5cGVk
ZWYgR3JhcGhWaXNpdE9yZGVyIFZpc2l0T3JkZXI7CiAKIHR5cGVkZWYgR3JhcGhOb2RlV2l0aE9y
ZGVyPEJhc2ljQmxvY2sqPiBCbG9ja1dpdGhPcmRlcjsKIAotdHlwZWRlZiBQb3N0T3JkZXJHcmFw
aE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IFBvc3RPcmRl
ckJsb2NrV29ya2xpc3Q7Cit0eXBlZGVmIFBvc3RPcmRlckdyYXBoTm9kZVdvcmtsaXN0PEJhc2lj
QmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+IFBvc3RPcmRlckJsb2NrV29ya2xpc3Q7CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDRkcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDRkcu
aAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ0ZHLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzksOCArMzksOCBAQCBjbGFzcyBDRkcgewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIHR5cGVkZWYgQmFzaWNCbG9jayogTm9kZTsKLSAg
ICB0eXBlZGVmIEluZGV4U2V0PEJhc2ljQmxvY2s+IFNldDsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB1c2luZyBNYXAgPSBJbmRleE1hcDxCYXNpY0Jsb2NrLCBUPjsKKyAgICB0eXBlZGVmIElu
ZGV4U2V0PEJhc2ljQmxvY2sqPiBTZXQ7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcg
TWFwID0gSW5kZXhNYXA8QmFzaWNCbG9jayosIFQ+OwogICAgIHR5cGVkZWYgVmVjdG9yPEJhc2lj
QmxvY2sqLCA0PiBMaXN0OwogCiAgICAgQ0ZHKFByb2NlZHVyZSYgcHJvYykKQEAgLTUxLDcgKzUx
LDcgQEAgcHVibGljOgogICAgIE5vZGUgcm9vdCgpIHsgcmV0dXJuIG1fcHJvY1swXTsgfQogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBNYXA8VD4gbmV3TWFwKCkgeyByZXR1cm4gSW5k
ZXhNYXA8SlNDOjpCMzo6QmFzaWNCbG9jaywgVD4obV9wcm9jLnNpemUoKSk7IH0KKyAgICBNYXA8
VD4gbmV3TWFwKCkgeyByZXR1cm4gSW5kZXhNYXA8SlNDOjpCMzo6QmFzaWNCbG9jayosIFQ+KG1f
cHJvYy5zaXplKCkpOyB9CiAKICAgICBTdWNjZXNzb3JDb2xsZWN0aW9uPEJhc2ljQmxvY2ssIEJh
c2ljQmxvY2s6OlN1Y2Nlc3Nvckxpc3Q+IHN1Y2Nlc3NvcnMoTm9kZSBub2RlKSB7IHJldHVybiBu
b2RlLT5zdWNjZXNzb3JCbG9ja3MoKTsgfQogICAgIEJhc2ljQmxvY2s6OlByZWRlY2Vzc29yTGlz
dCYgcHJlZGVjZXNzb3JzKE5vZGUgbm9kZSkgeyByZXR1cm4gbm9kZS0+cHJlZGVjZXNzb3JzKCk7
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCShyZXZpc2lvbiAyMTQ0Mjcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uaAkod29ya2luZyBjb3B5KQpA
QCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShCM19KSVQpCiAKICNpbmNsdWRlICJKU0V4cG9y
dE1hY3Jvcy5oIgorI2luY2x1ZGUgIk9wdGlvbnMuaCIKICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CkBAIC0xNzAsNiArMTcxLDEzIEBA
IHN0YXRpYyBJbnRUeXBlIHJvdGF0ZUxlZnQoSW50VHlwZSB2YWx1ZSwKICAgICByZXR1cm4gKHVW
YWx1ZSA8PCBzaGlmdCkgfCAodVZhbHVlID4+ICgoYml0cyAtIHNoaWZ0KSAmIG1hc2spKTsKIH0K
IAoraW5saW5lIHVuc2lnbmVkIGRlZmF1bHRPcHRMZXZlbCgpCit7CisgICAgLy8gVGhpcyBzaG91
bGQgYWxtb3N0IGFsd2F5cyByZXR1cm4gMiwgYnV0IHdlIGFsbG93IHRoaXMgZGVmYXVsdCB0byBi
ZSBsb3dlcmVkIGZvciB0ZXN0aW5nLiBTb21lCisgICAgLy8gY29tcG9uZW50cyB3aWxsIGRlbGli
ZXJhdGVseSBzZXQgdGhlIG9wdExldmVsLgorICAgIHJldHVybiBPcHRpb25zOjpkZWZhdWx0QjNP
cHRMZXZlbCgpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKIAogI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsZS5oCShyZXZp
c2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShCM19KSVQpCiAKKyNp
bmNsdWRlICJCM0NvbW1vbi5oIgogI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKIAogbmFtZXNw
YWNlIEpTQyB7CkBAIC00NSw3ICs0Niw3IEBAIGNsYXNzIFByb2NlZHVyZTsKIC8vIFRoZW4geW91
IGtlZXAgdGhlIENvbXBpbGF0aW9uIG9iamVjdCBhbGl2ZSBmb3IgYXMgbG9uZyBhcyB5b3Ugd2Fu
dCB0byBiZSBhYmxlIHRvIHJ1biB0aGUgY29kZS4KIC8vIElmIHRoaXMgQVBJIGZlZWxzIHRvbyBo
aWdoLWxldmVsLCB5b3UgY2FuIHVzZSBCMzo6Z2VuZXJhdGUoKSBkaXJlY3RseS4KIAotSlNfRVhQ
T1JUX1BSSVZBVEUgQ29tcGlsYXRpb24gY29tcGlsZShWTSYsIFByb2NlZHVyZSYsIHVuc2lnbmVk
IG9wdExldmVsID0gMSk7CitKU19FWFBPUlRfUFJJVkFURSBDb21waWxhdGlvbiBjb21waWxlKFZN
JiwgUHJvY2VkdXJlJiwgdW5zaWduZWQgb3B0TGV2ZWwgPSBkZWZhdWx0T3B0TGV2ZWwoKSk7CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNEdXBsaWNhdGVUYWlscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzRHVwbGljYXRlVGFpbHMuY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNEdXBsaWNhdGVUYWlscy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY4LDcgKzY4LDcgQEAgcHVibGljOgogCiAgICAgICAgIG1fcHJvYy5yZXNldFZhbHVlT3duZXJz
KCk7CiAKLSAgICAgICAgSW5kZXhTZXQ8QmFzaWNCbG9jaz4gY2FuZGlkYXRlczsKKyAgICAgICAg
SW5kZXhTZXQ8QmFzaWNCbG9jayo+IGNhbmRpZGF0ZXM7CiAKICAgICAgICAgZm9yIChCYXNpY0Js
b2NrKiBibG9jayA6IG1fcHJvYykgewogICAgICAgICAgICAgaWYgKGJsb2NrLT5zaXplKCkgPiBt
X21heFNpemUpCkBAIC04Miw3ICs4Miw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogCiAgICAgICAg
IC8vIENvbGxlY3QgdGhlIHNldCBvZiB2YWx1ZXMgdGhhdCBtdXN0IGJlIGRlLVNTQSdkLgotICAg
ICAgICBJbmRleFNldDxWYWx1ZT4gdmFsdWVzVG9EZW1vdGU7CisgICAgICAgIEluZGV4U2V0PFZh
bHVlKj4gdmFsdWVzVG9EZW1vdGU7CiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBt
X3Byb2MpIHsKICAgICAgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogKmJsb2NrKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSA9PSBQaGkgJiYgY2FuZGlkYXRlcy5jb250
YWlucyhibG9jaykpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVD
b21tb25TdWJleHByZXNzaW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuY3BwCShyZXZpc2lvbiAyMTQ0
MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVDb21tb25TdWJleHBy
ZXNzaW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4Miw3ICs2ODIsNyBAQCBwcml2YXRlOgog
ICAgIERvbWluYXRvcnMmIG1fZG9taW5hdG9yczsKICAgICBQdXJlQ1NFIG1fcHVyZUNTRTsKICAg
ICAKLSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBJbXB1cmVCbG9ja0RhdGE+IG1faW1wdXJlQmxv
Y2tEYXRhOworICAgIEluZGV4TWFwPEJhc2ljQmxvY2sqLCBJbXB1cmVCbG9ja0RhdGE+IG1faW1w
dXJlQmxvY2tEYXRhOwogCiAgICAgSW1wdXJlQmxvY2tEYXRhIG1fZGF0YTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRml4U1NBLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNGaXhTU0EuY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGaXhTU0EuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3
ICs0OSw3IEBAIG5hbWVzcGFjZSB7CiBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIH0gLy8g
YW5vbnltb3VzIG5hbWVzcGFjZQogCi12b2lkIGRlbW90ZVZhbHVlcyhQcm9jZWR1cmUmIHByb2Ms
IGNvbnN0IEluZGV4U2V0PFZhbHVlPiYgdmFsdWVzKQordm9pZCBkZW1vdGVWYWx1ZXMoUHJvY2Vk
dXJlJiBwcm9jLCBjb25zdCBJbmRleFNldDxWYWx1ZSo+JiB2YWx1ZXMpCiB7CiAgICAgSGFzaE1h
cDxWYWx1ZSosIFZhcmlhYmxlKj4gbWFwOwogICAgIEhhc2hNYXA8VmFsdWUqLCBWYXJpYWJsZSo+
IHBoaU1hcDsKQEAgLTEyMSw3ICsxMjEsNyBAQCBib29sIGZpeFNTQShQcm9jZWR1cmUmIHByb2Mp
CiAgICAgLy8gSnVzdCBmb3Igc2FuaXR5LCByZW1vdmUgYW55IHVudXNlZCB2YXJpYWJsZXMgZmly
c3QuIEl0J3MgdW5saWtlbHkgdGhhdCB0aGlzIGNvZGUgaGFzIGFueQogICAgIC8vIGJ1Z3MgaGF2
aW5nIHRvIGRvIHdpdGggZGVhZCB2YXJpYWJsZXMsIGJ1dCBpdCB3b3VsZCBiZSBzaWxseSB0byBo
YXZlIHRvIGZpeCBzdWNoIGEgYnVnIGlmCiAgICAgLy8gaXQgZGlkIGFyaXNlLgotICAgIEluZGV4
U2V0PFZhcmlhYmxlPiBsaXZlVmFyaWFibGVzOworICAgIEluZGV4U2V0PFZhcmlhYmxlKj4gbGl2
ZVZhcmlhYmxlczsKICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IHByb2MudmFsdWVzKCkpIHsKICAg
ICAgICAgaWYgKFZhcmlhYmxlVmFsdWUqIHZhcmlhYmxlVmFsdWUgPSB2YWx1ZS0+YXM8VmFyaWFi
bGVWYWx1ZT4oKSkKICAgICAgICAgICAgIGxpdmVWYXJpYWJsZXMuYWRkKHZhcmlhYmxlVmFsdWUt
PnZhcmlhYmxlKCkpOwpAQCAtMTQ1LDcgKzE0NSw3IEBAIGJvb2wgZml4U1NBKFByb2NlZHVyZSYg
cHJvYykKIAogICAgIC8vIENyZWF0ZSBhIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlICgiY2FsY1Zh
ciIpIGZvciBldmVyeSB2YXJpYWJsZS4KICAgICBWZWN0b3I8VmFyaWFibGUqPiBjYWxjVmFyVG9W
YXJpYWJsZTsKLSAgICBJbmRleE1hcDxWYXJpYWJsZSwgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUq
PiB2YXJpYWJsZVRvQ2FsY1Zhcihwcm9jLnZhcmlhYmxlcygpLnNpemUoKSk7CisgICAgSW5kZXhN
YXA8VmFyaWFibGUqLCBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSo+IHZhcmlhYmxlVG9DYWxjVmFy
KHByb2MudmFyaWFibGVzKCkuc2l6ZSgpKTsKIAogICAgIGZvciAoVmFyaWFibGUqIHZhcmlhYmxl
IDogcHJvYy52YXJpYWJsZXMoKSkgewogICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSog
Y2FsY1ZhciA9IHNzYS5uZXdWYXJpYWJsZSgpOwpAQCAtMTg1LDcgKzE4NSw3IEBAIGJvb2wgZml4
U1NBKFByb2NlZHVyZSYgcHJvYykKIAogICAgIC8vIE5vdyBwZXJmb3JtIHRoZSBjb252ZXJzaW9u
LgogICAgIEluc2VydGlvblNldCBpbnNlcnRpb25TZXQocHJvYyk7Ci0gICAgSW5kZXhNYXA8VmFy
aWFibGUsIFZhbHVlKj4gbWFwcGluZyhwcm9jLnZhcmlhYmxlcygpLnNpemUoKSk7CisgICAgSW5k
ZXhNYXA8VmFyaWFibGUqLCBWYWx1ZSo+IG1hcHBpbmcocHJvYy52YXJpYWJsZXMoKS5zaXplKCkp
OwogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBwcm9jLmJsb2Nrc0luUHJlT3JkZXIoKSkg
ewogICAgICAgICBtYXBwaW5nLmNsZWFyKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0ZpeFNTQS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0ZpeFNTQS5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNGaXhTU0EuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNyw3ICszNyw3IEBAIGNsYXNzIFByb2NlZHVyZTsK
IAogLy8gVHVybnMgYWxsIG1lbnRpb25zIG9mIHRoZSBnaXZlbiB2YWx1ZXMgaW50byBhY2Nlc3Nl
cyB0byB2YXJpYWJsZXMuIFRoaXMgaXMgbWVhbnQgdG8gYmUgdXNlZAogLy8gZnJvbSBwaGFzZXMg
dGhhdCBkb24ndCBsaWtlIFNTQSBmb3Igd2hhdGV2ZXIgcmVhc29uLgotdm9pZCBkZW1vdGVWYWx1
ZXMoUHJvY2VkdXJlJiwgY29uc3QgSW5kZXhTZXQ8VmFsdWU+Jik7Cit2b2lkIGRlbW90ZVZhbHVl
cyhQcm9jZWR1cmUmLCBjb25zdCBJbmRleFNldDxWYWx1ZSo+Jik7CiAKIC8vIFRoaXMgZml4ZXMg
U1NBIGZvciB5b3UuIFVzZSB0aGlzIGFmdGVyIHlvdSBoYXZlIGRvbmUgZGVtb3RlVmFsdWVzKCkg
YW5kIHlvdSBoYXZlIHBlcmZvcm1lZAogLy8gd2hhdGV2ZXIgZXZpbCB0cmFuc2Zvcm1hdGlvbiB5
b3UgbmVlZGVkLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAko
cmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQgcHJlcGFyZUZvckdlbmVy
YXRpb24oUHJvY2VkdXJlJiBwcm8KICAgICBUaW1pbmdTY29wZSB0aW1pbmdTY29wZSgicHJlcGFy
ZUZvckdlbmVyYXRpb24iKTsKIAogICAgIGdlbmVyYXRlVG9BaXIocHJvY2VkdXJlLCBvcHRMZXZl
bCk7Ci0gICAgQWlyOjpwcmVwYXJlRm9yR2VuZXJhdGlvbihwcm9jZWR1cmUuY29kZSgpKTsKKyAg
ICBBaXI6OnByZXBhcmVGb3JHZW5lcmF0aW9uKHByb2NlZHVyZS5jb2RlKCksIG9wdExldmVsKTsK
IH0KIAogdm9pZCBnZW5lcmF0ZShQcm9jZWR1cmUmIHByb2NlZHVyZSwgQ0NhbGxIZWxwZXJzJiBq
aXQpCkBAIC04MCw3ICs4MCw3IEBAIHZvaWQgZ2VuZXJhdGVUb0FpcihQcm9jZWR1cmUmIHByb2Nl
ZHVyZSwKICAgICBpZiAoc2hvdWxkVmFsaWRhdGVJUigpKQogICAgICAgICB2YWxpZGF0ZShwcm9j
ZWR1cmUpOwogCi0gICAgaWYgKG9wdExldmVsID49IDEpIHsKKyAgICBpZiAob3B0TGV2ZWwgPj0g
MikgewogICAgICAgICByZWR1Y2VEb3VibGVUb0Zsb2F0KHByb2NlZHVyZSk7CiAgICAgICAgIHJl
ZHVjZVN0cmVuZ3RoKHByb2NlZHVyZSk7CiAgICAgICAgIGVsaW1pbmF0ZUNvbW1vblN1YmV4cHJl
c3Npb25zKHByb2NlZHVyZSk7CkBAIC05MSwxMiArOTEsMTUgQEAgdm9pZCBnZW5lcmF0ZVRvQWly
KFByb2NlZHVyZSYgcHJvY2VkdXJlLAogICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IEFkZCBt
b3JlIG9wdGltaXphdGlvbnMgaGVyZS4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1MDUwNworICAgIH0gZWxzZSBpZiAob3B0TGV2ZWwgPj0gMSkg
eworICAgICAgICAvLyBGSVhNRTogRXhwbG9yZSBiZXR0ZXIgInF1aWNrIG1vZGUiIG9wdGltaXph
dGlvbnMuCisgICAgICAgIHJlZHVjZVN0cmVuZ3RoKHByb2NlZHVyZSk7CiAgICAgfQogCiAgICAg
Ly8gVGhpcyBwdXRzIHRoZSBJUiBpbiBxdWlya3MgbW9kZS4KICAgICBsb3dlck1hY3Jvcyhwcm9j
ZWR1cmUpOwogCi0gICAgaWYgKG9wdExldmVsID49IDEpIHsKKyAgICBpZiAob3B0TGV2ZWwgPj0g
MikgewogICAgICAgICByZWR1Y2VTdHJlbmd0aChwcm9jZWR1cmUpOwogCiAgICAgICAgIC8vIEZJ
WE1FOiBBZGQgbW9yZSBvcHRpbWl6YXRpb25zIGhlcmUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNHZW5lcmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0dlbmVyYXRlLmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0dlbmVyYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDggQEAKIAog
I2lmIEVOQUJMRShCM19KSVQpCiAKKyNpbmNsdWRlICJCM0NvbW1vbi5oIgorCiBuYW1lc3BhY2Ug
SlNDIHsKIAogY2xhc3MgQ0NhbGxIZWxwZXJzOwpAQCAtMzgsNyArNDAsNyBAQCBuYW1lc3BhY2Ug
QWlyIHsgY2xhc3MgQ29kZTsgfQogCiAvLyBUaGlzIHRha2VzIGEgQjM6OlByb2NlZHVyZSwgb3B0
aW1pemVzIGl0IGluLXBsYWNlLCBsb3dlcnMgaXQgdG8gQWlyLCBhbmQgcHJlcGFyZXMgdGhlIEFp
ciBmb3IKIC8vIGdlbmVyYXRpb24uCi1KU19FWFBPUlRfUFJJVkFURSB2b2lkIHByZXBhcmVGb3JH
ZW5lcmF0aW9uKFByb2NlZHVyZSYsIHVuc2lnbmVkIG9wdExldmVsID0gMSk7CitKU19FWFBPUlRf
UFJJVkFURSB2b2lkIHByZXBhcmVGb3JHZW5lcmF0aW9uKFByb2NlZHVyZSYsIHVuc2lnbmVkIG9w
dExldmVsID0gZGVmYXVsdE9wdExldmVsKCkpOwogCiAvLyBUaGlzIHRha2VzIGEgQjM6OlByb2Nl
ZHVyZSB0aGF0IGhhcyBiZWVuIHByZXBhcmVkIGZvciBnZW5lcmF0aW9uIChpLmUuIGl0IGhhcyBi
ZWVuIGxvd2VyZWQgdG8gQWlyIGFuZAogLy8gdGhlIEFpciBoYXMgYmVlbiBwcmVwYXJlZCBmb3Ig
Z2VuZXJhdGlvbikgYW5kIGdlbmVyYXRlcyBpdC4gVGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvZiBj
YWxsaW5nCkBAIC00OCw3ICs1MCw3IEBAIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZ2VuZXJhdGUo
UHJvY2VkdXIKIC8vIFRoaXMgdGFrZXMgYSBCMzo6UHJvY2VkdXJlLCBvcHRpbWl6ZXMgaXQgaW4t
cGxhY2UsIGFuZCBsb3dlcnMgaXQgdG8gQWlyLiBZb3UgY2FuIHRoZW4gZ2VuZXJhdGUKIC8vIHRo
ZSBBaXIgdG8gbWFjaGluZSBjb2RlIHVzaW5nIEFpcjo6cHJlcGFyZUZvckdlbmVyYXRpb24oKSBh
bmQgQWlyOjpnZW5lcmF0ZSgpIG9uIHRoZSBQcm9jZWR1cmUncwogLy8gY29kZSgpLgotdm9pZCBn
ZW5lcmF0ZVRvQWlyKFByb2NlZHVyZSYsIHVuc2lnbmVkIG9wdExldmVsID0gMSk7Cit2b2lkIGdl
bmVyYXRlVG9BaXIoUHJvY2VkdXJlJiwgdW5zaWduZWQgb3B0TGV2ZWwgPSBkZWZhdWx0T3B0TGV2
ZWwoKSk7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNIZWFwUmFuZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw0OSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJCM0hlYXBSYW5nZS5oIgotCi0jaWYgRU5BQkxF
KEIzX0pJVCkKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7Ci0KLXZvaWQgSGVhcFJh
bmdlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAgaWYgKCp0aGlzID09IEhl
YXBSYW5nZSgpKSB7Ci0gICAgICAgIG91dC5wcmludCgiQm90dG9tIik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgaWYgKCp0aGlzID09IHRvcCgpKSB7Ci0gICAgICAgIG91dC5wcmludCgi
VG9wIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgb3V0LnByaW50KG1fYmVnaW4sICIu
Li4iLCBtX2VuZCk7Ci19Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwotCi0jZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJh
bmdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJhbmdl
LmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBS
YW5nZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw5MCArMjcsMTUgQEAKIAogI2lmIEVOQUJMRShC
M19KSVQpCiAKLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgotI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorI2luY2x1ZGUgPHd0Zi9SYW5nZS5oPgog
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAogLy8gQWxpYXMgYW5hbHlzaXMgaW4g
QjMgaXMgZG9uZSBieSBjaGVja2luZyBpZiB0d28gaW50ZWdlciByYW5nZXMgb3ZlcmxhcC4gVGhp
cyBpcyBwb3dlcmZ1bCBlbm91Z2gKIC8vIHRvIGJlIHVzZWQgZm9yIFRCQUEtc3R5bGUgYWxpYXMg
YW5hbHlzaXMgdXNlZCBieSB0aGUgREZHLCBGVEwsIGFuZCBMTFZNOiB5b3UganVzdCB0dXJuIGVh
Y2ggbm9kZQogLy8gaW4gdGhlIHRyZWUgb2YgYWJzdHJhY3QgaGVhcHMgaW50byBhIHByZS9wb3N0
IHJhbmdlLgotLy8KLS8vIE5vdGUgdGhhdCB0aGUgJ2JlZ2luJyBpcyBpbmNsdXNpdmUsIHdoaWxl
IHRoZSAnZW5kJyBpcyBleGNsdXNpdmUuIFRoZXNlIHR3byByYW5nZXMgYXJlIG5vbi0KLS8vIG92
ZXJsYXBwaW5nOgotLy8KLS8vICAgICByYW5nZUEgPSAwLi4uOAotLy8gICAgIHJhbmdlQiA9IDgu
Li4xNgotCi1jbGFzcyBIZWFwUmFuZ2UgewotcHVibGljOgotICAgIHR5cGVkZWYgdW5zaWduZWQg
VHlwZTsKLSAgICAKLSAgICBIZWFwUmFuZ2UoKQotICAgICAgICA6IG1fYmVnaW4oMCkKLSAgICAg
ICAgLCBtX2VuZCgwKQotICAgIHsKLSAgICB9Ci0KLSAgICBleHBsaWNpdCBIZWFwUmFuZ2UodW5z
aWduZWQgdmFsdWUpCi0gICAgICAgIDogbV9iZWdpbih2YWx1ZSkKLSAgICAgICAgLCBtX2VuZCh2
YWx1ZSArIDEpCi0gICAgewotICAgICAgICBBU1NFUlQobV9lbmQgPj0gbV9iZWdpbik7Ci0gICAg
fQotCi0gICAgSGVhcFJhbmdlKHVuc2lnbmVkIGJlZ2luLCB1bnNpZ25lZCBlbmQpCi0gICAgICAg
IDogbV9iZWdpbihiZWdpbikKLSAgICAgICAgLCBtX2VuZChlbmQpCi0gICAgewotICAgICAgICBB
U1NFUlQobV9lbmQgPj0gbV9iZWdpbik7Ci0gICAgICAgIGlmIChtX2JlZ2luID09IG1fZW5kKSB7
Ci0gICAgICAgICAgICAvLyBDYW5vbmljYWxpemUgZW1wdHkgcmFuZ2VzLgotICAgICAgICAgICAg
bV9iZWdpbiA9IDA7Ci0gICAgICAgICAgICBtX2VuZCA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBzdGF0aWMgSGVhcFJhbmdlIHRvcCgpCi0gICAgewotICAgICAgICByZXR1cm4gSGVhcFJh
bmdlKDAsIFVJTlRfTUFYKTsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSGVh
cFJhbmdlJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2JlZ2luID09IG90
aGVyLm1fYmVnaW4KLSAgICAgICAgICAgICYmIG1fZW5kID09IG90aGVyLm1fZW5kOwotICAgIH0K
LQotICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBIZWFwUmFuZ2UmIG90aGVyKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwotICAgIH0KLSAgICAKLSAgICBI
ZWFwUmFuZ2Ugb3BlcmF0b3J8KGNvbnN0IEhlYXBSYW5nZSYgb3RoZXIpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gSGVhcFJhbmdlKAotICAgICAgICAgICAgc3RkOjptaW4obV9iZWdpbiwg
b3RoZXIubV9iZWdpbiksCi0gICAgICAgICAgICBzdGQ6Om1heChtX2VuZCwgb3RoZXIubV9lbmQp
KTsKLSAgICB9Ci0gICAgCi0gICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0
dXJuIG1fYmVnaW4gIT0gbV9lbmQ7IH0KLQotICAgIHVuc2lnbmVkIGJlZ2luKCkgY29uc3QgeyBy
ZXR1cm4gbV9iZWdpbjsgfQotICAgIHVuc2lnbmVkIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5k
OyB9Ci0KLSAgICBib29sIG92ZXJsYXBzKGNvbnN0IEhlYXBSYW5nZSYgb3RoZXIpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gV1RGOjpyYW5nZXNPdmVybGFwKG1fYmVnaW4sIG1fZW5kLCBv
dGhlci5tX2JlZ2luLCBvdGhlci5tX2VuZCk7Ci0gICAgfQotCi0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIHVu
c2lnbmVkIG1fYmVnaW47Ci0gICAgdW5zaWduZWQgbV9lbmQ7Ci19OworCit0eXBlZGVmIFJhbmdl
PHVuc2lnbmVkPiBIZWFwUmFuZ2U7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2aXNpb24gMjE0
NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMzNzksMTAgKzMzNzksMTAgQEAgcHJpdmF0ZToKICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAgICAgCi0gICAgSW5kZXhTZXQ8VmFsdWU+
IG1fbG9ja2VkOyAvLyBUaGVzZSBhcmUgdmFsdWVzIHRoYXQgd2lsbCBoYXZlIG5vIFRtcCBpbiBB
aXIuCi0gICAgSW5kZXhNYXA8VmFsdWUsIFRtcD4gbV92YWx1ZVRvVG1wOyAvLyBUaGVzZSBhcmUg
dmFsdWVzIHRoYXQgbXVzdCBoYXZlIGEgVG1wIGluIEFpci4gV2Ugc2F5IHRoYXQgYSBWYWx1ZSog
d2l0aCBhIG5vbi1udWxsIFRtcCBpcyAicGlubmVkIi4KLSAgICBJbmRleE1hcDxWYWx1ZSwgVG1w
PiBtX3BoaVRvVG1wOyAvLyBFYWNoIFBoaSBnZXRzIGl0cyBvd24gVG1wLgotICAgIEluZGV4TWFw
PEIzOjpCYXNpY0Jsb2NrLCBBaXI6OkJhc2ljQmxvY2sqPiBtX2Jsb2NrVG9CbG9jazsKKyAgICBJ
bmRleFNldDxWYWx1ZSo+IG1fbG9ja2VkOyAvLyBUaGVzZSBhcmUgdmFsdWVzIHRoYXQgd2lsbCBo
YXZlIG5vIFRtcCBpbiBBaXIuCisgICAgSW5kZXhNYXA8VmFsdWUqLCBUbXA+IG1fdmFsdWVUb1Rt
cDsgLy8gVGhlc2UgYXJlIHZhbHVlcyB0aGF0IG11c3QgaGF2ZSBhIFRtcCBpbiBBaXIuIFdlIHNh
eSB0aGF0IGEgVmFsdWUqIHdpdGggYSBub24tbnVsbCBUbXAgaXMgInBpbm5lZCIuCisgICAgSW5k
ZXhNYXA8VmFsdWUqLCBUbXA+IG1fcGhpVG9UbXA7IC8vIEVhY2ggUGhpIGdldHMgaXRzIG93biBU
bXAuCisgICAgSW5kZXhNYXA8QjM6OkJhc2ljQmxvY2sqLCBBaXI6OkJhc2ljQmxvY2sqPiBtX2Js
b2NrVG9CbG9jazsKICAgICBIYXNoTWFwPEIzOjpTdGFja1Nsb3QqLCBBaXI6OlN0YWNrU2xvdCo+
IG1fc3RhY2tUb1N0YWNrOwogICAgIEhhc2hNYXA8VmFyaWFibGUqLCBUbXA+IG1fdmFyaWFibGVU
b1RtcDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTW92ZUNvbnN0YW50cy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTW92ZUNvbnN0YW50
cy5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01v
dmVDb25zdGFudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHByaXZhdGU6
CiAgICAgewogICAgICAgICBEb21pbmF0b3JzJiBkb21pbmF0b3JzID0gbV9wcm9jLmRvbWluYXRv
cnMoKTsKICAgICAgICAgSGFzaE1hcDxWYWx1ZUtleSwgVmFsdWUqPiB2YWx1ZUZvckNvbnN0YW50
OwotICAgICAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBWZWN0b3I8VmFsdWUqPj4gbWF0ZXJpYWxp
emF0aW9ucyhtX3Byb2Muc2l6ZSgpKTsKKyAgICAgICAgSW5kZXhNYXA8QmFzaWNCbG9jayosIFZl
Y3RvcjxWYWx1ZSo+PiBtYXRlcmlhbGl6YXRpb25zKG1fcHJvYy5zaXplKCkpOwogCiAgICAgICAg
IC8vIFdlIGRldGVybWluZSB3aGVyZSB0aGluZ3MgZ2V0IG1hdGVyaWFsaXplZCBiYXNlZCBvbiB3
aGVyZSB0aGV5IGFyZSB1c2VkLgogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9w
cm9jKSB7CkBAIC0yNzQsNyArMjc0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgZm9yIChhdXRvJiBl
bnRyeSA6IG1fY29uc3RUYWJsZSkKICAgICAgICAgICAgIG1fZGF0YVNlY3Rpb25bZW50cnkudmFs
dWVdID0gZW50cnkua2V5LnZhbHVlKCk7CiAKLSAgICAgICAgSW5kZXhTZXQ8VmFsdWU+IG9mZkxp
bWl0czsKKyAgICAgICAgSW5kZXhTZXQ8VmFsdWUqPiBvZmZMaW1pdHM7CiAgICAgICAgIGZvciAo
QmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2MpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
dmFsdWVJbmRleCA9IDA7IHZhbHVlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK3ZhbHVlSW5kZXgp
IHsKICAgICAgICAgICAgICAgICBTdGFja21hcFZhbHVlKiB2YWx1ZSA9IGJsb2NrLT5hdCh2YWx1
ZUluZGV4KS0+YXM8U3RhY2ttYXBWYWx1ZT4oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1BoaUNoaWxkcmVuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzUGhpQ2hpbGRyZW4uaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzUGhpQ2hpbGRyZW4uaAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDcgKzE2OCw3
IEBAIHB1YmxpYzoKICAgICBjb25zdCBWZWN0b3I8VmFsdWUqLCA4PiYgcGhpcygpIGNvbnN0IHsg
cmV0dXJuIG1fcGhpczsgfQogCiBwcml2YXRlOgotICAgIEluZGV4TWFwPFZhbHVlLCBWZWN0b3I8
VXBzaWxvblZhbHVlKj4+IG1fdXBzaWxvbnM7CisgICAgSW5kZXhNYXA8VmFsdWUqLCBWZWN0b3I8
VXBzaWxvblZhbHVlKj4+IG1fdXBzaWxvbnM7CiAgICAgVmVjdG9yPFZhbHVlKiwgOD4gbV9waGlz
OwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCShy
ZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBQcm9jZWR1cmU6Omlu
dmFsaWRhdGVDRkcoKQogCiB2b2lkIFByb2NlZHVyZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAogewotICAgIEluZGV4U2V0PFZhbHVlPiB2YWx1ZXNJbkJsb2NrczsKKyAgICBJbmRleFNl
dDxWYWx1ZSo+IHZhbHVlc0luQmxvY2tzOwogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiAq
dGhpcykgewogICAgICAgICBvdXQucHJpbnQoZGVlcER1bXAoKnRoaXMsIGJsb2NrKSk7CiAgICAg
ICAgIHZhbHVlc0luQmxvY2tzLmFkZEFsbCgqYmxvY2spOwpAQCAtMjQ1LDcgKzI0NSw3IEBAIHZv
aWQgUHJvY2VkdXJlOjpkZWxldGVWYWx1ZShWYWx1ZSogdmFsdWUKIAogdm9pZCBQcm9jZWR1cmU6
OmRlbGV0ZU9ycGhhbnMoKQogewotICAgIEluZGV4U2V0PFZhbHVlPiB2YWx1ZXNJbkJsb2NrczsK
KyAgICBJbmRleFNldDxWYWx1ZSo+IHZhbHVlc0luQmxvY2tzOwogICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiAqdGhpcykKICAgICAgICAgdmFsdWVzSW5CbG9ja3MuYWRkQWxsKCpibG9jayk7
CiAKQEAgLTMzMyw3ICszMzMsNyBAQCBWYWx1ZSogUHJvY2VkdXJlOjphZGRWYWx1ZUltcGwoVmFs
dWUqIHZhCiAKIHZvaWQgUHJvY2VkdXJlOjpzZXRCbG9ja09yZGVySW1wbChWZWN0b3I8QmFzaWNC
bG9jayo+JiBibG9ja3MpCiB7Ci0gICAgSW5kZXhTZXQ8QmFzaWNCbG9jaz4gYmxvY2tzU2V0Owor
ICAgIEluZGV4U2V0PEJhc2ljQmxvY2sqPiBibG9ja3NTZXQ7CiAgICAgYmxvY2tzU2V0LmFkZEFs
bChibG9ja3MpOwogCiAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6ICp0aGlzKSB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VEb3VibGVUb0Zsb2F0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VEb3VibGVUb0Zsb2F0
LmNwcAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVk
dWNlRG91YmxlVG9GbG9hdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyNCwxOCArNDI0LDE4IEBA
IHByaXZhdGU6CiAKICAgICAvLyBTZXQgb2YgYWxsIHRoZSBEb3VibGUgdmFsdWVzIHRoYXQgYXJl
IGFjdHVhbGx5IHVzZWQgYXMgRG91YmxlLgogICAgIC8vIENvbnZlcnRpbmcgYW55IG9mIHRoZW0g
dG8gRmxvYXQgd291bGQgbG9zZSBwcmVjaXNpb24uCi0gICAgSW5kZXhTZXQ8VmFsdWU+IG1fdmFs
dWVzVXNlZEFzRG91YmxlOworICAgIEluZGV4U2V0PFZhbHVlKj4gbV92YWx1ZXNVc2VkQXNEb3Vi
bGU7CiAKICAgICAvLyBTZXQgb2YgYWxsIHRoZSBQaGkgb2YgdHlwZSBEb3VibGUgdGhhdCByZWFs
bHkgY29udGFpbnMgYSBEb3VibGUuCiAgICAgLy8gQW55IERvdWJsZSBQaGkgbm90IGluIHRoZSBz
ZXQgY2FuIGJlIGNvbnZlcnRlZCB0byBGbG9hdCB3aXRob3V0IGxvc2luZyBwcmVjaXNpb24uCi0g
ICAgSW5kZXhTZXQ8VmFsdWU+IG1fcGhpc0NvbnRhaW5pbmdEb3VibGU7CisgICAgSW5kZXhTZXQ8
VmFsdWUqPiBtX3BoaXNDb250YWluaW5nRG91YmxlOwogCiAgICAgLy8gQW55IHZhbHVlIHRoYXQg
d2FzIGNvbnZlcnRlZCBmcm9tIHByb2R1Y2luZyBhIERvdWJsZSB0byBwcm9kdWNpbmcgYSBGbG9h
dC4KICAgICAvLyBUaGlzIHNldCBkb2VzIG5vdCBpbmNsdWRlIFBoaS1VcHNpbG9ucy4KLSAgICBJ
bmRleFNldDxWYWx1ZT4gbV9jb252ZXJ0ZWRWYWx1ZTsKKyAgICBJbmRleFNldDxWYWx1ZSo+IG1f
Y29udmVydGVkVmFsdWU7CiAKICAgICAvLyBBbnkgdmFsdWUgdGhhdCBwcmV2aW91c2x5IHByb2R1
Y2VkIERvdWJsZSBhbmQgbm93IHByb2R1Y2UgRmxvYXQuCi0gICAgSW5kZXhTZXQ8VmFsdWU+IG1f
Y29udmVydGVkUGhpczsKKyAgICBJbmRleFNldDxWYWx1ZSo+IG1fY29udmVydGVkUGhpczsKIH07
CiAKIHZvaWQgcHJpbnRHcmFwaElmQ29udmVydGluZyhQcm9jZWR1cmUmIHByb2NlZHVyZSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHJl
dmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVu
Z3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM5Miw3ICsyMzkyLDcgQEAgcHJpdmF0ZToKIAog
ICAgIHZvaWQga2lsbERlYWRDb2RlKCkKICAgICB7Ci0gICAgICAgIEdyYXBoTm9kZVdvcmtsaXN0
PFZhbHVlKiwgSW5kZXhTZXQ8VmFsdWU+PiB3b3JrbGlzdDsKKyAgICAgICAgR3JhcGhOb2RlV29y
a2xpc3Q8VmFsdWUqLCBJbmRleFNldDxWYWx1ZSo+PiB3b3JrbGlzdDsKICAgICAgICAgVmVjdG9y
PFVwc2lsb25WYWx1ZSosIDY0PiB1cHNpbG9uczsKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBi
bG9jayA6IG1fcHJvYykgewogICAgICAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiAqYmxvY2sp
IHsKQEAgLTI0MjksNyArMjQyOSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KIAotICAgICAgICBJbmRleFNldDxWYXJpYWJsZT4gbGl2ZVZhcmlhYmxlczsK
KyAgICAgICAgSW5kZXhTZXQ8VmFyaWFibGUqPiBsaXZlVmFyaWFibGVzOwogICAgICAgICAKICAg
ICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvYykgewogICAgICAgICAgICAgc2l6
ZV90IHNvdXJjZUluZGV4ID0gMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1NT
QUNhbGN1bGF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
U0FDYWxjdWxhdG9yLmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1NTQUNhbGN1bGF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTYsNyArMTU2LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgVmVjdG9yPERlZio+IG1fcGhpczsKICAgICB9OwogICAgIAotICAgIElu
ZGV4TWFwPEJhc2ljQmxvY2ssIEJsb2NrRGF0YT4gbV9kYXRhOworICAgIEluZGV4TWFwPEJhc2lj
QmxvY2sqLCBCbG9ja0RhdGE+IG1fZGF0YTsKIAogICAgIERvbWluYXRvcnMqIG1fZG9taW5hdG9y
cyB7IG51bGxwdHIgfTsKICAgICBQcm9jZWR1cmUmIG1fcHJvYzsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1VzZUNvdW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1VzZUNvdW50cy5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNVc2VDb3VudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ4LDcgKzQ4
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgdW5zaWduZWQgbnVtVXNpbmdJbnN0cnVjdGlvbnMgeyAw
IH07CiAgICAgfTsKICAgICAKLSAgICBJbmRleE1hcDxWYWx1ZSwgQ291bnRzPiBtX2NvdW50czsK
KyAgICBJbmRleE1hcDxWYWx1ZSosIENvdW50cz4gbV9jb3VudHM7CiB9OwogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCShyZXZp
c2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTIwLDcgKzEyMCw3IEBAIFN0YXRpY0xvY2sgY3Jhc2hMb2NrOwogCiBW
TSogdm07CiAKLXN0ZDo6dW5pcXVlX3B0cjxDb21waWxhdGlvbj4gY29tcGlsZShQcm9jZWR1cmUm
IHByb2NlZHVyZSwgdW5zaWduZWQgb3B0TGV2ZWwgPSAxKQorc3RkOjp1bmlxdWVfcHRyPENvbXBp
bGF0aW9uPiBjb21waWxlKFByb2NlZHVyZSYgcHJvY2VkdXJlLCB1bnNpZ25lZCBvcHRMZXZlbCA9
IGRlZmF1bHRPcHRMZXZlbCgpKQogewogICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPENvbXBp
bGF0aW9uPihCMzo6Y29tcGlsZSgqdm0sIHByb2NlZHVyZSwgb3B0TGV2ZWwpKTsKIH0KQEAgLTk5
MCw2ICs5OTAsNyBAQCB2b2lkIHRlc3RNdWxMb2FkVHdpY2UoKQogCiAgICAgdGVzdCgwKTsKICAg
ICB0ZXN0KDEpOworICAgIHRlc3QoMik7CiB9CiAKIHZvaWQgdGVzdE11bEFkZEFyZ3NMZWZ0KCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNC
eUdyYXBoQ29sb3JpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuY3BwCShyZXZpc2lvbiAy
MTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0
ZXJzQnlHcmFwaENvbG9yaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAog
I2lmIEVOQUJMRShCM19KSVQpCiAKICNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWly
Rml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCIKICNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIK
ICNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgiCkBA
IC0xNTg1LDYgKzE1ODYsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIG1fY29hbGVzY2luZ0NhbmRp
ZGF0ZXMuY2xlYXIoKTsKICAgICAgICAgbV93b3JrbGlzdE1vdmVzLmNsZWFyKCk7CiAKKyAgICAg
ICAgLy8gRklYTUU6IEl0IHNlZW1zIGxpa2Ugd2UgZG9uJ3QgbmVlZCB0byByZWNvbXB1dGUgbGl2
ZW5lc3MuIFdlIGp1c3QgbmVlZCB0byB1cGRhdGUgaXRzIGRhdGEKKyAgICAgICAgLy8gc3RydWN0
dXJlcyBzbyB0aGF0IGl0IGtub3dzIHRoYXQgdGhlIG5ld2x5IGludHJvZHVjZWQgdGVtcG9yYXJp
ZXMgYXJlIG5vdCBsaXZlIGF0IGFueSBiYXNpYworICAgICAgICAvLyBibG9jayBib3VuZGFyeS4g
VGhpcyBzaG91bGQgdHJpdmlhbGx5IGJlIHRydWUgZm9yIG5vdy4KICAgICAgICAgVG1wTGl2ZW5l
c3M8YmFuaz4gbGl2ZW5lc3MobV9jb2RlKTsKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9j
ayA6IG1fY29kZSkgewogICAgICAgICAgICAgdHlwZW5hbWUgVG1wTGl2ZW5lc3M8YmFuaz46Okxv
Y2FsQ2FsYyBsb2NhbENhbGMobGl2ZW5lc3MsIGJsb2NrKTsKQEAgLTE3OTgsNyArMTgwMiw3IEBA
IHB1YmxpYzoKICAgICAgICAgbV9udW1JdGVyYXRpb25zID0gMDsKICAgICAgICAgYWxsb2NhdGVP
bkJhbms8RlA+KCk7CiAKLSAgICAgICAgZml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMoKTsKKyAgICAg
ICAgZml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMobV9jb2RlKTsKIAogICAgICAgICBpZiAocmVwb3J0
U3RhdHMpCiAgICAgICAgICAgICBkYXRhTG9nKCJOdW0gaXRlcmF0aW9ucyA9ICIsIG1fbnVtSXRl
cmF0aW9ucywgIlxuIik7CkBAIC0xOTU0LDcgKzE5NTgsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcEZhc3QoWyZdIChUbXAm
IHRtcCkgewotICAgICAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkgfHwgdG1wLmlzR1Ao
KSA9PSAoYmFuayAhPSBHUCkpCisgICAgICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSB8
fCB0bXAuYmFuaygpICE9IGJhbmspCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAK
ICAgICAgICAgICAgICAgICAgICAgVG1wIGFsaWFzVG1wID0gYWxsb2NhdG9yLmdldEFsaWFzKHRt
cCk7CkBAIC0yMTY5LDkgKzIxNzMsMTIgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAgICAg
ICB0bXAgPSBtX2NvZGUubmV3VG1wKGJhbmspOwogICAgICAgICAgICAgICAgICAgICB1bnNwaWxs
YWJsZVRtcHMuYWRkKEFic29sdXRlVG1wTWFwcGVyPGJhbms+OjphYnNvbHV0ZUluZGV4KHRtcCkp
OworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT0g
QXJnOjpTY3JhdGNoKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAg
ICAgICAgICAgICAgIEFyZyBhcmcgPSBBcmc6OnN0YWNrKHN0YWNrU2xvdEVudHJ5LT52YWx1ZSk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzQW55VXNlKHJvbGUpICYmIHJvbGUgIT0g
QXJnOjpTY3JhdGNoKQorICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0FueVVzZShyb2xl
KSkKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoaW5zdEluZGV4
LCBtb3ZlLCBpbnN0Lm9yaWdpbiwgYXJnLCB0bXApOwogICAgICAgICAgICAgICAgICAgICBpZiAo
QXJnOjppc0FueURlZihyb2xlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNl
dC5pbnNlcnQoaW5zdEluZGV4ICsgMSwgbW92ZSwgaW5zdC5vcmlnaW4sIHRtcCwgYXJnKTsKQEAg
LTIxODcsNjYgKzIxOTQsNiBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQogCi0gICAgdm9p
ZCBmaXhTcGlsbHNBZnRlclRlcm1pbmFscygpCi0gICAgewotICAgICAgICAvLyBCZWNhdXNlIHRo
ZXJlIG1heSBiZSB0ZXJtaW5hbHMgdGhhdCBwcm9kdWNlIHZhbHVlcywgSVJDIG1heQotICAgICAg
ICAvLyB3YW50IHRvIHNwaWxsIHRob3NlIHRlcm1pbmFscy4gSXQnbGwgaGFwcGVuIHRvIHNwaWxs
IGl0IGFmdGVyCi0gICAgICAgIC8vIHRoZSB0ZXJtaW5hbC4gSWYgd2UgbGVmdCB0aGUgZ3JhcGgg
aW4gdGhpcyBzdGF0ZSwgaXQnZCBiZSBpbnZhbGlkCi0gICAgICAgIC8vIGJlY2F1c2UgYSB0ZXJt
aW5hbCBtdXN0IGJlIHRoZSBsYXN0IGluc3RydWN0aW9uIGluIGEgYmxvY2suCi0gICAgICAgIC8v
IFdlIGZpeCB0aGF0IGhlcmUuCi0KLSAgICAgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldCht
X2NvZGUpOwotCi0gICAgICAgIGJvb2wgYWRkZWRCbG9ja3MgPSBmYWxzZTsKLQotICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCB0
ZXJtaW5hbEluZGV4ID0gYmxvY2stPnNpemUoKTsKLSAgICAgICAgICAgIGJvb2wgZm91bmRUZXJt
aW5hbCA9IGZhbHNlOwotICAgICAgICAgICAgd2hpbGUgKHRlcm1pbmFsSW5kZXgtLSkgewotICAg
ICAgICAgICAgICAgIGlmIChibG9jay0+YXQodGVybWluYWxJbmRleCkuaXNUZXJtaW5hbCgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGZvdW5kVGVybWluYWwgPSB0cnVlOwotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBBU1NFUlRfVU5VU0VEKGZvdW5kVGVybWluYWwsIGZvdW5kVGVybWluYWwpOwotCi0gICAg
ICAgICAgICBpZiAodGVybWluYWxJbmRleCA9PSBibG9jay0+c2l6ZSgpIC0gMSkKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgLy8gVGhlcmUgbXVzdCBiZSBpbnN0cnVj
dGlvbnMgYWZ0ZXIgdGhlIHRlcm1pbmFsIGJlY2F1c2UgaXQncyBub3QgdGhlIGxhc3QgaW5zdHJ1
Y3Rpb24uCi0gICAgICAgICAgICBBU1NFUlQodGVybWluYWxJbmRleCA8IGJsb2NrLT5zaXplKCkg
LSAxKTsKLSAgICAgICAgICAgIFZlY3RvcjxJbnN0LCAxPiBpbnN0c1RvTW92ZTsKLSAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IHRlcm1pbmFsSW5kZXggKyAxOyBpIDwgYmxvY2stPnNpemUo
KTsgaSsrKQotICAgICAgICAgICAgICAgIGluc3RzVG9Nb3ZlLmFwcGVuZChibG9jay0+YXQoaSkp
OwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5zdHNUb01vdmUuc2l6ZSgpKTsKLQotICAg
ICAgICAgICAgZm9yIChGcmVxdWVudGVkQmxvY2smIGZyZXF1ZW50ZWRTdWNjZXNzb3IgOiBibG9j
ay0+c3VjY2Vzc29ycygpKSB7Ci0gICAgICAgICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29y
ID0gZnJlcXVlbnRlZFN1Y2Nlc3Nvci5ibG9jaygpOwotICAgICAgICAgICAgICAgIC8vIElmIHN1
Y2Nlc3NvcidzIG9ubHkgcHJlZGVjZXNzb3IgaXMgYmxvY2ssIHdlIGNhbiBwbGFudCB0aGUgc3Bp
bGwgaW5zaWRlCi0gICAgICAgICAgICAgICAgLy8gdGhlIHN1Y2Nlc3Nvci4gT3RoZXJ3aXNlLCB3
ZSBtdXN0IHNwbGl0IHRoZSBjcml0aWNhbCBlZGdlIGFuZCBjcmVhdGUKLSAgICAgICAgICAgICAg
ICAvLyBhIG5ldyBibG9jayBmb3IgdGhlIHNwaWxsLgotICAgICAgICAgICAgICAgIGlmIChzdWNj
ZXNzb3ItPm51bVByZWRlY2Vzc29ycygpID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgaW5z
ZXJ0aW9uU2V0Lmluc2VydEluc3RzKDAsIGluc3RzVG9Nb3ZlKTsKLSAgICAgICAgICAgICAgICAg
ICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoc3VjY2Vzc29yKTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICBhZGRlZEJsb2NrcyA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBXZSBwcm9iYWJseSB3YW50IGJldHRlciBibG9jayBvcmRlcmlu
ZyBoZXJlLgotICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBuZXdCbG9jayA9IG1fY29k
ZS5hZGRCbG9jaygpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IEluc3QmIGluc3Qg
OiBpbnN0c1RvTW92ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ld0Jsb2NrLT5hcHBlbmRJ
bnN0KGluc3QpOwotICAgICAgICAgICAgICAgICAgICBuZXdCbG9jay0+YXBwZW5kSW5zdChJbnN0
KEp1bXAsIGluc3RzVG9Nb3ZlLmxhc3QoKS5vcmlnaW4pKTsKLSAgICAgICAgICAgICAgICAgICAg
bmV3QmxvY2stPnN1Y2Nlc3NvcnMoKS5hcHBlbmQoc3VjY2Vzc29yKTsKLSAgICAgICAgICAgICAg
ICAgICAgZnJlcXVlbnRlZFN1Y2Nlc3Nvci5ibG9jaygpID0gbmV3QmxvY2s7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBibG9jay0+cmVzaXplKHRlcm1p
bmFsSW5kZXggKyAxKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhZGRlZEJsb2NrcykKLSAg
ICAgICAgICAgIG1fY29kZS5yZXNldFJlYWNoYWJpbGl0eSgpOwotICAgIH0KLQogICAgIENvZGUm
IG1fY29kZTsKICAgICBUbXBXaWR0aCBtX3RtcFdpZHRoOwogICAgIFVzZUNvdW50czxUbXA+JiBt
X3VzZUNvdW50czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2Nh
dGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdp
c3RlcnNCeUxpbmVhclNjYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTY0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmgiCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQXJnSW5saW5lcy5oIgorI2luY2x1
ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5oIgor
I2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgi
CisjaW5jbHVkZSAiQWlyTGl2ZW5lc3MuaCIKKyNpbmNsdWRlICJBaXJQYWRJbnRlcmZlcmVuY2Uu
aCIKKyNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCisjaW5jbHVkZSAiQWlyUmVnTGl2ZW5lc3Mu
aCIKKyNpbmNsdWRlICJBaXJUbXBJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+
CisjaW5jbHVkZSA8d3RmL1JhbmdlLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eyBuYW1lc3BhY2UgQWlyIHsKKworbmFtZXNwYWNlIHsKKworTk9fUkVUVVJOX0RVRV9UT19DUkFT
SCBORVZFUl9JTkxJTkUgdm9pZCBjcmFzaCgpCit7CisgICAgQ1JBU0goKTsKK30KKworI3VuZGVm
IFJFTEVBU0VfQVNTRVJUCisjZGVmaW5lIFJFTEVBU0VfQVNTRVJUKGFzc2VydGlvbikgZG8geyBc
CisgICAgaWYgKCEoYXNzZXJ0aW9uKSkgeyBcCisgICAgICAgIFdURlJlcG9ydEFzc2VydGlvbkZh
aWx1cmUoX19GSUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAjYXNzZXJ0aW9u
KTsgXAorICAgICAgICBjcmFzaCgpOyBcCisgICAgfSBcCit9IHdoaWxlICgwKQorCitib29sIHZl
cmJvc2UoKSB7IHJldHVybiBPcHRpb25zOjphaXJMaW5lYXJTY2FuVmVyYm9zZSgpOyB9Citib29s
IHNob3VsZFNwaWxsRXZlcnl0aGluZygpIHsgcmV0dXJuIE9wdGlvbnM6OmFpckxpbmVhclNjYW5T
cGlsbHNFdmVyeXRoaW5nKCk7IH0KKwordHlwZWRlZiBSYW5nZTxzaXplX3Q+IEludGVydmFsOwor
CitzdHJ1Y3QgVG1wRGF0YSB7CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
CisgICAgeworICAgICAgICBvdXQucHJpbnQoIntpbnRlcnZhbCA9ICIsIGludGVydmFsLCAiLCBz
cGlsbGVkID0gIiwgcG9pbnRlckR1bXAoc3BpbGxlZCksICIsIGFzc2lnbmVkID0gIiwgYXNzaWdu
ZWQsICIsIGlzVW5zcGlsbGFibGUgPSAiLCBpc1Vuc3BpbGxhYmxlLCAiLCBwb3NzaWJsZVJlZ3Mg
PSAiLCBwb3NzaWJsZVJlZ3MsICIsIGRpZEJ1aWxkUG9zc2libGVSZWdzID0gIiwgZGlkQnVpbGRQ
b3NzaWJsZVJlZ3MsICJ9Iik7CisgICAgfQorICAgIAorICAgIHZvaWQgdmFsaWRhdGUoKQorICAg
IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIShzcGlsbGVkICYmIGFzc2lnbmVkKSk7CisgICAg
fQorICAgIAorICAgIEludGVydmFsIGludGVydmFsOworICAgIFN0YWNrU2xvdCogc3BpbGxlZCB7
IG51bGxwdHIgfTsKKyAgICBSZWdpc3RlclNldCBwb3NzaWJsZVJlZ3M7CisgICAgUmVnIGFzc2ln
bmVkOworICAgIGJvb2wgaXNVbnNwaWxsYWJsZSB7IGZhbHNlIH07CisgICAgYm9vbCBkaWRCdWls
ZFBvc3NpYmxlUmVncyB7IGZhbHNlIH07Cit9OworCitzdHJ1Y3QgQ2xvYmJlciB7CisgICAgQ2xv
YmJlcigpCisgICAgeworICAgIH0KKyAgICAKKyAgICBDbG9iYmVyKHNpemVfdCBpbmRleCwgUmVn
aXN0ZXJTZXQgcmVncykKKyAgICAgICAgOiBpbmRleChpbmRleCkKKyAgICAgICAgLCByZWdzKHJl
Z3MpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKKyAgICB7CisgICAgICAgIG91dC5wcmludChpbmRleCwgIjoiLCByZWdzKTsKKyAgICB9
CisgICAgCisgICAgc2l6ZV90IGluZGV4IHsgMCB9OworICAgIFJlZ2lzdGVyU2V0IHJlZ3M7Cit9
OworCit0ZW1wbGF0ZTxCYW5rIGJhbms+CitjbGFzcyBMaW5lYXJTY2FuIHsKK3B1YmxpYzoKKyAg
ICBMaW5lYXJTY2FuKENvZGUmIGNvZGUpCisgICAgICAgIDogbV9jb2RlKGNvZGUpCisgICAgICAg
ICwgbV9zdGFydEluZGV4KGNvZGUuc2l6ZSgpKQorICAgICAgICAsIG1fbWFwKGNvZGUubnVtVG1w
cyhiYW5rKSkKKyAgICAgICAgLCBtX2luc2VydGlvblNldHMoY29kZS5zaXplKCksIGNvZGUpCisg
ICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIHJ1bigpCisgICAgeworICAgICAgICBidWlsZFJl
Z2lzdGVyU2V0KCk7CisgICAgICAgIGJ1aWxkSW5kaWNlcygpOworICAgICAgICBidWlsZEludGVy
dmFscygpOworICAgICAgICBpZiAoc2hvdWxkU3BpbGxFdmVyeXRoaW5nKCkpIHsKKyAgICAgICAg
ICAgIHNwaWxsRXZlcnl0aGluZygpOworICAgICAgICAgICAgZW1pdFNwaWxsQ29kZSgpOworICAg
ICAgICB9CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIHByZXBhcmVJbnRlcnZhbHMo
KTsKKyAgICAgICAgICAgIGF0dGVtcHRTY2FuKCk7CisgICAgICAgICAgICBpZiAoIW1fZGlkU3Bp
bGwpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBlbWl0U3BpbGxDb2RlKCk7
CisgICAgICAgIH0KKyAgICAgICAgaW5zZXJ0U3BpbGxDb2RlKCk7CisgICAgICAgIGFzc2lnblJl
Z2lzdGVycygpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgdm9pZCBidWlsZFJlZ2lzdGVy
U2V0KCkKKyAgICB7CisgICAgICAgIG1fcmVnaXN0ZXJzID0gbV9jb2RlLnJlZ3NJblByaW9yaXR5
T3JkZXIoYmFuayk7CisgICAgICAgIG1fcmVnaXN0ZXJTZXQuc2V0QWxsKG1fcmVnaXN0ZXJzKTsK
KyAgICB9CisKKyAgICB2b2lkIGJ1aWxkSW5kaWNlcygpCisgICAgeworICAgICAgICBzaXplX3Qg
aW5kZXggPSAwOworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7Cisg
ICAgICAgICAgICBtX3N0YXJ0SW5kZXhbYmxvY2tdID0gaW5kZXg7CisgICAgICAgICAgICBpbmRl
eCArPSBibG9jay0+c2l6ZSgpICsgMTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBzaXpl
X3QgaW5kZXhPZkhlYWQoQmFzaWNCbG9jayogYmxvY2spCisgICAgeworICAgICAgICByZXR1cm4g
bV9zdGFydEluZGV4W2Jsb2NrXTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IGluZGV4T2ZUYWls
KEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGluZGV4T2ZIZWFkKGJs
b2NrKSArIGJsb2NrLT5zaXplKCk7CisgICAgfQorICAgIAorICAgIHNpemVfdCBpbmRleE9mKEJh
c2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25lZCBpbnN0SW5kZXgsIEFyZzo6UGhhc2UgcGhhc2UpCisg
ICAgeworICAgICAgICByZXR1cm4gaW5kZXhPZkhlYWQoYmxvY2spICsgaW5zdEluZGV4ICsgcGhh
c2U7CisgICAgfQorICAgIAorICAgIEludGVydmFsIGludGVydmFsKHNpemVfdCBpbmRleE9mRWFy
bHksIEFyZzo6VGltaW5nIHRpbWluZykKKyAgICB7CisgICAgICAgIHN3aXRjaCAodGltaW5nKSB7
CisgICAgICAgIGNhc2UgQXJnOjpPbmx5RWFybHk6CisgICAgICAgICAgICByZXR1cm4gSW50ZXJ2
YWwoaW5kZXhPZkVhcmx5KTsKKyAgICAgICAgY2FzZSBBcmc6Ok9ubHlMYXRlOgorICAgICAgICAg
ICAgcmV0dXJuIEludGVydmFsKGluZGV4T2ZFYXJseSArIDEpOworICAgICAgICBjYXNlIEFyZzo6
RWFybHlBbmRMYXRlOgorICAgICAgICAgICAgcmV0dXJuIEludGVydmFsKGluZGV4T2ZFYXJseSwg
aW5kZXhPZkVhcmx5ICsgMik7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybiBJbnRlcnZhbCgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGJ1
aWxkSW50ZXJ2YWxzKCkKKyAgICB7CisgICAgICAgIFRtcExpdmVuZXNzPGJhbms+IGxpdmVuZXNz
KG1fY29kZSk7CisgICAgICAgIAorICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9j
b2RlKSB7CisgICAgICAgICAgICBzaXplX3QgaW5kZXhPZkhlYWQgPSB0aGlzLT5pbmRleE9mSGVh
ZChibG9jayk7CisgICAgICAgICAgICBzaXplX3QgaW5kZXhPZlRhaWwgPSB0aGlzLT5pbmRleE9m
VGFpbChibG9jayk7CisgICAgICAgICAgICBmb3IgKFRtcCB0bXAgOiBsaXZlbmVzcy5saXZlQXRI
ZWFkKGJsb2NrKSkgeworICAgICAgICAgICAgICAgIGlmICghdG1wLmlzUmVnKCkpCisgICAgICAg
ICAgICAgICAgICAgIG1fbWFwW3RtcF0uaW50ZXJ2YWwgfD0gSW50ZXJ2YWwoaW5kZXhPZkhlYWQp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChUbXAgdG1wIDogbGl2ZW5lc3MubGl2
ZUF0VGFpbChibG9jaykpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXRtcC5pc1JlZygpKQorICAg
ICAgICAgICAgICAgICAgICBtX21hcFt0bXBdLmludGVydmFsIHw9IEludGVydmFsKGluZGV4T2ZU
YWlsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnN0SW5kZXggPSAwOyBpbnN0SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK2luc3RJbmRl
eCkgeworICAgICAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsK
KyAgICAgICAgICAgICAgICBzaXplX3QgaW5kZXhPZkVhcmx5ID0gaW5kZXhPZkhlYWQgKyBpbnN0
SW5kZXg7CisgICAgICAgICAgICAgICAgaW5zdC5mb3JFYWNoVG1wKAorICAgICAgICAgICAgICAg
ICAgICBbJl0gKFRtcCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwgQmFuayB0bXBCYW5rLCBXaWR0aCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcC5pc1JlZygpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXBC
YW5rICE9IGJhbmspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgICAgICAgICAgbV9tYXBbdG1wXS5pbnRlcnZhbCB8PSBpbnRlcnZhbChpbmRleE9m
RWFybHksIEFyZzo6dGltaW5nKHJvbGUpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIFJlZ0xpdmVuZXNzOjpMb2NhbENhbGMgbG9jYWxDYWxj
KGxpdmVuZXNzLCBibG9jayk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGF1dG8gcmVjb3Jk
ID0gWyZdICh1bnNpZ25lZCBpbnN0SW5kZXgpIHsKKyAgICAgICAgICAgICAgICBSZWdpc3RlclNl
dCByZWdzID0gbG9jYWxDYWxjLmxpdmUoKTsKKyAgICAgICAgICAgICAgICBpZiAoSW5zdCogcHJl
diA9IGJsb2NrLT5nZXQoaW5zdEluZGV4IC0gMSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJl
di0+Zm9yRWFjaDxSZWc+KAorICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChSZWcmIHJlZywg
QXJnOjpSb2xlIHJvbGUsIEJhbmssIFdpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKEFyZzo6aXNMYXRlRGVmKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZWdzLmFkZChyZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChwcmV2LT5raW5kLm9wY29kZSA9PSBQYXRjaCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJlZ3MubWVyZ2UocHJldi0+ZXh0cmFDbG9iYmVyZWRSZWdzKCkpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoSW5zdCogbmV4dCA9IGJsb2NrLT5n
ZXQoaW5zdEluZGV4KSkgeworICAgICAgICAgICAgICAgICAgICBuZXh0LT5mb3JFYWNoPFJlZz4o
CisgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKFJlZyYgcmVnLCBBcmc6OlJvbGUgcm9sZSwg
QmFuaywgV2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0Vh
cmx5RGVmKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdzLmFkZChy
ZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIGlm
IChuZXh0LT5raW5kLm9wY29kZSA9PSBQYXRjaCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
Z3MubWVyZ2UobmV4dC0+ZXh0cmFFYXJseUNsb2JiZXJlZFJlZ3MoKSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJlZ3MuZmlsdGVyKG1fcmVn
aXN0ZXJTZXQpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChyZWdzLmlz
RW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIG1fY2xvYmJlcnMuYXBwZW5kKENsb2JiZXIoaW5kZXhPZkhlYWQgKyBp
bnN0SW5kZXgsIHJlZ3MpKTsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIHJlY29yZChibG9jay0+c2l6ZSgpKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5z
dEluZGV4ID0gYmxvY2stPnNpemUoKTsgaW5zdEluZGV4LS07KSB7CisgICAgICAgICAgICAgICAg
bG9jYWxDYWxjLmV4ZWN1dGUoaW5zdEluZGV4KTsKKyAgICAgICAgICAgICAgICByZWNvcmQoaW5z
dEluZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3Rk
Ojpzb3J0KAorICAgICAgICAgICAgbV9jbG9iYmVycy5iZWdpbigpLCBtX2Nsb2JiZXJzLmVuZCgp
LAorICAgICAgICAgICAgW10gKENsb2JiZXImIGEsIENsb2JiZXImIGIpIC0+IGJvb2wgeworICAg
ICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IDwgYi5pbmRleDsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICAKKyAgICAgICAgaWYgKHZlcmJvc2UoKSkgeworICAgICAgICAgICAgZGF0YUxvZygi
SW50ZXJ2YWxzOlxuIik7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHRtcEluZGV4ID0gMDsg
dG1wSW5kZXggPCBtX2NvZGUubnVtVG1wcyhiYW5rKTsgKyt0bXBJbmRleCkgeworICAgICAgICAg
ICAgICAgIFRtcCB0bXAgPSBUbXA6OnRtcEZvckluZGV4KGJhbmssIHRtcEluZGV4KTsKKyAgICAg
ICAgICAgICAgICBkYXRhTG9nKCIgICAgIiwgdG1wLCAiOiAiLCBtX21hcFt0bXBdLCAiXG4iKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIHNwaWxsRXZl
cnl0aGluZygpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIHRtcEluZGV4ID0gMDsgdG1w
SW5kZXggPCBtX2NvZGUubnVtVG1wcyhiYW5rKTsgKyt0bXBJbmRleCkKKyAgICAgICAgICAgIHNw
aWxsKFRtcDo6dG1wRm9ySW5kZXgoYmFuaywgdG1wSW5kZXgpKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBwcmVwYXJlSW50ZXJ2YWxzKCkKKyAgICB7CisgICAgICAgIG1fdG1wcy5yZXNpemUoMCk7
CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIHRtcEluZGV4ID0gMDsgdG1wSW5kZXgg
PCBtX2NvZGUubnVtVG1wcyhiYW5rKTsgKyt0bXBJbmRleCkgeworICAgICAgICAgICAgVG1wIHRt
cCA9IFRtcDo6dG1wRm9ySW5kZXgoYmFuaywgdG1wSW5kZXgpOworICAgICAgICAgICAgVG1wRGF0
YSYgZGF0YSA9IG1fbWFwW3RtcF07CisgICAgICAgICAgICBpZiAoZGF0YS5zcGlsbGVkKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBkYXRhLmFz
c2lnbmVkID0gUmVnKCk7CisgICAgICAgICAgICBtX3RtcHMuYXBwZW5kKHRtcCk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIHN0ZDo6c29ydCgKKyAgICAgICAgICAgIG1fdG1wcy5iZWdp
bigpLCBtX3RtcHMuZW5kKCksCisgICAgICAgICAgICBbJl0gKFRtcCYgYSwgVG1wJiBiKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIG1fbWFwW2FdLmludGVydmFsLmJlZ2luKCkgPCBtX21hcFti
XS5pbnRlcnZhbC5iZWdpbigpOworICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICBp
ZiAodmVyYm9zZSgpKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJUbXBzOiAiLCBsaXN0RHVtcCht
X3RtcHMpLCAiXG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2coIkNsb2JiZXJzOiAiLCBsaXN0RHVt
cChtX2Nsb2JiZXJzKSwgIlxuIik7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgVG1wIGFk
ZFNwaWxsVG1wV2l0aEludGVydmFsKEludGVydmFsIGludGVydmFsKQorICAgIHsKKyAgICAgICAg
VG1wRGF0YSBkYXRhOworICAgICAgICBkYXRhLmludGVydmFsID0gaW50ZXJ2YWw7CisgICAgICAg
IGRhdGEuaXNVbnNwaWxsYWJsZSA9IHRydWU7CisgICAgICAgIAorICAgICAgICBUbXAgdG1wID0g
bV9jb2RlLm5ld1RtcChiYW5rKTsKKyAgICAgICAgbV9tYXAuYXBwZW5kKHRtcCwgZGF0YSk7Cisg
ICAgICAgIHJldHVybiB0bXA7CisgICAgfQorICAgIAorICAgIHZvaWQgYXR0ZW1wdFNjYW4oKQor
ICAgIHsKKyAgICAgICAgLy8gVGhpcyBpcyBtb2RlbGVkIGFmdGVyIExpbmVhclNjYW5SZWdpc3Rl
ckFsbG9jYXRpb24gaW4gRmlnLiAxIGluCisgICAgICAgIC8vIGh0dHA6Ly9kbC5hY20ub3JnL2Np
dGF0aW9uLmNmbT9pZD0zMzAyNTAuCisKKyAgICAgICAgbV9kaWRTcGlsbCA9IGZhbHNlOworICAg
ICAgICBtX2FjdGl2ZS5jbGVhcigpOworICAgICAgICBtX2FjdGl2ZVJlZ3MgPSBSZWdpc3RlclNl
dCgpOworICAgICAgICAKKyAgICAgICAgc2l6ZV90IGNsb2JiZXJJbmRleCA9IDA7CisgICAgICAg
IGZvciAoVG1wJiB0bXAgOiBtX3RtcHMpIHsKKyAgICAgICAgICAgIFRtcERhdGEmIGVudHJ5ID0g
bV9tYXBbdG1wXTsKKyAgICAgICAgICAgIHNpemVfdCBpbmRleCA9IGVudHJ5LmludGVydmFsLmJl
Z2luKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKCkpIHsKKyAgICAg
ICAgICAgICAgICBkYXRhTG9nKCJJbmRleCAjIiwgaW5kZXgsICI6ICIsIHRtcCwgIlxuIik7Cisg
ICAgICAgICAgICAgICAgZGF0YUxvZygiICAiLCB0bXAsICI6ICIsIGVudHJ5LCAiXG4iKTsKKyAg
ICAgICAgICAgICAgICBkYXRhTG9nKCIgIGNsb2JiZXJJbmRleCA9ICIsIGNsb2JiZXJJbmRleCwg
IlxuIik7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiICBBY3RpdmU6XG4iKTsKKyAgICAgICAg
ICAgICAgICBmb3IgKFRtcCB0bXAgOiBtX2FjdGl2ZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZygiICAgICIsIHRtcCwgIjogIiwgbV9tYXBbdG1wXSwgIlxuIik7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgRXhwaXJlT2xkSW50ZXJ2YWxz
IGluIEZpZy4gMS4KKyAgICAgICAgICAgIHdoaWxlICghbV9hY3RpdmUuaXNFbXB0eSgpKSB7Cisg
ICAgICAgICAgICAgICAgVG1wIHRtcCA9IG1fYWN0aXZlLmZpcnN0KCk7CisgICAgICAgICAgICAg
ICAgVG1wRGF0YSYgZW50cnkgPSBtX21hcFt0bXBdOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGJvb2wgZXhwaXJlZCA9IGVudHJ5LmludGVydmFsLmVuZCgpIDw9IGluZGV4Owor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICghZXhwaXJlZCkKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9h
Y3RpdmUucmVtb3ZlRmlyc3QoKTsKKyAgICAgICAgICAgICAgICBtX2FjdGl2ZVJlZ3MucmVtb3Zl
KGVudHJ5LmFzc2lnbmVkKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gSWYgbmVj
ZXNzYXJ5LCBjb21wdXRlIHRoZSBzZXQgb2YgcmVnaXN0ZXJzIHRoYXQgdGhpcyB0bXAgY291bGQg
ZXZlbiB1c2UuIFRoaXMgaXMgbm90CisgICAgICAgICAgICAvLyBwYXJ0IG9mIEZpZy4gMSwgYnV0
IGl0J3MgYSB0ZWNobmlxdWUgdGhhdCB0aGUgYXV0aG9ycyBjbGFpbSB0byBoYXZlIGltcGxlbWVu
dGVkIGluIG9uZSBvZgorICAgICAgICAgICAgLy8gdGhlaXIgdHdvIGltcGxlbWVudGF0aW9ucy4g
VGhlcmUgbWF5IGJlIG90aGVyIG1vcmUgZWZmaWNpZW50IHdheXMgdG8gZG8gdGhpcywgYnV0IHRo
aXMKKyAgICAgICAgICAgIC8vIGltcGxlbWVudGF0aW9uIGdldHMgc29tZSBwZXJmIHdpbnMgZnJv
bSBwaWdneS1iYWNraW5nIHRoaXMgY2FsY3VsYXRpb24gaW4gdGhlIHNjYW4uCisgICAgICAgICAg
ICAvLworICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHRoZSBkaWRCdWlsZCBmbGFnIHN0aWNrcyB0
aHJvdWdoIHNwaWxsaW5nLiBTcGlsbGluZyBkb2Vzbid0IGNoYW5nZSB0aGUKKyAgICAgICAgICAg
IC8vIGludGVyZmVyZW5jZSBzaXR1YXRpb24uCisgICAgICAgICAgICAvLworICAgICAgICAgICAg
Ly8gTm90ZSB0aGF0IHdlIGNvdWxkIHNob3J0LWNpcmN1aXQgdGhpcyBpZiB3ZSdyZSBkZWFsaW5n
IHdpdGggYSBzcGlsbGFibGUgdG1wLCB0aGVyZSBhcmUgbm8KKyAgICAgICAgICAgIC8vIGZyZWUg
cmVnaXN0ZXJzLCBhbmQgdGhpcyByZWdpc3RlcidzIGludGVydmFsIGVuZHMgYWZ0ZXIgdGhlIG9u
ZSBvbiB0aGUgdG9wIG9mIHRoZSBhY3RpdmUKKyAgICAgICAgICAgIC8vIHN0YWNrLgorICAgICAg
ICAgICAgaWYgKCFlbnRyeS5kaWRCdWlsZFBvc3NpYmxlUmVncykgeworICAgICAgICAgICAgICAg
IC8vIEFkdmFuY2UgdGhlIGNsb2JiZXIgaW5kZXggdW50aWwgaXQncyBhdCBhIGNsb2JiZXIgdGhh
dCBpcyByZWxldmFudCB0byB1cy4KKyAgICAgICAgICAgICAgICB3aGlsZSAoY2xvYmJlckluZGV4
IDwgbV9jbG9iYmVycy5zaXplKCkgJiYgbV9jbG9iYmVyc1tjbG9iYmVySW5kZXhdLmluZGV4IDwg
aW5kZXgpCisgICAgICAgICAgICAgICAgICAgIGNsb2JiZXJJbmRleCsrOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHBvc3NpYmxlUmVncyA9IG1fcmVnaXN0
ZXJTZXQ7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IGNsb2JiZXJJbmRleDsgaSA8
IG1fY2xvYmJlcnMuc2l6ZSgpICYmIG1fY2xvYmJlcnNbaV0uaW5kZXggPCBlbnRyeS5pbnRlcnZh
bC5lbmQoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZVJlZ3MuZXhjbHVkZSht
X2Nsb2JiZXJzW2ldLnJlZ3MpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGVu
dHJ5LnBvc3NpYmxlUmVncyA9IHBvc3NpYmxlUmVnczsKKyAgICAgICAgICAgICAgICBlbnRyeS5k
aWRCdWlsZFBvc3NpYmxlUmVncyA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGlmICh2ZXJib3NlKCkpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiICBQ
b3NzaWJsZSByZWdzOiAiLCBlbnRyeS5wb3NzaWJsZVJlZ3MsICJcbiIpOworICAgICAgICAgICAg
CisgICAgICAgICAgICAvLyBGaW5kIGEgZnJlZSByZWdpc3RlciB0aGF0IHdlIGFyZSBhbGxvd2Vk
IHRvIHVzZS4KKyAgICAgICAgICAgIGlmIChtX2FjdGl2ZS5zaXplKCkgIT0gbV9yZWdpc3RlcnMu
c2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgYm9vbCBkaWRBc3NpZ24gPSBmYWxzZTsKKyAgICAg
ICAgICAgICAgICBmb3IgKFJlZyByZWcgOiBtX3JlZ2lzdGVycykgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoIW1fYWN0aXZlUmVncy5jb250YWlucyhyZWcpICYmIGVudHJ5LnBvc3NpYmxlUmVn
cy5jb250YWlucyhyZWcpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhc3NpZ24odG1wLCBy
ZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgZGlkQXNzaWduID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChkaWRBc3NpZ24pCisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAv
LyBUaGlzIGlzIFNwaWxsQXRJbnRlcnZhbCBpbiBGaWcuIDEsIGJ1dCBtb2RpZmllZCB0byBoYW5k
bGUgY2xvYmJlcnMuCisgICAgICAgICAgICBUbXAgc3BpbGxUbXAgPSBtX2FjdGl2ZS50YWtlTGFz
dCgKKyAgICAgICAgICAgICAgICBbJl0gKFRtcCBzcGlsbENhbmRpZGF0ZSkgLT4gYm9vbCB7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeS5wb3NzaWJsZVJlZ3MuY29udGFpbnMobV9t
YXBbc3BpbGxDYW5kaWRhdGVdLmFzc2lnbmVkKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIGlmICghc3BpbGxUbXApIHsKKyAgICAgICAgICAgICAgICBzcGlsbCh0bXApOworICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgVG1wRGF0
YSYgc3BpbGxFbnRyeSA9IG1fbWFwW3NwaWxsVG1wXTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHNwaWxsRW50cnkuYXNzaWduZWQpOworICAgICAgICAgICAgaWYgKHNwaWxsRW50cnkuaXNV
bnNwaWxsYWJsZSB8fAorICAgICAgICAgICAgICAgICghZW50cnkuaXNVbnNwaWxsYWJsZSAmJiBz
cGlsbEVudHJ5LmludGVydmFsLmVuZCgpIDw9IGVudHJ5LmludGVydmFsLmVuZCgpKSkgeworICAg
ICAgICAgICAgICAgIHNwaWxsKHRtcCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fYWN0aXZlLnJlbW92ZUxhc3Qo
KTsKKyAgICAgICAgICAgIGFzc2lnbih0bXAsIHNwaWxsRW50cnkuYXNzaWduZWQpOworICAgICAg
ICAgICAgc3BpbGwoc3BpbGxUbXApOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQg
YXNzaWduKFRtcCB0bXAsIFJlZyByZWcpCisgICAgeworICAgICAgICBUbXBEYXRhJiBlbnRyeSA9
IG1fbWFwW3RtcF07CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFlbnRyeS5zcGlsbGVkKTsKKyAg
ICAgICAgZW50cnkuYXNzaWduZWQgPSByZWc7CisgICAgICAgIG1fYWN0aXZlUmVncy5hZGQocmVn
KTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX21hcFt0bXBdLmlzVW5zcGlsbGFibGUpIHsKKyAg
ICAgICAgICAgIC8vIFdlIHdhbnQgdGhlIHNwaWxsIHRtcHMgKHJlYWQ6IHVuc3BpbGxhYmxlIHRt
cHMpIGZpcnN0LgorICAgICAgICAgICAgbV9hY3RpdmUucHJlcGVuZCh0bXApOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2FjdGl2ZS5hcHBlbmRB
bmRCdWJibGUoCisgICAgICAgICAgICB0bXAsCisgICAgICAgICAgICBbJl0gKFRtcCBvdGhlclRt
cCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgVG1wRGF0YSYgb3RoZXJFbnRyeSA9IG1fbWFw
W290aGVyVG1wXTsKKyAgICAgICAgICAgICAgICBpZiAob3RoZXJFbnRyeS5pc1Vuc3BpbGxhYmxl
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0
dXJuIG1fbWFwW290aGVyVG1wXS5pbnRlcnZhbC5lbmQoKSA+IG1fbWFwW3RtcF0uaW50ZXJ2YWwu
ZW5kKCk7CisgICAgICAgICAgICB9KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzcGlsbChUbXAg
dG1wKQorICAgIHsKKyAgICAgICAgVG1wRGF0YSYgZW50cnkgPSBtX21hcFt0bXBdOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghZW50cnkuaXNVbnNwaWxsYWJsZSk7CisgICAgICAgIGVudHJ5LnNw
aWxsZWQgPSBtX2NvZGUuYWRkU3RhY2tTbG90KDgsIFN0YWNrU2xvdEtpbmQ6OlNwaWxsKTsKKyAg
ICAgICAgZW50cnkuYXNzaWduZWQgPSBSZWcoKTsKKyAgICAgICAgbV9kaWRTcGlsbCA9IHRydWU7
CisgICAgfQorICAgIAorICAgIHZvaWQgZW1pdFNwaWxsQ29kZSgpCisgICAgeworICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7CisgICAgICAgICAgICBzaXplX3QgaW5k
ZXhPZkhlYWQgPSB0aGlzLT5pbmRleE9mSGVhZChibG9jayk7CisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGluc3RJbmRleCA9IDA7IGluc3RJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsraW5zdElu
ZGV4KSB7CisgICAgICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgp
OworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4T2ZFYXJseSA9IGluZGV4T2ZIZWFkICsg
aW5zdEluZGV4OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIEZpcnN0IHRy
eSB0byBzcGlsbCBkaXJlY3RseS4KKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgaW5zdC5hcmdzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIEFyZyYg
YXJnID0gaW5zdC5hcmdzW2ldOworICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZy5pc1RtcCgp
KQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAg
IGlmIChhcmcuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgICAgICBpZiAoYXJnLmJhbmsoKSAhPSBiYW5rKQorICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc3BpbGxl
ZCA9IG1fbWFwW2FyZy50bXAoKV0uc3BpbGxlZDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFz
cGlsbGVkKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgICAgIGlmICghaW5zdC5hZG1pdHNTdGFjayhpKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBhcmcgPSBBcmc6OnN0YWNrKHNwaWxsZWQp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAv
LyBGYWxsIGJhY2sgb24gdGhlIGhhcmQgd2F5LgorICAgICAgICAgICAgICAgIGluc3QuZm9yRWFj
aFRtcCgKKyAgICAgICAgICAgICAgICAgICAgWyZdIChUbXAmIHRtcCwgQXJnOjpSb2xlIHJvbGUs
IEJhbmsgdG1wQmFuaywgV2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXAu
aXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAodG1wQmFuayAhPSBiYW5rKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc3BpbGxl
ZCA9IG1fbWFwW3RtcF0uc3BpbGxlZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3Bp
bGxlZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgICAgICAgICBPcGNvZGUgbW92ZSA9IGJhbmsgPT0gR1AgPyBNb3ZlIDogTW92ZURvdWJsZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IGFkZFNwaWxsVG1wV2l0aEludGVydmFsKGlu
dGVydmFsKGluZGV4T2ZFYXJseSwgQXJnOjp0aW1pbmcocm9sZSkpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChyb2xlID09IEFyZzo6U2NyYXRjaCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0FueVVz
ZShyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldHNbYmxv
Y2tdLmluc2VydChpbnN0SW5kZXgsIG1vdmUsIGluc3Qub3JpZ2luLCBBcmc6OnN0YWNrKHNwaWxs
ZWQpLCB0bXApOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlEZWYocm9s
ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXRzW2Jsb2NrXS5p
bnNlcnQoaW5zdEluZGV4ICsgMSwgbW92ZSwgaW5zdC5vcmlnaW4sIHRtcCwgQXJnOjpzdGFjayhz
cGlsbGVkKSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIHZvaWQgaW5zZXJ0U3BpbGxDb2RlKCkKKyAgICB7CisgICAg
ICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpCisgICAgICAgICAgICBtX2luc2Vy
dGlvblNldHNbYmxvY2tdLmV4ZWN1dGUoYmxvY2spOworICAgIH0KKyAgICAKKyAgICB2b2lkIGFz
c2lnblJlZ2lzdGVycygpCisgICAgeworICAgICAgICBpZiAodmVyYm9zZSgpKSB7CisgICAgICAg
ICAgICBkYXRhTG9nKCJBYm91dCB0byBhbGxvY2F0ZSByZWdpc3RlcnMuIFN0YXRlIG9mIGFsbCB0
bXBzOlxuIik7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHRtcEluZGV4ID0gMDsgdG1wSW5k
ZXggPCBtX2NvZGUubnVtVG1wcyhiYW5rKTsgKyt0bXBJbmRleCkgeworICAgICAgICAgICAgICAg
IFRtcCB0bXAgPSBUbXA6OnRtcEZvckluZGV4KGJhbmssIHRtcEluZGV4KTsKKyAgICAgICAgICAg
ICAgICBkYXRhTG9nKCIgICAgIiwgdG1wLCAiOiAiLCBtX21hcFt0bXBdLCAiXG4iKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGRhdGFMb2coIklSOlxuIik7CisgICAgICAgICAgICBkYXRh
TG9nKG1fY29kZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBtX2NvZGUpIHsKKyAgICAgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6ICpibG9j
aykgeworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKCkpCisgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coIkF0OiAiLCBpbnN0LCAiXG4iKTsKKyAgICAgICAgICAgICAgICBpbnN0LmZvckVh
Y2hUbXBGYXN0KAorICAgICAgICAgICAgICAgICAgICBbJl0gKFRtcCYgdG1wKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcC5iYW5rKCkgIT0g
YmFuaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlZyByZWcgPSBtX21hcFt0bXBd
LmFzc2lnbmVkOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWcpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJGYWlsZWQgdG8gYWxsb2NhdGUgcmVnIGZvcjog
IiwgdG1wLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgdG1wID0gVG1wKHJlZyk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIENvZGUmIG1fY29kZTsKKyAg
ICBWZWN0b3I8UmVnPiBtX3JlZ2lzdGVyczsKKyAgICBSZWdpc3RlclNldCBtX3JlZ2lzdGVyU2V0
OworICAgIEluZGV4TWFwPEJhc2ljQmxvY2sqLCBzaXplX3Q+IG1fc3RhcnRJbmRleDsKKyAgICBJ
bmRleE1hcDxUbXA6OkluZGV4ZWQ8YmFuaz4sIFRtcERhdGE+IG1fbWFwOworICAgIEluZGV4TWFw
PEJhc2ljQmxvY2sqLCBJbnNlcnRpb25TZXQ+IG1faW5zZXJ0aW9uU2V0czsKKyAgICBWZWN0b3I8
Q2xvYmJlcj4gbV9jbG9iYmVyczsgLy8gQWZ0ZXIgd2UgYWxsb2NhdGUgdGhpcywgd2UgaGFwcGls
eSBwb2ludCBwb2ludGVycyBpbnRvIGl0LgorICAgIFZlY3RvcjxUbXA+IG1fdG1wczsKKyAgICBE
ZXF1ZTxUbXA+IG1fYWN0aXZlOworICAgIFJlZ2lzdGVyU2V0IG1fYWN0aXZlUmVnczsKKyAgICBi
b29sIG1fZGlkU3BpbGwgeyBmYWxzZSB9OworfTsKKwordGVtcGxhdGU8QmFuayBiYW5rPgordm9p
ZCBydW5MaW5lYXJTY2FuKENvZGUmIGNvZGUpCit7CisgICAgaWYgKHZlcmJvc2UoKSkKKyAgICAg
ICAgZGF0YUxvZygiQWlyIGJlZm9yZSBsaW5lYXIgc2NhbiBmb3IgIiwgYmFuaywgIjpcbiIsIGNv
ZGUpOworICAgIExpbmVhclNjYW48YmFuaz4gbGluZWFyU2Nhbihjb2RlKTsKKyAgICBsaW5lYXJT
Y2FuLnJ1bigpOworICAgIGlmICh2ZXJib3NlKCkpCisgICAgICAgIGRhdGFMb2coIkFpciBhZnRl
ciBsaW5lYXIgc2NhbiBmb3IgIiwgYmFuaywgIjpcbiIsIGNvZGUpOworfQorCit9IC8vIGFub255
bW91cyBuYW1lc3BhY2UKKwordm9pZCBhbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2NhbihDb2Rl
JiBjb2RlKQoreworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAiYWxsb2NhdGVSZWdp
c3RlcnNCeUxpbmVhclNjYW4iKTsKKyAgICBwYWRJbnRlcmZlcmVuY2UoY29kZSk7CisgICAgcnVu
TGluZWFyU2NhbjxGUD4oY29kZSk7CisgICAgcnVuTGluZWFyU2NhbjxHUD4oY29kZSk7CisgICAg
Zml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMoY29kZSk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lz
dGVyc0J5TGluZWFyU2Nhbi5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
Q1BVLmgiCisjaW5jbHVkZSAiT3B0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKKy8vIFRoaXMgaW1wbGVtZW50
cyB0aGUgUG9sZXR0byBhbmQgU2Fya2VyIHJlZ2lzdGVyIGFsbG9jYXRvciBjYWxsZWQgImxpbmVh
ciBzY2FuIjoKKy8vIGh0dHA6Ly9kbC5hY20ub3JnL2NpdGF0aW9uLmNmbT9pZD0zMzAyNTAKKy8v
CisvLyBUaGlzIGlzIG5vdCBBaXIncyBwcmltYXJ5IHJlZ2lzdGVyIGFsbG9jYXRvci4gV2UgdXNl
IGl0IG9ubHkgd2hlbiBydW5uaW5nIGF0IG9wdExldmVsPTAuIFRoYXQncyBub3QKKy8vIHRoZSBk
ZWZhdWx0IGxldmVsLiBUaGlzIHJlZ2lzdGVyIGFsbG9jYXRvciBpcyBvcHRpbWl6ZWQgcHJpbWFy
aWx5IGZvciBydW5uaW5nIHF1aWNrbHkuIEl0J3MgZXhwZWN0ZWQKKy8vIHRoYXQgaW1wcm92ZW1l
bnRzIHRvIHRoaXMgcmVnaXN0ZXIgYWxsb2NhdG9yIHNob3VsZCBmb2N1cyBwcmltYXJpbHkgb24g
aW1wcm92aW5nIGl0cyBleGVjdXRpb24gdGltZQorLy8gd2l0aG91dCBtdWNoIHJlZ2FyZCBmb3Ig
dGhlIHF1YWxpdHkgb2YgZ2VuZXJhdGVkIGNvZGUuCisvLworLy8gRm9yIEFpcidzIHByaW1hcnkg
cmVnaXN0ZXIgYWxsb2NhdG9yLCBzZWUgQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3Jp
bmcuaHxjcHAuCit2b2lkIGFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuKENvZGUmKTsKKwor
fSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0
ZVN0YWNrLmNwcAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYxLDcgKzE2MSw3
IEBAIHZvaWQgYWxsb2NhdGVTdGFjayhDb2RlJiBjb2RlKQogCiAgICAgLy8gTm93IHdlIGhhbmRs
ZSB0aGUgc3BpbGwgc2xvdHMuCiAgICAgU3RhY2tTbG90TGl2ZW5lc3MgbGl2ZW5lc3MoY29kZSk7
Ci0gICAgSW5kZXhNYXA8U3RhY2tTbG90LCBIYXNoU2V0PFN0YWNrU2xvdCo+PiBpbnRlcmZlcmVu
Y2UoY29kZS5zdGFja1Nsb3RzKCkuc2l6ZSgpKTsKKyAgICBJbmRleE1hcDxTdGFja1Nsb3QqLCBI
YXNoU2V0PFN0YWNrU2xvdCo+PiBpbnRlcmZlcmVuY2UoY29kZS5zdGFja1Nsb3RzKCkuc2l6ZSgp
KTsKICAgICBWZWN0b3I8U3RhY2tTbG90Kj4gc2xvdHM7CiAKICAgICAvLyBXZSB3aWxsIHBlcmZv
cm0gc29tZSBzcGlsbCBjb2FsZXNjaW5nLiBUbyBtYWtlIHRoYXQgZWZmZWN0aXZlLCB3ZSBuZWVk
IHRvIGJlIGFibGUgdG8gaWRlbnRpZnkKQEAgLTMwOSw3ICszMDksNyBAQCB2b2lkIGFsbG9jYXRl
U3RhY2soQ29kZSYgY29kZSkKICAgICAgICAgICAgIHJldHVybiBhLmZyZXF1ZW5jeSA+IGIuZnJl
cXVlbmN5OwogICAgICAgICB9KTsKICAgICAKLSAgICBJbmRleE1hcDxTdGFja1Nsb3QsIFN0YWNr
U2xvdCo+IHJlbWFwcGVkU3RhY2tTbG90cyhjb2RlLnN0YWNrU2xvdHMoKS5zaXplKCkpOworICAg
IEluZGV4TWFwPFN0YWNrU2xvdCosIFN0YWNrU2xvdCo+IHJlbWFwcGVkU3RhY2tTbG90cyhjb2Rl
LnN0YWNrU2xvdHMoKS5zaXplKCkpOwogICAgIGF1dG8gcmVtYXAgPSBbJl0gKFN0YWNrU2xvdCog
c2xvdCkgLT4gU3RhY2tTbG90KiB7CiAgICAgICAgIGlmICghc2xvdCkKICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNw
cAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJB
cmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODIsNiArMjgyLDM3IEBAIHZvaWQgcHJpbnRJbnRl
cm5hbChQcmludFN0cmVhbSYgb3V0LCBBcmcKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogfQogCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQXJnOjpQaGFz
ZSBwaGFzZSkKK3sKKyAgICBzd2l0Y2ggKHBoYXNlKSB7CisgICAgY2FzZSBBcmc6OkVhcmx5Ogor
ICAgICAgICBvdXQucHJpbnQoIkVhcmx5Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFy
Zzo6TGF0ZToKKyAgICAgICAgb3V0LnByaW50KCJMYXRlIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIHByaW50
SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQXJnOjpUaW1pbmcgdGltaW5nKQoreworICAgIHN3
aXRjaCAodGltaW5nKSB7CisgICAgY2FzZSBBcmc6Ok9ubHlFYXJseToKKyAgICAgICAgb3V0LnBy
aW50KCJPbmx5RWFybHkiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJnOjpPbmx5TGF0
ZToKKyAgICAgICAgb3V0LnByaW50KCJPbmx5TGF0ZSIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBBcmc6OkVhcmx5QW5kTGF0ZToKKyAgICAgICAgb3V0LnByaW50KCJFYXJseUFuZExhdGUi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Cit9CisKIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBcmc6OlJv
bGUgcm9sZSkKIHsKICAgICBzd2l0Y2ggKHJvbGUpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQXJnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJBcmcuaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJBcmcuaAkod29ya2luZyBjb3B5KQpAQCAtOTIsNiArOTIsMTcgQEAgcHVi
bGljOgogICAgICAgICBDb2xkLAogICAgICAgICBXYXJtCiAgICAgfTsKKyAgICAKKyAgICBlbnVt
IFBoYXNlIDogaW50OF90IHsKKyAgICAgICAgRWFybHksCisgICAgICAgIExhdGUKKyAgICB9Owor
ICAgIAorICAgIGVudW0gVGltaW5nIDogaW50OF90IHsKKyAgICAgICAgT25seUVhcmx5LAorICAg
ICAgICBPbmx5TGF0ZSwKKyAgICAgICAgRWFybHlBbmRMYXRlCisgICAgfTsKIAogICAgIGVudW0g
Um9sZSA6IGludDhfdCB7CiAgICAgICAgIC8vIFVzZSBtZWFucyB0aGF0IHRoZSBJbnN0IHdpbGwg
cmVhZCBmcm9tIHRoaXMgdmFsdWUgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UuCkBAIC0yNTMs
NyArMjY0LDgyIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBpc0NvbGRVc2Uocm9s
ZSkgPyBDb2xkIDogV2FybTsKICAgICB9Ci0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCBhY3RpdmVB
dChSb2xlIHJvbGUsIFBoYXNlIHBoYXNlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChyb2xlKSB7
CisgICAgICAgIGNhc2UgVXNlOgorICAgICAgICBjYXNlIENvbGRVc2U6CisgICAgICAgIGNhc2Ug
RWFybHlEZWY6CisgICAgICAgIGNhc2UgRWFybHlaRGVmOgorICAgICAgICBjYXNlIFVzZUFkZHI6
CisgICAgICAgICAgICByZXR1cm4gcGhhc2UgPT0gRWFybHk7CisgICAgICAgIGNhc2UgTGF0ZVVz
ZToKKyAgICAgICAgY2FzZSBMYXRlQ29sZFVzZToKKyAgICAgICAgY2FzZSBEZWY6CisgICAgICAg
IGNhc2UgWkRlZjoKKyAgICAgICAgICAgIHJldHVybiBwaGFzZSA9PSBMYXRlOworICAgICAgICBj
YXNlIFVzZURlZjoKKyAgICAgICAgY2FzZSBVc2VaRGVmOgorICAgICAgICBjYXNlIFNjcmF0Y2g6
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGJvb2wgYWN0aXZlQXQoVGltaW5n
IHRpbWluZywgUGhhc2UgcGhhc2UpCisgICAgeworICAgICAgICBzd2l0Y2ggKHRpbWluZykgewor
ICAgICAgICBjYXNlIE9ubHlFYXJseToKKyAgICAgICAgICAgIHJldHVybiBwaGFzZSA9PSBFYXJs
eTsKKyAgICAgICAgY2FzZSBPbmx5TGF0ZToKKyAgICAgICAgICAgIHJldHVybiBwaGFzZSA9PSBM
YXRlOworICAgICAgICBjYXNlIEVhcmx5QW5kTGF0ZToKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAK
KyAgICBzdGF0aWMgVGltaW5nIHRpbWluZyhSb2xlIHJvbGUpCisgICAgeworICAgICAgICBzd2l0
Y2ggKHJvbGUpIHsKKyAgICAgICAgY2FzZSBVc2U6CisgICAgICAgIGNhc2UgQ29sZFVzZToKKyAg
ICAgICAgY2FzZSBFYXJseURlZjoKKyAgICAgICAgY2FzZSBFYXJseVpEZWY6CisgICAgICAgIGNh
c2UgVXNlQWRkcjoKKyAgICAgICAgICAgIHJldHVybiBPbmx5RWFybHk7CisgICAgICAgIGNhc2Ug
TGF0ZVVzZToKKyAgICAgICAgY2FzZSBMYXRlQ29sZFVzZToKKyAgICAgICAgY2FzZSBEZWY6Cisg
ICAgICAgIGNhc2UgWkRlZjoKKyAgICAgICAgICAgIHJldHVybiBPbmx5TGF0ZTsKKyAgICAgICAg
Y2FzZSBVc2VEZWY6CisgICAgICAgIGNhc2UgVXNlWkRlZjoKKyAgICAgICAgY2FzZSBTY3JhdGNo
OgorICAgICAgICAgICAgcmV0dXJuIEVhcmx5QW5kTGF0ZTsKKyAgICAgICAgfQorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuYz4KKyAgICBzdGF0aWMgdm9pZCBmb3JFYWNoUGhhc2UoVGltaW5nIHRpbWluZywgY29uc3Qg
RnVuYyYgZnVuYykKKyAgICB7CisgICAgICAgIGlmIChhY3RpdmVBdCh0aW1pbmcsIEVhcmx5KSkK
KyAgICAgICAgICAgIGZ1bmMoRWFybHkpOworICAgICAgICBpZiAoYWN0aXZlQXQodGltaW5nLCBM
YXRlKSkKKyAgICAgICAgICAgIGZ1bmMoTGF0ZSk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmM+CisgICAgc3RhdGljIHZvaWQgZm9yRWFjaFBoYXNlKFJvbGUgcm9sZSwg
Y29uc3QgRnVuYyYgZnVuYykKKyAgICB7CisgICAgICAgIGlmIChhY3RpdmVBdChyb2xlLCBFYXJs
eSkpCisgICAgICAgICAgICBmdW5jKEVhcmx5KTsKKyAgICAgICAgaWYgKGFjdGl2ZUF0KHJvbGUs
IExhdGUpKQorICAgICAgICAgICAgZnVuYyhMYXRlKTsKKyAgICB9CisgICAgCiAgICAgLy8gUmV0
dXJucyB0cnVlIGlmIHRoZSBSb2xlIGltcGxpZXMgdGhhdCB0aGUgSW5zdCB3aWxsIFVzZSB0aGUg
QXJnIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLgogICAgIHN0YXRpYyBib29sIGlzRWFybHlV
c2UoUm9sZSByb2xlKQogICAgIHsKQEAgLTEzNTQsNiArMTQ0MCw4IEBAIG5hbWVzcGFjZSBXVEYg
ewogCiBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBK
U0M6OkIzOjpBaXI6OkFyZzo6S2luZCk7CiBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpBaXI6OkFyZzo6VGVtcGVyYXR1cmUpOworSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6
QWlyOjpBcmc6OlBoYXNlKTsKK0pTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJpbnRJbnRlcm5hbChQ
cmludFN0cmVhbSYsIEpTQzo6QjM6OkFpcjo6QXJnOjpUaW1pbmcpOwogSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6QWlyOjpBcmc6OlJv
bGUpOwogSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwg
SlNDOjpCMzo6QWlyOjpBcmc6OlNpZ25lZG5lc3MpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckJsb2NrV29ya2xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckJsb2NrV29ya2xpc3QuaAkocmV2aXNpb24gMjE0NDI3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja1dvcmtsaXN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzIsNyArMzIsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsg
bmFtZXNwYWNlIEFpciB7CiAKLXR5cGVkZWYgR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayos
IEluZGV4U2V0PEJhc2ljQmxvY2s+PiBCbG9ja1dvcmtsaXN0OwordHlwZWRlZiBHcmFwaE5vZGVX
b3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jayo+PiBCbG9ja1dvcmtsaXN0
OwogCiAvLyBXaGVuIHlvdSBzYXkgQmxvY2tXaXRoPGludD4geW91IHNob3VsZCByZWFkIGl0IGFz
ICJibG9jayB3aXRoIGFuIGludCIuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBCbG9ja1dp
dGggPSBHcmFwaE5vZGVXaXRoPEJhc2ljQmxvY2sqLCBUPjsKQEAgLTQxLDExICs0MSwxMSBAQCB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBCbG9ja1dpdGggPSBHCiAvLyBwZXJtaXRzIGZvcmNp
Ymx5IGVucXVldWVpbmcgdGhpbmdzIGV2ZW4gaWYgdGhlIGJsb2NrIGhhcyBhbHJlYWR5IGJlZW4g
c2Vlbi4gSXQncyB1c2VmdWwgZm9yCiAvLyB0aGluZ3MgbGlrZSBidWlsZGluZyBhIHNwYW5uaW5n
IHRyZWUsIGluIHdoaWNoIGNhc2UgVCAodGhlIGF1eGlsaWFyeSBwYXlsb2FkKSB3b3VsZCBiZSB0
aGUKIC8vIHN1Y2Nlc3NvciBpbmRleC4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5nIEV4dGVu
ZGVkQmxvY2tXb3JrbGlzdCA9IEV4dGVuZGVkR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayos
IFQsIEluZGV4U2V0PEJhc2ljQmxvY2s+PjsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5nIEV4
dGVuZGVkQmxvY2tXb3JrbGlzdCA9IEV4dGVuZGVkR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9j
ayosIFQsIEluZGV4U2V0PEJhc2ljQmxvY2sqPj47CiAKIHR5cGVkZWYgR3JhcGhOb2RlV2l0aE9y
ZGVyPEJhc2ljQmxvY2sqPiBCbG9ja1dpdGhPcmRlcjsKIAotdHlwZWRlZiBQb3N0T3JkZXJHcmFw
aE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IFBvc3RPcmRl
ckJsb2NrV29ya2xpc3Q7Cit0eXBlZGVmIFBvc3RPcmRlckdyYXBoTm9kZVdvcmtsaXN0PEJhc2lj
QmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+IFBvc3RPcmRlckJsb2NrV29ya2xpc3Q7CiAK
IH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJDRkcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckNGRy5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckNGRy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw4ICszOSw4IEBAIGNs
YXNzIENGRyB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgdHlw
ZWRlZiBCYXNpY0Jsb2NrKiBOb2RlOwotICAgIHR5cGVkZWYgSW5kZXhTZXQ8QmFzaWNCbG9jaz4g
U2V0OwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5nIE1hcCA9IEluZGV4TWFwPEJhc2lj
QmxvY2ssIFQ+OworICAgIHR5cGVkZWYgSW5kZXhTZXQ8QmFzaWNCbG9jayo+IFNldDsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBNYXAgPSBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgVD47
CiAgICAgdHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9jayosIDQ+IExpc3Q7CiAKICAgICBDRkcoQ29k
ZSYgY29kZSkKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogICAgIE5vZGUgcm9vdCgpIHsgcmV0
dXJuIG1fY29kZVswXTsgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBNYXA8VD4g
bmV3TWFwKCkgeyByZXR1cm4gSW5kZXhNYXA8SlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrLCBUPiht
X2NvZGUuc2l6ZSgpKTsgfQorICAgIE1hcDxUPiBuZXdNYXAoKSB7IHJldHVybiBJbmRleE1hcDxK
U0M6OkIzOjpBaXI6OkJhc2ljQmxvY2sqLCBUPihtX2NvZGUuc2l6ZSgpKTsgfQogCiAgICAgU3Vj
Y2Vzc29yQ29sbGVjdGlvbjxCYXNpY0Jsb2NrLCBCYXNpY0Jsb2NrOjpTdWNjZXNzb3JMaXN0PiBz
dWNjZXNzb3JzKE5vZGUgbm9kZSkgeyByZXR1cm4gbm9kZS0+c3VjY2Vzc29yQmxvY2tzKCk7IH0K
ICAgICBCYXNpY0Jsb2NrOjpQcmVkZWNlc3Nvckxpc3QmIHByZWRlY2Vzc29ycyhOb2RlIG5vZGUp
IHsgcmV0dXJuIG5vZGUtPnByZWRlY2Vzc29ycygpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckVsaW1pbmF0ZURlYWRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckVsaW1pbmF0ZURlYWRDb2RlLmNwcAkocmV2aXNp
b24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbGltaW5hdGVE
ZWFkQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgYm9vbCBlbGltaW5h
dGVEZWFkQ29kZShDb2RlJiBjb2RlKQogICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAi
ZWxpbWluYXRlRGVhZENvZGUiKTsKIAogICAgIEhhc2hTZXQ8VG1wPiBsaXZlVG1wczsKLSAgICBJ
bmRleFNldDxTdGFja1Nsb3Q+IGxpdmVTdGFja1Nsb3RzOworICAgIEluZGV4U2V0PFN0YWNrU2xv
dCo+IGxpdmVTdGFja1Nsb3RzOwogICAgIGJvb2wgY2hhbmdlZDsKIAogICAgIGF1dG8gaXNBcmdM
aXZlID0gWyZdIChjb25zdCBBcmcmIGFyZykgLT4gYm9vbCB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckZpeE9idmlvdXNTcGlsbHMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4T2J2aW91c1NwaWxscy5jcHAJKHJldmlz
aW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4T2J2aW91
c1NwaWxscy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0Nyw3ICs1NDcsNyBAQCBwcml2YXRlOgog
ICAgIH07CiAKICAgICBDb2RlJiBtX2NvZGU7Ci0gICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgU3Rh
dGU+IG1fYXRIZWFkOworICAgIEluZGV4TWFwPEJhc2ljQmxvY2sqLCBTdGF0ZT4gbV9hdEhlYWQ7
CiAgICAgU3RhdGUgbV9zdGF0ZTsKICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrIHsgbnVsbHB0ciB9
OwogICAgIHVuc2lnbmVkIG1faW5zdEluZGV4IHsgMCB9OwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJGaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4UGFydGlhbFJlZ2lzdGVyU3Rh
bGxzLmNwcAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJGaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUs
MTAgKzE1NSwxMCBAQCB2b2lkIGZpeFBhcnRpYWxSZWdpc3RlclN0YWxscyhDb2RlJiBjb2RlCiAK
ICAgICAvLyBGb3IgZWFjaCBibG9jaywgdGhpcyBwcm92aWRlcyB0aGUgZGlzdGFuY2UgdG8gdGhl
IGxhc3QgaW5zdHJ1Y3Rpb24gc2V0dGluZyBlYWNoIHJlZ2lzdGVyCiAgICAgLy8gb24gYmxvY2sg
KmVudHJ5Ki4KLSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBGUERlZkRpc3RhbmNlPiBsYXN0RGVm
RGlzdGFuY2UoY29kZS5zaXplKCkpOworICAgIEluZGV4TWFwPEJhc2ljQmxvY2sqLCBGUERlZkRp
c3RhbmNlPiBsYXN0RGVmRGlzdGFuY2UoY29kZS5zaXplKCkpOwogCiAgICAgLy8gQmxvY2tzIHdp
dGggZGlydHkgZGlzdGFuY2UgYXQgaGVhZC4KLSAgICBJbmRleFNldDxCYXNpY0Jsb2NrPiBkaXJ0
eTsKKyAgICBJbmRleFNldDxCYXNpY0Jsb2NrKj4gZGlydHk7CiAKICAgICAvLyBGaXJzdCwgd2Ug
Y29tcHV0ZSB0aGUgbG9jYWwgZGlzdGFuY2UgZm9yIGVhY2ggYmxvY2sgYW5kIHB1c2ggaXQgdG8g
dGhlIHN1Y2Nlc3NvcnMuCiAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5h
bHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4
U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyRml4U3BpbGxzQWZ0
ZXJUZXJtaW5hbHMuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJCbG9j
a0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJJbnNl
cnRpb25TZXQuaCIKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgorI2luY2x1ZGUgIkFpclRt
cElubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBB
aXIgeworCit2b2lkIGZpeFNwaWxsc0FmdGVyVGVybWluYWxzKENvZGUmIGNvZGUpCit7CisgICAg
Ly8gQmVjYXVzZSB0aGVyZSBtYXkgYmUgdGVybWluYWxzIHRoYXQgcHJvZHVjZSB2YWx1ZXMsIElS
QyBtYXkKKyAgICAvLyB3YW50IHRvIHNwaWxsIHRob3NlIHRlcm1pbmFscy4gSXQnbGwgaGFwcGVu
IHRvIHNwaWxsIGl0IGFmdGVyCisgICAgLy8gdGhlIHRlcm1pbmFsLiBJZiB3ZSBsZWZ0IHRoZSBn
cmFwaCBpbiB0aGlzIHN0YXRlLCBpdCdkIGJlIGludmFsaWQKKyAgICAvLyBiZWNhdXNlIGEgdGVy
bWluYWwgbXVzdCBiZSB0aGUgbGFzdCBpbnN0cnVjdGlvbiBpbiBhIGJsb2NrLgorICAgIC8vIFdl
IGZpeCB0aGF0IGhlcmUuCisKKyAgICBCbG9ja0luc2VydGlvblNldCBibG9ja0luc2VydGlvblNl
dChjb2RlKTsKKyAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KGNvZGUpOworCisgICAgZm9y
IChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgdW5zaWduZWQgdGVybWluYWxJ
bmRleCA9IGJsb2NrLT5zaXplKCk7CisgICAgICAgIGJvb2wgZm91bmRUZXJtaW5hbCA9IGZhbHNl
OworICAgICAgICB3aGlsZSAodGVybWluYWxJbmRleC0tKSB7CisgICAgICAgICAgICBpZiAoYmxv
Y2stPmF0KHRlcm1pbmFsSW5kZXgpLmlzVGVybWluYWwoKSkgeworICAgICAgICAgICAgICAgIGZv
dW5kVGVybWluYWwgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIEFTU0VSVF9VTlVTRUQoZm91bmRUZXJtaW5hbCwgZm91bmRU
ZXJtaW5hbCk7CisKKyAgICAgICAgaWYgKHRlcm1pbmFsSW5kZXggPT0gYmxvY2stPnNpemUoKSAt
IDEpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBUaGVyZSBtdXN0IGJlIGlu
c3RydWN0aW9ucyBhZnRlciB0aGUgdGVybWluYWwgYmVjYXVzZSBpdCdzIG5vdCB0aGUgbGFzdCBp
bnN0cnVjdGlvbi4KKyAgICAgICAgQVNTRVJUKHRlcm1pbmFsSW5kZXggPCBibG9jay0+c2l6ZSgp
IC0gMSk7CisgICAgICAgIFZlY3RvcjxJbnN0LCAxPiBpbnN0c1RvTW92ZTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gdGVybWluYWxJbmRleCArIDE7IGkgPCBibG9jay0+c2l6ZSgpOyBpKysp
CisgICAgICAgICAgICBpbnN0c1RvTW92ZS5hcHBlbmQoYmxvY2stPmF0KGkpKTsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoaW5zdHNUb01vdmUuc2l6ZSgpKTsKKworICAgICAgICBmb3IgKEZyZXF1
ZW50ZWRCbG9jayYgZnJlcXVlbnRlZFN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsK
KyAgICAgICAgICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA9IGZyZXF1ZW50ZWRTdWNjZXNzb3Iu
YmxvY2soKTsKKyAgICAgICAgICAgIC8vIElmIHN1Y2Nlc3NvcidzIG9ubHkgcHJlZGVjZXNzb3Ig
aXMgYmxvY2ssIHdlIGNhbiBwbGFudCB0aGUgc3BpbGwgaW5zaWRlCisgICAgICAgICAgICAvLyB0
aGUgc3VjY2Vzc29yLiBPdGhlcndpc2UsIHdlIG11c3Qgc3BsaXQgdGhlIGNyaXRpY2FsIGVkZ2Ug
YW5kIGNyZWF0ZQorICAgICAgICAgICAgLy8gYSBuZXcgYmxvY2sgZm9yIHRoZSBzcGlsbC4KKyAg
ICAgICAgICAgIGlmIChzdWNjZXNzb3ItPm51bVByZWRlY2Vzc29ycygpID09IDEpIHsKKyAgICAg
ICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0SW5zdHMoMCwgaW5zdHNUb01vdmUpOworICAg
ICAgICAgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKHN1Y2Nlc3Nvcik7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIG5ld0Jsb2NrID0gYmxvY2tJ
bnNlcnRpb25TZXQuaW5zZXJ0QmVmb3JlKHN1Y2Nlc3Nvciwgc3VjY2Vzc29yLT5mcmVxdWVuY3ko
KSk7CisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBJbnN0JiBpbnN0IDogaW5zdHNUb01vdmUp
CisgICAgICAgICAgICAgICAgICAgIG5ld0Jsb2NrLT5hcHBlbmRJbnN0KGluc3QpOworICAgICAg
ICAgICAgICAgIG5ld0Jsb2NrLT5hcHBlbmRJbnN0KEluc3QoSnVtcCwgaW5zdHNUb01vdmUubGFz
dCgpLm9yaWdpbikpOworICAgICAgICAgICAgICAgIG5ld0Jsb2NrLT5zdWNjZXNzb3JzKCkuYXBw
ZW5kKHN1Y2Nlc3Nvcik7CisgICAgICAgICAgICAgICAgZnJlcXVlbnRlZFN1Y2Nlc3Nvci5ibG9j
aygpID0gbmV3QmxvY2s7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBibG9j
ay0+cmVzaXplKHRlcm1pbmFsSW5kZXggKyAxKTsKKyAgICB9CisKKyAgICBpZiAoYmxvY2tJbnNl
cnRpb25TZXQuZXhlY3V0ZSgpKQorICAgICAgICBjb2RlLnJlc2V0UmVhY2hhYmlsaXR5KCk7Cit9
CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4U3BpbGxz
QWZ0ZXJUZXJtaW5hbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29k
ZTsKKworLy8gQmVjYXVzZSB0aGVyZSBtYXkgYmUgdGVybWluYWxzIHRoYXQgcHJvZHVjZSB2YWx1
ZXMsIHRoZSByZWdpc3RlciBhbGxvY2F0b3IgbWF5CisvLyB3YW50IHRvIHNwaWxsIHRob3NlIHRl
cm1pbmFscy4gSXQnbGwgaGFwcGVuIHRvIHNwaWxsIGl0IGFmdGVyCisvLyB0aGUgdGVybWluYWwu
IElmIHdlIGxlZnQgdGhlIGdyYXBoIGluIHRoaXMgc3RhdGUsIGl0J2QgYmUgaW52YWxpZAorLy8g
YmVjYXVzZSBhIHRlcm1pbmFsIG11c3QgYmUgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24gaW4gYSBibG9j
ay4KKy8vIFdlIGZpeCB0aGF0IGhlcmUuCit2b2lkIGZpeFNwaWxsc0FmdGVyVGVybWluYWxzKENv
ZGUmKTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5l
cmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJH
ZW5lcmF0ZS5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyR2VuZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAj
aWYgRU5BQkxFKEIzX0pJVCkKIAogI2luY2x1ZGUgIkFpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFw
aENvbG9yaW5nLmgiCisjaW5jbHVkZSAiQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4u
aCIKICNpbmNsdWRlICJBaXJBbGxvY2F0ZVN0YWNrLmgiCiAjaW5jbHVkZSAiQWlyQ29kZS5oIgog
I2luY2x1ZGUgIkFpckVsaW1pbmF0ZURlYWRDb2RlLmgiCkBAIC01Nyw3ICs1OCw3IEBACiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKIAotdm9pZCBwcmVw
YXJlRm9yR2VuZXJhdGlvbihDb2RlJiBjb2RlKQordm9pZCBwcmVwYXJlRm9yR2VuZXJhdGlvbihD
b2RlJiBjb2RlLCB1bnNpZ25lZCBvcHRMZXZlbCkKIHsKICAgICBUaW1pbmdTY29wZSB0aW1pbmdT
Y29wZSgiQWlyOjpwcmVwYXJlRm9yR2VuZXJhdGlvbiIpOwogICAgIApAQCAtODksMTggKzkwLDIy
IEBAIHZvaWQgcHJlcGFyZUZvckdlbmVyYXRpb24oQ29kZSYgY29kZSkKICAgICAvLyBGb3IgZGVi
dWdnaW5nLCB5b3UgY2FuIHVzZSBzcGlsbEV2ZXJ5dGhpbmcoKSB0byBwdXQgZXZlcnl0aGluZyB0
byB0aGUgc3RhY2sgYmV0d2VlbiBlYWNoIEluc3QuCiAgICAgaWYgKE9wdGlvbnM6OmFpclNwaWxs
c0V2ZXJ5dGhpbmcoKSkKICAgICAgICAgc3BpbGxFdmVyeXRoaW5nKGNvZGUpOwotICAgIGVsc2UK
KyAgICBlbHNlIGlmIChvcHRMZXZlbCA+PSAyICYmIGZhbHNlKSAvLyBPT1BTISEgVGhpcyB3YXMg
anVzdCBmb3IgdGVzdGluZy4KICAgICAgICAgYWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3Jp
bmcoY29kZSk7CisgICAgZWxzZQorICAgICAgICBhbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nh
bihjb2RlKTsKIAogICAgIGlmIChPcHRpb25zOjpsb2dBaXJSZWdpc3RlclByZXNzdXJlKCkpIHsK
ICAgICAgICAgZGF0YUxvZygiUmVnaXN0ZXIgcHJlc3N1cmUgYWZ0ZXIgcmVnaXN0ZXIgYWxsb2Nh
dGlvbjpcbiIpOwogICAgICAgICBsb2dSZWdpc3RlclByZXNzdXJlKGNvZGUpOwogICAgIH0KLQot
ICAgIC8vIFRoaXMgcmVwbGFjZXMgdXNlcyBvZiBzcGlsbCBzbG90cyB3aXRoIHJlZ2lzdGVycyBv
ciBjb25zdGFudHMgaWYgcG9zc2libGUuIEl0IGRvZXMgdGhpcyBieQotICAgIC8vIG1pbmltaXpp
bmcgdGhlIGFtb3VudCB0aGF0IHdlIHBlcnR1cmIgdGhlIGFscmVhZHktY2hvc2VuIHJlZ2lzdGVy
IGFsbG9jYXRpb24uIEl0IG1heSBleHRlbmQKLSAgICAvLyB0aGUgbGl2ZSByYW5nZXMgb2YgcmVn
aXN0ZXJzIHRob3VnaC4KLSAgICBmaXhPYnZpb3VzU3BpbGxzKGNvZGUpOworICAgIAorICAgIGlm
IChvcHRMZXZlbCA+PSAyKSB7CisgICAgICAgIC8vIFRoaXMgcmVwbGFjZXMgdXNlcyBvZiBzcGls
bCBzbG90cyB3aXRoIHJlZ2lzdGVycyBvciBjb25zdGFudHMgaWYgcG9zc2libGUuIEl0IGRvZXMg
dGhpcyBieQorICAgICAgICAvLyBtaW5pbWl6aW5nIHRoZSBhbW91bnQgdGhhdCB3ZSBwZXJ0dXJi
IHRoZSBhbHJlYWR5LWNob3NlbiByZWdpc3RlciBhbGxvY2F0aW9uLiBJdCBtYXkgZXh0ZW5kCisg
ICAgICAgIC8vIHRoZSBsaXZlIHJhbmdlcyBvZiByZWdpc3RlcnMgdGhvdWdoLgorICAgICAgICBm
aXhPYnZpb3VzU3BpbGxzKGNvZGUpOworICAgIH0KIAogICAgIGxvd2VyQWZ0ZXJSZWdBbGxvYyhj
b2RlKTsKIApAQCAtMTY1LDcgKzE3MCw3IEBAIHZvaWQgZ2VuZXJhdGUoQ29kZSYgY29kZSwgQ0Nh
bGxIZWxwZXJzJiAKICAgICAgICAgaWYgKGJsb2NrKQogICAgICAgICAgICAgY29udGV4dC5ibG9j
a0xhYmVsc1tibG9ja10gPSBCb3g8Q0NhbGxIZWxwZXJzOjpMYWJlbD46OmNyZWF0ZSgpOwogICAg
IH0KLSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0PiBibG9j
a0p1bXBzKGNvZGUuc2l6ZSgpKTsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgQ0NhbGxIZWxw
ZXJzOjpKdW1wTGlzdD4gYmxvY2tKdW1wcyhjb2RlLnNpemUoKSk7CiAKICAgICBhdXRvIGxpbmsg
PSBbJl0gKENDYWxsSGVscGVyczo6SnVtcCBqdW1wLCBCYXNpY0Jsb2NrKiB0YXJnZXQpIHsKICAg
ICAgICAgaWYgKGNvbnRleHQuYmxvY2tMYWJlbHNbdGFyZ2V0XS0+aXNTZXQoKSkgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuaAkocmV2aXNpb24gMjE0
NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjcsNiArMjcsOCBAQAogCiAjaWYgRU5BQkxFKEIzX0pJVCkKIAorI2lu
Y2x1ZGUgIkIzQ29tbW9uLmgiCisKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDQ2FsbEhlbHBl
cnM7CkBAIC0zNyw3ICszOSw3IEBAIGNsYXNzIENvZGU7CiAKIC8vIFRoaXMgdGFrZXMgYW4gQWly
OjpDb2RlIHRoYXQgaGFzbid0IGhhZCBhbnkgc3RhY2sgYWxsb2NhdGlvbiBhbmQgb3B0aW9uYWxs
eSBoYXNuJ3QgaGFkIGFueQogLy8gcmVnaXN0ZXIgYWxsb2NhdGlvbiBhbmQgZG9lcyBib3RoIG9m
IHRob3NlIHRoaW5ncy4KLUpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJlcGFyZUZvckdlbmVyYXRp
b24oQ29kZSYpOworSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmVwYXJlRm9yR2VuZXJhdGlvbihD
b2RlJiwgdW5zaWduZWQgb3B0TGV2ZWwgPSBkZWZhdWx0T3B0TGV2ZWwoKSk7CiAKIC8vIFRoaXMg
Z2VuZXJhdGVzIHRoZSBjb2RlIHVzaW5nIHRoZSBnaXZlbiBDQ2FsbEhlbHBlcnMgaW5zdGFuY2Uu
IE5vdGUgdGhhdCB0aGlzIG1heSBjYWxsIGNhbGxiYWNrcwogLy8gaW4gdGhlIHN1cHBsaWVkIGNv
ZGUgYXMgaXQgaXMgZ2VuZXJhdGluZy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyR2VuZXJhdGlvbkNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckdlbmVyYXRpb25Db250ZXh0LmgJKHJldmlzaW9uIDIxNDQyNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGlvbkNvbnRleHQuaAkod29y
a2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBTaGFyZWRU
YXNrPExhdGVQYXRoRnVuY3Rpb24+IExhdGVQYXRoOwogCiAgICAgVmVjdG9yPFJlZlB0cjxMYXRl
UGF0aD4+IGxhdGVQYXRoczsKLSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBCb3g8Q0NhbGxIZWxw
ZXJzOjpMYWJlbD4+IGJsb2NrTGFiZWxzOworICAgIEluZGV4TWFwPEJhc2ljQmxvY2sqLCBCb3g8
Q0NhbGxIZWxwZXJzOjpMYWJlbD4+IGJsb2NrTGFiZWxzOwogICAgIEJhc2ljQmxvY2sqIGN1cnJl
bnRCbG9jayB7IG51bGxwdHIgfTsKICAgICB1bnNpZ25lZCBpbmRleEluQmxvY2sgeyBVSU5UX01B
WCB9OwogICAgIENvZGUqIGNvZGUgeyBudWxscHRyIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwCShyZXZp
c2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyQWZ0
ZXJSZWdBbGxvYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDExIEBAIHZvaWQgbG93
ZXJBZnRlclJlZ0FsbG9jKENvZGUmIGNvZGUpCiAKICAgICBpZiAodmVyYm9zZSkKICAgICAgICAg
ZGF0YUxvZygiQ29kZSBiZWZvcmUgbG93ZXJBZnRlclJlZ0FsbG9jOlxuIiwgY29kZSk7CisgICAg
CisgICAgLy8gRklYTUU6CisgICAgLy8gMSkgVGhpcyBzaG91bGQgYmFpbCBlYXJseSBpZiB0aGVy
ZSBhcmUgbm8gU2h1ZmZsZXMgb3IgQ29sZENDYWxscy4gKE9PUFMhISBuZWVkIGJ1ZyB1cmwpCisg
ICAgLy8gMikgV2Ugc2hvdWxkIG5vdCBpbnRyb2R1Y2UgU2h1ZmZsZXMgZm9yIG5vcm1hbCBjYWxs
cy4gKE9PUFMhISBuZWVkIGJ1ZyB1cmwpCisgICAgLy8gMykgV2Ugc2hvdWxkIGVtaXQgQ29sZEND
YWxsIG9ubHkgYXQgb3B0TGV2ZWw9PTEuIChPT1BTISEgbmVlZCBidWcgdXJsKQogCiAgICAgSGFz
aE1hcDxJbnN0KiwgUmVnaXN0ZXJTZXQ+IHVzZWRSZWdpc3RlcnM7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJFbnRyeVN3aXRjaC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlckVudHJ5U3dpdGNoLmNwcAko
cmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dl
ckVudHJ5U3dpdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsNyArODIsNyBAQCB2b2lkIGxv
d2VyRW50cnlTd2l0Y2goQ29kZSYgY29kZSkKICAgICAvLyBOb3cgZHVwbGljYXRlIHRoZW0uCiAg
ICAgVmVjdG9yPEZyZXF1ZW50ZWRCbG9jaz4gZW50cnlwb2ludHM7CiAgICAgZW50cnlwb2ludHMu
YXBwZW5kKEZyZXF1ZW50ZWRCbG9jayhjb2RlWzBdLCBlbnRyeXBvaW50RnJlcXVlbmNpZXNbMF0p
KTsKLSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBCYXNpY0Jsb2NrKj4gbWFwKGNvZGUuc2l6ZSgp
KTsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgQmFzaWNCbG9jayo+IG1hcChjb2RlLnNpemUo
KSk7CiAgICAgZm9yICh1bnNpZ25lZCBlbnRyeXBvaW50SW5kZXggPSAxOyBlbnRyeXBvaW50SW5k
ZXggPCBjb2RlLnByb2MoKS5udW1FbnRyeXBvaW50cygpOyArK2VudHJ5cG9pbnRJbmRleCkgewog
ICAgICAgICBtYXAuY2xlYXIoKTsKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IHdv
cmtsaXN0LnNlZW4oKS52YWx1ZXMoY29kZSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHdvcmtpbmcgY29weSkK
QEAgLTY0OSw3ICs2NDksNyBAQCBNb3ZlMzIgVTpHOjMyLCBaRDpHOjMyCiBNb3ZlMzIgVTpHOjMy
LCBaRDpHOjMyLCBTOkc6MzIKICAgICBBZGRyLCBBZGRyLCBUbXAKIAotU3RvcmVaZXJvMzIgVTpH
OjMyCitTdG9yZVplcm8zMiBEOkc6MzIKICAgICBBZGRyCiAgICAgSW5kZXgKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdMaXZlbmVzcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnTGl2ZW5lc3MuaAkocmV2aXNpb24g
MjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdMaXZlbmVzcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiQWlyQmFzaWNCbG9j
ay5oIgogI2luY2x1ZGUgIkFpckNvZGUuaCIKICNpbmNsdWRlICJBaXJJbnN0LmgiCisjaW5jbHVk
ZSAiQWlyTGl2ZW5lc3MuaCIKICNpbmNsdWRlICJSZWdpc3RlclNldC5oIgogCiBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CkBAIC01NCw2ICs1NSwxOSBAQCBw
dWJsaWM6CiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgLy8gSWYgeW91
IGNvbXB1dGVkIFRtcCBsaXZlbmVzcyBmb3Igc29tZSBiYW5rLCB5b3UgY2FuIHVzZSByZWcgbGl2
ZW5lc3MgdG8gZmlsbCBpbiB0aGUgYmxhbmtzLgorICAgICAgICAvLyBOb3RlIHRoYXQgd2hhdCBo
YXBwZW5zIHRvIHRoZSByZWdpc3RlcnMgbm90IGJlbG9uZ2luZyB0byB0aGUgYmFuayBpcyBhcmJp
dHJhcnkgLSB0aGV5IG1heSBnZXQKKyAgICAgICAgLy8gc2V0IG9yIG5vdC4KKyAgICAgICAgdGVt
cGxhdGU8QmFuayBiYW5rPgorICAgICAgICBMb2NhbENhbGMoVG1wTGl2ZW5lc3M8YmFuaz4mIGxp
dmVuZXNzLCBCYXNpY0Jsb2NrKiBibG9jaykKKyAgICAgICAgICAgIDogbV9ibG9jayhibG9jaykK
KyAgICAgICAgeworICAgICAgICAgICAgZm9yIChUbXAgdG1wIDogbGl2ZW5lc3MubGl2ZUF0VGFp
bChibG9jaykpIHsKKyAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkpCisgICAgICAgICAg
ICAgICAgICAgIG1fd29ya3NldC5zZXQodG1wLnJlZygpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICAKICAgICAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGxpdmUoKSBjb25zdAog
ICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gbV93b3Jrc2V0OwpAQCAtODQsOCArOTgsOCBA
QCBwdWJsaWM6CiAgICAgfQogICAgIAogcHJpdmF0ZToKLSAgICBJbmRleE1hcDxCYXNpY0Jsb2Nr
LCBSZWdpc3RlclNldD4gbV9saXZlQXRIZWFkOwotICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIFJl
Z2lzdGVyU2V0PiBtX2xpdmVBdFRhaWw7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jayosIFJlZ2lz
dGVyU2V0PiBtX2xpdmVBdEhlYWQ7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jayosIFJlZ2lzdGVy
U2V0PiBtX2xpdmVBdFRhaWw7CiB9OwogCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWly
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2
ZXJ5dGhpbmcuY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMw
LDcgQEAKIAogI2luY2x1ZGUgIkFpckFyZ0lubGluZXMuaCIKICNpbmNsdWRlICJBaXJDb2RlLmgi
CisjaW5jbHVkZSAiQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCIKICNpbmNsdWRlICJBaXJJ
bnNlcnRpb25TZXQuaCIKICNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkFp
ckxpdmVuZXNzLmgiCkBAIC00Niw3ICs0Nyw3IEBAIHZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUm
IGNvZGUpCiAgICAgcGFkSW50ZXJmZXJlbmNlKGNvZGUpOwogCiAgICAgLy8gV2Ugd2FudCB0byBr
bm93IHRoZSBzZXQgb2YgcmVnaXN0ZXJzIHVzZWQgYXQgZXZlcnkgcG9pbnQgaW4gZXZlcnkgYmFz
aWMgYmxvY2suCi0gICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgVmVjdG9yPFJlZ2lzdGVyU2V0Pj4g
dXNlZFJlZ2lzdGVycyhjb2RlLnNpemUoKSk7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jayosIFZl
Y3RvcjxSZWdpc3RlclNldD4+IHVzZWRSZWdpc3RlcnMoY29kZS5zaXplKCkpOwogICAgIEdQTGl2
ZW5lc3MgZ3BMaXZlbmVzcyhjb2RlKTsKICAgICBGUExpdmVuZXNzIGZwTGl2ZW5lc3MoY29kZSk7
CiAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKQEAgLTE3MywxMCArMTc0LDEz
IEBAIHZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUmIGNvZGUpCiAgICAgICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGNob3NlblJlZyk7CiAKICAgICAgICAgICAgICAgICAgICAgdG1wID0g
VG1wKGNob3NlblJlZyk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICBpZiAocm9sZSA9PSBBcmc6OlNjcmF0Y2gpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47CiAKICAgICAgICAgICAgICAgICAgICAgT3Bjb2RlIG1vdmUgPSBiYW5rID09IEdQID8gTW92
ZSA6IE1vdmVEb3VibGU7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlVc2Uo
cm9sZSkgJiYgcm9sZSAhPSBBcmc6OlNjcmF0Y2gpCisgICAgICAgICAgICAgICAgICAgIGlmIChB
cmc6OmlzQW55VXNlKHJvbGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0
Lmluc2VydChpbnN0SW5kZXgsIG1vdmUsIGluc3Qub3JpZ2luLCBhcmcsIHRtcCk7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChBcmc6OmlzQW55RGVmKHJvbGUpKQogICAgICAgICAgICAgICAgICAg
ICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydChpbnN0SW5kZXggKyAxLCBtb3ZlLCBpbnN0Lm9yaWdp
biwgdG1wLCBhcmcpOwpAQCAtMTg0LDYgKzE4OCw4IEBAIHZvaWQgc3BpbGxFdmVyeXRoaW5nKENv
ZGUmIGNvZGUpCiAgICAgICAgIH0KICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2sp
OwogICAgIH0KKyAgICAKKyAgICBmaXhTcGlsbHNBZnRlclRlcm1pbmFscyhjb2RlKTsKIH0KIAog
fSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJUbXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyVG1wLmNwcAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJUbXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDggKzI4LDE1IEBACiAK
ICNpZiBFTkFCTEUoQjNfSklUKQogCisjaW5jbHVkZSAiQWlyVG1wSW5saW5lcy5oIgorCiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CiAKK3RlbXBsYXRlPD4g
Y29uc3QgY2hhciogY29uc3QgVG1wOjpJbmRleGVkPEdQPjo6ZHVtcFByZWZpeCA9ICIldG1wIjsK
K3RlbXBsYXRlPD4gY29uc3QgY2hhciogY29uc3QgVG1wOjpJbmRleGVkPEZQPjo6ZHVtcFByZWZp
eCA9ICIlZnRtcCI7Cit0ZW1wbGF0ZTw+IGNvbnN0IGNoYXIqIGNvbnN0IFRtcDo6QWJzb2x1dGVs
eUluZGV4ZWQ8R1A+OjpkdW1wUHJlZml4ID0gIiVhYnMiOwordGVtcGxhdGU8PiBjb25zdCBjaGFy
KiBjb25zdCBUbXA6OkFic29sdXRlbHlJbmRleGVkPEZQPjo6ZHVtcFByZWZpeCA9ICIlZmFicyI7
CisKIHZvaWQgVG1wOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgaWYgKCEq
dGhpcykgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCShyZXZpc2lv
biAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTc0LDYgKzc0LDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmVzdWx0Lm1fdmFsdWUg
PSBlbmNvZGVGUFRtcChpbmRleCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQorICAg
IAorICAgIHN0YXRpYyBUbXAgdG1wRm9ySW5kZXgoQmFuayBiYW5rLCB1bnNpZ25lZCBpbmRleCkK
KyAgICB7CisgICAgICAgIGlmIChiYW5rID09IEdQKQorICAgICAgICAgICAgcmV0dXJuIGdwVG1w
Rm9ySW5kZXgoaW5kZXgpOworICAgICAgICBBU1NFUlQoYmFuayA9PSBGUCk7CisgICAgICAgIHJl
dHVybiBmcFRtcEZvckluZGV4KGluZGV4KTsKKyAgICB9CiAKICAgICBleHBsaWNpdCBvcGVyYXRv
ciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX3ZhbHVlOyB9CiAgICAgCkBAIC0xNTQsNyArMTYy
LDE2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBncFRtcEluZGV4KCk7CiAgICAgICAg
IHJldHVybiBmcFRtcEluZGV4KCk7CiAgICAgfQotCisgICAgCisgICAgdGVtcGxhdGU8QmFuayBi
YW5rPiBjbGFzcyBJbmRleGVkOworICAgIHRlbXBsYXRlPEJhbmsgYmFuaz4gY2xhc3MgQWJzb2x1
dGVseUluZGV4ZWQ7CisgICAgCisgICAgdGVtcGxhdGU8QmFuayBiYW5rPgorICAgIEluZGV4ZWQ8
YmFuaz4gaW5kZXhlZCgpIGNvbnN0OworICAgIAorICAgIHRlbXBsYXRlPEJhbmsgYmFuaz4KKyAg
ICBBYnNvbHV0ZWx5SW5kZXhlZDxiYW5rPiBhYnNvbHV0ZWx5SW5kZXhlZCgpIGNvbnN0OworICAg
IAogICAgIGJvb2wgaXNBbGl2ZSgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gISEqdGhp
czsKQEAgLTE5NSw2ICsyMTIsOCBAQCBwdWJsaWM6CiAgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0g
c3RhdGljX2Nhc3Q8aW50PihpbmRleCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQor
ICAgIAorICAgIHN0YXRpYyBUbXAgdG1wRm9yQWJzb2x1dGVJbmRleChCYW5rLCB1bnNpZ25lZCk7
CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBlbmNvZGVHUCh1bnNpZ25lZCBpbmRleCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wSW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wSW5saW5lcy5oCShyZXZp
c2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcElubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtOTIsNiArOTIsNTggQEAgc3RydWN0IEFic29sdXRlVG1w
TWFwcGVyPEZQPiB7CiAgICAgfQogfTsKIAordGVtcGxhdGU8QmFuayB0aGVCYW5rPgorY2xhc3Mg
VG1wOjpJbmRleGVkIDogcHVibGljIFRtcCB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IGNo
YXIqIGNvbnN0IGR1bXBQcmVmaXg7CisgICAgCisgICAgSW5kZXhlZChUbXAgdG1wKQorICAgICAg
ICA6IFRtcCh0bXApCisgICAgeworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBpbmRleCgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gdG1wSW5kZXgodGhlQmFuayk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8QmFuayB0aGVCYW5rPgorY2xhc3MgVG1wOjpBYnNvbHV0ZWx5SW5kZXhlZCA6
IHB1YmxpYyBUbXAgeworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBkdW1w
UHJlZml4OworCisgICAgQWJzb2x1dGVseUluZGV4ZWQoVG1wIHRtcCkKKyAgICAgICAgOiBUbXAo
dG1wKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIEFic29sdXRlVG1wTWFwcGVyPHRoZUJhbms+OjphYnNvbHV0ZUlu
ZGV4KCp0aGlzKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTxCYW5rIHRoZUJhbms+CitUbXA6Oklu
ZGV4ZWQ8dGhlQmFuaz4gVG1wOjppbmRleGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW5kZXhl
ZDx0aGVCYW5rPigqdGhpcyk7Cit9CisKK3RlbXBsYXRlPEJhbmsgdGhlQmFuaz4KK1RtcDo6QWJz
b2x1dGVseUluZGV4ZWQ8dGhlQmFuaz4gVG1wOjphYnNvbHV0ZWx5SW5kZXhlZCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIEFic29sdXRlbHlJbmRleGVkPHRoZUJhbms+KCp0aGlzKTsKK30KKworVG1w
IFRtcDo6dG1wRm9yQWJzb2x1dGVJbmRleChCYW5rIGJhbmssIHVuc2lnbmVkIGluZGV4KQorewor
ICAgIGlmIChiYW5rID09IEdQKQorICAgICAgICByZXR1cm4gQWJzb2x1dGVUbXBNYXBwZXI8R1A+
Ojp0bXBGcm9tQWJzb2x1dGVJbmRleChpbmRleCk7CisgICAgQVNTRVJUKGJhbmsgPT0gRlApOwor
ICAgIHJldHVybiBBYnNvbHV0ZVRtcE1hcHBlcjxGUD46OnRtcEZyb21BYnNvbHV0ZUluZGV4KGlu
ZGV4KTsKK30KKwogfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgogCiAjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJT
ZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0
LmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0
ZXJTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDggKzEwMiwxNiBAQCBwdWJsaWM6CiAgICAg
fQogICAgIAogICAgIC8vIEFsc28gYWxsb3cgYWRkL3JlbW92ZS9jb250YWlucyB0ZXJtaW5vbG9n
eSwgd2hpY2ggbWVhbnMgdGhlIHNhbWUgdGhpbmcgYXMgc2V0L2NsZWFyL2dldC4KLSAgICB2b2lk
IGFkZChSZWcgcmVnKSB7IHNldChyZWcpOyB9Ci0gICAgdm9pZCByZW1vdmUoUmVnIHJlZykgeyBj
bGVhcihyZWcpOyB9CisgICAgYm9vbCBhZGQoUmVnIHJlZykKKyAgICB7CisgICAgICAgIEFTU0VS
VCghIXJlZyk7CisgICAgICAgIHJldHVybiAhbV9iaXRzLnRlc3RBbmRTZXQocmVnLmluZGV4KCkp
OworICAgIH0KKyAgICBib29sIHJlbW92ZShSZWcgcmVnKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KCEhcmVnKTsKKyAgICAgICAgcmV0dXJuIG1fYml0cy50ZXN0QW5kQ2xlYXIocmVnLmluZGV4KCkp
OworICAgIH0KICAgICBib29sIGNvbnRhaW5zKFJlZyByZWcpIGNvbnN0IHsgcmV0dXJuIGdldChy
ZWcpOyB9CiAgICAgCiAgICAgdm9pZCBtZXJnZShjb25zdCBSZWdpc3RlclNldCYgb3RoZXIpIHsg
bV9iaXRzLm1lcmdlKG90aGVyLm1fYml0cyk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjI1LDYgKzIyNSw3IEBA
IHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYoYm9vbCwgdXNlRlRMSklU
LCB0cnVlLCBOb3JtYWwsICJhbGxvd3MgdGhlIEZUTCBKSVQgdG8gYmUgdXNlZCBpZiB0cnVlIikg
XAogICAgIHYoYm9vbCwgdXNlRlRMVEJBQSwgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAg
dihib29sLCB2YWxpZGF0ZUZUTE9TUkV4aXRMaXZlbmVzcywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0
cikgXAorICAgIHYodW5zaWduZWQsIGRlZmF1bHRCM09wdExldmVsLCAyLCBOb3JtYWwsIG51bGxw
dHIpIFwKICAgICB2KGJvb2wsIGIzQWx3YXlzRmFpbHNCZWZvcmVDb21waWxlLCBmYWxzZSwgTm9y
bWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCBiM0Fsd2F5c0ZhaWxzQmVmb3JlTGluaywgZmFs
c2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgZnRsQ3Jhc2hlcywgZmFsc2UsIE5v
cm1hbCwgbnVsbHB0cikgLyogZm9vbC1wcm9vZiB3YXkgb2YgY2hlY2tpbmcgdGhhdCB5b3UgZW5k
ZWQgdXAgaW4gdGhlIEZUTC4gOy0pICovXApAQCAtMzk3LDYgKzM5OCw4IEBAIHR5cGVkZWYgY29u
c3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYoYm9vbCwgbG9nQjNQaGFzZVRpbWVzLCBmYWxz
ZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihkb3VibGUsIHJhcmVCbG9ja1BlbmFsdHksIDAu
MDAxLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGFpclNwaWxsc0V2ZXJ5dGhpbmcs
IGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KGJvb2wsIGFpckxpbmVhclNjYW5WZXJi
b3NlLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdihib29sLCBhaXJMaW5lYXJTY2Fu
U3BpbGxzRXZlcnl0aGluZywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwg
YWlyRm9yY2VCcmlnZ3NBbGxvY2F0b3IsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2
KGJvb2wsIGFpckZvcmNlSVJDQWxsb2NhdG9yLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAg
ICAgdihib29sLCBjb2FsZXNjZVNwaWxsU2xvdHMsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5o
CShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJ
UkdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKIAorI2luY2x1ZGUgIkIzQ29tbW9uLmgiCiAjaW5jbHVkZSAiQjNDb21waWxh
dGlvbi5oIgogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgogI2luY2x1ZGUgIlZNLmgiCkBAIC00
Nyw3ICs0OCw3IEBAIHN0cnVjdCBDb21waWxhdGlvbkNvbnRleHQgewogICAgIENDYWxsSGVscGVy
czo6Q2FsbCBqc0VudHJ5cG9pbnRUb1dhc21FbnRyeXBvaW50Q2FsbDsKIH07CiAKLUV4cGVjdGVk
PHN0ZDo6dW5pcXVlX3B0cjxXYXNtSW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRD
b21waWxlKFZNJiwgQ29tcGlsYXRpb25Db250ZXh0JiwgY29uc3QgdWludDhfdCosIHNpemVfdCwg
Y29uc3QgU2lnbmF0dXJlKiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgY29uc3Qg
TW9kdWxlSW5mb3JtYXRpb24mLCBjb25zdCBWZWN0b3I8U2lnbmF0dXJlSW5kZXg+JiwgdW5zaWdu
ZWQgb3B0TGV2ZWwgPSAxKTsKK0V4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxXYXNtSW50ZXJuYWxG
dW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKFZNJiwgQ29tcGlsYXRpb25Db250ZXh0
JiwgY29uc3QgdWludDhfdCosIHNpemVfdCwgY29uc3QgU2lnbmF0dXJlKiwgVmVjdG9yPFVubGlu
a2VkV2FzbVRvV2FzbUNhbGw+JiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBjb25zdCBWZWN0
b3I8U2lnbmF0dXJlSW5kZXg+JiwgdW5zaWduZWQgb3B0TGV2ZWwgPSBCMzo6ZGVmYXVsdE9wdExl
dmVsKCkpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCkluZGV4OiBTb3VyY2UvV1RG
L1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
V1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJj
ZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIz
LDYgKzIzLDggQEAKIC8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCiAJCTBGMEQ4NUI0
MTcyMzRDQzEwMDMzODIxMCAvKiBOb0xvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEQ4NUIzMTcyMzRDQjEwMDMzODIxMCAvKiBOb0xvY2suaCAq
LzsgfTsKIAkJMEYwRkNEREUxREQxNjdGOTAwQ0NBQjUzIC8qIExvY2tBbGdvcml0aG0uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEZDREREMUREMTY3
RjkwMENDQUI1MyAvKiBMb2NrQWxnb3JpdGhtLmggKi87IH07CisJCTBGMkFDNTYxMUU4OUY3MEMw
MDAxRUUzRiAvKiBSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyQUM1NjAxRTg5RjcwQzAwMDFFRTNGIC8qIFJhbmdlLmggKi87IH07CisJCTBG
MkFDNTYzMUU4QTAxNDkwMDAxRUUzRiAvKiBJbmRleEtleVR5cGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkFDNTYyMUU4QTAxNDkwMDAxRUUzRiAv
KiBJbmRleEtleVR5cGUuaCAqLzsgfTsKIAkJMEYyQjY2QTYxN0I2QjRGQjAwQTdBRTNGIC8qIERl
ZmVycmFibGVSZWZDb3VudGVkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjJCNjZBNDE3QjZCNEY3MDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50
ZWQuaCAqLzsgfTsKIAkJMEYyQjY2QTcxN0I2QjRGRDAwQTdBRTNGIC8qIEZsaXBCeXRlcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QTUxN0I2
QjRGNzAwQTdBRTNGIC8qIEZsaXBCeXRlcy5oICovOyB9OwogCQkwRjMwQkE5MDFFNzg3MDhFMDAy
Q0E4NDcgLyogR2xvYmFsVmVyc2lvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjMwQkE4QTFFNzg3MDhFMDAyQ0E4NDcgLyogR2xvYmFsVmVyc2lv
bi5jcHAgKi87IH07CkBAIC00MDgsNiArNDEwLDggQEAKIC8qIEJlZ2luIFBCWEZpbGVSZWZlcmVu
Y2Ugc2VjdGlvbiAqLwogCQkwRjBEODVCMzE3MjM0Q0IxMDAzMzgyMTAgLyogTm9Mb2NrLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IE5vTG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBG
Q0RERDFERDE2N0Y5MDBDQ0FCNTMgLyogTG9ja0FsZ29yaXRobS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBMb2NrQWxnb3JpdGhtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGMkFDNTYwMUU4OUY3MEMwMDAxRUUzRiAvKiBSYW5nZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSYW5nZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjJBQzU2MjFFOEEwMTQ5MDAwMUVFM0YgLyogSW5kZXhLZXlUeXBlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZGV4S2V5VHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjJCNjZBNDE3QjZCNEY3MDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50
ZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGVmZXJyYWJsZVJlZkNvdW50ZWQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQjY2QTUxN0I2QjRGNzAwQTdBRTNGIC8qIEZsaXBCeXRlcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBGbGlwQnl0ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYzMDBCN0QxOEFCNDhCNDAwQTZENzJFIC8qIEhhc2hNZXRob2QuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSGFzaE1ldGhvZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTAxOCwxMCAr
MTAyMiwxMSBAQAogCQkJCUE4QTQ3MkJBMTUxQTgyNUEwMDQxMjNGRiAvKiBIYXNoVHJhaXRzLmgg
Ki8sCiAJCQkJQThBNDcyQkIxNTFBODI1QTAwNDEyM0ZGIC8qIEhleE51bWJlci5oICovLAogCQkJ
CUZFODkyNUFGMUQwMERBRUMwMDQ2OTA3RSAvKiBJbmRlbnRlci5oICovLAotCQkJCTlDNjdDNTQy
NTg5MzQ4RTI4NUI0OTY5OSAvKiBJbmRleGVkQ29udGFpbmVySXRlcmF0b3IuaCAqLywKKwkJCQkw
RjJBQzU2MjFFOEEwMTQ5MDAwMUVFM0YgLyogSW5kZXhLZXlUeXBlLmggKi8sCiAJCQkJNUI0MzM4
M0E1RDBCNDYzQzk0MzNEOTMzIC8qIEluZGV4TWFwLmggKi8sCiAJCQkJMzEzN0UxRDdEQkQ4NEFD
MzhGQUU0RDM0IC8qIEluZGV4U2V0LmggKi8sCiAJCQkJMjY4NEQ0MzUxQzAwMEQ0MDAwODFENjYz
IC8qIEluZGV4U3BhcnNlU2V0LmggKi8sCisJCQkJOUM2N0M1NDI1ODkzNDhFMjg1QjQ5Njk5IC8q
IEluZGV4ZWRDb250YWluZXJJdGVyYXRvci5oICovLAogCQkJCUE4QTQ3MkJDMTUxQTgyNUEwMDQx
MjNGRiAvKiBJbmxpbmVBU00uaCAqLywKIAkJCQlBNzBEQTA4MjE3OTlGMDREMDA1MjlBOUIgLyog
SW5zZXJ0aW9uLmggKi8sCiAJCQkJN0NERDdGRjcxODZEMjkxRTAwNzQzM0NEIC8qIEl0ZXJhdG9y
QWRhcHRvcnMuaCAqLywKQEAgLTExMDAsNiArMTEwNSw3IEBACiAJCQkJQThBNDcyRkIxNTFBODI1
QjAwNDEyM0ZGIC8qIFJhbmRvbU51bWJlci5jcHAgKi8sCiAJCQkJQThBNDcyRkMxNTFBODI1QjAw
NDEyM0ZGIC8qIFJhbmRvbU51bWJlci5oICovLAogCQkJCUE4QTQ3MkZEMTUxQTgyNUIwMDQxMjNG
RiAvKiBSYW5kb21OdW1iZXJTZWVkLmggKi8sCisJCQkJMEYyQUM1NjAxRTg5RjcwQzAwMDFFRTNG
IC8qIFJhbmdlLmggKi8sCiAJCQkJMEY3MjVDQUIxQzUwNDYxNjAwQUQ5NDNBIC8qIFJhbmdlU2V0
LmggKi8sCiAJCQkJMEY4NzEwNTkxNjY0M0YxOTAwOTBCMEFEIC8qIFJhd1BvaW50ZXIuaCAqLywK
IAkJCQkwRkRFODdGNjFERkQwN0NDMDA2NEMzOTAgLyogUmVjdXJzaXZlTG9ja0FkYXB0ZXIuaCAq
LywKQEAgLTE0ODUsNiArMTQ5MSw3IEBACiAJCQkJQzkxNkI5NzVGMDJGNEY3RThCNEFCMTJEIC8q
IEluZGV4TWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlDOEIwRTFBMUUwMUE0ODZFQjk1RTBEMTEg
LyogSW5kZXhTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTI2ODRENDM2MUMwMDBENDAwMDgxRDY2
MyAvKiBJbmRleFNwYXJzZVNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQUM1NjMxRThBMDE0
OTAwMDFFRTNGIC8qIEluZGV4S2V5VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczREMx
NTFBODI1QjAwNDEyM0ZGIC8qIElubGluZUFTTS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwREEw
ODQxNzk5RjA0RDAwNTI5QTlCIC8qIEluc2VydGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjYx
NDdCMEExNUREQ0NEQzAwRERCOTA3IC8qIEludGVnZXJUb1N0cmluZ0NvbnZlcnNpb24uaCBpbiBI
ZWFkZXJzICovLApAQCAtMTU4Niw2ICsxNTkzLDcgQEAKIAkJCQk0MzBCNDc4OTFBQUFBQzFBMDAx
MjIzREEgLyogU3RyaW5nQ29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQzRTE1MUE4
MjVCMDA0MTIzRkYgLyogU3RyaW5nQ29uY2F0ZW5hdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTdD
RDRDMjcwMUUyQzgyQjkwMDkyOTQ3MCAvKiBTdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGMkFDNTYxMUU4OUY3MEMwMDAxRUUzRiAvKiBSYW5nZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQThBNDc0MkMxNTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ0V4dHJhcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0M0YxNTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ0hh
c2guaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDg3NDU0MTdBMEJEQUUwMEZBMDRDQiAvKiBTdHJp
bmdIYXNoRHVtcENvbnRleHQuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dURi93dGYv
Q01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50
eHQJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC0xMDAsNiArMTAwLDcgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgUkFN
U2l6ZS5oCiAgICAgUmFuZG9tTnVtYmVyLmgKICAgICBSYW5kb21OdW1iZXJTZWVkLmgKKyAgICBS
YW5nZS5oCiAgICAgUmFuZ2VTZXQuaAogICAgIFJhd1BvaW50ZXIuaAogICAgIFJlY3Vyc2l2ZUxv
Y2tBZGFwdGVyLmgKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0RlcXVlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvRGVxdWUuaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL1dURi93
dGYvRGVxdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDcsIDIwMDgsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CkBAIC04OSw2ICs4OSwxOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBy
ZW1vdmVMYXN0KCk7CiAgICAgdm9pZCByZW1vdmUoaXRlcmF0b3ImKTsKICAgICB2b2lkIHJlbW92
ZShjb25zdF9pdGVyYXRvciYpOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+IHZv
aWQgcmVtb3ZlQWxsTWF0Y2hpbmcoY29uc3QgRnVuYyYpOworICAgIAorICAgIC8vIFRoaXMgaXMg
YSBwcmlvcml0eSBlbnF1ZXVlLiBUaGUgY2FsbGJhY2sgaXMgZ2l2ZW4gYSB2YWx1ZSwgYW5kIGlm
IGl0IHJldHVybnMgdHJ1ZSwgdGhlbiB0aGlzCisgICAgLy8gd2lsbCBwdXQgdGhlIGFwcGVuZGVk
IHZhbHVlIGJlZm9yZSB0aGF0IHZhbHVlLiBJdCB3aWxsIGtlZXAgYnViYmxpbmcgdW50aWwgdGhl
IGNhbGxiYWNrIHJldHVybnMKKyAgICAvLyBmYWxzZSBvciB0aGUgdmFsdWUgZW5kcyB1cCBhdCB0
aGUgaGVhZCBvZiB0aGUgcXVldWUuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgdHlwZW5hbWUg
RnVuYz4KKyAgICB2b2lkIGFwcGVuZEFuZEJ1YmJsZShVJiYsIGNvbnN0IEZ1bmMmKTsKKyAgICAK
KyAgICAvLyBSZW1vdmUgYW5kIHJldHVybiB0aGUgbGFzdCBlbGVtZW50IGZvciB3aGljaCB0aGUg
Y2FsbGJhY2sgcmV0dXJucyB0cnVlLiBSZXR1cm5zIGEgbnVsbCB2ZXJzaW9uIG9mCisgICAgLy8g
VCBpZiBpdCB0aGUgY2FsbGJhY2sgYWx3YXlzIHJldHVybnMgZmFsc2UuCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuYz4KKyAgICBUIHRha2VMYXN0KGNvbnN0IEZ1bmMmKTsKIAogICAgIHZvaWQg
Y2xlYXIoKTsKIApAQCAtNTI0LDYgKzUzNyw1NSBAQCBpbmxpbmUgdm9pZCBEZXF1ZTxULCBpbmxp
bmVDYXBhY2l0eT46OnJlCiAgICAgY2hlY2tWYWxpZGl0eSgpOwogfQogCit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgor
aW5saW5lIHZvaWQgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+OjpyZW1vdmVBbGxNYXRjaGluZyhj
b25zdCBGdW5jJiBmdW5jKQoreworICAgIHNpemVfdCBjb3VudCA9IHNpemUoKTsKKyAgICB3aGls
ZSAoY291bnQtLSkgeworICAgICAgICBUIHZhbHVlID0gdGFrZUZpcnN0KCk7CisgICAgICAgIGlm
ICghZnVuYyh2YWx1ZSkpCisgICAgICAgICAgICBhcHBlbmQoV1RGTW92ZSh2YWx1ZSkpOworICAg
IH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgordGVt
cGxhdGU8dHlwZW5hbWUgVSwgdHlwZW5hbWUgRnVuYz4KK2lubGluZSB2b2lkIERlcXVlPFQsIGlu
bGluZUNhcGFjaXR5Pjo6YXBwZW5kQW5kQnViYmxlKFUmJiB2YWx1ZSwgY29uc3QgRnVuYyYgZnVu
YykKK3sKKyAgICBhcHBlbmQoV1RGTW92ZSh2YWx1ZSkpOworICAgIGl0ZXJhdG9yIGJlZ2luID0g
dGhpcy0+YmVnaW4oKTsKKyAgICBpdGVyYXRvciBpdGVyID0gZW5kKCk7CisgICAgLS1pdGVyOwor
ICAgIHdoaWxlIChpdGVyICE9IGJlZ2luKSB7CisgICAgICAgIGl0ZXJhdG9yIHByZXYgPSBpdGVy
OworICAgICAgICAtLXByZXY7CisgICAgICAgIGlmICghZnVuYygqcHJldikpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIHN0ZDo6c3dhcCgqcHJldiwgKml0ZXIpOworICAgICAgICBpdGVy
ID0gcHJldjsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVD
YXBhY2l0eT4KK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CitpbmxpbmUgVCBEZXF1ZTxULCBpbmxp
bmVDYXBhY2l0eT46OnRha2VMYXN0KGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgdW5zaWduZWQg
Y291bnQgPSAwOworICAgIHVuc2lnbmVkIHNpemUgPSB0aGlzLT5zaXplKCk7CisgICAgd2hpbGUg
KGNvdW50IDwgc2l6ZSkgeworICAgICAgICBUIGNhbmRpZGF0ZSA9IHRha2VMYXN0KCk7CisgICAg
ICAgIGlmIChmdW5jKGNhbmRpZGF0ZSkpIHsKKyAgICAgICAgICAgIHdoaWxlIChjb3VudC0tKQor
ICAgICAgICAgICAgICAgIGFwcGVuZCh0YWtlRmlyc3QoKSk7CisgICAgICAgICAgICByZXR1cm4g
Y2FuZGlkYXRlOworICAgICAgICB9CisgICAgICAgIGNvdW50Kys7CisgICAgICAgIHByZXBlbmQo
V1RGTW92ZShjYW5kaWRhdGUpKTsKKyAgICB9CisgICAgcmV0dXJuIFQoKTsKK30KKwogI2lmZGVm
IE5ERUJVRwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBpbmxp
bmUgdm9pZCBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT46OmNoZWNrVmFsaWRp
dHkoKSBjb25zdCB7IH0KIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0
eT4gaW5saW5lIHZvaWQgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+OjpjaGVj
a1ZhbGlkaXR5KGNvbnN0IERlcXVlSXRlcmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5PiYpIGNv
bnN0IHsgfQpJbmRleDogU291cmNlL1dURi93dGYvSW5kZXhLZXlUeXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvSW5kZXhLZXlUeXBlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L1dURi93dGYvSW5kZXhLZXlUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9u
Y2UKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgSW5k
ZXhLZXlUeXBlIHsKKyAgICBzdGF0aWMgc2l6ZV90IGluZGV4KGNvbnN0IFQmIGtleSkgeyByZXR1
cm4ga2V5LmluZGV4KCk7IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgSW5k
ZXhLZXlUeXBlPFQqPiB7CisgICAgc3RhdGljIHNpemVfdCBpbmRleChUKiBrZXkpIHsgcmV0dXJu
IGtleS0+aW5kZXgoKTsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL0luZGV4TWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSW5kZXhN
YXAuaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL1dURi93dGYvSW5kZXhNYXAuaAkod29y
a2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUg
PHd0Zi9JbmRleEtleVR5cGUuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFj
ZSBXVEYgewpAQCAtNzAsMTggKzcxLDI0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fdmVj
dG9yW2luZGV4XTsKICAgICB9CiAgICAgCi0gICAgVmFsdWUmIG9wZXJhdG9yW10oS2V5KiBrZXkp
CisgICAgVmFsdWUmIG9wZXJhdG9yW10oY29uc3QgS2V5JiBrZXkpCiAgICAgewotICAgICAgICBy
ZXR1cm4gbV92ZWN0b3Jba2V5LT5pbmRleCgpXTsKKyAgICAgICAgcmV0dXJuIG1fdmVjdG9yW0lu
ZGV4S2V5VHlwZTxLZXk+OjppbmRleChrZXkpXTsKICAgICB9CiAgICAgCi0gICAgY29uc3QgVmFs
dWUmIG9wZXJhdG9yW10oS2V5KiBrZXkpIGNvbnN0CisgICAgY29uc3QgVmFsdWUmIG9wZXJhdG9y
W10oY29uc3QgS2V5JiBrZXkpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV92ZWN0b3Jb
a2V5LT5pbmRleCgpXTsKKyAgICAgICAgcmV0dXJuIG1fdmVjdG9yW0luZGV4S2V5VHlwZTxLZXk+
OjppbmRleChrZXkpXTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhcHBlbmQoY29uc3QgS2V5JiBr
ZXksIFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoSW5kZXhLZXlU
eXBlPEtleT46OmluZGV4KGtleSkgPT0gbV92ZWN0b3Iuc2l6ZSgpKTsKKyAgICAgICAgbV92ZWN0
b3IuYXBwZW5kKHZhbHVlKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgVmVjdG9yPFZhbHVlPiBt
X3ZlY3RvcjsKKyAgICBWZWN0b3I8VmFsdWUsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX3Zl
Y3RvcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL1dURi93dGYvSW5k
ZXhTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9JbmRleFNldC5oCShyZXZpc2lv
biAyMTQ0MjcpCisrKyBTb3VyY2UvV1RGL3d0Zi9JbmRleFNldC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSA8d3RmL0JpdFZlY3Rvci5oPgogI2luY2x1ZGUg
PHd0Zi9Db21tYVByaW50ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSW5kZXhLZXlUeXBlLmg+CiAKIG5h
bWVzcGFjZSBXVEYgewogCkBAIC00MiwzMCArNDMsMzAgQEAgcHVibGljOgogICAgIHsKICAgICB9
CiAKLSAgICBib29sIGFkZChUKiB2YWx1ZSkKKyAgICBib29sIGFkZChjb25zdCBUJiB2YWx1ZSkK
ICAgICB7Ci0gICAgICAgIHJldHVybiAhbV9zZXQuc2V0KHZhbHVlLT5pbmRleCgpKTsKKyAgICAg
ICAgcmV0dXJuICFtX3NldC5zZXQoSW5kZXhLZXlUeXBlPFQ+OjppbmRleCh2YWx1ZSkpOwogICAg
IH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhYmxlPgogICAgIGJvb2wgYWRkQWxsKGNv
bnN0IEl0ZXJhYmxlJiBpdGVyYWJsZSkKICAgICB7CiAgICAgICAgIGJvb2wgcmVzdWx0ID0gZmFs
c2U7Ci0gICAgICAgIGZvciAoVCogdmFsdWUgOiBpdGVyYWJsZSkKKyAgICAgICAgZm9yIChjb25z
dCBUJiB2YWx1ZSA6IGl0ZXJhYmxlKQogICAgICAgICAgICAgcmVzdWx0IHw9IGFkZCh2YWx1ZSk7
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgYm9vbCByZW1vdmUoVCogdmFs
dWUpCisgICAgYm9vbCByZW1vdmUoY29uc3QgVCYgdmFsdWUpCiAgICAgewotICAgICAgICByZXR1
cm4gbV9zZXQuY2xlYXIodmFsdWUtPmluZGV4KCkpOworICAgICAgICByZXR1cm4gbV9zZXQuY2xl
YXIoSW5kZXhLZXlUeXBlPFQ+OjppbmRleCh2YWx1ZSkpOwogICAgIH0KIAotICAgIGJvb2wgY29u
dGFpbnMoVCogdmFsdWUpIGNvbnN0CisgICAgYm9vbCBjb250YWlucyhjb25zdCBUJiB2YWx1ZSkg
Y29uc3QKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIHJldHVybiBtX3NldC5nZXQodmFsdWUtPmluZGV4KCkpOworICAgICAgICBy
ZXR1cm4gbV9zZXQuZ2V0KEluZGV4S2V5VHlwZTxUPjo6aW5kZXgodmFsdWUpKTsKICAgICB9CiAK
ICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0CkBAIC0xMDAsNyArMTAxLDcgQEAgcHVibGljOgogICAg
ICAgICAgICAgewogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBUKiBvcGVyYXRvciooKQor
ICAgICAgICAgICAgVCBvcGVyYXRvciooKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
IHJldHVybiBtX2NvbGxlY3Rpb24tPmF0KCptX2l0ZXIpOwogICAgICAgICAgICAgfQpJbmRleDog
U291cmNlL1dURi93dGYvUmFuZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9SYW5n
ZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL1JhbmdlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPGxpbWl0cy5oPgorI2lu
Y2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisK
K25hbWVzcGFjZSBXVEYgeworCisvLyBOb3RlIHRoYXQgdGhlICdiZWdpbicgaXMgaW5jbHVzaXZl
LCB3aGlsZSB0aGUgJ2VuZCcgaXMgZXhjbHVzaXZlLiBUaGVzZSB0d28gcmFuZ2VzIGFyZSBub24t
CisvLyBvdmVybGFwcGluZzoKKy8vCisvLyAgICAgcmFuZ2VBID0gMC4uLjgKKy8vICAgICByYW5n
ZUIgPSA4Li4uMTYKKwordGVtcGxhdGU8dHlwZW5hbWUgUGFzc2VkVHlwZT4KK2NsYXNzIFJhbmdl
IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFBhc3NlZFR5cGUgVHlwZTsKKyAgICAKKyAgICBSYW5n
ZSgpCisgICAgICAgIDogbV9iZWdpbigwKQorICAgICAgICAsIG1fZW5kKDApCisgICAgeworICAg
IH0KKworICAgIGV4cGxpY2l0IFJhbmdlKFR5cGUgdmFsdWUpCisgICAgICAgIDogbV9iZWdpbih2
YWx1ZSkKKyAgICAgICAgLCBtX2VuZCh2YWx1ZSArIDEpCisgICAgeworICAgICAgICBBU1NFUlQo
bV9lbmQgPj0gbV9iZWdpbik7CisgICAgfQorCisgICAgUmFuZ2UoVHlwZSBiZWdpbiwgVHlwZSBl
bmQpCisgICAgICAgIDogbV9iZWdpbihiZWdpbikKKyAgICAgICAgLCBtX2VuZChlbmQpCisgICAg
eworICAgICAgICBBU1NFUlQobV9lbmQgPj0gbV9iZWdpbik7CisgICAgICAgIGlmIChtX2JlZ2lu
ID09IG1fZW5kKSB7CisgICAgICAgICAgICAvLyBDYW5vbmljYWxpemUgZW1wdHkgcmFuZ2VzLgor
ICAgICAgICAgICAgbV9iZWdpbiA9IDA7CisgICAgICAgICAgICBtX2VuZCA9IDA7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBzdGF0aWMgUmFuZ2UgdG9wKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBSYW5nZShzdGQ6Om51bWVyaWNfbGltaXRzPFR5cGU+OjptaW4oKSwgc3RkOjpudW1lcmljX2xp
bWl0czxUeXBlPjo6bWF4KCkpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBS
YW5nZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9iZWdpbiA9PSBvdGhl
ci5tX2JlZ2luCisgICAgICAgICAgICAmJiBtX2VuZCA9PSBvdGhlci5tX2VuZDsKKyAgICB9CisK
KyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgUmFuZ2UmIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKyAgICAKKyAgICBleHBsaWNp
dCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9iZWdpbiAhPSBtX2VuZDsgfQorCisg
ICAgUmFuZ2Ugb3BlcmF0b3J8KGNvbnN0IFJhbmdlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAg
ICAgIGlmICghKnRoaXMpCisgICAgICAgICAgICByZXR1cm4gb3RoZXI7CisgICAgICAgIGlmICgh
b3RoZXIpCisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIHJldHVybiBSYW5nZSgK
KyAgICAgICAgICAgIHN0ZDo6bWluKG1fYmVnaW4sIG90aGVyLm1fYmVnaW4pLAorICAgICAgICAg
ICAgc3RkOjptYXgobV9lbmQsIG90aGVyLm1fZW5kKSk7CisgICAgfQorICAgIAorICAgIFJhbmdl
JiBvcGVyYXRvcnw9KGNvbnN0IFJhbmdlJiBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiAq
dGhpcyA9ICp0aGlzIHwgb3RoZXI7CisgICAgfQorICAgIAorICAgIFR5cGUgYmVnaW4oKSBjb25z
dCB7IHJldHVybiBtX2JlZ2luOyB9CisgICAgVHlwZSBlbmQoKSBjb25zdCB7IHJldHVybiBtX2Vu
ZDsgfQorCisgICAgYm9vbCBvdmVybGFwcyhjb25zdCBSYW5nZSYgb3RoZXIpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gV1RGOjpyYW5nZXNPdmVybGFwKG1fYmVnaW4sIG1fZW5kLCBvdGhl
ci5tX2JlZ2luLCBvdGhlci5tX2VuZCk7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoKnRoaXMgPT0gUmFuZ2UoKSkgewor
ICAgICAgICAgICAgb3V0LnByaW50KCJCb3R0b20iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoKnRoaXMgPT0gdG9wKCkpIHsKKyAgICAgICAgICAgIG91dC5w
cmludCgiVG9wIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYg
KG1fYmVnaW4gPT0gbV9lbmQgKyAxKSB7CisgICAgICAgICAgICBvdXQucHJpbnQobV9iZWdpbik7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgb3V0LnByaW50KG1fYmVn
aW4sICIuLi4iLCBtX2VuZCk7CisgICAgfQorCitwcml2YXRlOgorICAgIFR5cGUgbV9iZWdpbjsK
KyAgICBUeXBlIG1fZW5kOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6
UmFuZ2U7CisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1JhbmdlU2V0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvUmFuZ2VTZXQuaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL1dU
Ri93dGYvUmFuZ2VTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsNiArNzcsMTAgQEAgcHVibGlj
OgogICAgICAgICBtX2lzQ29tcGFjdCA9IGZhbHNlOwogCiAgICAgICAgIC8vIFdlIGFwcGVuZCB3
aXRob3V0IGNvbXBhY3Rpbmcgb25seSBpZiBkb2luZyBzbyBpcyBndWFyYW50ZWVkIG5vdCB0byBy
ZXNpemUgdGhlIHZlY3Rvci4KKyAgICAgICAgLy8gRklYTUU6IFRoaXMgaGV1cmlzdGljIGlzIGFs
bW9zdCBjZXJ0YWlubHkgd3JvbmcsIGJlY2F1c2Ugd2UgZG9uJ3QgY29udHJvbCB0aGUgY2FwYWNp
dHkuIEkKKyAgICAgICAgLy8gdGhpbmsgdGhhdCB0aGlzIG1lYW5zIHRoYXQgd2Ugd2lsbCBzb21l
dGltZXMgYmUgcmFnZS1jb21wYWN0aW5nIHdoZW4gd2UgYXJlIGp1c3Qgc2h5IG9mIHRoZQorICAg
ICAgICAvLyBjYXBhY2l0eS4KKyAgICAgICAgLy8gT09QUzogbmVlZCBidWcgdXJsCiAgICAgICAg
IGlmIChtX3Jhbmdlcy5zaXplKCkgKyAxIDwgbV9yYW5nZXMuY2FwYWNpdHkoKSkgewogICAgICAg
ICAgICAgbV9yYW5nZXMuYXBwZW5kKHJhbmdlKTsKICAgICAgICAgICAgIHJldHVybjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305832</attachid>
            <date>2017-03-29 21:52:43 -0700</date>
            <delta_ts>2017-03-30 13:15:29 -0700</delta_ts>
            <desc>another big fix</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>114777</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIxNDQyNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMTQwLDcgKzE0MCw2IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYjMvQjNG
b2xkUGF0aENvbnN0YW50cy5jcHAKICAgICBiMy9CM0ZyZXF1ZW5jeUNsYXNzLmNwcAogICAgIGIz
L0IzR2VuZXJhdGUuY3BwCi0gICAgYjMvQjNIZWFwUmFuZ2UuY3BwCiAgICAgYjMvQjNJbmZlclN3
aXRjaGVzLmNwcAogICAgIGIzL0IzSW5zZXJ0aW9uU2V0LmNwcAogICAgIGIzL0IzS2luZC5jcHAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTgzLDYgKzE4MywxMCBAQAogCQkwRjI1RjFCMjE4MTYz
NUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1RjFBQjE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xv
d1BhdGhDYWxsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEYyNUYxQjMxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1RjFBQzE4
MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5LmNwcCAqLzsgfTsKIAkJMEYyNUYx
QjQxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNUYxQUQxODE2MzVGMzAwNTIyRjM5
IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGMkFDNTY2MUU4QTBCNzcwMDAxRUUzRiAvKiBBaXJGaXhTcGls
bHNBZnRlclRlcm1pbmFscy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjJBQzU2NDFFOEEwQjc2MDAwMUVFM0YgLyogQWlyRml4U3BpbGxzQWZ0ZXJU
ZXJtaW5hbHMuY3BwICovOyB9OworCQkwRjJBQzU2NzFFOEEwQjc5MDAwMUVFM0YgLyogQWlyRml4
U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMkFDNTY1MUU4QTBCNzYwMDAxRUUzRiAvKiBBaXJGaXhTcGlsbHNBZnRl
clRlcm1pbmFscy5oICovOyB9OworCQkwRjJBQzU2QTFFOEEwQkQzMDAwMUVFM0YgLyogQWlyQWxs
b2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQUM1NjgxRThBMEJEMTAwMDFFRTNGIC8qIEFpckFsbG9j
YXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcCAqLzsgfTsKKwkJMEYyQUM1NkIxRThBMEJENTAw
MDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJBQzU2OTFFOEEwQkQxMDAwMUVF
M0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaCAqLzsgfTsKIAkJMEYyQjY2
QUMxN0I2QjUzRjAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBODE3QjZCNTNEMDBBN0FF
M0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJCNjZBRDE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNv
bWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJCNjZBOTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNv
dW50ZWRJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEYyQjY2QUUxN0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVk
U2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJC
NjZBQTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTY5LDcgKzk3Myw2
IEBACiAJCTBGRUM4NUJDMUJFMTQ2MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0cmVuZ3RoLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUI3MUJF
MTQ2MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0cmVuZ3RoLmNwcCAqLzsgfTsKIAkJMEZFQzg1QkQx
QkUxNDYyRjAwODBGRjc0IC8qIEIzUmVkdWNlU3RyZW5ndGguaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUI4MUJFMTQ2MkYwMDgwRkY3NCAvKiBC
M1JlZHVjZVN0cmVuZ3RoLmggKi87IH07CiAJCTBGRUM4NUMxMUJFMTY3QTAwMDgwRkY3NCAvKiBC
M0VmZmVjdHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NUJFMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0VmZmVjdHMuaCAqLzsgfTsKLQkJMEZFQzg1
QzIxQkUxNjdBMDAwODBGRjc0IC8qIEIzSGVhcFJhbmdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUJGMUJFMTY3QTAwMDgwRkY3NCAvKiBC
M0hlYXBSYW5nZS5jcHAgKi87IH07CiAJCTBGRUM4NUMzMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hl
YXBSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg1QzAxQkUxNjdBMDAwODBGRjc0IC8qIEIzSGVhcFJhbmdlLmggKi87IH07CiAJCTBGRUM4
NUM1MUJFMTZGNUEwMDgwRkY3NCAvKiBCM0VmZmVjdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1QzQxQkUxNkY1QTAwODBGRjc0IC8qIEIz
RWZmZWN0cy5jcHAgKi87IH07CiAJCTBGRUQ2N0I5MUIyNjI1NkQwMDY2Q0UxNSAvKiBERkdDb25z
dGFudEhvaXN0aW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFRDY3QjcxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0YW50SG9pc3Rp
bmdQaGFzZS5jcHAgKi87IH07CkBAIC0yNzAzLDYgKzI3MDYsMTAgQEAKIAkJMEYyNUYxQUIxODE2
MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBGVExTbG93UGF0aENhbGwuaDsgcGF0aCA9IGZ0bC9GVExTbG93UGF0aENhbGwu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNUYxQUMxODE2MzVGMzAwNTIyRjM5
IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBGVExTbG93UGF0aENhbGxLZXkuY3BwOyBwYXRoID0gZnRsL0ZUTFNsb3dQYXRoQ2Fs
bEtleS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjVGMUFEMTgxNjM1RjMw
MDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gRlRMU2xvd1BhdGhDYWxsS2V5Lmg7IHBhdGggPSBmdGwvRlRMU2xvd1BhdGhDYWxs
S2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkFDNTY0MUU4QTBCNzYwMDAx
RUUzRiAvKiBBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5jcHA7IHBhdGgg
PSBiMy9haXIvQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjJBQzU2NTFFOEEwQjc2MDAwMUVFM0YgLyogQWlyRml4U3BpbGxzQWZ0
ZXJUZXJtaW5hbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyRml4U3Bp
bGxzQWZ0ZXJUZXJtaW5hbHMuaDsgcGF0aCA9IGIzL2Fpci9BaXJGaXhTcGlsbHNBZnRlclRlcm1p
bmFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJBQzU2ODFFOEEwQkQxMDAw
MUVFM0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNj
YW4uY3BwOyBwYXRoID0gYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQUM1NjkxRThBMEJEMTAwMDFFRTNG
IC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmg7IHBhdGgg
PSBiMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQjY2QTgxN0I2QjUzRDAwQTdBRTNGIC8qIEdDSW5jb21pbmdS
ZWZDb3VudGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5jb21pbmdSZWZDb3VudGVkLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkE5MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0lu
Y29taW5nUmVmQ291bnRlZElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR0NJbmNvbWluZ1JlZkNv
dW50ZWRJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkFBMTdC
NkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMzQ5Niw3ICszNTAzLDYgQEAKIAkJMEZFQzg1QjcxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVk
dWNlU3RyZW5ndGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNS
ZWR1Y2VTdHJlbmd0aC5jcHA7IHBhdGggPSBiMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQzg1QjgxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVk
dWNlU3RyZW5ndGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNSZWR1Y2VT
dHJlbmd0aC5oOyBwYXRoID0gYjMvQjNSZWR1Y2VTdHJlbmd0aC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkVDODVCRTFCRTE2N0EwMDA4MEZGNzQgLyogQjNFZmZlY3RzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzRWZmZWN0cy5oOyBwYXRoID0gYjMvQjNF
ZmZlY3RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGRUM4NUJGMUJFMTY3QTAw
MDgwRkY3NCAvKiBCM0hlYXBSYW5nZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBCM0hlYXBSYW5nZS5jcHA7IHBhdGggPSBiMy9CM0hlYXBSYW5nZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUM4NUMwMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hl
YXBSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0hlYXBSYW5nZS5o
OyBwYXRoID0gYjMvQjNIZWFwUmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZFQzg1QzQxQkUxNkY1QTAwODBGRjc0IC8qIEIzRWZmZWN0cy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0VmZmVjdHMuY3BwOyBwYXRoID0gYjMvQjNFZmZlY3Rz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFRDY3QjcxQjI2MjU2RDAwNjZD
RTE1IC8qIERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuY3BwOyBwYXRoID0gZGZn
L0RGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01NDE5LDcgKzU0MjUsNiBAQAogCQkJCTBGRUM4NENGMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0dlbmVyYXRlLmggKi8sCiAJCQkJMEYyQzYzQjUxRTYzNDNFODAwQzEzODM5IC8qIEIzR2VuZXJp
Y0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi8sCiAJCQkJMEZFQzg0RDAxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oICovLAotCQkJCTBGRUM4NUJGMUJFMTY3QTAwMDgw
RkY3NCAvKiBCM0hlYXBSYW5nZS5jcHAgKi8sCiAJCQkJMEZFQzg1QzAxQkUxNjdBMDAwODBGRjc0
IC8qIEIzSGVhcFJhbmdlLmggKi8sCiAJCQkJREM2OUI5OUExRDE1RjkwRjAwMkUzQzAwIC8qIEIz
SW5mZXJTd2l0Y2hlcy5jcHAgKi8sCiAJCQkJREM2OUI5OUIxRDE1RjkwRjAwMkUzQzAwIC8qIEIz
SW5mZXJTd2l0Y2hlcy5oICovLApAQCAtNTUyOCw2ICs1NTMzLDggQEAKIAkJMEZFQzg0QjMxQkRB
Q0Q4ODAwODBGRjc0IC8qIGFpciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCisJCQkJMEYyQUM1NjgxRThBMEJEMTAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0
ZXJzQnlMaW5lYXJTY2FuLmNwcCAqLywKKwkJCQkwRjJBQzU2OTFFOEEwQkQxMDAwMUVFM0YgLyog
QWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaCAqLywKIAkJCQk3OTY1QzIxNDFFNUQ3
OTk2MDBCNzU5MUQgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuY3BwICov
LAogCQkJCTc5NjVDMjE1MUU1RDc5OTYwMEI3NTkxRCAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5
R3JhcGhDb2xvcmluZy5oICovLAogCQkJCTBGRUM4NTQ4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJB
bGxvY2F0ZVN0YWNrLmNwcCAqLywKQEAgLTU1NjEsNiArNTU2OCw4IEBACiAJCQkJMEY0REUxQ0Qx
QzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCAqLywKIAkJCQkyNjJEODVC
NDFDMEQ2NTBGMDA2QUNCNjEgLyogQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmNwcCAqLywK
IAkJCQkyNjJEODVCNTFDMEQ2NTBGMDA2QUNCNjEgLyogQWlyRml4UGFydGlhbFJlZ2lzdGVyU3Rh
bGxzLmggKi8sCisJCQkJMEYyQUM1NjQxRThBMEI3NjAwMDFFRTNGIC8qIEFpckZpeFNwaWxsc0Fm
dGVyVGVybWluYWxzLmNwcCAqLywKKwkJCQkwRjJBQzU2NTFFOEEwQjc2MDAwMUVFM0YgLyogQWly
Rml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCAqLywKIAkJCQkwRkVDODU1MjFCREFDREM3MDA4MEZG
NzQgLyogQWlyRnJlcXVlbnRlZEJsb2NrLmggKi8sCiAJCQkJMEZFQzg1NTMxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckdlbmVyYXRlLmNwcCAqLywKIAkJCQkwRkVDODU1NDFCREFDREM3MDA4MEZGNzQg
LyogQWlyR2VuZXJhdGUuaCAqLywKQEAgLTgxMzksNiArODE0OCw3IEBACiAJCQkJMEZFQzg1MTAx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkVDODUxMjFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0MzQyMkE2MzFDMTU4RTZEMDBFMkVCOTggLyogQjNDb25zdEZsb2F0VmFsdWUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkFDNTZCMUU4QTBCRDUwMDAxRUUzRiAvKiBBaXJBbGxv
Y2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1QjMx
QkRFRDk1NzAwODBGRjc0IC8qIEIzQ29uc3RQdHJWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYzMzhERjYxQkU5M0Q1NTAwMTNDODhGIC8qIEIzQ29uc3RyYWluZWRWYWx1ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyQzYzQjgxRTYzNDNGNzAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2NrSW5z
ZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKQEAgLTkzNjIsNiArOTM3Miw3IEBACiAJCQkJNzA5
RkI4NkExQUUzMzVDNjAwMzlEMDY5IC8qIFdlYWtTZXRDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMTQxNTAxMzMxNTRCQjEzRjAwNUQ4Qzk4IC8qIFdlYWtTZXRJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3MDlGQjg2QzFBRTMzNUM2MDAzOUQwNjkgLyogV2Vha1NldFByb3Rv
dHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQUM1NjcxRThBMEI3OTAwMDFFRTNGIC8qIEFp
ckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JFRDFE
QjU4REFEMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNDMTYxREI1OUNCMjAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5
Q29tcGlsZUVycm9yQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JF
RjFEQjU4REFEMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90b3R5cGUuaCBp
biBIZWFkZXJzICovLApAQCAtOTk4OCw3ICs5OTk5LDYgQEAKIAkJCQkwRjcyNUNBRjFDNTA2RDNC
MDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkVDODUxNTFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkVDODUxODFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQkwRkVDODVDMjFCRTE2N0EwMDA4MEZGNzQgLyogQjNIZWFwUmFuZ2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJREM2OUI5OUMxRDE1RjkxMjAwMkUzQzAwIC8qIEIzSW5m
ZXJTd2l0Y2hlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVDODVCOTFCRTE0NjJGMDA4MEZG
NzQgLyogQjNJbnNlcnRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZERjY3RDMxRDlD
NkQyQTAwMUI5ODI1IC8qIEIzS2luZC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMTU0LDYgKzEw
MTY0LDcgQEAKIAkJCQlBNzhBOTc3NjE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkJEQzE1MTUxQzVENEQwMENEODkxMCAvKiBERkdGaXh1
cFBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjAxNzdGMURDQURDMzMwMEVBNTk1MCAv
KiBERkdGbG93SW5kZXhpbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQUM1NkExRThBMEJE
MzAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGOUQzMzk2MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRjcxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0ZsdXNo
Rm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNjlDQzg4MTkzQUM2MEEwMDQ1NzU5RSAv
KiBERkdGcm96ZW5WYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMjYzLDYgKzEwMjc0LDcg
QEAKIAkJCQkyQTgzNjM4NTE4RDdEMEVFMDAwMEVCQ0MgLyogRWRlbkdDQWN0aXZpdHlDYWxsYmFj
ay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OUU0NUEyNTE4QTFCMjU5MDAyNkQ4OEYgLyogRW5j
b2RlZFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUM3MTA3RUMzNzYwMDQyN0E0
OCAvKiBFcnJvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJBQzU2NjFFOEEwQjc3MDAwMUVF
M0YgLyogQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQ3RjM5QzgxMDdFQzM3NjAwNDI3QTQ4IC8qIEVycm9yQ29uc3RydWN0b3IuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRkVCNThDMTQxODdCOEIxNjAwOThFRjBCIC8qIEVycm9ySGFuZGxpbmdTY29w
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDOTEwN0VDMzc2MDA0MjdBNDggLyogRXJy
b3JJbnN0YW5jZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrVXRpbHMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTE0LDcgKzExNCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+CiBWZWN0b3I8QmFz
aWNCbG9jayo+IGJsb2Nrc0luUHJlT3JkZXIoQmFzaWNCbG9jayogcm9vdCkKIHsKICAgICBWZWN0
b3I8QmFzaWNCbG9jayo+IHJlc3VsdDsKLSAgICBHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2Nr
KiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IHdvcmtsaXN0OworICAgIEdyYXBoTm9kZVdvcmtsaXN0
PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+IHdvcmtsaXN0OwogICAgIHdvcmts
aXN0LnB1c2gocm9vdCk7CiAgICAgd2hpbGUgKEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3Qu
cG9wKCkpIHsKICAgICAgICAgcmVzdWx0LmFwcGVuZChibG9jayk7CkBAIC0xMjgsNyArMTI4LDcg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KIFZlY3RvcjxCYXNpY0Jsb2NrKj4gYmxv
Y2tzSW5Qb3N0T3JkZXIoQmFzaWNCbG9jayogcm9vdCkKIHsKICAgICBWZWN0b3I8QmFzaWNCbG9j
ayo+IHJlc3VsdDsKLSAgICBQb3N0T3JkZXJHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwg
SW5kZXhTZXQ8QmFzaWNCbG9jaz4+IHdvcmtsaXN0OworICAgIFBvc3RPcmRlckdyYXBoTm9kZVdv
cmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+IHdvcmtsaXN0OwogICAg
IHdvcmtsaXN0LnB1c2gocm9vdCk7CiAgICAgd2hpbGUgKEdyYXBoTm9kZVdpdGhPcmRlcjxCYXNp
Y0Jsb2NrKj4gaXRlbSA9IHdvcmtsaXN0LnBvcCgpKSB7CiAgICAgICAgIHN3aXRjaCAoaXRlbS5v
cmRlcikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tXb3JrbGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrV29ya2xpc3Qu
aAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tX
b3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CiAKIGNsYXNzIEJhc2ljQmxvY2s7CiAKLXR5cGVkZWYgR3JhcGhOb2RlV29y
a2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2s+PiBCbG9ja1dvcmtsaXN0Owor
dHlwZWRlZiBHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9j
ayo+PiBCbG9ja1dvcmtsaXN0OwogCiAvLyBXaGVuIHlvdSBzYXkgQmxvY2tXaXRoPGludD4geW91
IHNob3VsZCByZWFkIGl0IGFzICJibG9jayB3aXRoIGFuIGludCIuCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB1c2luZyBCbG9ja1dpdGggPSBHcmFwaE5vZGVXaXRoPEJhc2ljQmxvY2sqLCBUPjsKQEAg
LTQ0LDEzICs0NCwxMyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBCbG9ja1dpdGggPSBH
CiAvLyBwZXJtaXRzIGZvcmNpYmx5IGVucXVldWVpbmcgdGhpbmdzIGV2ZW4gaWYgdGhlIGJsb2Nr
IGhhcyBhbHJlYWR5IGJlZW4gc2Vlbi4gSXQncyB1c2VmdWwgZm9yCiAvLyB0aGluZ3MgbGlrZSBi
dWlsZGluZyBhIHNwYW5uaW5nIHRyZWUsIGluIHdoaWNoIGNhc2UgVCAodGhlIGF1eGlsaWFyeSBw
YXlsb2FkKSB3b3VsZCBiZSB0aGUKIC8vIHN1Y2Nlc3NvciBpbmRleC4KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3JrbGlzdCA9IEV4dGVuZGVkR3JhcGhOb2RlV29y
a2xpc3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0PEJhc2ljQmxvY2s+PjsKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3JrbGlzdCA9IEV4dGVuZGVkR3JhcGhOb2Rl
V29ya2xpc3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0PEJhc2ljQmxvY2sqPj47CiAKIHR5cGVk
ZWYgR3JhcGhWaXNpdE9yZGVyIFZpc2l0T3JkZXI7CiAKIHR5cGVkZWYgR3JhcGhOb2RlV2l0aE9y
ZGVyPEJhc2ljQmxvY2sqPiBCbG9ja1dpdGhPcmRlcjsKIAotdHlwZWRlZiBQb3N0T3JkZXJHcmFw
aE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IFBvc3RPcmRl
ckJsb2NrV29ya2xpc3Q7Cit0eXBlZGVmIFBvc3RPcmRlckdyYXBoTm9kZVdvcmtsaXN0PEJhc2lj
QmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+IFBvc3RPcmRlckJsb2NrV29ya2xpc3Q7CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDRkcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDRkcu
aAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ0ZHLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzksOCArMzksOCBAQCBjbGFzcyBDRkcgewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIHR5cGVkZWYgQmFzaWNCbG9jayogTm9kZTsKLSAg
ICB0eXBlZGVmIEluZGV4U2V0PEJhc2ljQmxvY2s+IFNldDsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB1c2luZyBNYXAgPSBJbmRleE1hcDxCYXNpY0Jsb2NrLCBUPjsKKyAgICB0eXBlZGVmIElu
ZGV4U2V0PEJhc2ljQmxvY2sqPiBTZXQ7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcg
TWFwID0gSW5kZXhNYXA8QmFzaWNCbG9jayosIFQ+OwogICAgIHR5cGVkZWYgVmVjdG9yPEJhc2lj
QmxvY2sqLCA0PiBMaXN0OwogCiAgICAgQ0ZHKFByb2NlZHVyZSYgcHJvYykKQEAgLTUxLDcgKzUx
LDcgQEAgcHVibGljOgogICAgIE5vZGUgcm9vdCgpIHsgcmV0dXJuIG1fcHJvY1swXTsgfQogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBNYXA8VD4gbmV3TWFwKCkgeyByZXR1cm4gSW5k
ZXhNYXA8SlNDOjpCMzo6QmFzaWNCbG9jaywgVD4obV9wcm9jLnNpemUoKSk7IH0KKyAgICBNYXA8
VD4gbmV3TWFwKCkgeyByZXR1cm4gSW5kZXhNYXA8SlNDOjpCMzo6QmFzaWNCbG9jayosIFQ+KG1f
cHJvYy5zaXplKCkpOyB9CiAKICAgICBTdWNjZXNzb3JDb2xsZWN0aW9uPEJhc2ljQmxvY2ssIEJh
c2ljQmxvY2s6OlN1Y2Nlc3Nvckxpc3Q+IHN1Y2Nlc3NvcnMoTm9kZSBub2RlKSB7IHJldHVybiBu
b2RlLT5zdWNjZXNzb3JCbG9ja3MoKTsgfQogICAgIEJhc2ljQmxvY2s6OlByZWRlY2Vzc29yTGlz
dCYgcHJlZGVjZXNzb3JzKE5vZGUgbm9kZSkgeyByZXR1cm4gbm9kZS0+cHJlZGVjZXNzb3JzKCk7
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCShyZXZpc2lvbiAyMTQ0Mjcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uaAkod29ya2luZyBjb3B5KQpA
QCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShCM19KSVQpCiAKICNpbmNsdWRlICJKU0V4cG9y
dE1hY3Jvcy5oIgorI2luY2x1ZGUgIk9wdGlvbnMuaCIKICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CkBAIC0xNzAsNiArMTcxLDEzIEBA
IHN0YXRpYyBJbnRUeXBlIHJvdGF0ZUxlZnQoSW50VHlwZSB2YWx1ZSwKICAgICByZXR1cm4gKHVW
YWx1ZSA8PCBzaGlmdCkgfCAodVZhbHVlID4+ICgoYml0cyAtIHNoaWZ0KSAmIG1hc2spKTsKIH0K
IAoraW5saW5lIHVuc2lnbmVkIGRlZmF1bHRPcHRMZXZlbCgpCit7CisgICAgLy8gVGhpcyBzaG91
bGQgYWxtb3N0IGFsd2F5cyByZXR1cm4gMiwgYnV0IHdlIGFsbG93IHRoaXMgZGVmYXVsdCB0byBi
ZSBsb3dlcmVkIGZvciB0ZXN0aW5nLiBTb21lCisgICAgLy8gY29tcG9uZW50cyB3aWxsIGRlbGli
ZXJhdGVseSBzZXQgdGhlIG9wdExldmVsLgorICAgIHJldHVybiBPcHRpb25zOjpkZWZhdWx0QjNP
cHRMZXZlbCgpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKIAogI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsZS5oCShyZXZp
c2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShCM19KSVQpCiAKKyNp
bmNsdWRlICJCM0NvbW1vbi5oIgogI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKIAogbmFtZXNw
YWNlIEpTQyB7CkBAIC00NSw3ICs0Niw3IEBAIGNsYXNzIFByb2NlZHVyZTsKIC8vIFRoZW4geW91
IGtlZXAgdGhlIENvbXBpbGF0aW9uIG9iamVjdCBhbGl2ZSBmb3IgYXMgbG9uZyBhcyB5b3Ugd2Fu
dCB0byBiZSBhYmxlIHRvIHJ1biB0aGUgY29kZS4KIC8vIElmIHRoaXMgQVBJIGZlZWxzIHRvbyBo
aWdoLWxldmVsLCB5b3UgY2FuIHVzZSBCMzo6Z2VuZXJhdGUoKSBkaXJlY3RseS4KIAotSlNfRVhQ
T1JUX1BSSVZBVEUgQ29tcGlsYXRpb24gY29tcGlsZShWTSYsIFByb2NlZHVyZSYsIHVuc2lnbmVk
IG9wdExldmVsID0gMSk7CitKU19FWFBPUlRfUFJJVkFURSBDb21waWxhdGlvbiBjb21waWxlKFZN
JiwgUHJvY2VkdXJlJiwgdW5zaWduZWQgb3B0TGV2ZWwgPSBkZWZhdWx0T3B0TGV2ZWwoKSk7CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNEdXBsaWNhdGVUYWlscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzRHVwbGljYXRlVGFpbHMuY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNEdXBsaWNhdGVUYWlscy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY4LDcgKzY4LDcgQEAgcHVibGljOgogCiAgICAgICAgIG1fcHJvYy5yZXNldFZhbHVlT3duZXJz
KCk7CiAKLSAgICAgICAgSW5kZXhTZXQ8QmFzaWNCbG9jaz4gY2FuZGlkYXRlczsKKyAgICAgICAg
SW5kZXhTZXQ8QmFzaWNCbG9jayo+IGNhbmRpZGF0ZXM7CiAKICAgICAgICAgZm9yIChCYXNpY0Js
b2NrKiBibG9jayA6IG1fcHJvYykgewogICAgICAgICAgICAgaWYgKGJsb2NrLT5zaXplKCkgPiBt
X21heFNpemUpCkBAIC04Miw3ICs4Miw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogCiAgICAgICAg
IC8vIENvbGxlY3QgdGhlIHNldCBvZiB2YWx1ZXMgdGhhdCBtdXN0IGJlIGRlLVNTQSdkLgotICAg
ICAgICBJbmRleFNldDxWYWx1ZT4gdmFsdWVzVG9EZW1vdGU7CisgICAgICAgIEluZGV4U2V0PFZh
bHVlKj4gdmFsdWVzVG9EZW1vdGU7CiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBt
X3Byb2MpIHsKICAgICAgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogKmJsb2NrKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSA9PSBQaGkgJiYgY2FuZGlkYXRlcy5jb250
YWlucyhibG9jaykpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVD
b21tb25TdWJleHByZXNzaW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuY3BwCShyZXZpc2lvbiAyMTQ0
MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVDb21tb25TdWJleHBy
ZXNzaW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4Miw3ICs2ODIsNyBAQCBwcml2YXRlOgog
ICAgIERvbWluYXRvcnMmIG1fZG9taW5hdG9yczsKICAgICBQdXJlQ1NFIG1fcHVyZUNTRTsKICAg
ICAKLSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBJbXB1cmVCbG9ja0RhdGE+IG1faW1wdXJlQmxv
Y2tEYXRhOworICAgIEluZGV4TWFwPEJhc2ljQmxvY2sqLCBJbXB1cmVCbG9ja0RhdGE+IG1faW1w
dXJlQmxvY2tEYXRhOwogCiAgICAgSW1wdXJlQmxvY2tEYXRhIG1fZGF0YTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRml4U1NBLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNGaXhTU0EuY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGaXhTU0EuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3
ICs0OSw3IEBAIG5hbWVzcGFjZSB7CiBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIH0gLy8g
YW5vbnltb3VzIG5hbWVzcGFjZQogCi12b2lkIGRlbW90ZVZhbHVlcyhQcm9jZWR1cmUmIHByb2Ms
IGNvbnN0IEluZGV4U2V0PFZhbHVlPiYgdmFsdWVzKQordm9pZCBkZW1vdGVWYWx1ZXMoUHJvY2Vk
dXJlJiBwcm9jLCBjb25zdCBJbmRleFNldDxWYWx1ZSo+JiB2YWx1ZXMpCiB7CiAgICAgSGFzaE1h
cDxWYWx1ZSosIFZhcmlhYmxlKj4gbWFwOwogICAgIEhhc2hNYXA8VmFsdWUqLCBWYXJpYWJsZSo+
IHBoaU1hcDsKQEAgLTEyMSw3ICsxMjEsNyBAQCBib29sIGZpeFNTQShQcm9jZWR1cmUmIHByb2Mp
CiAgICAgLy8gSnVzdCBmb3Igc2FuaXR5LCByZW1vdmUgYW55IHVudXNlZCB2YXJpYWJsZXMgZmly
c3QuIEl0J3MgdW5saWtlbHkgdGhhdCB0aGlzIGNvZGUgaGFzIGFueQogICAgIC8vIGJ1Z3MgaGF2
aW5nIHRvIGRvIHdpdGggZGVhZCB2YXJpYWJsZXMsIGJ1dCBpdCB3b3VsZCBiZSBzaWxseSB0byBo
YXZlIHRvIGZpeCBzdWNoIGEgYnVnIGlmCiAgICAgLy8gaXQgZGlkIGFyaXNlLgotICAgIEluZGV4
U2V0PFZhcmlhYmxlPiBsaXZlVmFyaWFibGVzOworICAgIEluZGV4U2V0PFZhcmlhYmxlKj4gbGl2
ZVZhcmlhYmxlczsKICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IHByb2MudmFsdWVzKCkpIHsKICAg
ICAgICAgaWYgKFZhcmlhYmxlVmFsdWUqIHZhcmlhYmxlVmFsdWUgPSB2YWx1ZS0+YXM8VmFyaWFi
bGVWYWx1ZT4oKSkKICAgICAgICAgICAgIGxpdmVWYXJpYWJsZXMuYWRkKHZhcmlhYmxlVmFsdWUt
PnZhcmlhYmxlKCkpOwpAQCAtMTQ1LDcgKzE0NSw3IEBAIGJvb2wgZml4U1NBKFByb2NlZHVyZSYg
cHJvYykKIAogICAgIC8vIENyZWF0ZSBhIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlICgiY2FsY1Zh
ciIpIGZvciBldmVyeSB2YXJpYWJsZS4KICAgICBWZWN0b3I8VmFyaWFibGUqPiBjYWxjVmFyVG9W
YXJpYWJsZTsKLSAgICBJbmRleE1hcDxWYXJpYWJsZSwgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUq
PiB2YXJpYWJsZVRvQ2FsY1Zhcihwcm9jLnZhcmlhYmxlcygpLnNpemUoKSk7CisgICAgSW5kZXhN
YXA8VmFyaWFibGUqLCBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSo+IHZhcmlhYmxlVG9DYWxjVmFy
KHByb2MudmFyaWFibGVzKCkuc2l6ZSgpKTsKIAogICAgIGZvciAoVmFyaWFibGUqIHZhcmlhYmxl
IDogcHJvYy52YXJpYWJsZXMoKSkgewogICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSog
Y2FsY1ZhciA9IHNzYS5uZXdWYXJpYWJsZSgpOwpAQCAtMTg1LDcgKzE4NSw3IEBAIGJvb2wgZml4
U1NBKFByb2NlZHVyZSYgcHJvYykKIAogICAgIC8vIE5vdyBwZXJmb3JtIHRoZSBjb252ZXJzaW9u
LgogICAgIEluc2VydGlvblNldCBpbnNlcnRpb25TZXQocHJvYyk7Ci0gICAgSW5kZXhNYXA8VmFy
aWFibGUsIFZhbHVlKj4gbWFwcGluZyhwcm9jLnZhcmlhYmxlcygpLnNpemUoKSk7CisgICAgSW5k
ZXhNYXA8VmFyaWFibGUqLCBWYWx1ZSo+IG1hcHBpbmcocHJvYy52YXJpYWJsZXMoKS5zaXplKCkp
OwogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBwcm9jLmJsb2Nrc0luUHJlT3JkZXIoKSkg
ewogICAgICAgICBtYXBwaW5nLmNsZWFyKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0ZpeFNTQS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0ZpeFNTQS5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNGaXhTU0EuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNyw3ICszNyw3IEBAIGNsYXNzIFByb2NlZHVyZTsK
IAogLy8gVHVybnMgYWxsIG1lbnRpb25zIG9mIHRoZSBnaXZlbiB2YWx1ZXMgaW50byBhY2Nlc3Nl
cyB0byB2YXJpYWJsZXMuIFRoaXMgaXMgbWVhbnQgdG8gYmUgdXNlZAogLy8gZnJvbSBwaGFzZXMg
dGhhdCBkb24ndCBsaWtlIFNTQSBmb3Igd2hhdGV2ZXIgcmVhc29uLgotdm9pZCBkZW1vdGVWYWx1
ZXMoUHJvY2VkdXJlJiwgY29uc3QgSW5kZXhTZXQ8VmFsdWU+Jik7Cit2b2lkIGRlbW90ZVZhbHVl
cyhQcm9jZWR1cmUmLCBjb25zdCBJbmRleFNldDxWYWx1ZSo+Jik7CiAKIC8vIFRoaXMgZml4ZXMg
U1NBIGZvciB5b3UuIFVzZSB0aGlzIGFmdGVyIHlvdSBoYXZlIGRvbmUgZGVtb3RlVmFsdWVzKCkg
YW5kIHlvdSBoYXZlIHBlcmZvcm1lZAogLy8gd2hhdGV2ZXIgZXZpbCB0cmFuc2Zvcm1hdGlvbiB5
b3UgbmVlZGVkLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAko
cmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQgcHJlcGFyZUZvckdlbmVy
YXRpb24oUHJvY2VkdXJlJiBwcm8KICAgICBUaW1pbmdTY29wZSB0aW1pbmdTY29wZSgicHJlcGFy
ZUZvckdlbmVyYXRpb24iKTsKIAogICAgIGdlbmVyYXRlVG9BaXIocHJvY2VkdXJlLCBvcHRMZXZl
bCk7Ci0gICAgQWlyOjpwcmVwYXJlRm9yR2VuZXJhdGlvbihwcm9jZWR1cmUuY29kZSgpKTsKKyAg
ICBBaXI6OnByZXBhcmVGb3JHZW5lcmF0aW9uKHByb2NlZHVyZS5jb2RlKCksIG9wdExldmVsKTsK
IH0KIAogdm9pZCBnZW5lcmF0ZShQcm9jZWR1cmUmIHByb2NlZHVyZSwgQ0NhbGxIZWxwZXJzJiBq
aXQpCkBAIC04MCw3ICs4MCw3IEBAIHZvaWQgZ2VuZXJhdGVUb0FpcihQcm9jZWR1cmUmIHByb2Nl
ZHVyZSwKICAgICBpZiAoc2hvdWxkVmFsaWRhdGVJUigpKQogICAgICAgICB2YWxpZGF0ZShwcm9j
ZWR1cmUpOwogCi0gICAgaWYgKG9wdExldmVsID49IDEpIHsKKyAgICBpZiAob3B0TGV2ZWwgPj0g
MikgewogICAgICAgICByZWR1Y2VEb3VibGVUb0Zsb2F0KHByb2NlZHVyZSk7CiAgICAgICAgIHJl
ZHVjZVN0cmVuZ3RoKHByb2NlZHVyZSk7CiAgICAgICAgIGVsaW1pbmF0ZUNvbW1vblN1YmV4cHJl
c3Npb25zKHByb2NlZHVyZSk7CkBAIC05MSwxMiArOTEsMTUgQEAgdm9pZCBnZW5lcmF0ZVRvQWly
KFByb2NlZHVyZSYgcHJvY2VkdXJlLAogICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IEFkZCBt
b3JlIG9wdGltaXphdGlvbnMgaGVyZS4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1MDUwNworICAgIH0gZWxzZSBpZiAob3B0TGV2ZWwgPj0gMSkg
eworICAgICAgICAvLyBGSVhNRTogRXhwbG9yZSBiZXR0ZXIgInF1aWNrIG1vZGUiIG9wdGltaXph
dGlvbnMuCisgICAgICAgIHJlZHVjZVN0cmVuZ3RoKHByb2NlZHVyZSk7CiAgICAgfQogCiAgICAg
Ly8gVGhpcyBwdXRzIHRoZSBJUiBpbiBxdWlya3MgbW9kZS4KICAgICBsb3dlck1hY3Jvcyhwcm9j
ZWR1cmUpOwogCi0gICAgaWYgKG9wdExldmVsID49IDEpIHsKKyAgICBpZiAob3B0TGV2ZWwgPj0g
MikgewogICAgICAgICByZWR1Y2VTdHJlbmd0aChwcm9jZWR1cmUpOwogCiAgICAgICAgIC8vIEZJ
WE1FOiBBZGQgbW9yZSBvcHRpbWl6YXRpb25zIGhlcmUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNHZW5lcmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0dlbmVyYXRlLmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0dlbmVyYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDggQEAKIAog
I2lmIEVOQUJMRShCM19KSVQpCiAKKyNpbmNsdWRlICJCM0NvbW1vbi5oIgorCiBuYW1lc3BhY2Ug
SlNDIHsKIAogY2xhc3MgQ0NhbGxIZWxwZXJzOwpAQCAtMzgsNyArNDAsNyBAQCBuYW1lc3BhY2Ug
QWlyIHsgY2xhc3MgQ29kZTsgfQogCiAvLyBUaGlzIHRha2VzIGEgQjM6OlByb2NlZHVyZSwgb3B0
aW1pemVzIGl0IGluLXBsYWNlLCBsb3dlcnMgaXQgdG8gQWlyLCBhbmQgcHJlcGFyZXMgdGhlIEFp
ciBmb3IKIC8vIGdlbmVyYXRpb24uCi1KU19FWFBPUlRfUFJJVkFURSB2b2lkIHByZXBhcmVGb3JH
ZW5lcmF0aW9uKFByb2NlZHVyZSYsIHVuc2lnbmVkIG9wdExldmVsID0gMSk7CitKU19FWFBPUlRf
UFJJVkFURSB2b2lkIHByZXBhcmVGb3JHZW5lcmF0aW9uKFByb2NlZHVyZSYsIHVuc2lnbmVkIG9w
dExldmVsID0gZGVmYXVsdE9wdExldmVsKCkpOwogCiAvLyBUaGlzIHRha2VzIGEgQjM6OlByb2Nl
ZHVyZSB0aGF0IGhhcyBiZWVuIHByZXBhcmVkIGZvciBnZW5lcmF0aW9uIChpLmUuIGl0IGhhcyBi
ZWVuIGxvd2VyZWQgdG8gQWlyIGFuZAogLy8gdGhlIEFpciBoYXMgYmVlbiBwcmVwYXJlZCBmb3Ig
Z2VuZXJhdGlvbikgYW5kIGdlbmVyYXRlcyBpdC4gVGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvZiBj
YWxsaW5nCkBAIC00OCw3ICs1MCw3IEBAIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZ2VuZXJhdGUo
UHJvY2VkdXIKIC8vIFRoaXMgdGFrZXMgYSBCMzo6UHJvY2VkdXJlLCBvcHRpbWl6ZXMgaXQgaW4t
cGxhY2UsIGFuZCBsb3dlcnMgaXQgdG8gQWlyLiBZb3UgY2FuIHRoZW4gZ2VuZXJhdGUKIC8vIHRo
ZSBBaXIgdG8gbWFjaGluZSBjb2RlIHVzaW5nIEFpcjo6cHJlcGFyZUZvckdlbmVyYXRpb24oKSBh
bmQgQWlyOjpnZW5lcmF0ZSgpIG9uIHRoZSBQcm9jZWR1cmUncwogLy8gY29kZSgpLgotdm9pZCBn
ZW5lcmF0ZVRvQWlyKFByb2NlZHVyZSYsIHVuc2lnbmVkIG9wdExldmVsID0gMSk7Cit2b2lkIGdl
bmVyYXRlVG9BaXIoUHJvY2VkdXJlJiwgdW5zaWduZWQgb3B0TGV2ZWwgPSBkZWZhdWx0T3B0TGV2
ZWwoKSk7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNIZWFwUmFuZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw0OSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJCM0hlYXBSYW5nZS5oIgotCi0jaWYgRU5BQkxF
KEIzX0pJVCkKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7Ci0KLXZvaWQgSGVhcFJh
bmdlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAgaWYgKCp0aGlzID09IEhl
YXBSYW5nZSgpKSB7Ci0gICAgICAgIG91dC5wcmludCgiQm90dG9tIik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgaWYgKCp0aGlzID09IHRvcCgpKSB7Ci0gICAgICAgIG91dC5wcmludCgi
VG9wIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgb3V0LnByaW50KG1fYmVnaW4sICIu
Li4iLCBtX2VuZCk7Ci19Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwotCi0jZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJh
bmdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJhbmdl
LmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBS
YW5nZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw5MCArMjcsMTUgQEAKIAogI2lmIEVOQUJMRShC
M19KSVQpCiAKLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgotI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorI2luY2x1ZGUgPHd0Zi9SYW5nZS5oPgog
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAogLy8gQWxpYXMgYW5hbHlzaXMgaW4g
QjMgaXMgZG9uZSBieSBjaGVja2luZyBpZiB0d28gaW50ZWdlciByYW5nZXMgb3ZlcmxhcC4gVGhp
cyBpcyBwb3dlcmZ1bCBlbm91Z2gKIC8vIHRvIGJlIHVzZWQgZm9yIFRCQUEtc3R5bGUgYWxpYXMg
YW5hbHlzaXMgdXNlZCBieSB0aGUgREZHLCBGVEwsIGFuZCBMTFZNOiB5b3UganVzdCB0dXJuIGVh
Y2ggbm9kZQogLy8gaW4gdGhlIHRyZWUgb2YgYWJzdHJhY3QgaGVhcHMgaW50byBhIHByZS9wb3N0
IHJhbmdlLgotLy8KLS8vIE5vdGUgdGhhdCB0aGUgJ2JlZ2luJyBpcyBpbmNsdXNpdmUsIHdoaWxl
IHRoZSAnZW5kJyBpcyBleGNsdXNpdmUuIFRoZXNlIHR3byByYW5nZXMgYXJlIG5vbi0KLS8vIG92
ZXJsYXBwaW5nOgotLy8KLS8vICAgICByYW5nZUEgPSAwLi4uOAotLy8gICAgIHJhbmdlQiA9IDgu
Li4xNgotCi1jbGFzcyBIZWFwUmFuZ2UgewotcHVibGljOgotICAgIHR5cGVkZWYgdW5zaWduZWQg
VHlwZTsKLSAgICAKLSAgICBIZWFwUmFuZ2UoKQotICAgICAgICA6IG1fYmVnaW4oMCkKLSAgICAg
ICAgLCBtX2VuZCgwKQotICAgIHsKLSAgICB9Ci0KLSAgICBleHBsaWNpdCBIZWFwUmFuZ2UodW5z
aWduZWQgdmFsdWUpCi0gICAgICAgIDogbV9iZWdpbih2YWx1ZSkKLSAgICAgICAgLCBtX2VuZCh2
YWx1ZSArIDEpCi0gICAgewotICAgICAgICBBU1NFUlQobV9lbmQgPj0gbV9iZWdpbik7Ci0gICAg
fQotCi0gICAgSGVhcFJhbmdlKHVuc2lnbmVkIGJlZ2luLCB1bnNpZ25lZCBlbmQpCi0gICAgICAg
IDogbV9iZWdpbihiZWdpbikKLSAgICAgICAgLCBtX2VuZChlbmQpCi0gICAgewotICAgICAgICBB
U1NFUlQobV9lbmQgPj0gbV9iZWdpbik7Ci0gICAgICAgIGlmIChtX2JlZ2luID09IG1fZW5kKSB7
Ci0gICAgICAgICAgICAvLyBDYW5vbmljYWxpemUgZW1wdHkgcmFuZ2VzLgotICAgICAgICAgICAg
bV9iZWdpbiA9IDA7Ci0gICAgICAgICAgICBtX2VuZCA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBzdGF0aWMgSGVhcFJhbmdlIHRvcCgpCi0gICAgewotICAgICAgICByZXR1cm4gSGVhcFJh
bmdlKDAsIFVJTlRfTUFYKTsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSGVh
cFJhbmdlJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2JlZ2luID09IG90
aGVyLm1fYmVnaW4KLSAgICAgICAgICAgICYmIG1fZW5kID09IG90aGVyLm1fZW5kOwotICAgIH0K
LQotICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBIZWFwUmFuZ2UmIG90aGVyKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwotICAgIH0KLSAgICAKLSAgICBI
ZWFwUmFuZ2Ugb3BlcmF0b3J8KGNvbnN0IEhlYXBSYW5nZSYgb3RoZXIpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gSGVhcFJhbmdlKAotICAgICAgICAgICAgc3RkOjptaW4obV9iZWdpbiwg
b3RoZXIubV9iZWdpbiksCi0gICAgICAgICAgICBzdGQ6Om1heChtX2VuZCwgb3RoZXIubV9lbmQp
KTsKLSAgICB9Ci0gICAgCi0gICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0
dXJuIG1fYmVnaW4gIT0gbV9lbmQ7IH0KLQotICAgIHVuc2lnbmVkIGJlZ2luKCkgY29uc3QgeyBy
ZXR1cm4gbV9iZWdpbjsgfQotICAgIHVuc2lnbmVkIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5k
OyB9Ci0KLSAgICBib29sIG92ZXJsYXBzKGNvbnN0IEhlYXBSYW5nZSYgb3RoZXIpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gV1RGOjpyYW5nZXNPdmVybGFwKG1fYmVnaW4sIG1fZW5kLCBv
dGhlci5tX2JlZ2luLCBvdGhlci5tX2VuZCk7Ci0gICAgfQotCi0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIHVu
c2lnbmVkIG1fYmVnaW47Ci0gICAgdW5zaWduZWQgbV9lbmQ7Ci19OworCit0eXBlZGVmIFJhbmdl
PHVuc2lnbmVkPiBIZWFwUmFuZ2U7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2aXNpb24gMjE0
NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMzNzksMTAgKzMzNzksMTAgQEAgcHJpdmF0ZToKICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAgICAgCi0gICAgSW5kZXhTZXQ8VmFsdWU+
IG1fbG9ja2VkOyAvLyBUaGVzZSBhcmUgdmFsdWVzIHRoYXQgd2lsbCBoYXZlIG5vIFRtcCBpbiBB
aXIuCi0gICAgSW5kZXhNYXA8VmFsdWUsIFRtcD4gbV92YWx1ZVRvVG1wOyAvLyBUaGVzZSBhcmUg
dmFsdWVzIHRoYXQgbXVzdCBoYXZlIGEgVG1wIGluIEFpci4gV2Ugc2F5IHRoYXQgYSBWYWx1ZSog
d2l0aCBhIG5vbi1udWxsIFRtcCBpcyAicGlubmVkIi4KLSAgICBJbmRleE1hcDxWYWx1ZSwgVG1w
PiBtX3BoaVRvVG1wOyAvLyBFYWNoIFBoaSBnZXRzIGl0cyBvd24gVG1wLgotICAgIEluZGV4TWFw
PEIzOjpCYXNpY0Jsb2NrLCBBaXI6OkJhc2ljQmxvY2sqPiBtX2Jsb2NrVG9CbG9jazsKKyAgICBJ
bmRleFNldDxWYWx1ZSo+IG1fbG9ja2VkOyAvLyBUaGVzZSBhcmUgdmFsdWVzIHRoYXQgd2lsbCBo
YXZlIG5vIFRtcCBpbiBBaXIuCisgICAgSW5kZXhNYXA8VmFsdWUqLCBUbXA+IG1fdmFsdWVUb1Rt
cDsgLy8gVGhlc2UgYXJlIHZhbHVlcyB0aGF0IG11c3QgaGF2ZSBhIFRtcCBpbiBBaXIuIFdlIHNh
eSB0aGF0IGEgVmFsdWUqIHdpdGggYSBub24tbnVsbCBUbXAgaXMgInBpbm5lZCIuCisgICAgSW5k
ZXhNYXA8VmFsdWUqLCBUbXA+IG1fcGhpVG9UbXA7IC8vIEVhY2ggUGhpIGdldHMgaXRzIG93biBU
bXAuCisgICAgSW5kZXhNYXA8QjM6OkJhc2ljQmxvY2sqLCBBaXI6OkJhc2ljQmxvY2sqPiBtX2Js
b2NrVG9CbG9jazsKICAgICBIYXNoTWFwPEIzOjpTdGFja1Nsb3QqLCBBaXI6OlN0YWNrU2xvdCo+
IG1fc3RhY2tUb1N0YWNrOwogICAgIEhhc2hNYXA8VmFyaWFibGUqLCBUbXA+IG1fdmFyaWFibGVU
b1RtcDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTW92ZUNvbnN0YW50cy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTW92ZUNvbnN0YW50
cy5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01v
dmVDb25zdGFudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHByaXZhdGU6
CiAgICAgewogICAgICAgICBEb21pbmF0b3JzJiBkb21pbmF0b3JzID0gbV9wcm9jLmRvbWluYXRv
cnMoKTsKICAgICAgICAgSGFzaE1hcDxWYWx1ZUtleSwgVmFsdWUqPiB2YWx1ZUZvckNvbnN0YW50
OwotICAgICAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBWZWN0b3I8VmFsdWUqPj4gbWF0ZXJpYWxp
emF0aW9ucyhtX3Byb2Muc2l6ZSgpKTsKKyAgICAgICAgSW5kZXhNYXA8QmFzaWNCbG9jayosIFZl
Y3RvcjxWYWx1ZSo+PiBtYXRlcmlhbGl6YXRpb25zKG1fcHJvYy5zaXplKCkpOwogCiAgICAgICAg
IC8vIFdlIGRldGVybWluZSB3aGVyZSB0aGluZ3MgZ2V0IG1hdGVyaWFsaXplZCBiYXNlZCBvbiB3
aGVyZSB0aGV5IGFyZSB1c2VkLgogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9w
cm9jKSB7CkBAIC0yNzQsNyArMjc0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgZm9yIChhdXRvJiBl
bnRyeSA6IG1fY29uc3RUYWJsZSkKICAgICAgICAgICAgIG1fZGF0YVNlY3Rpb25bZW50cnkudmFs
dWVdID0gZW50cnkua2V5LnZhbHVlKCk7CiAKLSAgICAgICAgSW5kZXhTZXQ8VmFsdWU+IG9mZkxp
bWl0czsKKyAgICAgICAgSW5kZXhTZXQ8VmFsdWUqPiBvZmZMaW1pdHM7CiAgICAgICAgIGZvciAo
QmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2MpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
dmFsdWVJbmRleCA9IDA7IHZhbHVlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK3ZhbHVlSW5kZXgp
IHsKICAgICAgICAgICAgICAgICBTdGFja21hcFZhbHVlKiB2YWx1ZSA9IGJsb2NrLT5hdCh2YWx1
ZUluZGV4KS0+YXM8U3RhY2ttYXBWYWx1ZT4oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1BoaUNoaWxkcmVuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzUGhpQ2hpbGRyZW4uaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzUGhpQ2hpbGRyZW4uaAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDcgKzE2OCw3
IEBAIHB1YmxpYzoKICAgICBjb25zdCBWZWN0b3I8VmFsdWUqLCA4PiYgcGhpcygpIGNvbnN0IHsg
cmV0dXJuIG1fcGhpczsgfQogCiBwcml2YXRlOgotICAgIEluZGV4TWFwPFZhbHVlLCBWZWN0b3I8
VXBzaWxvblZhbHVlKj4+IG1fdXBzaWxvbnM7CisgICAgSW5kZXhNYXA8VmFsdWUqLCBWZWN0b3I8
VXBzaWxvblZhbHVlKj4+IG1fdXBzaWxvbnM7CiAgICAgVmVjdG9yPFZhbHVlKiwgOD4gbV9waGlz
OwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCShy
ZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBQcm9jZWR1cmU6Omlu
dmFsaWRhdGVDRkcoKQogCiB2b2lkIFByb2NlZHVyZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAogewotICAgIEluZGV4U2V0PFZhbHVlPiB2YWx1ZXNJbkJsb2NrczsKKyAgICBJbmRleFNl
dDxWYWx1ZSo+IHZhbHVlc0luQmxvY2tzOwogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiAq
dGhpcykgewogICAgICAgICBvdXQucHJpbnQoZGVlcER1bXAoKnRoaXMsIGJsb2NrKSk7CiAgICAg
ICAgIHZhbHVlc0luQmxvY2tzLmFkZEFsbCgqYmxvY2spOwpAQCAtMjQ1LDcgKzI0NSw3IEBAIHZv
aWQgUHJvY2VkdXJlOjpkZWxldGVWYWx1ZShWYWx1ZSogdmFsdWUKIAogdm9pZCBQcm9jZWR1cmU6
OmRlbGV0ZU9ycGhhbnMoKQogewotICAgIEluZGV4U2V0PFZhbHVlPiB2YWx1ZXNJbkJsb2NrczsK
KyAgICBJbmRleFNldDxWYWx1ZSo+IHZhbHVlc0luQmxvY2tzOwogICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiAqdGhpcykKICAgICAgICAgdmFsdWVzSW5CbG9ja3MuYWRkQWxsKCpibG9jayk7
CiAKQEAgLTMzMyw3ICszMzMsNyBAQCBWYWx1ZSogUHJvY2VkdXJlOjphZGRWYWx1ZUltcGwoVmFs
dWUqIHZhCiAKIHZvaWQgUHJvY2VkdXJlOjpzZXRCbG9ja09yZGVySW1wbChWZWN0b3I8QmFzaWNC
bG9jayo+JiBibG9ja3MpCiB7Ci0gICAgSW5kZXhTZXQ8QmFzaWNCbG9jaz4gYmxvY2tzU2V0Owor
ICAgIEluZGV4U2V0PEJhc2ljQmxvY2sqPiBibG9ja3NTZXQ7CiAgICAgYmxvY2tzU2V0LmFkZEFs
bChibG9ja3MpOwogCiAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6ICp0aGlzKSB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VEb3VibGVUb0Zsb2F0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VEb3VibGVUb0Zsb2F0
LmNwcAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVk
dWNlRG91YmxlVG9GbG9hdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyNCwxOCArNDI0LDE4IEBA
IHByaXZhdGU6CiAKICAgICAvLyBTZXQgb2YgYWxsIHRoZSBEb3VibGUgdmFsdWVzIHRoYXQgYXJl
IGFjdHVhbGx5IHVzZWQgYXMgRG91YmxlLgogICAgIC8vIENvbnZlcnRpbmcgYW55IG9mIHRoZW0g
dG8gRmxvYXQgd291bGQgbG9zZSBwcmVjaXNpb24uCi0gICAgSW5kZXhTZXQ8VmFsdWU+IG1fdmFs
dWVzVXNlZEFzRG91YmxlOworICAgIEluZGV4U2V0PFZhbHVlKj4gbV92YWx1ZXNVc2VkQXNEb3Vi
bGU7CiAKICAgICAvLyBTZXQgb2YgYWxsIHRoZSBQaGkgb2YgdHlwZSBEb3VibGUgdGhhdCByZWFs
bHkgY29udGFpbnMgYSBEb3VibGUuCiAgICAgLy8gQW55IERvdWJsZSBQaGkgbm90IGluIHRoZSBz
ZXQgY2FuIGJlIGNvbnZlcnRlZCB0byBGbG9hdCB3aXRob3V0IGxvc2luZyBwcmVjaXNpb24uCi0g
ICAgSW5kZXhTZXQ8VmFsdWU+IG1fcGhpc0NvbnRhaW5pbmdEb3VibGU7CisgICAgSW5kZXhTZXQ8
VmFsdWUqPiBtX3BoaXNDb250YWluaW5nRG91YmxlOwogCiAgICAgLy8gQW55IHZhbHVlIHRoYXQg
d2FzIGNvbnZlcnRlZCBmcm9tIHByb2R1Y2luZyBhIERvdWJsZSB0byBwcm9kdWNpbmcgYSBGbG9h
dC4KICAgICAvLyBUaGlzIHNldCBkb2VzIG5vdCBpbmNsdWRlIFBoaS1VcHNpbG9ucy4KLSAgICBJ
bmRleFNldDxWYWx1ZT4gbV9jb252ZXJ0ZWRWYWx1ZTsKKyAgICBJbmRleFNldDxWYWx1ZSo+IG1f
Y29udmVydGVkVmFsdWU7CiAKICAgICAvLyBBbnkgdmFsdWUgdGhhdCBwcmV2aW91c2x5IHByb2R1
Y2VkIERvdWJsZSBhbmQgbm93IHByb2R1Y2UgRmxvYXQuCi0gICAgSW5kZXhTZXQ8VmFsdWU+IG1f
Y29udmVydGVkUGhpczsKKyAgICBJbmRleFNldDxWYWx1ZSo+IG1fY29udmVydGVkUGhpczsKIH07
CiAKIHZvaWQgcHJpbnRHcmFwaElmQ29udmVydGluZyhQcm9jZWR1cmUmIHByb2NlZHVyZSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHJl
dmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVu
Z3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM5Miw3ICsyMzkyLDcgQEAgcHJpdmF0ZToKIAog
ICAgIHZvaWQga2lsbERlYWRDb2RlKCkKICAgICB7Ci0gICAgICAgIEdyYXBoTm9kZVdvcmtsaXN0
PFZhbHVlKiwgSW5kZXhTZXQ8VmFsdWU+PiB3b3JrbGlzdDsKKyAgICAgICAgR3JhcGhOb2RlV29y
a2xpc3Q8VmFsdWUqLCBJbmRleFNldDxWYWx1ZSo+PiB3b3JrbGlzdDsKICAgICAgICAgVmVjdG9y
PFVwc2lsb25WYWx1ZSosIDY0PiB1cHNpbG9uczsKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBi
bG9jayA6IG1fcHJvYykgewogICAgICAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiAqYmxvY2sp
IHsKQEAgLTI0MjksNyArMjQyOSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KIAotICAgICAgICBJbmRleFNldDxWYXJpYWJsZT4gbGl2ZVZhcmlhYmxlczsK
KyAgICAgICAgSW5kZXhTZXQ8VmFyaWFibGUqPiBsaXZlVmFyaWFibGVzOwogICAgICAgICAKICAg
ICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvYykgewogICAgICAgICAgICAgc2l6
ZV90IHNvdXJjZUluZGV4ID0gMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1NT
QUNhbGN1bGF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
U0FDYWxjdWxhdG9yLmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1NTQUNhbGN1bGF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTYsNyArMTU2LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgVmVjdG9yPERlZio+IG1fcGhpczsKICAgICB9OwogICAgIAotICAgIElu
ZGV4TWFwPEJhc2ljQmxvY2ssIEJsb2NrRGF0YT4gbV9kYXRhOworICAgIEluZGV4TWFwPEJhc2lj
QmxvY2sqLCBCbG9ja0RhdGE+IG1fZGF0YTsKIAogICAgIERvbWluYXRvcnMqIG1fZG9taW5hdG9y
cyB7IG51bGxwdHIgfTsKICAgICBQcm9jZWR1cmUmIG1fcHJvYzsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1VzZUNvdW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1VzZUNvdW50cy5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNVc2VDb3VudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ4LDcgKzQ4
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgdW5zaWduZWQgbnVtVXNpbmdJbnN0cnVjdGlvbnMgeyAw
IH07CiAgICAgfTsKICAgICAKLSAgICBJbmRleE1hcDxWYWx1ZSwgQ291bnRzPiBtX2NvdW50czsK
KyAgICBJbmRleE1hcDxWYWx1ZSosIENvdW50cz4gbV9jb3VudHM7CiB9OwogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCShyZXZp
c2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTIwLDcgKzEyMCw3IEBAIFN0YXRpY0xvY2sgY3Jhc2hMb2NrOwogCiBW
TSogdm07CiAKLXN0ZDo6dW5pcXVlX3B0cjxDb21waWxhdGlvbj4gY29tcGlsZShQcm9jZWR1cmUm
IHByb2NlZHVyZSwgdW5zaWduZWQgb3B0TGV2ZWwgPSAxKQorc3RkOjp1bmlxdWVfcHRyPENvbXBp
bGF0aW9uPiBjb21waWxlKFByb2NlZHVyZSYgcHJvY2VkdXJlLCB1bnNpZ25lZCBvcHRMZXZlbCA9
IGRlZmF1bHRPcHRMZXZlbCgpKQogewogICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPENvbXBp
bGF0aW9uPihCMzo6Y29tcGlsZSgqdm0sIHByb2NlZHVyZSwgb3B0TGV2ZWwpKTsKIH0KQEAgLTk5
MCw2ICs5OTAsNyBAQCB2b2lkIHRlc3RNdWxMb2FkVHdpY2UoKQogCiAgICAgdGVzdCgwKTsKICAg
ICB0ZXN0KDEpOworICAgIHRlc3QoMik7CiB9CiAKIHZvaWQgdGVzdE11bEFkZEFyZ3NMZWZ0KCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNC
eUdyYXBoQ29sb3JpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuY3BwCShyZXZpc2lvbiAy
MTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0
ZXJzQnlHcmFwaENvbG9yaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAog
I2lmIEVOQUJMRShCM19KSVQpCiAKICNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWly
Rml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCIKICNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIK
ICNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgiCkBA
IC0xNTg1LDYgKzE1ODYsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIG1fY29hbGVzY2luZ0NhbmRp
ZGF0ZXMuY2xlYXIoKTsKICAgICAgICAgbV93b3JrbGlzdE1vdmVzLmNsZWFyKCk7CiAKKyAgICAg
ICAgLy8gRklYTUU6IEl0IHNlZW1zIGxpa2Ugd2UgZG9uJ3QgbmVlZCB0byByZWNvbXB1dGUgbGl2
ZW5lc3MuIFdlIGp1c3QgbmVlZCB0byB1cGRhdGUgaXRzIGRhdGEKKyAgICAgICAgLy8gc3RydWN0
dXJlcyBzbyB0aGF0IGl0IGtub3dzIHRoYXQgdGhlIG5ld2x5IGludHJvZHVjZWQgdGVtcG9yYXJp
ZXMgYXJlIG5vdCBsaXZlIGF0IGFueSBiYXNpYworICAgICAgICAvLyBibG9jayBib3VuZGFyeS4g
VGhpcyBzaG91bGQgdHJpdmlhbGx5IGJlIHRydWUgZm9yIG5vdy4KICAgICAgICAgVG1wTGl2ZW5l
c3M8YmFuaz4gbGl2ZW5lc3MobV9jb2RlKTsKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9j
ayA6IG1fY29kZSkgewogICAgICAgICAgICAgdHlwZW5hbWUgVG1wTGl2ZW5lc3M8YmFuaz46Okxv
Y2FsQ2FsYyBsb2NhbENhbGMobGl2ZW5lc3MsIGJsb2NrKTsKQEAgLTE3OTgsNyArMTgwMiw3IEBA
IHB1YmxpYzoKICAgICAgICAgbV9udW1JdGVyYXRpb25zID0gMDsKICAgICAgICAgYWxsb2NhdGVP
bkJhbms8RlA+KCk7CiAKLSAgICAgICAgZml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMoKTsKKyAgICAg
ICAgZml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMobV9jb2RlKTsKIAogICAgICAgICBpZiAocmVwb3J0
U3RhdHMpCiAgICAgICAgICAgICBkYXRhTG9nKCJOdW0gaXRlcmF0aW9ucyA9ICIsIG1fbnVtSXRl
cmF0aW9ucywgIlxuIik7CkBAIC0xOTU0LDcgKzE5NTgsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcEZhc3QoWyZdIChUbXAm
IHRtcCkgewotICAgICAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkgfHwgdG1wLmlzR1Ao
KSA9PSAoYmFuayAhPSBHUCkpCisgICAgICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSB8
fCB0bXAuYmFuaygpICE9IGJhbmspCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAK
ICAgICAgICAgICAgICAgICAgICAgVG1wIGFsaWFzVG1wID0gYWxsb2NhdG9yLmdldEFsaWFzKHRt
cCk7CkBAIC0yMTY5LDkgKzIxNzMsMTIgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAgICAg
ICB0bXAgPSBtX2NvZGUubmV3VG1wKGJhbmspOwogICAgICAgICAgICAgICAgICAgICB1bnNwaWxs
YWJsZVRtcHMuYWRkKEFic29sdXRlVG1wTWFwcGVyPGJhbms+OjphYnNvbHV0ZUluZGV4KHRtcCkp
OworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT0g
QXJnOjpTY3JhdGNoKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAg
ICAgICAgICAgICAgIEFyZyBhcmcgPSBBcmc6OnN0YWNrKHN0YWNrU2xvdEVudHJ5LT52YWx1ZSk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzQW55VXNlKHJvbGUpICYmIHJvbGUgIT0g
QXJnOjpTY3JhdGNoKQorICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0FueVVzZShyb2xl
KSkKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoaW5zdEluZGV4
LCBtb3ZlLCBpbnN0Lm9yaWdpbiwgYXJnLCB0bXApOwogICAgICAgICAgICAgICAgICAgICBpZiAo
QXJnOjppc0FueURlZihyb2xlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNl
dC5pbnNlcnQoaW5zdEluZGV4ICsgMSwgbW92ZSwgaW5zdC5vcmlnaW4sIHRtcCwgYXJnKTsKQEAg
LTIxODcsNjYgKzIxOTQsNiBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQogCi0gICAgdm9p
ZCBmaXhTcGlsbHNBZnRlclRlcm1pbmFscygpCi0gICAgewotICAgICAgICAvLyBCZWNhdXNlIHRo
ZXJlIG1heSBiZSB0ZXJtaW5hbHMgdGhhdCBwcm9kdWNlIHZhbHVlcywgSVJDIG1heQotICAgICAg
ICAvLyB3YW50IHRvIHNwaWxsIHRob3NlIHRlcm1pbmFscy4gSXQnbGwgaGFwcGVuIHRvIHNwaWxs
IGl0IGFmdGVyCi0gICAgICAgIC8vIHRoZSB0ZXJtaW5hbC4gSWYgd2UgbGVmdCB0aGUgZ3JhcGgg
aW4gdGhpcyBzdGF0ZSwgaXQnZCBiZSBpbnZhbGlkCi0gICAgICAgIC8vIGJlY2F1c2UgYSB0ZXJt
aW5hbCBtdXN0IGJlIHRoZSBsYXN0IGluc3RydWN0aW9uIGluIGEgYmxvY2suCi0gICAgICAgIC8v
IFdlIGZpeCB0aGF0IGhlcmUuCi0KLSAgICAgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldCht
X2NvZGUpOwotCi0gICAgICAgIGJvb2wgYWRkZWRCbG9ja3MgPSBmYWxzZTsKLQotICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCB0
ZXJtaW5hbEluZGV4ID0gYmxvY2stPnNpemUoKTsKLSAgICAgICAgICAgIGJvb2wgZm91bmRUZXJt
aW5hbCA9IGZhbHNlOwotICAgICAgICAgICAgd2hpbGUgKHRlcm1pbmFsSW5kZXgtLSkgewotICAg
ICAgICAgICAgICAgIGlmIChibG9jay0+YXQodGVybWluYWxJbmRleCkuaXNUZXJtaW5hbCgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGZvdW5kVGVybWluYWwgPSB0cnVlOwotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBBU1NFUlRfVU5VU0VEKGZvdW5kVGVybWluYWwsIGZvdW5kVGVybWluYWwpOwotCi0gICAg
ICAgICAgICBpZiAodGVybWluYWxJbmRleCA9PSBibG9jay0+c2l6ZSgpIC0gMSkKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgLy8gVGhlcmUgbXVzdCBiZSBpbnN0cnVj
dGlvbnMgYWZ0ZXIgdGhlIHRlcm1pbmFsIGJlY2F1c2UgaXQncyBub3QgdGhlIGxhc3QgaW5zdHJ1
Y3Rpb24uCi0gICAgICAgICAgICBBU1NFUlQodGVybWluYWxJbmRleCA8IGJsb2NrLT5zaXplKCkg
LSAxKTsKLSAgICAgICAgICAgIFZlY3RvcjxJbnN0LCAxPiBpbnN0c1RvTW92ZTsKLSAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IHRlcm1pbmFsSW5kZXggKyAxOyBpIDwgYmxvY2stPnNpemUo
KTsgaSsrKQotICAgICAgICAgICAgICAgIGluc3RzVG9Nb3ZlLmFwcGVuZChibG9jay0+YXQoaSkp
OwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5zdHNUb01vdmUuc2l6ZSgpKTsKLQotICAg
ICAgICAgICAgZm9yIChGcmVxdWVudGVkQmxvY2smIGZyZXF1ZW50ZWRTdWNjZXNzb3IgOiBibG9j
ay0+c3VjY2Vzc29ycygpKSB7Ci0gICAgICAgICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29y
ID0gZnJlcXVlbnRlZFN1Y2Nlc3Nvci5ibG9jaygpOwotICAgICAgICAgICAgICAgIC8vIElmIHN1
Y2Nlc3NvcidzIG9ubHkgcHJlZGVjZXNzb3IgaXMgYmxvY2ssIHdlIGNhbiBwbGFudCB0aGUgc3Bp
bGwgaW5zaWRlCi0gICAgICAgICAgICAgICAgLy8gdGhlIHN1Y2Nlc3Nvci4gT3RoZXJ3aXNlLCB3
ZSBtdXN0IHNwbGl0IHRoZSBjcml0aWNhbCBlZGdlIGFuZCBjcmVhdGUKLSAgICAgICAgICAgICAg
ICAvLyBhIG5ldyBibG9jayBmb3IgdGhlIHNwaWxsLgotICAgICAgICAgICAgICAgIGlmIChzdWNj
ZXNzb3ItPm51bVByZWRlY2Vzc29ycygpID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgaW5z
ZXJ0aW9uU2V0Lmluc2VydEluc3RzKDAsIGluc3RzVG9Nb3ZlKTsKLSAgICAgICAgICAgICAgICAg
ICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoc3VjY2Vzc29yKTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICBhZGRlZEJsb2NrcyA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBXZSBwcm9iYWJseSB3YW50IGJldHRlciBibG9jayBvcmRlcmlu
ZyBoZXJlLgotICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBuZXdCbG9jayA9IG1fY29k
ZS5hZGRCbG9jaygpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IEluc3QmIGluc3Qg
OiBpbnN0c1RvTW92ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ld0Jsb2NrLT5hcHBlbmRJ
bnN0KGluc3QpOwotICAgICAgICAgICAgICAgICAgICBuZXdCbG9jay0+YXBwZW5kSW5zdChJbnN0
KEp1bXAsIGluc3RzVG9Nb3ZlLmxhc3QoKS5vcmlnaW4pKTsKLSAgICAgICAgICAgICAgICAgICAg
bmV3QmxvY2stPnN1Y2Nlc3NvcnMoKS5hcHBlbmQoc3VjY2Vzc29yKTsKLSAgICAgICAgICAgICAg
ICAgICAgZnJlcXVlbnRlZFN1Y2Nlc3Nvci5ibG9jaygpID0gbmV3QmxvY2s7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBibG9jay0+cmVzaXplKHRlcm1p
bmFsSW5kZXggKyAxKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhZGRlZEJsb2NrcykKLSAg
ICAgICAgICAgIG1fY29kZS5yZXNldFJlYWNoYWJpbGl0eSgpOwotICAgIH0KLQogICAgIENvZGUm
IG1fY29kZTsKICAgICBUbXBXaWR0aCBtX3RtcFdpZHRoOwogICAgIFVzZUNvdW50czxUbXA+JiBt
X3VzZUNvdW50czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2Nh
dGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdp
c3RlcnNCeUxpbmVhclNjYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTc3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmgiCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQXJnSW5saW5lcy5oIgorI2luY2x1
ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5oIgor
I2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgi
CisjaW5jbHVkZSAiQWlyTGl2ZW5lc3MuaCIKKyNpbmNsdWRlICJBaXJQYWRJbnRlcmZlcmVuY2Uu
aCIKKyNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCisjaW5jbHVkZSAiQWlyUmVnTGl2ZW5lc3Mu
aCIKKyNpbmNsdWRlICJBaXJUbXBJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+
CisjaW5jbHVkZSA8d3RmL1JhbmdlLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eyBuYW1lc3BhY2UgQWlyIHsKKworbmFtZXNwYWNlIHsKKworTk9fUkVUVVJOX0RVRV9UT19DUkFT
SCBORVZFUl9JTkxJTkUgdm9pZCBjcmFzaCgpCit7CisgICAgQ1JBU0goKTsKK30KKworI3VuZGVm
IFJFTEVBU0VfQVNTRVJUCisjZGVmaW5lIFJFTEVBU0VfQVNTRVJUKGFzc2VydGlvbikgZG8geyBc
CisgICAgaWYgKCEoYXNzZXJ0aW9uKSkgeyBcCisgICAgICAgIFdURlJlcG9ydEFzc2VydGlvbkZh
aWx1cmUoX19GSUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAjYXNzZXJ0aW9u
KTsgXAorICAgICAgICBjcmFzaCgpOyBcCisgICAgfSBcCit9IHdoaWxlICgwKQorCitib29sIHZl
cmJvc2UoKSB7IHJldHVybiBPcHRpb25zOjphaXJMaW5lYXJTY2FuVmVyYm9zZSgpOyB9CisKK3R5
cGVkZWYgUmFuZ2U8c2l6ZV90PiBJbnRlcnZhbDsKKworc3RydWN0IFRtcERhdGEgeworICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgb3V0LnByaW50
KCJ7aW50ZXJ2YWwgPSAiLCBpbnRlcnZhbCwgIiwgc3BpbGxlZCA9ICIsIHBvaW50ZXJEdW1wKHNw
aWxsZWQpLCAiLCBhc3NpZ25lZCA9ICIsIGFzc2lnbmVkLCAiLCBpc1Vuc3BpbGxhYmxlID0gIiwg
aXNVbnNwaWxsYWJsZSwgIiwgcG9zc2libGVSZWdzID0gIiwgcG9zc2libGVSZWdzLCAiLCBkaWRC
dWlsZFBvc3NpYmxlUmVncyA9ICIsIGRpZEJ1aWxkUG9zc2libGVSZWdzLCAifSIpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIHZhbGlkYXRlKCkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KCEoc3BpbGxlZCAmJiBhc3NpZ25lZCkpOworICAgIH0KKyAgICAKKyAgICBJbnRlcnZhbCBpbnRl
cnZhbDsKKyAgICBTdGFja1Nsb3QqIHNwaWxsZWQgeyBudWxscHRyIH07CisgICAgUmVnaXN0ZXJT
ZXQgcG9zc2libGVSZWdzOworICAgIFJlZyBhc3NpZ25lZDsKKyAgICBib29sIGlzVW5zcGlsbGFi
bGUgeyBmYWxzZSB9OworICAgIGJvb2wgZGlkQnVpbGRQb3NzaWJsZVJlZ3MgeyBmYWxzZSB9Owor
fTsKKworc3RydWN0IENsb2JiZXIgeworICAgIENsb2JiZXIoKQorICAgIHsKKyAgICB9CisgICAg
CisgICAgQ2xvYmJlcihzaXplX3QgaW5kZXgsIFJlZ2lzdGVyU2V0IHJlZ3MpCisgICAgICAgIDog
aW5kZXgoaW5kZXgpCisgICAgICAgICwgcmVncyhyZWdzKQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBvdXQu
cHJpbnQoaW5kZXgsICI6IiwgcmVncyk7CisgICAgfQorICAgIAorICAgIHNpemVfdCBpbmRleCB7
IDAgfTsKKyAgICBSZWdpc3RlclNldCByZWdzOworfTsKKwordGVtcGxhdGU8QmFuayBiYW5rPgor
Y2xhc3MgTGluZWFyU2NhbiB7CitwdWJsaWM6CisgICAgTGluZWFyU2NhbihDb2RlJiBjb2RlKQor
ICAgICAgICA6IG1fY29kZShjb2RlKQorICAgICAgICAsIG1fc3RhcnRJbmRleChjb2RlLnNpemUo
KSkKKyAgICAgICAgLCBtX21hcChjb2RlLm51bVRtcHMoYmFuaykpCisgICAgICAgICwgbV9pbnNl
cnRpb25TZXRzKGNvZGUuc2l6ZSgpLCBjb2RlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBydW4oKQorICAgIHsKKyAgICAgICAgYnVpbGRSZWdpc3RlclNldCgpOworICAgICAgICBidWls
ZEluZGljZXMoKTsKKyAgICAgICAgYnVpbGRJbnRlcnZhbHMoKTsKKyAgICAgICAgaWYgKHNob3Vs
ZFNwaWxsRXZlcnl0aGluZygpKSB7CisgICAgICAgICAgICBzcGlsbEV2ZXJ5dGhpbmcoKTsKKyAg
ICAgICAgICAgIGVtaXRTcGlsbENvZGUoKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKDs7KSB7
CisgICAgICAgICAgICBwcmVwYXJlSW50ZXJ2YWxzKCk7CisgICAgICAgICAgICBhdHRlbXB0U2Nh
bigpOworICAgICAgICAgICAgaWYgKCFtX2RpZFNwaWxsKQorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgZW1pdFNwaWxsQ29kZSgpOworICAgICAgICB9CisgICAgICAgIGluc2Vy
dFNwaWxsQ29kZSgpOworICAgICAgICBhc3NpZ25SZWdpc3RlcnMoKTsKKyAgICB9CisgICAgCitw
cml2YXRlOgorICAgIHZvaWQgYnVpbGRSZWdpc3RlclNldCgpCisgICAgeworICAgICAgICBtX3Jl
Z2lzdGVycyA9IG1fY29kZS5yZWdzSW5Qcmlvcml0eU9yZGVyKGJhbmspOworICAgICAgICBtX3Jl
Z2lzdGVyU2V0LnNldEFsbChtX3JlZ2lzdGVycyk7CisgICAgfQorCisgICAgdm9pZCBidWlsZElu
ZGljZXMoKQorICAgIHsKKyAgICAgICAgc2l6ZV90IGluZGV4ID0gMDsKKyAgICAgICAgZm9yIChC
YXNpY0Jsb2NrKiBibG9jayA6IG1fY29kZSkgeworICAgICAgICAgICAgbV9zdGFydEluZGV4W2Js
b2NrXSA9IGluZGV4OworICAgICAgICAgICAgaW5kZXggKz0gYmxvY2stPnNpemUoKSArIDE7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgc2l6ZV90IGluZGV4T2ZIZWFkKEJhc2ljQmxvY2sq
IGJsb2NrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc3RhcnRJbmRleFtibG9ja107CisgICAg
fQorICAgIAorICAgIHNpemVfdCBpbmRleE9mVGFpbChCYXNpY0Jsb2NrKiBibG9jaykKKyAgICB7
CisgICAgICAgIHJldHVybiBpbmRleE9mSGVhZChibG9jaykgKyBibG9jay0+c2l6ZSgpOworICAg
IH0KKyAgICAKKyAgICBzaXplX3QgaW5kZXhPZihCYXNpY0Jsb2NrKiBibG9jaywgdW5zaWduZWQg
aW5zdEluZGV4LCBBcmc6OlBoYXNlIHBoYXNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGluZGV4
T2ZIZWFkKGJsb2NrKSArIGluc3RJbmRleCArIHBoYXNlOworICAgIH0KKyAgICAKKyAgICBJbnRl
cnZhbCBpbnRlcnZhbChzaXplX3QgaW5kZXhPZkVhcmx5LCBBcmc6OlRpbWluZyB0aW1pbmcpCisg
ICAgeworICAgICAgICBzd2l0Y2ggKHRpbWluZykgeworICAgICAgICBjYXNlIEFyZzo6T25seUVh
cmx5OgorICAgICAgICAgICAgcmV0dXJuIEludGVydmFsKGluZGV4T2ZFYXJseSk7CisgICAgICAg
IGNhc2UgQXJnOjpPbmx5TGF0ZToKKyAgICAgICAgICAgIHJldHVybiBJbnRlcnZhbChpbmRleE9m
RWFybHkgKyAxKTsKKyAgICAgICAgY2FzZSBBcmc6OkVhcmx5QW5kTGF0ZToKKyAgICAgICAgICAg
IHJldHVybiBJbnRlcnZhbChpbmRleE9mRWFybHksIGluZGV4T2ZFYXJseSArIDIpOworICAgICAg
ICB9CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gSW50ZXJ2
YWwoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBidWlsZEludGVydmFscygpCisgICAgeworICAg
ICAgICBUbXBMaXZlbmVzczxiYW5rPiBsaXZlbmVzcyhtX2NvZGUpOworICAgICAgICAKKyAgICAg
ICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fY29kZSkgeworICAgICAgICAgICAgc2l6ZV90
IGluZGV4T2ZIZWFkID0gdGhpcy0+aW5kZXhPZkhlYWQoYmxvY2spOworICAgICAgICAgICAgc2l6
ZV90IGluZGV4T2ZUYWlsID0gdGhpcy0+aW5kZXhPZlRhaWwoYmxvY2spOworICAgICAgICAgICAg
Zm9yIChUbXAgdG1wIDogbGl2ZW5lc3MubGl2ZUF0SGVhZChibG9jaykpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoIXRtcC5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICBtX21hcFt0bXBdLmlu
dGVydmFsIHw9IEludGVydmFsKGluZGV4T2ZIZWFkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGZvciAoVG1wIHRtcCA6IGxpdmVuZXNzLmxpdmVBdFRhaWwoYmxvY2spKSB7CisgICAgICAg
ICAgICAgICAgaWYgKCF0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9tYXBbdG1w
XS5pbnRlcnZhbCB8PSBJbnRlcnZhbChpbmRleE9mVGFpbCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gMDsgaW5zdElu
ZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbnN0SW5kZXgpIHsKKyAgICAgICAgICAgICAgICBJbnN0
JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7CisgICAgICAgICAgICAgICAgc2l6ZV90IGlu
ZGV4T2ZFYXJseSA9IGluZGV4T2ZIZWFkICsgaW5zdEluZGV4OworICAgICAgICAgICAgICAgIGlu
c3QuZm9yRWFjaFRtcCgKKyAgICAgICAgICAgICAgICAgICAgWyZdIChUbXAmIHRtcCwgQXJnOjpS
b2xlIHJvbGUsIEJhbmsgdG1wQmFuaywgV2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmICh0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wQmFuayAhPSBiYW5rKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fbWFwW3Rt
cF0uaW50ZXJ2YWwgfD0gaW50ZXJ2YWwoaW5kZXhPZkVhcmx5LCBBcmc6OnRpbWluZyhyb2xlKSk7
CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBS
ZWdMaXZlbmVzczo6TG9jYWxDYWxjIGxvY2FsQ2FsYyhsaXZlbmVzcywgYmxvY2spOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBhdXRvIHJlY29yZCA9IFsmXSAodW5zaWduZWQgaW5zdEluZGV4
KSB7CisgICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgcmVncyA9IGxvY2FsQ2FsYy5saXZlKCk7
CisgICAgICAgICAgICAgICAgaWYgKEluc3QqIHByZXYgPSBibG9jay0+Z2V0KGluc3RJbmRleCAt
IDEpKSB7CisgICAgICAgICAgICAgICAgICAgIHByZXYtPmZvckVhY2g8UmVnPigKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFsmXSAoUmVnJiByZWcsIEFyZzo6Um9sZSByb2xlLCBCYW5rLCBXaWR0
aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzTGF0ZURlZihyb2xl
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVncy5hZGQocmVnKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICBpZiAocHJldi0+a2lu
ZC5vcGNvZGUgPT0gUGF0Y2gpCisgICAgICAgICAgICAgICAgICAgICAgICByZWdzLm1lcmdlKHBy
ZXYtPmV4dHJhQ2xvYmJlcmVkUmVncygpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgaWYgKEluc3QqIG5leHQgPSBibG9jay0+Z2V0KGluc3RJbmRleCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgbmV4dC0+Zm9yRWFjaDxSZWc+KAorICAgICAgICAgICAgICAgICAgICAgICAg
WyZdIChSZWcmIHJlZywgQXJnOjpSb2xlIHJvbGUsIEJhbmssIFdpZHRoKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNFYXJseURlZihyb2xlKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVncy5hZGQocmVnKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgICAgICAgICBpZiAobmV4dC0+a2luZC5vcGNvZGUgPT0gUGF0
Y2gpCisgICAgICAgICAgICAgICAgICAgICAgICByZWdzLm1lcmdlKG5leHQtPmV4dHJhRWFybHlD
bG9iYmVyZWRSZWdzKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICByZWdzLmZpbHRlcihtX3JlZ2lzdGVyU2V0KTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBpZiAocmVncy5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX2Nsb2JiZXJz
LmFwcGVuZChDbG9iYmVyKGluZGV4T2ZIZWFkICsgaW5zdEluZGV4LCByZWdzKSk7CisgICAgICAg
ICAgICB9OworICAgICAgICAgICAgCisgICAgICAgICAgICByZWNvcmQoYmxvY2stPnNpemUoKSk7
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGlu
c3RJbmRleC0tOykgeworICAgICAgICAgICAgICAgIGxvY2FsQ2FsYy5leGVjdXRlKGluc3RJbmRl
eCk7CisgICAgICAgICAgICAgICAgcmVjb3JkKGluc3RJbmRleCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0ZDo6c29ydCgKKyAgICAgICAgICAgIG1fY2xv
YmJlcnMuYmVnaW4oKSwgbV9jbG9iYmVycy5lbmQoKSwKKyAgICAgICAgICAgIFtdIChDbG9iYmVy
JiBhLCBDbG9iYmVyJiBiKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYS5pbmRl
eCA8IGIuaW5kZXg7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIGlmICh2ZXJi
b3NlKCkpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIkludGVydmFsczpcbiIpOworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCB0bXBJbmRleCA9IDA7IHRtcEluZGV4IDwgbV9jb2RlLm51bVRtcHMo
YmFuayk7ICsrdG1wSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBUbXAgdG1wID0gVG1wOjp0bXBG
b3JJbmRleChiYW5rLCB0bXBJbmRleCk7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICIs
IHRtcCwgIjogIiwgbV9tYXBbdG1wXSwgIlxuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgYm9vbCBzaG91bGRTcGlsbEV2ZXJ5dGhpbmcoKQorICAgIHsKKyAg
ICAgICAgaWYgKCFPcHRpb25zOjphaXJMaW5lYXJTY2FuU3BpbGxzRXZlcnl0aGluZygpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgLy8gWW91J3JlIG1lYW50
IHRvIGhhY2sgdGhpcyBzbyB0aGF0IHlvdSBzZWxlY3RpdmVseSBzcGlsbCBldmVyeXRoaW5nIGRl
cGVuZGluZyBvbiByZWFzb25zLgorICAgICAgICAvLyBUaGF0J3Mgc3VwZXIgdXNlZnVsIGZvciBk
ZWJ1Z2dpbmcuCisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHZvaWQg
c3BpbGxFdmVyeXRoaW5nKCkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgdG1wSW5kZXgg
PSAwOyB0bXBJbmRleCA8IG1fY29kZS5udW1UbXBzKGJhbmspOyArK3RtcEluZGV4KQorICAgICAg
ICAgICAgc3BpbGwoVG1wOjp0bXBGb3JJbmRleChiYW5rLCB0bXBJbmRleCkpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIHByZXBhcmVJbnRlcnZhbHMoKQorICAgIHsKKyAgICAgICAgbV90bXBzLnJl
c2l6ZSgwKTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgdG1wSW5kZXggPSAwOyB0
bXBJbmRleCA8IG1fY29kZS5udW1UbXBzKGJhbmspOyArK3RtcEluZGV4KSB7CisgICAgICAgICAg
ICBUbXAgdG1wID0gVG1wOjp0bXBGb3JJbmRleChiYW5rLCB0bXBJbmRleCk7CisgICAgICAgICAg
ICBUbXBEYXRhJiBkYXRhID0gbV9tYXBbdG1wXTsKKyAgICAgICAgICAgIGlmIChkYXRhLnNwaWxs
ZWQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGRhdGEuYXNzaWduZWQgPSBSZWcoKTsKKyAgICAgICAgICAgIG1fdG1wcy5hcHBlbmQodG1wKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RkOjpzb3J0KAorICAgICAgICAgICAgbV90
bXBzLmJlZ2luKCksIG1fdG1wcy5lbmQoKSwKKyAgICAgICAgICAgIFsmXSAoVG1wJiBhLCBUbXAm
IGIpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9tYXBbYV0uaW50ZXJ2YWwuYmVnaW4oKSA8
IG1fbWFwW2JdLmludGVydmFsLmJlZ2luKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgCisg
ICAgICAgIGlmICh2ZXJib3NlKCkpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIlRtcHM6ICIsIGxp
c3REdW1wKG1fdG1wcyksICJcbiIpOworICAgICAgICAgICAgZGF0YUxvZygiQ2xvYmJlcnM6ICIs
IGxpc3REdW1wKG1fY2xvYmJlcnMpLCAiXG4iKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICBUbXAgYWRkU3BpbGxUbXBXaXRoSW50ZXJ2YWwoSW50ZXJ2YWwgaW50ZXJ2YWwpCisgICAgewor
ICAgICAgICBUbXBEYXRhIGRhdGE7CisgICAgICAgIGRhdGEuaW50ZXJ2YWwgPSBpbnRlcnZhbDsK
KyAgICAgICAgZGF0YS5pc1Vuc3BpbGxhYmxlID0gdHJ1ZTsKKyAgICAgICAgCisgICAgICAgIFRt
cCB0bXAgPSBtX2NvZGUubmV3VG1wKGJhbmspOworICAgICAgICBtX21hcC5hcHBlbmQodG1wLCBk
YXRhKTsKKyAgICAgICAgcmV0dXJuIHRtcDsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdHRlbXB0
U2NhbigpCisgICAgeworICAgICAgICAvLyBUaGlzIGlzIG1vZGVsZWQgYWZ0ZXIgTGluZWFyU2Nh
blJlZ2lzdGVyQWxsb2NhdGlvbiBpbiBGaWcuIDEgaW4KKyAgICAgICAgLy8gaHR0cDovL2RsLmFj
bS5vcmcvY2l0YXRpb24uY2ZtP2lkPTMzMDI1MC4KKworICAgICAgICBtX2RpZFNwaWxsID0gZmFs
c2U7CisgICAgICAgIG1fYWN0aXZlLmNsZWFyKCk7CisgICAgICAgIG1fYWN0aXZlUmVncyA9IFJl
Z2lzdGVyU2V0KCk7CisgICAgICAgIAorICAgICAgICBzaXplX3QgY2xvYmJlckluZGV4ID0gMDsK
KyAgICAgICAgZm9yIChUbXAmIHRtcCA6IG1fdG1wcykgeworICAgICAgICAgICAgVG1wRGF0YSYg
ZW50cnkgPSBtX21hcFt0bXBdOworICAgICAgICAgICAgc2l6ZV90IGluZGV4ID0gZW50cnkuaW50
ZXJ2YWwuYmVnaW4oKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHZlcmJvc2UoKSkg
eworICAgICAgICAgICAgICAgIGRhdGFMb2coIkluZGV4ICMiLCBpbmRleCwgIjogIiwgdG1wLCAi
XG4iKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICIsIHRtcCwgIjogIiwgZW50cnksICJc
biIpOworICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgY2xvYmJlckluZGV4ID0gIiwgY2xvYmJl
ckluZGV4LCAiXG4iKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgIEFjdGl2ZTpcbiIpOwor
ICAgICAgICAgICAgICAgIGZvciAoVG1wIHRtcCA6IG1fYWN0aXZlKQorICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nKCIgICAgIiwgdG1wLCAiOiAiLCBtX21hcFt0bXBdLCAiXG4iKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVGhpcyBpcyBFeHBpcmVPbGRJ
bnRlcnZhbHMgaW4gRmlnLiAxLgorICAgICAgICAgICAgd2hpbGUgKCFtX2FjdGl2ZS5pc0VtcHR5
KCkpIHsKKyAgICAgICAgICAgICAgICBUbXAgdG1wID0gbV9hY3RpdmUuZmlyc3QoKTsKKyAgICAg
ICAgICAgICAgICBUbXBEYXRhJiBlbnRyeSA9IG1fbWFwW3RtcF07CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgYm9vbCBleHBpcmVkID0gZW50cnkuaW50ZXJ2YWwuZW5kKCkgPD0g
aW5kZXg7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCFleHBpcmVkKQor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBtX2FjdGl2ZS5yZW1vdmVGaXJzdCgpOworICAgICAgICAgICAgICAgIG1fYWN0aXZlUmVn
cy5yZW1vdmUoZW50cnkuYXNzaWduZWQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAv
LyBJZiBuZWNlc3NhcnksIGNvbXB1dGUgdGhlIHNldCBvZiByZWdpc3RlcnMgdGhhdCB0aGlzIHRt
cCBjb3VsZCBldmVuIHVzZS4gVGhpcyBpcyBub3QKKyAgICAgICAgICAgIC8vIHBhcnQgb2YgRmln
LiAxLCBidXQgaXQncyBhIHRlY2huaXF1ZSB0aGF0IHRoZSBhdXRob3JzIGNsYWltIHRvIGhhdmUg
aW1wbGVtZW50ZWQgaW4gb25lIG9mCisgICAgICAgICAgICAvLyB0aGVpciB0d28gaW1wbGVtZW50
YXRpb25zLiBUaGVyZSBtYXkgYmUgb3RoZXIgbW9yZSBlZmZpY2llbnQgd2F5cyB0byBkbyB0aGlz
LCBidXQgdGhpcworICAgICAgICAgICAgLy8gaW1wbGVtZW50YXRpb24gZ2V0cyBzb21lIHBlcmYg
d2lucyBmcm9tIHBpZ2d5LWJhY2tpbmcgdGhpcyBjYWxjdWxhdGlvbiBpbiB0aGUgc2Nhbi4KKyAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBOb3RlIHRoYXQgdGhlIGRpZEJ1aWxkIGZsYWcg
c3RpY2tzIHRocm91Z2ggc3BpbGxpbmcuIFNwaWxsaW5nIGRvZXNuJ3QgY2hhbmdlIHRoZQorICAg
ICAgICAgICAgLy8gaW50ZXJmZXJlbmNlIHNpdHVhdGlvbi4KKyAgICAgICAgICAgIC8vCisgICAg
ICAgICAgICAvLyBOb3RlIHRoYXQgd2UgY291bGQgc2hvcnQtY2lyY3VpdCB0aGlzIGlmIHdlJ3Jl
IGRlYWxpbmcgd2l0aCBhIHNwaWxsYWJsZSB0bXAsIHRoZXJlIGFyZSBubworICAgICAgICAgICAg
Ly8gZnJlZSByZWdpc3RlcnMsIGFuZCB0aGlzIHJlZ2lzdGVyJ3MgaW50ZXJ2YWwgZW5kcyBhZnRl
ciB0aGUgb25lIG9uIHRoZSB0b3Agb2YgdGhlIGFjdGl2ZQorICAgICAgICAgICAgLy8gc3RhY2su
CisgICAgICAgICAgICBpZiAoIWVudHJ5LmRpZEJ1aWxkUG9zc2libGVSZWdzKSB7CisgICAgICAg
ICAgICAgICAgLy8gQWR2YW5jZSB0aGUgY2xvYmJlciBpbmRleCB1bnRpbCBpdCdzIGF0IGEgY2xv
YmJlciB0aGF0IGlzIHJlbGV2YW50IHRvIHVzLgorICAgICAgICAgICAgICAgIHdoaWxlIChjbG9i
YmVySW5kZXggPCBtX2Nsb2JiZXJzLnNpemUoKSAmJiBtX2Nsb2JiZXJzW2Nsb2JiZXJJbmRleF0u
aW5kZXggPCBpbmRleCkKKyAgICAgICAgICAgICAgICAgICAgY2xvYmJlckluZGV4Kys7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgcG9zc2libGVSZWdzID0g
bV9yZWdpc3RlclNldDsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gY2xvYmJlcklu
ZGV4OyBpIDwgbV9jbG9iYmVycy5zaXplKCkgJiYgbV9jbG9iYmVyc1tpXS5pbmRleCA8IGVudHJ5
LmludGVydmFsLmVuZCgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlUmVncy5l
eGNsdWRlKG1fY2xvYmJlcnNbaV0ucmVncyk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgZW50cnkucG9zc2libGVSZWdzID0gcG9zc2libGVSZWdzOworICAgICAgICAgICAgICAg
IGVudHJ5LmRpZEJ1aWxkUG9zc2libGVSZWdzID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgaWYgKHZlcmJvc2UoKSkKKyAgICAgICAgICAgICAgICBkYXRh
TG9nKCIgIFBvc3NpYmxlIHJlZ3M6ICIsIGVudHJ5LnBvc3NpYmxlUmVncywgIlxuIik7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIC8vIEZpbmQgYSBmcmVlIHJlZ2lzdGVyIHRoYXQgd2UgYXJl
IGFsbG93ZWQgdG8gdXNlLgorICAgICAgICAgICAgaWYgKG1fYWN0aXZlLnNpemUoKSAhPSBtX3Jl
Z2lzdGVycy5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICBib29sIGRpZEFzc2lnbiA9IGZhbHNl
OworICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IG1fcmVnaXN0ZXJzKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmICghbV9hY3RpdmVSZWdzLmNvbnRhaW5zKHJlZykgJiYgZW50cnkucG9z
c2libGVSZWdzLmNvbnRhaW5zKHJlZykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzc2ln
bih0bXAsIHJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBkaWRBc3NpZ24gPSB0cnVlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGRpZEFzc2lnbikKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIC8vIFRoaXMgaXMgU3BpbGxBdEludGVydmFsIGluIEZpZy4gMSwgYnV0IG1vZGlmaWVk
IHRvIGhhbmRsZSBjbG9iYmVycy4KKyAgICAgICAgICAgIFRtcCBzcGlsbFRtcCA9IG1fYWN0aXZl
LnRha2VMYXN0KAorICAgICAgICAgICAgICAgIFsmXSAoVG1wIHNwaWxsQ2FuZGlkYXRlKSAtPiBi
b29sIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5LnBvc3NpYmxlUmVncy5jb250
YWlucyhtX21hcFtzcGlsbENhbmRpZGF0ZV0uYXNzaWduZWQpOworICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgaWYgKCFzcGlsbFRtcCkgeworICAgICAgICAgICAgICAgIHNwaWxsKHRt
cCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBUbXBEYXRhJiBzcGlsbEVudHJ5ID0gbV9tYXBbc3BpbGxUbXBdOworICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoc3BpbGxFbnRyeS5hc3NpZ25lZCk7CisgICAgICAgICAgICBpZiAoc3BpbGxF
bnRyeS5pc1Vuc3BpbGxhYmxlIHx8CisgICAgICAgICAgICAgICAgKCFlbnRyeS5pc1Vuc3BpbGxh
YmxlICYmIHNwaWxsRW50cnkuaW50ZXJ2YWwuZW5kKCkgPD0gZW50cnkuaW50ZXJ2YWwuZW5kKCkp
KSB7CisgICAgICAgICAgICAgICAgc3BpbGwodG1wKTsKKyAgICAgICAgICAgICAgICBhZGRUb0Fj
dGl2ZShzcGlsbFRtcCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGFzc2lnbih0bXAsIHNwaWxsRW50cnkuYXNzaWdu
ZWQpOworICAgICAgICAgICAgc3BpbGwoc3BpbGxUbXApOworICAgICAgICB9CisgICAgfQorICAg
IAorICAgIHZvaWQgYWRkVG9BY3RpdmUoVG1wIHRtcCkKKyAgICB7CisgICAgICAgIGlmIChtX21h
cFt0bXBdLmlzVW5zcGlsbGFibGUpIHsKKyAgICAgICAgICAgIG1fYWN0aXZlLnByZXBlbmQodG1w
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9h
Y3RpdmUuYXBwZW5kQW5kQnViYmxlKAorICAgICAgICAgICAgdG1wLAorICAgICAgICAgICAgWyZd
IChUbXAgb3RoZXJUbXApIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIFRtcERhdGEmIG90aGVy
RW50cnkgPSBtX21hcFtvdGhlclRtcF07CisgICAgICAgICAgICAgICAgaWYgKG90aGVyRW50cnku
aXNVbnNwaWxsYWJsZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgICAgIHJldHVybiBtX21hcFtvdGhlclRtcF0uaW50ZXJ2YWwuZW5kKCkgPiBtX21hcFt0
bXBdLmludGVydmFsLmVuZCgpOworICAgICAgICAgICAgfSk7CisgICAgfQorICAgIAorICAgIHZv
aWQgYXNzaWduKFRtcCB0bXAsIFJlZyByZWcpCisgICAgeworICAgICAgICBUbXBEYXRhJiBlbnRy
eSA9IG1fbWFwW3RtcF07CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFlbnRyeS5zcGlsbGVkKTsK
KyAgICAgICAgZW50cnkuYXNzaWduZWQgPSByZWc7CisgICAgICAgIG1fYWN0aXZlUmVncy5hZGQo
cmVnKTsKKyAgICAgICAgYWRkVG9BY3RpdmUodG1wKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBz
cGlsbChUbXAgdG1wKQorICAgIHsKKyAgICAgICAgVG1wRGF0YSYgZW50cnkgPSBtX21hcFt0bXBd
OworICAgICAgICBSRUxFQVNFX0FTU0VSVCghZW50cnkuaXNVbnNwaWxsYWJsZSk7CisgICAgICAg
IGVudHJ5LnNwaWxsZWQgPSBtX2NvZGUuYWRkU3RhY2tTbG90KDgsIFN0YWNrU2xvdEtpbmQ6OlNw
aWxsKTsKKyAgICAgICAgZW50cnkuYXNzaWduZWQgPSBSZWcoKTsKKyAgICAgICAgbV9kaWRTcGls
bCA9IHRydWU7CisgICAgfQorICAgIAorICAgIHZvaWQgZW1pdFNwaWxsQ29kZSgpCisgICAgewor
ICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7CisgICAgICAgICAgICBz
aXplX3QgaW5kZXhPZkhlYWQgPSB0aGlzLT5pbmRleE9mSGVhZChibG9jayk7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IDA7IGluc3RJbmRleCA8IGJsb2NrLT5zaXplKCk7
ICsraW5zdEluZGV4KSB7CisgICAgICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChp
bnN0SW5kZXgpOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4T2ZFYXJseSA9IGluZGV4
T2ZIZWFkICsgaW5zdEluZGV4OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8v
IEZpcnN0IHRyeSB0byBzcGlsbCBkaXJlY3RseS4KKyAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgaW5zdC5hcmdzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAg
ICAgIEFyZyYgYXJnID0gaW5zdC5hcmdzW2ldOworICAgICAgICAgICAgICAgICAgICBpZiAoIWFy
Zy5pc1RtcCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChhcmcuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgICAgICBpZiAoYXJnLmJhbmsoKSAhPSBiYW5rKQorICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xv
dCogc3BpbGxlZCA9IG1fbWFwW2FyZy50bXAoKV0uc3BpbGxlZDsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFzcGlsbGVkKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgICAgIGlmICghaW5zdC5hZG1pdHNTdGFjayhpKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBhcmcgPSBBcmc6OnN0YWNr
KHNwaWxsZWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAvLyBGYWxsIGJhY2sgb24gdGhlIGhhcmQgd2F5LgorICAgICAgICAgICAgICAgIGlu
c3QuZm9yRWFjaFRtcCgKKyAgICAgICAgICAgICAgICAgICAgWyZdIChUbXAmIHRtcCwgQXJnOjpS
b2xlIHJvbGUsIEJhbmsgdG1wQmFuaywgV2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmICh0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wQmFuayAhPSBiYW5rKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xv
dCogc3BpbGxlZCA9IG1fbWFwW3RtcF0uc3BpbGxlZDsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghc3BpbGxlZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgICAgICAgICBPcGNvZGUgbW92ZSA9IGJhbmsgPT0gR1AgPyBNb3ZlIDogTW92
ZURvdWJsZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IGFkZFNwaWxsVG1wV2l0aElu
dGVydmFsKGludGVydmFsKGluZGV4T2ZFYXJseSwgQXJnOjp0aW1pbmcocm9sZSkpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChyb2xlID09IEFyZzo6U2NyYXRjaCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJn
Ojppc0FueVVzZShyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlv
blNldHNbYmxvY2tdLmluc2VydChpbnN0SW5kZXgsIG1vdmUsIGluc3Qub3JpZ2luLCBBcmc6OnN0
YWNrKHNwaWxsZWQpLCB0bXApOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNB
bnlEZWYocm9sZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXRz
W2Jsb2NrXS5pbnNlcnQoaW5zdEluZGV4ICsgMSwgbW92ZSwgaW5zdC5vcmlnaW4sIHRtcCwgQXJn
OjpzdGFjayhzcGlsbGVkKSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgaW5zZXJ0U3BpbGxDb2RlKCkKKyAg
ICB7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpCisgICAgICAgICAg
ICBtX2luc2VydGlvblNldHNbYmxvY2tdLmV4ZWN1dGUoYmxvY2spOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGFzc2lnblJlZ2lzdGVycygpCisgICAgeworICAgICAgICBpZiAodmVyYm9zZSgpKSB7
CisgICAgICAgICAgICBkYXRhTG9nKCJBYm91dCB0byBhbGxvY2F0ZSByZWdpc3RlcnMuIFN0YXRl
IG9mIGFsbCB0bXBzOlxuIik7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHRtcEluZGV4ID0g
MDsgdG1wSW5kZXggPCBtX2NvZGUubnVtVG1wcyhiYW5rKTsgKyt0bXBJbmRleCkgeworICAgICAg
ICAgICAgICAgIFRtcCB0bXAgPSBUbXA6OnRtcEZvckluZGV4KGJhbmssIHRtcEluZGV4KTsKKyAg
ICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgIiwgdG1wLCAiOiAiLCBtX21hcFt0bXBdLCAiXG4i
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRhdGFMb2coIklSOlxuIik7CisgICAgICAg
ICAgICBkYXRhTG9nKG1fY29kZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAo
QmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsKKyAgICAgICAgICAgIGZvciAoSW5zdCYgaW5z
dCA6ICpibG9jaykgeworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKCkpCisgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2coIkF0OiAiLCBpbnN0LCAiXG4iKTsKKyAgICAgICAgICAgICAgICBp
bnN0LmZvckVhY2hUbXBGYXN0KAorICAgICAgICAgICAgICAgICAgICBbJl0gKFRtcCYgdG1wKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcC5i
YW5rKCkgIT0gYmFuaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlZyByZWcgPSBt
X21hcFt0bXBdLmFzc2lnbmVkOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWcpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJGYWlsZWQgdG8gYWxsb2NhdGUg
cmVnIGZvcjogIiwgdG1wLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgdG1wID0gVG1wKHJlZyk7CisgICAgICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIENvZGUmIG1f
Y29kZTsKKyAgICBWZWN0b3I8UmVnPiBtX3JlZ2lzdGVyczsKKyAgICBSZWdpc3RlclNldCBtX3Jl
Z2lzdGVyU2V0OworICAgIEluZGV4TWFwPEJhc2ljQmxvY2sqLCBzaXplX3Q+IG1fc3RhcnRJbmRl
eDsKKyAgICBJbmRleE1hcDxUbXA6OkluZGV4ZWQ8YmFuaz4sIFRtcERhdGE+IG1fbWFwOworICAg
IEluZGV4TWFwPEJhc2ljQmxvY2sqLCBJbnNlcnRpb25TZXQ+IG1faW5zZXJ0aW9uU2V0czsKKyAg
ICBWZWN0b3I8Q2xvYmJlcj4gbV9jbG9iYmVyczsgLy8gQWZ0ZXIgd2UgYWxsb2NhdGUgdGhpcywg
d2UgaGFwcGlseSBwb2ludCBwb2ludGVycyBpbnRvIGl0LgorICAgIFZlY3RvcjxUbXA+IG1fdG1w
czsKKyAgICBEZXF1ZTxUbXA+IG1fYWN0aXZlOworICAgIFJlZ2lzdGVyU2V0IG1fYWN0aXZlUmVn
czsKKyAgICBib29sIG1fZGlkU3BpbGwgeyBmYWxzZSB9OworfTsKKwordGVtcGxhdGU8QmFuayBi
YW5rPgordm9pZCBydW5MaW5lYXJTY2FuKENvZGUmIGNvZGUpCit7CisgICAgaWYgKHZlcmJvc2Uo
KSkKKyAgICAgICAgZGF0YUxvZygiQWlyIGJlZm9yZSBsaW5lYXIgc2NhbiBmb3IgIiwgYmFuaywg
IjpcbiIsIGNvZGUpOworICAgIExpbmVhclNjYW48YmFuaz4gbGluZWFyU2Nhbihjb2RlKTsKKyAg
ICBsaW5lYXJTY2FuLnJ1bigpOworICAgIGlmICh2ZXJib3NlKCkpCisgICAgICAgIGRhdGFMb2co
IkFpciBhZnRlciBsaW5lYXIgc2NhbiBmb3IgIiwgYmFuaywgIjpcbiIsIGNvZGUpOworfQorCit9
IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9pZCBhbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFy
U2NhbihDb2RlJiBjb2RlKQoreworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAiYWxs
b2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4iKTsKKyAgICBwYWRJbnRlcmZlcmVuY2UoY29kZSk7
CisgICAgcnVuTGluZWFyU2NhbjxGUD4oY29kZSk7CisgICAgcnVuTGluZWFyU2NhbjxHUD4oY29k
ZSk7CisgICAgZml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMoY29kZSk7Cit9CisKK30gfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJT
Y2FuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxv
Y2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSAiQ1BVLmgiCisjaW5jbHVkZSAiT3B0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKKy8vIFRoaXMg
aW1wbGVtZW50cyB0aGUgUG9sZXR0byBhbmQgU2Fya2FyIHJlZ2lzdGVyIGFsbG9jYXRvciBjYWxs
ZWQgImxpbmVhciBzY2FuIjoKKy8vIGh0dHA6Ly9kbC5hY20ub3JnL2NpdGF0aW9uLmNmbT9pZD0z
MzAyNTAKKy8vCisvLyBUaGlzIGlzIG5vdCBBaXIncyBwcmltYXJ5IHJlZ2lzdGVyIGFsbG9jYXRv
ci4gV2UgdXNlIGl0IG9ubHkgd2hlbiBydW5uaW5nIGF0IG9wdExldmVsPDIuIFRoYXQncyBub3QK
Ky8vIHRoZSBkZWZhdWx0IGxldmVsLiBUaGlzIHJlZ2lzdGVyIGFsbG9jYXRvciBpcyBvcHRpbWl6
ZWQgcHJpbWFyaWx5IGZvciBydW5uaW5nIHF1aWNrbHkuIEl0J3MgZXhwZWN0ZWQKKy8vIHRoYXQg
aW1wcm92ZW1lbnRzIHRvIHRoaXMgcmVnaXN0ZXIgYWxsb2NhdG9yIHNob3VsZCBmb2N1cyBvbiBp
bXByb3ZpbmcgaXRzIGV4ZWN1dGlvbiB0aW1lIHdpdGhvdXQgbXVjaAorLy8gcmVnYXJkIGZvciB0
aGUgcXVhbGl0eSBvZiBnZW5lcmF0ZWQgY29kZS4gSWYgeW91IHdhbnQgZ29vZCBjb2RlLCB1c2Ug
Z3JhcGggY29sb3JpbmcuCisvLworLy8gRm9yIEFpcidzIHByaW1hcnkgcmVnaXN0ZXIgYWxsb2Nh
dG9yLCBzZWUgQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuaHxjcHAuCit2b2lk
IGFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuKENvZGUmKTsKKworfSB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcAkocmV2
aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0
ZVN0YWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYxLDcgKzE2MSw3IEBAIHZvaWQgYWxsb2Nh
dGVTdGFjayhDb2RlJiBjb2RlKQogCiAgICAgLy8gTm93IHdlIGhhbmRsZSB0aGUgc3BpbGwgc2xv
dHMuCiAgICAgU3RhY2tTbG90TGl2ZW5lc3MgbGl2ZW5lc3MoY29kZSk7Ci0gICAgSW5kZXhNYXA8
U3RhY2tTbG90LCBIYXNoU2V0PFN0YWNrU2xvdCo+PiBpbnRlcmZlcmVuY2UoY29kZS5zdGFja1Ns
b3RzKCkuc2l6ZSgpKTsKKyAgICBJbmRleE1hcDxTdGFja1Nsb3QqLCBIYXNoU2V0PFN0YWNrU2xv
dCo+PiBpbnRlcmZlcmVuY2UoY29kZS5zdGFja1Nsb3RzKCkuc2l6ZSgpKTsKICAgICBWZWN0b3I8
U3RhY2tTbG90Kj4gc2xvdHM7CiAKICAgICAvLyBXZSB3aWxsIHBlcmZvcm0gc29tZSBzcGlsbCBj
b2FsZXNjaW5nLiBUbyBtYWtlIHRoYXQgZWZmZWN0aXZlLCB3ZSBuZWVkIHRvIGJlIGFibGUgdG8g
aWRlbnRpZnkKQEAgLTMwOSw3ICszMDksNyBAQCB2b2lkIGFsbG9jYXRlU3RhY2soQ29kZSYgY29k
ZSkKICAgICAgICAgICAgIHJldHVybiBhLmZyZXF1ZW5jeSA+IGIuZnJlcXVlbmN5OwogICAgICAg
ICB9KTsKICAgICAKLSAgICBJbmRleE1hcDxTdGFja1Nsb3QsIFN0YWNrU2xvdCo+IHJlbWFwcGVk
U3RhY2tTbG90cyhjb2RlLnN0YWNrU2xvdHMoKS5zaXplKCkpOworICAgIEluZGV4TWFwPFN0YWNr
U2xvdCosIFN0YWNrU2xvdCo+IHJlbWFwcGVkU3RhY2tTbG90cyhjb2RlLnN0YWNrU2xvdHMoKS5z
aXplKCkpOwogICAgIGF1dG8gcmVtYXAgPSBbJl0gKFN0YWNrU2xvdCogc2xvdCkgLT4gU3RhY2tT
bG90KiB7CiAgICAgICAgIGlmICghc2xvdCkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkocmV2aXNpb24gMjE0
NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yODIsNiArMjgyLDM3IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYgb3V0LCBBcmcKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCit2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQXJnOjpQaGFzZSBwaGFzZSkKK3sKKyAg
ICBzd2l0Y2ggKHBoYXNlKSB7CisgICAgY2FzZSBBcmc6OkVhcmx5OgorICAgICAgICBvdXQucHJp
bnQoIkVhcmx5Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFyZzo6TGF0ZToKKyAgICAg
ICAgb3V0LnByaW50KCJMYXRlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRT
dHJlYW0mIG91dCwgQXJnOjpUaW1pbmcgdGltaW5nKQoreworICAgIHN3aXRjaCAodGltaW5nKSB7
CisgICAgY2FzZSBBcmc6Ok9ubHlFYXJseToKKyAgICAgICAgb3V0LnByaW50KCJPbmx5RWFybHki
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJnOjpPbmx5TGF0ZToKKyAgICAgICAgb3V0
LnByaW50KCJPbmx5TGF0ZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcmc6OkVhcmx5
QW5kTGF0ZToKKyAgICAgICAgb3V0LnByaW50KCJFYXJseUFuZExhdGUiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKIHZv
aWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBcmc6OlJvbGUgcm9sZSkKIHsKICAg
ICBzd2l0Y2ggKHJvbGUpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
QXJnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcu
aAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJB
cmcuaAkod29ya2luZyBjb3B5KQpAQCAtOTIsNiArOTIsMTcgQEAgcHVibGljOgogICAgICAgICBD
b2xkLAogICAgICAgICBXYXJtCiAgICAgfTsKKyAgICAKKyAgICBlbnVtIFBoYXNlIDogaW50OF90
IHsKKyAgICAgICAgRWFybHksCisgICAgICAgIExhdGUKKyAgICB9OworICAgIAorICAgIGVudW0g
VGltaW5nIDogaW50OF90IHsKKyAgICAgICAgT25seUVhcmx5LAorICAgICAgICBPbmx5TGF0ZSwK
KyAgICAgICAgRWFybHlBbmRMYXRlCisgICAgfTsKIAogICAgIGVudW0gUm9sZSA6IGludDhfdCB7
CiAgICAgICAgIC8vIFVzZSBtZWFucyB0aGF0IHRoZSBJbnN0IHdpbGwgcmVhZCBmcm9tIHRoaXMg
dmFsdWUgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UuCkBAIC0yNTMsNyArMjY0LDgyIEBAIHB1
YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBpc0NvbGRVc2Uocm9sZSkgPyBDb2xkIDogV2Fy
bTsKICAgICB9Ci0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCBhY3RpdmVBdChSb2xlIHJvbGUsIFBo
YXNlIHBoYXNlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChyb2xlKSB7CisgICAgICAgIGNhc2Ug
VXNlOgorICAgICAgICBjYXNlIENvbGRVc2U6CisgICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAg
ICAgIGNhc2UgRWFybHlaRGVmOgorICAgICAgICBjYXNlIFVzZUFkZHI6CisgICAgICAgICAgICBy
ZXR1cm4gcGhhc2UgPT0gRWFybHk7CisgICAgICAgIGNhc2UgTGF0ZVVzZToKKyAgICAgICAgY2Fz
ZSBMYXRlQ29sZFVzZToKKyAgICAgICAgY2FzZSBEZWY6CisgICAgICAgIGNhc2UgWkRlZjoKKyAg
ICAgICAgICAgIHJldHVybiBwaGFzZSA9PSBMYXRlOworICAgICAgICBjYXNlIFVzZURlZjoKKyAg
ICAgICAgY2FzZSBVc2VaRGVmOgorICAgICAgICBjYXNlIFNjcmF0Y2g6CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICB9CisgICAgCisgICAgc3RhdGljIGJvb2wgYWN0aXZlQXQoVGltaW5nIHRpbWluZywgUGhhc2Ug
cGhhc2UpCisgICAgeworICAgICAgICBzd2l0Y2ggKHRpbWluZykgeworICAgICAgICBjYXNlIE9u
bHlFYXJseToKKyAgICAgICAgICAgIHJldHVybiBwaGFzZSA9PSBFYXJseTsKKyAgICAgICAgY2Fz
ZSBPbmx5TGF0ZToKKyAgICAgICAgICAgIHJldHVybiBwaGFzZSA9PSBMYXRlOworICAgICAgICBj
YXNlIEVhcmx5QW5kTGF0ZToKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVGlt
aW5nIHRpbWluZyhSb2xlIHJvbGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHJvbGUpIHsKKyAg
ICAgICAgY2FzZSBVc2U6CisgICAgICAgIGNhc2UgQ29sZFVzZToKKyAgICAgICAgY2FzZSBFYXJs
eURlZjoKKyAgICAgICAgY2FzZSBFYXJseVpEZWY6CisgICAgICAgIGNhc2UgVXNlQWRkcjoKKyAg
ICAgICAgICAgIHJldHVybiBPbmx5RWFybHk7CisgICAgICAgIGNhc2UgTGF0ZVVzZToKKyAgICAg
ICAgY2FzZSBMYXRlQ29sZFVzZToKKyAgICAgICAgY2FzZSBEZWY6CisgICAgICAgIGNhc2UgWkRl
ZjoKKyAgICAgICAgICAgIHJldHVybiBPbmx5TGF0ZTsKKyAgICAgICAgY2FzZSBVc2VEZWY6Cisg
ICAgICAgIGNhc2UgVXNlWkRlZjoKKyAgICAgICAgY2FzZSBTY3JhdGNoOgorICAgICAgICAgICAg
cmV0dXJuIEVhcmx5QW5kTGF0ZTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICBzdGF0
aWMgdm9pZCBmb3JFYWNoUGhhc2UoVGltaW5nIHRpbWluZywgY29uc3QgRnVuYyYgZnVuYykKKyAg
ICB7CisgICAgICAgIGlmIChhY3RpdmVBdCh0aW1pbmcsIEVhcmx5KSkKKyAgICAgICAgICAgIGZ1
bmMoRWFybHkpOworICAgICAgICBpZiAoYWN0aXZlQXQodGltaW5nLCBMYXRlKSkKKyAgICAgICAg
ICAgIGZ1bmMoTGF0ZSk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+
CisgICAgc3RhdGljIHZvaWQgZm9yRWFjaFBoYXNlKFJvbGUgcm9sZSwgY29uc3QgRnVuYyYgZnVu
YykKKyAgICB7CisgICAgICAgIGlmIChhY3RpdmVBdChyb2xlLCBFYXJseSkpCisgICAgICAgICAg
ICBmdW5jKEVhcmx5KTsKKyAgICAgICAgaWYgKGFjdGl2ZUF0KHJvbGUsIExhdGUpKQorICAgICAg
ICAgICAgZnVuYyhMYXRlKTsKKyAgICB9CisgICAgCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRo
ZSBSb2xlIGltcGxpZXMgdGhhdCB0aGUgSW5zdCB3aWxsIFVzZSB0aGUgQXJnIGJlZm9yZSBkb2lu
ZyBhbnl0aGluZyBlbHNlLgogICAgIHN0YXRpYyBib29sIGlzRWFybHlVc2UoUm9sZSByb2xlKQog
ICAgIHsKQEAgLTEzNTQsNiArMTQ0MCw4IEBAIG5hbWVzcGFjZSBXVEYgewogCiBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpBaXI6OkFy
Zzo6S2luZCk7CiBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJl
YW0mLCBKU0M6OkIzOjpBaXI6OkFyZzo6VGVtcGVyYXR1cmUpOworSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6QWlyOjpBcmc6OlBoYXNl
KTsKK0pTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpT
Qzo6QjM6OkFpcjo6QXJnOjpUaW1pbmcpOwogSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6QWlyOjpBcmc6OlJvbGUpOwogSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6QWlyOjpB
cmc6OlNpZ25lZG5lc3MpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckJsb2NrV29ya2xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckJsb2NrV29ya2xpc3QuaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja1dvcmtsaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsNyAr
MzIsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7
CiAKLXR5cGVkZWYgR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2lj
QmxvY2s+PiBCbG9ja1dvcmtsaXN0OwordHlwZWRlZiBHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Js
b2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jayo+PiBCbG9ja1dvcmtsaXN0OwogCiAvLyBXaGVuIHlv
dSBzYXkgQmxvY2tXaXRoPGludD4geW91IHNob3VsZCByZWFkIGl0IGFzICJibG9jayB3aXRoIGFu
IGludCIuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBCbG9ja1dpdGggPSBHcmFwaE5vZGVX
aXRoPEJhc2ljQmxvY2sqLCBUPjsKQEAgLTQxLDExICs0MSwxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB1c2luZyBCbG9ja1dpdGggPSBHCiAvLyBwZXJtaXRzIGZvcmNpYmx5IGVucXVldWVpbmcg
dGhpbmdzIGV2ZW4gaWYgdGhlIGJsb2NrIGhhcyBhbHJlYWR5IGJlZW4gc2Vlbi4gSXQncyB1c2Vm
dWwgZm9yCiAvLyB0aGluZ3MgbGlrZSBidWlsZGluZyBhIHNwYW5uaW5nIHRyZWUsIGluIHdoaWNo
IGNhc2UgVCAodGhlIGF1eGlsaWFyeSBwYXlsb2FkKSB3b3VsZCBiZSB0aGUKIC8vIHN1Y2Nlc3Nv
ciBpbmRleC4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3JrbGlz
dCA9IEV4dGVuZGVkR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0PEJh
c2ljQmxvY2s+PjsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3Jr
bGlzdCA9IEV4dGVuZGVkR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0
PEJhc2ljQmxvY2sqPj47CiAKIHR5cGVkZWYgR3JhcGhOb2RlV2l0aE9yZGVyPEJhc2ljQmxvY2sq
PiBCbG9ja1dpdGhPcmRlcjsKIAotdHlwZWRlZiBQb3N0T3JkZXJHcmFwaE5vZGVXb3JrbGlzdDxC
YXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IFBvc3RPcmRlckJsb2NrV29ya2xpc3Q7
Cit0eXBlZGVmIFBvc3RPcmRlckdyYXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNl
dDxCYXNpY0Jsb2NrKj4+IFBvc3RPcmRlckJsb2NrV29ya2xpc3Q7CiAKIH0gfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzOjpBaXIKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJDRkcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNG
Ry5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckNGRy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw4ICszOSw4IEBAIGNsYXNzIENGRyB7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBCYXNpY0Jsb2Nr
KiBOb2RlOwotICAgIHR5cGVkZWYgSW5kZXhTZXQ8QmFzaWNCbG9jaz4gU2V0OwotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHVzaW5nIE1hcCA9IEluZGV4TWFwPEJhc2ljQmxvY2ssIFQ+OworICAg
IHR5cGVkZWYgSW5kZXhTZXQ8QmFzaWNCbG9jayo+IFNldDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB1c2luZyBNYXAgPSBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgVD47CiAgICAgdHlwZWRlZiBW
ZWN0b3I8QmFzaWNCbG9jayosIDQ+IExpc3Q7CiAKICAgICBDRkcoQ29kZSYgY29kZSkKQEAgLTUx
LDcgKzUxLDcgQEAgcHVibGljOgogICAgIE5vZGUgcm9vdCgpIHsgcmV0dXJuIG1fY29kZVswXTsg
fQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBNYXA8VD4gbmV3TWFwKCkgeyByZXR1
cm4gSW5kZXhNYXA8SlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrLCBUPihtX2NvZGUuc2l6ZSgpKTsg
fQorICAgIE1hcDxUPiBuZXdNYXAoKSB7IHJldHVybiBJbmRleE1hcDxKU0M6OkIzOjpBaXI6OkJh
c2ljQmxvY2sqLCBUPihtX2NvZGUuc2l6ZSgpKTsgfQogCiAgICAgU3VjY2Vzc29yQ29sbGVjdGlv
bjxCYXNpY0Jsb2NrLCBCYXNpY0Jsb2NrOjpTdWNjZXNzb3JMaXN0PiBzdWNjZXNzb3JzKE5vZGUg
bm9kZSkgeyByZXR1cm4gbm9kZS0+c3VjY2Vzc29yQmxvY2tzKCk7IH0KICAgICBCYXNpY0Jsb2Nr
OjpQcmVkZWNlc3Nvckxpc3QmIHByZWRlY2Vzc29ycyhOb2RlIG5vZGUpIHsgcmV0dXJuIG5vZGUt
PnByZWRlY2Vzc29ycygpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckVsaW1pbmF0ZURlYWRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckVsaW1pbmF0ZURlYWRDb2RlLmNwcAkocmV2aXNpb24gMjE0NDI3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbGltaW5hdGVEZWFkQ29kZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgYm9vbCBlbGltaW5hdGVEZWFkQ29kZShDb2Rl
JiBjb2RlKQogICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAiZWxpbWluYXRlRGVhZENv
ZGUiKTsKIAogICAgIEhhc2hTZXQ8VG1wPiBsaXZlVG1wczsKLSAgICBJbmRleFNldDxTdGFja1Ns
b3Q+IGxpdmVTdGFja1Nsb3RzOworICAgIEluZGV4U2V0PFN0YWNrU2xvdCo+IGxpdmVTdGFja1Ns
b3RzOwogICAgIGJvb2wgY2hhbmdlZDsKIAogICAgIGF1dG8gaXNBcmdMaXZlID0gWyZdIChjb25z
dCBBcmcmIGFyZykgLT4gYm9vbCB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckZpeE9idmlvdXNTcGlsbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyRml4T2J2aW91c1NwaWxscy5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4T2J2aW91c1NwaWxscy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU0Nyw3ICs1NDcsNyBAQCBwcml2YXRlOgogICAgIH07CiAKICAgICBD
b2RlJiBtX2NvZGU7Ci0gICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgU3RhdGU+IG1fYXRIZWFkOwor
ICAgIEluZGV4TWFwPEJhc2ljQmxvY2sqLCBTdGF0ZT4gbV9hdEhlYWQ7CiAgICAgU3RhdGUgbV9z
dGF0ZTsKICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrIHsgbnVsbHB0ciB9OwogICAgIHVuc2lnbmVk
IG1faW5zdEluZGV4IHsgMCB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJGaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmNwcAkocmV2aXNp
b24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhQYXJ0aWFs
UmVnaXN0ZXJTdGFsbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsMTAgKzE1NSwxMCBAQCB2
b2lkIGZpeFBhcnRpYWxSZWdpc3RlclN0YWxscyhDb2RlJiBjb2RlCiAKICAgICAvLyBGb3IgZWFj
aCBibG9jaywgdGhpcyBwcm92aWRlcyB0aGUgZGlzdGFuY2UgdG8gdGhlIGxhc3QgaW5zdHJ1Y3Rp
b24gc2V0dGluZyBlYWNoIHJlZ2lzdGVyCiAgICAgLy8gb24gYmxvY2sgKmVudHJ5Ki4KLSAgICBJ
bmRleE1hcDxCYXNpY0Jsb2NrLCBGUERlZkRpc3RhbmNlPiBsYXN0RGVmRGlzdGFuY2UoY29kZS5z
aXplKCkpOworICAgIEluZGV4TWFwPEJhc2ljQmxvY2sqLCBGUERlZkRpc3RhbmNlPiBsYXN0RGVm
RGlzdGFuY2UoY29kZS5zaXplKCkpOwogCiAgICAgLy8gQmxvY2tzIHdpdGggZGlydHkgZGlzdGFu
Y2UgYXQgaGVhZC4KLSAgICBJbmRleFNldDxCYXNpY0Jsb2NrPiBkaXJ0eTsKKyAgICBJbmRleFNl
dDxCYXNpY0Jsb2NrKj4gZGlydHk7CiAKICAgICAvLyBGaXJzdCwgd2UgY29tcHV0ZSB0aGUgbG9j
YWwgZGlzdGFuY2UgZm9yIGVhY2ggYmxvY2sgYW5kIHB1c2ggaXQgdG8gdGhlIHN1Y2Nlc3NvcnMu
CiAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4U3BpbGxzQWZ0ZXJUZXJt
aW5hbHMuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
OTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCIK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJCbG9ja0luc2VydGlvblNldC5o
IgorI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIKKyNp
bmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgorI2luY2x1ZGUgIkFpclRtcElubGluZXMuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIGZp
eFNwaWxsc0FmdGVyVGVybWluYWxzKENvZGUmIGNvZGUpCit7CisgICAgLy8gQmVjYXVzZSB0aGVy
ZSBtYXkgYmUgdGVybWluYWxzIHRoYXQgcHJvZHVjZSB2YWx1ZXMsIElSQyBtYXkKKyAgICAvLyB3
YW50IHRvIHNwaWxsIHRob3NlIHRlcm1pbmFscy4gSXQnbGwgaGFwcGVuIHRvIHNwaWxsIGl0IGFm
dGVyCisgICAgLy8gdGhlIHRlcm1pbmFsLiBJZiB3ZSBsZWZ0IHRoZSBncmFwaCBpbiB0aGlzIHN0
YXRlLCBpdCdkIGJlIGludmFsaWQKKyAgICAvLyBiZWNhdXNlIGEgdGVybWluYWwgbXVzdCBiZSB0
aGUgbGFzdCBpbnN0cnVjdGlvbiBpbiBhIGJsb2NrLgorICAgIC8vIFdlIGZpeCB0aGF0IGhlcmUu
CisKKyAgICBCbG9ja0luc2VydGlvblNldCBibG9ja0luc2VydGlvblNldChjb2RlKTsKKyAgICBJ
bnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KGNvZGUpOworCisgICAgZm9yIChCYXNpY0Jsb2NrKiBi
bG9jayA6IGNvZGUpIHsKKyAgICAgICAgdW5zaWduZWQgdGVybWluYWxJbmRleCA9IGJsb2NrLT5z
aXplKCk7CisgICAgICAgIGJvb2wgZm91bmRUZXJtaW5hbCA9IGZhbHNlOworICAgICAgICB3aGls
ZSAodGVybWluYWxJbmRleC0tKSB7CisgICAgICAgICAgICBpZiAoYmxvY2stPmF0KHRlcm1pbmFs
SW5kZXgpLmlzVGVybWluYWwoKSkgeworICAgICAgICAgICAgICAgIGZvdW5kVGVybWluYWwgPSB0
cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIEFTU0VSVF9VTlVTRUQoZm91bmRUZXJtaW5hbCwgZm91bmRUZXJtaW5hbCk7CisKKyAg
ICAgICAgaWYgKHRlcm1pbmFsSW5kZXggPT0gYmxvY2stPnNpemUoKSAtIDEpCisgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICAvLyBUaGVyZSBtdXN0IGJlIGluc3RydWN0aW9ucyBhZnRl
ciB0aGUgdGVybWluYWwgYmVjYXVzZSBpdCdzIG5vdCB0aGUgbGFzdCBpbnN0cnVjdGlvbi4KKyAg
ICAgICAgQVNTRVJUKHRlcm1pbmFsSW5kZXggPCBibG9jay0+c2l6ZSgpIC0gMSk7CisgICAgICAg
IFZlY3RvcjxJbnN0LCAxPiBpbnN0c1RvTW92ZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
dGVybWluYWxJbmRleCArIDE7IGkgPCBibG9jay0+c2l6ZSgpOyBpKyspCisgICAgICAgICAgICBp
bnN0c1RvTW92ZS5hcHBlbmQoYmxvY2stPmF0KGkpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
aW5zdHNUb01vdmUuc2l6ZSgpKTsKKworICAgICAgICBmb3IgKEZyZXF1ZW50ZWRCbG9jayYgZnJl
cXVlbnRlZFN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgIEJh
c2ljQmxvY2sqIHN1Y2Nlc3NvciA9IGZyZXF1ZW50ZWRTdWNjZXNzb3IuYmxvY2soKTsKKyAgICAg
ICAgICAgIC8vIElmIHN1Y2Nlc3NvcidzIG9ubHkgcHJlZGVjZXNzb3IgaXMgYmxvY2ssIHdlIGNh
biBwbGFudCB0aGUgc3BpbGwgaW5zaWRlCisgICAgICAgICAgICAvLyB0aGUgc3VjY2Vzc29yLiBP
dGhlcndpc2UsIHdlIG11c3Qgc3BsaXQgdGhlIGNyaXRpY2FsIGVkZ2UgYW5kIGNyZWF0ZQorICAg
ICAgICAgICAgLy8gYSBuZXcgYmxvY2sgZm9yIHRoZSBzcGlsbC4KKyAgICAgICAgICAgIGlmIChz
dWNjZXNzb3ItPm51bVByZWRlY2Vzc29ycygpID09IDEpIHsKKyAgICAgICAgICAgICAgICBpbnNl
cnRpb25TZXQuaW5zZXJ0SW5zdHMoMCwgaW5zdHNUb01vdmUpOworICAgICAgICAgICAgICAgIGlu
c2VydGlvblNldC5leGVjdXRlKHN1Y2Nlc3Nvcik7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIEJhc2ljQmxvY2sqIG5ld0Jsb2NrID0gYmxvY2tJbnNlcnRpb25TZXQuaW5z
ZXJ0QmVmb3JlKHN1Y2Nlc3Nvciwgc3VjY2Vzc29yLT5mcmVxdWVuY3koKSk7CisgICAgICAgICAg
ICAgICAgZm9yIChjb25zdCBJbnN0JiBpbnN0IDogaW5zdHNUb01vdmUpCisgICAgICAgICAgICAg
ICAgICAgIG5ld0Jsb2NrLT5hcHBlbmRJbnN0KGluc3QpOworICAgICAgICAgICAgICAgIG5ld0Js
b2NrLT5hcHBlbmRJbnN0KEluc3QoSnVtcCwgaW5zdHNUb01vdmUubGFzdCgpLm9yaWdpbikpOwor
ICAgICAgICAgICAgICAgIG5ld0Jsb2NrLT5zdWNjZXNzb3JzKCkuYXBwZW5kKHN1Y2Nlc3Nvcik7
CisgICAgICAgICAgICAgICAgZnJlcXVlbnRlZFN1Y2Nlc3Nvci5ibG9jaygpID0gbmV3QmxvY2s7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBibG9jay0+cmVzaXplKHRlcm1p
bmFsSW5kZXggKyAxKTsKKyAgICB9CisKKyAgICBpZiAoYmxvY2tJbnNlcnRpb25TZXQuZXhlY3V0
ZSgpKQorICAgICAgICBjb2RlLnJlc2V0UmVhY2hhYmlsaXR5KCk7Cit9CisKK30gfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeFNwaWxs
c0FmdGVyVGVybWluYWxzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKworLy8gQmVjYXVz
ZSB0aGVyZSBtYXkgYmUgdGVybWluYWxzIHRoYXQgcHJvZHVjZSB2YWx1ZXMsIHRoZSByZWdpc3Rl
ciBhbGxvY2F0b3IgbWF5CisvLyB3YW50IHRvIHNwaWxsIHRob3NlIHRlcm1pbmFscy4gSXQnbGwg
aGFwcGVuIHRvIHNwaWxsIGl0IGFmdGVyCisvLyB0aGUgdGVybWluYWwuIElmIHdlIGxlZnQgdGhl
IGdyYXBoIGluIHRoaXMgc3RhdGUsIGl0J2QgYmUgaW52YWxpZAorLy8gYmVjYXVzZSBhIHRlcm1p
bmFsIG11c3QgYmUgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24gaW4gYSBibG9jay4KKy8vIFdlIGZpeCB0
aGF0IGhlcmUuCit2b2lkIGZpeFNwaWxsc0FmdGVyVGVybWluYWxzKENvZGUmKTsKKworfSB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAJKHJl
dmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJh
dGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKEIzX0pJ
VCkKIAogI2luY2x1ZGUgIkFpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmgiCisj
aW5jbHVkZSAiQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaCIKICNpbmNsdWRlICJB
aXJBbGxvY2F0ZVN0YWNrLmgiCiAjaW5jbHVkZSAiQWlyQ29kZS5oIgogI2luY2x1ZGUgIkFpckVs
aW1pbmF0ZURlYWRDb2RlLmgiCkBAIC01Nyw3ICs1OCw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKIAotdm9pZCBwcmVwYXJlRm9yR2VuZXJhdGlv
bihDb2RlJiBjb2RlKQordm9pZCBwcmVwYXJlRm9yR2VuZXJhdGlvbihDb2RlJiBjb2RlLCB1bnNp
Z25lZCBvcHRMZXZlbCkKIHsKICAgICBUaW1pbmdTY29wZSB0aW1pbmdTY29wZSgiQWlyOjpwcmVw
YXJlRm9yR2VuZXJhdGlvbiIpOwogICAgIApAQCAtODksMTggKzkwLDIyIEBAIHZvaWQgcHJlcGFy
ZUZvckdlbmVyYXRpb24oQ29kZSYgY29kZSkKICAgICAvLyBGb3IgZGVidWdnaW5nLCB5b3UgY2Fu
IHVzZSBzcGlsbEV2ZXJ5dGhpbmcoKSB0byBwdXQgZXZlcnl0aGluZyB0byB0aGUgc3RhY2sgYmV0
d2VlbiBlYWNoIEluc3QuCiAgICAgaWYgKE9wdGlvbnM6OmFpclNwaWxsc0V2ZXJ5dGhpbmcoKSkK
ICAgICAgICAgc3BpbGxFdmVyeXRoaW5nKGNvZGUpOwotICAgIGVsc2UKKyAgICBlbHNlIGlmIChv
cHRMZXZlbCA+PSAyICYmIGZhbHNlKSAvLyBPT1BTISEgVGhpcyB3YXMganVzdCBmb3IgdGVzdGlu
Zy4KICAgICAgICAgYWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcoY29kZSk7CisgICAg
ZWxzZQorICAgICAgICBhbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbihjb2RlKTsKIAogICAg
IGlmIChPcHRpb25zOjpsb2dBaXJSZWdpc3RlclByZXNzdXJlKCkpIHsKICAgICAgICAgZGF0YUxv
ZygiUmVnaXN0ZXIgcHJlc3N1cmUgYWZ0ZXIgcmVnaXN0ZXIgYWxsb2NhdGlvbjpcbiIpOwogICAg
ICAgICBsb2dSZWdpc3RlclByZXNzdXJlKGNvZGUpOwogICAgIH0KLQotICAgIC8vIFRoaXMgcmVw
bGFjZXMgdXNlcyBvZiBzcGlsbCBzbG90cyB3aXRoIHJlZ2lzdGVycyBvciBjb25zdGFudHMgaWYg
cG9zc2libGUuIEl0IGRvZXMgdGhpcyBieQotICAgIC8vIG1pbmltaXppbmcgdGhlIGFtb3VudCB0
aGF0IHdlIHBlcnR1cmIgdGhlIGFscmVhZHktY2hvc2VuIHJlZ2lzdGVyIGFsbG9jYXRpb24uIEl0
IG1heSBleHRlbmQKLSAgICAvLyB0aGUgbGl2ZSByYW5nZXMgb2YgcmVnaXN0ZXJzIHRob3VnaC4K
LSAgICBmaXhPYnZpb3VzU3BpbGxzKGNvZGUpOworICAgIAorICAgIGlmIChvcHRMZXZlbCA+PSAy
KSB7CisgICAgICAgIC8vIFRoaXMgcmVwbGFjZXMgdXNlcyBvZiBzcGlsbCBzbG90cyB3aXRoIHJl
Z2lzdGVycyBvciBjb25zdGFudHMgaWYgcG9zc2libGUuIEl0IGRvZXMgdGhpcyBieQorICAgICAg
ICAvLyBtaW5pbWl6aW5nIHRoZSBhbW91bnQgdGhhdCB3ZSBwZXJ0dXJiIHRoZSBhbHJlYWR5LWNo
b3NlbiByZWdpc3RlciBhbGxvY2F0aW9uLiBJdCBtYXkgZXh0ZW5kCisgICAgICAgIC8vIHRoZSBs
aXZlIHJhbmdlcyBvZiByZWdpc3RlcnMgdGhvdWdoLgorICAgICAgICBmaXhPYnZpb3VzU3BpbGxz
KGNvZGUpOworICAgIH0KIAogICAgIGxvd2VyQWZ0ZXJSZWdBbGxvYyhjb2RlKTsKIApAQCAtMTY1
LDcgKzE3MCw3IEBAIHZvaWQgZ2VuZXJhdGUoQ29kZSYgY29kZSwgQ0NhbGxIZWxwZXJzJiAKICAg
ICAgICAgaWYgKGJsb2NrKQogICAgICAgICAgICAgY29udGV4dC5ibG9ja0xhYmVsc1tibG9ja10g
PSBCb3g8Q0NhbGxIZWxwZXJzOjpMYWJlbD46OmNyZWF0ZSgpOwogICAgIH0KLSAgICBJbmRleE1h
cDxCYXNpY0Jsb2NrLCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0PiBibG9ja0p1bXBzKGNvZGUuc2l6
ZSgpKTsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdD4g
YmxvY2tKdW1wcyhjb2RlLnNpemUoKSk7CiAKICAgICBhdXRvIGxpbmsgPSBbJl0gKENDYWxsSGVs
cGVyczo6SnVtcCBqdW1wLCBCYXNpY0Jsb2NrKiB0YXJnZXQpIHsKICAgICAgICAgaWYgKGNvbnRl
eHQuYmxvY2tMYWJlbHNbdGFyZ2V0XS0+aXNTZXQoKSkgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjcsNiArMjcsOCBAQAogCiAjaWYgRU5BQkxFKEIzX0pJVCkKIAorI2luY2x1ZGUgIkIzQ29tbW9u
LmgiCisKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDQ2FsbEhlbHBlcnM7CkBAIC0zNyw3ICsz
OSw3IEBAIGNsYXNzIENvZGU7CiAKIC8vIFRoaXMgdGFrZXMgYW4gQWlyOjpDb2RlIHRoYXQgaGFz
bid0IGhhZCBhbnkgc3RhY2sgYWxsb2NhdGlvbiBhbmQgb3B0aW9uYWxseSBoYXNuJ3QgaGFkIGFu
eQogLy8gcmVnaXN0ZXIgYWxsb2NhdGlvbiBhbmQgZG9lcyBib3RoIG9mIHRob3NlIHRoaW5ncy4K
LUpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJlcGFyZUZvckdlbmVyYXRpb24oQ29kZSYpOworSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBwcmVwYXJlRm9yR2VuZXJhdGlvbihDb2RlJiwgdW5zaWduZWQg
b3B0TGV2ZWwgPSBkZWZhdWx0T3B0TGV2ZWwoKSk7CiAKIC8vIFRoaXMgZ2VuZXJhdGVzIHRoZSBj
b2RlIHVzaW5nIHRoZSBnaXZlbiBDQ2FsbEhlbHBlcnMgaW5zdGFuY2UuIE5vdGUgdGhhdCB0aGlz
IG1heSBjYWxsIGNhbGxiYWNrcwogLy8gaW4gdGhlIHN1cHBsaWVkIGNvZGUgYXMgaXQgaXMgZ2Vu
ZXJhdGluZy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGlv
bkNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckdlbmVyYXRpb25Db250ZXh0LmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGlvbkNvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAt
NDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBTaGFyZWRUYXNrPExhdGVQYXRoRnVu
Y3Rpb24+IExhdGVQYXRoOwogCiAgICAgVmVjdG9yPFJlZlB0cjxMYXRlUGF0aD4+IGxhdGVQYXRo
czsKLSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBCb3g8Q0NhbGxIZWxwZXJzOjpMYWJlbD4+IGJs
b2NrTGFiZWxzOworICAgIEluZGV4TWFwPEJhc2ljQmxvY2sqLCBCb3g8Q0NhbGxIZWxwZXJzOjpM
YWJlbD4+IGJsb2NrTGFiZWxzOwogICAgIEJhc2ljQmxvY2sqIGN1cnJlbnRCbG9jayB7IG51bGxw
dHIgfTsKICAgICB1bnNpZ25lZCBpbmRleEluQmxvY2sgeyBVSU5UX01BWCB9OwogICAgIENvZGUq
IGNvZGUgeyBudWxscHRyIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDExIEBAIHZvaWQgbG93ZXJBZnRlclJlZ0FsbG9j
KENvZGUmIGNvZGUpCiAKICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgZGF0YUxvZygiQ29kZSBi
ZWZvcmUgbG93ZXJBZnRlclJlZ0FsbG9jOlxuIiwgY29kZSk7CisgICAgCisgICAgLy8gRklYTUU6
CisgICAgLy8gMSkgVGhpcyBzaG91bGQgYmFpbCBlYXJseSBpZiB0aGVyZSBhcmUgbm8gU2h1ZmZs
ZXMgb3IgQ29sZENDYWxscy4gKE9PUFMhISBuZWVkIGJ1ZyB1cmwpCisgICAgLy8gMikgV2Ugc2hv
dWxkIG5vdCBpbnRyb2R1Y2UgU2h1ZmZsZXMgZm9yIG5vcm1hbCBjYWxscy4gKE9PUFMhISBuZWVk
IGJ1ZyB1cmwpCisgICAgLy8gMykgV2Ugc2hvdWxkIGVtaXQgQ29sZENDYWxsIG9ubHkgYXQgb3B0
TGV2ZWw9PTEuIChPT1BTISEgbmVlZCBidWcgdXJsKQogCiAgICAgSGFzaE1hcDxJbnN0KiwgUmVn
aXN0ZXJTZXQ+IHVzZWRSZWdpc3RlcnM7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyTG93ZXJFbnRyeVN3aXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlckVudHJ5U3dpdGNoLmNwcAkocmV2aXNpb24gMjE0NDI3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlckVudHJ5U3dpdGNoLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODIsNyArODIsNyBAQCB2b2lkIGxvd2VyRW50cnlTd2l0Y2go
Q29kZSYgY29kZSkKICAgICAvLyBOb3cgZHVwbGljYXRlIHRoZW0uCiAgICAgVmVjdG9yPEZyZXF1
ZW50ZWRCbG9jaz4gZW50cnlwb2ludHM7CiAgICAgZW50cnlwb2ludHMuYXBwZW5kKEZyZXF1ZW50
ZWRCbG9jayhjb2RlWzBdLCBlbnRyeXBvaW50RnJlcXVlbmNpZXNbMF0pKTsKLSAgICBJbmRleE1h
cDxCYXNpY0Jsb2NrLCBCYXNpY0Jsb2NrKj4gbWFwKGNvZGUuc2l6ZSgpKTsKKyAgICBJbmRleE1h
cDxCYXNpY0Jsb2NrKiwgQmFzaWNCbG9jayo+IG1hcChjb2RlLnNpemUoKSk7CiAgICAgZm9yICh1
bnNpZ25lZCBlbnRyeXBvaW50SW5kZXggPSAxOyBlbnRyeXBvaW50SW5kZXggPCBjb2RlLnByb2Mo
KS5udW1FbnRyeXBvaW50cygpOyArK2VudHJ5cG9pbnRJbmRleCkgewogICAgICAgICBtYXAuY2xl
YXIoKTsKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IHdvcmtsaXN0LnNlZW4oKS52
YWx1ZXMoY29kZSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29k
ZS5vcGNvZGVzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
T3Bjb2RlLm9wY29kZXMJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHdvcmtpbmcgY29weSkKQEAgLTY0OSw3ICs2NDks
NyBAQCBNb3ZlMzIgVTpHOjMyLCBaRDpHOjMyCiBNb3ZlMzIgVTpHOjMyLCBaRDpHOjMyLCBTOkc6
MzIKICAgICBBZGRyLCBBZGRyLCBUbXAKIAotU3RvcmVaZXJvMzIgVTpHOjMyCitTdG9yZVplcm8z
MiBEOkc6MzIKICAgICBBZGRyCiAgICAgSW5kZXgKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJSZWdMaXZlbmVzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyUmVnTGl2ZW5lc3MuaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdMaXZlbmVzcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiQWlyQmFzaWNCbG9jay5oIgogI2luY2x1ZGUg
IkFpckNvZGUuaCIKICNpbmNsdWRlICJBaXJJbnN0LmgiCisjaW5jbHVkZSAiQWlyTGl2ZW5lc3Mu
aCIKICNpbmNsdWRlICJSZWdpc3RlclNldC5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsgbmFtZXNwYWNlIEFpciB7CkBAIC01NCw2ICs1NSwxOSBAQCBwdWJsaWM6CiAgICAgICAg
IHsKICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgLy8gSWYgeW91IGNvbXB1dGVkIFRtcCBs
aXZlbmVzcyBmb3Igc29tZSBiYW5rLCB5b3UgY2FuIHVzZSByZWcgbGl2ZW5lc3MgdG8gZmlsbCBp
biB0aGUgYmxhbmtzLgorICAgICAgICAvLyBOb3RlIHRoYXQgd2hhdCBoYXBwZW5zIHRvIHRoZSBy
ZWdpc3RlcnMgbm90IGJlbG9uZ2luZyB0byB0aGUgYmFuayBpcyBhcmJpdHJhcnkgLSB0aGV5IG1h
eSBnZXQKKyAgICAgICAgLy8gc2V0IG9yIG5vdC4KKyAgICAgICAgdGVtcGxhdGU8QmFuayBiYW5r
PgorICAgICAgICBMb2NhbENhbGMoVG1wTGl2ZW5lc3M8YmFuaz4mIGxpdmVuZXNzLCBCYXNpY0Js
b2NrKiBibG9jaykKKyAgICAgICAgICAgIDogbV9ibG9jayhibG9jaykKKyAgICAgICAgeworICAg
ICAgICAgICAgZm9yIChUbXAgdG1wIDogbGl2ZW5lc3MubGl2ZUF0VGFpbChibG9jaykpIHsKKyAg
ICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgIG1fd29y
a3NldC5zZXQodG1wLnJlZygpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAK
ICAgICAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGxpdmUoKSBjb25zdAogICAgICAgICB7CiAgICAg
ICAgICAgICByZXR1cm4gbV93b3Jrc2V0OwpAQCAtODQsOCArOTgsOCBAQCBwdWJsaWM6CiAgICAg
fQogICAgIAogcHJpdmF0ZToKLSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBSZWdpc3RlclNldD4g
bV9saXZlQXRIZWFkOwotICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIFJlZ2lzdGVyU2V0PiBtX2xp
dmVBdFRhaWw7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jayosIFJlZ2lzdGVyU2V0PiBtX2xpdmVB
dEhlYWQ7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jayosIFJlZ2lzdGVyU2V0PiBtX2xpdmVBdFRh
aWw7CiB9OwogCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCShy
ZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxs
RXZlcnl0aGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1
ZGUgIkFpckFyZ0lubGluZXMuaCIKICNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWly
Rml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCIKICNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIK
ICNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgiCkBA
IC00Niw3ICs0Nyw3IEBAIHZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUmIGNvZGUpCiAgICAgcGFk
SW50ZXJmZXJlbmNlKGNvZGUpOwogCiAgICAgLy8gV2Ugd2FudCB0byBrbm93IHRoZSBzZXQgb2Yg
cmVnaXN0ZXJzIHVzZWQgYXQgZXZlcnkgcG9pbnQgaW4gZXZlcnkgYmFzaWMgYmxvY2suCi0gICAg
SW5kZXhNYXA8QmFzaWNCbG9jaywgVmVjdG9yPFJlZ2lzdGVyU2V0Pj4gdXNlZFJlZ2lzdGVycyhj
b2RlLnNpemUoKSk7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jayosIFZlY3RvcjxSZWdpc3RlclNl
dD4+IHVzZWRSZWdpc3RlcnMoY29kZS5zaXplKCkpOwogICAgIEdQTGl2ZW5lc3MgZ3BMaXZlbmVz
cyhjb2RlKTsKICAgICBGUExpdmVuZXNzIGZwTGl2ZW5lc3MoY29kZSk7CiAgICAgZm9yIChCYXNp
Y0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKQEAgLTE3MywxMCArMTc0LDEzIEBAIHZvaWQgc3BpbGxF
dmVyeXRoaW5nKENvZGUmIGNvZGUpCiAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGNob3NlblJlZyk7CiAKICAgICAgICAgICAgICAgICAgICAgdG1wID0gVG1wKGNob3NlblJlZyk7
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAocm9sZSA9PSBB
cmc6OlNjcmF0Y2gpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAg
ICAgICAgICAgICAgT3Bjb2RlIG1vdmUgPSBiYW5rID09IEdQID8gTW92ZSA6IE1vdmVEb3VibGU7
CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlVc2Uocm9sZSkgJiYgcm9sZSAh
PSBBcmc6OlNjcmF0Y2gpCisgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzQW55VXNlKHJv
bGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydChpbnN0SW5k
ZXgsIG1vdmUsIGluc3Qub3JpZ2luLCBhcmcsIHRtcCk7CiAgICAgICAgICAgICAgICAgICAgIGlm
IChBcmc6OmlzQW55RGVmKHJvbGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9u
U2V0Lmluc2VydChpbnN0SW5kZXggKyAxLCBtb3ZlLCBpbnN0Lm9yaWdpbiwgdG1wLCBhcmcpOwpA
QCAtMTg0LDYgKzE4OCw4IEBAIHZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUmIGNvZGUpCiAgICAg
ICAgIH0KICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOwogICAgIH0KKyAgICAK
KyAgICBmaXhTcGlsbHNBZnRlclRlcm1pbmFscyhjb2RlKTsKIH0KIAogfSB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjM6OkFpcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJU
bXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1w
LmNwcAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJUbXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDggKzI4LDE1IEBACiAKICNpZiBFTkFCTEUoQjNf
SklUKQogCisjaW5jbHVkZSAiQWlyVG1wSW5saW5lcy5oIgorCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CiAKK3RlbXBsYXRlPD4gY29uc3QgY2hhciogY29u
c3QgVG1wOjpJbmRleGVkPEdQPjo6ZHVtcFByZWZpeCA9ICIldG1wIjsKK3RlbXBsYXRlPD4gY29u
c3QgY2hhciogY29uc3QgVG1wOjpJbmRleGVkPEZQPjo6ZHVtcFByZWZpeCA9ICIlZnRtcCI7Cit0
ZW1wbGF0ZTw+IGNvbnN0IGNoYXIqIGNvbnN0IFRtcDo6QWJzb2x1dGVseUluZGV4ZWQ8R1A+Ojpk
dW1wUHJlZml4ID0gIiVhYnMiOwordGVtcGxhdGU8PiBjb25zdCBjaGFyKiBjb25zdCBUbXA6OkFi
c29sdXRlbHlJbmRleGVkPEZQPjo6ZHVtcFByZWZpeCA9ICIlZmFicyI7CisKIHZvaWQgVG1wOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgaWYgKCEqdGhpcykgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc0LDYg
Kzc0LDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSBlbmNvZGVGUFRtcChp
bmRleCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQorICAgIAorICAgIHN0YXRpYyBU
bXAgdG1wRm9ySW5kZXgoQmFuayBiYW5rLCB1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAg
IGlmIChiYW5rID09IEdQKQorICAgICAgICAgICAgcmV0dXJuIGdwVG1wRm9ySW5kZXgoaW5kZXgp
OworICAgICAgICBBU1NFUlQoYmFuayA9PSBGUCk7CisgICAgICAgIHJldHVybiBmcFRtcEZvcklu
ZGV4KGluZGV4KTsKKyAgICB9CiAKICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3Qg
eyByZXR1cm4gISFtX3ZhbHVlOyB9CiAgICAgCkBAIC0xNTQsNyArMTYyLDE2IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIHJldHVybiBncFRtcEluZGV4KCk7CiAgICAgICAgIHJldHVybiBmcFRtcElu
ZGV4KCk7CiAgICAgfQotCisgICAgCisgICAgdGVtcGxhdGU8QmFuayBiYW5rPiBjbGFzcyBJbmRl
eGVkOworICAgIHRlbXBsYXRlPEJhbmsgYmFuaz4gY2xhc3MgQWJzb2x1dGVseUluZGV4ZWQ7Cisg
ICAgCisgICAgdGVtcGxhdGU8QmFuayBiYW5rPgorICAgIEluZGV4ZWQ8YmFuaz4gaW5kZXhlZCgp
IGNvbnN0OworICAgIAorICAgIHRlbXBsYXRlPEJhbmsgYmFuaz4KKyAgICBBYnNvbHV0ZWx5SW5k
ZXhlZDxiYW5rPiBhYnNvbHV0ZWx5SW5kZXhlZCgpIGNvbnN0OworICAgIAogICAgIGJvb2wgaXNB
bGl2ZSgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gISEqdGhpczsKQEAgLTE5NSw2ICsy
MTIsOCBAQCBwdWJsaWM6CiAgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gc3RhdGljX2Nhc3Q8aW50
PihpbmRleCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQorICAgIAorICAgIHN0YXRp
YyBUbXAgdG1wRm9yQWJzb2x1dGVJbmRleChCYW5rLCB1bnNpZ25lZCk7CiAKIHByaXZhdGU6CiAg
ICAgc3RhdGljIGludCBlbmNvZGVHUCh1bnNpZ25lZCBpbmRleCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wSW5saW5lcy5oCShyZXZpc2lvbiAyMTQ0MjcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcElubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtOTIsNiArOTIsNTggQEAgc3RydWN0IEFic29sdXRlVG1wTWFwcGVyPEZQPiB7CiAg
ICAgfQogfTsKIAordGVtcGxhdGU8QmFuayB0aGVCYW5rPgorY2xhc3MgVG1wOjpJbmRleGVkIDog
cHVibGljIFRtcCB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGR1bXBQ
cmVmaXg7CisgICAgCisgICAgSW5kZXhlZChUbXAgdG1wKQorICAgICAgICA6IFRtcCh0bXApCisg
ICAgeworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gdG1wSW5kZXgodGhlQmFuayk7CisgICAgfQorfTsKKwordGVtcGxhdGU8QmFu
ayB0aGVCYW5rPgorY2xhc3MgVG1wOjpBYnNvbHV0ZWx5SW5kZXhlZCA6IHB1YmxpYyBUbXAgewor
cHVibGljOgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBkdW1wUHJlZml4OworCisgICAg
QWJzb2x1dGVseUluZGV4ZWQoVG1wIHRtcCkKKyAgICAgICAgOiBUbXAodG1wKQorICAgIHsKKyAg
ICB9CisgICAgCisgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIEFic29sdXRlVG1wTWFwcGVyPHRoZUJhbms+OjphYnNvbHV0ZUluZGV4KCp0aGlzKTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTxCYW5rIHRoZUJhbms+CitUbXA6OkluZGV4ZWQ8dGhlQmFuaz4g
VG1wOjppbmRleGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW5kZXhlZDx0aGVCYW5rPigqdGhp
cyk7Cit9CisKK3RlbXBsYXRlPEJhbmsgdGhlQmFuaz4KK1RtcDo6QWJzb2x1dGVseUluZGV4ZWQ8
dGhlQmFuaz4gVG1wOjphYnNvbHV0ZWx5SW5kZXhlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEFi
c29sdXRlbHlJbmRleGVkPHRoZUJhbms+KCp0aGlzKTsKK30KKworVG1wIFRtcDo6dG1wRm9yQWJz
b2x1dGVJbmRleChCYW5rIGJhbmssIHVuc2lnbmVkIGluZGV4KQoreworICAgIGlmIChiYW5rID09
IEdQKQorICAgICAgICByZXR1cm4gQWJzb2x1dGVUbXBNYXBwZXI8R1A+Ojp0bXBGcm9tQWJzb2x1
dGVJbmRleChpbmRleCk7CisgICAgQVNTRVJUKGJhbmsgPT0gRlApOworICAgIHJldHVybiBBYnNv
bHV0ZVRtcE1hcHBlcjxGUD46OnRtcEZyb21BYnNvbHV0ZUluZGV4KGluZGV4KTsKK30KKwogfSB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgogCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgJKHJldmlzaW9uIDIx
NDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTAyLDggKzEwMiwxNiBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIC8v
IEFsc28gYWxsb3cgYWRkL3JlbW92ZS9jb250YWlucyB0ZXJtaW5vbG9neSwgd2hpY2ggbWVhbnMg
dGhlIHNhbWUgdGhpbmcgYXMgc2V0L2NsZWFyL2dldC4KLSAgICB2b2lkIGFkZChSZWcgcmVnKSB7
IHNldChyZWcpOyB9Ci0gICAgdm9pZCByZW1vdmUoUmVnIHJlZykgeyBjbGVhcihyZWcpOyB9Cisg
ICAgYm9vbCBhZGQoUmVnIHJlZykKKyAgICB7CisgICAgICAgIEFTU0VSVCghIXJlZyk7CisgICAg
ICAgIHJldHVybiAhbV9iaXRzLnRlc3RBbmRTZXQocmVnLmluZGV4KCkpOworICAgIH0KKyAgICBi
b29sIHJlbW92ZShSZWcgcmVnKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCEhcmVnKTsKKyAgICAg
ICAgcmV0dXJuIG1fYml0cy50ZXN0QW5kQ2xlYXIocmVnLmluZGV4KCkpOworICAgIH0KICAgICBi
b29sIGNvbnRhaW5zKFJlZyByZWcpIGNvbnN0IHsgcmV0dXJuIGdldChyZWcpOyB9CiAgICAgCiAg
ICAgdm9pZCBtZXJnZShjb25zdCBSZWdpc3RlclNldCYgb3RoZXIpIHsgbV9iaXRzLm1lcmdlKG90
aGVyLm1fYml0cyk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
LmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjI1LDYgKzIyNSw3IEBAIHR5cGVkZWYgY29uc3Qg
Y2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYoYm9vbCwgdXNlRlRMSklULCB0cnVlLCBOb3JtYWws
ICJhbGxvd3MgdGhlIEZUTCBKSVQgdG8gYmUgdXNlZCBpZiB0cnVlIikgXAogICAgIHYoYm9vbCwg
dXNlRlRMVEJBQSwgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCB2YWxpZGF0
ZUZUTE9TUkV4aXRMaXZlbmVzcywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAorICAgIHYodW5z
aWduZWQsIGRlZmF1bHRCM09wdExldmVsLCAyLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJv
b2wsIGIzQWx3YXlzRmFpbHNCZWZvcmVDb21waWxlLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBc
CiAgICAgdihib29sLCBiM0Fsd2F5c0ZhaWxzQmVmb3JlTGluaywgZmFsc2UsIE5vcm1hbCwgbnVs
bHB0cikgXAogICAgIHYoYm9vbCwgZnRsQ3Jhc2hlcywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikg
LyogZm9vbC1wcm9vZiB3YXkgb2YgY2hlY2tpbmcgdGhhdCB5b3UgZW5kZWQgdXAgaW4gdGhlIEZU
TC4gOy0pICovXApAQCAtMzk3LDYgKzM5OCw4IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9u
U3RyaW5nOwogICAgIHYoYm9vbCwgbG9nQjNQaGFzZVRpbWVzLCBmYWxzZSwgTm9ybWFsLCBudWxs
cHRyKSBcCiAgICAgdihkb3VibGUsIHJhcmVCbG9ja1BlbmFsdHksIDAuMDAxLCBOb3JtYWwsIG51
bGxwdHIpIFwKICAgICB2KGJvb2wsIGFpclNwaWxsc0V2ZXJ5dGhpbmcsIGZhbHNlLCBOb3JtYWws
IG51bGxwdHIpIFwKKyAgICB2KGJvb2wsIGFpckxpbmVhclNjYW5WZXJib3NlLCBmYWxzZSwgTm9y
bWFsLCBudWxscHRyKSBcCisgICAgdihib29sLCBhaXJMaW5lYXJTY2FuU3BpbGxzRXZlcnl0aGlu
ZywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgYWlyRm9yY2VCcmlnZ3NB
bGxvY2F0b3IsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGFpckZvcmNl
SVJDQWxsb2NhdG9yLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCBjb2Fs
ZXNjZVNwaWxsU2xvdHMsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCShyZXZpc2lvbiAyMTQ0
MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAor
I2luY2x1ZGUgIkIzQ29tbW9uLmgiCiAjaW5jbHVkZSAiQjNDb21waWxhdGlvbi5oIgogI2luY2x1
ZGUgIkNDYWxsSGVscGVycy5oIgogI2luY2x1ZGUgIlZNLmgiCkBAIC00Nyw3ICs0OCw3IEBAIHN0
cnVjdCBDb21waWxhdGlvbkNvbnRleHQgewogICAgIENDYWxsSGVscGVyczo6Q2FsbCBqc0VudHJ5
cG9pbnRUb1dhc21FbnRyeXBvaW50Q2FsbDsKIH07CiAKLUV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0
cjxXYXNtSW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKFZNJiwgQ29t
cGlsYXRpb25Db250ZXh0JiwgY29uc3QgdWludDhfdCosIHNpemVfdCwgY29uc3QgU2lnbmF0dXJl
KiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgY29uc3QgTW9kdWxlSW5mb3JtYXRp
b24mLCBjb25zdCBWZWN0b3I8U2lnbmF0dXJlSW5kZXg+JiwgdW5zaWduZWQgb3B0TGV2ZWwgPSAx
KTsKK0V4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxXYXNtSW50ZXJuYWxGdW5jdGlvbj4sIFN0cmlu
Zz4gcGFyc2VBbmRDb21waWxlKFZNJiwgQ29tcGlsYXRpb25Db250ZXh0JiwgY29uc3QgdWludDhf
dCosIHNpemVfdCwgY29uc3QgU2lnbmF0dXJlKiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNh
bGw+JiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBjb25zdCBWZWN0b3I8U2lnbmF0dXJlSW5k
ZXg+JiwgdW5zaWduZWQgb3B0TGV2ZWwgPSBCMzo6ZGVmYXVsdE9wdExldmVsKCkpOwogCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDggQEAKIC8q
IEJlZ2luIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCiAJCTBGMEQ4NUI0MTcyMzRDQzEwMDMzODIx
MCAvKiBOb0xvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMEQ4NUIzMTcyMzRDQjEwMDMzODIxMCAvKiBOb0xvY2suaCAqLzsgfTsKIAkJMEYwRkNE
REUxREQxNjdGOTAwQ0NBQjUzIC8qIExvY2tBbGdvcml0aG0uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEZDREREMUREMTY3RjkwMENDQUI1MyAvKiBM
b2NrQWxnb3JpdGhtLmggKi87IH07CisJCTBGMkFDNTYxMUU4OUY3MEMwMDAxRUUzRiAvKiBSYW5n
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQUM1
NjAxRTg5RjcwQzAwMDFFRTNGIC8qIFJhbmdlLmggKi87IH07CisJCTBGMkFDNTYzMUU4QTAxNDkw
MDAxRUUzRiAvKiBJbmRleEtleVR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMkFDNTYyMUU4QTAxNDkwMDAxRUUzRiAvKiBJbmRleEtleVR5cGUu
aCAqLzsgfTsKIAkJMEYyQjY2QTYxN0I2QjRGQjAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3Vu
dGVkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJC
NjZBNDE3QjZCNEY3MDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCAqLzsgfTsKIAkJ
MEYyQjY2QTcxN0I2QjRGRDAwQTdBRTNGIC8qIEZsaXBCeXRlcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QTUxN0I2QjRGNzAwQTdBRTNGIC8q
IEZsaXBCeXRlcy5oICovOyB9OwogCQkwRjMwQkE5MDFFNzg3MDhFMDAyQ0E4NDcgLyogR2xvYmFs
VmVyc2lvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjMwQkE4QTFFNzg3MDhFMDAyQ0E4NDcgLyogR2xvYmFsVmVyc2lvbi5jcHAgKi87IH07CkBA
IC00MDgsNiArNDEwLDggQEAKIC8qIEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwog
CQkwRjBEODVCMzE3MjM0Q0IxMDAzMzgyMTAgLyogTm9Mb2NrLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5v
TG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBGQ0RERDFERDE2N0Y5MDBD
Q0FCNTMgLyogTG9ja0FsZ29yaXRobS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBMb2NrQWxnb3JpdGhtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkFDNTYw
MUU4OUY3MEMwMDAxRUUzRiAvKiBSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSYW5nZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJBQzU2MjFFOEEw
MTQ5MDAwMUVFM0YgLyogSW5kZXhLZXlUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEluZGV4S2V5VHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJC
NjZBNDE3QjZCNEY3MDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRGVmZXJyYWJsZVJlZkNvdW50ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYyQjY2QTUxN0I2QjRGNzAwQTdBRTNGIC8qIEZsaXBCeXRlcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGbGlwQnl0ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzMDBCN0QxOEFC
NDhCNDAwQTZENzJFIC8qIEhhc2hNZXRob2QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGFzaE1ldGhvZC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTAxOCwxMCArMTAyMiwxMSBAQAogCQkJ
CUE4QTQ3MkJBMTUxQTgyNUEwMDQxMjNGRiAvKiBIYXNoVHJhaXRzLmggKi8sCiAJCQkJQThBNDcy
QkIxNTFBODI1QTAwNDEyM0ZGIC8qIEhleE51bWJlci5oICovLAogCQkJCUZFODkyNUFGMUQwMERB
RUMwMDQ2OTA3RSAvKiBJbmRlbnRlci5oICovLAotCQkJCTlDNjdDNTQyNTg5MzQ4RTI4NUI0OTY5
OSAvKiBJbmRleGVkQ29udGFpbmVySXRlcmF0b3IuaCAqLywKKwkJCQkwRjJBQzU2MjFFOEEwMTQ5
MDAwMUVFM0YgLyogSW5kZXhLZXlUeXBlLmggKi8sCiAJCQkJNUI0MzM4M0E1RDBCNDYzQzk0MzNE
OTMzIC8qIEluZGV4TWFwLmggKi8sCiAJCQkJMzEzN0UxRDdEQkQ4NEFDMzhGQUU0RDM0IC8qIElu
ZGV4U2V0LmggKi8sCiAJCQkJMjY4NEQ0MzUxQzAwMEQ0MDAwODFENjYzIC8qIEluZGV4U3BhcnNl
U2V0LmggKi8sCisJCQkJOUM2N0M1NDI1ODkzNDhFMjg1QjQ5Njk5IC8qIEluZGV4ZWRDb250YWlu
ZXJJdGVyYXRvci5oICovLAogCQkJCUE4QTQ3MkJDMTUxQTgyNUEwMDQxMjNGRiAvKiBJbmxpbmVB
U00uaCAqLywKIAkJCQlBNzBEQTA4MjE3OTlGMDREMDA1MjlBOUIgLyogSW5zZXJ0aW9uLmggKi8s
CiAJCQkJN0NERDdGRjcxODZEMjkxRTAwNzQzM0NEIC8qIEl0ZXJhdG9yQWRhcHRvcnMuaCAqLywK
QEAgLTExMDAsNiArMTEwNSw3IEBACiAJCQkJQThBNDcyRkIxNTFBODI1QjAwNDEyM0ZGIC8qIFJh
bmRvbU51bWJlci5jcHAgKi8sCiAJCQkJQThBNDcyRkMxNTFBODI1QjAwNDEyM0ZGIC8qIFJhbmRv
bU51bWJlci5oICovLAogCQkJCUE4QTQ3MkZEMTUxQTgyNUIwMDQxMjNGRiAvKiBSYW5kb21OdW1i
ZXJTZWVkLmggKi8sCisJCQkJMEYyQUM1NjAxRTg5RjcwQzAwMDFFRTNGIC8qIFJhbmdlLmggKi8s
CiAJCQkJMEY3MjVDQUIxQzUwNDYxNjAwQUQ5NDNBIC8qIFJhbmdlU2V0LmggKi8sCiAJCQkJMEY4
NzEwNTkxNjY0M0YxOTAwOTBCMEFEIC8qIFJhd1BvaW50ZXIuaCAqLywKIAkJCQkwRkRFODdGNjFE
RkQwN0NDMDA2NEMzOTAgLyogUmVjdXJzaXZlTG9ja0FkYXB0ZXIuaCAqLywKQEAgLTE0ODUsNiAr
MTQ5MSw3IEBACiAJCQkJQzkxNkI5NzVGMDJGNEY3RThCNEFCMTJEIC8qIEluZGV4TWFwLmggaW4g
SGVhZGVycyAqLywKIAkJCQlDOEIwRTFBMUUwMUE0ODZFQjk1RTBEMTEgLyogSW5kZXhTZXQuaCBp
biBIZWFkZXJzICovLAogCQkJCTI2ODRENDM2MUMwMDBENDAwMDgxRDY2MyAvKiBJbmRleFNwYXJz
ZVNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQUM1NjMxRThBMDE0OTAwMDFFRTNGIC8qIElu
ZGV4S2V5VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczREMxNTFBODI1QjAwNDEyM0ZG
IC8qIElubGluZUFTTS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwREEwODQxNzk5RjA0RDAwNTI5
QTlCIC8qIEluc2VydGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjYxNDdCMEExNUREQ0NEQzAw
RERCOTA3IC8qIEludGVnZXJUb1N0cmluZ0NvbnZlcnNpb24uaCBpbiBIZWFkZXJzICovLApAQCAt
MTU4Niw2ICsxNTkzLDcgQEAKIAkJCQk0MzBCNDc4OTFBQUFBQzFBMDAxMjIzREEgLyogU3RyaW5n
Q29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQzRTE1MUE4MjVCMDA0MTIzRkYgLyog
U3RyaW5nQ29uY2F0ZW5hdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDRDRDMjcwMUUyQzgyQjkw
MDkyOTQ3MCAvKiBTdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGMkFDNTYxMUU4OUY3MEMwMDAxRUUzRiAvKiBSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QThBNDc0MkMxNTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ0V4dHJhcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQThBNDc0M0YxNTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ0hhc2guaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3NDg3NDU0MTdBMEJEQUUwMEZBMDRDQiAvKiBTdHJpbmdIYXNoRHVtcENvbnRl
eHQuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIx
NDQyNykKKysrIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0xMDAsNiArMTAwLDcgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgUkFNU2l6ZS5oCiAgICAgUmFu
ZG9tTnVtYmVyLmgKICAgICBSYW5kb21OdW1iZXJTZWVkLmgKKyAgICBSYW5nZS5oCiAgICAgUmFu
Z2VTZXQuaAogICAgIFJhd1BvaW50ZXIuaAogICAgIFJlY3Vyc2l2ZUxvY2tBZGFwdGVyLmgKSW5k
ZXg6IFNvdXJjZS9XVEYvd3RmL0RlcXVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
RGVxdWUuaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL1dURi93dGYvRGVxdWUuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIw
MDgsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA3LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0
IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CkBAIC04OSw2ICs4OSwxOSBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVMYXN0KCk7CiAg
ICAgdm9pZCByZW1vdmUoaXRlcmF0b3ImKTsKICAgICB2b2lkIHJlbW92ZShjb25zdF9pdGVyYXRv
ciYpOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+IHZvaWQgcmVtb3ZlQWxsTWF0
Y2hpbmcoY29uc3QgRnVuYyYpOworICAgIAorICAgIC8vIFRoaXMgaXMgYSBwcmlvcml0eSBlbnF1
ZXVlLiBUaGUgY2FsbGJhY2sgaXMgZ2l2ZW4gYSB2YWx1ZSwgYW5kIGlmIGl0IHJldHVybnMgdHJ1
ZSwgdGhlbiB0aGlzCisgICAgLy8gd2lsbCBwdXQgdGhlIGFwcGVuZGVkIHZhbHVlIGJlZm9yZSB0
aGF0IHZhbHVlLiBJdCB3aWxsIGtlZXAgYnViYmxpbmcgdW50aWwgdGhlIGNhbGxiYWNrIHJldHVy
bnMKKyAgICAvLyBmYWxzZSBvciB0aGUgdmFsdWUgZW5kcyB1cCBhdCB0aGUgaGVhZCBvZiB0aGUg
cXVldWUuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgdHlwZW5hbWUgRnVuYz4KKyAgICB2b2lk
IGFwcGVuZEFuZEJ1YmJsZShVJiYsIGNvbnN0IEZ1bmMmKTsKKyAgICAKKyAgICAvLyBSZW1vdmUg
YW5kIHJldHVybiB0aGUgbGFzdCBlbGVtZW50IGZvciB3aGljaCB0aGUgY2FsbGJhY2sgcmV0dXJu
cyB0cnVlLiBSZXR1cm5zIGEgbnVsbCB2ZXJzaW9uIG9mCisgICAgLy8gVCBpZiBpdCB0aGUgY2Fs
bGJhY2sgYWx3YXlzIHJldHVybnMgZmFsc2UuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4K
KyAgICBUIHRha2VMYXN0KGNvbnN0IEZ1bmMmKTsKIAogICAgIHZvaWQgY2xlYXIoKTsKIApAQCAt
NTI0LDYgKzUzNyw1NSBAQCBpbmxpbmUgdm9pZCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OnJl
CiAgICAgY2hlY2tWYWxpZGl0eSgpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3Qg
aW5saW5lQ2FwYWNpdHk+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgoraW5saW5lIHZvaWQgRGVx
dWU8VCwgaW5saW5lQ2FwYWNpdHk+OjpyZW1vdmVBbGxNYXRjaGluZyhjb25zdCBGdW5jJiBmdW5j
KQoreworICAgIHNpemVfdCBjb3VudCA9IHNpemUoKTsKKyAgICB3aGlsZSAoY291bnQtLSkgewor
ICAgICAgICBUIHZhbHVlID0gdGFrZUZpcnN0KCk7CisgICAgICAgIGlmICghZnVuYyh2YWx1ZSkp
CisgICAgICAgICAgICBhcHBlbmQoV1RGTW92ZSh2YWx1ZSkpOworICAgIH0KK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgordGVtcGxhdGU8dHlwZW5hbWUg
VSwgdHlwZW5hbWUgRnVuYz4KK2lubGluZSB2b2lkIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6
YXBwZW5kQW5kQnViYmxlKFUmJiB2YWx1ZSwgY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICBhcHBl
bmQoV1RGTW92ZSh2YWx1ZSkpOworICAgIGl0ZXJhdG9yIGJlZ2luID0gdGhpcy0+YmVnaW4oKTsK
KyAgICBpdGVyYXRvciBpdGVyID0gZW5kKCk7CisgICAgLS1pdGVyOworICAgIHdoaWxlIChpdGVy
ICE9IGJlZ2luKSB7CisgICAgICAgIGl0ZXJhdG9yIHByZXYgPSBpdGVyOworICAgICAgICAtLXBy
ZXY7CisgICAgICAgIGlmICghZnVuYygqcHJldikpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIHN0ZDo6c3dhcCgqcHJldiwgKml0ZXIpOworICAgICAgICBpdGVyID0gcHJldjsKKyAgICB9
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KK3RlbXBs
YXRlPHR5cGVuYW1lIEZ1bmM+CitpbmxpbmUgVCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OnRh
a2VMYXN0KGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgdW5zaWduZWQgY291bnQgPSAwOworICAg
IHVuc2lnbmVkIHNpemUgPSB0aGlzLT5zaXplKCk7CisgICAgd2hpbGUgKGNvdW50IDwgc2l6ZSkg
eworICAgICAgICBUIGNhbmRpZGF0ZSA9IHRha2VMYXN0KCk7CisgICAgICAgIGlmIChmdW5jKGNh
bmRpZGF0ZSkpIHsKKyAgICAgICAgICAgIHdoaWxlIChjb3VudC0tKQorICAgICAgICAgICAgICAg
IGFwcGVuZCh0YWtlRmlyc3QoKSk7CisgICAgICAgICAgICByZXR1cm4gY2FuZGlkYXRlOworICAg
ICAgICB9CisgICAgICAgIGNvdW50Kys7CisgICAgICAgIHByZXBlbmQoV1RGTW92ZShjYW5kaWRh
dGUpKTsKKyAgICB9CisgICAgcmV0dXJuIFQoKTsKK30KKwogI2lmZGVmIE5ERUJVRwogdGVtcGxh
dGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBpbmxpbmUgdm9pZCBEZXF1ZUl0
ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT46OmNoZWNrVmFsaWRpdHkoKSBjb25zdCB7IH0K
IHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4gaW5saW5lIHZvaWQg
RGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+OjpjaGVja1ZhbGlkaXR5KGNvbnN0
IERlcXVlSXRlcmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5PiYpIGNvbnN0IHsgfQpJbmRleDog
U291cmNlL1dURi93dGYvSW5kZXhLZXlUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvSW5kZXhLZXlUeXBlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvSW5kZXhL
ZXlUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNl
IFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgSW5kZXhLZXlUeXBlIHsKKyAg
ICBzdGF0aWMgc2l6ZV90IGluZGV4KGNvbnN0IFQmIGtleSkgeyByZXR1cm4ga2V5LmluZGV4KCk7
IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgSW5kZXhLZXlUeXBlPFQqPiB7
CisgICAgc3RhdGljIHNpemVfdCBpbmRleChUKiBrZXkpIHsgcmV0dXJuIGtleS0+aW5kZXgoKTsg
fQorfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0luZGV4
TWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSW5kZXhNYXAuaAkocmV2aXNpb24g
MjE0NDI3KQorKysgU291cmNlL1dURi93dGYvSW5kZXhNYXAuaAkod29ya2luZyBjb3B5KQpAQCAt
MjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgPHd0Zi9JbmRleEtleVR5
cGUuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtNzAs
MTggKzcxLDI0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fdmVjdG9yW2luZGV4XTsKICAg
ICB9CiAgICAgCi0gICAgVmFsdWUmIG9wZXJhdG9yW10oS2V5KiBrZXkpCisgICAgVmFsdWUmIG9w
ZXJhdG9yW10oY29uc3QgS2V5JiBrZXkpCiAgICAgewotICAgICAgICByZXR1cm4gbV92ZWN0b3Jb
a2V5LT5pbmRleCgpXTsKKyAgICAgICAgcmV0dXJuIG1fdmVjdG9yW0luZGV4S2V5VHlwZTxLZXk+
OjppbmRleChrZXkpXTsKICAgICB9CiAgICAgCi0gICAgY29uc3QgVmFsdWUmIG9wZXJhdG9yW10o
S2V5KiBrZXkpIGNvbnN0CisgICAgY29uc3QgVmFsdWUmIG9wZXJhdG9yW10oY29uc3QgS2V5JiBr
ZXkpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV92ZWN0b3Jba2V5LT5pbmRleCgpXTsK
KyAgICAgICAgcmV0dXJuIG1fdmVjdG9yW0luZGV4S2V5VHlwZTxLZXk+OjppbmRleChrZXkpXTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBhcHBlbmQoY29uc3QgS2V5JiBrZXksIFZhbHVlIHZhbHVl
KQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoSW5kZXhLZXlUeXBlPEtleT46OmluZGV4
KGtleSkgPT0gbV92ZWN0b3Iuc2l6ZSgpKTsKKyAgICAgICAgbV92ZWN0b3IuYXBwZW5kKHZhbHVl
KTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgVmVjdG9yPFZhbHVlPiBtX3ZlY3RvcjsKKyAgICBW
ZWN0b3I8VmFsdWUsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX3ZlY3RvcjsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL1dURi93dGYvSW5kZXhTZXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9JbmRleFNldC5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBT
b3VyY2UvV1RGL3d0Zi9JbmRleFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNiArMjcsNyBA
QAogCiAjaW5jbHVkZSA8d3RmL0JpdFZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50
ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSW5kZXhLZXlUeXBlLmg+CiAKIG5hbWVzcGFjZSBXVEYgewog
CkBAIC00MiwzMCArNDMsMzAgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBib29sIGFk
ZChUKiB2YWx1ZSkKKyAgICBib29sIGFkZChjb25zdCBUJiB2YWx1ZSkKICAgICB7Ci0gICAgICAg
IHJldHVybiAhbV9zZXQuc2V0KHZhbHVlLT5pbmRleCgpKTsKKyAgICAgICAgcmV0dXJuICFtX3Nl
dC5zZXQoSW5kZXhLZXlUeXBlPFQ+OjppbmRleCh2YWx1ZSkpOwogICAgIH0KIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEl0ZXJhYmxlPgogICAgIGJvb2wgYWRkQWxsKGNvbnN0IEl0ZXJhYmxlJiBp
dGVyYWJsZSkKICAgICB7CiAgICAgICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgIGZv
ciAoVCogdmFsdWUgOiBpdGVyYWJsZSkKKyAgICAgICAgZm9yIChjb25zdCBUJiB2YWx1ZSA6IGl0
ZXJhYmxlKQogICAgICAgICAgICAgcmVzdWx0IHw9IGFkZCh2YWx1ZSk7CiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQogCi0gICAgYm9vbCByZW1vdmUoVCogdmFsdWUpCisgICAgYm9vbCBy
ZW1vdmUoY29uc3QgVCYgdmFsdWUpCiAgICAgewotICAgICAgICByZXR1cm4gbV9zZXQuY2xlYXIo
dmFsdWUtPmluZGV4KCkpOworICAgICAgICByZXR1cm4gbV9zZXQuY2xlYXIoSW5kZXhLZXlUeXBl
PFQ+OjppbmRleCh2YWx1ZSkpOwogICAgIH0KIAotICAgIGJvb2wgY29udGFpbnMoVCogdmFsdWUp
IGNvbnN0CisgICAgYm9vbCBjb250YWlucyhjb25zdCBUJiB2YWx1ZSkgY29uc3QKICAgICB7CiAg
ICAgICAgIGlmICghdmFsdWUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJl
dHVybiBtX3NldC5nZXQodmFsdWUtPmluZGV4KCkpOworICAgICAgICByZXR1cm4gbV9zZXQuZ2V0
KEluZGV4S2V5VHlwZTxUPjo6aW5kZXgodmFsdWUpKTsKICAgICB9CiAKICAgICBzaXplX3Qgc2l6
ZSgpIGNvbnN0CkBAIC0xMDAsNyArMTAxLDcgQEAgcHVibGljOgogICAgICAgICAgICAgewogICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICBUKiBvcGVyYXRvciooKQorICAgICAgICAgICAgVCBv
cGVyYXRvciooKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBtX2NvbGxl
Y3Rpb24tPmF0KCptX2l0ZXIpOwogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL1dURi93dGYv
UmFuZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9SYW5nZS5oCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9XVEYvd3RmL1JhbmdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHd0Zi9NYXRo
RXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYg
eworCisvLyBOb3RlIHRoYXQgdGhlICdiZWdpbicgaXMgaW5jbHVzaXZlLCB3aGlsZSB0aGUgJ2Vu
ZCcgaXMgZXhjbHVzaXZlLiBUaGVzZSB0d28gcmFuZ2VzIGFyZSBub24tCisvLyBvdmVybGFwcGlu
ZzoKKy8vCisvLyAgICAgcmFuZ2VBID0gMC4uLjgKKy8vICAgICByYW5nZUIgPSA4Li4uMTYKKwor
dGVtcGxhdGU8dHlwZW5hbWUgUGFzc2VkVHlwZT4KK2NsYXNzIFJhbmdlIHsKK3B1YmxpYzoKKyAg
ICB0eXBlZGVmIFBhc3NlZFR5cGUgVHlwZTsKKyAgICAKKyAgICBSYW5nZSgpCisgICAgICAgIDog
bV9iZWdpbigwKQorICAgICAgICAsIG1fZW5kKDApCisgICAgeworICAgIH0KKworICAgIGV4cGxp
Y2l0IFJhbmdlKFR5cGUgdmFsdWUpCisgICAgICAgIDogbV9iZWdpbih2YWx1ZSkKKyAgICAgICAg
LCBtX2VuZCh2YWx1ZSArIDEpCisgICAgeworICAgICAgICBBU1NFUlQobV9lbmQgPj0gbV9iZWdp
bik7CisgICAgfQorCisgICAgUmFuZ2UoVHlwZSBiZWdpbiwgVHlwZSBlbmQpCisgICAgICAgIDog
bV9iZWdpbihiZWdpbikKKyAgICAgICAgLCBtX2VuZChlbmQpCisgICAgeworICAgICAgICBBU1NF
UlQobV9lbmQgPj0gbV9iZWdpbik7CisgICAgICAgIGlmIChtX2JlZ2luID09IG1fZW5kKSB7Cisg
ICAgICAgICAgICAvLyBDYW5vbmljYWxpemUgZW1wdHkgcmFuZ2VzLgorICAgICAgICAgICAgbV9i
ZWdpbiA9IDA7CisgICAgICAgICAgICBtX2VuZCA9IDA7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBzdGF0aWMgUmFuZ2UgdG9wKCkKKyAgICB7CisgICAgICAgIHJldHVybiBSYW5nZShzdGQ6Om51
bWVyaWNfbGltaXRzPFR5cGU+OjptaW4oKSwgc3RkOjpudW1lcmljX2xpbWl0czxUeXBlPjo6bWF4
KCkpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSYW5nZSYgb3RoZXIpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9iZWdpbiA9PSBvdGhlci5tX2JlZ2luCisgICAg
ICAgICAgICAmJiBtX2VuZCA9PSBvdGhlci5tX2VuZDsKKyAgICB9CisKKyAgICBib29sIG9wZXJh
dG9yIT0oY29uc3QgUmFuZ2UmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEo
KnRoaXMgPT0gb3RoZXIpOworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29s
KCkgY29uc3QgeyByZXR1cm4gbV9iZWdpbiAhPSBtX2VuZDsgfQorCisgICAgUmFuZ2Ugb3BlcmF0
b3J8KGNvbnN0IFJhbmdlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghKnRoaXMp
CisgICAgICAgICAgICByZXR1cm4gb3RoZXI7CisgICAgICAgIGlmICghb3RoZXIpCisgICAgICAg
ICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIHJldHVybiBSYW5nZSgKKyAgICAgICAgICAgIHN0
ZDo6bWluKG1fYmVnaW4sIG90aGVyLm1fYmVnaW4pLAorICAgICAgICAgICAgc3RkOjptYXgobV9l
bmQsIG90aGVyLm1fZW5kKSk7CisgICAgfQorICAgIAorICAgIFJhbmdlJiBvcGVyYXRvcnw9KGNv
bnN0IFJhbmdlJiBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyA9ICp0aGlzIHwg
b3RoZXI7CisgICAgfQorICAgIAorICAgIFR5cGUgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2Jl
Z2luOyB9CisgICAgVHlwZSBlbmQoKSBjb25zdCB7IHJldHVybiBtX2VuZDsgfQorCisgICAgYm9v
bCBvdmVybGFwcyhjb25zdCBSYW5nZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gV1RGOjpyYW5nZXNPdmVybGFwKG1fYmVnaW4sIG1fZW5kLCBvdGhlci5tX2JlZ2luLCBvdGhl
ci5tX2VuZCk7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
CisgICAgeworICAgICAgICBpZiAoKnRoaXMgPT0gUmFuZ2UoKSkgeworICAgICAgICAgICAgb3V0
LnByaW50KCJCb3R0b20iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoKnRoaXMgPT0gdG9wKCkpIHsKKyAgICAgICAgICAgIG91dC5wcmludCgiVG9wIik7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1fYmVnaW4gPT0gbV9l
bmQgKyAxKSB7CisgICAgICAgICAgICBvdXQucHJpbnQobV9iZWdpbik7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgb3V0LnByaW50KG1fYmVnaW4sICIuLi4iLCBtX2Vu
ZCk7CisgICAgfQorCitwcml2YXRlOgorICAgIFR5cGUgbV9iZWdpbjsKKyAgICBUeXBlIG1fZW5k
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6UmFuZ2U7CisKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL1JhbmdlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
UmFuZ2VTZXQuaAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL1dURi93dGYvUmFuZ2VTZXQu
aAkod29ya2luZyBjb3B5KQpAQCAtNzcsNiArNzcsMTAgQEAgcHVibGljOgogICAgICAgICBtX2lz
Q29tcGFjdCA9IGZhbHNlOwogCiAgICAgICAgIC8vIFdlIGFwcGVuZCB3aXRob3V0IGNvbXBhY3Rp
bmcgb25seSBpZiBkb2luZyBzbyBpcyBndWFyYW50ZWVkIG5vdCB0byByZXNpemUgdGhlIHZlY3Rv
ci4KKyAgICAgICAgLy8gRklYTUU6IFRoaXMgaGV1cmlzdGljIGlzIGFsbW9zdCBjZXJ0YWlubHkg
d3JvbmcsIGJlY2F1c2Ugd2UgZG9uJ3QgY29udHJvbCB0aGUgY2FwYWNpdHkuIEkKKyAgICAgICAg
Ly8gdGhpbmsgdGhhdCB0aGlzIG1lYW5zIHRoYXQgd2Ugd2lsbCBzb21ldGltZXMgYmUgcmFnZS1j
b21wYWN0aW5nIHdoZW4gd2UgYXJlIGp1c3Qgc2h5IG9mIHRoZQorICAgICAgICAvLyBjYXBhY2l0
eS4KKyAgICAgICAgLy8gT09QUzogbmVlZCBidWcgdXJsCiAgICAgICAgIGlmIChtX3Jhbmdlcy5z
aXplKCkgKyAxIDwgbV9yYW5nZXMuY2FwYWNpdHkoKSkgewogICAgICAgICAgICAgbV9yYW5nZXMu
YXBwZW5kKHJhbmdlKTsKICAgICAgICAgICAgIHJldHVybjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305885</attachid>
            <date>2017-03-30 13:15:29 -0700</date>
            <delta_ts>2017-03-30 13:23:04 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>135350</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE0NjE1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzOSBA
QAorMjAxNy0wMy0zMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEFpciBzaG91bGQgc3VwcG9ydCBsaW5lYXIgc2NhbiBmb3Igb3B0TGV2ZWw8MgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwMTYxCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGNoYW5n
ZXMgdGhlIGRlZmF1bHQgb3B0IGxldmVsIG9mIEIzIHRvIDIuIEl0IG1ha2VzIHRoZSBvdGhlciBv
cHQgbGV2ZWxzIHVzZWZ1bCBieSBhZGRpbmcgYQorICAgICAgICBuZXcgcmVnaXN0ZXIgYWxsb2Nh
dG9yLiBUaGlzIG5ldyBsaW5lYXIgc2NhbiBhbGxvY2F0b3Igd2lsbCBwcm9kdWNlIHNpZ25pZmlj
YW50bHkgd29yc2UgY29kZS4KKyAgICAgICAgQnV0IGl0IHdpbGwgcHJvZHVjZSB0aGF0IGNvZGUg
YSBsb3QgZmFzdGVyIHRoYW4gSVJDIG9yIEJyaWdncy4KKyAgICAgICAgCisgICAgICAgIFRoZSBv
cHQgbGV2ZWxzIGFyZToKKyAgICAgICAgICAgIDA6IG5vIG9wdGltaXphdGlvbnMsIGxpbmVhciBz
Y2FuCisgICAgICAgICAgICAxOiBzb21lIG9wdGltaXphdGlvbnMsIGxpbmVhciBzY2FuCisgICAg
ICAgICAgICAyOiBmdWxsIG9wdGltaXphdGlvbnMsIGdyYXBoIGNvbG9yaW5nIChJUkMgb3IgQnJp
Z2dzIGJhc2VkIG9uIENQVSkKKyAgICAgICAgCisgICAgICAgIGFsbG9jYXRlUmVnaXN0ZXJzQnlM
aW5lYXJTY2FuKCkgZmFpdGhmdWxseSBpbXBsZW1lbnRzIE1hc3NpbWlsaWFubyBQb2xldHRvIGFu
ZCBWaXZlayBTYXJrYXIncworICAgICAgICBmYW1vdXMgYWxnb3JpdGhtLiBJdCB1c2VzIHRoZSB2
YXJpYW50IHRoYXQgaGFuZGxlcyBjbG9iYmVyZWQgcmVnaXN0ZXJzIGJ5IGF2b2lkaW5nIGFzc2ln
bmluZworICAgICAgICByYW5nZXMgdG8gdGhvc2UgcmVnaXN0ZXJzIGlmIHRoZSByYW5nZSBvdmVy
bGFwcyBhIGNsb2JiZXIuCisgICAgICAgIAorICAgICAgICBUaGUgbmV3IG9wdExldmVsPTEgc3Bl
ZWRzIHVwIEIzIGJ5IGEgZmFjdG9yIG9mIDIsIGFuZCByZXN1bHRzIGluIGEgODAlIHRocm91Z2hw
dXQgcmVncmVzc2lvbi4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYjMvQjNC
YXNpY0Jsb2NrVXRpbHMuaDoKKyAgICAgICAgKEpTQzo6QjM6OmJsb2Nrc0luUHJlT3JkZXIpOgor
ICAgICAgICAoSlNDOjpCMzo6YmxvY2tzSW5Qb3N0T3JkZXIpOgorICAgICAgICAqIGIzL0IzQmxv
Y2tXb3JrbGlzdC5oOgorICAgICAgICAqIGIzL0IzQ0ZHLmg6CisgICAgICAgIChKU0M6OkIzOjpD
Rkc6Om5ld01hcCk6CisgICAgICAgICogYjMvQjNDb21tb24uaDoKKyAgICAgICAgKEpTQzo6QjM6
OmRlZmF1bHRPcHRMZXZlbCk6CisgICAgICAgICogYjMvQjNDb21waWxlLmg6CisgICAgICAgICog
YjMvQjNEdXBsaWNhdGVUYWlscy5jcHA6CisgICAgICAgICogYjMvQjNFbGltaW5hdGVDb21tb25T
dWJleHByZXNzaW9ucy5jcHA6CisgICAgICAgICogYjMvQjNGaXhTU0EuY3BwOgorICAgICAgICAo
SlNDOjpCMzo6ZGVtb3RlVmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6OmZpeFNTQSk6CisgICAg
ICAgICogYjMvQjNGaXhTU0EuaDoKKyAgICAgICAgKiBiMy9CM0dlbmVyYXRlLmNwcDoKKyAgICAg
ICAgKEpTQzo6QjM6OnByZXBhcmVGb3JHZW5lcmF0aW9uKToKKyAgICAgICAgKEpTQzo6QjM6Omdl
bmVyYXRlVG9BaXIpOgorICAgICAgICAqIGIzL0IzR2VuZXJhdGUuaDoKKyAgICAgICAgKiBiMy9C
M0hlYXBSYW5nZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYjMvQjNIZWFwUmFuZ2UuaDoKKyAg
ICAgICAgKEpTQzo6QjM6OkhlYXBSYW5nZTo6SGVhcFJhbmdlKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6QjM6OkhlYXBSYW5nZTo6dG9wKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6Okhl
YXBSYW5nZTo6b3BlcmF0b3I9PSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpIZWFwUmFu
Z2U6Om9wZXJhdG9yIT0pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6SGVhcFJhbmdlOjpv
cGVyYXRvcnwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6SGVhcFJhbmdlOjpvcGVyYXRv
ciBib29sKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkhlYXBSYW5nZTo6YmVnaW4pOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6SGVhcFJhbmdlOjplbmQpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpCMzo6SGVhcFJhbmdlOjpvdmVybGFwcyk6IERlbGV0ZWQuCisgICAgICAgICog
YjMvQjNMb3dlclRvQWlyLmNwcDoKKyAgICAgICAgKiBiMy9CM01vdmVDb25zdGFudHMuY3BwOgor
ICAgICAgICAqIGIzL0IzUGhpQ2hpbGRyZW4uaDoKKyAgICAgICAgKiBiMy9CM1Byb2NlZHVyZS5j
cHA6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OmR1bXApOgorICAgICAgICAoSlNDOjpC
Mzo6UHJvY2VkdXJlOjpkZWxldGVPcnBoYW5zKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVy
ZTo6c2V0QmxvY2tPcmRlckltcGwpOgorICAgICAgICAqIGIzL0IzUmVkdWNlRG91YmxlVG9GbG9h
dC5jcHA6CisgICAgICAgICogYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHA6CisgICAgICAgICogYjMv
QjNTU0FDYWxjdWxhdG9yLmg6CisgICAgICAgICogYjMvQjNVc2VDb3VudHMuaDoKKyAgICAgICAg
KiBiMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuY3BwOgorICAgICAg
ICAqIGIzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjphbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbik6Cisg
ICAgICAgICogYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmg6IEFkZGVk
LgorICAgICAgICAqIGIzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcDoKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6YWxsb2NhdGVTdGFjayk6CisgICAgICAgICogYjMvYWlyL0FpckFyZy5jcHA6Cisg
ICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGIzL2Fpci9BaXJBcmcuaDoK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjphY3RpdmVBdCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFyZzo6dGltaW5nKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpmb3JFYWNo
UGhhc2UpOgorICAgICAgICAqIGIzL2Fpci9BaXJCYXNpY0Jsb2NrLmg6CisgICAgICAgICogYjMv
YWlyL0FpckJsb2NrV29ya2xpc3QuaDoKKyAgICAgICAgKiBiMy9haXIvQWlyQ0ZHLmg6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkNGRzo6bmV3TWFwKToKKyAgICAgICAgKiBiMy9haXIvQWlyRWxp
bWluYXRlRGVhZENvZGUuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjplbGltaW5hdGVEZWFk
Q29kZSk6CisgICAgICAgICogYjMvYWlyL0FpckZpeE9idmlvdXNTcGlsbHMuY3BwOgorICAgICAg
ICAqIGIzL2Fpci9BaXJGaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMuY3BwOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpmaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMpOgorICAgICAgICAqIGIzL2Fpci9B
aXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpmaXhTcGlsbHNBZnRlclRlcm1pbmFscyk6CisgICAgICAgICogYjMvYWlyL0FpckZpeFNw
aWxsc0FmdGVyVGVybWluYWxzLmg6IEFkZGVkLgorICAgICAgICAqIGIzL2Fpci9BaXJHZW5lcmF0
ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OnByZXBhcmVGb3JHZW5lcmF0aW9uKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6Z2VuZXJhdGUpOgorICAgICAgICAqIGIzL2Fpci9BaXJHZW5l
cmF0ZS5oOgorICAgICAgICAqIGIzL2Fpci9BaXJHZW5lcmF0aW9uQ29udGV4dC5oOgorICAgICAg
ICAqIGIzL2Fpci9BaXJJbnNlcnRpb25TZXQuaDoKKyAgICAgICAgKiBiMy9haXIvQWlySW5zdC5j
cHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6Om5lZWRzUGFkZGluZyk6CisgICAgICAg
ICogYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6Omxvd2VyQWZ0ZXJSZWdBbGxvYyk6CisgICAgICAgICogYjMvYWlyL0Fpckxvd2VyRW50cnlT
d2l0Y2guY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpsb3dlckVudHJ5U3dpdGNoKToKKyAg
ICAgICAgKiBiMy9haXIvQWlyT3Bjb2RlLm9wY29kZXM6CisgICAgICAgICogYjMvYWlyL0FpclBo
YXNlSW5zZXJ0aW9uU2V0LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OlBoYXNl
SW5zZXJ0aW9uU2V0OjpleGVjdXRlKToKKyAgICAgICAgKiBiMy9haXIvQWlyUGhhc2VJbnNlcnRp
b25TZXQuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OlBoYXNlSW5zZXJ0aW9uOjpQ
aGFzZUluc2VydGlvbik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlBoYXNlSW5zZXJ0aW9uOjpw
aGFzZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlBoYXNlSW5zZXJ0aW9uOjpvcGVyYXRvcjwp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpQaGFzZUluc2VydGlvblNldDo6UGhhc2VJbnNlcnRp
b25TZXQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpQaGFzZUluc2VydGlvblNldDo6YXBwZW5k
SW5zZXJ0aW9uKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6UGhhc2VJbnNlcnRpb25TZXQ6Omlu
c2VydEluc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpQaGFzZUluc2VydGlvblNldDo6aW5z
ZXJ0KToKKyAgICAgICAgKiBiMy9haXIvQWlyUmVnTGl2ZW5lc3MuaDoKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6UmVnTGl2ZW5lc3M6OkxvY2FsQ2FsYzo6TG9jYWxDYWxjKToKKyAgICAgICAgKiBi
My9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6c3Bp
bGxFdmVyeXRoaW5nKToKKyAgICAgICAgKiBiMy9haXIvQWlyVG1wLmNwcDoKKyAgICAgICAgKiBi
My9haXIvQWlyVG1wLmg6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6dG1wRm9ySW5kZXgp
OgorICAgICAgICAqIGIzL2Fpci9BaXJUbXBJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OlRtcDo6SW5kZXhlZDo6SW5kZXhlZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6
SW5kZXhlZDo6aW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OkFic29sdXRlbHlJ
bmRleGVkOjpBYnNvbHV0ZWx5SW5kZXhlZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6
QWJzb2x1dGVseUluZGV4ZWQ6OmluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpp
bmRleGVkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjphYnNvbHV0ZWx5SW5kZXhlZCk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6dG1wRm9yQWJzb2x1dGVJbmRleCk6CisgICAg
ICAgICogYjMvdGVzdGIzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OmNvbXBpbGUpOgorICAgICAg
ICAoSlNDOjpCMzo6dGVzdE11bExvYWRUd2ljZSk6CisgICAgICAgICogaml0L1JlZ2lzdGVyU2V0
Lmg6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0OjphZGQpOgorICAgICAgICAoSlNDOjpSZWdp
c3RlclNldDo6cmVtb3ZlKToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKyAgICAgICAg
KiB3YXNtL1dhc21CM0lSR2VuZXJhdG9yLmg6CisKIDIwMTctMDMtMzAgIFNhYW0gQmFyYXRpICA8
c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViQXNzZW1ibHk6IHBhc3MgV2FzbTo6Q29u
dGV4dCogdG8gdm1FbnRyeVRvV2FzbSB3aGVuIG5vdCB1c2luZyBmYXN0IFRMUwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC03NCw2ICs3
NCw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyWDg2Q29tbW9uLmNwcAogCiAgICAgYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlH
cmFwaENvbG9yaW5nLmNwcAorICAgIGIzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFy
U2Nhbi5jcHAKICAgICBiMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAKICAgICBiMy9haXIvQWly
QXJnLmNwcAogICAgIGIzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcApAQCAtODgsNiArODksNyBAQCBz
ZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGIzL2Fpci9BaXJFbWl0U2h1ZmZsZS5jcHAK
ICAgICBiMy9haXIvQWlyRml4T2J2aW91c1NwaWxscy5jcHAKICAgICBiMy9haXIvQWlyRml4UGFy
dGlhbFJlZ2lzdGVyU3RhbGxzLmNwcAorICAgIGIzL2Fpci9BaXJGaXhTcGlsbHNBZnRlclRlcm1p
bmFscy5jcHAKICAgICBiMy9haXIvQWlyR2VuZXJhdGUuY3BwCiAgICAgYjMvYWlyL0FpckdlbmVy
YXRlZC5jcHAKICAgICBiMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwCkBAIC0xMDAsNiAr
MTAyLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBiMy9haXIvQWlyTG93ZXJN
YWNyb3MuY3BwCiAgICAgYjMvYWlyL0Fpck9wdGltaXplQmxvY2tPcmRlci5jcHAKICAgICBiMy9h
aXIvQWlyUGFkSW50ZXJmZXJlbmNlLmNwcAorICAgIGIzL2Fpci9BaXJQaGFzZUluc2VydGlvblNl
dC5jcHAKICAgICBiMy9haXIvQWlyUGhhc2VTY29wZS5jcHAKICAgICBiMy9haXIvQWlyUmVnTGl2
ZW5lc3MuY3BwCiAgICAgYjMvYWlyL0FpclJlcG9ydFVzZWRSZWdpc3RlcnMuY3BwCkBAIC0xNDAs
NyArMTQzLDYgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBiMy9CM0ZvbGRQYXRo
Q29uc3RhbnRzLmNwcAogICAgIGIzL0IzRnJlcXVlbmN5Q2xhc3MuY3BwCiAgICAgYjMvQjNHZW5l
cmF0ZS5jcHAKLSAgICBiMy9CM0hlYXBSYW5nZS5jcHAKICAgICBiMy9CM0luZmVyU3dpdGNoZXMu
Y3BwCiAgICAgYjMvQjNJbnNlcnRpb25TZXQuY3BwCiAgICAgYjMvQjNLaW5kLmNwcApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0xODMsNiArMTgzLDEyIEBACiAJCTBGMjVGMUIyMTgxNjM1RjMwMDUy
MkYzOSAvKiBGVExTbG93UGF0aENhbGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMjVGMUFCMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENh
bGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjI1RjFCMzE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjVGMUFDMTgxNjM1RjMw
MDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuY3BwICovOyB9OwogCQkwRjI1RjFCNDE4MTYz
NUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1RjFBRDE4MTYzNUYzMDA1MjJGMzkgLyogRlRM
U2xvd1BhdGhDYWxsS2V5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEYyQUM1NjYxRThBMEI3NzAwMDFFRTNGIC8qIEFpckZpeFNwaWxsc0FmdGVy
VGVybWluYWxzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMkFDNTY0MUU4QTBCNzYwMDAxRUUzRiAvKiBBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFs
cy5jcHAgKi87IH07CisJCTBGMkFDNTY3MUU4QTBCNzkwMDAxRUUzRiAvKiBBaXJGaXhTcGlsbHNB
ZnRlclRlcm1pbmFscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyQUM1NjUxRThBMEI3NjAwMDFFRTNGIC8qIEFpckZpeFNwaWxsc0FmdGVyVGVybWlu
YWxzLmggKi87IH07CisJCTBGMkFDNTZBMUU4QTBCRDMwMDAxRUUzRiAvKiBBaXJBbGxvY2F0ZVJl
Z2lzdGVyc0J5TGluZWFyU2Nhbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJBQzU2ODFFOEEwQkQxMDAwMUVFM0YgLyogQWlyQWxsb2NhdGVSZWdp
c3RlcnNCeUxpbmVhclNjYW4uY3BwICovOyB9OworCQkwRjJBQzU2QjFFOEEwQkQ1MDAwMUVFM0Yg
LyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkFDNTY5MUU4QTBCRDEwMDAxRUUzRiAvKiBB
aXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5oICovOyB9OworCQkwRjJBQzU2RTFFOEQ3
QjAwMDAwMUVFM0YgLyogQWlyUGhhc2VJbnNlcnRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQUM1NkMxRThEN0FGRjAwMDFFRTNGIC8q
IEFpclBoYXNlSW5zZXJ0aW9uU2V0LmNwcCAqLzsgfTsKKwkJMEYyQUM1NkYxRThEN0IwMzAwMDFF
RTNGIC8qIEFpclBoYXNlSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJBQzU2RDFFOEQ3QUZGMDAwMUVFM0YgLyogQWlyUGhhc2VJ
bnNlcnRpb25TZXQuaCAqLzsgfTsKIAkJMEYyQjY2QUMxN0I2QjUzRjAwQTdBRTNGIC8qIEdDSW5j
b21pbmdSZWZDb3VudGVkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjJCNjZBODE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJC
NjZBRDE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBOTE3QjZC
NTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyQjY2QUUxN0I2QjU0NTAw
QTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBQTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJ
bmNvbWluZ1JlZkNvdW50ZWRTZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtOTY5LDcgKzk3NSw2IEBACiAJCTBGRUM4NUJDMUJFMTQ2MkYwMDgw
RkY3NCAvKiBCM1JlZHVjZVN0cmVuZ3RoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUI3MUJFMTQ2MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0
cmVuZ3RoLmNwcCAqLzsgfTsKIAkJMEZFQzg1QkQxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVkdWNl
U3RyZW5ndGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NUI4MUJFMTQ2MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0cmVuZ3RoLmggKi87IH07CiAJ
CTBGRUM4NUMxMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0VmZmVjdHMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUJFMUJFMTY3QTAwMDgwRkY3NCAv
KiBCM0VmZmVjdHMuaCAqLzsgfTsKLQkJMEZFQzg1QzIxQkUxNjdBMDAwODBGRjc0IC8qIEIzSGVh
cFJhbmdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NUJGMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hlYXBSYW5nZS5jcHAgKi87IH07CiAJCTBG
RUM4NUMzMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hlYXBSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1QzAxQkUxNjdBMDAwODBGRjc0IC8q
IEIzSGVhcFJhbmdlLmggKi87IH07CiAJCTBGRUM4NUM1MUJFMTZGNUEwMDgwRkY3NCAvKiBCM0Vm
ZmVjdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg1QzQxQkUxNkY1QTAwODBGRjc0IC8qIEIzRWZmZWN0cy5jcHAgKi87IH07CiAJCTBGRUQ2
N0I5MUIyNjI1NkQwMDY2Q0UxNSAvKiBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFRDY3QjcxQjI2MjU2
RDAwNjZDRTE1IC8qIERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHAgKi87IH07CkBAIC0yNzAz
LDYgKzI3MDgsMTIgQEAKIAkJMEYyNUYxQUIxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRo
Q2FsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExTbG93UGF0aENhbGwu
aDsgcGF0aCA9IGZ0bC9GVExTbG93UGF0aENhbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYyNUYxQUMxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExTbG93UGF0aENhbGxLZXku
Y3BwOyBwYXRoID0gZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMjVGMUFEMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxL
ZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMU2xvd1BhdGhDYWxsS2V5
Lmg7IHBhdGggPSBmdGwvRlRMU2xvd1BhdGhDYWxsS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGMkFDNTY0MUU4QTBCNzYwMDAxRUUzRiAvKiBBaXJGaXhTcGlsbHNBZnRlclRl
cm1pbmFscy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJGaXhT
cGlsbHNBZnRlclRlcm1pbmFscy5jcHA7IHBhdGggPSBiMy9haXIvQWlyRml4U3BpbGxzQWZ0ZXJU
ZXJtaW5hbHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJBQzU2NTFFOEEw
Qjc2MDAwMUVFM0YgLyogQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaDsgcGF0aCA9
IGIzL2Fpci9BaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjJBQzU2ODFFOEEwQkQxMDAwMUVFM0YgLyogQWlyQWxsb2NhdGVSZWdpc3Rl
cnNCeUxpbmVhclNjYW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
QWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwOyBwYXRoID0gYjMvYWlyL0FpckFs
bG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEYyQUM1NjkxRThBMEJEMTAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlM
aW5lYXJTY2FuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckFsbG9jYXRl
UmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmg7IHBhdGggPSBiMy9haXIvQWlyQWxsb2NhdGVSZWdpc3Rl
cnNCeUxpbmVhclNjYW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQUM1NkMx
RThEN0FGRjAwMDFFRTNGIC8qIEFpclBoYXNlSW5zZXJ0aW9uU2V0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpclBoYXNlSW5zZXJ0aW9uU2V0LmNwcDsgcGF0aCA9
IGIzL2Fpci9BaXJQaGFzZUluc2VydGlvblNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGMkFDNTZEMUU4RDdBRkYwMDAxRUUzRiAvKiBBaXJQaGFzZUluc2VydGlvblNldC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJQaGFzZUluc2VydGlvblNldC5o
OyBwYXRoID0gYjMvYWlyL0FpclBoYXNlSW5zZXJ0aW9uU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMkI2NkE4MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291
bnRlZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBHQ0luY29taW5nUmVmQ291bnRlZC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjJCNjZBOTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWlu
Z1JlZkNvdW50ZWRJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5jb21pbmdSZWZDb3VudGVk
SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCNjZBQTE3QjZCNTNE
MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR0NJ
bmNvbWluZ1JlZkNvdW50ZWRTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM0
OTYsNyArMzUwNyw2IEBACiAJCTBGRUM4NUI3MUJFMTQ2MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0
cmVuZ3RoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzUmVkdWNl
U3RyZW5ndGguY3BwOyBwYXRoID0gYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGRUM4NUI4MUJFMTQ2MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0
cmVuZ3RoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzUmVkdWNlU3RyZW5n
dGguaDsgcGF0aCA9IGIzL0IzUmVkdWNlU3RyZW5ndGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZFQzg1QkUxQkUxNjdBMDAwODBGRjc0IC8qIEIzRWZmZWN0cy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0VmZmVjdHMuaDsgcGF0aCA9IGIzL0IzRWZmZWN0
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkVDODVCRjFCRTE2N0EwMDA4MEZG
NzQgLyogQjNIZWFwUmFuZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQjNIZWFwUmFuZ2UuY3BwOyBwYXRoID0gYjMvQjNIZWFwUmFuZ2UuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkVDODVDMDFCRTE2N0EwMDA4MEZGNzQgLyogQjNIZWFwUmFu
Z2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNIZWFwUmFuZ2UuaDsgcGF0
aCA9IGIzL0IzSGVhcFJhbmdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUM4
NUM0MUJFMTZGNUEwMDgwRkY3NCAvKiBCM0VmZmVjdHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gQjNFZmZlY3RzLmNwcDsgcGF0aCA9IGIzL0IzRWZmZWN0cy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUQ2N0I3MUIyNjI1NkQwMDY2Q0UxNSAv
KiBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdD
b25zdGFudEhvaXN0aW5nUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
NTQxOSw3ICs1NDI5LDYgQEAKIAkJCQkwRkVDODRDRjFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5l
cmF0ZS5oICovLAogCQkJCTBGMkM2M0I1MUU2MzQzRTgwMEMxMzgzOSAvKiBCM0dlbmVyaWNCbG9j
a0luc2VydGlvblNldC5oICovLAogCQkJCTBGRUM4NEQwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dl
bmVyaWNGcmVxdWVudGVkQmxvY2suaCAqLywKLQkJCQkwRkVDODVCRjFCRTE2N0EwMDA4MEZGNzQg
LyogQjNIZWFwUmFuZ2UuY3BwICovLAogCQkJCTBGRUM4NUMwMUJFMTY3QTAwMDgwRkY3NCAvKiBC
M0hlYXBSYW5nZS5oICovLAogCQkJCURDNjlCOTlBMUQxNUY5MEYwMDJFM0MwMCAvKiBCM0luZmVy
U3dpdGNoZXMuY3BwICovLAogCQkJCURDNjlCOTlCMUQxNUY5MEYwMDJFM0MwMCAvKiBCM0luZmVy
U3dpdGNoZXMuaCAqLywKQEAgLTU1MzAsNiArNTUzOSw4IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJ
CQk3OTY1QzIxNDFFNUQ3OTk2MDBCNzU5MUQgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBo
Q29sb3JpbmcuY3BwICovLAogCQkJCTc5NjVDMjE1MUU1RDc5OTYwMEI3NTkxRCAvKiBBaXJBbGxv
Y2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5oICovLAorCQkJCTBGMkFDNTY4MUU4QTBCRDEw
MDAxRUUzRiAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5jcHAgKi8sCisJCQkJ
MEYyQUM1NjkxRThBMEJEMTAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJT
Y2FuLmggKi8sCiAJCQkJMEZFQzg1NDgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3Rh
Y2suY3BwICovLAogCQkJCTBGRUM4NTQ5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBbGxvY2F0ZVN0
YWNrLmggKi8sCiAJCQkJMEZFQzg1NEExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5jcHAgKi8s
CkBAIC01NTYxLDYgKzU1NzIsOCBAQAogCQkJCTBGNERFMUNEMUM0QzFCNTQwMDRENkMxMSAvKiBB
aXJGaXhPYnZpb3VzU3BpbGxzLmggKi8sCiAJCQkJMjYyRDg1QjQxQzBENjUwRjAwNkFDQjYxIC8q
IEFpckZpeFBhcnRpYWxSZWdpc3RlclN0YWxscy5jcHAgKi8sCiAJCQkJMjYyRDg1QjUxQzBENjUw
RjAwNkFDQjYxIC8qIEFpckZpeFBhcnRpYWxSZWdpc3RlclN0YWxscy5oICovLAorCQkJCTBGMkFD
NTY0MUU4QTBCNzYwMDAxRUUzRiAvKiBBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5jcHAgKi8s
CisJCQkJMEYyQUM1NjUxRThBMEI3NjAwMDFFRTNGIC8qIEFpckZpeFNwaWxsc0FmdGVyVGVybWlu
YWxzLmggKi8sCiAJCQkJMEZFQzg1NTIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckZyZXF1ZW50ZWRC
bG9jay5oICovLAogCQkJCTBGRUM4NTUzMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5j
cHAgKi8sCiAJCQkJMEZFQzg1NTQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmggKi8s
CkBAIC01NTg5LDYgKzU2MDIsOCBAQAogCQkJCTBGQjM4NzhEMUJGQkM0NEQwMEUzQUIxRSAvKiBB
aXJPcHRpbWl6ZUJsb2NrT3JkZXIuaCAqLywKIAkJCQkwRjlDQUJDNjFEQjU0QTc2MDAwOEU4M0Ig
LyogQWlyUGFkSW50ZXJmZXJlbmNlLmNwcCAqLywKIAkJCQkwRjlDQUJDNzFEQjU0QTc2MDAwOEU4
M0IgLyogQWlyUGFkSW50ZXJmZXJlbmNlLmggKi8sCisJCQkJMEYyQUM1NkMxRThEN0FGRjAwMDFF
RTNGIC8qIEFpclBoYXNlSW5zZXJ0aW9uU2V0LmNwcCAqLywKKwkJCQkwRjJBQzU2RDFFOEQ3QUZG
MDAwMUVFM0YgLyogQWlyUGhhc2VJbnNlcnRpb25TZXQuaCAqLywKIAkJCQkwRkVDODU1RTFCREFD
REM3MDA4MEZGNzQgLyogQWlyUGhhc2VTY29wZS5jcHAgKi8sCiAJCQkJMEZFQzg1NUYxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUuaCAqLywKIAkJCQkwRkY0QjRCQTFFODg0NDk1MDBE
QkJFODYgLyogQWlyUmVnTGl2ZW5lc3MuY3BwICovLApAQCAtODEzOSw2ICs4MTU0LDcgQEAKIAkJ
CQkwRkVDODUxMDFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRUM4NTEyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0RG91YmxlVmFsdWUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTQzNDIyQTYzMUMxNThFNkQwMEUyRUI5OCAvKiBCM0NvbnN0
RmxvYXRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQUM1NkIxRThBMEJENTAwMDFFRTNG
IC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkVDODVCMzFCREVEOTU3MDA4MEZGNzQgLyogQjNDb25zdFB0clZhbHVlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjMzOERGNjFCRTkzRDU1MDAxM0M4OEYgLyogQjNDb25zdHJhaW5lZFZhbHVl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJDNjNCODFFNjM0M0Y3MDBDMTM4MzkgLyogQjNHZW5l
cmljQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovLApAQCAtODM3MCw2ICs4Mzg2LDcg
QEAKIAkJCQkwRkZGQzk1ODE0RUY5MEEyMDBDNzI1MzIgLyogREZHQ0ZBUGhhc2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGM0IzQTI4MTU0NEM5OTcwMDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNh
dGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjlEMzY5NTFBRTlDQzMzMDAwRDRERkIg
LyogREZHQ2xlYW5VcFBoYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJBQzU2RjFFOEQ3QjAz
MDAwMUVFM0YgLyogQWlyUGhhc2VJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
N0E0MjQwMTdBMEJCRkQwMEE4REI4MSAvKiBERkdDbG9iYmVyaXplLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzdBNDI0MjE3QTBCQkZEMDBBOERCODEgLyogREZHQ2xvYmJlclNldC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYzQzFGMUIxQjg2OEU3OTAwQUJCMDhCIC8qIERGR0Nsb2JiZXJzRXhpdFN0
YXRlLmggaW4gSGVhZGVycyAqLywKQEAgLTkzNjIsNiArOTM3OSw3IEBACiAJCQkJNzA5RkI4NkEx
QUUzMzVDNjAwMzlEMDY5IC8qIFdlYWtTZXRDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTQxNTAxMzMxNTRCQjEzRjAwNUQ4Qzk4IC8qIFdlYWtTZXRJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk3MDlGQjg2QzFBRTMzNUM2MDAzOUQwNjkgLyogV2Vha1NldFByb3RvdHlwZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQUM1NjcxRThBMEI3OTAwMDFFRTNGIC8qIEFpckZpeFNw
aWxsc0FmdGVyVGVybWluYWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JFRDFEQjU4REFE
MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQUQyRkNDMTYxREI1OUNCMjAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5Q29tcGls
ZUVycm9yQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JFRjFEQjU4
REFEMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90b3R5cGUuaCBpbiBIZWFk
ZXJzICovLApAQCAtOTk4OCw3ICsxMDAwNiw2IEBACiAJCQkJMEY3MjVDQUYxQzUwNkQzQjAwQUQ5
NDNBIC8qIEIzRm9sZFBhdGhDb25zdGFudHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQzg1
MTUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5Q2xhc3MuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZFQzg1MTgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJhdGUuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJMEZFQzg1QzIxQkUxNjdBMDAwODBGRjc0IC8qIEIzSGVhcFJhbmdlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCURDNjlCOTlDMUQxNUY5MTIwMDJFM0MwMCAvKiBCM0luZmVyU3dp
dGNoZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQzg1QjkxQkUxNDYyRjAwODBGRjc0IC8q
IEIzSW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGREY2N0QzMUQ5QzZEMkEw
MDFCOTgyNSAvKiBCM0tpbmQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDE1NCw2ICsxMDE3MSw3
IEBACiAJCQkJQTc4QTk3NzYxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZpbmFsaXplci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjJCREMxNTE1MUM1RDREMDBDRDg5MTAgLyogREZHRml4dXBQaGFz
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIwMTc3RjFEQ0FEQzMzMDBFQTU5NTAgLyogREZH
Rmxvd0luZGV4aW5nLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkFDNTZBMUU4QTBCRDMwMDAx
RUUzRiAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjlEMzM5NjE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE3RDg5Q0Y3MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdGbHVzaEZvcm1h
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjY5Q0M4ODE5M0FDNjBBMDA0NTc1OUUgLyogREZH
RnJvemVuVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDI2Myw2ICsxMDI4MSw3IEBACiAJ
CQkJMkE4MzYzODUxOEQ3RDBFRTAwMDBFQkNDIC8qIEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2suY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJOTlFNDVBMjUxOEExQjI1OTAwMjZEODhGIC8qIEVuY29kZWRW
YWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDNzEwN0VDMzc2MDA0MjdBNDggLyog
RXJyb3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQUM1NjYxRThBMEI3NzAwMDFFRTNGIC8q
IEFpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0Yz
OUM4MTA3RUMzNzYwMDQyN0E0OCAvKiBFcnJvckNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUZFQjU4QzE0MTg3QjhCMTYwMDk4RUYwQiAvKiBFcnJvckhhbmRsaW5nU2NvcGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzkxMDdFQzM3NjAwNDI3QTQ4IC8qIEVycm9ySW5z
dGFuY2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDM4MCw2ICsxMDM5OSw3IEBACiAJCQkJRTM1
RTAzNUYxQjdBQjQzRTAwNzNBRDJBIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTMyNDM4QjE4NTY4MzM1MDAyRUQ2OTIgLyogSW5zcGVj
dG9yUHJvdG9jb2xPYmplY3RzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MEU0QjYxMTg4MDlE
RDUwMDY4QTQ2RCAvKiBJbnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEYyQUM1NkUxRThEN0IwMDAwMDFFRTNGIC8qIEFpclBoYXNlSW5zZXJ0aW9uU2V0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGMkM2M0JCMUU2MzQ0MEEwMEMxMzgzOSAvKiBBaXJCbG9ja0lu
c2VydGlvblNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTUxNjVEMjFCREYwQjk4MDAzQjc1
QzEgLyogSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNTkzQ0Y4MjE4NDAzNzcxMDBCRkNFMjcgLyogSW5zcGVjdG9yVmFsdWVzLmNwcCBpbiBTb3Vy
Y2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja1V0aWxz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja1V0
aWxzLmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jh
c2ljQmxvY2tVdGlscy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNyArMTE0LDcgQEAgdGVtcGxh
dGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KIFZlY3RvcjxCYXNpY0Jsb2NrKj4gYmxvY2tzSW5QcmVP
cmRlcihCYXNpY0Jsb2NrKiByb290KQogewogICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gcmVzdWx0
OwotICAgIEdyYXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2Nr
Pj4gd29ya2xpc3Q7CisgICAgR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0
PEJhc2ljQmxvY2sqPj4gd29ya2xpc3Q7CiAgICAgd29ya2xpc3QucHVzaChyb290KTsKICAgICB3
aGlsZSAoQmFzaWNCbG9jayogYmxvY2sgPSB3b3JrbGlzdC5wb3AoKSkgewogICAgICAgICByZXN1
bHQuYXBwZW5kKGJsb2NrKTsKQEAgLTEyOCw3ICsxMjgsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBC
YXNpY0Jsb2NrPgogVmVjdG9yPEJhc2ljQmxvY2sqPiBibG9ja3NJblBvc3RPcmRlcihCYXNpY0Js
b2NrKiByb290KQogewogICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gcmVzdWx0OwotICAgIFBvc3RP
cmRlckdyYXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrPj4g
d29ya2xpc3Q7CisgICAgUG9zdE9yZGVyR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIElu
ZGV4U2V0PEJhc2ljQmxvY2sqPj4gd29ya2xpc3Q7CiAgICAgd29ya2xpc3QucHVzaChyb290KTsK
ICAgICB3aGlsZSAoR3JhcGhOb2RlV2l0aE9yZGVyPEJhc2ljQmxvY2sqPiBpdGVtID0gd29ya2xp
c3QucG9wKCkpIHsKICAgICAgICAgc3dpdGNoIChpdGVtLm9yZGVyKSB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja1dvcmtsaXN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tXb3JrbGlzdC5oCShyZXZpc2lvbiAyMTQ0MjcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja1dvcmtsaXN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzUsNyArMzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAogY2xhc3Mg
QmFzaWNCbG9jazsKIAotdHlwZWRlZiBHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5k
ZXhTZXQ8QmFzaWNCbG9jaz4+IEJsb2NrV29ya2xpc3Q7Cit0eXBlZGVmIEdyYXBoTm9kZVdvcmts
aXN0PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+IEJsb2NrV29ya2xpc3Q7CiAK
IC8vIFdoZW4geW91IHNheSBCbG9ja1dpdGg8aW50PiB5b3Ugc2hvdWxkIHJlYWQgaXQgYXMgImJs
b2NrIHdpdGggYW4gaW50Ii4KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5nIEJsb2NrV2l0aCA9
IEdyYXBoTm9kZVdpdGg8QmFzaWNCbG9jayosIFQ+OwpAQCAtNDQsMTMgKzQ0LDEzIEBAIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHVzaW5nIEJsb2NrV2l0aCA9IEcKIC8vIHBlcm1pdHMgZm9yY2libHkg
ZW5xdWV1ZWluZyB0aGluZ3MgZXZlbiBpZiB0aGUgYmxvY2sgaGFzIGFscmVhZHkgYmVlbiBzZWVu
LiBJdCdzIHVzZWZ1bCBmb3IKIC8vIHRoaW5ncyBsaWtlIGJ1aWxkaW5nIGEgc3Bhbm5pbmcgdHJl
ZSwgaW4gd2hpY2ggY2FzZSBUICh0aGUgYXV4aWxpYXJ5IHBheWxvYWQpIHdvdWxkIGJlIHRoZQog
Ly8gc3VjY2Vzc29yIGluZGV4LgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcgRXh0ZW5kZWRC
bG9ja1dvcmtsaXN0ID0gRXh0ZW5kZWRHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgVCwg
SW5kZXhTZXQ8QmFzaWNCbG9jaz4+OwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcgRXh0ZW5k
ZWRCbG9ja1dvcmtsaXN0ID0gRXh0ZW5kZWRHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwg
VCwgSW5kZXhTZXQ8QmFzaWNCbG9jayo+PjsKIAogdHlwZWRlZiBHcmFwaFZpc2l0T3JkZXIgVmlz
aXRPcmRlcjsKIAogdHlwZWRlZiBHcmFwaE5vZGVXaXRoT3JkZXI8QmFzaWNCbG9jayo+IEJsb2Nr
V2l0aE9yZGVyOwogCi10eXBlZGVmIFBvc3RPcmRlckdyYXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxv
Y2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrPj4gUG9zdE9yZGVyQmxvY2tXb3JrbGlzdDsKK3R5cGVk
ZWYgUG9zdE9yZGVyR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2lj
QmxvY2sqPj4gUG9zdE9yZGVyQmxvY2tXb3JrbGlzdDsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NGRy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NGRy5oCShyZXZpc2lvbiAyMTQ0MjcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDRkcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOSw4ICsz
OSw4IEBAIGNsYXNzIENGRyB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6
CiAgICAgdHlwZWRlZiBCYXNpY0Jsb2NrKiBOb2RlOwotICAgIHR5cGVkZWYgSW5kZXhTZXQ8QmFz
aWNCbG9jaz4gU2V0OwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5nIE1hcCA9IEluZGV4
TWFwPEJhc2ljQmxvY2ssIFQ+OworICAgIHR5cGVkZWYgSW5kZXhTZXQ8QmFzaWNCbG9jayo+IFNl
dDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBNYXAgPSBJbmRleE1hcDxCYXNpY0Js
b2NrKiwgVD47CiAgICAgdHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9jayosIDQ+IExpc3Q7CiAKICAg
ICBDRkcoUHJvY2VkdXJlJiBwcm9jKQpAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAgICAgTm9k
ZSByb290KCkgeyByZXR1cm4gbV9wcm9jWzBdOyB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgotICAgIE1hcDxUPiBuZXdNYXAoKSB7IHJldHVybiBJbmRleE1hcDxKU0M6OkIzOjpCYXNpY0Js
b2NrLCBUPihtX3Byb2Muc2l6ZSgpKTsgfQorICAgIE1hcDxUPiBuZXdNYXAoKSB7IHJldHVybiBJ
bmRleE1hcDxKU0M6OkIzOjpCYXNpY0Jsb2NrKiwgVD4obV9wcm9jLnNpemUoKSk7IH0KIAogICAg
IFN1Y2Nlc3NvckNvbGxlY3Rpb248QmFzaWNCbG9jaywgQmFzaWNCbG9jazo6U3VjY2Vzc29yTGlz
dD4gc3VjY2Vzc29ycyhOb2RlIG5vZGUpIHsgcmV0dXJuIG5vZGUtPnN1Y2Nlc3NvckJsb2Nrcygp
OyB9CiAgICAgQmFzaWNCbG9jazo6UHJlZGVjZXNzb3JMaXN0JiBwcmVkZWNlc3NvcnMoTm9kZSBu
b2RlKSB7IHJldHVybiBub2RlLT5wcmVkZWNlc3NvcnMoKTsgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ29tbW9uLmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYg
RU5BQkxFKEIzX0pJVCkKIAogI2luY2x1ZGUgIkpTRXhwb3J0TWFjcm9zLmgiCisjaW5jbHVkZSAi
T3B0aW9ucy5oIgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKQEAgLTE3MCw2ICsxNzEsMTMgQEAgc3RhdGljIEludFR5cGUgcm90YXRl
TGVmdChJbnRUeXBlIHZhbHVlLAogICAgIHJldHVybiAodVZhbHVlIDw8IHNoaWZ0KSB8ICh1VmFs
dWUgPj4gKChiaXRzIC0gc2hpZnQpICYgbWFzaykpOwogfQogCitpbmxpbmUgdW5zaWduZWQgZGVm
YXVsdE9wdExldmVsKCkKK3sKKyAgICAvLyBUaGlzIHNob3VsZCBhbG1vc3QgYWx3YXlzIHJldHVy
biAyLCBidXQgd2UgYWxsb3cgdGhpcyBkZWZhdWx0IHRvIGJlIGxvd2VyZWQgZm9yIHRlc3Rpbmcu
IFNvbWUKKyAgICAvLyBjb21wb25lbnRzIHdpbGwgZGVsaWJlcmF0ZWx5IHNldCB0aGUgb3B0TGV2
ZWwuCisgICAgcmV0dXJuIE9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCk7Cit9CisKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMwogCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxlLmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiAr
MjcsNyBAQAogCiAjaWYgRU5BQkxFKEIzX0pJVCkKIAorI2luY2x1ZGUgIkIzQ29tbW9uLmgiCiAj
aW5jbHVkZSAiQjNDb21waWxhdGlvbi5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTQ1LDcgKzQ2
LDcgQEAgY2xhc3MgUHJvY2VkdXJlOwogLy8gVGhlbiB5b3Uga2VlcCB0aGUgQ29tcGlsYXRpb24g
b2JqZWN0IGFsaXZlIGZvciBhcyBsb25nIGFzIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gcnVuIHRo
ZSBjb2RlLgogLy8gSWYgdGhpcyBBUEkgZmVlbHMgdG9vIGhpZ2gtbGV2ZWwsIHlvdSBjYW4gdXNl
IEIzOjpnZW5lcmF0ZSgpIGRpcmVjdGx5LgogCi1KU19FWFBPUlRfUFJJVkFURSBDb21waWxhdGlv
biBjb21waWxlKFZNJiwgUHJvY2VkdXJlJiwgdW5zaWduZWQgb3B0TGV2ZWwgPSAxKTsKK0pTX0VY
UE9SVF9QUklWQVRFIENvbXBpbGF0aW9uIGNvbXBpbGUoVk0mLCBQcm9jZWR1cmUmLCB1bnNpZ25l
ZCBvcHRMZXZlbCA9IGRlZmF1bHRPcHRMZXZlbCgpKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0R1cGxpY2F0ZVRhaWxzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNEdXBsaWNhdGVUYWls
cy5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0R1
cGxpY2F0ZVRhaWxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgsNyBAQCBwdWJsaWM6
CiAKICAgICAgICAgbV9wcm9jLnJlc2V0VmFsdWVPd25lcnMoKTsKIAotICAgICAgICBJbmRleFNl
dDxCYXNpY0Jsb2NrPiBjYW5kaWRhdGVzOworICAgICAgICBJbmRleFNldDxCYXNpY0Jsb2NrKj4g
Y2FuZGlkYXRlczsKIAogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jKSB7
CiAgICAgICAgICAgICBpZiAoYmxvY2stPnNpemUoKSA+IG1fbWF4U2l6ZSkKQEAgLTgyLDcgKzgy
LDcgQEAgcHVibGljOgogICAgICAgICB9CiAKICAgICAgICAgLy8gQ29sbGVjdCB0aGUgc2V0IG9m
IHZhbHVlcyB0aGF0IG11c3QgYmUgZGUtU1NBJ2QuCi0gICAgICAgIEluZGV4U2V0PFZhbHVlPiB2
YWx1ZXNUb0RlbW90ZTsKKyAgICAgICAgSW5kZXhTZXQ8VmFsdWUqPiB2YWx1ZXNUb0RlbW90ZTsK
ICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvYykgewogICAgICAgICAgICAg
Zm9yIChWYWx1ZSogdmFsdWUgOiAqYmxvY2spIHsKICAgICAgICAgICAgICAgICBpZiAodmFsdWUt
Pm9wY29kZSgpID09IFBoaSAmJiBjYW5kaWRhdGVzLmNvbnRhaW5zKGJsb2NrKSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVDb21t
b25TdWJleHByZXNzaW9ucy5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjgyLDcgKzY4Miw3IEBAIHByaXZhdGU6CiAgICAgRG9taW5hdG9ycyYgbV9kb21p
bmF0b3JzOwogICAgIFB1cmVDU0UgbV9wdXJlQ1NFOwogICAgIAotICAgIEluZGV4TWFwPEJhc2lj
QmxvY2ssIEltcHVyZUJsb2NrRGF0YT4gbV9pbXB1cmVCbG9ja0RhdGE7CisgICAgSW5kZXhNYXA8
QmFzaWNCbG9jayosIEltcHVyZUJsb2NrRGF0YT4gbV9pbXB1cmVCbG9ja0RhdGE7CiAKICAgICBJ
bXB1cmVCbG9ja0RhdGEgbV9kYXRhOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNGaXhTU0EuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Zp
eFNTQS5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0ZpeFNTQS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgbmFtZXNwYWNlIHsK
IGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAK
LXZvaWQgZGVtb3RlVmFsdWVzKFByb2NlZHVyZSYgcHJvYywgY29uc3QgSW5kZXhTZXQ8VmFsdWU+
JiB2YWx1ZXMpCit2b2lkIGRlbW90ZVZhbHVlcyhQcm9jZWR1cmUmIHByb2MsIGNvbnN0IEluZGV4
U2V0PFZhbHVlKj4mIHZhbHVlcykKIHsKICAgICBIYXNoTWFwPFZhbHVlKiwgVmFyaWFibGUqPiBt
YXA7CiAgICAgSGFzaE1hcDxWYWx1ZSosIFZhcmlhYmxlKj4gcGhpTWFwOwpAQCAtMTIxLDcgKzEy
MSw3IEBAIGJvb2wgZml4U1NBKFByb2NlZHVyZSYgcHJvYykKICAgICAvLyBKdXN0IGZvciBzYW5p
dHksIHJlbW92ZSBhbnkgdW51c2VkIHZhcmlhYmxlcyBmaXJzdC4gSXQncyB1bmxpa2VseSB0aGF0
IHRoaXMgY29kZSBoYXMgYW55CiAgICAgLy8gYnVncyBoYXZpbmcgdG8gZG8gd2l0aCBkZWFkIHZh
cmlhYmxlcywgYnV0IGl0IHdvdWxkIGJlIHNpbGx5IHRvIGhhdmUgdG8gZml4IHN1Y2ggYSBidWcg
aWYKICAgICAvLyBpdCBkaWQgYXJpc2UuCi0gICAgSW5kZXhTZXQ8VmFyaWFibGU+IGxpdmVWYXJp
YWJsZXM7CisgICAgSW5kZXhTZXQ8VmFyaWFibGUqPiBsaXZlVmFyaWFibGVzOwogICAgIGZvciAo
VmFsdWUqIHZhbHVlIDogcHJvYy52YWx1ZXMoKSkgewogICAgICAgICBpZiAoVmFyaWFibGVWYWx1
ZSogdmFyaWFibGVWYWx1ZSA9IHZhbHVlLT5hczxWYXJpYWJsZVZhbHVlPigpKQogICAgICAgICAg
ICAgbGl2ZVZhcmlhYmxlcy5hZGQodmFyaWFibGVWYWx1ZS0+dmFyaWFibGUoKSk7CkBAIC0xNDUs
NyArMTQ1LDcgQEAgYm9vbCBmaXhTU0EoUHJvY2VkdXJlJiBwcm9jKQogCiAgICAgLy8gQ3JlYXRl
IGEgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUgKCJjYWxjVmFyIikgZm9yIGV2ZXJ5IHZhcmlhYmxl
LgogICAgIFZlY3RvcjxWYXJpYWJsZSo+IGNhbGNWYXJUb1ZhcmlhYmxlOwotICAgIEluZGV4TWFw
PFZhcmlhYmxlLCBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSo+IHZhcmlhYmxlVG9DYWxjVmFyKHBy
b2MudmFyaWFibGVzKCkuc2l6ZSgpKTsKKyAgICBJbmRleE1hcDxWYXJpYWJsZSosIFNTQUNhbGN1
bGF0b3I6OlZhcmlhYmxlKj4gdmFyaWFibGVUb0NhbGNWYXIocHJvYy52YXJpYWJsZXMoKS5zaXpl
KCkpOwogCiAgICAgZm9yIChWYXJpYWJsZSogdmFyaWFibGUgOiBwcm9jLnZhcmlhYmxlcygpKSB7
CiAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiBjYWxjVmFyID0gc3NhLm5ld1Zhcmlh
YmxlKCk7CkBAIC0xODUsNyArMTg1LDcgQEAgYm9vbCBmaXhTU0EoUHJvY2VkdXJlJiBwcm9jKQog
CiAgICAgLy8gTm93IHBlcmZvcm0gdGhlIGNvbnZlcnNpb24uCiAgICAgSW5zZXJ0aW9uU2V0IGlu
c2VydGlvblNldChwcm9jKTsKLSAgICBJbmRleE1hcDxWYXJpYWJsZSwgVmFsdWUqPiBtYXBwaW5n
KHByb2MudmFyaWFibGVzKCkuc2l6ZSgpKTsKKyAgICBJbmRleE1hcDxWYXJpYWJsZSosIFZhbHVl
Kj4gbWFwcGluZyhwcm9jLnZhcmlhYmxlcygpLnNpemUoKSk7CiAgICAgZm9yIChCYXNpY0Jsb2Nr
KiBibG9jayA6IHByb2MuYmxvY2tzSW5QcmVPcmRlcigpKSB7CiAgICAgICAgIG1hcHBpbmcuY2xl
YXIoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRml4U1NBLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRml4U1NBLmgJKHJldmlzaW9uIDIx
NDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZpeFNTQS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTM3LDcgKzM3LDcgQEAgY2xhc3MgUHJvY2VkdXJlOwogCiAvLyBUdXJucyBhbGwgbWVudGlv
bnMgb2YgdGhlIGdpdmVuIHZhbHVlcyBpbnRvIGFjY2Vzc2VzIHRvIHZhcmlhYmxlcy4gVGhpcyBp
cyBtZWFudCB0byBiZSB1c2VkCiAvLyBmcm9tIHBoYXNlcyB0aGF0IGRvbid0IGxpa2UgU1NBIGZv
ciB3aGF0ZXZlciByZWFzb24uCi12b2lkIGRlbW90ZVZhbHVlcyhQcm9jZWR1cmUmLCBjb25zdCBJ
bmRleFNldDxWYWx1ZT4mKTsKK3ZvaWQgZGVtb3RlVmFsdWVzKFByb2NlZHVyZSYsIGNvbnN0IElu
ZGV4U2V0PFZhbHVlKj4mKTsKIAogLy8gVGhpcyBmaXhlcyBTU0EgZm9yIHlvdS4gVXNlIHRoaXMg
YWZ0ZXIgeW91IGhhdmUgZG9uZSBkZW1vdGVWYWx1ZXMoKSBhbmQgeW91IGhhdmUgcGVyZm9ybWVk
CiAvLyB3aGF0ZXZlciBldmlsIHRyYW5zZm9ybWF0aW9uIHlvdSBuZWVkZWQuCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU3LDcgKzU3LDcgQEAgdm9pZCBwcmVwYXJlRm9yR2VuZXJhdGlvbihQcm9jZWR1cmUmIHBybwog
ICAgIFRpbWluZ1Njb3BlIHRpbWluZ1Njb3BlKCJwcmVwYXJlRm9yR2VuZXJhdGlvbiIpOwogCiAg
ICAgZ2VuZXJhdGVUb0Fpcihwcm9jZWR1cmUsIG9wdExldmVsKTsKLSAgICBBaXI6OnByZXBhcmVG
b3JHZW5lcmF0aW9uKHByb2NlZHVyZS5jb2RlKCkpOworICAgIEFpcjo6cHJlcGFyZUZvckdlbmVy
YXRpb24ocHJvY2VkdXJlLmNvZGUoKSwgb3B0TGV2ZWwpOwogfQogCiB2b2lkIGdlbmVyYXRlKFBy
b2NlZHVyZSYgcHJvY2VkdXJlLCBDQ2FsbEhlbHBlcnMmIGppdCkKQEAgLTgwLDcgKzgwLDcgQEAg
dm9pZCBnZW5lcmF0ZVRvQWlyKFByb2NlZHVyZSYgcHJvY2VkdXJlLAogICAgIGlmIChzaG91bGRW
YWxpZGF0ZUlSKCkpCiAgICAgICAgIHZhbGlkYXRlKHByb2NlZHVyZSk7CiAKLSAgICBpZiAob3B0
TGV2ZWwgPj0gMSkgeworICAgIGlmIChvcHRMZXZlbCA+PSAyKSB7CiAgICAgICAgIHJlZHVjZURv
dWJsZVRvRmxvYXQocHJvY2VkdXJlKTsKICAgICAgICAgcmVkdWNlU3RyZW5ndGgocHJvY2VkdXJl
KTsKICAgICAgICAgZWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMocHJvY2VkdXJlKTsKQEAg
LTkxLDEyICs5MSwxNSBAQCB2b2lkIGdlbmVyYXRlVG9BaXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUs
CiAgICAgICAgIAogICAgICAgICAvLyBGSVhNRTogQWRkIG1vcmUgb3B0aW1pemF0aW9ucyBoZXJl
LgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUw
NTA3CisgICAgfSBlbHNlIGlmIChvcHRMZXZlbCA+PSAxKSB7CisgICAgICAgIC8vIEZJWE1FOiBF
eHBsb3JlIGJldHRlciAicXVpY2sgbW9kZSIgb3B0aW1pemF0aW9ucy4KKyAgICAgICAgcmVkdWNl
U3RyZW5ndGgocHJvY2VkdXJlKTsKICAgICB9CiAKICAgICAvLyBUaGlzIHB1dHMgdGhlIElSIGlu
IHF1aXJrcyBtb2RlLgogICAgIGxvd2VyTWFjcm9zKHByb2NlZHVyZSk7CiAKLSAgICBpZiAob3B0
TGV2ZWwgPj0gMSkgeworICAgIGlmIChvcHRMZXZlbCA+PSAyKSB7CiAgICAgICAgIHJlZHVjZVN0
cmVuZ3RoKHByb2NlZHVyZSk7CiAKICAgICAgICAgLy8gRklYTUU6IEFkZCBtb3JlIG9wdGltaXph
dGlvbnMgaGVyZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuaAkocmV2
aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsOCBAQAogCiAjaWYgRU5BQkxFKEIzX0pJVCkKIAor
I2luY2x1ZGUgIkIzQ29tbW9uLmgiCisKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDQ2FsbEhl
bHBlcnM7CkBAIC0zOCw3ICs0MCw3IEBAIG5hbWVzcGFjZSBBaXIgeyBjbGFzcyBDb2RlOyB9CiAK
IC8vIFRoaXMgdGFrZXMgYSBCMzo6UHJvY2VkdXJlLCBvcHRpbWl6ZXMgaXQgaW4tcGxhY2UsIGxv
d2VycyBpdCB0byBBaXIsIGFuZCBwcmVwYXJlcyB0aGUgQWlyIGZvcgogLy8gZ2VuZXJhdGlvbi4K
LUpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJlcGFyZUZvckdlbmVyYXRpb24oUHJvY2VkdXJlJiwg
dW5zaWduZWQgb3B0TGV2ZWwgPSAxKTsKK0pTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJlcGFyZUZv
ckdlbmVyYXRpb24oUHJvY2VkdXJlJiwgdW5zaWduZWQgb3B0TGV2ZWwgPSBkZWZhdWx0T3B0TGV2
ZWwoKSk7CiAKIC8vIFRoaXMgdGFrZXMgYSBCMzo6UHJvY2VkdXJlIHRoYXQgaGFzIGJlZW4gcHJl
cGFyZWQgZm9yIGdlbmVyYXRpb24gKGkuZS4gaXQgaGFzIGJlZW4gbG93ZXJlZCB0byBBaXIgYW5k
CiAvLyB0aGUgQWlyIGhhcyBiZWVuIHByZXBhcmVkIGZvciBnZW5lcmF0aW9uKSBhbmQgZ2VuZXJh
dGVzIGl0LiBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIGNhbGxpbmcKQEAgLTQ4LDcgKzUwLDcg
QEAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBnZW5lcmF0ZShQcm9jZWR1cgogLy8gVGhpcyB0YWtl
cyBhIEIzOjpQcm9jZWR1cmUsIG9wdGltaXplcyBpdCBpbi1wbGFjZSwgYW5kIGxvd2VycyBpdCB0
byBBaXIuIFlvdSBjYW4gdGhlbiBnZW5lcmF0ZQogLy8gdGhlIEFpciB0byBtYWNoaW5lIGNvZGUg
dXNpbmcgQWlyOjpwcmVwYXJlRm9yR2VuZXJhdGlvbigpIGFuZCBBaXI6OmdlbmVyYXRlKCkgb24g
dGhlIFByb2NlZHVyZSdzCiAvLyBjb2RlKCkuCi12b2lkIGdlbmVyYXRlVG9BaXIoUHJvY2VkdXJl
JiwgdW5zaWduZWQgb3B0TGV2ZWwgPSAxKTsKK3ZvaWQgZ2VuZXJhdGVUb0FpcihQcm9jZWR1cmUm
LCB1bnNpZ25lZCBvcHRMZXZlbCA9IGRlZmF1bHRPcHRMZXZlbCgpKTsKIAogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5n
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJhbmdl
LmNwcAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVh
cFJhbmdlLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkIzSGVhcFJhbmdlLmgiCi0KLSNpZiBFTkFCTEUoQjNfSklUKQotCi1uYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKLQotdm9pZCBIZWFwUmFuZ2U6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKLXsKLSAgICBpZiAoKnRoaXMgPT0gSGVhcFJhbmdlKCkpIHsKLSAgICAgICAg
b3V0LnByaW50KCJCb3R0b20iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoKnRo
aXMgPT0gdG9wKCkpIHsKLSAgICAgICAgb3V0LnByaW50KCJUb3AiKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBvdXQucHJpbnQobV9iZWdpbiwgIi4uLiIsIG1fZW5kKTsKLX0KLQotfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCi0KLSNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQotCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNIZWFwUmFuZ2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNIZWFwUmFuZ2UuaAkocmV2aXNpb24gMjE0NDI3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJhbmdlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDkwICsyNywxNSBAQAogCiAjaWYgRU5BQkxFKEIzX0pJVCkKIAotI2luY2x1ZGUgPGxp
bWl0cy5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1ByaW50
U3RyZWFtLmg+CisjaW5jbHVkZSA8d3RmL1JhbmdlLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgewogCiAvLyBBbGlhcyBhbmFseXNpcyBpbiBCMyBpcyBkb25lIGJ5IGNoZWNraW5n
IGlmIHR3byBpbnRlZ2VyIHJhbmdlcyBvdmVybGFwLiBUaGlzIGlzIHBvd2VyZnVsIGVub3VnaAog
Ly8gdG8gYmUgdXNlZCBmb3IgVEJBQS1zdHlsZSBhbGlhcyBhbmFseXNpcyB1c2VkIGJ5IHRoZSBE
RkcsIEZUTCwgYW5kIExMVk06IHlvdSBqdXN0IHR1cm4gZWFjaCBub2RlCiAvLyBpbiB0aGUgdHJl
ZSBvZiBhYnN0cmFjdCBoZWFwcyBpbnRvIGEgcHJlL3Bvc3QgcmFuZ2UuCi0vLwotLy8gTm90ZSB0
aGF0IHRoZSAnYmVnaW4nIGlzIGluY2x1c2l2ZSwgd2hpbGUgdGhlICdlbmQnIGlzIGV4Y2x1c2l2
ZS4gVGhlc2UgdHdvIHJhbmdlcyBhcmUgbm9uLQotLy8gb3ZlcmxhcHBpbmc6Ci0vLwotLy8gICAg
IHJhbmdlQSA9IDAuLi44Ci0vLyAgICAgcmFuZ2VCID0gOC4uLjE2Ci0KLWNsYXNzIEhlYXBSYW5n
ZSB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiB1bnNpZ25lZCBUeXBlOwotICAgIAotICAgIEhlYXBS
YW5nZSgpCi0gICAgICAgIDogbV9iZWdpbigwKQotICAgICAgICAsIG1fZW5kKDApCi0gICAgewot
ICAgIH0KLQotICAgIGV4cGxpY2l0IEhlYXBSYW5nZSh1bnNpZ25lZCB2YWx1ZSkKLSAgICAgICAg
OiBtX2JlZ2luKHZhbHVlKQotICAgICAgICAsIG1fZW5kKHZhbHVlICsgMSkKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVChtX2VuZCA+PSBtX2JlZ2luKTsKLSAgICB9Ci0KLSAgICBIZWFwUmFuZ2UodW5z
aWduZWQgYmVnaW4sIHVuc2lnbmVkIGVuZCkKLSAgICAgICAgOiBtX2JlZ2luKGJlZ2luKQotICAg
ICAgICAsIG1fZW5kKGVuZCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX2VuZCA+PSBtX2JlZ2lu
KTsKLSAgICAgICAgaWYgKG1fYmVnaW4gPT0gbV9lbmQpIHsKLSAgICAgICAgICAgIC8vIENhbm9u
aWNhbGl6ZSBlbXB0eSByYW5nZXMuCi0gICAgICAgICAgICBtX2JlZ2luID0gMDsKLSAgICAgICAg
ICAgIG1fZW5kID0gMDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyBIZWFwUmFuZ2Ug
dG9wKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBIZWFwUmFuZ2UoMCwgVUlOVF9NQVgpOwotICAg
IH0KLQotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBIZWFwUmFuZ2UmIG90aGVyKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYmVnaW4gPT0gb3RoZXIubV9iZWdpbgotICAgICAgICAg
ICAgJiYgbV9lbmQgPT0gb3RoZXIubV9lbmQ7Ci0gICAgfQotCi0gICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IEhlYXBSYW5nZSYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gISgq
dGhpcyA9PSBvdGhlcik7Ci0gICAgfQotICAgIAotICAgIEhlYXBSYW5nZSBvcGVyYXRvcnwoY29u
c3QgSGVhcFJhbmdlJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBIZWFwUmFu
Z2UoCi0gICAgICAgICAgICBzdGQ6Om1pbihtX2JlZ2luLCBvdGhlci5tX2JlZ2luKSwKLSAgICAg
ICAgICAgIHN0ZDo6bWF4KG1fZW5kLCBvdGhlci5tX2VuZCkpOwotICAgIH0KLSAgICAKLSAgICBl
eHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9iZWdpbiAhPSBtX2VuZDsg
fQotCi0gICAgdW5zaWduZWQgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2JlZ2luOyB9Ci0gICAg
dW5zaWduZWQgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9lbmQ7IH0KLQotICAgIGJvb2wgb3Zlcmxh
cHMoY29uc3QgSGVhcFJhbmdlJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBX
VEY6OnJhbmdlc092ZXJsYXAobV9iZWdpbiwgbV9lbmQsIG90aGVyLm1fYmVnaW4sIG90aGVyLm1f
ZW5kKTsKLSAgICB9Ci0KLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgdW5zaWduZWQgbV9iZWdpbjsKLSAgICB1
bnNpZ25lZCBtX2VuZDsKLX07CisKK3R5cGVkZWYgUmFuZ2U8dW5zaWduZWQ+IEhlYXBSYW5nZTsK
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0xvd2VyVG9BaXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0xvd2VyVG9BaXIuY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM3OSwxMCAr
MzM3OSwxMCBAQCBwcml2YXRlOgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgIH0KICAgICAKLSAgICBJbmRleFNldDxWYWx1ZT4gbV9sb2NrZWQ7IC8vIFRoZXNlIGFy
ZSB2YWx1ZXMgdGhhdCB3aWxsIGhhdmUgbm8gVG1wIGluIEFpci4KLSAgICBJbmRleE1hcDxWYWx1
ZSwgVG1wPiBtX3ZhbHVlVG9UbXA7IC8vIFRoZXNlIGFyZSB2YWx1ZXMgdGhhdCBtdXN0IGhhdmUg
YSBUbXAgaW4gQWlyLiBXZSBzYXkgdGhhdCBhIFZhbHVlKiB3aXRoIGEgbm9uLW51bGwgVG1wIGlz
ICJwaW5uZWQiLgotICAgIEluZGV4TWFwPFZhbHVlLCBUbXA+IG1fcGhpVG9UbXA7IC8vIEVhY2gg
UGhpIGdldHMgaXRzIG93biBUbXAuCi0gICAgSW5kZXhNYXA8QjM6OkJhc2ljQmxvY2ssIEFpcjo6
QmFzaWNCbG9jayo+IG1fYmxvY2tUb0Jsb2NrOworICAgIEluZGV4U2V0PFZhbHVlKj4gbV9sb2Nr
ZWQ7IC8vIFRoZXNlIGFyZSB2YWx1ZXMgdGhhdCB3aWxsIGhhdmUgbm8gVG1wIGluIEFpci4KKyAg
ICBJbmRleE1hcDxWYWx1ZSosIFRtcD4gbV92YWx1ZVRvVG1wOyAvLyBUaGVzZSBhcmUgdmFsdWVz
IHRoYXQgbXVzdCBoYXZlIGEgVG1wIGluIEFpci4gV2Ugc2F5IHRoYXQgYSBWYWx1ZSogd2l0aCBh
IG5vbi1udWxsIFRtcCBpcyAicGlubmVkIi4KKyAgICBJbmRleE1hcDxWYWx1ZSosIFRtcD4gbV9w
aGlUb1RtcDsgLy8gRWFjaCBQaGkgZ2V0cyBpdHMgb3duIFRtcC4KKyAgICBJbmRleE1hcDxCMzo6
QmFzaWNCbG9jayosIEFpcjo6QmFzaWNCbG9jayo+IG1fYmxvY2tUb0Jsb2NrOwogICAgIEhhc2hN
YXA8QjM6OlN0YWNrU2xvdCosIEFpcjo6U3RhY2tTbG90Kj4gbV9zdGFja1RvU3RhY2s7CiAgICAg
SGFzaE1hcDxWYXJpYWJsZSosIFRtcD4gbV92YXJpYWJsZVRvVG1wOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNNb3ZlQ29uc3RhbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNb3ZlQ29uc3RhbnRzLmNwcAkocmV2aXNpb24gMjE0NDI3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTW92ZUNvbnN0YW50cy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIERvbWlu
YXRvcnMmIGRvbWluYXRvcnMgPSBtX3Byb2MuZG9taW5hdG9ycygpOwogICAgICAgICBIYXNoTWFw
PFZhbHVlS2V5LCBWYWx1ZSo+IHZhbHVlRm9yQ29uc3RhbnQ7Ci0gICAgICAgIEluZGV4TWFwPEJh
c2ljQmxvY2ssIFZlY3RvcjxWYWx1ZSo+PiBtYXRlcmlhbGl6YXRpb25zKG1fcHJvYy5zaXplKCkp
OworICAgICAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgVmVjdG9yPFZhbHVlKj4+IG1hdGVyaWFs
aXphdGlvbnMobV9wcm9jLnNpemUoKSk7CiAKICAgICAgICAgLy8gV2UgZGV0ZXJtaW5lIHdoZXJl
IHRoaW5ncyBnZXQgbWF0ZXJpYWxpemVkIGJhc2VkIG9uIHdoZXJlIHRoZXkgYXJlIHVzZWQuCiAg
ICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2MpIHsKQEAgLTI3NCw3ICsyNzQs
NyBAQCBwcml2YXRlOgogICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9jb25zdFRhYmxlKQog
ICAgICAgICAgICAgbV9kYXRhU2VjdGlvbltlbnRyeS52YWx1ZV0gPSBlbnRyeS5rZXkudmFsdWUo
KTsKIAotICAgICAgICBJbmRleFNldDxWYWx1ZT4gb2ZmTGltaXRzOworICAgICAgICBJbmRleFNl
dDxWYWx1ZSo+IG9mZkxpbWl0czsKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1f
cHJvYykgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB2YWx1ZUluZGV4ID0gMDsgdmFsdWVJ
bmRleCA8IGJsb2NrLT5zaXplKCk7ICsrdmFsdWVJbmRleCkgewogICAgICAgICAgICAgICAgIFN0
YWNrbWFwVmFsdWUqIHZhbHVlID0gYmxvY2stPmF0KHZhbHVlSW5kZXgpLT5hczxTdGFja21hcFZh
bHVlPigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGhpQ2hpbGRyZW4uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQaGlDaGlsZHJlbi5oCShy
ZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQaGlDaGlsZHJl
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsNyArMTY4LDcgQEAgcHVibGljOgogICAgIGNvbnN0
IFZlY3RvcjxWYWx1ZSosIDg+JiBwaGlzKCkgY29uc3QgeyByZXR1cm4gbV9waGlzOyB9CiAKIHBy
aXZhdGU6Ci0gICAgSW5kZXhNYXA8VmFsdWUsIFZlY3RvcjxVcHNpbG9uVmFsdWUqPj4gbV91cHNp
bG9uczsKKyAgICBJbmRleE1hcDxWYWx1ZSosIFZlY3RvcjxVcHNpbG9uVmFsdWUqPj4gbV91cHNp
bG9uczsKICAgICBWZWN0b3I8VmFsdWUqLCA4PiBtX3BoaXM7CiB9OwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE4Niw3ICsxODYsNyBAQCB2b2lkIFByb2NlZHVyZTo6aW52YWxpZGF0ZUNGRygpCiAKIHZvaWQg
UHJvY2VkdXJlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0gICAgSW5kZXhTZXQ8
VmFsdWU+IHZhbHVlc0luQmxvY2tzOworICAgIEluZGV4U2V0PFZhbHVlKj4gdmFsdWVzSW5CbG9j
a3M7CiAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6ICp0aGlzKSB7CiAgICAgICAgIG91dC5w
cmludChkZWVwRHVtcCgqdGhpcywgYmxvY2spKTsKICAgICAgICAgdmFsdWVzSW5CbG9ja3MuYWRk
QWxsKCpibG9jayk7CkBAIC0yNDUsNyArMjQ1LDcgQEAgdm9pZCBQcm9jZWR1cmU6OmRlbGV0ZVZh
bHVlKFZhbHVlKiB2YWx1ZQogCiB2b2lkIFByb2NlZHVyZTo6ZGVsZXRlT3JwaGFucygpCiB7Ci0g
ICAgSW5kZXhTZXQ8VmFsdWU+IHZhbHVlc0luQmxvY2tzOworICAgIEluZGV4U2V0PFZhbHVlKj4g
dmFsdWVzSW5CbG9ja3M7CiAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6ICp0aGlzKQogICAg
ICAgICB2YWx1ZXNJbkJsb2Nrcy5hZGRBbGwoKmJsb2NrKTsKIApAQCAtMzMzLDcgKzMzMyw3IEBA
IFZhbHVlKiBQcm9jZWR1cmU6OmFkZFZhbHVlSW1wbChWYWx1ZSogdmEKIAogdm9pZCBQcm9jZWR1
cmU6OnNldEJsb2NrT3JkZXJJbXBsKFZlY3RvcjxCYXNpY0Jsb2NrKj4mIGJsb2NrcykKIHsKLSAg
ICBJbmRleFNldDxCYXNpY0Jsb2NrPiBibG9ja3NTZXQ7CisgICAgSW5kZXhTZXQ8QmFzaWNCbG9j
ayo+IGJsb2Nrc1NldDsKICAgICBibG9ja3NTZXQuYWRkQWxsKGJsb2Nrcyk7CiAKICAgICBmb3Ig
KEJhc2ljQmxvY2sqIGJsb2NrIDogKnRoaXMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1JlZHVjZURvdWJsZVRvRmxvYXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1JlZHVjZURvdWJsZVRvRmxvYXQuY3BwCShyZXZpc2lvbiAyMTQ0Mjcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VEb3VibGVUb0Zsb2F0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDI0LDE4ICs0MjQsMTggQEAgcHJpdmF0ZToKIAogICAgIC8vIFNl
dCBvZiBhbGwgdGhlIERvdWJsZSB2YWx1ZXMgdGhhdCBhcmUgYWN0dWFsbHkgdXNlZCBhcyBEb3Vi
bGUuCiAgICAgLy8gQ29udmVydGluZyBhbnkgb2YgdGhlbSB0byBGbG9hdCB3b3VsZCBsb3NlIHBy
ZWNpc2lvbi4KLSAgICBJbmRleFNldDxWYWx1ZT4gbV92YWx1ZXNVc2VkQXNEb3VibGU7CisgICAg
SW5kZXhTZXQ8VmFsdWUqPiBtX3ZhbHVlc1VzZWRBc0RvdWJsZTsKIAogICAgIC8vIFNldCBvZiBh
bGwgdGhlIFBoaSBvZiB0eXBlIERvdWJsZSB0aGF0IHJlYWxseSBjb250YWlucyBhIERvdWJsZS4K
ICAgICAvLyBBbnkgRG91YmxlIFBoaSBub3QgaW4gdGhlIHNldCBjYW4gYmUgY29udmVydGVkIHRv
IEZsb2F0IHdpdGhvdXQgbG9zaW5nIHByZWNpc2lvbi4KLSAgICBJbmRleFNldDxWYWx1ZT4gbV9w
aGlzQ29udGFpbmluZ0RvdWJsZTsKKyAgICBJbmRleFNldDxWYWx1ZSo+IG1fcGhpc0NvbnRhaW5p
bmdEb3VibGU7CiAKICAgICAvLyBBbnkgdmFsdWUgdGhhdCB3YXMgY29udmVydGVkIGZyb20gcHJv
ZHVjaW5nIGEgRG91YmxlIHRvIHByb2R1Y2luZyBhIEZsb2F0LgogICAgIC8vIFRoaXMgc2V0IGRv
ZXMgbm90IGluY2x1ZGUgUGhpLVVwc2lsb25zLgotICAgIEluZGV4U2V0PFZhbHVlPiBtX2NvbnZl
cnRlZFZhbHVlOworICAgIEluZGV4U2V0PFZhbHVlKj4gbV9jb252ZXJ0ZWRWYWx1ZTsKIAogICAg
IC8vIEFueSB2YWx1ZSB0aGF0IHByZXZpb3VzbHkgcHJvZHVjZWQgRG91YmxlIGFuZCBub3cgcHJv
ZHVjZSBGbG9hdC4KLSAgICBJbmRleFNldDxWYWx1ZT4gbV9jb252ZXJ0ZWRQaGlzOworICAgIElu
ZGV4U2V0PFZhbHVlKj4gbV9jb252ZXJ0ZWRQaGlzOwogfTsKIAogdm9pZCBwcmludEdyYXBoSWZD
b252ZXJ0aW5nKFByb2NlZHVyZSYgcHJvY2VkdXJlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAkocmV2aXNpb24gMjE0NDI3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMzkyLDcgKzIzOTIsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBraWxsRGVhZENvZGUo
KQogICAgIHsKLSAgICAgICAgR3JhcGhOb2RlV29ya2xpc3Q8VmFsdWUqLCBJbmRleFNldDxWYWx1
ZT4+IHdvcmtsaXN0OworICAgICAgICBHcmFwaE5vZGVXb3JrbGlzdDxWYWx1ZSosIEluZGV4U2V0
PFZhbHVlKj4+IHdvcmtsaXN0OwogICAgICAgICBWZWN0b3I8VXBzaWxvblZhbHVlKiwgNjQ+IHVw
c2lsb25zOwogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jKSB7CiAgICAg
ICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6ICpibG9jaykgewpAQCAtMjQyOSw3ICsyNDI5LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAg
IEluZGV4U2V0PFZhcmlhYmxlPiBsaXZlVmFyaWFibGVzOworICAgICAgICBJbmRleFNldDxWYXJp
YWJsZSo+IGxpdmVWYXJpYWJsZXM7CiAgICAgICAgIAogICAgICAgICBmb3IgKEJhc2ljQmxvY2sq
IGJsb2NrIDogbV9wcm9jKSB7CiAgICAgICAgICAgICBzaXplX3Qgc291cmNlSW5kZXggPSAwOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU1NBQ2FsY3VsYXRvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1NTQUNhbGN1bGF0b3IuaAkocmV2aXNp
b24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU1NBQ2FsY3VsYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTE1Niw3ICsxNTYsNyBAQCBwcml2YXRlOgogICAgICAgICBWZWN0b3I8
RGVmKj4gbV9waGlzOwogICAgIH07CiAgICAgCi0gICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgQmxv
Y2tEYXRhPiBtX2RhdGE7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jayosIEJsb2NrRGF0YT4gbV9k
YXRhOwogCiAgICAgRG9taW5hdG9ycyogbV9kb21pbmF0b3JzIHsgbnVsbHB0ciB9OwogICAgIFBy
b2NlZHVyZSYgbV9wcm9jOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXNlQ291
bnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXNlQ291bnRz
LmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1VzZUNv
dW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDgsNyArNDgsNyBAQCBwcml2YXRlOgogICAgICAg
ICB1bnNpZ25lZCBudW1Vc2luZ0luc3RydWN0aW9ucyB7IDAgfTsKICAgICB9OwogICAgIAotICAg
IEluZGV4TWFwPFZhbHVlLCBDb3VudHM+IG1fY291bnRzOworICAgIEluZGV4TWFwPFZhbHVlKiwg
Q291bnRzPiBtX2NvdW50czsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNyAr
MTIwLDcgQEAgU3RhdGljTG9jayBjcmFzaExvY2s7CiAKIFZNKiB2bTsKIAotc3RkOjp1bmlxdWVf
cHRyPENvbXBpbGF0aW9uPiBjb21waWxlKFByb2NlZHVyZSYgcHJvY2VkdXJlLCB1bnNpZ25lZCBv
cHRMZXZlbCA9IDEpCitzdGQ6OnVuaXF1ZV9wdHI8Q29tcGlsYXRpb24+IGNvbXBpbGUoUHJvY2Vk
dXJlJiBwcm9jZWR1cmUsIHVuc2lnbmVkIG9wdExldmVsID0gZGVmYXVsdE9wdExldmVsKCkpCiB7
CiAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8Q29tcGlsYXRpb24+KEIzOjpjb21waWxlKCp2
bSwgcHJvY2VkdXJlLCBvcHRMZXZlbCkpOwogfQpAQCAtOTkwLDYgKzk5MCw3IEBAIHZvaWQgdGVz
dE11bExvYWRUd2ljZSgpCiAKICAgICB0ZXN0KDApOwogICAgIHRlc3QoMSk7CisgICAgdGVzdCgy
KTsKIH0KIAogdm9pZCB0ZXN0TXVsQWRkQXJnc0xlZnQoKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lz
dGVyc0J5R3JhcGhDb2xvcmluZy5jcHAJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKEIzX0pJVCkKIAog
I2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFs
cy5oIgogI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgogI2luY2x1ZGUgIkFpckluc3RJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiQWlyTGl2ZW5lc3MuaCIKQEAgLTE1ODUsNiArMTU4Niw5IEBAIHBy
b3RlY3RlZDoKICAgICAgICAgbV9jb2FsZXNjaW5nQ2FuZGlkYXRlcy5jbGVhcigpOwogICAgICAg
ICBtX3dvcmtsaXN0TW92ZXMuY2xlYXIoKTsKIAorICAgICAgICAvLyBGSVhNRTogSXQgc2VlbXMg
bGlrZSB3ZSBkb24ndCBuZWVkIHRvIHJlY29tcHV0ZSBsaXZlbmVzcy4gV2UganVzdCBuZWVkIHRv
IHVwZGF0ZSBpdHMgZGF0YQorICAgICAgICAvLyBzdHJ1Y3R1cmVzIHNvIHRoYXQgaXQga25vd3Mg
dGhhdCB0aGUgbmV3bHkgaW50cm9kdWNlZCB0ZW1wb3JhcmllcyBhcmUgbm90IGxpdmUgYXQgYW55
IGJhc2ljCisgICAgICAgIC8vIGJsb2NrIGJvdW5kYXJ5LiBUaGlzIHNob3VsZCB0cml2aWFsbHkg
YmUgdHJ1ZSBmb3Igbm93LgogICAgICAgICBUbXBMaXZlbmVzczxiYW5rPiBsaXZlbmVzcyhtX2Nv
ZGUpOwogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7CiAgICAgICAg
ICAgICB0eXBlbmFtZSBUbXBMaXZlbmVzczxiYW5rPjo6TG9jYWxDYWxjIGxvY2FsQ2FsYyhsaXZl
bmVzcywgYmxvY2spOwpAQCAtMTc5OCw3ICsxODAyLDcgQEAgcHVibGljOgogICAgICAgICBtX251
bUl0ZXJhdGlvbnMgPSAwOwogICAgICAgICBhbGxvY2F0ZU9uQmFuazxGUD4oKTsKIAotICAgICAg
ICBmaXhTcGlsbHNBZnRlclRlcm1pbmFscygpOworICAgICAgICBmaXhTcGlsbHNBZnRlclRlcm1p
bmFscyhtX2NvZGUpOwogCiAgICAgICAgIGlmIChyZXBvcnRTdGF0cykKICAgICAgICAgICAgIGRh
dGFMb2coIk51bSBpdGVyYXRpb25zID0gIiwgbV9udW1JdGVyYXRpb25zLCAiXG4iKTsKQEAgLTE5
NTQsNyArMTk1OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICAgICAgaW5zdC5mb3JFYWNoVG1wRmFzdChbJl0gKFRtcCYgdG1wKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICh0bXAuaXNSZWcoKSB8fCB0bXAuaXNHUCgpID09IChiYW5rICE9IEdQKSkKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHRtcC5pc1JlZygpIHx8IHRtcC5iYW5rKCkgIT0gYmFuaykK
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAgICAgICAgICBU
bXAgYWxpYXNUbXAgPSBhbGxvY2F0b3IuZ2V0QWxpYXModG1wKTsKQEAgLTIxMzIsNyArMjEzNiw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIC8vIG90aGVyLiBBcyB3ZWxsLCB3ZSBu
ZWVkIHRoaXMgaWYgdGhlIHByZXZpb3VzIGluc3RydWN0aW9uIGhhZCBhbnkgbGF0ZSBlZmZlY3Rz
LAogICAgICAgICAgICAgICAgICAgICAvLyBzaW5jZSBvdGhlcndpc2UgdGhlIHNjcmF0Y2ggd291
bGQgYXBwZWFyIHRvIGludGVyZmVyZSB3aXRoIHRob3NlLiBPbiB0aGUgb3RoZXIKICAgICAgICAg
ICAgICAgICAgICAgLy8gaGFuZCwgdGhlIGxhdGUgdXNlIGFkZGVkIGF0IHRoZSBlbmQgb2YgdGhp
cyBzcGlsbCBtb3ZlIChwcmV2aW91c2x5IGl0IHdhcyBqdXN0IGEKLSAgICAgICAgICAgICAgICAg
ICAgLy8gbGF0ZSBkZWYpIGRvZXNuJ3QgY2hhbmdlIHRoZSBwYWRkaW5nIHNpdHVhdGlvbjogdGhl
IGxhdGUgZGVmIHdvdWxkIGhhdmUgYWxyZWFkeQorICAgICAgICAgICAgICAgICAgICAvLyBsYXRl
IGRlZikgZG9lc24ndCBjaGFuZ2UgdGhlIHBhZGRpbmcgc2l0dWF0aW9uLjogdGhlIGxhdGUgZGVm
IHdvdWxkIGhhdmUgYWxyZWFkeQogICAgICAgICAgICAgICAgICAgICAvLyBjYXVzZWQgaXQgdG8g
cmVwb3J0IGhhc0xhdGVVc2VPckRlZiBpbiBJbnN0OjpuZWVkc1BhZGRpbmcuCiAgICAgICAgICAg
ICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoaW5zdEluZGV4LCBOb3AsIGluc3Qub3JpZ2lu
KTsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0yMTY5LDkgKzIxNzMsMTIgQEAg
cHJpdmF0ZToKIAogICAgICAgICAgICAgICAgICAgICB0bXAgPSBtX2NvZGUubmV3VG1wKGJhbmsp
OwogICAgICAgICAgICAgICAgICAgICB1bnNwaWxsYWJsZVRtcHMuYWRkKEFic29sdXRlVG1wTWFw
cGVyPGJhbms+OjphYnNvbHV0ZUluZGV4KHRtcCkpOworICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT0gQXJnOjpTY3JhdGNoKQorICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICAgICAgICAgIEFyZyBhcmcgPSBBcmc6
OnN0YWNrKHN0YWNrU2xvdEVudHJ5LT52YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChB
cmc6OmlzQW55VXNlKHJvbGUpICYmIHJvbGUgIT0gQXJnOjpTY3JhdGNoKQorICAgICAgICAgICAg
ICAgICAgICBpZiAoQXJnOjppc0FueVVzZShyb2xlKSkKICAgICAgICAgICAgICAgICAgICAgICAg
IGluc2VydGlvblNldC5pbnNlcnQoaW5zdEluZGV4LCBtb3ZlLCBpbnN0Lm9yaWdpbiwgYXJnLCB0
bXApOwogICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0FueURlZihyb2xlKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoaW5zdEluZGV4ICsgMSwgbW92
ZSwgaW5zdC5vcmlnaW4sIHRtcCwgYXJnKTsKQEAgLTIxODcsNjYgKzIxOTQsNiBAQCBwcml2YXRl
OgogICAgICAgICB9CiAgICAgfQogCi0gICAgdm9pZCBmaXhTcGlsbHNBZnRlclRlcm1pbmFscygp
Ci0gICAgewotICAgICAgICAvLyBCZWNhdXNlIHRoZXJlIG1heSBiZSB0ZXJtaW5hbHMgdGhhdCBw
cm9kdWNlIHZhbHVlcywgSVJDIG1heQotICAgICAgICAvLyB3YW50IHRvIHNwaWxsIHRob3NlIHRl
cm1pbmFscy4gSXQnbGwgaGFwcGVuIHRvIHNwaWxsIGl0IGFmdGVyCi0gICAgICAgIC8vIHRoZSB0
ZXJtaW5hbC4gSWYgd2UgbGVmdCB0aGUgZ3JhcGggaW4gdGhpcyBzdGF0ZSwgaXQnZCBiZSBpbnZh
bGlkCi0gICAgICAgIC8vIGJlY2F1c2UgYSB0ZXJtaW5hbCBtdXN0IGJlIHRoZSBsYXN0IGluc3Ry
dWN0aW9uIGluIGEgYmxvY2suCi0gICAgICAgIC8vIFdlIGZpeCB0aGF0IGhlcmUuCi0KLSAgICAg
ICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChtX2NvZGUpOwotCi0gICAgICAgIGJvb2wgYWRk
ZWRCbG9ja3MgPSBmYWxzZTsKLQotICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9j
b2RlKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCB0ZXJtaW5hbEluZGV4ID0gYmxvY2stPnNpemUo
KTsKLSAgICAgICAgICAgIGJvb2wgZm91bmRUZXJtaW5hbCA9IGZhbHNlOwotICAgICAgICAgICAg
d2hpbGUgKHRlcm1pbmFsSW5kZXgtLSkgewotICAgICAgICAgICAgICAgIGlmIChibG9jay0+YXQo
dGVybWluYWxJbmRleCkuaXNUZXJtaW5hbCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvdW5k
VGVybWluYWwgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGZvdW5kVGVy
bWluYWwsIGZvdW5kVGVybWluYWwpOwotCi0gICAgICAgICAgICBpZiAodGVybWluYWxJbmRleCA9
PSBibG9jay0+c2l6ZSgpIC0gMSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAg
ICAgICAgLy8gVGhlcmUgbXVzdCBiZSBpbnN0cnVjdGlvbnMgYWZ0ZXIgdGhlIHRlcm1pbmFsIGJl
Y2F1c2UgaXQncyBub3QgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24uCi0gICAgICAgICAgICBBU1NFUlQo
dGVybWluYWxJbmRleCA8IGJsb2NrLT5zaXplKCkgLSAxKTsKLSAgICAgICAgICAgIFZlY3RvcjxJ
bnN0LCAxPiBpbnN0c1RvTW92ZTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHRlcm1p
bmFsSW5kZXggKyAxOyBpIDwgYmxvY2stPnNpemUoKTsgaSsrKQotICAgICAgICAgICAgICAgIGlu
c3RzVG9Nb3ZlLmFwcGVuZChibG9jay0+YXQoaSkpOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoaW5zdHNUb01vdmUuc2l6ZSgpKTsKLQotICAgICAgICAgICAgZm9yIChGcmVxdWVudGVkQmxv
Y2smIGZyZXF1ZW50ZWRTdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29ycygpKSB7Ci0gICAgICAg
ICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yID0gZnJlcXVlbnRlZFN1Y2Nlc3Nvci5ibG9j
aygpOwotICAgICAgICAgICAgICAgIC8vIElmIHN1Y2Nlc3NvcidzIG9ubHkgcHJlZGVjZXNzb3Ig
aXMgYmxvY2ssIHdlIGNhbiBwbGFudCB0aGUgc3BpbGwgaW5zaWRlCi0gICAgICAgICAgICAgICAg
Ly8gdGhlIHN1Y2Nlc3Nvci4gT3RoZXJ3aXNlLCB3ZSBtdXN0IHNwbGl0IHRoZSBjcml0aWNhbCBl
ZGdlIGFuZCBjcmVhdGUKLSAgICAgICAgICAgICAgICAvLyBhIG5ldyBibG9jayBmb3IgdGhlIHNw
aWxsLgotICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzb3ItPm51bVByZWRlY2Vzc29ycygpID09
IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydEluc3RzKDAsIGlu
c3RzVG9Nb3ZlKTsKLSAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoc3Vj
Y2Vzc29yKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBh
ZGRlZEJsb2NrcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBwcm9i
YWJseSB3YW50IGJldHRlciBibG9jayBvcmRlcmluZyBoZXJlLgotICAgICAgICAgICAgICAgICAg
ICBCYXNpY0Jsb2NrKiBuZXdCbG9jayA9IG1fY29kZS5hZGRCbG9jaygpOwotICAgICAgICAgICAg
ICAgICAgICBmb3IgKGNvbnN0IEluc3QmIGluc3QgOiBpbnN0c1RvTW92ZSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG5ld0Jsb2NrLT5hcHBlbmRJbnN0KGluc3QpOwotICAgICAgICAgICAgICAg
ICAgICBuZXdCbG9jay0+YXBwZW5kSW5zdChJbnN0KEp1bXAsIGluc3RzVG9Nb3ZlLmxhc3QoKS5v
cmlnaW4pKTsKLSAgICAgICAgICAgICAgICAgICAgbmV3QmxvY2stPnN1Y2Nlc3NvcnMoKS5hcHBl
bmQoc3VjY2Vzc29yKTsKLSAgICAgICAgICAgICAgICAgICAgZnJlcXVlbnRlZFN1Y2Nlc3Nvci5i
bG9jaygpID0gbmV3QmxvY2s7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBibG9jay0+cmVzaXplKHRlcm1pbmFsSW5kZXggKyAxKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChhZGRlZEJsb2NrcykKLSAgICAgICAgICAgIG1fY29kZS5yZXNldFJlYWNo
YWJpbGl0eSgpOwotICAgIH0KLQogICAgIENvZGUmIG1fY29kZTsKICAgICBUbXBXaWR0aCBtX3Rt
cFdpZHRoOwogICAgIFVzZUNvdW50czxUbXA+JiBtX3VzZUNvdW50czsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVS
ZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckFsbG9j
YXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5j
bHVkZSAiQWlyQXJnSW5saW5lcy5oIgorI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJB
aXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5oIgorI2luY2x1ZGUgIkFpclBoYXNlSW5zZXJ0aW9u
U2V0LmgiCisjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKKyNpbmNsdWRlICJBaXJMaXZlbmVz
cy5oIgorI2luY2x1ZGUgIkFpclBhZEludGVyZmVyZW5jZS5oIgorI2luY2x1ZGUgIkFpclBoYXNl
U2NvcGUuaCIKKyNpbmNsdWRlICJBaXJSZWdMaXZlbmVzcy5oIgorI2luY2x1ZGUgIkFpclRtcElu
bGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKyNpbmNsdWRlIDx3dGYvUmFuZ2Uu
aD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitu
YW1lc3BhY2UgeworCitOT19SRVRVUk5fRFVFX1RPX0NSQVNIIE5FVkVSX0lOTElORSB2b2lkIGNy
YXNoKCkKK3sKKyAgICBDUkFTSCgpOworfQorCisjdW5kZWYgUkVMRUFTRV9BU1NFUlQKKyNkZWZp
bmUgUkVMRUFTRV9BU1NFUlQoYXNzZXJ0aW9uKSBkbyB7IFwKKyAgICBpZiAoIShhc3NlcnRpb24p
KSB7IFwKKyAgICAgICAgV1RGUmVwb3J0QXNzZXJ0aW9uRmFpbHVyZShfX0ZJTEVfXywgX19MSU5F
X18sIFdURl9QUkVUVFlfRlVOQ1RJT04sICNhc3NlcnRpb24pOyBcCisgICAgICAgIGNyYXNoKCk7
IFwKKyAgICB9IFwKK30gd2hpbGUgKDApCisKK2Jvb2wgdmVyYm9zZSgpIHsgcmV0dXJuIE9wdGlv
bnM6OmFpckxpbmVhclNjYW5WZXJib3NlKCk7IH0KKworLy8gUGhhc2UgY29uc3RhbnRzIHdlIHVz
ZSBmb3IgdGhlIFBoYXNlSW5zZXJ0aW9uU2V0LgorY29uc3QgdW5zaWduZWQgZmlyc3RQaGFzZSA9
IDA7Citjb25zdCB1bnNpZ25lZCBzZWNvbmRQaGFzZSA9IDE7CisKK3R5cGVkZWYgUmFuZ2U8c2l6
ZV90PiBJbnRlcnZhbDsKKworc3RydWN0IFRtcERhdGEgeworICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgb3V0LnByaW50KCJ7aW50ZXJ2YWwgPSAi
LCBpbnRlcnZhbCwgIiwgc3BpbGxlZCA9ICIsIHBvaW50ZXJEdW1wKHNwaWxsZWQpLCAiLCBhc3Np
Z25lZCA9ICIsIGFzc2lnbmVkLCAiLCBpc1Vuc3BpbGxhYmxlID0gIiwgaXNVbnNwaWxsYWJsZSwg
IiwgcG9zc2libGVSZWdzID0gIiwgcG9zc2libGVSZWdzLCAiLCBkaWRCdWlsZFBvc3NpYmxlUmVn
cyA9ICIsIGRpZEJ1aWxkUG9zc2libGVSZWdzLCAifSIpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IHZhbGlkYXRlKCkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEoc3BpbGxlZCAmJiBh
c3NpZ25lZCkpOworICAgIH0KKyAgICAKKyAgICBJbnRlcnZhbCBpbnRlcnZhbDsKKyAgICBTdGFj
a1Nsb3QqIHNwaWxsZWQgeyBudWxscHRyIH07CisgICAgUmVnaXN0ZXJTZXQgcG9zc2libGVSZWdz
OworICAgIFJlZyBhc3NpZ25lZDsKKyAgICBib29sIGlzVW5zcGlsbGFibGUgeyBmYWxzZSB9Owor
ICAgIGJvb2wgZGlkQnVpbGRQb3NzaWJsZVJlZ3MgeyBmYWxzZSB9OworfTsKKworc3RydWN0IENs
b2JiZXIgeworICAgIENsb2JiZXIoKQorICAgIHsKKyAgICB9CisgICAgCisgICAgQ2xvYmJlcihz
aXplX3QgaW5kZXgsIFJlZ2lzdGVyU2V0IHJlZ3MpCisgICAgICAgIDogaW5kZXgoaW5kZXgpCisg
ICAgICAgICwgcmVncyhyZWdzKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBvdXQucHJpbnQoaW5kZXgsICI6
IiwgcmVncyk7CisgICAgfQorICAgIAorICAgIHNpemVfdCBpbmRleCB7IDAgfTsKKyAgICBSZWdp
c3RlclNldCByZWdzOworfTsKKwordGVtcGxhdGU8QmFuayBiYW5rPgorY2xhc3MgTGluZWFyU2Nh
biB7CitwdWJsaWM6CisgICAgTGluZWFyU2NhbihDb2RlJiBjb2RlKQorICAgICAgICA6IG1fY29k
ZShjb2RlKQorICAgICAgICAsIG1fc3RhcnRJbmRleChjb2RlLnNpemUoKSkKKyAgICAgICAgLCBt
X21hcChjb2RlLm51bVRtcHMoYmFuaykpCisgICAgICAgICwgbV9pbnNlcnRpb25TZXRzKGNvZGUu
c2l6ZSgpKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBydW4oKQorICAgIHsKKyAgICAg
ICAgYnVpbGRSZWdpc3RlclNldCgpOworICAgICAgICBidWlsZEluZGljZXMoKTsKKyAgICAgICAg
YnVpbGRJbnRlcnZhbHMoKTsKKyAgICAgICAgaWYgKHNob3VsZFNwaWxsRXZlcnl0aGluZygpKSB7
CisgICAgICAgICAgICBzcGlsbEV2ZXJ5dGhpbmcoKTsKKyAgICAgICAgICAgIGVtaXRTcGlsbENv
ZGUoKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICBwcmVwYXJl
SW50ZXJ2YWxzKCk7CisgICAgICAgICAgICBhdHRlbXB0U2NhbigpOworICAgICAgICAgICAgaWYg
KCFtX2RpZFNwaWxsKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZW1pdFNw
aWxsQ29kZSgpOworICAgICAgICB9CisgICAgICAgIGluc2VydFNwaWxsQ29kZSgpOworICAgICAg
ICBhc3NpZ25SZWdpc3RlcnMoKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHZvaWQgYnVp
bGRSZWdpc3RlclNldCgpCisgICAgeworICAgICAgICBtX3JlZ2lzdGVycyA9IG1fY29kZS5yZWdz
SW5Qcmlvcml0eU9yZGVyKGJhbmspOworICAgICAgICBtX3JlZ2lzdGVyU2V0LnNldEFsbChtX3Jl
Z2lzdGVycyk7CisgICAgfQorCisgICAgdm9pZCBidWlsZEluZGljZXMoKQorICAgIHsKKyAgICAg
ICAgc2l6ZV90IGluZGV4ID0gMDsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1f
Y29kZSkgeworICAgICAgICAgICAgbV9zdGFydEluZGV4W2Jsb2NrXSA9IGluZGV4OworICAgICAg
ICAgICAgaW5kZXggKz0gYmxvY2stPnNpemUoKSAqIDI7CisgICAgICAgIH0KKyAgICB9CisgICAg
CisgICAgc2l6ZV90IGluZGV4T2ZIZWFkKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fc3RhcnRJbmRleFtibG9ja107CisgICAgfQorICAgIAorICAgIHNpemVfdCBp
bmRleE9mVGFpbChCYXNpY0Jsb2NrKiBibG9jaykKKyAgICB7CisgICAgICAgIHJldHVybiBpbmRl
eE9mSGVhZChibG9jaykgKyBibG9jay0+c2l6ZSgpICogMjsKKyAgICB9CisgICAgCisgICAgSW50
ZXJ2YWwgaW50ZXJ2YWwoc2l6ZV90IGluZGV4T2ZFYXJseSwgQXJnOjpUaW1pbmcgdGltaW5nKQor
ICAgIHsKKyAgICAgICAgc3dpdGNoICh0aW1pbmcpIHsKKyAgICAgICAgY2FzZSBBcmc6Ok9ubHlF
YXJseToKKyAgICAgICAgICAgIHJldHVybiBJbnRlcnZhbChpbmRleE9mRWFybHkpOworICAgICAg
ICBjYXNlIEFyZzo6T25seUxhdGU6CisgICAgICAgICAgICByZXR1cm4gSW50ZXJ2YWwoaW5kZXhP
ZkVhcmx5ICsgMSk7CisgICAgICAgIGNhc2UgQXJnOjpFYXJseUFuZExhdGU6CisgICAgICAgICAg
ICByZXR1cm4gSW50ZXJ2YWwoaW5kZXhPZkVhcmx5LCBpbmRleE9mRWFybHkgKyAyKTsKKyAgICAg
ICAgfQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIEludGVy
dmFsKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgYnVpbGRJbnRlcnZhbHMoKQorICAgIHsKKyAg
ICAgICAgVG1wTGl2ZW5lc3M8YmFuaz4gbGl2ZW5lc3MobV9jb2RlKTsKKyAgICAgICAgCisgICAg
ICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsKKyAgICAgICAgICAgIHNpemVf
dCBpbmRleE9mSGVhZCA9IHRoaXMtPmluZGV4T2ZIZWFkKGJsb2NrKTsKKyAgICAgICAgICAgIHNp
emVfdCBpbmRleE9mVGFpbCA9IHRoaXMtPmluZGV4T2ZUYWlsKGJsb2NrKTsKKyAgICAgICAgICAg
IGlmICh2ZXJib3NlKCkpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJBdCBibG9jayAiLCBw
b2ludGVyRHVtcChibG9jayksICJcbiIpOworICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgaW5k
ZXhPZkhlYWQgPSAiLCBpbmRleE9mSGVhZCwgIlxuIik7CisgICAgICAgICAgICAgICAgZGF0YUxv
ZygiICBpZG5leE9mVGFpbCA9ICIsIGluZGV4T2ZUYWlsLCAiXG4iKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGZvciAoVG1wIHRtcCA6IGxpdmVuZXNzLmxpdmVBdEhlYWQoYmxvY2spKSB7
CisgICAgICAgICAgICAgICAgaWYgKCF0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAg
bV9tYXBbdG1wXS5pbnRlcnZhbCB8PSBJbnRlcnZhbChpbmRleE9mSGVhZCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBmb3IgKFRtcCB0bXAgOiBsaXZlbmVzcy5saXZlQXRUYWlsKGJsb2Nr
KSkgeworICAgICAgICAgICAgICAgIGlmICghdG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAg
ICAgIG1fbWFwW3RtcF0uaW50ZXJ2YWwgfD0gSW50ZXJ2YWwoaW5kZXhPZlRhaWwpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRl
eCA9IDA7IGluc3RJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsraW5zdEluZGV4KSB7CisgICAgICAg
ICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOworICAgICAgICAgICAg
ICAgIHNpemVfdCBpbmRleE9mRWFybHkgPSBpbmRleE9mSGVhZCArIGluc3RJbmRleCAqIDI7Cisg
ICAgICAgICAgICAgICAgaW5zdC5mb3JFYWNoVG1wKAorICAgICAgICAgICAgICAgICAgICBbJl0g
KFRtcCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwgQmFuayB0bXBCYW5rLCBXaWR0aCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHRtcC5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXBCYW5rICE9IGJh
bmspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
ICAgICAgICAgbV9tYXBbdG1wXS5pbnRlcnZhbCB8PSBpbnRlcnZhbChpbmRleE9mRWFybHksIEFy
Zzo6dGltaW5nKHJvbGUpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIFJlZ0xpdmVuZXNzOjpMb2NhbENhbGMgbG9jYWxDYWxjKGxpdmVuZXNz
LCBibG9jayk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGF1dG8gcmVjb3JkID0gWyZdICh1
bnNpZ25lZCBpbnN0SW5kZXgpIHsKKyAgICAgICAgICAgICAgICBSZWdpc3RlclNldCByZWdzID0g
bG9jYWxDYWxjLmxpdmUoKTsKKyAgICAgICAgICAgICAgICBpZiAoSW5zdCogcHJldiA9IGJsb2Nr
LT5nZXQoaW5zdEluZGV4IC0gMSkpIHsKKyAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQg
cHJldlJlZ3MgPSByZWdzOworICAgICAgICAgICAgICAgICAgICBwcmV2LT5mb3JFYWNoPFJlZz4o
CisgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKFJlZyYgcmVnLCBBcmc6OlJvbGUgcm9sZSwg
QmFuaywgV2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0xh
dGVEZWYocm9sZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZSZWdzLmFk
ZChyZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAg
IGlmIChwcmV2LT5raW5kLm9wY29kZSA9PSBQYXRjaCkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHByZXZSZWdzLm1lcmdlKHByZXYtPmV4dHJhQ2xvYmJlcmVkUmVncygpKTsKKyAgICAgICAgICAg
ICAgICAgICAgcHJldlJlZ3MuZmlsdGVyKG1fcmVnaXN0ZXJTZXQpOworICAgICAgICAgICAgICAg
ICAgICBpZiAoIXByZXZSZWdzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1f
Y2xvYmJlcnMuYXBwZW5kKENsb2JiZXIoaW5kZXhPZkhlYWQgKyBpbnN0SW5kZXggKiAyIC0gMSwg
cHJldlJlZ3MpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKEluc3Qq
IG5leHQgPSBibG9jay0+Z2V0KGluc3RJbmRleCkpIHsKKyAgICAgICAgICAgICAgICAgICAgUmVn
aXN0ZXJTZXQgbmV4dFJlZ3MgPSByZWdzOworICAgICAgICAgICAgICAgICAgICBuZXh0LT5mb3JF
YWNoPFJlZz4oCisgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKFJlZyYgcmVnLCBBcmc6OlJv
bGUgcm9sZSwgQmFuaywgV2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
QXJnOjppc0Vhcmx5RGVmKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
ZXh0UmVncy5hZGQocmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgICAgICAgICBpZiAobmV4dC0+a2luZC5vcGNvZGUgPT0gUGF0Y2gpCisgICAgICAgICAgICAg
ICAgICAgICAgICBuZXh0UmVncy5tZXJnZShuZXh0LT5leHRyYUVhcmx5Q2xvYmJlcmVkUmVncygp
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFuZXh0UmVncy5pc0VtcHR5KCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICBtX2Nsb2JiZXJzLmFwcGVuZChDbG9iYmVyKGluZGV4T2ZIZWFkICsg
aW5zdEluZGV4ICogMiwgbmV4dFJlZ3MpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9OworICAgICAgICAgICAgCisgICAgICAgICAgICByZWNvcmQoYmxvY2stPnNpemUoKSk7Cisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJ
bmRleC0tOykgeworICAgICAgICAgICAgICAgIGxvY2FsQ2FsYy5leGVjdXRlKGluc3RJbmRleCk7
CisgICAgICAgICAgICAgICAgcmVjb3JkKGluc3RJbmRleCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0ZDo6c29ydCgKKyAgICAgICAgICAgIG1fY2xvYmJl
cnMuYmVnaW4oKSwgbV9jbG9iYmVycy5lbmQoKSwKKyAgICAgICAgICAgIFtdIChDbG9iYmVyJiBh
LCBDbG9iYmVyJiBiKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYS5pbmRleCA8
IGIuaW5kZXg7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIGlmICh2ZXJib3Nl
KCkpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIkludGVydmFsczpcbiIpOworICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCB0bXBJbmRleCA9IDA7IHRtcEluZGV4IDwgbV9jb2RlLm51bVRtcHMoYmFu
ayk7ICsrdG1wSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBUbXAgdG1wID0gVG1wOjp0bXBGb3JJ
bmRleChiYW5rLCB0bXBJbmRleCk7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICIsIHRt
cCwgIjogIiwgbV9tYXBbdG1wXSwgIlxuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgYm9vbCBzaG91bGRTcGlsbEV2ZXJ5dGhpbmcoKQorICAgIHsKKyAgICAg
ICAgaWYgKCFPcHRpb25zOjphaXJMaW5lYXJTY2FuU3BpbGxzRXZlcnl0aGluZygpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgLy8gWW91J3JlIG1lYW50IHRv
IGhhY2sgdGhpcyBzbyB0aGF0IHlvdSBzZWxlY3RpdmVseSBzcGlsbCBldmVyeXRoaW5nIGRlcGVu
ZGluZyBvbiByZWFzb25zLgorICAgICAgICAvLyBUaGF0J3Mgc3VwZXIgdXNlZnVsIGZvciBkZWJ1
Z2dpbmcuCisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHZvaWQgc3Bp
bGxFdmVyeXRoaW5nKCkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgdG1wSW5kZXggPSAw
OyB0bXBJbmRleCA8IG1fY29kZS5udW1UbXBzKGJhbmspOyArK3RtcEluZGV4KQorICAgICAgICAg
ICAgc3BpbGwoVG1wOjp0bXBGb3JJbmRleChiYW5rLCB0bXBJbmRleCkpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIHByZXBhcmVJbnRlcnZhbHMoKQorICAgIHsKKyAgICAgICAgbV90bXBzLnJlc2l6
ZSgwKTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgdG1wSW5kZXggPSAwOyB0bXBJ
bmRleCA8IG1fY29kZS5udW1UbXBzKGJhbmspOyArK3RtcEluZGV4KSB7CisgICAgICAgICAgICBU
bXAgdG1wID0gVG1wOjp0bXBGb3JJbmRleChiYW5rLCB0bXBJbmRleCk7CisgICAgICAgICAgICBU
bXBEYXRhJiBkYXRhID0gbV9tYXBbdG1wXTsKKyAgICAgICAgICAgIGlmIChkYXRhLnNwaWxsZWQp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGRh
dGEuYXNzaWduZWQgPSBSZWcoKTsKKyAgICAgICAgICAgIG1fdG1wcy5hcHBlbmQodG1wKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RkOjpzb3J0KAorICAgICAgICAgICAgbV90bXBz
LmJlZ2luKCksIG1fdG1wcy5lbmQoKSwKKyAgICAgICAgICAgIFsmXSAoVG1wJiBhLCBUbXAmIGIp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9tYXBbYV0uaW50ZXJ2YWwuYmVnaW4oKSA8IG1f
bWFwW2JdLmludGVydmFsLmJlZ2luKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAg
ICAgIGlmICh2ZXJib3NlKCkpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIlRtcHM6ICIsIGxpc3RE
dW1wKG1fdG1wcyksICJcbiIpOworICAgICAgICAgICAgZGF0YUxvZygiQ2xvYmJlcnM6ICIsIGxp
c3REdW1wKG1fY2xvYmJlcnMpLCAiXG4iKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBU
bXAgYWRkU3BpbGxUbXBXaXRoSW50ZXJ2YWwoSW50ZXJ2YWwgaW50ZXJ2YWwpCisgICAgeworICAg
ICAgICBUbXBEYXRhIGRhdGE7CisgICAgICAgIGRhdGEuaW50ZXJ2YWwgPSBpbnRlcnZhbDsKKyAg
ICAgICAgZGF0YS5pc1Vuc3BpbGxhYmxlID0gdHJ1ZTsKKyAgICAgICAgCisgICAgICAgIFRtcCB0
bXAgPSBtX2NvZGUubmV3VG1wKGJhbmspOworICAgICAgICBtX21hcC5hcHBlbmQodG1wLCBkYXRh
KTsKKyAgICAgICAgcmV0dXJuIHRtcDsKKyAgICB9CisgICAgCisgICAgdm9pZCBhdHRlbXB0U2Nh
bigpCisgICAgeworICAgICAgICAvLyBUaGlzIGlzIG1vZGVsZWQgYWZ0ZXIgTGluZWFyU2NhblJl
Z2lzdGVyQWxsb2NhdGlvbiBpbiBGaWcuIDEgaW4KKyAgICAgICAgLy8gaHR0cDovL2RsLmFjbS5v
cmcvY2l0YXRpb24uY2ZtP2lkPTMzMDI1MC4KKworICAgICAgICBtX2RpZFNwaWxsID0gZmFsc2U7
CisgICAgICAgIG1fYWN0aXZlLmNsZWFyKCk7CisgICAgICAgIG1fYWN0aXZlUmVncyA9IFJlZ2lz
dGVyU2V0KCk7CisgICAgICAgIAorICAgICAgICBzaXplX3QgY2xvYmJlckluZGV4ID0gMDsKKyAg
ICAgICAgZm9yIChUbXAmIHRtcCA6IG1fdG1wcykgeworICAgICAgICAgICAgVG1wRGF0YSYgZW50
cnkgPSBtX21hcFt0bXBdOworICAgICAgICAgICAgc2l6ZV90IGluZGV4ID0gZW50cnkuaW50ZXJ2
YWwuYmVnaW4oKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHZlcmJvc2UoKSkgewor
ICAgICAgICAgICAgICAgIGRhdGFMb2coIkluZGV4ICMiLCBpbmRleCwgIjogIiwgdG1wLCAiXG4i
KTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICIsIHRtcCwgIjogIiwgZW50cnksICJcbiIp
OworICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgY2xvYmJlckluZGV4ID0gIiwgY2xvYmJlcklu
ZGV4LCAiXG4iKTsKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGNvdWxkIGJlIHNvIG11Y2ggZmFz
dGVyLgorICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9jb2RlWzBdOworICAg
ICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogY2FuZGlkYXRlQmxvY2sgOiBtX2NvZGUpIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKG1fc3RhcnRJbmRleFtjYW5kaWRhdGVCbG9ja10gPiBp
bmRleCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICBibG9jayA9IGNhbmRpZGF0ZUJsb2NrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpbnN0SW5kZXggPSAoaW5kZXggLSBtX3N0YXJ0SW5kZXhbYmxvY2tdICsg
MSkgLyAyOworICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgQXQ6ICIsIHBvaW50ZXJEdW1wKGJs
b2NrKSwgIiwgaW5zdEluZGV4ID0gIiwgaW5zdEluZGV4LCAiXG4iKTsKKyAgICAgICAgICAgICAg
ICBkYXRhTG9nKCIgICAgUHJldjogIiwgcG9pbnRlckR1bXAoYmxvY2stPmdldChpbnN0SW5kZXgg
LSAxKSksICJcbiIpOworICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBOZXh0OiAiLCBwb2lu
dGVyRHVtcChibG9jay0+Z2V0KGluc3RJbmRleCkpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBk
YXRhTG9nKCIgIEFjdGl2ZTpcbiIpOworICAgICAgICAgICAgICAgIGZvciAoVG1wIHRtcCA6IG1f
YWN0aXZlKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgIiwgdG1wLCAiOiAiLCBt
X21hcFt0bXBdLCAiXG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgLy8gVGhpcyBpcyBFeHBpcmVPbGRJbnRlcnZhbHMgaW4gRmlnLiAxLgorICAgICAgICAgICAg
d2hpbGUgKCFtX2FjdGl2ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBUbXAgdG1wID0g
bV9hY3RpdmUuZmlyc3QoKTsKKyAgICAgICAgICAgICAgICBUbXBEYXRhJiBlbnRyeSA9IG1fbWFw
W3RtcF07CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgYm9vbCBleHBpcmVkID0g
ZW50cnkuaW50ZXJ2YWwuZW5kKCkgPD0gaW5kZXg7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgaWYgKCFleHBpcmVkKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX2FjdGl2ZS5yZW1vdmVGaXJzdCgpOworICAg
ICAgICAgICAgICAgIG1fYWN0aXZlUmVncy5yZW1vdmUoZW50cnkuYXNzaWduZWQpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAvLyBJZiBuZWNlc3NhcnksIGNvbXB1dGUgdGhlIHNldCBv
ZiByZWdpc3RlcnMgdGhhdCB0aGlzIHRtcCBjb3VsZCBldmVuIHVzZS4gVGhpcyBpcyBub3QKKyAg
ICAgICAgICAgIC8vIHBhcnQgb2YgRmlnLiAxLCBidXQgaXQncyBhIHRlY2huaXF1ZSB0aGF0IHRo
ZSBhdXRob3JzIGNsYWltIHRvIGhhdmUgaW1wbGVtZW50ZWQgaW4gb25lIG9mCisgICAgICAgICAg
ICAvLyB0aGVpciB0d28gaW1wbGVtZW50YXRpb25zLiBUaGVyZSBtYXkgYmUgb3RoZXIgbW9yZSBl
ZmZpY2llbnQgd2F5cyB0byBkbyB0aGlzLCBidXQgdGhpcworICAgICAgICAgICAgLy8gaW1wbGVt
ZW50YXRpb24gZ2V0cyBzb21lIHBlcmYgd2lucyBmcm9tIHBpZ2d5LWJhY2tpbmcgdGhpcyBjYWxj
dWxhdGlvbiBpbiB0aGUgc2Nhbi4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBOb3Rl
IHRoYXQgdGhlIGRpZEJ1aWxkIGZsYWcgc3RpY2tzIHRocm91Z2ggc3BpbGxpbmcuIFNwaWxsaW5n
IGRvZXNuJ3QgY2hhbmdlIHRoZQorICAgICAgICAgICAgLy8gaW50ZXJmZXJlbmNlIHNpdHVhdGlv
bi4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBOb3RlIHRoYXQgd2UgY291bGQgc2hv
cnQtY2lyY3VpdCB0aGlzIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHNwaWxsYWJsZSB0bXAsIHRo
ZXJlIGFyZSBubworICAgICAgICAgICAgLy8gZnJlZSByZWdpc3RlcnMsIGFuZCB0aGlzIHJlZ2lz
dGVyJ3MgaW50ZXJ2YWwgZW5kcyBhZnRlciB0aGUgb25lIG9uIHRoZSB0b3Agb2YgdGhlIGFjdGl2
ZQorICAgICAgICAgICAgLy8gc3RhY2suCisgICAgICAgICAgICBpZiAoIWVudHJ5LmRpZEJ1aWxk
UG9zc2libGVSZWdzKSB7CisgICAgICAgICAgICAgICAgLy8gQWR2YW5jZSB0aGUgY2xvYmJlciBp
bmRleCB1bnRpbCBpdCdzIGF0IGEgY2xvYmJlciB0aGF0IGlzIHJlbGV2YW50IHRvIHVzLgorICAg
ICAgICAgICAgICAgIHdoaWxlIChjbG9iYmVySW5kZXggPCBtX2Nsb2JiZXJzLnNpemUoKSAmJiBt
X2Nsb2JiZXJzW2Nsb2JiZXJJbmRleF0uaW5kZXggPCBpbmRleCkKKyAgICAgICAgICAgICAgICAg
ICAgY2xvYmJlckluZGV4Kys7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgUmVn
aXN0ZXJTZXQgcG9zc2libGVSZWdzID0gbV9yZWdpc3RlclNldDsKKyAgICAgICAgICAgICAgICBm
b3IgKHNpemVfdCBpID0gY2xvYmJlckluZGV4OyBpIDwgbV9jbG9iYmVycy5zaXplKCkgJiYgbV9j
bG9iYmVyc1tpXS5pbmRleCA8IGVudHJ5LmludGVydmFsLmVuZCgpOyArK2kpCisgICAgICAgICAg
ICAgICAgICAgIHBvc3NpYmxlUmVncy5leGNsdWRlKG1fY2xvYmJlcnNbaV0ucmVncyk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZW50cnkucG9zc2libGVSZWdzID0gcG9zc2li
bGVSZWdzOworICAgICAgICAgICAgICAgIGVudHJ5LmRpZEJ1aWxkUG9zc2libGVSZWdzID0gdHJ1
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHZlcmJvc2Uo
KSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgIFBvc3NpYmxlIHJlZ3M6ICIsIGVudHJ5LnBv
c3NpYmxlUmVncywgIlxuIik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEZpbmQgYSBm
cmVlIHJlZ2lzdGVyIHRoYXQgd2UgYXJlIGFsbG93ZWQgdG8gdXNlLgorICAgICAgICAgICAgaWYg
KG1fYWN0aXZlLnNpemUoKSAhPSBtX3JlZ2lzdGVycy5zaXplKCkpIHsKKyAgICAgICAgICAgICAg
ICBib29sIGRpZEFzc2lnbiA9IGZhbHNlOworICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6
IG1fcmVnaXN0ZXJzKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghbV9hY3RpdmVSZWdzLmNv
bnRhaW5zKHJlZykgJiYgZW50cnkucG9zc2libGVSZWdzLmNvbnRhaW5zKHJlZykpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGFzc2lnbih0bXAsIHJlZyk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBkaWRBc3NpZ24gPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
aWYgKGRpZEFzc2lnbikKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgU3BpbGxBdEludGVydmFs
IGluIEZpZy4gMSwgYnV0IG1vZGlmaWVkIHRvIGhhbmRsZSBjbG9iYmVycy4KKyAgICAgICAgICAg
IFRtcCBzcGlsbFRtcCA9IG1fYWN0aXZlLnRha2VMYXN0KAorICAgICAgICAgICAgICAgIFsmXSAo
VG1wIHNwaWxsQ2FuZGlkYXRlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVudHJ5LnBvc3NpYmxlUmVncy5jb250YWlucyhtX21hcFtzcGlsbENhbmRpZGF0ZV0uYXNzaWdu
ZWQpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaWYgKCFzcGlsbFRtcCkgewor
ICAgICAgICAgICAgICAgIHNwaWxsKHRtcCk7CisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBUbXBEYXRhJiBzcGlsbEVudHJ5ID0gbV9tYXBbc3Bp
bGxUbXBdOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3BpbGxFbnRyeS5hc3NpZ25lZCk7
CisgICAgICAgICAgICBpZiAoc3BpbGxFbnRyeS5pc1Vuc3BpbGxhYmxlIHx8CisgICAgICAgICAg
ICAgICAgKCFlbnRyeS5pc1Vuc3BpbGxhYmxlICYmIHNwaWxsRW50cnkuaW50ZXJ2YWwuZW5kKCkg
PD0gZW50cnkuaW50ZXJ2YWwuZW5kKCkpKSB7CisgICAgICAgICAgICAgICAgc3BpbGwodG1wKTsK
KyAgICAgICAgICAgICAgICBhZGRUb0FjdGl2ZShzcGlsbFRtcCk7CisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGFzc2ln
bih0bXAsIHNwaWxsRW50cnkuYXNzaWduZWQpOworICAgICAgICAgICAgc3BpbGwoc3BpbGxUbXAp
OworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgYWRkVG9BY3RpdmUoVG1wIHRtcCkK
KyAgICB7CisgICAgICAgIGlmIChtX21hcFt0bXBdLmlzVW5zcGlsbGFibGUpIHsKKyAgICAgICAg
ICAgIG1fYWN0aXZlLnByZXBlbmQodG1wKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgbV9hY3RpdmUuYXBwZW5kQW5kQnViYmxlKAorICAgICAgICAg
ICAgdG1wLAorICAgICAgICAgICAgWyZdIChUbXAgb3RoZXJUbXApIC0+IGJvb2wgeworICAgICAg
ICAgICAgICAgIFRtcERhdGEmIG90aGVyRW50cnkgPSBtX21hcFtvdGhlclRtcF07CisgICAgICAg
ICAgICAgICAgaWYgKG90aGVyRW50cnkuaXNVbnNwaWxsYWJsZSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIHJldHVybiBtX21hcFtvdGhlclRtcF0u
aW50ZXJ2YWwuZW5kKCkgPiBtX21hcFt0bXBdLmludGVydmFsLmVuZCgpOworICAgICAgICAgICAg
fSk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXNzaWduKFRtcCB0bXAsIFJlZyByZWcpCisgICAg
eworICAgICAgICBUbXBEYXRhJiBlbnRyeSA9IG1fbWFwW3RtcF07CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKCFlbnRyeS5zcGlsbGVkKTsKKyAgICAgICAgZW50cnkuYXNzaWduZWQgPSByZWc7Cisg
ICAgICAgIG1fYWN0aXZlUmVncy5hZGQocmVnKTsKKyAgICAgICAgYWRkVG9BY3RpdmUodG1wKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBzcGlsbChUbXAgdG1wKQorICAgIHsKKyAgICAgICAgVG1w
RGF0YSYgZW50cnkgPSBtX21hcFt0bXBdOworICAgICAgICBSRUxFQVNFX0FTU0VSVCghZW50cnku
aXNVbnNwaWxsYWJsZSk7CisgICAgICAgIGVudHJ5LnNwaWxsZWQgPSBtX2NvZGUuYWRkU3RhY2tT
bG90KDgsIFN0YWNrU2xvdEtpbmQ6OlNwaWxsKTsKKyAgICAgICAgZW50cnkuYXNzaWduZWQgPSBS
ZWcoKTsKKyAgICAgICAgbV9kaWRTcGlsbCA9IHRydWU7CisgICAgfQorICAgIAorICAgIHZvaWQg
ZW1pdFNwaWxsQ29kZSgpCisgICAgeworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDog
bV9jb2RlKSB7CisgICAgICAgICAgICBzaXplX3QgaW5kZXhPZkhlYWQgPSB0aGlzLT5pbmRleE9m
SGVhZChibG9jayk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IDA7IGlu
c3RJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsraW5zdEluZGV4KSB7CisgICAgICAgICAgICAgICAg
SW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOworICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGluZGV4T2ZFYXJseSA9IGluZGV4T2ZIZWFkICsgaW5zdEluZGV4ICogMjsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBGaXJzdCB0cnkgdG8gc3BpbGwgZGlyZWN0bHku
CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluc3QuYXJncy5zaXpl
KCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBBcmcmIGFyZyA9IGluc3QuYXJnc1tpXTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmcuaXNUbXAoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBpZiAoYXJnLmlzUmVnKCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGFyZy5iYW5rKCkgIT0gYmFuaykKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHNwaWxsZWQgPSBtX21hcFthcmcudG1wKCld
LnNwaWxsZWQ7CisgICAgICAgICAgICAgICAgICAgIGlmICghc3BpbGxlZCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBpZiAoIWluc3QuYWRt
aXRzU3RhY2soaSkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICAgICAgYXJnID0gQXJnOjpzdGFjayhzcGlsbGVkKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gRmFsbCBiYWNrIG9uIHRoZSBo
YXJkIHdheS4KKyAgICAgICAgICAgICAgICBpbnN0LmZvckVhY2hUbXAoCisgICAgICAgICAgICAg
ICAgICAgIFsmXSAoVG1wJiB0bXAsIEFyZzo6Um9sZSByb2xlLCBCYW5rIHRtcEJhbmssIFdpZHRo
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRt
cEJhbmsgIT0gYmFuaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHNwaWxsZWQgPSBtX21hcFt0bXBdLnNwaWxs
ZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNwaWxsZWQpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgT3Bjb2RlIG1v
dmUgPSBiYW5rID09IEdQID8gTW92ZSA6IE1vdmVEb3VibGU7CisgICAgICAgICAgICAgICAgICAg
ICAgICB0bXAgPSBhZGRTcGlsbFRtcFdpdGhJbnRlcnZhbChpbnRlcnZhbChpbmRleE9mRWFybHks
IEFyZzo6dGltaW5nKHJvbGUpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocm9sZSA9
PSBBcmc6OlNjcmF0Y2gpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlVc2Uocm9sZSkpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXRzW2Jsb2NrXS5pbnNlcnQoaW5zdEluZGV4
LCBzZWNvbmRQaGFzZSwgbW92ZSwgaW5zdC5vcmlnaW4sIEFyZzo6c3RhY2soc3BpbGxlZCksIHRt
cCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0FueURlZihyb2xlKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldHNbYmxvY2tdLmluc2VydChp
bnN0SW5kZXggKyAxLCBmaXJzdFBoYXNlLCBtb3ZlLCBpbnN0Lm9yaWdpbiwgdG1wLCBBcmc6OnN0
YWNrKHNwaWxsZWQpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBpbnNlcnRTcGlsbENvZGUoKQorICAgIHsK
KyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fY29kZSkKKyAgICAgICAgICAgIG1f
aW5zZXJ0aW9uU2V0c1tibG9ja10uZXhlY3V0ZShibG9jayk7CisgICAgfQorICAgIAorICAgIHZv
aWQgYXNzaWduUmVnaXN0ZXJzKCkKKyAgICB7CisgICAgICAgIGlmICh2ZXJib3NlKCkpIHsKKyAg
ICAgICAgICAgIGRhdGFMb2coIkFib3V0IHRvIGFsbG9jYXRlIHJlZ2lzdGVycy4gU3RhdGUgb2Yg
YWxsIHRtcHM6XG4iKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgdG1wSW5kZXggPSAwOyB0
bXBJbmRleCA8IG1fY29kZS5udW1UbXBzKGJhbmspOyArK3RtcEluZGV4KSB7CisgICAgICAgICAg
ICAgICAgVG1wIHRtcCA9IFRtcDo6dG1wRm9ySW5kZXgoYmFuaywgdG1wSW5kZXgpOworICAgICAg
ICAgICAgICAgIGRhdGFMb2coIiAgICAiLCB0bXAsICI6ICIsIG1fbWFwW3RtcF0sICJcbiIpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZGF0YUxvZygiSVI6XG4iKTsKKyAgICAgICAgICAg
IGRhdGFMb2cobV9jb2RlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9yIChCYXNp
Y0Jsb2NrKiBibG9jayA6IG1fY29kZSkgeworICAgICAgICAgICAgZm9yIChJbnN0JiBpbnN0IDog
KmJsb2NrKSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UoKSkKKyAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZygiQXQ6ICIsIGluc3QsICJcbiIpOworICAgICAgICAgICAgICAgIGluc3Qu
Zm9yRWFjaFRtcEZhc3QoCisgICAgICAgICAgICAgICAgICAgIFsmXSAoVG1wJiB0bXApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wLmJhbmso
KSAhPSBiYW5rKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgUmVnIHJlZyA9IG1fbWFw
W3RtcF0uYXNzaWduZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlZykgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkZhaWxlZCB0byBhbGxvY2F0ZSByZWcg
Zm9yOiAiLCB0bXAsICJcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICB0bXAgPSBUbXAocmVnKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgQ29kZSYgbV9jb2Rl
OworICAgIFZlY3RvcjxSZWc+IG1fcmVnaXN0ZXJzOworICAgIFJlZ2lzdGVyU2V0IG1fcmVnaXN0
ZXJTZXQ7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jayosIHNpemVfdD4gbV9zdGFydEluZGV4Owor
ICAgIEluZGV4TWFwPFRtcDo6SW5kZXhlZDxiYW5rPiwgVG1wRGF0YT4gbV9tYXA7CisgICAgSW5k
ZXhNYXA8QmFzaWNCbG9jayosIFBoYXNlSW5zZXJ0aW9uU2V0PiBtX2luc2VydGlvblNldHM7Cisg
ICAgVmVjdG9yPENsb2JiZXI+IG1fY2xvYmJlcnM7IC8vIEFmdGVyIHdlIGFsbG9jYXRlIHRoaXMs
IHdlIGhhcHBpbHkgcG9pbnQgcG9pbnRlcnMgaW50byBpdC4KKyAgICBWZWN0b3I8VG1wPiBtX3Rt
cHM7CisgICAgRGVxdWU8VG1wPiBtX2FjdGl2ZTsKKyAgICBSZWdpc3RlclNldCBtX2FjdGl2ZVJl
Z3M7CisgICAgYm9vbCBtX2RpZFNwaWxsIHsgZmFsc2UgfTsKK307CisKK3RlbXBsYXRlPEJhbmsg
YmFuaz4KK3ZvaWQgcnVuTGluZWFyU2NhbihDb2RlJiBjb2RlKQoreworICAgIGlmICh2ZXJib3Nl
KCkpCisgICAgICAgIGRhdGFMb2coIkFpciBiZWZvcmUgbGluZWFyIHNjYW4gZm9yICIsIGJhbmss
ICI6XG4iLCBjb2RlKTsKKyAgICBMaW5lYXJTY2FuPGJhbms+IGxpbmVhclNjYW4oY29kZSk7Cisg
ICAgbGluZWFyU2Nhbi5ydW4oKTsKKyAgICBpZiAodmVyYm9zZSgpKQorICAgICAgICBkYXRhTG9n
KCJBaXIgYWZ0ZXIgbGluZWFyIHNjYW4gZm9yICIsIGJhbmssICI6XG4iLCBjb2RlKTsKK30KKwor
fSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgYWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVh
clNjYW4oQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgImFs
bG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuIik7CisgICAgcGFkSW50ZXJmZXJlbmNlKGNvZGUp
OworICAgIHJ1bkxpbmVhclNjYW48RlA+KGNvZGUpOworICAgIHJ1bkxpbmVhclNjYW48R1A+KGNv
ZGUpOworICAgIGZpeFNwaWxsc0FmdGVyVGVybWluYWxzKGNvZGUpOworfQorCit9IH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFy
U2Nhbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxs
b2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIkNQVS5oIgorI2luY2x1ZGUgIk9wdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCisvLyBUaGlz
IGltcGxlbWVudHMgdGhlIFBvbGV0dG8gYW5kIFNhcmthciByZWdpc3RlciBhbGxvY2F0b3IgY2Fs
bGVkICJsaW5lYXIgc2NhbiI6CisvLyBodHRwOi8vZGwuYWNtLm9yZy9jaXRhdGlvbi5jZm0/aWQ9
MzMwMjUwCisvLworLy8gVGhpcyBpcyBub3QgQWlyJ3MgcHJpbWFyeSByZWdpc3RlciBhbGxvY2F0
b3IuIFdlIHVzZSBpdCBvbmx5IHdoZW4gcnVubmluZyBhdCBvcHRMZXZlbDwyLiBUaGF0J3Mgbm90
CisvLyB0aGUgZGVmYXVsdCBsZXZlbC4gVGhpcyByZWdpc3RlciBhbGxvY2F0b3IgaXMgb3B0aW1p
emVkIHByaW1hcmlseSBmb3IgcnVubmluZyBxdWlja2x5LiBJdCdzIGV4cGVjdGVkCisvLyB0aGF0
IGltcHJvdmVtZW50cyB0byB0aGlzIHJlZ2lzdGVyIGFsbG9jYXRvciBzaG91bGQgZm9jdXMgb24g
aW1wcm92aW5nIGl0cyBleGVjdXRpb24gdGltZSB3aXRob3V0IG11Y2gKKy8vIHJlZ2FyZCBmb3Ig
dGhlIHF1YWxpdHkgb2YgZ2VuZXJhdGVkIGNvZGUuIElmIHlvdSB3YW50IGdvb2QgY29kZSwgdXNl
IGdyYXBoIGNvbG9yaW5nLgorLy8KKy8vIEZvciBBaXIncyBwcmltYXJ5IHJlZ2lzdGVyIGFsbG9j
YXRvciwgc2VlIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmh8Y3BwLgordm9p
ZCBhbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2NhbihDb2RlJik7CisKK30gfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAJKHJl
dmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2Nh
dGVTdGFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MSw3ICsxNjEsNyBAQCB2b2lkIGFsbG9j
YXRlU3RhY2soQ29kZSYgY29kZSkKIAogICAgIC8vIE5vdyB3ZSBoYW5kbGUgdGhlIHNwaWxsIHNs
b3RzLgogICAgIFN0YWNrU2xvdExpdmVuZXNzIGxpdmVuZXNzKGNvZGUpOwotICAgIEluZGV4TWFw
PFN0YWNrU2xvdCwgSGFzaFNldDxTdGFja1Nsb3QqPj4gaW50ZXJmZXJlbmNlKGNvZGUuc3RhY2tT
bG90cygpLnNpemUoKSk7CisgICAgSW5kZXhNYXA8U3RhY2tTbG90KiwgSGFzaFNldDxTdGFja1Ns
b3QqPj4gaW50ZXJmZXJlbmNlKGNvZGUuc3RhY2tTbG90cygpLnNpemUoKSk7CiAgICAgVmVjdG9y
PFN0YWNrU2xvdCo+IHNsb3RzOwogCiAgICAgLy8gV2Ugd2lsbCBwZXJmb3JtIHNvbWUgc3BpbGwg
Y29hbGVzY2luZy4gVG8gbWFrZSB0aGF0IGVmZmVjdGl2ZSwgd2UgbmVlZCB0byBiZSBhYmxlIHRv
IGlkZW50aWZ5CkBAIC0zMDksNyArMzA5LDcgQEAgdm9pZCBhbGxvY2F0ZVN0YWNrKENvZGUmIGNv
ZGUpCiAgICAgICAgICAgICByZXR1cm4gYS5mcmVxdWVuY3kgPiBiLmZyZXF1ZW5jeTsKICAgICAg
ICAgfSk7CiAgICAgCi0gICAgSW5kZXhNYXA8U3RhY2tTbG90LCBTdGFja1Nsb3QqPiByZW1hcHBl
ZFN0YWNrU2xvdHMoY29kZS5zdGFja1Nsb3RzKCkuc2l6ZSgpKTsKKyAgICBJbmRleE1hcDxTdGFj
a1Nsb3QqLCBTdGFja1Nsb3QqPiByZW1hcHBlZFN0YWNrU2xvdHMoY29kZS5zdGFja1Nsb3RzKCku
c2l6ZSgpKTsKICAgICBhdXRvIHJlbWFwID0gWyZdIChTdGFja1Nsb3QqIHNsb3QpIC0+IFN0YWNr
U2xvdCogewogICAgICAgICBpZiAoIXNsb3QpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAJKHJldmlzaW9uIDIx
NDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgyLDYgKzI4MiwzNyBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJl
YW0mIG91dCwgQXJnCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAordm9p
ZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEFyZzo6UGhhc2UgcGhhc2UpCit7Cisg
ICAgc3dpdGNoIChwaGFzZSkgeworICAgIGNhc2UgQXJnOjpFYXJseToKKyAgICAgICAgb3V0LnBy
aW50KCJFYXJseSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcmc6OkxhdGU6CisgICAg
ICAgIG91dC5wcmludCgiTGF0ZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBwcmludEludGVybmFsKFByaW50
U3RyZWFtJiBvdXQsIEFyZzo6VGltaW5nIHRpbWluZykKK3sKKyAgICBzd2l0Y2ggKHRpbWluZykg
eworICAgIGNhc2UgQXJnOjpPbmx5RWFybHk6CisgICAgICAgIG91dC5wcmludCgiT25seUVhcmx5
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFyZzo6T25seUxhdGU6CisgICAgICAgIG91
dC5wcmludCgiT25seUxhdGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJnOjpFYXJs
eUFuZExhdGU6CisgICAgICAgIG91dC5wcmludCgiRWFybHlBbmRMYXRlIik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCiB2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQXJnOjpSb2xlIHJvbGUpCiB7CiAg
ICAgc3dpdGNoIChyb2xlKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckFyZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJn
LmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
QXJnLmgJKHdvcmtpbmcgY29weSkKQEAgLTkyLDYgKzkyLDE3IEBAIHB1YmxpYzoKICAgICAgICAg
Q29sZCwKICAgICAgICAgV2FybQogICAgIH07CisgICAgCisgICAgZW51bSBQaGFzZSA6IGludDhf
dCB7CisgICAgICAgIEVhcmx5LAorICAgICAgICBMYXRlCisgICAgfTsKKyAgICAKKyAgICBlbnVt
IFRpbWluZyA6IGludDhfdCB7CisgICAgICAgIE9ubHlFYXJseSwKKyAgICAgICAgT25seUxhdGUs
CisgICAgICAgIEVhcmx5QW5kTGF0ZQorICAgIH07CiAKICAgICBlbnVtIFJvbGUgOiBpbnQ4X3Qg
ewogICAgICAgICAvLyBVc2UgbWVhbnMgdGhhdCB0aGUgSW5zdCB3aWxsIHJlYWQgZnJvbSB0aGlz
IHZhbHVlIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLgpAQCAtMjUzLDcgKzI2NCw4MiBAQCBw
dWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gaXNDb2xkVXNlKHJvbGUpID8gQ29sZCA6IFdh
cm07CiAgICAgfQotCisgICAgCisgICAgc3RhdGljIGJvb2wgYWN0aXZlQXQoUm9sZSByb2xlLCBQ
aGFzZSBwaGFzZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAocm9sZSkgeworICAgICAgICBjYXNl
IFVzZToKKyAgICAgICAgY2FzZSBDb2xkVXNlOgorICAgICAgICBjYXNlIEVhcmx5RGVmOgorICAg
ICAgICBjYXNlIEVhcmx5WkRlZjoKKyAgICAgICAgY2FzZSBVc2VBZGRyOgorICAgICAgICAgICAg
cmV0dXJuIHBoYXNlID09IEVhcmx5OworICAgICAgICBjYXNlIExhdGVVc2U6CisgICAgICAgIGNh
c2UgTGF0ZUNvbGRVc2U6CisgICAgICAgIGNhc2UgRGVmOgorICAgICAgICBjYXNlIFpEZWY6Cisg
ICAgICAgICAgICByZXR1cm4gcGhhc2UgPT0gTGF0ZTsKKyAgICAgICAgY2FzZSBVc2VEZWY6Cisg
ICAgICAgIGNhc2UgVXNlWkRlZjoKKyAgICAgICAgY2FzZSBTY3JhdGNoOgorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgfQorICAgIAorICAgIHN0YXRpYyBib29sIGFjdGl2ZUF0KFRpbWluZyB0aW1pbmcsIFBoYXNl
IHBoYXNlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0aW1pbmcpIHsKKyAgICAgICAgY2FzZSBP
bmx5RWFybHk6CisgICAgICAgICAgICByZXR1cm4gcGhhc2UgPT0gRWFybHk7CisgICAgICAgIGNh
c2UgT25seUxhdGU6CisgICAgICAgICAgICByZXR1cm4gcGhhc2UgPT0gTGF0ZTsKKyAgICAgICAg
Y2FzZSBFYXJseUFuZExhdGU6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFRp
bWluZyB0aW1pbmcoUm9sZSByb2xlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChyb2xlKSB7Cisg
ICAgICAgIGNhc2UgVXNlOgorICAgICAgICBjYXNlIENvbGRVc2U6CisgICAgICAgIGNhc2UgRWFy
bHlEZWY6CisgICAgICAgIGNhc2UgRWFybHlaRGVmOgorICAgICAgICBjYXNlIFVzZUFkZHI6Cisg
ICAgICAgICAgICByZXR1cm4gT25seUVhcmx5OworICAgICAgICBjYXNlIExhdGVVc2U6CisgICAg
ICAgIGNhc2UgTGF0ZUNvbGRVc2U6CisgICAgICAgIGNhc2UgRGVmOgorICAgICAgICBjYXNlIFpE
ZWY6CisgICAgICAgICAgICByZXR1cm4gT25seUxhdGU7CisgICAgICAgIGNhc2UgVXNlRGVmOgor
ICAgICAgICBjYXNlIFVzZVpEZWY6CisgICAgICAgIGNhc2UgU2NyYXRjaDoKKyAgICAgICAgICAg
IHJldHVybiBFYXJseUFuZExhdGU7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgc3Rh
dGljIHZvaWQgZm9yRWFjaFBoYXNlKFRpbWluZyB0aW1pbmcsIGNvbnN0IEZ1bmMmIGZ1bmMpCisg
ICAgeworICAgICAgICBpZiAoYWN0aXZlQXQodGltaW5nLCBFYXJseSkpCisgICAgICAgICAgICBm
dW5jKEVhcmx5KTsKKyAgICAgICAgaWYgKGFjdGl2ZUF0KHRpbWluZywgTGF0ZSkpCisgICAgICAg
ICAgICBmdW5jKExhdGUpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
PgorICAgIHN0YXRpYyB2b2lkIGZvckVhY2hQaGFzZShSb2xlIHJvbGUsIGNvbnN0IEZ1bmMmIGZ1
bmMpCisgICAgeworICAgICAgICBpZiAoYWN0aXZlQXQocm9sZSwgRWFybHkpKQorICAgICAgICAg
ICAgZnVuYyhFYXJseSk7CisgICAgICAgIGlmIChhY3RpdmVBdChyb2xlLCBMYXRlKSkKKyAgICAg
ICAgICAgIGZ1bmMoTGF0ZSk7CisgICAgfQorICAgIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0
aGUgUm9sZSBpbXBsaWVzIHRoYXQgdGhlIEluc3Qgd2lsbCBVc2UgdGhlIEFyZyBiZWZvcmUgZG9p
bmcgYW55dGhpbmcgZWxzZS4KICAgICBzdGF0aWMgYm9vbCBpc0Vhcmx5VXNlKFJvbGUgcm9sZSkK
ICAgICB7CkBAIC0xMzU0LDYgKzE0NDAsOCBAQCBuYW1lc3BhY2UgV1RGIHsKIAogSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6QWlyOjpB
cmc6OktpbmQpOwogSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiwgSlNDOjpCMzo6QWlyOjpBcmc6OlRlbXBlcmF0dXJlKTsKK0pTX0VYUE9SVF9QUklWQVRF
IHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OkFpcjo6QXJnOjpQaGFz
ZSk7CitKU19FWFBPUlRfUFJJVkFURSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBK
U0M6OkIzOjpBaXI6OkFyZzo6VGltaW5nKTsKIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJpbnRJ
bnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OkFpcjo6QXJnOjpSb2xlKTsKIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OkFpcjo6
QXJnOjpTaWduZWRuZXNzKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3
IEBAIG5hbWVzcGFjZSBBaXIgewogY2xhc3MgQmxvY2tJbnNlcnRpb25TZXQ7CiBjbGFzcyBDb2Rl
OwogY2xhc3MgSW5zZXJ0aW9uU2V0OworY2xhc3MgUGhhc2VJbnNlcnRpb25TZXQ7CiAKIGNsYXNz
IEJhc2ljQmxvY2sgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJhc2ljQmxvY2spOwpAQCAt
MTQwLDYgKzE0MSw3IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEJsb2NrSW5zZXJ0aW9u
U2V0OwogICAgIGZyaWVuZCBjbGFzcyBDb2RlOwogICAgIGZyaWVuZCBjbGFzcyBJbnNlcnRpb25T
ZXQ7CisgICAgZnJpZW5kIGNsYXNzIFBoYXNlSW5zZXJ0aW9uU2V0OwogICAgIHRlbXBsYXRlPHR5
cGVuYW1lPiBmcmllbmQgY2xhc3MgQjM6OkdlbmVyaWNCbG9ja0luc2VydGlvblNldDsKICAgICAK
ICAgICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVlbmN5KTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmxvY2tXb3JrbGlzdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmxvY2tXb3JrbGlzdC5oCShy
ZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJsb2Nr
V29ya2xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiw3ICszMiw3IEBACiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKIAotdHlwZWRlZiBHcmFwaE5vZGVXb3Jr
bGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IEJsb2NrV29ya2xpc3Q7Cit0
eXBlZGVmIEdyYXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2Nr
Kj4+IEJsb2NrV29ya2xpc3Q7CiAKIC8vIFdoZW4geW91IHNheSBCbG9ja1dpdGg8aW50PiB5b3Ug
c2hvdWxkIHJlYWQgaXQgYXMgImJsb2NrIHdpdGggYW4gaW50Ii4KIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHVzaW5nIEJsb2NrV2l0aCA9IEdyYXBoTm9kZVdpdGg8QmFzaWNCbG9jayosIFQ+OwpAQCAt
NDEsMTEgKzQxLDExIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5nIEJsb2NrV2l0aCA9IEcK
IC8vIHBlcm1pdHMgZm9yY2libHkgZW5xdWV1ZWluZyB0aGluZ3MgZXZlbiBpZiB0aGUgYmxvY2sg
aGFzIGFscmVhZHkgYmVlbiBzZWVuLiBJdCdzIHVzZWZ1bCBmb3IKIC8vIHRoaW5ncyBsaWtlIGJ1
aWxkaW5nIGEgc3Bhbm5pbmcgdHJlZSwgaW4gd2hpY2ggY2FzZSBUICh0aGUgYXV4aWxpYXJ5IHBh
eWxvYWQpIHdvdWxkIGJlIHRoZQogLy8gc3VjY2Vzc29yIGluZGV4LgotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gdXNpbmcgRXh0ZW5kZWRCbG9ja1dvcmtsaXN0ID0gRXh0ZW5kZWRHcmFwaE5vZGVXb3Jr
bGlzdDxCYXNpY0Jsb2NrKiwgVCwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+OwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gdXNpbmcgRXh0ZW5kZWRCbG9ja1dvcmtsaXN0ID0gRXh0ZW5kZWRHcmFwaE5vZGVX
b3JrbGlzdDxCYXNpY0Jsb2NrKiwgVCwgSW5kZXhTZXQ8QmFzaWNCbG9jayo+PjsKIAogdHlwZWRl
ZiBHcmFwaE5vZGVXaXRoT3JkZXI8QmFzaWNCbG9jayo+IEJsb2NrV2l0aE9yZGVyOwogCi10eXBl
ZGVmIFBvc3RPcmRlckdyYXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNp
Y0Jsb2NrPj4gUG9zdE9yZGVyQmxvY2tXb3JrbGlzdDsKK3R5cGVkZWYgUG9zdE9yZGVyR3JhcGhO
b2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2sqPj4gUG9zdE9yZGVy
QmxvY2tXb3JrbGlzdDsKIAogfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNGRy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0ZHLmgJKHJldmlzaW9uIDIxNDQyNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0ZHLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM5LDggKzM5LDggQEAgY2xhc3MgQ0ZHIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKICAgICB0eXBlZGVmIEJhc2ljQmxvY2sqIE5vZGU7Ci0gICAgdHlwZWRlZiBJbmRl
eFNldDxCYXNpY0Jsb2NrPiBTZXQ7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcgTWFw
ID0gSW5kZXhNYXA8QmFzaWNCbG9jaywgVD47CisgICAgdHlwZWRlZiBJbmRleFNldDxCYXNpY0Js
b2NrKj4gU2V0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5nIE1hcCA9IEluZGV4TWFw
PEJhc2ljQmxvY2sqLCBUPjsKICAgICB0eXBlZGVmIFZlY3RvcjxCYXNpY0Jsb2NrKiwgND4gTGlz
dDsKIAogICAgIENGRyhDb2RlJiBjb2RlKQpAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAgICAg
Tm9kZSByb290KCkgeyByZXR1cm4gbV9jb2RlWzBdOyB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgotICAgIE1hcDxUPiBuZXdNYXAoKSB7IHJldHVybiBJbmRleE1hcDxKU0M6OkIzOjpBaXI6
OkJhc2ljQmxvY2ssIFQ+KG1fY29kZS5zaXplKCkpOyB9CisgICAgTWFwPFQ+IG5ld01hcCgpIHsg
cmV0dXJuIEluZGV4TWFwPEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9jayosIFQ+KG1fY29kZS5zaXpl
KCkpOyB9CiAKICAgICBTdWNjZXNzb3JDb2xsZWN0aW9uPEJhc2ljQmxvY2ssIEJhc2ljQmxvY2s6
OlN1Y2Nlc3Nvckxpc3Q+IHN1Y2Nlc3NvcnMoTm9kZSBub2RlKSB7IHJldHVybiBub2RlLT5zdWNj
ZXNzb3JCbG9ja3MoKTsgfQogICAgIEJhc2ljQmxvY2s6OlByZWRlY2Vzc29yTGlzdCYgcHJlZGVj
ZXNzb3JzKE5vZGUgbm9kZSkgeyByZXR1cm4gbm9kZS0+cHJlZGVjZXNzb3JzKCk7IH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRWxpbWluYXRlRGVhZENvZGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRWxpbWluYXRlRGVh
ZENvZGUuY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckVsaW1pbmF0ZURlYWRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAs
NyBAQCBib29sIGVsaW1pbmF0ZURlYWRDb2RlKENvZGUmIGNvZGUpCiAgICAgUGhhc2VTY29wZSBw
aGFzZVNjb3BlKGNvZGUsICJlbGltaW5hdGVEZWFkQ29kZSIpOwogCiAgICAgSGFzaFNldDxUbXA+
IGxpdmVUbXBzOwotICAgIEluZGV4U2V0PFN0YWNrU2xvdD4gbGl2ZVN0YWNrU2xvdHM7CisgICAg
SW5kZXhTZXQ8U3RhY2tTbG90Kj4gbGl2ZVN0YWNrU2xvdHM7CiAgICAgYm9vbCBjaGFuZ2VkOwog
CiAgICAgYXV0byBpc0FyZ0xpdmUgPSBbJl0gKGNvbnN0IEFyZyYgYXJnKSAtPiBib29sIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4T2J2aW91c1NwaWxscy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhPYnZpb3Vz
U3BpbGxzLmNwcAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJGaXhPYnZpb3VzU3BpbGxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQ3LDcgKzU0
Nyw3IEBAIHByaXZhdGU6CiAgICAgfTsKIAogICAgIENvZGUmIG1fY29kZTsKLSAgICBJbmRleE1h
cDxCYXNpY0Jsb2NrLCBTdGF0ZT4gbV9hdEhlYWQ7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jayos
IFN0YXRlPiBtX2F0SGVhZDsKICAgICBTdGF0ZSBtX3N0YXRlOwogICAgIEJhc2ljQmxvY2sqIG1f
YmxvY2sgeyBudWxscHRyIH07CiAgICAgdW5zaWduZWQgbV9pbnN0SW5kZXggeyAwIH07CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeFBhcnRpYWxSZWdpc3RlclN0YWxs
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhQ
YXJ0aWFsUmVnaXN0ZXJTdGFsbHMuY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeFBhcnRpYWxSZWdpc3RlclN0YWxscy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE1NSwxMCArMTU1LDEwIEBAIHZvaWQgZml4UGFydGlhbFJlZ2lzdGVyU3Rh
bGxzKENvZGUmIGNvZGUKIAogICAgIC8vIEZvciBlYWNoIGJsb2NrLCB0aGlzIHByb3ZpZGVzIHRo
ZSBkaXN0YW5jZSB0byB0aGUgbGFzdCBpbnN0cnVjdGlvbiBzZXR0aW5nIGVhY2ggcmVnaXN0ZXIK
ICAgICAvLyBvbiBibG9jayAqZW50cnkqLgotICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIEZQRGVm
RGlzdGFuY2U+IGxhc3REZWZEaXN0YW5jZShjb2RlLnNpemUoKSk7CisgICAgSW5kZXhNYXA8QmFz
aWNCbG9jayosIEZQRGVmRGlzdGFuY2U+IGxhc3REZWZEaXN0YW5jZShjb2RlLnNpemUoKSk7CiAK
ICAgICAvLyBCbG9ja3Mgd2l0aCBkaXJ0eSBkaXN0YW5jZSBhdCBoZWFkLgotICAgIEluZGV4U2V0
PEJhc2ljQmxvY2s+IGRpcnR5OworICAgIEluZGV4U2V0PEJhc2ljQmxvY2sqPiBkaXJ0eTsKIAog
ICAgIC8vIEZpcnN0LCB3ZSBjb21wdXRlIHRoZSBsb2NhbCBkaXN0YW5jZSBmb3IgZWFjaCBibG9j
ayBhbmQgcHVzaCBpdCB0byB0aGUgc3VjY2Vzc29ycy4KICAgICBmb3IgKEJhc2ljQmxvY2sqIGJs
b2NrIDogY29kZSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhT
cGlsbHNBZnRlclRlcm1pbmFscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5jcHAJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFs
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIkFpckJsb2NrSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQWlyQ29kZS5oIgor
I2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgi
CisjaW5jbHVkZSAiQWlyVG1wSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgZml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMoQ29k
ZSYgY29kZSkKK3sKKyAgICAvLyBCZWNhdXNlIHRoZXJlIG1heSBiZSB0ZXJtaW5hbHMgdGhhdCBw
cm9kdWNlIHZhbHVlcywgSVJDIG1heQorICAgIC8vIHdhbnQgdG8gc3BpbGwgdGhvc2UgdGVybWlu
YWxzLiBJdCdsbCBoYXBwZW4gdG8gc3BpbGwgaXQgYWZ0ZXIKKyAgICAvLyB0aGUgdGVybWluYWwu
IElmIHdlIGxlZnQgdGhlIGdyYXBoIGluIHRoaXMgc3RhdGUsIGl0J2QgYmUgaW52YWxpZAorICAg
IC8vIGJlY2F1c2UgYSB0ZXJtaW5hbCBtdXN0IGJlIHRoZSBsYXN0IGluc3RydWN0aW9uIGluIGEg
YmxvY2suCisgICAgLy8gV2UgZml4IHRoYXQgaGVyZS4KKworICAgIEJsb2NrSW5zZXJ0aW9uU2V0
IGJsb2NrSW5zZXJ0aW9uU2V0KGNvZGUpOworICAgIEluc2VydGlvblNldCBpbnNlcnRpb25TZXQo
Y29kZSk7CisKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICB1
bnNpZ25lZCB0ZXJtaW5hbEluZGV4ID0gYmxvY2stPnNpemUoKTsKKyAgICAgICAgYm9vbCBmb3Vu
ZFRlcm1pbmFsID0gZmFsc2U7CisgICAgICAgIHdoaWxlICh0ZXJtaW5hbEluZGV4LS0pIHsKKyAg
ICAgICAgICAgIGlmIChibG9jay0+YXQodGVybWluYWxJbmRleCkuaXNUZXJtaW5hbCgpKSB7Cisg
ICAgICAgICAgICAgICAgZm91bmRUZXJtaW5hbCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUX1VOVVNFRChmb3Vu
ZFRlcm1pbmFsLCBmb3VuZFRlcm1pbmFsKTsKKworICAgICAgICBpZiAodGVybWluYWxJbmRleCA9
PSBibG9jay0+c2l6ZSgpIC0gMSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8v
IFRoZXJlIG11c3QgYmUgaW5zdHJ1Y3Rpb25zIGFmdGVyIHRoZSB0ZXJtaW5hbCBiZWNhdXNlIGl0
J3Mgbm90IHRoZSBsYXN0IGluc3RydWN0aW9uLgorICAgICAgICBBU1NFUlQodGVybWluYWxJbmRl
eCA8IGJsb2NrLT5zaXplKCkgLSAxKTsKKyAgICAgICAgVmVjdG9yPEluc3QsIDE+IGluc3RzVG9N
b3ZlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB0ZXJtaW5hbEluZGV4ICsgMTsgaSA8IGJs
b2NrLT5zaXplKCk7IGkrKykKKyAgICAgICAgICAgIGluc3RzVG9Nb3ZlLmFwcGVuZChibG9jay0+
YXQoaSkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChpbnN0c1RvTW92ZS5zaXplKCkpOworCisg
ICAgICAgIGZvciAoRnJlcXVlbnRlZEJsb2NrJiBmcmVxdWVudGVkU3VjY2Vzc29yIDogYmxvY2st
PnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yID0gZnJl
cXVlbnRlZFN1Y2Nlc3Nvci5ibG9jaygpOworICAgICAgICAgICAgLy8gSWYgc3VjY2Vzc29yJ3Mg
b25seSBwcmVkZWNlc3NvciBpcyBibG9jaywgd2UgY2FuIHBsYW50IHRoZSBzcGlsbCBpbnNpZGUK
KyAgICAgICAgICAgIC8vIHRoZSBzdWNjZXNzb3IuIE90aGVyd2lzZSwgd2UgbXVzdCBzcGxpdCB0
aGUgY3JpdGljYWwgZWRnZSBhbmQgY3JlYXRlCisgICAgICAgICAgICAvLyBhIG5ldyBibG9jayBm
b3IgdGhlIHNwaWxsLgorICAgICAgICAgICAgaWYgKHN1Y2Nlc3Nvci0+bnVtUHJlZGVjZXNzb3Jz
KCkgPT0gMSkgeworICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRJbnN0cygwLCBp
bnN0c1RvTW92ZSk7CisgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoc3VjY2Vz
c29yKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayog
bmV3QmxvY2sgPSBibG9ja0luc2VydGlvblNldC5pbnNlcnRCZWZvcmUoc3VjY2Vzc29yLCBzdWNj
ZXNzb3ItPmZyZXF1ZW5jeSgpKTsKKyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IEluc3QmIGlu
c3QgOiBpbnN0c1RvTW92ZSkKKyAgICAgICAgICAgICAgICAgICAgbmV3QmxvY2stPmFwcGVuZElu
c3QoaW5zdCk7CisgICAgICAgICAgICAgICAgbmV3QmxvY2stPmFwcGVuZEluc3QoSW5zdChKdW1w
LCBpbnN0c1RvTW92ZS5sYXN0KCkub3JpZ2luKSk7CisgICAgICAgICAgICAgICAgbmV3QmxvY2st
PnN1Y2Nlc3NvcnMoKS5hcHBlbmQoc3VjY2Vzc29yKTsKKyAgICAgICAgICAgICAgICBmcmVxdWVu
dGVkU3VjY2Vzc29yLmJsb2NrKCkgPSBuZXdCbG9jazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIGJsb2NrLT5yZXNpemUodGVybWluYWxJbmRleCArIDEpOworICAgIH0KKwor
ICAgIGlmIChibG9ja0luc2VydGlvblNldC5leGVjdXRlKCkpCisgICAgICAgIGNvZGUucmVzZXRS
ZWFjaGFiaWxpdHkoKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeFNwaWxsc0FmdGVy
VGVybWluYWxzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBB
aXIgeworCitjbGFzcyBDb2RlOworCisvLyBCZWNhdXNlIHRoZXJlIG1heSBiZSB0ZXJtaW5hbHMg
dGhhdCBwcm9kdWNlIHZhbHVlcywgdGhlIHJlZ2lzdGVyIGFsbG9jYXRvciBtYXkKKy8vIHdhbnQg
dG8gc3BpbGwgdGhvc2UgdGVybWluYWxzLiBJdCdsbCBoYXBwZW4gdG8gc3BpbGwgaXQgYWZ0ZXIK
Ky8vIHRoZSB0ZXJtaW5hbC4gSWYgd2UgbGVmdCB0aGUgZ3JhcGggaW4gdGhpcyBzdGF0ZSwgaXQn
ZCBiZSBpbnZhbGlkCisvLyBiZWNhdXNlIGEgdGVybWluYWwgbXVzdCBiZSB0aGUgbGFzdCBpbnN0
cnVjdGlvbiBpbiBhIGJsb2NrLgorLy8gV2UgZml4IHRoYXQgaGVyZS4KK3ZvaWQgZml4U3BpbGxz
QWZ0ZXJUZXJtaW5hbHMoQ29kZSYpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWly
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoQjNfSklUKQogCiAjaW5jbHVkZSAiQWlyQWxsb2Nh
dGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuaCIKKyNpbmNsdWRlICJBaXJBbGxvY2F0ZVJlZ2lz
dGVyc0J5TGluZWFyU2Nhbi5oIgogI2luY2x1ZGUgIkFpckFsbG9jYXRlU3RhY2suaCIKICNpbmNs
dWRlICJBaXJDb2RlLmgiCiAjaW5jbHVkZSAiQWlyRWxpbWluYXRlRGVhZENvZGUuaCIKQEAgLTU3
LDcgKzU4LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBB
aXIgewogCi12b2lkIHByZXBhcmVGb3JHZW5lcmF0aW9uKENvZGUmIGNvZGUpCit2b2lkIHByZXBh
cmVGb3JHZW5lcmF0aW9uKENvZGUmIGNvZGUsIHVuc2lnbmVkIG9wdExldmVsKQogewogICAgIFRp
bWluZ1Njb3BlIHRpbWluZ1Njb3BlKCJBaXI6OnByZXBhcmVGb3JHZW5lcmF0aW9uIik7CiAgICAg
CkBAIC04OSwxOCArOTAsMjIgQEAgdm9pZCBwcmVwYXJlRm9yR2VuZXJhdGlvbihDb2RlJiBjb2Rl
KQogICAgIC8vIEZvciBkZWJ1Z2dpbmcsIHlvdSBjYW4gdXNlIHNwaWxsRXZlcnl0aGluZygpIHRv
IHB1dCBldmVyeXRoaW5nIHRvIHRoZSBzdGFjayBiZXR3ZWVuIGVhY2ggSW5zdC4KICAgICBpZiAo
T3B0aW9uczo6YWlyU3BpbGxzRXZlcnl0aGluZygpKQogICAgICAgICBzcGlsbEV2ZXJ5dGhpbmco
Y29kZSk7Ci0gICAgZWxzZQorICAgIGVsc2UgaWYgKG9wdExldmVsID49IDIpCiAgICAgICAgIGFs
bG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nKGNvZGUpOworICAgIGVsc2UKKyAgICAgICAg
YWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4oY29kZSk7CiAKICAgICBpZiAoT3B0aW9uczo6
bG9nQWlyUmVnaXN0ZXJQcmVzc3VyZSgpKSB7CiAgICAgICAgIGRhdGFMb2coIlJlZ2lzdGVyIHBy
ZXNzdXJlIGFmdGVyIHJlZ2lzdGVyIGFsbG9jYXRpb246XG4iKTsKICAgICAgICAgbG9nUmVnaXN0
ZXJQcmVzc3VyZShjb2RlKTsKICAgICB9Ci0KLSAgICAvLyBUaGlzIHJlcGxhY2VzIHVzZXMgb2Yg
c3BpbGwgc2xvdHMgd2l0aCByZWdpc3RlcnMgb3IgY29uc3RhbnRzIGlmIHBvc3NpYmxlLiBJdCBk
b2VzIHRoaXMgYnkKLSAgICAvLyBtaW5pbWl6aW5nIHRoZSBhbW91bnQgdGhhdCB3ZSBwZXJ0dXJi
IHRoZSBhbHJlYWR5LWNob3NlbiByZWdpc3RlciBhbGxvY2F0aW9uLiBJdCBtYXkgZXh0ZW5kCi0g
ICAgLy8gdGhlIGxpdmUgcmFuZ2VzIG9mIHJlZ2lzdGVycyB0aG91Z2guCi0gICAgZml4T2J2aW91
c1NwaWxscyhjb2RlKTsKKyAgICAKKyAgICBpZiAob3B0TGV2ZWwgPj0gMikgeworICAgICAgICAv
LyBUaGlzIHJlcGxhY2VzIHVzZXMgb2Ygc3BpbGwgc2xvdHMgd2l0aCByZWdpc3RlcnMgb3IgY29u
c3RhbnRzIGlmIHBvc3NpYmxlLiBJdCBkb2VzIHRoaXMgYnkKKyAgICAgICAgLy8gbWluaW1pemlu
ZyB0aGUgYW1vdW50IHRoYXQgd2UgcGVydHVyYiB0aGUgYWxyZWFkeS1jaG9zZW4gcmVnaXN0ZXIg
YWxsb2NhdGlvbi4gSXQgbWF5IGV4dGVuZAorICAgICAgICAvLyB0aGUgbGl2ZSByYW5nZXMgb2Yg
cmVnaXN0ZXJzIHRob3VnaC4KKyAgICAgICAgZml4T2J2aW91c1NwaWxscyhjb2RlKTsKKyAgICB9
CiAKICAgICBsb3dlckFmdGVyUmVnQWxsb2MoY29kZSk7CiAKQEAgLTE2NSw3ICsxNzAsNyBAQCB2
b2lkIGdlbmVyYXRlKENvZGUmIGNvZGUsIENDYWxsSGVscGVycyYgCiAgICAgICAgIGlmIChibG9j
aykKICAgICAgICAgICAgIGNvbnRleHQuYmxvY2tMYWJlbHNbYmxvY2tdID0gQm94PENDYWxsSGVs
cGVyczo6TGFiZWw+OjpjcmVhdGUoKTsKICAgICB9Ci0gICAgSW5kZXhNYXA8QmFzaWNCbG9jaywg
Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdD4gYmxvY2tKdW1wcyhjb2RlLnNpemUoKSk7CisgICAgSW5k
ZXhNYXA8QmFzaWNCbG9jayosIENDYWxsSGVscGVyczo6SnVtcExpc3Q+IGJsb2NrSnVtcHMoY29k
ZS5zaXplKCkpOwogCiAgICAgYXV0byBsaW5rID0gWyZdIChDQ2FsbEhlbHBlcnM6Okp1bXAganVt
cCwgQmFzaWNCbG9jayogdGFyZ2V0KSB7CiAgICAgICAgIGlmIChjb250ZXh0LmJsb2NrTGFiZWxz
W3RhcmdldF0tPmlzU2V0KCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyR2VuZXJhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckdlbmVyYXRlLmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyR2VuZXJhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDYgKzI3LDggQEAK
IAogI2lmIEVOQUJMRShCM19KSVQpCiAKKyNpbmNsdWRlICJCM0NvbW1vbi5oIgorCiBuYW1lc3Bh
Y2UgSlNDIHsKIAogY2xhc3MgQ0NhbGxIZWxwZXJzOwpAQCAtMzcsNyArMzksNyBAQCBjbGFzcyBD
b2RlOwogCiAvLyBUaGlzIHRha2VzIGFuIEFpcjo6Q29kZSB0aGF0IGhhc24ndCBoYWQgYW55IHN0
YWNrIGFsbG9jYXRpb24gYW5kIG9wdGlvbmFsbHkgaGFzbid0IGhhZCBhbnkKIC8vIHJlZ2lzdGVy
IGFsbG9jYXRpb24gYW5kIGRvZXMgYm90aCBvZiB0aG9zZSB0aGluZ3MuCi1KU19FWFBPUlRfUFJJ
VkFURSB2b2lkIHByZXBhcmVGb3JHZW5lcmF0aW9uKENvZGUmKTsKK0pTX0VYUE9SVF9QUklWQVRF
IHZvaWQgcHJlcGFyZUZvckdlbmVyYXRpb24oQ29kZSYsIHVuc2lnbmVkIG9wdExldmVsID0gZGVm
YXVsdE9wdExldmVsKCkpOwogCiAvLyBUaGlzIGdlbmVyYXRlcyB0aGUgY29kZSB1c2luZyB0aGUg
Z2l2ZW4gQ0NhbGxIZWxwZXJzIGluc3RhbmNlLiBOb3RlIHRoYXQgdGhpcyBtYXkgY2FsbCBjYWxs
YmFja3MKIC8vIGluIHRoZSBzdXBwbGllZCBjb2RlIGFzIGl0IGlzIGdlbmVyYXRpbmcuCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRpb25Db250ZXh0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0aW9uQ29u
dGV4dC5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckdlbmVyYXRpb25Db250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAg
cHVibGljOgogICAgIHR5cGVkZWYgU2hhcmVkVGFzazxMYXRlUGF0aEZ1bmN0aW9uPiBMYXRlUGF0
aDsKIAogICAgIFZlY3RvcjxSZWZQdHI8TGF0ZVBhdGg+PiBsYXRlUGF0aHM7Ci0gICAgSW5kZXhN
YXA8QmFzaWNCbG9jaywgQm94PENDYWxsSGVscGVyczo6TGFiZWw+PiBibG9ja0xhYmVsczsKKyAg
ICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgQm94PENDYWxsSGVscGVyczo6TGFiZWw+PiBibG9ja0xh
YmVsczsKICAgICBCYXNpY0Jsb2NrKiBjdXJyZW50QmxvY2sgeyBudWxscHRyIH07CiAgICAgdW5z
aWduZWQgaW5kZXhJbkJsb2NrIHsgVUlOVF9NQVggfTsKICAgICBDb2RlKiBjb2RlIHsgbnVsbHB0
ciB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlv
blNldC5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0Fpckluc2VydGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIHB1Ymxp
YzoKICAgICAgICAgYXBwZW5kSW5zZXJ0aW9uKEluc2VydGlvbihpbmRleCwgc3RkOjpmb3J3YXJk
PEluc3Q+KGluc3QpKSk7CiAgICAgfQogCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEluc3RWZWN0
b3I+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW5zdFZlY3Rvcj4KICAgICB2b2lkIGluc2VydElu
c3RzKHNpemVfdCBpbmRleCwgY29uc3QgSW5zdFZlY3RvciYgaW5zdHMpCiAgICAgewogICAgICAg
ICBmb3IgKGNvbnN0IEluc3QmIGluc3QgOiBpbnN0cykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlySW5zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJJbnN0LmNwcAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAs
OCBAQCBib29sIEluc3Q6Omhhc0xhdGVVc2VPckRlZigpCiAKIGJvb2wgSW5zdDo6bmVlZHNQYWRk
aW5nKEluc3QqIHByZXZJbnN0LCBJbnN0KiBuZXh0SW5zdCkKIHsKLSAgICByZXR1cm4gcHJldklu
c3QgJiYgbmV4dEluc3QgJiYgcHJldkluc3QtPmhhc0xhdGVVc2VPckRlZigpICYmIG5leHRJbnN0
LT5oYXNFYXJseURlZigpOworICAgIGJvb2wgcmVzdWx0ID0gcHJldkluc3QgJiYgbmV4dEluc3Qg
JiYgcHJldkluc3QtPmhhc0xhdGVVc2VPckRlZigpICYmIG5leHRJbnN0LT5oYXNFYXJseURlZigp
OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIGJvb2wgSW5zdDo6aGFzQXJnRWZmZWN0cygpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlckFm
dGVyUmVnQWxsb2MuY3BwCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1
LDYgKzU1LDExIEBAIHZvaWQgbG93ZXJBZnRlclJlZ0FsbG9jKENvZGUmIGNvZGUpCiAKICAgICBp
ZiAodmVyYm9zZSkKICAgICAgICAgZGF0YUxvZygiQ29kZSBiZWZvcmUgbG93ZXJBZnRlclJlZ0Fs
bG9jOlxuIiwgY29kZSk7CisgICAgCisgICAgLy8gRklYTUU6CisgICAgLy8gMSkgVGhpcyBzaG91
bGQgYmFpbCBlYXJseSBpZiB0aGVyZSBhcmUgbm8gU2h1ZmZsZXMgb3IgQ29sZENDYWxscy4gKE9P
UFMhISBuZWVkIGJ1ZyB1cmwpCisgICAgLy8gMikgV2Ugc2hvdWxkIG5vdCBpbnRyb2R1Y2UgU2h1
ZmZsZXMgZm9yIG5vcm1hbCBjYWxscy4gKE9PUFMhISBuZWVkIGJ1ZyB1cmwpCisgICAgLy8gMykg
V2Ugc2hvdWxkIGVtaXQgQ29sZENDYWxsIG9ubHkgYXQgb3B0TGV2ZWw9PTEuIChPT1BTISEgbmVl
ZCBidWcgdXJsKQogCiAgICAgSGFzaE1hcDxJbnN0KiwgUmVnaXN0ZXJTZXQ+IHVzZWRSZWdpc3Rl
cnM7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJFbnRyeVN3
aXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJM
b3dlckVudHJ5U3dpdGNoLmNwcAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJMb3dlckVudHJ5U3dpdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODIsNyArODIsNyBAQCB2b2lkIGxvd2VyRW50cnlTd2l0Y2goQ29kZSYgY29kZSkKICAgICAvLyBO
b3cgZHVwbGljYXRlIHRoZW0uCiAgICAgVmVjdG9yPEZyZXF1ZW50ZWRCbG9jaz4gZW50cnlwb2lu
dHM7CiAgICAgZW50cnlwb2ludHMuYXBwZW5kKEZyZXF1ZW50ZWRCbG9jayhjb2RlWzBdLCBlbnRy
eXBvaW50RnJlcXVlbmNpZXNbMF0pKTsKLSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBCYXNpY0Js
b2NrKj4gbWFwKGNvZGUuc2l6ZSgpKTsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgQmFzaWNC
bG9jayo+IG1hcChjb2RlLnNpemUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBlbnRyeXBvaW50SW5k
ZXggPSAxOyBlbnRyeXBvaW50SW5kZXggPCBjb2RlLnByb2MoKS5udW1FbnRyeXBvaW50cygpOyAr
K2VudHJ5cG9pbnRJbmRleCkgewogICAgICAgICBtYXAuY2xlYXIoKTsKICAgICAgICAgZm9yIChC
YXNpY0Jsb2NrKiBibG9jayA6IHdvcmtsaXN0LnNlZW4oKS52YWx1ZXMoY29kZSkpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHJldmlz
aW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9w
Y29kZXMJKHdvcmtpbmcgY29weSkKQEAgLTY0OSw3ICs2NDksNyBAQCBNb3ZlMzIgVTpHOjMyLCBa
RDpHOjMyCiBNb3ZlMzIgVTpHOjMyLCBaRDpHOjMyLCBTOkc6MzIKICAgICBBZGRyLCBBZGRyLCBU
bXAKIAotU3RvcmVaZXJvMzIgVTpHOjMyCitTdG9yZVplcm8zMiBEOkc6MzIKICAgICBBZGRyCiAg
ICAgSW5kZXgKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQaGFzZUlu
c2VydGlvblNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJQaGFzZUluc2VydGlvblNldC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJQaGFzZUluc2VydGlvblNldC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyUGhhc2VJbnNlcnRpb25T
ZXQuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJCYXNpY0Jsb2NrLmgi
CisjaW5jbHVkZSA8d3RmL0J1YmJsZVNvcnQuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIFBoYXNlSW5zZXJ0aW9uU2V0OjpleGVjdXRl
KEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIGJ1YmJsZVNvcnQobV9pbnNlcnRpb25zLmJlZ2lu
KCksIG1faW5zZXJ0aW9ucy5lbmQoKSk7CisgICAgZXhlY3V0ZUluc2VydGlvbnMoYmxvY2stPm1f
aW5zdHMsIG1faW5zZXJ0aW9ucyk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpB
aXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyUGhhc2VJbnNlcnRpb25TZXQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBoYXNlSW5zZXJ0aW9uU2V0LmgJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQaGFzZUluc2VydGlvblNldC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSA8d3RmL0luc2VydGlv
bi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBCYXNpY0Jsb2NrOworY2xhc3MgQ29kZTsK
KworLy8gUGhhc2VkIGluc2VydGlvbnMgYWxsb3cgeW91IHRvIGFzY3JpYmUgcGhhc2VzIHRvIHRo
ZSB0aGluZ3MgaW5zZXJ0ZWQgYXQgYW4gaW5zdHJ1Y3Rpb24gYm91bmRhcnkuCitjbGFzcyBQaGFz
ZUluc2VydGlvbiA6IHB1YmxpYyBJbnNlcnRpb24geworcHVibGljOgorICAgIFBoYXNlSW5zZXJ0
aW9uKCkgeyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBQaGFzZUluc2Vy
dGlvbihzaXplX3QgaW5kZXgsIHVuc2lnbmVkIHBoYXNlLCBUJiYgZWxlbWVudCkKKyAgICAgICAg
OiBJbnNlcnRpb24oaW5kZXgsIHN0ZDo6Zm9yd2FyZDxUPihlbGVtZW50KSkKKyAgICAgICAgLCBt
X3BoYXNlKHBoYXNlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgcGhhc2UoKSBj
b25zdCB7IHJldHVybiBtX3BoYXNlOyB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3Qg
UGhhc2VJbnNlcnRpb24mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGluZGV4KCkg
IT0gb3RoZXIuaW5kZXgoKSkKKyAgICAgICAgICAgIHJldHVybiBpbmRleCgpIDwgb3RoZXIuaW5k
ZXgoKTsKKyAgICAgICAgcmV0dXJuIG1fcGhhc2UgPCBvdGhlci5tX3BoYXNlOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX3BoYXNlIHsgMCB9OworfTsKKworY2xhc3MgUGhhc2VJ
bnNlcnRpb25TZXQgeworcHVibGljOgorICAgIFBoYXNlSW5zZXJ0aW9uU2V0KCkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBhcHBlbmRJbnNl
cnRpb24oVCYmIGluc2VydGlvbikKKyAgICB7CisgICAgICAgIG1faW5zZXJ0aW9ucy5hcHBlbmQo
c3RkOjpmb3J3YXJkPFQ+KGluc2VydGlvbikpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBJbnN0PgorICAgIHZvaWQgaW5zZXJ0SW5zdChzaXplX3QgaW5kZXgsIHVuc2lnbmVk
IHBoYXNlLCBJbnN0JiYgaW5zdCkKKyAgICB7CisgICAgICAgIGFwcGVuZEluc2VydGlvbihQaGFz
ZUluc2VydGlvbihpbmRleCwgcGhhc2UsIHN0ZDo6Zm9yd2FyZDxJbnN0PihpbnN0KSkpOworICAg
IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgdm9pZCBp
bnNlcnQoc2l6ZV90IGluZGV4LCB1bnNpZ25lZCBwaGFzZSwgQXJndW1lbnRzJiYuLi4gYXJndW1l
bnRzKQorICAgIHsKKyAgICAgICAgaW5zZXJ0SW5zdChpbmRleCwgcGhhc2UsIEluc3Qoc3RkOjpm
b3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLikpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGV4ZWN1dGUoQmFzaWNCbG9jayopOworCitwcml2YXRlOgorICAgIFZlY3RvcjxQaGFzZUluc2Vy
dGlvbiwgOD4gbV9pbnNlcnRpb25zOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6
OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJSZWdMaXZlbmVzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnTGl2ZW5lc3MuaAkocmV2aXNpb24gMjE0NDI3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdMaXZlbmVzcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiQWlyQmFzaWNCbG9jay5oIgogI2luY2x1
ZGUgIkFpckNvZGUuaCIKICNpbmNsdWRlICJBaXJJbnN0LmgiCisjaW5jbHVkZSAiQWlyTGl2ZW5l
c3MuaCIKICNpbmNsdWRlICJSZWdpc3RlclNldC5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CkBAIC01NCw2ICs1NSwxOSBAQCBwdWJsaWM6CiAgICAg
ICAgIHsKICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgLy8gSWYgeW91IGNvbXB1dGVkIFRt
cCBsaXZlbmVzcyBmb3Igc29tZSBiYW5rLCB5b3UgY2FuIHVzZSByZWcgbGl2ZW5lc3MgdG8gZmls
bCBpbiB0aGUgYmxhbmtzLgorICAgICAgICAvLyBOb3RlIHRoYXQgd2hhdCBoYXBwZW5zIHRvIHRo
ZSByZWdpc3RlcnMgbm90IGJlbG9uZ2luZyB0byB0aGUgYmFuayBpcyBhcmJpdHJhcnkgLSB0aGV5
IG1heSBnZXQKKyAgICAgICAgLy8gc2V0IG9yIG5vdC4KKyAgICAgICAgdGVtcGxhdGU8QmFuayBi
YW5rPgorICAgICAgICBMb2NhbENhbGMoVG1wTGl2ZW5lc3M8YmFuaz4mIGxpdmVuZXNzLCBCYXNp
Y0Jsb2NrKiBibG9jaykKKyAgICAgICAgICAgIDogbV9ibG9jayhibG9jaykKKyAgICAgICAgewor
ICAgICAgICAgICAgZm9yIChUbXAgdG1wIDogbGl2ZW5lc3MubGl2ZUF0VGFpbChibG9jaykpIHsK
KyAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgIG1f
d29ya3NldC5zZXQodG1wLnJlZygpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAKICAgICAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGxpdmUoKSBjb25zdAogICAgICAgICB7CiAg
ICAgICAgICAgICByZXR1cm4gbV93b3Jrc2V0OwpAQCAtODQsOCArOTgsOCBAQCBwdWJsaWM6CiAg
ICAgfQogICAgIAogcHJpdmF0ZToKLSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBSZWdpc3RlclNl
dD4gbV9saXZlQXRIZWFkOwotICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIFJlZ2lzdGVyU2V0PiBt
X2xpdmVBdFRhaWw7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jayosIFJlZ2lzdGVyU2V0PiBtX2xp
dmVBdEhlYWQ7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jayosIFJlZ2lzdGVyU2V0PiBtX2xpdmVB
dFRhaWw7CiB9OwogCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3Bw
CShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNw
aWxsRXZlcnl0aGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2lu
Y2x1ZGUgIkFpckFyZ0lubGluZXMuaCIKICNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAi
QWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCIKICNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQu
aCIKICNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgi
CkBAIC00Niw3ICs0Nyw3IEBAIHZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUmIGNvZGUpCiAgICAg
cGFkSW50ZXJmZXJlbmNlKGNvZGUpOwogCiAgICAgLy8gV2Ugd2FudCB0byBrbm93IHRoZSBzZXQg
b2YgcmVnaXN0ZXJzIHVzZWQgYXQgZXZlcnkgcG9pbnQgaW4gZXZlcnkgYmFzaWMgYmxvY2suCi0g
ICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgVmVjdG9yPFJlZ2lzdGVyU2V0Pj4gdXNlZFJlZ2lzdGVy
cyhjb2RlLnNpemUoKSk7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jayosIFZlY3RvcjxSZWdpc3Rl
clNldD4+IHVzZWRSZWdpc3RlcnMoY29kZS5zaXplKCkpOwogICAgIEdQTGl2ZW5lc3MgZ3BMaXZl
bmVzcyhjb2RlKTsKICAgICBGUExpdmVuZXNzIGZwTGl2ZW5lc3MoY29kZSk7CiAgICAgZm9yIChC
YXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKQEAgLTE3MywxMCArMTc0LDEzIEBAIHZvaWQgc3Bp
bGxFdmVyeXRoaW5nKENvZGUmIGNvZGUpCiAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGNob3NlblJlZyk7CiAKICAgICAgICAgICAgICAgICAgICAgdG1wID0gVG1wKGNob3NlblJl
Zyk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAocm9sZSA9
PSBBcmc6OlNjcmF0Y2gpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAg
ICAgICAgICAgICAgICAgT3Bjb2RlIG1vdmUgPSBiYW5rID09IEdQID8gTW92ZSA6IE1vdmVEb3Vi
bGU7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlVc2Uocm9sZSkgJiYgcm9s
ZSAhPSBBcmc6OlNjcmF0Y2gpCisgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzQW55VXNl
KHJvbGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydChpbnN0
SW5kZXgsIG1vdmUsIGluc3Qub3JpZ2luLCBhcmcsIHRtcCk7CiAgICAgICAgICAgICAgICAgICAg
IGlmIChBcmc6OmlzQW55RGVmKHJvbGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0
aW9uU2V0Lmluc2VydChpbnN0SW5kZXggKyAxLCBtb3ZlLCBpbnN0Lm9yaWdpbiwgdG1wLCBhcmcp
OwpAQCAtMTg0LDYgKzE4OCw4IEBAIHZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUmIGNvZGUpCiAg
ICAgICAgIH0KICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOwogICAgIH0KKyAg
ICAKKyAgICBmaXhTcGlsbHNBZnRlclRlcm1pbmFscyhjb2RlKTsKIH0KIAogfSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJUbXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
VG1wLmNwcAkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJUbXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDggKzI4LDE1IEBACiAKICNpZiBFTkFCTEUo
QjNfSklUKQogCisjaW5jbHVkZSAiQWlyVG1wSW5saW5lcy5oIgorCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CiAKK3RlbXBsYXRlPD4gY29uc3QgY2hhciog
Y29uc3QgVG1wOjpJbmRleGVkPEdQPjo6ZHVtcFByZWZpeCA9ICIldG1wIjsKK3RlbXBsYXRlPD4g
Y29uc3QgY2hhciogY29uc3QgVG1wOjpJbmRleGVkPEZQPjo6ZHVtcFByZWZpeCA9ICIlZnRtcCI7
Cit0ZW1wbGF0ZTw+IGNvbnN0IGNoYXIqIGNvbnN0IFRtcDo6QWJzb2x1dGVseUluZGV4ZWQ8R1A+
OjpkdW1wUHJlZml4ID0gIiVhYnMiOwordGVtcGxhdGU8PiBjb25zdCBjaGFyKiBjb25zdCBUbXA6
OkFic29sdXRlbHlJbmRleGVkPEZQPjo6ZHVtcFByZWZpeCA9ICIlZmFicyI7CisKIHZvaWQgVG1w
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgaWYgKCEqdGhpcykgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCShyZXZpc2lvbiAyMTQ0MjcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc0
LDYgKzc0LDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSBlbmNvZGVGUFRt
cChpbmRleCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQorICAgIAorICAgIHN0YXRp
YyBUbXAgdG1wRm9ySW5kZXgoQmFuayBiYW5rLCB1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAg
ICAgIGlmIChiYW5rID09IEdQKQorICAgICAgICAgICAgcmV0dXJuIGdwVG1wRm9ySW5kZXgoaW5k
ZXgpOworICAgICAgICBBU1NFUlQoYmFuayA9PSBGUCk7CisgICAgICAgIHJldHVybiBmcFRtcEZv
ckluZGV4KGluZGV4KTsKKyAgICB9CiAKICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29u
c3QgeyByZXR1cm4gISFtX3ZhbHVlOyB9CiAgICAgCkBAIC0xNTQsNyArMTYyLDE2IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIHJldHVybiBncFRtcEluZGV4KCk7CiAgICAgICAgIHJldHVybiBmcFRt
cEluZGV4KCk7CiAgICAgfQotCisgICAgCisgICAgdGVtcGxhdGU8QmFuayBiYW5rPiBjbGFzcyBJ
bmRleGVkOworICAgIHRlbXBsYXRlPEJhbmsgYmFuaz4gY2xhc3MgQWJzb2x1dGVseUluZGV4ZWQ7
CisgICAgCisgICAgdGVtcGxhdGU8QmFuayBiYW5rPgorICAgIEluZGV4ZWQ8YmFuaz4gaW5kZXhl
ZCgpIGNvbnN0OworICAgIAorICAgIHRlbXBsYXRlPEJhbmsgYmFuaz4KKyAgICBBYnNvbHV0ZWx5
SW5kZXhlZDxiYW5rPiBhYnNvbHV0ZWx5SW5kZXhlZCgpIGNvbnN0OworICAgIAogICAgIGJvb2wg
aXNBbGl2ZSgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gISEqdGhpczsKQEAgLTE5NSw2
ICsyMTIsOCBAQCBwdWJsaWM6CiAgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gc3RhdGljX2Nhc3Q8
aW50PihpbmRleCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQorICAgIAorICAgIHN0
YXRpYyBUbXAgdG1wRm9yQWJzb2x1dGVJbmRleChCYW5rLCB1bnNpZ25lZCk7CiAKIHByaXZhdGU6
CiAgICAgc3RhdGljIGludCBlbmNvZGVHUCh1bnNpZ25lZCBpbmRleCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wSW5saW5lcy5oCShyZXZpc2lvbiAyMTQ0Mjcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcElubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtOTIsNiArOTIsNTggQEAgc3RydWN0IEFic29sdXRlVG1wTWFwcGVyPEZQPiB7
CiAgICAgfQogfTsKIAordGVtcGxhdGU8QmFuayB0aGVCYW5rPgorY2xhc3MgVG1wOjpJbmRleGVk
IDogcHVibGljIFRtcCB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGR1
bXBQcmVmaXg7CisgICAgCisgICAgSW5kZXhlZChUbXAgdG1wKQorICAgICAgICA6IFRtcCh0bXAp
CisgICAgeworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gdG1wSW5kZXgodGhlQmFuayk7CisgICAgfQorfTsKKwordGVtcGxhdGU8
QmFuayB0aGVCYW5rPgorY2xhc3MgVG1wOjpBYnNvbHV0ZWx5SW5kZXhlZCA6IHB1YmxpYyBUbXAg
eworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBkdW1wUHJlZml4OworCisg
ICAgQWJzb2x1dGVseUluZGV4ZWQoVG1wIHRtcCkKKyAgICAgICAgOiBUbXAodG1wKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIEFic29sdXRlVG1wTWFwcGVyPHRoZUJhbms+OjphYnNvbHV0ZUluZGV4KCp0aGlzKTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTxCYW5rIHRoZUJhbms+CitUbXA6OkluZGV4ZWQ8dGhlQmFu
az4gVG1wOjppbmRleGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW5kZXhlZDx0aGVCYW5rPigq
dGhpcyk7Cit9CisKK3RlbXBsYXRlPEJhbmsgdGhlQmFuaz4KK1RtcDo6QWJzb2x1dGVseUluZGV4
ZWQ8dGhlQmFuaz4gVG1wOjphYnNvbHV0ZWx5SW5kZXhlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IEFic29sdXRlbHlJbmRleGVkPHRoZUJhbms+KCp0aGlzKTsKK30KKworVG1wIFRtcDo6dG1wRm9y
QWJzb2x1dGVJbmRleChCYW5rIGJhbmssIHVuc2lnbmVkIGluZGV4KQoreworICAgIGlmIChiYW5r
ID09IEdQKQorICAgICAgICByZXR1cm4gQWJzb2x1dGVUbXBNYXBwZXI8R1A+Ojp0bXBGcm9tQWJz
b2x1dGVJbmRleChpbmRleCk7CisgICAgQVNTRVJUKGJhbmsgPT0gRlApOworICAgIHJldHVybiBB
YnNvbHV0ZVRtcE1hcHBlcjxGUD46OnRtcEZyb21BYnNvbHV0ZUluZGV4KGluZGV4KTsKK30KKwog
fSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgogCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgJKHJldmlzaW9u
IDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAkod29y
a2luZyBjb3B5KQpAQCAtMTAyLDggKzEwMiwxNiBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAg
IC8vIEFsc28gYWxsb3cgYWRkL3JlbW92ZS9jb250YWlucyB0ZXJtaW5vbG9neSwgd2hpY2ggbWVh
bnMgdGhlIHNhbWUgdGhpbmcgYXMgc2V0L2NsZWFyL2dldC4KLSAgICB2b2lkIGFkZChSZWcgcmVn
KSB7IHNldChyZWcpOyB9Ci0gICAgdm9pZCByZW1vdmUoUmVnIHJlZykgeyBjbGVhcihyZWcpOyB9
CisgICAgYm9vbCBhZGQoUmVnIHJlZykKKyAgICB7CisgICAgICAgIEFTU0VSVCghIXJlZyk7Cisg
ICAgICAgIHJldHVybiAhbV9iaXRzLnRlc3RBbmRTZXQocmVnLmluZGV4KCkpOworICAgIH0KKyAg
ICBib29sIHJlbW92ZShSZWcgcmVnKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCEhcmVnKTsKKyAg
ICAgICAgcmV0dXJuIG1fYml0cy50ZXN0QW5kQ2xlYXIocmVnLmluZGV4KCkpOworICAgIH0KICAg
ICBib29sIGNvbnRhaW5zKFJlZyByZWcpIGNvbnN0IHsgcmV0dXJuIGdldChyZWcpOyB9CiAgICAg
CiAgICAgdm9pZCBtZXJnZShjb25zdCBSZWdpc3RlclNldCYgb3RoZXIpIHsgbV9iaXRzLm1lcmdl
KG90aGVyLm1fYml0cyk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRp
b25zLmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjI1LDYgKzIyNSw3IEBAIHR5cGVkZWYgY29u
c3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYoYm9vbCwgdXNlRlRMSklULCB0cnVlLCBOb3Jt
YWwsICJhbGxvd3MgdGhlIEZUTCBKSVQgdG8gYmUgdXNlZCBpZiB0cnVlIikgXAogICAgIHYoYm9v
bCwgdXNlRlRMVEJBQSwgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCB2YWxp
ZGF0ZUZUTE9TUkV4aXRMaXZlbmVzcywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAorICAgIHYo
dW5zaWduZWQsIGRlZmF1bHRCM09wdExldmVsLCAyLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2
KGJvb2wsIGIzQWx3YXlzRmFpbHNCZWZvcmVDb21waWxlLCBmYWxzZSwgTm9ybWFsLCBudWxscHRy
KSBcCiAgICAgdihib29sLCBiM0Fsd2F5c0ZhaWxzQmVmb3JlTGluaywgZmFsc2UsIE5vcm1hbCwg
bnVsbHB0cikgXAogICAgIHYoYm9vbCwgZnRsQ3Jhc2hlcywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0
cikgLyogZm9vbC1wcm9vZiB3YXkgb2YgY2hlY2tpbmcgdGhhdCB5b3UgZW5kZWQgdXAgaW4gdGhl
IEZUTC4gOy0pICovXApAQCAtMzk3LDYgKzM5OCw4IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0
aW9uU3RyaW5nOwogICAgIHYoYm9vbCwgbG9nQjNQaGFzZVRpbWVzLCBmYWxzZSwgTm9ybWFsLCBu
dWxscHRyKSBcCiAgICAgdihkb3VibGUsIHJhcmVCbG9ja1BlbmFsdHksIDAuMDAxLCBOb3JtYWws
IG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGFpclNwaWxsc0V2ZXJ5dGhpbmcsIGZhbHNlLCBOb3Jt
YWwsIG51bGxwdHIpIFwKKyAgICB2KGJvb2wsIGFpckxpbmVhclNjYW5WZXJib3NlLCBmYWxzZSwg
Tm9ybWFsLCBudWxscHRyKSBcCisgICAgdihib29sLCBhaXJMaW5lYXJTY2FuU3BpbGxzRXZlcnl0
aGluZywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgYWlyRm9yY2VCcmln
Z3NBbGxvY2F0b3IsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGFpckZv
cmNlSVJDQWxsb2NhdG9yLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCBj
b2FsZXNjZVNwaWxsU2xvdHMsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCShyZXZpc2lvbiAy
MTQ0MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
IAorI2luY2x1ZGUgIkIzQ29tbW9uLmgiCiAjaW5jbHVkZSAiQjNDb21waWxhdGlvbi5oIgogI2lu
Y2x1ZGUgIkNDYWxsSGVscGVycy5oIgogI2luY2x1ZGUgIlZNLmgiCkBAIC00Nyw3ICs0OCw3IEBA
IHN0cnVjdCBDb21waWxhdGlvbkNvbnRleHQgewogICAgIENDYWxsSGVscGVyczo6Q2FsbCBqc0Vu
dHJ5cG9pbnRUb1dhc21FbnRyeXBvaW50Q2FsbDsKIH07CiAKLUV4cGVjdGVkPHN0ZDo6dW5pcXVl
X3B0cjxXYXNtSW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKFZNJiwg
Q29tcGlsYXRpb25Db250ZXh0JiwgY29uc3QgdWludDhfdCosIHNpemVfdCwgY29uc3QgU2lnbmF0
dXJlKiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgY29uc3QgTW9kdWxlSW5mb3Jt
YXRpb24mLCBjb25zdCBWZWN0b3I8U2lnbmF0dXJlSW5kZXg+JiwgdW5zaWduZWQgb3B0TGV2ZWwg
PSAxKTsKK0V4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxXYXNtSW50ZXJuYWxGdW5jdGlvbj4sIFN0
cmluZz4gcGFyc2VBbmRDb21waWxlKFZNJiwgQ29tcGlsYXRpb25Db250ZXh0JiwgY29uc3QgdWlu
dDhfdCosIHNpemVfdCwgY29uc3QgU2lnbmF0dXJlKiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2Fz
bUNhbGw+JiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBjb25zdCBWZWN0b3I8U2lnbmF0dXJl
SW5kZXg+JiwgdW5zaWduZWQgb3B0TGV2ZWwgPSBCMzo6ZGVmYXVsdE9wdExldmVsKCkpOwogCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMjE0NDI3KQorKysg
U291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0NiBAQAorMjAx
Ny0wMy0zMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEFpciBz
aG91bGQgc3VwcG9ydCBsaW5lYXIgc2NhbiBmb3Igb3B0TGV2ZWw8MgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwMTYxCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGNoYW5nZSBpbnRy
b2R1Y2VzIGEgbmV3IGxvdy1sYXRlbmN5IHJlZ2lzdGVyIGFsbG9jYXRvci4gSXQgY2FuIGFsbG9j
YXRlIHJlZ2lzdGVycyB2ZXJ5CisgICAgICAgIHF1aWNrbHkgYnkgZG9pbmcgYSByZWxhdGl2ZWx5
IHBvb3Igam9iLiBJbXBsZW1lbnRpbmcgdGhpcyBhbGdvcml0aG0gcmVxdWlyZWQgYmVlZmluZyB1
cCBzb21lIG9mCisgICAgICAgIG91ciBjb3JlIGFsZ29yaXRobXMuCisKKyAgICAgICAgKiBXVEYu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6
CisgICAgICAgICogd3RmL0RlcXVlLmg6IE1ha2UgaXQgcG9zc2libGUgdG8gZG8gc29tZSBiYXNp
YyBwcmlvcml0eSBxdWV1ZWluZyB3aXRoIHRoaXMgZGF0YSBzdHJ1Y3R1cmUuCisgICAgICAgIChX
VEY6OmlubGluZUNhcGFjaXR5Pjo6cmVtb3ZlQWxsTWF0Y2hpbmcpOgorICAgICAgICAoV1RGOjpp
bmxpbmVDYXBhY2l0eT46OmFwcGVuZEFuZEJ1YmJsZSk6CisgICAgICAgIChXVEY6OmlubGluZUNh
cGFjaXR5Pjo6dGFrZUxhc3QpOgorICAgICAgICAqIHd0Zi9JbmRleEtleVR5cGUuaDogQWRkZWQu
IFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gdXNlIEluZGV4TWFwIGFuZCBJbmRleFNldCB3aXRo
IHZhbHVlIG9yIHBvaW50ZXIgdHlwZXMuIFByZXZpb3VzbHkgdGhleSBqdXN0IHdvcmtlZCB3aXRo
IHBvaW50ZXIgdHlwZXMuCisgICAgICAgIChXVEY6OkluZGV4S2V5VHlwZTo6aW5kZXgpOgorICAg
ICAgICAqIHd0Zi9JbmRleE1hcC5oOiBBZG9wdCBJbmRleEtleVR5cGUuCisgICAgICAgIChXVEY6
OkluZGV4TWFwOjpvcGVyYXRvcltdKToKKyAgICAgICAgKFdURjo6SW5kZXhNYXA6OmFwcGVuZCk6
CisgICAgICAgICogd3RmL0luZGV4U2V0Lmg6IEFkb3B0IEluZGV4S2V5VHlwZS4KKyAgICAgICAg
KFdURjo6SW5kZXhTZXQ6OmFkZCk6CisgICAgICAgIChXVEY6OkluZGV4U2V0OjphZGRBbGwpOgor
ICAgICAgICAoV1RGOjpJbmRleFNldDo6cmVtb3ZlKToKKyAgICAgICAgKFdURjo6SW5kZXhTZXQ6
OmNvbnRhaW5zKToKKyAgICAgICAgKFdURjo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjppdGVyYXRvcjo6
b3BlcmF0b3IqKToKKyAgICAgICAgKiB3dGYvUmFuZ2UuaDogQWRkZWQuIFRoaXMgdXNlZCB0byBi
ZSBCMzo6SGVhcFJhbmdlLiBUaGlzIGdlbmVyYWxpemVzIHRoYXQgZGF0YSBzdHJ1Y3R1cmUgdG8g
YW55IGtpbmQgb2YgcmFuZ2Ugc3R1ZmYuCisgICAgICAgIChXVEY6OlJhbmdlOjpSYW5nZSk6Cisg
ICAgICAgIChXVEY6OlJhbmdlOjp0b3ApOgorICAgICAgICAoV1RGOjpSYW5nZTo6b3BlcmF0b3I9
PSk6CisgICAgICAgIChXVEY6OlJhbmdlOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6UmFu
Z2U6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoV1RGOjpSYW5nZTo6b3BlcmF0b3J8KToKKyAg
ICAgICAgKFdURjo6UmFuZ2U6Om9wZXJhdG9yfD0pOgorICAgICAgICAoV1RGOjpSYW5nZTo6YmVn
aW4pOgorICAgICAgICAoV1RGOjpSYW5nZTo6ZW5kKToKKyAgICAgICAgKFdURjo6UmFuZ2U6Om92
ZXJsYXBzKToKKyAgICAgICAgKFdURjo6UmFuZ2U6OmR1bXApOgorICAgICAgICAqIHd0Zi9SYW5n
ZVNldC5oOgorICAgICAgICAoV1RGOjpSYW5nZVNldDo6YWRkKToKKwogMjAxNy0wMy0yNiAgRmls
aXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIEIzOjpmaXhTU0Egc2hvdWxk
IGRvIGxpdmVuZXNzIHBydW5pbmcKSW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMjE0NDI3KQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsOCBAQAogLyogQmVn
aW4gUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KIAkJMEYwRDg1QjQxNzIzNENDMTAwMzM4MjEwIC8q
IE5vTG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYwRDg1QjMxNzIzNENCMTAwMzM4MjEwIC8qIE5vTG9jay5oICovOyB9OwogCQkwRjBGQ0RERTFE
RDE2N0Y5MDBDQ0FCNTMgLyogTG9ja0FsZ29yaXRobS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwRkNEREQxREQxNjdGOTAwQ0NBQjUzIC8qIExvY2tB
bGdvcml0aG0uaCAqLzsgfTsKKwkJMEYyQUM1NjExRTg5RjcwQzAwMDFFRTNGIC8qIFJhbmdlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJBQzU2MDFF
ODlGNzBDMDAwMUVFM0YgLyogUmFuZ2UuaCAqLzsgfTsKKwkJMEYyQUM1NjMxRThBMDE0OTAwMDFF
RTNGIC8qIEluZGV4S2V5VHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYyQUM1NjIxRThBMDE0OTAwMDFFRTNGIC8qIEluZGV4S2V5VHlwZS5oICov
OyB9OwogCQkwRjJCNjZBNjE3QjZCNEZCMDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE0
MTdCNkI0RjcwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5oICovOyB9OwogCQkwRjJC
NjZBNzE3QjZCNEZEMDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBNTE3QjZCNEY3MDBBN0FFM0YgLyogRmxp
cEJ5dGVzLmggKi87IH07CiAJCTBGMzBCQTkwMUU3ODcwOEUwMDJDQTg0NyAvKiBHbG9iYWxWZXJz
aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MzBCQThBMUU3ODcwOEUwMDJDQTg0NyAvKiBHbG9iYWxWZXJzaW9uLmNwcCAqLzsgfTsKQEAgLTQw
OCw2ICs0MTAsOCBAQAogLyogQmVnaW4gUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCiAJCTBG
MEQ4NUIzMTcyMzRDQjEwMDMzODIxMCAvKiBOb0xvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm9Mb2Nr
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMEZDREREMUREMTY3RjkwMENDQUI1
MyAvKiBMb2NrQWxnb3JpdGhtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExv
Y2tBbGdvcml0aG0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQUM1NjAxRTg5
RjcwQzAwMDFFRTNGIC8qIFJhbmdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJhbmdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkFDNTYyMUU4QTAxNDkw
MDAxRUUzRiAvKiBJbmRleEtleVR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSW5kZXhLZXlUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkE0
MTdCNkI0RjcwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBEZWZlcnJhYmxlUmVmQ291bnRlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjJCNjZBNTE3QjZCNEY3MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZs
aXBCeXRlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjMwMEI3RDE4QUI0OEI0
MDBBNkQ3MkUgLyogSGFzaE1ldGhvZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIYXNoTWV0aG9kLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDE4LDEwICsxMDIyLDExIEBACiAJCQkJQThB
NDcyQkExNTFBODI1QTAwNDEyM0ZGIC8qIEhhc2hUcmFpdHMuaCAqLywKIAkJCQlBOEE0NzJCQjE1
MUE4MjVBMDA0MTIzRkYgLyogSGV4TnVtYmVyLmggKi8sCiAJCQkJRkU4OTI1QUYxRDAwREFFQzAw
NDY5MDdFIC8qIEluZGVudGVyLmggKi8sCi0JCQkJOUM2N0M1NDI1ODkzNDhFMjg1QjQ5Njk5IC8q
IEluZGV4ZWRDb250YWluZXJJdGVyYXRvci5oICovLAorCQkJCTBGMkFDNTYyMUU4QTAxNDkwMDAx
RUUzRiAvKiBJbmRleEtleVR5cGUuaCAqLywKIAkJCQk1QjQzMzgzQTVEMEI0NjNDOTQzM0Q5MzMg
LyogSW5kZXhNYXAuaCAqLywKIAkJCQkzMTM3RTFEN0RCRDg0QUMzOEZBRTREMzQgLyogSW5kZXhT
ZXQuaCAqLywKIAkJCQkyNjg0RDQzNTFDMDAwRDQwMDA4MUQ2NjMgLyogSW5kZXhTcGFyc2VTZXQu
aCAqLywKKwkJCQk5QzY3QzU0MjU4OTM0OEUyODVCNDk2OTkgLyogSW5kZXhlZENvbnRhaW5lckl0
ZXJhdG9yLmggKi8sCiAJCQkJQThBNDcyQkMxNTFBODI1QTAwNDEyM0ZGIC8qIElubGluZUFTTS5o
ICovLAogCQkJCUE3MERBMDgyMTc5OUYwNEQwMDUyOUE5QiAvKiBJbnNlcnRpb24uaCAqLywKIAkJ
CQk3Q0REN0ZGNzE4NkQyOTFFMDA3NDMzQ0QgLyogSXRlcmF0b3JBZGFwdG9ycy5oICovLApAQCAt
MTEwMCw2ICsxMTA1LDcgQEAKIAkJCQlBOEE0NzJGQjE1MUE4MjVCMDA0MTIzRkYgLyogUmFuZG9t
TnVtYmVyLmNwcCAqLywKIAkJCQlBOEE0NzJGQzE1MUE4MjVCMDA0MTIzRkYgLyogUmFuZG9tTnVt
YmVyLmggKi8sCiAJCQkJQThBNDcyRkQxNTFBODI1QjAwNDEyM0ZGIC8qIFJhbmRvbU51bWJlclNl
ZWQuaCAqLywKKwkJCQkwRjJBQzU2MDFFODlGNzBDMDAwMUVFM0YgLyogUmFuZ2UuaCAqLywKIAkJ
CQkwRjcyNUNBQjFDNTA0NjE2MDBBRDk0M0EgLyogUmFuZ2VTZXQuaCAqLywKIAkJCQkwRjg3MTA1
OTE2NjQzRjE5MDA5MEIwQUQgLyogUmF3UG9pbnRlci5oICovLAogCQkJCTBGREU4N0Y2MURGRDA3
Q0MwMDY0QzM5MCAvKiBSZWN1cnNpdmVMb2NrQWRhcHRlci5oICovLApAQCAtMTQ4NSw2ICsxNDkx
LDcgQEAKIAkJCQlDOTE2Qjk3NUYwMkY0RjdFOEI0QUIxMkQgLyogSW5kZXhNYXAuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUM4QjBFMUExRTAxQTQ4NkVCOTVFMEQxMSAvKiBJbmRleFNldC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMjY4NEQ0MzYxQzAwMEQ0MDAwODFENjYzIC8qIEluZGV4U3BhcnNlU2V0
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJBQzU2MzFFOEEwMTQ5MDAwMUVFM0YgLyogSW5kZXhL
ZXlUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNEQzE1MUE4MjVCMDA0MTIzRkYgLyog
SW5saW5lQVNNLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzBEQTA4NDE3OTlGMDREMDA1MjlBOUIg
LyogSW5zZXJ0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkyNjE0N0IwQTE1RERDQ0RDMDBEREI5
MDcgLyogSW50ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNTg2
LDYgKzE1OTMsNyBAQAogCQkJCTQzMEI0Nzg5MUFBQUFDMUEwMDEyMjNEQSAvKiBTdHJpbmdDb21t
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDNFMTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJp
bmdDb25jYXRlbmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0NENEMyNzAxRTJDODJCOTAwOTI5
NDcwIC8qIFN0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYy
QUM1NjExRTg5RjcwQzAwMDFFRTNGIC8qIFJhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0
NzQyQzE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nRXh0cmFzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBOEE0NzQzRjE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nSGFzaC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTc0ODc0NTQxN0EwQkRBRTAwRkEwNENCIC8qIFN0cmluZ0hhc2hEdW1wQ29udGV4dC5o
IGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjE0NDI3
KQorKysgU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEw
MCw2ICsxMDAsNyBAQCBzZXQoV1RGX0hFQURFUlMKICAgICBSQU1TaXplLmgKICAgICBSYW5kb21O
dW1iZXIuaAogICAgIFJhbmRvbU51bWJlclNlZWQuaAorICAgIFJhbmdlLmgKICAgICBSYW5nZVNl
dC5oCiAgICAgUmF3UG9pbnRlci5oCiAgICAgUmVjdXJzaXZlTG9ja0FkYXB0ZXIuaApJbmRleDog
U291cmNlL1dURi93dGYvRGVxdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9EZXF1
ZS5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvV1RGL3d0Zi9EZXF1ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDctMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
QEAgLTg5LDYgKzg5LDE5IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZUxhc3QoKTsKICAgICB2
b2lkIHJlbW92ZShpdGVyYXRvciYpOwogICAgIHZvaWQgcmVtb3ZlKGNvbnN0X2l0ZXJhdG9yJik7
CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4gdm9pZCByZW1vdmVBbGxNYXRjaGlu
Zyhjb25zdCBGdW5jJik7CisgICAgCisgICAgLy8gVGhpcyBpcyBhIHByaW9yaXR5IGVucXVldWUu
IFRoZSBjYWxsYmFjayBpcyBnaXZlbiBhIHZhbHVlLCBhbmQgaWYgaXQgcmV0dXJucyB0cnVlLCB0
aGVuIHRoaXMKKyAgICAvLyB3aWxsIHB1dCB0aGUgYXBwZW5kZWQgdmFsdWUgYmVmb3JlIHRoYXQg
dmFsdWUuIEl0IHdpbGwga2VlcCBidWJibGluZyB1bnRpbCB0aGUgY2FsbGJhY2sgcmV0dXJucwor
ICAgIC8vIGZhbHNlIG9yIHRoZSB2YWx1ZSBlbmRzIHVwIGF0IHRoZSBoZWFkIG9mIHRoZSBxdWV1
ZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCB0eXBlbmFtZSBGdW5jPgorICAgIHZvaWQgYXBw
ZW5kQW5kQnViYmxlKFUmJiwgY29uc3QgRnVuYyYpOworICAgIAorICAgIC8vIFJlbW92ZSBhbmQg
cmV0dXJuIHRoZSBsYXN0IGVsZW1lbnQgZm9yIHdoaWNoIHRoZSBjYWxsYmFjayByZXR1cm5zIHRy
dWUuIFJldHVybnMgYSBudWxsIHZlcnNpb24gb2YKKyAgICAvLyBUIGlmIGl0IHRoZSBjYWxsYmFj
ayBhbHdheXMgcmV0dXJucyBmYWxzZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAg
IFQgdGFrZUxhc3QoY29uc3QgRnVuYyYpOwogCiAgICAgdm9pZCBjbGVhcigpOwogCkBAIC01MjQs
NiArNTM3LDU1IEBAIGlubGluZSB2b2lkIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6cmUKICAg
ICBjaGVja1ZhbGlkaXR5KCk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxp
bmVDYXBhY2l0eT4KK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CitpbmxpbmUgdm9pZCBEZXF1ZTxU
LCBpbmxpbmVDYXBhY2l0eT46OnJlbW92ZUFsbE1hdGNoaW5nKGNvbnN0IEZ1bmMmIGZ1bmMpCit7
CisgICAgc2l6ZV90IGNvdW50ID0gc2l6ZSgpOworICAgIHdoaWxlIChjb3VudC0tKSB7CisgICAg
ICAgIFQgdmFsdWUgPSB0YWtlRmlyc3QoKTsKKyAgICAgICAgaWYgKCFmdW5jKHZhbHVlKSkKKyAg
ICAgICAgICAgIGFwcGVuZChXVEZNb3ZlKHZhbHVlKSk7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBVLCB0
eXBlbmFtZSBGdW5jPgoraW5saW5lIHZvaWQgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+OjphcHBl
bmRBbmRCdWJibGUoVSYmIHZhbHVlLCBjb25zdCBGdW5jJiBmdW5jKQoreworICAgIGFwcGVuZChX
VEZNb3ZlKHZhbHVlKSk7CisgICAgaXRlcmF0b3IgYmVnaW4gPSB0aGlzLT5iZWdpbigpOworICAg
IGl0ZXJhdG9yIGl0ZXIgPSBlbmQoKTsKKyAgICAtLWl0ZXI7CisgICAgd2hpbGUgKGl0ZXIgIT0g
YmVnaW4pIHsKKyAgICAgICAgaXRlcmF0b3IgcHJldiA9IGl0ZXI7CisgICAgICAgIC0tcHJldjsK
KyAgICAgICAgaWYgKCFmdW5jKCpwcmV2KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
c3RkOjpzd2FwKCpwcmV2LCAqaXRlcik7CisgICAgICAgIGl0ZXIgPSBwcmV2OworICAgIH0KK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgordGVtcGxhdGU8
dHlwZW5hbWUgRnVuYz4KK2lubGluZSBUIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6dGFrZUxh
c3QoY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICB1bnNpZ25lZCBjb3VudCA9IDA7CisgICAgdW5z
aWduZWQgc2l6ZSA9IHRoaXMtPnNpemUoKTsKKyAgICB3aGlsZSAoY291bnQgPCBzaXplKSB7Cisg
ICAgICAgIFQgY2FuZGlkYXRlID0gdGFrZUxhc3QoKTsKKyAgICAgICAgaWYgKGZ1bmMoY2FuZGlk
YXRlKSkgeworICAgICAgICAgICAgd2hpbGUgKGNvdW50LS0pCisgICAgICAgICAgICAgICAgYXBw
ZW5kKHRha2VGaXJzdCgpKTsKKyAgICAgICAgICAgIHJldHVybiBjYW5kaWRhdGU7CisgICAgICAg
IH0KKyAgICAgICAgY291bnQrKzsKKyAgICAgICAgcHJlcGVuZChXVEZNb3ZlKGNhbmRpZGF0ZSkp
OworICAgIH0KKyAgICByZXR1cm4gVCgpOworfQorCiAjaWZkZWYgTkRFQlVHCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+IGlubGluZSB2b2lkIERlcXVlSXRlcmF0
b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5Pjo6Y2hlY2tWYWxpZGl0eSgpIGNvbnN0IHsgfQogdGVt
cGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBpbmxpbmUgdm9pZCBEZXF1
ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT46OmNoZWNrVmFsaWRpdHkoY29uc3QgRGVx
dWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+JikgY29uc3QgeyB9CkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9JbmRleEtleVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9J
bmRleEtleVR5cGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9JbmRleEtleVR5
cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV1RG
IHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBJbmRleEtleVR5cGUgeworICAgIHN0
YXRpYyBzaXplX3QgaW5kZXgoY29uc3QgVCYga2V5KSB7IHJldHVybiBrZXkuaW5kZXgoKTsgfQor
fTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBJbmRleEtleVR5cGU8VCo+IHsKKyAg
ICBzdGF0aWMgc2l6ZV90IGluZGV4KFQqIGtleSkgeyByZXR1cm4ga2V5LT5pbmRleCgpOyB9Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNlL1dURi93dGYvSW5kZXhNYXAu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9JbmRleE1hcC5oCShyZXZpc2lvbiAyMTQ0
MjcpCisrKyBTb3VyY2UvV1RGL3d0Zi9JbmRleE1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2
ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSA8d3RmL0luZGV4S2V5VHlwZS5o
PgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdURiB7CkBAIC03MCwxOCAr
NzEsMjQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV92ZWN0b3JbaW5kZXhdOwogICAgIH0K
ICAgICAKLSAgICBWYWx1ZSYgb3BlcmF0b3JbXShLZXkqIGtleSkKKyAgICBWYWx1ZSYgb3BlcmF0
b3JbXShjb25zdCBLZXkmIGtleSkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3ZlY3RvcltrZXkt
PmluZGV4KCldOworICAgICAgICByZXR1cm4gbV92ZWN0b3JbSW5kZXhLZXlUeXBlPEtleT46Omlu
ZGV4KGtleSldOwogICAgIH0KICAgICAKLSAgICBjb25zdCBWYWx1ZSYgb3BlcmF0b3JbXShLZXkq
IGtleSkgY29uc3QKKyAgICBjb25zdCBWYWx1ZSYgb3BlcmF0b3JbXShjb25zdCBLZXkmIGtleSkg
Y29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3ZlY3RvcltrZXktPmluZGV4KCldOworICAg
ICAgICByZXR1cm4gbV92ZWN0b3JbSW5kZXhLZXlUeXBlPEtleT46OmluZGV4KGtleSldOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGFwcGVuZChjb25zdCBLZXkmIGtleSwgVmFsdWUgdmFsdWUpCisg
ICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChJbmRleEtleVR5cGU8S2V5Pjo6aW5kZXgoa2V5
KSA9PSBtX3ZlY3Rvci5zaXplKCkpOworICAgICAgICBtX3ZlY3Rvci5hcHBlbmQodmFsdWUpOwog
ICAgIH0KIAogcHJpdmF0ZToKLSAgICBWZWN0b3I8VmFsdWU+IG1fdmVjdG9yOworICAgIFZlY3Rv
cjxWYWx1ZSwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fdmVjdG9yOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9JbmRleFNldC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL0luZGV4U2V0LmgJKHJldmlzaW9uIDIxNDQyNykKKysrIFNvdXJj
ZS9XVEYvd3RmL0luZGV4U2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw2ICsyNyw3IEBACiAK
ICNpbmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5o
PgorI2luY2x1ZGUgPHd0Zi9JbmRleEtleVR5cGUuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKQEAg
LTQyLDMwICs0MywzMCBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIGJvb2wgYWRkKFQq
IHZhbHVlKQorICAgIGJvb2wgYWRkKGNvbnN0IFQmIHZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0
dXJuICFtX3NldC5zZXQodmFsdWUtPmluZGV4KCkpOworICAgICAgICByZXR1cm4gIW1fc2V0LnNl
dChJbmRleEtleVR5cGU8VD46OmluZGV4KHZhbHVlKSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgSXRlcmFibGU+CiAgICAgYm9vbCBhZGRBbGwoY29uc3QgSXRlcmFibGUmIGl0ZXJh
YmxlKQogICAgIHsKICAgICAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgZm9yIChU
KiB2YWx1ZSA6IGl0ZXJhYmxlKQorICAgICAgICBmb3IgKGNvbnN0IFQmIHZhbHVlIDogaXRlcmFi
bGUpCiAgICAgICAgICAgICByZXN1bHQgfD0gYWRkKHZhbHVlKTsKICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9CiAKLSAgICBib29sIHJlbW92ZShUKiB2YWx1ZSkKKyAgICBib29sIHJlbW92
ZShjb25zdCBUJiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3NldC5jbGVhcih2YWx1
ZS0+aW5kZXgoKSk7CisgICAgICAgIHJldHVybiBtX3NldC5jbGVhcihJbmRleEtleVR5cGU8VD46
OmluZGV4KHZhbHVlKSk7CiAgICAgfQogCi0gICAgYm9vbCBjb250YWlucyhUKiB2YWx1ZSkgY29u
c3QKKyAgICBib29sIGNvbnRhaW5zKGNvbnN0IFQmIHZhbHVlKSBjb25zdAogICAgIHsKICAgICAg
ICAgaWYgKCF2YWx1ZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJu
IG1fc2V0LmdldCh2YWx1ZS0+aW5kZXgoKSk7CisgICAgICAgIHJldHVybiBtX3NldC5nZXQoSW5k
ZXhLZXlUeXBlPFQ+OjppbmRleCh2YWx1ZSkpOwogICAgIH0KIAogICAgIHNpemVfdCBzaXplKCkg
Y29uc3QKQEAgLTEwMCw3ICsxMDEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIFQqIG9wZXJhdG9yKigpCisgICAgICAgICAgICBUIG9wZXJh
dG9yKigpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1fY29sbGVjdGlv
bi0+YXQoKm1faXRlcik7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9SYW5n
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1JhbmdlLmgJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL1dURi93dGYvUmFuZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRy
YXMuaD4KKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdURiB7CisK
Ky8vIE5vdGUgdGhhdCB0aGUgJ2JlZ2luJyBpcyBpbmNsdXNpdmUsIHdoaWxlIHRoZSAnZW5kJyBp
cyBleGNsdXNpdmUuIFRoZXNlIHR3byByYW5nZXMgYXJlIG5vbi0KKy8vIG92ZXJsYXBwaW5nOgor
Ly8KKy8vICAgICByYW5nZUEgPSAwLi4uOAorLy8gICAgIHJhbmdlQiA9IDguLi4xNgorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBQYXNzZWRUeXBlPgorY2xhc3MgUmFuZ2UgeworcHVibGljOgorICAgIHR5
cGVkZWYgUGFzc2VkVHlwZSBUeXBlOworICAgIAorICAgIFJhbmdlKCkKKyAgICAgICAgOiBtX2Jl
Z2luKDApCisgICAgICAgICwgbV9lbmQoMCkKKyAgICB7CisgICAgfQorCisgICAgZXhwbGljaXQg
UmFuZ2UoVHlwZSB2YWx1ZSkKKyAgICAgICAgOiBtX2JlZ2luKHZhbHVlKQorICAgICAgICAsIG1f
ZW5kKHZhbHVlICsgMSkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2VuZCA+PSBtX2JlZ2luKTsK
KyAgICB9CisKKyAgICBSYW5nZShUeXBlIGJlZ2luLCBUeXBlIGVuZCkKKyAgICAgICAgOiBtX2Jl
Z2luKGJlZ2luKQorICAgICAgICAsIG1fZW5kKGVuZCkKKyAgICB7CisgICAgICAgIEFTU0VSVCht
X2VuZCA+PSBtX2JlZ2luKTsKKyAgICAgICAgaWYgKG1fYmVnaW4gPT0gbV9lbmQpIHsKKyAgICAg
ICAgICAgIC8vIENhbm9uaWNhbGl6ZSBlbXB0eSByYW5nZXMuCisgICAgICAgICAgICBtX2JlZ2lu
ID0gMDsKKyAgICAgICAgICAgIG1fZW5kID0gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0
YXRpYyBSYW5nZSB0b3AoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFJhbmdlKHN0ZDo6bnVtZXJp
Y19saW1pdHM8VHlwZT46Om1pbigpLCBzdGQ6Om51bWVyaWNfbGltaXRzPFR5cGU+OjptYXgoKSk7
CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJhbmdlJiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2JlZ2luID09IG90aGVyLm1fYmVnaW4KKyAgICAgICAg
ICAgICYmIG1fZW5kID09IG90aGVyLm1fZW5kOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBSYW5nZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhp
cyA9PSBvdGhlcik7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBj
b25zdCB7IHJldHVybiBtX2JlZ2luICE9IG1fZW5kOyB9CisKKyAgICBSYW5nZSBvcGVyYXRvcnwo
Y29uc3QgUmFuZ2UmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCEqdGhpcykKKyAg
ICAgICAgICAgIHJldHVybiBvdGhlcjsKKyAgICAgICAgaWYgKCFvdGhlcikKKyAgICAgICAgICAg
IHJldHVybiAqdGhpczsKKyAgICAgICAgcmV0dXJuIFJhbmdlKAorICAgICAgICAgICAgc3RkOjpt
aW4obV9iZWdpbiwgb3RoZXIubV9iZWdpbiksCisgICAgICAgICAgICBzdGQ6Om1heChtX2VuZCwg
b3RoZXIubV9lbmQpKTsKKyAgICB9CisgICAgCisgICAgUmFuZ2UmIG9wZXJhdG9yfD0oY29uc3Qg
UmFuZ2UmIG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzID0gKnRoaXMgfCBvdGhl
cjsKKyAgICB9CisgICAgCisgICAgVHlwZSBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fYmVnaW47
IH0KKyAgICBUeXBlIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kOyB9CisKKyAgICBib29sIG92
ZXJsYXBzKGNvbnN0IFJhbmdlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBX
VEY6OnJhbmdlc092ZXJsYXAobV9iZWdpbiwgbV9lbmQsIG90aGVyLm1fYmVnaW4sIG90aGVyLm1f
ZW5kKTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAg
ICB7CisgICAgICAgIGlmICgqdGhpcyA9PSBSYW5nZSgpKSB7CisgICAgICAgICAgICBvdXQucHJp
bnQoIkJvdHRvbSIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlm
ICgqdGhpcyA9PSB0b3AoKSkgeworICAgICAgICAgICAgb3V0LnByaW50KCJUb3AiKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9iZWdpbiA9PSBtX2VuZCAr
IDEpIHsKKyAgICAgICAgICAgIG91dC5wcmludChtX2JlZ2luKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBvdXQucHJpbnQobV9iZWdpbiwgIi4uLiIsIG1fZW5kKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgVHlwZSBtX2JlZ2luOworICAgIFR5cGUgbV9lbmQ7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpSYW5nZTsKKwpJbmRleDogU291
cmNlL1dURi93dGYvUmFuZ2VTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9SYW5n
ZVNldC5oCShyZXZpc2lvbiAyMTQ0MjcpCisrKyBTb3VyY2UvV1RGL3d0Zi9SYW5nZVNldC5oCSh3
b3JraW5nIGNvcHkpCkBAIC03Nyw2ICs3NywxMCBAQCBwdWJsaWM6CiAgICAgICAgIG1faXNDb21w
YWN0ID0gZmFsc2U7CiAKICAgICAgICAgLy8gV2UgYXBwZW5kIHdpdGhvdXQgY29tcGFjdGluZyBv
bmx5IGlmIGRvaW5nIHNvIGlzIGd1YXJhbnRlZWQgbm90IHRvIHJlc2l6ZSB0aGUgdmVjdG9yLgor
ICAgICAgICAvLyBGSVhNRTogVGhpcyBoZXVyaXN0aWMgaXMgYWxtb3N0IGNlcnRhaW5seSB3cm9u
ZywgYmVjYXVzZSB3ZSBkb24ndCBjb250cm9sIHRoZSBjYXBhY2l0eS4gSQorICAgICAgICAvLyB0
aGluayB0aGF0IHRoaXMgbWVhbnMgdGhhdCB3ZSB3aWxsIHNvbWV0aW1lcyBiZSByYWdlLWNvbXBh
Y3Rpbmcgd2hlbiB3ZSBhcmUganVzdCBzaHkgb2YgdGhlCisgICAgICAgIC8vIGNhcGFjaXR5Lgor
ICAgICAgICAvLyBPT1BTOiBuZWVkIGJ1ZyB1cmwKICAgICAgICAgaWYgKG1fcmFuZ2VzLnNpemUo
KSArIDEgPCBtX3Jhbmdlcy5jYXBhY2l0eSgpKSB7CiAgICAgICAgICAgICBtX3Jhbmdlcy5hcHBl
bmQocmFuZ2UpOwogICAgICAgICAgICAgcmV0dXJuOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305890</attachid>
            <date>2017-03-30 13:23:04 -0700</date>
            <delta_ts>2017-03-30 13:50:15 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>135771</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE0NjE4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0NCBA
QAorMjAxNy0wMy0zMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEFpciBzaG91bGQgc3VwcG9ydCBsaW5lYXIgc2NhbiBmb3Igb3B0TGV2ZWw8MgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwMTYxCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGNoYW5n
ZXMgdGhlIGRlZmF1bHQgb3B0IGxldmVsIG9mIEIzIHRvIDIuIEl0IG1ha2VzIHRoZSBvdGhlciBv
cHQgbGV2ZWxzIHVzZWZ1bCBieSBhZGRpbmcgYQorICAgICAgICBuZXcgcmVnaXN0ZXIgYWxsb2Nh
dG9yLiBUaGlzIG5ldyBsaW5lYXIgc2NhbiBhbGxvY2F0b3Igd2lsbCBwcm9kdWNlIHNpZ25pZmlj
YW50bHkgd29yc2UgY29kZS4KKyAgICAgICAgQnV0IGl0IHdpbGwgcHJvZHVjZSB0aGF0IGNvZGUg
YSBsb3QgZmFzdGVyIHRoYW4gSVJDIG9yIEJyaWdncy4KKyAgICAgICAgCisgICAgICAgIFRoZSBv
cHQgbGV2ZWxzIGFyZToKKyAgICAgICAgICAgIDA6IG5vIG9wdGltaXphdGlvbnMsIGxpbmVhciBz
Y2FuCisgICAgICAgICAgICAxOiBzb21lIG9wdGltaXphdGlvbnMsIGxpbmVhciBzY2FuCisgICAg
ICAgICAgICAyOiBmdWxsIG9wdGltaXphdGlvbnMsIGdyYXBoIGNvbG9yaW5nIChJUkMgb3IgQnJp
Z2dzIGJhc2VkIG9uIENQVSkKKyAgICAgICAgCisgICAgICAgIFdoYXQgd2UgdXNlZCB0byBjYWxs
IG9wdExldmVsPTEgaXMgbm90IGNhbGxlZCBvcHRMZXZlbD0yLCBvciBiZXR0ZXIgeWV0LAorICAg
ICAgICBvcHRMZXZlbD1CMzo6ZGVmYXVsdE9wdExldmVsKCkuIFdlIG5vIGxvbmdlciBoYXZlIGFu
eXRoaW5nIGxpa2UgdGhlIG9sZCBvcHRMZXZlbD0wICh3aGljaCBkaWQgbm8KKyAgICAgICAgb3B0
aW1pemF0aW9ucyBidXQgcmFuIGdyYXBoIGNvbG9yaW5nKS4KKyAgICAgICAgCisgICAgICAgIGFs
bG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuKCkgZmFpdGhmdWxseSBpbXBsZW1lbnRzIE1hc3Np
bWlsaWFubyBQb2xldHRvIGFuZCBWaXZlayBTYXJrYXIncworICAgICAgICBmYW1vdXMgYWxnb3Jp
dGhtLiBJdCB1c2VzIHRoZSB2YXJpYW50IHRoYXQgaGFuZGxlcyBjbG9iYmVyZWQgcmVnaXN0ZXJz
IGJ5IGF2b2lkaW5nIGFzc2lnbmluZworICAgICAgICByYW5nZXMgdG8gdGhvc2UgcmVnaXN0ZXJz
IGlmIHRoZSByYW5nZSBvdmVybGFwcyBhIGNsb2JiZXIuIEl0J3MgZW5naW5lZXJlZCB0byBhbGxv
Y2F0ZSByZWdpc3RlcnMKKyAgICAgICAgdmVyeSBxdWlja2x5IGFuZCBnZW5lcmF0ZSBpbmVmZmlj
aWVudCBjb2RlIHdpdGhvdXQgZmFsbGluZyBvZmYgYSBjbGlmZi4KKyAgICAgICAgCisgICAgICAg
IFRoZSBuZXcgb3B0TGV2ZWw9MSBzcGVlZHMgdXAgQjMgYnkgYSBmYWN0b3Igb2YgMiwgYW5kIHJl
c3VsdHMgaW4gYSA4MCUgdGhyb3VnaHB1dCByZWdyZXNzaW9uLgorCisgICAgICAgICogQ01ha2VM
aXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBiMy9CM0Jhc2ljQmxvY2tVdGlscy5oOgorICAgICAgICAoSlNDOjpC
Mzo6YmxvY2tzSW5QcmVPcmRlcik6CisgICAgICAgIChKU0M6OkIzOjpibG9ja3NJblBvc3RPcmRl
cik6CisgICAgICAgICogYjMvQjNCbG9ja1dvcmtsaXN0Lmg6CisgICAgICAgICogYjMvQjNDRkcu
aDoKKyAgICAgICAgKEpTQzo6QjM6OkNGRzo6bmV3TWFwKToKKyAgICAgICAgKiBiMy9CM0NvbW1v
bi5oOgorICAgICAgICAoSlNDOjpCMzo6ZGVmYXVsdE9wdExldmVsKToKKyAgICAgICAgKiBiMy9C
M0NvbXBpbGUuaDoKKyAgICAgICAgKiBiMy9CM0R1cGxpY2F0ZVRhaWxzLmNwcDoKKyAgICAgICAg
KiBiMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcDoKKyAgICAgICAgKiBiMy9C
M0ZpeFNTQS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpkZW1vdGVWYWx1ZXMpOgorICAgICAgICAo
SlNDOjpCMzo6Zml4U1NBKToKKyAgICAgICAgKiBiMy9CM0ZpeFNTQS5oOgorICAgICAgICAqIGIz
L0IzR2VuZXJhdGUuY3BwOgorICAgICAgICAoSlNDOjpCMzo6cHJlcGFyZUZvckdlbmVyYXRpb24p
OgorICAgICAgICAoSlNDOjpCMzo6Z2VuZXJhdGVUb0Fpcik6CisgICAgICAgICogYjMvQjNHZW5l
cmF0ZS5oOgorICAgICAgICAqIGIzL0IzSGVhcFJhbmdlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBiMy9CM0hlYXBSYW5nZS5oOgorICAgICAgICAoSlNDOjpCMzo6SGVhcFJhbmdlOjpIZWFwUmFu
Z2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6SGVhcFJhbmdlOjp0b3ApOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpCMzo6SGVhcFJhbmdlOjpvcGVyYXRvcj09KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6QjM6OkhlYXBSYW5nZTo6b3BlcmF0b3IhPSk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkIzOjpIZWFwUmFuZ2U6Om9wZXJhdG9yfCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkIzOjpIZWFwUmFuZ2U6Om9wZXJhdG9yIGJvb2wpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpC
Mzo6SGVhcFJhbmdlOjpiZWdpbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpIZWFwUmFu
Z2U6OmVuZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpIZWFwUmFuZ2U6Om92ZXJsYXBz
KTogRGVsZXRlZC4KKyAgICAgICAgKiBiMy9CM0xvd2VyVG9BaXIuY3BwOgorICAgICAgICAqIGIz
L0IzTW92ZUNvbnN0YW50cy5jcHA6CisgICAgICAgICogYjMvQjNQaGlDaGlsZHJlbi5oOgorICAg
ICAgICAqIGIzL0IzUHJvY2VkdXJlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6
ZHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OmRlbGV0ZU9ycGhhbnMpOgorICAg
ICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpzZXRCbG9ja09yZGVySW1wbCk6CisgICAgICAgICog
YjMvQjNSZWR1Y2VEb3VibGVUb0Zsb2F0LmNwcDoKKyAgICAgICAgKiBiMy9CM1JlZHVjZVN0cmVu
Z3RoLmNwcDoKKyAgICAgICAgKiBiMy9CM1NTQUNhbGN1bGF0b3IuaDoKKyAgICAgICAgKiBiMy9C
M1VzZUNvdW50cy5oOgorICAgICAgICAqIGIzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3Jh
cGhDb2xvcmluZy5jcHA6CisgICAgICAgICogYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlM
aW5lYXJTY2FuLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OmFsbG9jYXRlUmVn
aXN0ZXJzQnlMaW5lYXJTY2FuKToKKyAgICAgICAgKiBiMy9haXIvQWlyQWxsb2NhdGVSZWdpc3Rl
cnNCeUxpbmVhclNjYW4uaDogQWRkZWQuCisgICAgICAgICogYjMvYWlyL0FpckFsbG9jYXRlU3Rh
Y2suY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjphbGxvY2F0ZVN0YWNrKToKKyAgICAgICAg
KiBiMy9haXIvQWlyQXJnLmNwcDoKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAg
ICAgICogYjMvYWlyL0FpckFyZy5oOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFjdGl2
ZUF0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjp0aW1pbmcpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpBcmc6OmZvckVhY2hQaGFzZSk6CisgICAgICAgICogYjMvYWlyL0FpckJhc2lj
QmxvY2suaDoKKyAgICAgICAgKiBiMy9haXIvQWlyQmxvY2tXb3JrbGlzdC5oOgorICAgICAgICAq
IGIzL2Fpci9BaXJDRkcuaDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0ZHOjpuZXdNYXApOgor
ICAgICAgICAqIGIzL2Fpci9BaXJFbGltaW5hdGVEZWFkQ29kZS5jcHA6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OmVsaW1pbmF0ZURlYWRDb2RlKToKKyAgICAgICAgKiBiMy9haXIvQWlyRml4T2J2
aW91c1NwaWxscy5jcHA6CisgICAgICAgICogYjMvYWlyL0FpckZpeFBhcnRpYWxSZWdpc3RlclN0
YWxscy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OmZpeFBhcnRpYWxSZWdpc3RlclN0YWxs
cyk6CisgICAgICAgICogYjMvYWlyL0FpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OmZpeFNwaWxsc0FmdGVyVGVybWluYWxzKToKKyAg
ICAgICAgKiBiMy9haXIvQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaDogQWRkZWQuCisgICAg
ICAgICogYjMvYWlyL0FpckdlbmVyYXRlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6cHJl
cGFyZUZvckdlbmVyYXRpb24pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpnZW5lcmF0ZSk6Cisg
ICAgICAgICogYjMvYWlyL0FpckdlbmVyYXRlLmg6CisgICAgICAgICogYjMvYWlyL0FpckdlbmVy
YXRpb25Db250ZXh0Lmg6CisgICAgICAgICogYjMvYWlyL0Fpckluc2VydGlvblNldC5oOgorICAg
ICAgICAqIGIzL2Fpci9BaXJJbnN0LmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zdDo6
bmVlZHNQYWRkaW5nKToKKyAgICAgICAgKiBiMy9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNw
cDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6bG93ZXJBZnRlclJlZ0FsbG9jKToKKyAgICAgICAg
KiBiMy9haXIvQWlyTG93ZXJFbnRyeVN3aXRjaC5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
Omxvd2VyRW50cnlTd2l0Y2gpOgorICAgICAgICAqIGIzL2Fpci9BaXJPcGNvZGUub3Bjb2RlczoK
KyAgICAgICAgKiBiMy9haXIvQWlyUGhhc2VJbnNlcnRpb25TZXQuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6UGhhc2VJbnNlcnRpb25TZXQ6OmV4ZWN1dGUpOgorICAgICAgICAq
IGIzL2Fpci9BaXJQaGFzZUluc2VydGlvblNldC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6UGhhc2VJbnNlcnRpb246OlBoYXNlSW5zZXJ0aW9uKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6UGhhc2VJbnNlcnRpb246OnBoYXNlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6UGhh
c2VJbnNlcnRpb246Om9wZXJhdG9yPCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlBoYXNlSW5z
ZXJ0aW9uU2V0OjpQaGFzZUluc2VydGlvblNldCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlBo
YXNlSW5zZXJ0aW9uU2V0OjphcHBlbmRJbnNlcnRpb24pOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpQaGFzZUluc2VydGlvblNldDo6aW5zZXJ0SW5zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OlBoYXNlSW5zZXJ0aW9uU2V0OjppbnNlcnQpOgorICAgICAgICAqIGIzL2Fpci9BaXJSZWdMaXZl
bmVzcy5oOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpSZWdMaXZlbmVzczo6TG9jYWxDYWxjOjpM
b2NhbENhbGMpOgorICAgICAgICAqIGIzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpzcGlsbEV2ZXJ5dGhpbmcpOgorICAgICAgICAqIGIzL2Fpci9B
aXJUbXAuY3BwOgorICAgICAgICAqIGIzL2Fpci9BaXJUbXAuaDoKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6VG1wOjp0bXBGb3JJbmRleCk6CisgICAgICAgICogYjMvYWlyL0FpclRtcElubGluZXMu
aDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpJbmRleGVkOjpJbmRleGVkKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpJbmRleGVkOjppbmRleCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OlRtcDo6QWJzb2x1dGVseUluZGV4ZWQ6OkFic29sdXRlbHlJbmRleGVkKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpBYnNvbHV0ZWx5SW5kZXhlZDo6aW5kZXgpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpUbXA6OmluZGV4ZWQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpU
bXA6OmFic29sdXRlbHlJbmRleGVkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjp0bXBG
b3JBYnNvbHV0ZUluZGV4KToKKyAgICAgICAgKiBiMy90ZXN0YjMuY3BwOgorICAgICAgICAoSlND
OjpCMzo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0TXVsTG9hZFR3aWNlKToKKyAg
ICAgICAgKiBqaXQvUmVnaXN0ZXJTZXQuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6OmFk
ZCk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0OjpyZW1vdmUpOgorICAgICAgICAqIHJ1bnRp
bWUvT3B0aW9ucy5oOgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuaDoKKwogMjAx
Ny0wMy0zMCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWJB
c3NlbWJseTogcGFzcyBXYXNtOjpDb250ZXh0KiB0byB2bUVudHJ5VG9XYXNtIHdoZW4gbm90IHVz
aW5nIGZhc3QgVExTCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZp
c2lvbiAyMTQ2MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTc0LDYgKzc0LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMK
ICAgICBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwCiAKICAgICBiMy9haXIv
QWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuY3BwCisgICAgYjMvYWlyL0FpckFs
bG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcAogICAgIGIzL2Fpci9BaXJBbGxvY2F0ZVN0
YWNrLmNwcAogICAgIGIzL2Fpci9BaXJBcmcuY3BwCiAgICAgYjMvYWlyL0FpckJhc2ljQmxvY2su
Y3BwCkBAIC04OCw2ICs4OSw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYjMv
YWlyL0FpckVtaXRTaHVmZmxlLmNwcAogICAgIGIzL2Fpci9BaXJGaXhPYnZpb3VzU3BpbGxzLmNw
cAogICAgIGIzL2Fpci9BaXJGaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMuY3BwCisgICAgYjMvYWly
L0FpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmNwcAogICAgIGIzL2Fpci9BaXJHZW5lcmF0ZS5j
cHAKICAgICBiMy9haXIvQWlyR2VuZXJhdGVkLmNwcAogICAgIGIzL2Fpci9BaXJIYW5kbGVDYWxs
ZWVTYXZlcy5jcHAKQEAgLTEwMCw2ICsxMDIsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNF
UwogICAgIGIzL2Fpci9BaXJMb3dlck1hY3Jvcy5jcHAKICAgICBiMy9haXIvQWlyT3B0aW1pemVC
bG9ja09yZGVyLmNwcAogICAgIGIzL2Fpci9BaXJQYWRJbnRlcmZlcmVuY2UuY3BwCisgICAgYjMv
YWlyL0FpclBoYXNlSW5zZXJ0aW9uU2V0LmNwcAogICAgIGIzL2Fpci9BaXJQaGFzZVNjb3BlLmNw
cAogICAgIGIzL2Fpci9BaXJSZWdMaXZlbmVzcy5jcHAKICAgICBiMy9haXIvQWlyUmVwb3J0VXNl
ZFJlZ2lzdGVycy5jcHAKQEAgLTE0MCw3ICsxNDMsNiBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09V
UkNFUwogICAgIGIzL0IzRm9sZFBhdGhDb25zdGFudHMuY3BwCiAgICAgYjMvQjNGcmVxdWVuY3lD
bGFzcy5jcHAKICAgICBiMy9CM0dlbmVyYXRlLmNwcAotICAgIGIzL0IzSGVhcFJhbmdlLmNwcAog
ICAgIGIzL0IzSW5mZXJTd2l0Y2hlcy5jcHAKICAgICBiMy9CM0luc2VydGlvblNldC5jcHAKICAg
ICBiMy9CM0tpbmQuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMjE0NjE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE4Myw2ICsxODMsMTIgQEAK
IAkJMEYyNUYxQjIxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNUYxQUIxODE2MzVGMzAw
NTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGMjVGMUIzMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93
UGF0aENhbGxLZXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyNUYxQUMxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAg
Ki87IH07CiAJCTBGMjVGMUI0MTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjVGMUFE
MTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJBQzU2NjFFOEEwQjc3MDAwMUVF
M0YgLyogQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQUM1NjQxRThBMEI3NjAwMDFFRTNGIC8qIEFp
ckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmNwcCAqLzsgfTsKKwkJMEYyQUM1NjcxRThBMEI3OTAw
MDFFRTNGIC8qIEFpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJBQzU2NTFFOEEwQjc2MDAwMUVFM0YgLyog
QWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCAqLzsgfTsKKwkJMEYyQUM1NkExRThBMEJEMzAw
MDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkFDNTY4MUU4QTBCRDEwMDAx
RUUzRiAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5jcHAgKi87IH07CisJCTBG
MkFDNTZCMUU4QTBCRDUwMDAxRUUzRiAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nh
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQUM1
NjkxRThBMEJEMTAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmgg
Ki87IH07CisJCTBGMkFDNTZFMUU4RDdCMDAwMDAxRUUzRiAvKiBBaXJQaGFzZUluc2VydGlvblNl
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJB
QzU2QzFFOEQ3QUZGMDAwMUVFM0YgLyogQWlyUGhhc2VJbnNlcnRpb25TZXQuY3BwICovOyB9Owor
CQkwRjJBQzU2RjFFOEQ3QjAzMDAwMUVFM0YgLyogQWlyUGhhc2VJbnNlcnRpb25TZXQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkFDNTZEMUU4RDdB
RkYwMDAxRUUzRiAvKiBBaXJQaGFzZUluc2VydGlvblNldC5oICovOyB9OwogCQkwRjJCNjZBQzE3
QjZCNTNGMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE4MTdCNkI1M0QwMEE3QUUzRiAv
KiBHQ0luY29taW5nUmVmQ291bnRlZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGMkI2NkFEMTdCNkI1NDUwMEE3QUUzRiAvKiBHQ0luY29taW5n
UmVmQ291bnRlZElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMkI2NkE5MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRl
ZElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjJCNjZBRTE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkFB
MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC05NjksNyArOTc1LDYgQEAK
IAkJMEZFQzg1QkMxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVkdWNlU3RyZW5ndGguY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1QjcxQkUxNDYy
RjAwODBGRjc0IC8qIEIzUmVkdWNlU3RyZW5ndGguY3BwICovOyB9OwogCQkwRkVDODVCRDFCRTE0
NjJGMDA4MEZGNzQgLyogQjNSZWR1Y2VTdHJlbmd0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1QjgxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVk
dWNlU3RyZW5ndGguaCAqLzsgfTsKIAkJMEZFQzg1QzExQkUxNjdBMDAwODBGRjc0IC8qIEIzRWZm
ZWN0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg1QkUxQkUxNjdBMDAwODBGRjc0IC8qIEIzRWZmZWN0cy5oICovOyB9OwotCQkwRkVDODVDMjFC
RTE2N0EwMDA4MEZGNzQgLyogQjNIZWFwUmFuZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1QkYxQkUxNjdBMDAwODBGRjc0IC8qIEIzSGVh
cFJhbmdlLmNwcCAqLzsgfTsKIAkJMEZFQzg1QzMxQkUxNjdBMDAwODBGRjc0IC8qIEIzSGVhcFJh
bmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVD
ODVDMDFCRTE2N0EwMDA4MEZGNzQgLyogQjNIZWFwUmFuZ2UuaCAqLzsgfTsKIAkJMEZFQzg1QzUx
QkUxNkY1QTAwODBGRjc0IC8qIEIzRWZmZWN0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODVDNDFCRTE2RjVBMDA4MEZGNzQgLyogQjNFZmZl
Y3RzLmNwcCAqLzsgfTsKIAkJMEZFRDY3QjkxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0YW50
SG9pc3RpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVENjdCNzFCMjYyNTZEMDA2NkNFMTUgLyogREZHQ29uc3RhbnRIb2lzdGluZ1Bo
YXNlLmNwcCAqLzsgfTsKQEAgLTI3MTAsNiArMjcxNSwxMiBAQAogCQkwRjI1RjFBQjE4MTYzNUYz
MDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEZUTFNsb3dQYXRoQ2FsbC5oOyBwYXRoID0gZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjI1RjFBQzE4MTYzNUYzMDA1MjJGMzkgLyog
RlRMU2xvd1BhdGhDYWxsS2V5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEZUTFNsb3dQYXRoQ2FsbEtleS5jcHA7IHBhdGggPSBmdGwvRlRMU2xvd1BhdGhDYWxsS2V5
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNUYxQUQxODE2MzVGMzAwNTIy
RjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBGVExTbG93UGF0aENhbGxLZXkuaDsgcGF0aCA9IGZ0bC9GVExTbG93UGF0aENhbGxLZXku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQUM1NjQxRThBMEI3NjAwMDFFRTNG
IC8qIEFpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IEFpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmNwcDsgcGF0aCA9IGIz
L2Fpci9BaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGMkFDNTY1MUU4QTBCNzYwMDAxRUUzRiAvKiBBaXJGaXhTcGlsbHNBZnRlclRl
cm1pbmFscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJGaXhTcGlsbHNB
ZnRlclRlcm1pbmFscy5oOyBwYXRoID0gYjMvYWlyL0FpckZpeFNwaWxsc0FmdGVyVGVybWluYWxz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkFDNTY4MUU4QTBCRDEwMDAxRUUz
RiAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5j
cHA7IHBhdGggPSBiMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJBQzU2OTFFOEEwQkQxMDAwMUVFM0YgLyog
QWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaDsgcGF0aCA9IGIz
L2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjJBQzU2QzFFOEQ3QUZGMDAwMUVFM0YgLyogQWlyUGhhc2VJbnNlcnRp
b25TZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyUGhhc2VJ
bnNlcnRpb25TZXQuY3BwOyBwYXRoID0gYjMvYWlyL0FpclBoYXNlSW5zZXJ0aW9uU2V0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQUM1NkQxRThEN0FGRjAwMDFFRTNGIC8q
IEFpclBoYXNlSW5zZXJ0aW9uU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEFpclBoYXNlSW5zZXJ0aW9uU2V0Lmg7IHBhdGggPSBiMy9haXIvQWlyUGhhc2VJbnNlcnRpb25T
ZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQjY2QTgxN0I2QjUzRDAwQTdB
RTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5jb21pbmdS
ZWZDb3VudGVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkE5MTdCNkI1
M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMkI2NkFBMTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNl
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMzUwMyw3ICszNTE0LDYgQEAKIAkJMEZFQzg1QjcxQkUxNDYy
RjAwODBGRjc0IC8qIEIzUmVkdWNlU3RyZW5ndGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQjNSZWR1Y2VTdHJlbmd0aC5jcHA7IHBhdGggPSBiMy9CM1JlZHVjZVN0
cmVuZ3RoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQzg1QjgxQkUxNDYy
RjAwODBGRjc0IC8qIEIzUmVkdWNlU3RyZW5ndGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gQjNSZWR1Y2VTdHJlbmd0aC5oOyBwYXRoID0gYjMvQjNSZWR1Y2VTdHJlbmd0aC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVDODVCRTFCRTE2N0EwMDA4MEZGNzQg
LyogQjNFZmZlY3RzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzRWZmZWN0
cy5oOyBwYXRoID0gYjMvQjNFZmZlY3RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTBGRUM4NUJGMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hlYXBSYW5nZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0hlYXBSYW5nZS5jcHA7IHBhdGggPSBiMy9CM0hl
YXBSYW5nZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUM4NUMwMUJFMTY3
QTAwMDgwRkY3NCAvKiBCM0hlYXBSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBCM0hlYXBSYW5nZS5oOyBwYXRoID0gYjMvQjNIZWFwUmFuZ2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQzg1QzQxQkUxNkY1QTAwODBGRjc0IC8qIEIzRWZmZWN0cy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0VmZmVjdHMuY3BwOyBw
YXRoID0gYjMvQjNFZmZlY3RzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZF
RDY3QjcxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDb25zdGFudEhvaXN0aW5nUGhh
c2UuY3BwOyBwYXRoID0gZGZnL0RGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NDMzLDcgKzU0NDMsNiBAQAogCQkJCTBGRUM4NENGMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRlLmggKi8sCiAJCQkJMEYyQzYzQjUxRTYzNDNFODAw
QzEzODM5IC8qIEIzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi8sCiAJCQkJMEZFQzg0RDAx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oICovLAotCQkJCTBG
RUM4NUJGMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hlYXBSYW5nZS5jcHAgKi8sCiAJCQkJMEZFQzg1
QzAxQkUxNjdBMDAwODBGRjc0IC8qIEIzSGVhcFJhbmdlLmggKi8sCiAJCQkJREM2OUI5OUExRDE1
RjkwRjAwMkUzQzAwIC8qIEIzSW5mZXJTd2l0Y2hlcy5jcHAgKi8sCiAJCQkJREM2OUI5OUIxRDE1
RjkwRjAwMkUzQzAwIC8qIEIzSW5mZXJTd2l0Y2hlcy5oICovLApAQCAtNTU0NCw2ICs1NTUzLDgg
QEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTc5NjVDMjE0MUU1RDc5OTYwMEI3NTkxRCAvKiBBaXJB
bGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5jcHAgKi8sCiAJCQkJNzk2NUMyMTUxRTVE
Nzk5NjAwQjc1OTFEIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmggKi8s
CisJCQkJMEYyQUM1NjgxRThBMEJEMTAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlM
aW5lYXJTY2FuLmNwcCAqLywKKwkJCQkwRjJBQzU2OTFFOEEwQkQxMDAwMUVFM0YgLyogQWlyQWxs
b2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaCAqLywKIAkJCQkwRkVDODU0ODFCREFDREM3MDA4
MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFjay5jcHAgKi8sCiAJCQkJMEZFQzg1NDkxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suaCAqLywKIAkJCQkwRkVDODU0QTFCREFDREM3MDA4
MEZGNzQgLyogQWlyQXJnLmNwcCAqLywKQEAgLTU1NzUsNiArNTU4Niw4IEBACiAJCQkJMEY0REUx
Q0QxQzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCAqLywKIAkJCQkyNjJE
ODVCNDFDMEQ2NTBGMDA2QUNCNjEgLyogQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmNwcCAq
LywKIAkJCQkyNjJEODVCNTFDMEQ2NTBGMDA2QUNCNjEgLyogQWlyRml4UGFydGlhbFJlZ2lzdGVy
U3RhbGxzLmggKi8sCisJCQkJMEYyQUM1NjQxRThBMEI3NjAwMDFFRTNGIC8qIEFpckZpeFNwaWxs
c0FmdGVyVGVybWluYWxzLmNwcCAqLywKKwkJCQkwRjJBQzU2NTFFOEEwQjc2MDAwMUVFM0YgLyog
QWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCAqLywKIAkJCQkwRkVDODU1MjFCREFDREM3MDA4
MEZGNzQgLyogQWlyRnJlcXVlbnRlZEJsb2NrLmggKi8sCiAJCQkJMEZFQzg1NTMxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckdlbmVyYXRlLmNwcCAqLywKIAkJCQkwRkVDODU1NDFCREFDREM3MDA4MEZG
NzQgLyogQWlyR2VuZXJhdGUuaCAqLywKQEAgLTU2MDMsNiArNTYxNiw4IEBACiAJCQkJMEZCMzg3
OEQxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpck9wdGltaXplQmxvY2tPcmRlci5oICovLAogCQkJCTBG
OUNBQkM2MURCNTRBNzYwMDA4RTgzQiAvKiBBaXJQYWRJbnRlcmZlcmVuY2UuY3BwICovLAogCQkJ
CTBGOUNBQkM3MURCNTRBNzYwMDA4RTgzQiAvKiBBaXJQYWRJbnRlcmZlcmVuY2UuaCAqLywKKwkJ
CQkwRjJBQzU2QzFFOEQ3QUZGMDAwMUVFM0YgLyogQWlyUGhhc2VJbnNlcnRpb25TZXQuY3BwICov
LAorCQkJCTBGMkFDNTZEMUU4RDdBRkYwMDAxRUUzRiAvKiBBaXJQaGFzZUluc2VydGlvblNldC5o
ICovLAogCQkJCTBGRUM4NTVFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3BlLmNwcCAq
LywKIAkJCQkwRkVDODU1RjFCREFDREM3MDA4MEZGNzQgLyogQWlyUGhhc2VTY29wZS5oICovLAog
CQkJCTBGRjRCNEJBMUU4ODQ0OTUwMERCQkU4NiAvKiBBaXJSZWdMaXZlbmVzcy5jcHAgKi8sCkBA
IC04MTYwLDYgKzgxNzUsNyBAQAogCQkJCTBGRUM4NTEwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Nv
bnN0NjRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MTIxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQ29uc3REb3VibGVWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM0MjJBNjMxQzE1
OEU2RDAwRTJFQjk4IC8qIEIzQ29uc3RGbG9hdFZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RjJBQzU2QjFFOEEwQkQ1MDAwMUVFM0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNj
YW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NUIzMUJERUQ5NTcwMDgwRkY3NCAvKiBCM0Nv
bnN0UHRyVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzM4REY2MUJFOTNENTUwMDEzQzg4
RiAvKiBCM0NvbnN0cmFpbmVkVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkM2M0I4MUU2
MzQzRjcwMEMxMzgzOSAvKiBCM0dlbmVyaWNCbG9ja0luc2VydGlvblNldC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC04MzkzLDYgKzg0MDksNyBAQAogCQkJCTBGRkZDOTU4MTRFRjkwQTIwMEM3MjUzMiAv
KiBERkdDRkFQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzQjNBMjgxNTQ0Qzk5NzAwM0VE
MEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
OUQzNjk1MUFFOUNDMzMwMDBENERGQiAvKiBERkdDbGVhblVwUGhhc2UuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGMkFDNTZGMUU4RDdCMDMwMDAxRUUzRiAvKiBBaXJQaGFzZUluc2VydGlvblNldC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTc3QTQyNDAxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Nsb2Ji
ZXJpemUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3N0E0MjQyMTdBMEJCRkQwMEE4REI4MSAvKiBE
RkdDbG9iYmVyU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjNDMUYxQjFCODY4RTc5MDBBQkIw
OEIgLyogREZHQ2xvYmJlcnNFeGl0U3RhdGUuaCBpbiBIZWFkZXJzICovLApAQCAtOTM4Nyw2ICs5
NDA0LDcgQEAKIAkJCQk3MDlGQjg2QTFBRTMzNUM2MDAzOUQwNjkgLyogV2Vha1NldENvbnN0cnVj
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDE1MDEzMzE1NEJCMTNGMDA1RDhDOTggLyogV2Vh
a1NldElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwOUZCODZDMUFFMzM1QzYwMDM5RDA2
OSAvKiBXZWFrU2V0UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJBQzU2NzFFOEEw
Qjc5MDAwMUVFM0YgLyogQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUFEMkZDQkVEMURCNThEQUQwMEIzRTczNiAvKiBXZWJBc3NlbWJseUNvbXBpbGVFcnJv
ckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0MxNjFEQjU5Q0IyMDBCM0U3
MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUFEMkZDQkVGMURCNThEQUQwMEIzRTczNiAvKiBXZWJBc3NlbWJseUNvbXBpbGVF
cnJvclByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDAxNSw3ICsxMDAzMyw2IEBACiAJ
CQkJMEY3MjVDQUYxQzUwNkQzQjAwQUQ5NDNBIC8qIEIzRm9sZFBhdGhDb25zdGFudHMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZFQzg1MTUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5
Q2xhc3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQzg1MTgxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzR2VuZXJhdGUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEZFQzg1QzIxQkUxNjdBMDAwODBG
Rjc0IC8qIEIzSGVhcFJhbmdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCURDNjlCOTlDMUQxNUY5
MTIwMDJFM0MwMCAvKiBCM0luZmVyU3dpdGNoZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZF
Qzg1QjkxQkUxNDYyRjAwODBGRjc0IC8qIEIzSW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGREY2N0QzMUQ5QzZEMkEwMDFCOTgyNSAvKiBCM0tpbmQuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC0xMDE4MSw2ICsxMDE5OCw3IEBACiAJCQkJQTc4QTk3NzYxNzk3MzhCODAwOURGNzQ0
IC8qIERGR0ZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCREMxNTE1MUM1RDRE
MDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIwMTc3
RjFEQ0FEQzMzMDBFQTU5NTAgLyogREZHRmxvd0luZGV4aW5nLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTBGMkFDNTZBMUU4QTBCRDMwMDAxRUUzRiAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGlu
ZWFyU2Nhbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjlEMzM5NjE3RkZDNEU2MDA3M0MyQkMg
LyogREZHRmx1c2hlZEF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RDg5Q0Y3MTdBMEI4Q0Mw
MDc3M0FEOCAvKiBERkdGbHVzaEZvcm1hdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjY5Q0M4
ODE5M0FDNjBBMDA0NTc1OUUgLyogREZHRnJvemVuVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC0xMDI5MCw2ICsxMDMwOCw3IEBACiAJCQkJMkE4MzYzODUxOEQ3RDBFRTAwMDBFQkNDIC8qIEVk
ZW5HQ0FjdGl2aXR5Q2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTlFNDVBMjUxOEEx
QjI1OTAwMjZEODhGIC8qIEVuY29kZWRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdG
MzlDNzEwN0VDMzc2MDA0MjdBNDggLyogRXJyb3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYy
QUM1NjYxRThBMEI3NzAwMDFFRTNGIC8qIEFpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTE0N0YzOUM4MTA3RUMzNzYwMDQyN0E0OCAvKiBFcnJvckNvbnN0
cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFQjU4QzE0MTg3QjhCMTYwMDk4RUYwQiAv
KiBFcnJvckhhbmRsaW5nU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzkxMDdF
QzM3NjAwNDI3QTQ4IC8qIEVycm9ySW5zdGFuY2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDQw
Nyw2ICsxMDQyNiw3IEBACiAJCQkJRTM1RTAzNUYxQjdBQjQzRTAwNzNBRDJBIC8qIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbk9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTMyNDM4QjE4
NTY4MzM1MDAyRUQ2OTIgLyogSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE1MEU0QjYxMTg4MDlERDUwMDY4QTQ2RCAvKiBJbnNwZWN0b3JSdW50aW1lQWdl
bnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQUM1NkUxRThEN0IwMDAwMDFFRTNGIC8qIEFp
clBoYXNlSW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkM2M0JCMUU2MzQ0
MEEwMEMxMzgzOSAvKiBBaXJCbG9ja0luc2VydGlvblNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNTUxNjVEMjFCREYwQjk4MDAzQjc1QzEgLyogSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2Vu
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTkzQ0Y4MjE4NDAzNzcxMDBCRkNFMjcgLyogSW5z
cGVjdG9yVmFsdWVzLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQmFzaWNCbG9ja1V0aWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQmFzaWNCbG9ja1V0aWxzLmgJKHJldmlzaW9uIDIxNDYxOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTQsNyArMTE0LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KIFZlY3RvcjxC
YXNpY0Jsb2NrKj4gYmxvY2tzSW5QcmVPcmRlcihCYXNpY0Jsb2NrKiByb290KQogewogICAgIFZl
Y3RvcjxCYXNpY0Jsb2NrKj4gcmVzdWx0OwotICAgIEdyYXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxv
Y2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrPj4gd29ya2xpc3Q7CisgICAgR3JhcGhOb2RlV29ya2xp
c3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2sqPj4gd29ya2xpc3Q7CiAgICAgd29y
a2xpc3QucHVzaChyb290KTsKICAgICB3aGlsZSAoQmFzaWNCbG9jayogYmxvY2sgPSB3b3JrbGlz
dC5wb3AoKSkgewogICAgICAgICByZXN1bHQuYXBwZW5kKGJsb2NrKTsKQEAgLTEyOCw3ICsxMjgs
NyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Jsb2NrPgogVmVjdG9yPEJhc2ljQmxvY2sqPiBi
bG9ja3NJblBvc3RPcmRlcihCYXNpY0Jsb2NrKiByb290KQogewogICAgIFZlY3RvcjxCYXNpY0Js
b2NrKj4gcmVzdWx0OwotICAgIFBvc3RPcmRlckdyYXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxvY2sq
LCBJbmRleFNldDxCYXNpY0Jsb2NrPj4gd29ya2xpc3Q7CisgICAgUG9zdE9yZGVyR3JhcGhOb2Rl
V29ya2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2sqPj4gd29ya2xpc3Q7CiAg
ICAgd29ya2xpc3QucHVzaChyb290KTsKICAgICB3aGlsZSAoR3JhcGhOb2RlV2l0aE9yZGVyPEJh
c2ljQmxvY2sqPiBpdGVtID0gd29ya2xpc3QucG9wKCkpIHsKICAgICAgICAgc3dpdGNoIChpdGVt
Lm9yZGVyKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja1dvcmtsaXN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tXb3JrbGlz
dC5oCShyZXZpc2lvbiAyMTQ2MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9j
a1dvcmtsaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNyArMzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKIAogY2xhc3MgQmFzaWNCbG9jazsKIAotdHlwZWRlZiBHcmFwaE5vZGVX
b3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IEJsb2NrV29ya2xpc3Q7
Cit0eXBlZGVmIEdyYXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Js
b2NrKj4+IEJsb2NrV29ya2xpc3Q7CiAKIC8vIFdoZW4geW91IHNheSBCbG9ja1dpdGg8aW50PiB5
b3Ugc2hvdWxkIHJlYWQgaXQgYXMgImJsb2NrIHdpdGggYW4gaW50Ii4KIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHVzaW5nIEJsb2NrV2l0aCA9IEdyYXBoTm9kZVdpdGg8QmFzaWNCbG9jayosIFQ+OwpA
QCAtNDQsMTMgKzQ0LDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5nIEJsb2NrV2l0aCA9
IEcKIC8vIHBlcm1pdHMgZm9yY2libHkgZW5xdWV1ZWluZyB0aGluZ3MgZXZlbiBpZiB0aGUgYmxv
Y2sgaGFzIGFscmVhZHkgYmVlbiBzZWVuLiBJdCdzIHVzZWZ1bCBmb3IKIC8vIHRoaW5ncyBsaWtl
IGJ1aWxkaW5nIGEgc3Bhbm5pbmcgdHJlZSwgaW4gd2hpY2ggY2FzZSBUICh0aGUgYXV4aWxpYXJ5
IHBheWxvYWQpIHdvdWxkIGJlIHRoZQogLy8gc3VjY2Vzc29yIGluZGV4LgotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gdXNpbmcgRXh0ZW5kZWRCbG9ja1dvcmtsaXN0ID0gRXh0ZW5kZWRHcmFwaE5vZGVX
b3JrbGlzdDxCYXNpY0Jsb2NrKiwgVCwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+OwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gdXNpbmcgRXh0ZW5kZWRCbG9ja1dvcmtsaXN0ID0gRXh0ZW5kZWRHcmFwaE5v
ZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgVCwgSW5kZXhTZXQ8QmFzaWNCbG9jayo+PjsKIAogdHlw
ZWRlZiBHcmFwaFZpc2l0T3JkZXIgVmlzaXRPcmRlcjsKIAogdHlwZWRlZiBHcmFwaE5vZGVXaXRo
T3JkZXI8QmFzaWNCbG9jayo+IEJsb2NrV2l0aE9yZGVyOwogCi10eXBlZGVmIFBvc3RPcmRlckdy
YXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrPj4gUG9zdE9y
ZGVyQmxvY2tXb3JrbGlzdDsKK3R5cGVkZWYgUG9zdE9yZGVyR3JhcGhOb2RlV29ya2xpc3Q8QmFz
aWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2sqPj4gUG9zdE9yZGVyQmxvY2tXb3JrbGlzdDsK
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0NGRy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NG
Ry5oCShyZXZpc2lvbiAyMTQ2MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDRkcu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zOSw4ICszOSw4IEBAIGNsYXNzIENGRyB7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBCYXNpY0Jsb2NrKiBOb2RlOwot
ICAgIHR5cGVkZWYgSW5kZXhTZXQ8QmFzaWNCbG9jaz4gU2V0OwotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHVzaW5nIE1hcCA9IEluZGV4TWFwPEJhc2ljQmxvY2ssIFQ+OworICAgIHR5cGVkZWYg
SW5kZXhTZXQ8QmFzaWNCbG9jayo+IFNldDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2lu
ZyBNYXAgPSBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgVD47CiAgICAgdHlwZWRlZiBWZWN0b3I8QmFz
aWNCbG9jayosIDQ+IExpc3Q7CiAKICAgICBDRkcoUHJvY2VkdXJlJiBwcm9jKQpAQCAtNTEsNyAr
NTEsNyBAQCBwdWJsaWM6CiAgICAgTm9kZSByb290KCkgeyByZXR1cm4gbV9wcm9jWzBdOyB9CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIE1hcDxUPiBuZXdNYXAoKSB7IHJldHVybiBJ
bmRleE1hcDxKU0M6OkIzOjpCYXNpY0Jsb2NrLCBUPihtX3Byb2Muc2l6ZSgpKTsgfQorICAgIE1h
cDxUPiBuZXdNYXAoKSB7IHJldHVybiBJbmRleE1hcDxKU0M6OkIzOjpCYXNpY0Jsb2NrKiwgVD4o
bV9wcm9jLnNpemUoKSk7IH0KIAogICAgIFN1Y2Nlc3NvckNvbGxlY3Rpb248QmFzaWNCbG9jaywg
QmFzaWNCbG9jazo6U3VjY2Vzc29yTGlzdD4gc3VjY2Vzc29ycyhOb2RlIG5vZGUpIHsgcmV0dXJu
IG5vZGUtPnN1Y2Nlc3NvckJsb2NrcygpOyB9CiAgICAgQmFzaWNCbG9jazo6UHJlZGVjZXNzb3JM
aXN0JiBwcmVkZWNlc3NvcnMoTm9kZSBub2RlKSB7IHJldHVybiBub2RlLT5wcmVkZWNlc3NvcnMo
KTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmgJKHJldmlzaW9uIDIxNDYx
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKEIzX0pJVCkKIAogI2luY2x1ZGUgIkpTRXhw
b3J0TWFjcm9zLmgiCisjaW5jbHVkZSAiT3B0aW9ucy5oIgogI2luY2x1ZGUgPHd0Zi9PcHRpb25h
bC5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKQEAgLTE3MCw2ICsxNzEsMTMg
QEAgc3RhdGljIEludFR5cGUgcm90YXRlTGVmdChJbnRUeXBlIHZhbHVlLAogICAgIHJldHVybiAo
dVZhbHVlIDw8IHNoaWZ0KSB8ICh1VmFsdWUgPj4gKChiaXRzIC0gc2hpZnQpICYgbWFzaykpOwog
fQogCitpbmxpbmUgdW5zaWduZWQgZGVmYXVsdE9wdExldmVsKCkKK3sKKyAgICAvLyBUaGlzIHNo
b3VsZCBhbG1vc3QgYWx3YXlzIHJldHVybiAyLCBidXQgd2UgYWxsb3cgdGhpcyBkZWZhdWx0IHRv
IGJlIGxvd2VyZWQgZm9yIHRlc3RpbmcuIFNvbWUKKyAgICAvLyBjb21wb25lbnRzIHdpbGwgZGVs
aWJlcmF0ZWx5IHNldCB0aGUgb3B0TGV2ZWwuCisgICAgcmV0dXJuIE9wdGlvbnM6OmRlZmF1bHRC
M09wdExldmVsKCk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCiAjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBpbGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxlLmgJKHJl
dmlzaW9uIDIxNDYxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBpbGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKEIzX0pJVCkKIAor
I2luY2x1ZGUgIkIzQ29tbW9uLmgiCiAjaW5jbHVkZSAiQjNDb21waWxhdGlvbi5oIgogCiBuYW1l
c3BhY2UgSlNDIHsKQEAgLTQ1LDcgKzQ2LDcgQEAgY2xhc3MgUHJvY2VkdXJlOwogLy8gVGhlbiB5
b3Uga2VlcCB0aGUgQ29tcGlsYXRpb24gb2JqZWN0IGFsaXZlIGZvciBhcyBsb25nIGFzIHlvdSB3
YW50IHRvIGJlIGFibGUgdG8gcnVuIHRoZSBjb2RlLgogLy8gSWYgdGhpcyBBUEkgZmVlbHMgdG9v
IGhpZ2gtbGV2ZWwsIHlvdSBjYW4gdXNlIEIzOjpnZW5lcmF0ZSgpIGRpcmVjdGx5LgogCi1KU19F
WFBPUlRfUFJJVkFURSBDb21waWxhdGlvbiBjb21waWxlKFByb2NlZHVyZSYsIHVuc2lnbmVkIG9w
dExldmVsID0gMSk7CitKU19FWFBPUlRfUFJJVkFURSBDb21waWxhdGlvbiBjb21waWxlKFByb2Nl
ZHVyZSYsIHVuc2lnbmVkIG9wdExldmVsID0gZGVmYXVsdE9wdExldmVsKCkpOwogCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRHVw
bGljYXRlVGFpbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0R1cGxpY2F0ZVRhaWxzLmNwcAkocmV2aXNpb24gMjE0NjE4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzRHVwbGljYXRlVGFpbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2
OCw3IEBAIHB1YmxpYzoKIAogICAgICAgICBtX3Byb2MucmVzZXRWYWx1ZU93bmVycygpOwogCi0g
ICAgICAgIEluZGV4U2V0PEJhc2ljQmxvY2s+IGNhbmRpZGF0ZXM7CisgICAgICAgIEluZGV4U2V0
PEJhc2ljQmxvY2sqPiBjYW5kaWRhdGVzOwogCiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxv
Y2sgOiBtX3Byb2MpIHsKICAgICAgICAgICAgIGlmIChibG9jay0+c2l6ZSgpID4gbV9tYXhTaXpl
KQpAQCAtODIsNyArODIsNyBAQCBwdWJsaWM6CiAgICAgICAgIH0KIAogICAgICAgICAvLyBDb2xs
ZWN0IHRoZSBzZXQgb2YgdmFsdWVzIHRoYXQgbXVzdCBiZSBkZS1TU0EnZC4KLSAgICAgICAgSW5k
ZXhTZXQ8VmFsdWU+IHZhbHVlc1RvRGVtb3RlOworICAgICAgICBJbmRleFNldDxWYWx1ZSo+IHZh
bHVlc1RvRGVtb3RlOwogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jKSB7
CiAgICAgICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6ICpibG9jaykgewogICAgICAgICAgICAg
ICAgIGlmICh2YWx1ZS0+b3Bjb2RlKCkgPT0gUGhpICYmIGNhbmRpZGF0ZXMuY29udGFpbnMoYmxv
Y2spKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWxpbWluYXRlQ29tbW9uU3Vi
ZXhwcmVzc2lvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAkocmV2aXNpb24gMjE0NjE4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODIsNyArNjgyLDcgQEAgcHJpdmF0ZToKICAgICBEb21p
bmF0b3JzJiBtX2RvbWluYXRvcnM7CiAgICAgUHVyZUNTRSBtX3B1cmVDU0U7CiAgICAgCi0gICAg
SW5kZXhNYXA8QmFzaWNCbG9jaywgSW1wdXJlQmxvY2tEYXRhPiBtX2ltcHVyZUJsb2NrRGF0YTsK
KyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgSW1wdXJlQmxvY2tEYXRhPiBtX2ltcHVyZUJsb2Nr
RGF0YTsKIAogICAgIEltcHVyZUJsb2NrRGF0YSBtX2RhdGE7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0ZpeFNTQS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzRml4U1NBLmNwcAkocmV2aXNpb24gMjE0NjE4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzRml4U1NBLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBA
QCBuYW1lc3BhY2UgewogY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiB9IC8vIGFub255bW91
cyBuYW1lc3BhY2UKIAotdm9pZCBkZW1vdGVWYWx1ZXMoUHJvY2VkdXJlJiBwcm9jLCBjb25zdCBJ
bmRleFNldDxWYWx1ZT4mIHZhbHVlcykKK3ZvaWQgZGVtb3RlVmFsdWVzKFByb2NlZHVyZSYgcHJv
YywgY29uc3QgSW5kZXhTZXQ8VmFsdWUqPiYgdmFsdWVzKQogewogICAgIEhhc2hNYXA8VmFsdWUq
LCBWYXJpYWJsZSo+IG1hcDsKICAgICBIYXNoTWFwPFZhbHVlKiwgVmFyaWFibGUqPiBwaGlNYXA7
CkBAIC0xMjEsNyArMTIxLDcgQEAgYm9vbCBmaXhTU0EoUHJvY2VkdXJlJiBwcm9jKQogICAgIC8v
IEp1c3QgZm9yIHNhbml0eSwgcmVtb3ZlIGFueSB1bnVzZWQgdmFyaWFibGVzIGZpcnN0LiBJdCdz
IHVubGlrZWx5IHRoYXQgdGhpcyBjb2RlIGhhcyBhbnkKICAgICAvLyBidWdzIGhhdmluZyB0byBk
byB3aXRoIGRlYWQgdmFyaWFibGVzLCBidXQgaXQgd291bGQgYmUgc2lsbHkgdG8gaGF2ZSB0byBm
aXggc3VjaCBhIGJ1ZyBpZgogICAgIC8vIGl0IGRpZCBhcmlzZS4KLSAgICBJbmRleFNldDxWYXJp
YWJsZT4gbGl2ZVZhcmlhYmxlczsKKyAgICBJbmRleFNldDxWYXJpYWJsZSo+IGxpdmVWYXJpYWJs
ZXM7CiAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiBwcm9jLnZhbHVlcygpKSB7CiAgICAgICAgIGlm
IChWYXJpYWJsZVZhbHVlKiB2YXJpYWJsZVZhbHVlID0gdmFsdWUtPmFzPFZhcmlhYmxlVmFsdWU+
KCkpCiAgICAgICAgICAgICBsaXZlVmFyaWFibGVzLmFkZCh2YXJpYWJsZVZhbHVlLT52YXJpYWJs
ZSgpKTsKQEAgLTE0NSw3ICsxNDUsNyBAQCBib29sIGZpeFNTQShQcm9jZWR1cmUmIHByb2MpCiAK
ICAgICAvLyBDcmVhdGUgYSBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSAoImNhbGNWYXIiKSBmb3Ig
ZXZlcnkgdmFyaWFibGUuCiAgICAgVmVjdG9yPFZhcmlhYmxlKj4gY2FsY1ZhclRvVmFyaWFibGU7
Ci0gICAgSW5kZXhNYXA8VmFyaWFibGUsIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKj4gdmFyaWFi
bGVUb0NhbGNWYXIocHJvYy52YXJpYWJsZXMoKS5zaXplKCkpOworICAgIEluZGV4TWFwPFZhcmlh
YmxlKiwgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqPiB2YXJpYWJsZVRvQ2FsY1Zhcihwcm9jLnZh
cmlhYmxlcygpLnNpemUoKSk7CiAKICAgICBmb3IgKFZhcmlhYmxlKiB2YXJpYWJsZSA6IHByb2Mu
dmFyaWFibGVzKCkpIHsKICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIGNhbGNWYXIg
PSBzc2EubmV3VmFyaWFibGUoKTsKQEAgLTE4NSw3ICsxODUsNyBAQCBib29sIGZpeFNTQShQcm9j
ZWR1cmUmIHByb2MpCiAKICAgICAvLyBOb3cgcGVyZm9ybSB0aGUgY29udmVyc2lvbi4KICAgICBJ
bnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KHByb2MpOwotICAgIEluZGV4TWFwPFZhcmlhYmxlLCBW
YWx1ZSo+IG1hcHBpbmcocHJvYy52YXJpYWJsZXMoKS5zaXplKCkpOworICAgIEluZGV4TWFwPFZh
cmlhYmxlKiwgVmFsdWUqPiBtYXBwaW5nKHByb2MudmFyaWFibGVzKCkuc2l6ZSgpKTsKICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogcHJvYy5ibG9ja3NJblByZU9yZGVyKCkpIHsKICAgICAg
ICAgbWFwcGluZy5jbGVhcigpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNG
aXhTU0EuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGaXhTU0Eu
aAkocmV2aXNpb24gMjE0NjE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRml4U1NB
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzcsNyArMzcsNyBAQCBjbGFzcyBQcm9jZWR1cmU7CiAKIC8vIFR1
cm5zIGFsbCBtZW50aW9ucyBvZiB0aGUgZ2l2ZW4gdmFsdWVzIGludG8gYWNjZXNzZXMgdG8gdmFy
aWFibGVzLiBUaGlzIGlzIG1lYW50IHRvIGJlIHVzZWQKIC8vIGZyb20gcGhhc2VzIHRoYXQgZG9u
J3QgbGlrZSBTU0EgZm9yIHdoYXRldmVyIHJlYXNvbi4KLXZvaWQgZGVtb3RlVmFsdWVzKFByb2Nl
ZHVyZSYsIGNvbnN0IEluZGV4U2V0PFZhbHVlPiYpOwordm9pZCBkZW1vdGVWYWx1ZXMoUHJvY2Vk
dXJlJiwgY29uc3QgSW5kZXhTZXQ8VmFsdWUqPiYpOwogCiAvLyBUaGlzIGZpeGVzIFNTQSBmb3Ig
eW91LiBVc2UgdGhpcyBhZnRlciB5b3UgaGF2ZSBkb25lIGRlbW90ZVZhbHVlcygpIGFuZCB5b3Ug
aGF2ZSBwZXJmb3JtZWQKIC8vIHdoYXRldmVyIGV2aWwgdHJhbnNmb3JtYXRpb24geW91IG5lZWRl
ZC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAJKHJldmlzaW9u
IDIxNDYxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCB2b2lkIHByZXBhcmVGb3JHZW5lcmF0aW9uKFBy
b2NlZHVyZSYgcHJvCiAgICAgVGltaW5nU2NvcGUgdGltaW5nU2NvcGUoInByZXBhcmVGb3JHZW5l
cmF0aW9uIik7CiAKICAgICBnZW5lcmF0ZVRvQWlyKHByb2NlZHVyZSwgb3B0TGV2ZWwpOwotICAg
IEFpcjo6cHJlcGFyZUZvckdlbmVyYXRpb24ocHJvY2VkdXJlLmNvZGUoKSk7CisgICAgQWlyOjpw
cmVwYXJlRm9yR2VuZXJhdGlvbihwcm9jZWR1cmUuY29kZSgpLCBvcHRMZXZlbCk7CiB9CiAKIHZv
aWQgZ2VuZXJhdGUoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIENDYWxsSGVscGVycyYgaml0KQpAQCAt
ODAsNyArODAsNyBAQCB2b2lkIGdlbmVyYXRlVG9BaXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUsCiAg
ICAgaWYgKHNob3VsZFZhbGlkYXRlSVIoKSkKICAgICAgICAgdmFsaWRhdGUocHJvY2VkdXJlKTsK
IAotICAgIGlmIChvcHRMZXZlbCA+PSAxKSB7CisgICAgaWYgKG9wdExldmVsID49IDIpIHsKICAg
ICAgICAgcmVkdWNlRG91YmxlVG9GbG9hdChwcm9jZWR1cmUpOwogICAgICAgICByZWR1Y2VTdHJl
bmd0aChwcm9jZWR1cmUpOwogICAgICAgICBlbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucyhw
cm9jZWR1cmUpOwpAQCAtOTEsMTIgKzkxLDE1IEBAIHZvaWQgZ2VuZXJhdGVUb0FpcihQcm9jZWR1
cmUmIHByb2NlZHVyZSwKICAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiBBZGQgbW9yZSBvcHRp
bWl6YXRpb25zIGhlcmUuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNTA1MDcKKyAgICB9IGVsc2UgaWYgKG9wdExldmVsID49IDEpIHsKKyAgICAg
ICAgLy8gRklYTUU6IEV4cGxvcmUgYmV0dGVyICJxdWljayBtb2RlIiBvcHRpbWl6YXRpb25zLgor
ICAgICAgICByZWR1Y2VTdHJlbmd0aChwcm9jZWR1cmUpOwogICAgIH0KIAogICAgIC8vIFRoaXMg
cHV0cyB0aGUgSVIgaW4gcXVpcmtzIG1vZGUuCiAgICAgbG93ZXJNYWNyb3MocHJvY2VkdXJlKTsK
IAotICAgIGlmIChvcHRMZXZlbCA+PSAxKSB7CisgICAgaWYgKG9wdExldmVsID49IDIpIHsKICAg
ICAgICAgcmVkdWNlU3RyZW5ndGgocHJvY2VkdXJlKTsKIAogICAgICAgICAvLyBGSVhNRTogQWRk
IG1vcmUgb3B0aW1pemF0aW9ucyBoZXJlLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzR2VuZXJhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNH
ZW5lcmF0ZS5oCShyZXZpc2lvbiAyMTQ2MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNHZW5lcmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw4IEBACiAKICNpZiBFTkFC
TEUoQjNfSklUKQogCisjaW5jbHVkZSAiQjNDb21tb24uaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAK
IGNsYXNzIENDYWxsSGVscGVyczsKQEAgLTM4LDcgKzQwLDcgQEAgbmFtZXNwYWNlIEFpciB7IGNs
YXNzIENvZGU7IH0KIAogLy8gVGhpcyB0YWtlcyBhIEIzOjpQcm9jZWR1cmUsIG9wdGltaXplcyBp
dCBpbi1wbGFjZSwgbG93ZXJzIGl0IHRvIEFpciwgYW5kIHByZXBhcmVzIHRoZSBBaXIgZm9yCiAv
LyBnZW5lcmF0aW9uLgotSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmVwYXJlRm9yR2VuZXJhdGlv
bihQcm9jZWR1cmUmLCB1bnNpZ25lZCBvcHRMZXZlbCA9IDEpOworSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBwcmVwYXJlRm9yR2VuZXJhdGlvbihQcm9jZWR1cmUmLCB1bnNpZ25lZCBvcHRMZXZlbCA9
IGRlZmF1bHRPcHRMZXZlbCgpKTsKIAogLy8gVGhpcyB0YWtlcyBhIEIzOjpQcm9jZWR1cmUgdGhh
dCBoYXMgYmVlbiBwcmVwYXJlZCBmb3IgZ2VuZXJhdGlvbiAoaS5lLiBpdCBoYXMgYmVlbiBsb3dl
cmVkIHRvIEFpciBhbmQKIC8vIHRoZSBBaXIgaGFzIGJlZW4gcHJlcGFyZWQgZm9yIGdlbmVyYXRp
b24pIGFuZCBnZW5lcmF0ZXMgaXQuIFRoaXMgaXMgdGhlIGVxdWl2YWxlbnQgb2YgY2FsbGluZwpA
QCAtNDgsNyArNTAsNyBAQCBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGdlbmVyYXRlKFByb2NlZHVy
CiAvLyBUaGlzIHRha2VzIGEgQjM6OlByb2NlZHVyZSwgb3B0aW1pemVzIGl0IGluLXBsYWNlLCBh
bmQgbG93ZXJzIGl0IHRvIEFpci4gWW91IGNhbiB0aGVuIGdlbmVyYXRlCiAvLyB0aGUgQWlyIHRv
IG1hY2hpbmUgY29kZSB1c2luZyBBaXI6OnByZXBhcmVGb3JHZW5lcmF0aW9uKCkgYW5kIEFpcjo6
Z2VuZXJhdGUoKSBvbiB0aGUgUHJvY2VkdXJlJ3MKIC8vIGNvZGUoKS4KLXZvaWQgZ2VuZXJhdGVU
b0FpcihQcm9jZWR1cmUmLCB1bnNpZ25lZCBvcHRMZXZlbCA9IDEpOwordm9pZCBnZW5lcmF0ZVRv
QWlyKFByb2NlZHVyZSYsIHVuc2lnbmVkIG9wdExldmVsID0gZGVmYXVsdE9wdExldmVsKCkpOwog
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzSGVhcFJhbmdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNIZWFwUmFuZ2UuY3BwCShyZXZpc2lvbiAyMTQ2MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNIZWFwUmFuZ2UuY3BwCShub25leGlzdGVudCkKQEAgLTEsNDkgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiQjNIZWFwUmFuZ2UuaCIKLQotI2lmIEVOQUJMRShCM19KSVQp
Ci0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewotCi12b2lkIEhlYXBSYW5nZTo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotewotICAgIGlmICgqdGhpcyA9PSBIZWFwUmFuZ2Uo
KSkgewotICAgICAgICBvdXQucHJpbnQoIkJvdHRvbSIpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIGlmICgqdGhpcyA9PSB0b3AoKSkgewotICAgICAgICBvdXQucHJpbnQoIlRvcCIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG91dC5wcmludChtX2JlZ2luLCAiLi4uIiwgbV9l
bmQpOwotfQotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKLQotI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5oCShyZXZp
c2lvbiAyMTQ2MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNIZWFwUmFuZ2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMjcsOTAgKzI3LDE1IEBACiAKICNpZiBFTkFCTEUoQjNfSklUKQog
Ci0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNs
dWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKyNpbmNsdWRlIDx3dGYvUmFuZ2UuaD4KIAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAKIC8vIEFsaWFzIGFuYWx5c2lzIGluIEIzIGlzIGRv
bmUgYnkgY2hlY2tpbmcgaWYgdHdvIGludGVnZXIgcmFuZ2VzIG92ZXJsYXAuIFRoaXMgaXMgcG93
ZXJmdWwgZW5vdWdoCiAvLyB0byBiZSB1c2VkIGZvciBUQkFBLXN0eWxlIGFsaWFzIGFuYWx5c2lz
IHVzZWQgYnkgdGhlIERGRywgRlRMLCBhbmQgTExWTTogeW91IGp1c3QgdHVybiBlYWNoIG5vZGUK
IC8vIGluIHRoZSB0cmVlIG9mIGFic3RyYWN0IGhlYXBzIGludG8gYSBwcmUvcG9zdCByYW5nZS4K
LS8vCi0vLyBOb3RlIHRoYXQgdGhlICdiZWdpbicgaXMgaW5jbHVzaXZlLCB3aGlsZSB0aGUgJ2Vu
ZCcgaXMgZXhjbHVzaXZlLiBUaGVzZSB0d28gcmFuZ2VzIGFyZSBub24tCi0vLyBvdmVybGFwcGlu
ZzoKLS8vCi0vLyAgICAgcmFuZ2VBID0gMC4uLjgKLS8vICAgICByYW5nZUIgPSA4Li4uMTYKLQot
Y2xhc3MgSGVhcFJhbmdlIHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIHVuc2lnbmVkIFR5cGU7Ci0g
ICAgCi0gICAgSGVhcFJhbmdlKCkKLSAgICAgICAgOiBtX2JlZ2luKDApCi0gICAgICAgICwgbV9l
bmQoMCkKLSAgICB7Ci0gICAgfQotCi0gICAgZXhwbGljaXQgSGVhcFJhbmdlKHVuc2lnbmVkIHZh
bHVlKQotICAgICAgICA6IG1fYmVnaW4odmFsdWUpCi0gICAgICAgICwgbV9lbmQodmFsdWUgKyAx
KQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fZW5kID49IG1fYmVnaW4pOwotICAgIH0KLQotICAg
IEhlYXBSYW5nZSh1bnNpZ25lZCBiZWdpbiwgdW5zaWduZWQgZW5kKQotICAgICAgICA6IG1fYmVn
aW4oYmVnaW4pCi0gICAgICAgICwgbV9lbmQoZW5kKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1f
ZW5kID49IG1fYmVnaW4pOwotICAgICAgICBpZiAobV9iZWdpbiA9PSBtX2VuZCkgewotICAgICAg
ICAgICAgLy8gQ2Fub25pY2FsaXplIGVtcHR5IHJhbmdlcy4KLSAgICAgICAgICAgIG1fYmVnaW4g
PSAwOwotICAgICAgICAgICAgbV9lbmQgPSAwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3Rh
dGljIEhlYXBSYW5nZSB0b3AoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEhlYXBSYW5nZSgwLCBV
SU5UX01BWCk7Ci0gICAgfQotCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEhlYXBSYW5nZSYg
b3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9iZWdpbiA9PSBvdGhlci5tX2Jl
Z2luCi0gICAgICAgICAgICAmJiBtX2VuZCA9PSBvdGhlci5tX2VuZDsKLSAgICB9Ci0KLSAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgSGVhcFJhbmdlJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKLSAgICB9Ci0gICAgCi0gICAgSGVhcFJhbmdl
IG9wZXJhdG9yfChjb25zdCBIZWFwUmFuZ2UmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAg
cmV0dXJuIEhlYXBSYW5nZSgKLSAgICAgICAgICAgIHN0ZDo6bWluKG1fYmVnaW4sIG90aGVyLm1f
YmVnaW4pLAotICAgICAgICAgICAgc3RkOjptYXgobV9lbmQsIG90aGVyLm1fZW5kKSk7Ci0gICAg
fQotICAgIAotICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX2Jl
Z2luICE9IG1fZW5kOyB9Ci0KLSAgICB1bnNpZ25lZCBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1f
YmVnaW47IH0KLSAgICB1bnNpZ25lZCBlbmQoKSBjb25zdCB7IHJldHVybiBtX2VuZDsgfQotCi0g
ICAgYm9vbCBvdmVybGFwcyhjb25zdCBIZWFwUmFuZ2UmIG90aGVyKSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuIFdURjo6cmFuZ2VzT3ZlcmxhcChtX2JlZ2luLCBtX2VuZCwgb3RoZXIubV9i
ZWdpbiwgb3RoZXIubV9lbmQpOwotICAgIH0KLQotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICB1bnNpZ25lZCBt
X2JlZ2luOwotICAgIHVuc2lnbmVkIG1fZW5kOwotfTsKKwordHlwZWRlZiBSYW5nZTx1bnNpZ25l
ZD4gSGVhcFJhbmdlOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHJldmlzaW9uIDIxNDYxOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMzc5LDEwICszMzc5LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgfQogICAgIAotICAgIEluZGV4U2V0PFZhbHVlPiBtX2xvY2tl
ZDsgLy8gVGhlc2UgYXJlIHZhbHVlcyB0aGF0IHdpbGwgaGF2ZSBubyBUbXAgaW4gQWlyLgotICAg
IEluZGV4TWFwPFZhbHVlLCBUbXA+IG1fdmFsdWVUb1RtcDsgLy8gVGhlc2UgYXJlIHZhbHVlcyB0
aGF0IG11c3QgaGF2ZSBhIFRtcCBpbiBBaXIuIFdlIHNheSB0aGF0IGEgVmFsdWUqIHdpdGggYSBu
b24tbnVsbCBUbXAgaXMgInBpbm5lZCIuCi0gICAgSW5kZXhNYXA8VmFsdWUsIFRtcD4gbV9waGlU
b1RtcDsgLy8gRWFjaCBQaGkgZ2V0cyBpdHMgb3duIFRtcC4KLSAgICBJbmRleE1hcDxCMzo6QmFz
aWNCbG9jaywgQWlyOjpCYXNpY0Jsb2NrKj4gbV9ibG9ja1RvQmxvY2s7CisgICAgSW5kZXhTZXQ8
VmFsdWUqPiBtX2xvY2tlZDsgLy8gVGhlc2UgYXJlIHZhbHVlcyB0aGF0IHdpbGwgaGF2ZSBubyBU
bXAgaW4gQWlyLgorICAgIEluZGV4TWFwPFZhbHVlKiwgVG1wPiBtX3ZhbHVlVG9UbXA7IC8vIFRo
ZXNlIGFyZSB2YWx1ZXMgdGhhdCBtdXN0IGhhdmUgYSBUbXAgaW4gQWlyLiBXZSBzYXkgdGhhdCBh
IFZhbHVlKiB3aXRoIGEgbm9uLW51bGwgVG1wIGlzICJwaW5uZWQiLgorICAgIEluZGV4TWFwPFZh
bHVlKiwgVG1wPiBtX3BoaVRvVG1wOyAvLyBFYWNoIFBoaSBnZXRzIGl0cyBvd24gVG1wLgorICAg
IEluZGV4TWFwPEIzOjpCYXNpY0Jsb2NrKiwgQWlyOjpCYXNpY0Jsb2NrKj4gbV9ibG9ja1RvQmxv
Y2s7CiAgICAgSGFzaE1hcDxCMzo6U3RhY2tTbG90KiwgQWlyOjpTdGFja1Nsb3QqPiBtX3N0YWNr
VG9TdGFjazsKICAgICBIYXNoTWFwPFZhcmlhYmxlKiwgVG1wPiBtX3ZhcmlhYmxlVG9UbXA7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01vdmVDb25zdGFudHMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01vdmVDb25zdGFudHMuY3BwCShy
ZXZpc2lvbiAyMTQ2MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNb3ZlQ29uc3Rh
bnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCBwcml2YXRlOgogICAgIHsK
ICAgICAgICAgRG9taW5hdG9ycyYgZG9taW5hdG9ycyA9IG1fcHJvYy5kb21pbmF0b3JzKCk7CiAg
ICAgICAgIEhhc2hNYXA8VmFsdWVLZXksIFZhbHVlKj4gdmFsdWVGb3JDb25zdGFudDsKLSAgICAg
ICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgVmVjdG9yPFZhbHVlKj4+IG1hdGVyaWFsaXphdGlvbnMo
bV9wcm9jLnNpemUoKSk7CisgICAgICAgIEluZGV4TWFwPEJhc2ljQmxvY2sqLCBWZWN0b3I8VmFs
dWUqPj4gbWF0ZXJpYWxpemF0aW9ucyhtX3Byb2Muc2l6ZSgpKTsKIAogICAgICAgICAvLyBXZSBk
ZXRlcm1pbmUgd2hlcmUgdGhpbmdzIGdldCBtYXRlcmlhbGl6ZWQgYmFzZWQgb24gd2hlcmUgdGhl
eSBhcmUgdXNlZC4KICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvYykgewpA
QCAtMjc0LDcgKzI3NCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBt
X2NvbnN0VGFibGUpCiAgICAgICAgICAgICBtX2RhdGFTZWN0aW9uW2VudHJ5LnZhbHVlXSA9IGVu
dHJ5LmtleS52YWx1ZSgpOwogCi0gICAgICAgIEluZGV4U2V0PFZhbHVlPiBvZmZMaW1pdHM7Cisg
ICAgICAgIEluZGV4U2V0PFZhbHVlKj4gb2ZmTGltaXRzOwogICAgICAgICBmb3IgKEJhc2ljQmxv
Y2sqIGJsb2NrIDogbV9wcm9jKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHZhbHVlSW5k
ZXggPSAwOyB2YWx1ZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKyt2YWx1ZUluZGV4KSB7CiAgICAg
ICAgICAgICAgICAgU3RhY2ttYXBWYWx1ZSogdmFsdWUgPSBibG9jay0+YXQodmFsdWVJbmRleCkt
PmFzPFN0YWNrbWFwVmFsdWU+KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQ
aGlDaGlsZHJlbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Bo
aUNoaWxkcmVuLmgJKHJldmlzaW9uIDIxNDYxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1BoaUNoaWxkcmVuLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2OCw3ICsxNjgsNyBAQCBwdWJs
aWM6CiAgICAgY29uc3QgVmVjdG9yPFZhbHVlKiwgOD4mIHBoaXMoKSBjb25zdCB7IHJldHVybiBt
X3BoaXM7IH0KIAogcHJpdmF0ZToKLSAgICBJbmRleE1hcDxWYWx1ZSwgVmVjdG9yPFVwc2lsb25W
YWx1ZSo+PiBtX3Vwc2lsb25zOworICAgIEluZGV4TWFwPFZhbHVlKiwgVmVjdG9yPFVwc2lsb25W
YWx1ZSo+PiBtX3Vwc2lsb25zOwogICAgIFZlY3RvcjxWYWx1ZSosIDg+IG1fcGhpczsKIH07CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkocmV2aXNpb24g
MjE0NjE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjA0LDcgKzIwNCw3IEBAIHZvaWQgUHJvY2VkdXJlOjppbnZhbGlkYXRl
Q0ZHKCkKIAogdm9pZCBQcm9jZWR1cmU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsK
LSAgICBJbmRleFNldDxWYWx1ZT4gdmFsdWVzSW5CbG9ja3M7CisgICAgSW5kZXhTZXQ8VmFsdWUq
PiB2YWx1ZXNJbkJsb2NrczsKICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogKnRoaXMpIHsK
ICAgICAgICAgb3V0LnByaW50KGRlZXBEdW1wKCp0aGlzLCBibG9jaykpOwogICAgICAgICB2YWx1
ZXNJbkJsb2Nrcy5hZGRBbGwoKmJsb2NrKTsKQEAgLTI2Myw3ICsyNjMsNyBAQCB2b2lkIFByb2Nl
ZHVyZTo6ZGVsZXRlVmFsdWUoVmFsdWUqIHZhbHVlCiAKIHZvaWQgUHJvY2VkdXJlOjpkZWxldGVP
cnBoYW5zKCkKIHsKLSAgICBJbmRleFNldDxWYWx1ZT4gdmFsdWVzSW5CbG9ja3M7CisgICAgSW5k
ZXhTZXQ8VmFsdWUqPiB2YWx1ZXNJbkJsb2NrczsKICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2Nr
IDogKnRoaXMpCiAgICAgICAgIHZhbHVlc0luQmxvY2tzLmFkZEFsbCgqYmxvY2spOwogCkBAIC0z
NTEsNyArMzUxLDcgQEAgVmFsdWUqIFByb2NlZHVyZTo6YWRkVmFsdWVJbXBsKFZhbHVlKiB2YQog
CiB2b2lkIFByb2NlZHVyZTo6c2V0QmxvY2tPcmRlckltcGwoVmVjdG9yPEJhc2ljQmxvY2sqPiYg
YmxvY2tzKQogewotICAgIEluZGV4U2V0PEJhc2ljQmxvY2s+IGJsb2Nrc1NldDsKKyAgICBJbmRl
eFNldDxCYXNpY0Jsb2NrKj4gYmxvY2tzU2V0OwogICAgIGJsb2Nrc1NldC5hZGRBbGwoYmxvY2tz
KTsKIAogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiAqdGhpcykgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlRG91YmxlVG9GbG9hdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlRG91YmxlVG9GbG9hdC5jcHAJKHJl
dmlzaW9uIDIxNDYxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZURvdWJs
ZVRvRmxvYXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjQsMTggKzQyNCwxOCBAQCBwcml2YXRl
OgogCiAgICAgLy8gU2V0IG9mIGFsbCB0aGUgRG91YmxlIHZhbHVlcyB0aGF0IGFyZSBhY3R1YWxs
eSB1c2VkIGFzIERvdWJsZS4KICAgICAvLyBDb252ZXJ0aW5nIGFueSBvZiB0aGVtIHRvIEZsb2F0
IHdvdWxkIGxvc2UgcHJlY2lzaW9uLgotICAgIEluZGV4U2V0PFZhbHVlPiBtX3ZhbHVlc1VzZWRB
c0RvdWJsZTsKKyAgICBJbmRleFNldDxWYWx1ZSo+IG1fdmFsdWVzVXNlZEFzRG91YmxlOwogCiAg
ICAgLy8gU2V0IG9mIGFsbCB0aGUgUGhpIG9mIHR5cGUgRG91YmxlIHRoYXQgcmVhbGx5IGNvbnRh
aW5zIGEgRG91YmxlLgogICAgIC8vIEFueSBEb3VibGUgUGhpIG5vdCBpbiB0aGUgc2V0IGNhbiBi
ZSBjb252ZXJ0ZWQgdG8gRmxvYXQgd2l0aG91dCBsb3NpbmcgcHJlY2lzaW9uLgotICAgIEluZGV4
U2V0PFZhbHVlPiBtX3BoaXNDb250YWluaW5nRG91YmxlOworICAgIEluZGV4U2V0PFZhbHVlKj4g
bV9waGlzQ29udGFpbmluZ0RvdWJsZTsKIAogICAgIC8vIEFueSB2YWx1ZSB0aGF0IHdhcyBjb252
ZXJ0ZWQgZnJvbSBwcm9kdWNpbmcgYSBEb3VibGUgdG8gcHJvZHVjaW5nIGEgRmxvYXQuCiAgICAg
Ly8gVGhpcyBzZXQgZG9lcyBub3QgaW5jbHVkZSBQaGktVXBzaWxvbnMuCi0gICAgSW5kZXhTZXQ8
VmFsdWU+IG1fY29udmVydGVkVmFsdWU7CisgICAgSW5kZXhTZXQ8VmFsdWUqPiBtX2NvbnZlcnRl
ZFZhbHVlOwogCiAgICAgLy8gQW55IHZhbHVlIHRoYXQgcHJldmlvdXNseSBwcm9kdWNlZCBEb3Vi
bGUgYW5kIG5vdyBwcm9kdWNlIEZsb2F0LgotICAgIEluZGV4U2V0PFZhbHVlPiBtX2NvbnZlcnRl
ZFBoaXM7CisgICAgSW5kZXhTZXQ8VmFsdWUqPiBtX2NvbnZlcnRlZFBoaXM7CiB9OwogCiB2b2lk
IHByaW50R3JhcGhJZkNvbnZlcnRpbmcoUHJvY2VkdXJlJiBwcm9jZWR1cmUpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCShyZXZpc2lvbiAy
MTQ2MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIzOTIsNyArMjM5Miw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lk
IGtpbGxEZWFkQ29kZSgpCiAgICAgewotICAgICAgICBHcmFwaE5vZGVXb3JrbGlzdDxWYWx1ZSos
IEluZGV4U2V0PFZhbHVlPj4gd29ya2xpc3Q7CisgICAgICAgIEdyYXBoTm9kZVdvcmtsaXN0PFZh
bHVlKiwgSW5kZXhTZXQ8VmFsdWUqPj4gd29ya2xpc3Q7CiAgICAgICAgIFZlY3RvcjxVcHNpbG9u
VmFsdWUqLCA2ND4gdXBzaWxvbnM7CiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBt
X3Byb2MpIHsKICAgICAgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogKmJsb2NrKSB7CkBAIC0y
NDI5LDcgKzI0MjksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAKLSAgICAgICAgSW5kZXhTZXQ8VmFyaWFibGU+IGxpdmVWYXJpYWJsZXM7CisgICAgICAg
IEluZGV4U2V0PFZhcmlhYmxlKj4gbGl2ZVZhcmlhYmxlczsKICAgICAgICAgCiAgICAgICAgIGZv
ciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2MpIHsKICAgICAgICAgICAgIHNpemVfdCBzb3Vy
Y2VJbmRleCA9IDA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTU0FDYWxjdWxh
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU1NBQ2FsY3Vs
YXRvci5oCShyZXZpc2lvbiAyMTQ2MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
U0FDYWxjdWxhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTU2LDcgKzE1Niw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIFZlY3RvcjxEZWYqPiBtX3BoaXM7CiAgICAgfTsKICAgICAKLSAgICBJbmRleE1hcDxC
YXNpY0Jsb2NrLCBCbG9ja0RhdGE+IG1fZGF0YTsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwg
QmxvY2tEYXRhPiBtX2RhdGE7CiAKICAgICBEb21pbmF0b3JzKiBtX2RvbWluYXRvcnMgeyBudWxs
cHRyIH07CiAgICAgUHJvY2VkdXJlJiBtX3Byb2M7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNVc2VDb3VudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNVc2VDb3VudHMuaAkocmV2aXNpb24gMjE0NjE4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVXNlQ291bnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OCw3ICs0OCw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIHVuc2lnbmVkIG51bVVzaW5nSW5zdHJ1Y3Rpb25zIHsgMCB9OwogICAg
IH07CiAgICAgCi0gICAgSW5kZXhNYXA8VmFsdWUsIENvdW50cz4gbV9jb3VudHM7CisgICAgSW5k
ZXhNYXA8VmFsdWUqLCBDb3VudHM+IG1fY291bnRzOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkocmV2aXNpb24gMjE0
NjE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTExNyw3ICsxMTcsNyBAQCBTdGF0aWNMb2NrIGNyYXNoTG9jazsKICAgICAgICAgQ1JB
U0goKTsgXAogICAgIH0gd2hpbGUgKGZhbHNlKQogCi1zdGQ6OnVuaXF1ZV9wdHI8Q29tcGlsYXRp
b24+IGNvbXBpbGVQcm9jKFByb2NlZHVyZSYgcHJvY2VkdXJlLCB1bnNpZ25lZCBvcHRMZXZlbCA9
IDEpCitzdGQ6OnVuaXF1ZV9wdHI8Q29tcGlsYXRpb24+IGNvbXBpbGVQcm9jKFByb2NlZHVyZSYg
cHJvY2VkdXJlLCB1bnNpZ25lZCBvcHRMZXZlbCA9IGRlZmF1bHRPcHRMZXZlbCgpKQogewogICAg
IHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPENvbXBpbGF0aW9uPihCMzo6Y29tcGlsZShwcm9jZWR1
cmUsIG9wdExldmVsKSk7CiB9CkBAIC05ODcsNiArOTg3LDcgQEAgdm9pZCB0ZXN0TXVsTG9hZFR3
aWNlKCkKIAogICAgIHRlc3QoMCk7CiAgICAgdGVzdCgxKTsKKyAgICB0ZXN0KDIpOwogfQogCiB2
b2lkIHRlc3RNdWxBZGRBcmdzTGVmdCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFw
aENvbG9yaW5nLmNwcAkocmV2aXNpb24gMjE0NjE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoQjNfSklUKQogCiAjaW5jbHVkZSAi
QWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmgiCiAjaW5j
bHVkZSAiQWlySW5zZXJ0aW9uU2V0LmgiCiAjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKICNp
bmNsdWRlICJBaXJMaXZlbmVzcy5oIgpAQCAtMTU4NSw2ICsxNTg2LDkgQEAgcHJvdGVjdGVkOgog
ICAgICAgICBtX2NvYWxlc2NpbmdDYW5kaWRhdGVzLmNsZWFyKCk7CiAgICAgICAgIG1fd29ya2xp
c3RNb3Zlcy5jbGVhcigpOwogCisgICAgICAgIC8vIEZJWE1FOiBJdCBzZWVtcyBsaWtlIHdlIGRv
bid0IG5lZWQgdG8gcmVjb21wdXRlIGxpdmVuZXNzLiBXZSBqdXN0IG5lZWQgdG8gdXBkYXRlIGl0
cyBkYXRhCisgICAgICAgIC8vIHN0cnVjdHVyZXMgc28gdGhhdCBpdCBrbm93cyB0aGF0IHRoZSBu
ZXdseSBpbnRyb2R1Y2VkIHRlbXBvcmFyaWVzIGFyZSBub3QgbGl2ZSBhdCBhbnkgYmFzaWMKKyAg
ICAgICAgLy8gYmxvY2sgYm91bmRhcnkuIFRoaXMgc2hvdWxkIHRyaXZpYWxseSBiZSB0cnVlIGZv
ciBub3cuCiAgICAgICAgIFRtcExpdmVuZXNzPGJhbms+IGxpdmVuZXNzKG1fY29kZSk7CiAgICAg
ICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsKICAgICAgICAgICAgIHR5cGVu
YW1lIFRtcExpdmVuZXNzPGJhbms+OjpMb2NhbENhbGMgbG9jYWxDYWxjKGxpdmVuZXNzLCBibG9j
ayk7CkBAIC0xNzk4LDcgKzE4MDIsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fbnVtSXRlcmF0aW9u
cyA9IDA7CiAgICAgICAgIGFsbG9jYXRlT25CYW5rPEZQPigpOwogCi0gICAgICAgIGZpeFNwaWxs
c0FmdGVyVGVybWluYWxzKCk7CisgICAgICAgIGZpeFNwaWxsc0FmdGVyVGVybWluYWxzKG1fY29k
ZSk7CiAKICAgICAgICAgaWYgKHJlcG9ydFN0YXRzKQogICAgICAgICAgICAgZGF0YUxvZygiTnVt
IGl0ZXJhdGlvbnMgPSAiLCBtX251bUl0ZXJhdGlvbnMsICJcbiIpOwpAQCAtMTk1NCw3ICsxOTU4
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBpbnN0
LmZvckVhY2hUbXBGYXN0KFsmXSAoVG1wJiB0bXApIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KHRtcC5pc1JlZygpIHx8IHRtcC5pc0dQKCkgPT0gKGJhbmsgIT0gR1ApKQorICAgICAgICAgICAg
ICAgICAgICBpZiAodG1wLmlzUmVnKCkgfHwgdG1wLmJhbmsoKSAhPSBiYW5rKQogICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICAgICAgICAgIFRtcCBhbGlhc1Rt
cCA9IGFsbG9jYXRvci5nZXRBbGlhcyh0bXApOwpAQCAtMjEzMiw3ICsyMTM2LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgLy8gb3RoZXIuIEFzIHdlbGwsIHdlIG5lZWQgdGhpcyBp
ZiB0aGUgcHJldmlvdXMgaW5zdHJ1Y3Rpb24gaGFkIGFueSBsYXRlIGVmZmVjdHMsCiAgICAgICAg
ICAgICAgICAgICAgIC8vIHNpbmNlIG90aGVyd2lzZSB0aGUgc2NyYXRjaCB3b3VsZCBhcHBlYXIg
dG8gaW50ZXJmZXJlIHdpdGggdGhvc2UuIE9uIHRoZSBvdGhlcgogICAgICAgICAgICAgICAgICAg
ICAvLyBoYW5kLCB0aGUgbGF0ZSB1c2UgYWRkZWQgYXQgdGhlIGVuZCBvZiB0aGlzIHNwaWxsIG1v
dmUgKHByZXZpb3VzbHkgaXQgd2FzIGp1c3QgYQotICAgICAgICAgICAgICAgICAgICAvLyBsYXRl
IGRlZikgZG9lc24ndCBjaGFuZ2UgdGhlIHBhZGRpbmcgc2l0dWF0aW9uOiB0aGUgbGF0ZSBkZWYg
d291bGQgaGF2ZSBhbHJlYWR5CisgICAgICAgICAgICAgICAgICAgIC8vIGxhdGUgZGVmKSBkb2Vz
bid0IGNoYW5nZSB0aGUgcGFkZGluZyBzaXR1YXRpb24uOiB0aGUgbGF0ZSBkZWYgd291bGQgaGF2
ZSBhbHJlYWR5CiAgICAgICAgICAgICAgICAgICAgIC8vIGNhdXNlZCBpdCB0byByZXBvcnQgaGFz
TGF0ZVVzZU9yRGVmIGluIEluc3Q6Om5lZWRzUGFkZGluZy4KICAgICAgICAgICAgICAgICAgICAg
aW5zZXJ0aW9uU2V0Lmluc2VydChpbnN0SW5kZXgsIE5vcCwgaW5zdC5vcmlnaW4pOwogICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTIxNjksOSArMjE3MywxMiBAQCBwcml2YXRlOgog
CiAgICAgICAgICAgICAgICAgICAgIHRtcCA9IG1fY29kZS5uZXdUbXAoYmFuayk7CiAgICAgICAg
ICAgICAgICAgICAgIHVuc3BpbGxhYmxlVG1wcy5hZGQoQWJzb2x1dGVUbXBNYXBwZXI8YmFuaz46
OmFic29sdXRlSW5kZXgodG1wKSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICBpZiAocm9sZSA9PSBBcmc6OlNjcmF0Y2gpCisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CiAKICAgICAgICAgICAgICAgICAgICAgQXJnIGFyZyA9IEFyZzo6c3RhY2soc3Rh
Y2tTbG90RW50cnktPnZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlV
c2Uocm9sZSkgJiYgcm9sZSAhPSBBcmc6OlNjcmF0Y2gpCisgICAgICAgICAgICAgICAgICAgIGlm
IChBcmc6OmlzQW55VXNlKHJvbGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9u
U2V0Lmluc2VydChpbnN0SW5kZXgsIG1vdmUsIGluc3Qub3JpZ2luLCBhcmcsIHRtcCk7CiAgICAg
ICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzQW55RGVmKHJvbGUpKQogICAgICAgICAgICAgICAg
ICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydChpbnN0SW5kZXggKyAxLCBtb3ZlLCBpbnN0Lm9y
aWdpbiwgdG1wLCBhcmcpOwpAQCAtMjE4Nyw2NiArMjE5NCw2IEBAIHByaXZhdGU6CiAgICAgICAg
IH0KICAgICB9CiAKLSAgICB2b2lkIGZpeFNwaWxsc0FmdGVyVGVybWluYWxzKCkKLSAgICB7Ci0g
ICAgICAgIC8vIEJlY2F1c2UgdGhlcmUgbWF5IGJlIHRlcm1pbmFscyB0aGF0IHByb2R1Y2UgdmFs
dWVzLCBJUkMgbWF5Ci0gICAgICAgIC8vIHdhbnQgdG8gc3BpbGwgdGhvc2UgdGVybWluYWxzLiBJ
dCdsbCBoYXBwZW4gdG8gc3BpbGwgaXQgYWZ0ZXIKLSAgICAgICAgLy8gdGhlIHRlcm1pbmFsLiBJ
ZiB3ZSBsZWZ0IHRoZSBncmFwaCBpbiB0aGlzIHN0YXRlLCBpdCdkIGJlIGludmFsaWQKLSAgICAg
ICAgLy8gYmVjYXVzZSBhIHRlcm1pbmFsIG11c3QgYmUgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24gaW4g
YSBibG9jay4KLSAgICAgICAgLy8gV2UgZml4IHRoYXQgaGVyZS4KLQotICAgICAgICBJbnNlcnRp
b25TZXQgaW5zZXJ0aW9uU2V0KG1fY29kZSk7Ci0KLSAgICAgICAgYm9vbCBhZGRlZEJsb2NrcyA9
IGZhbHNlOwotCi0gICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIHRlcm1pbmFsSW5kZXggPSBibG9jay0+c2l6ZSgpOwotICAgICAg
ICAgICAgYm9vbCBmb3VuZFRlcm1pbmFsID0gZmFsc2U7Ci0gICAgICAgICAgICB3aGlsZSAodGVy
bWluYWxJbmRleC0tKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGJsb2NrLT5hdCh0ZXJtaW5hbElu
ZGV4KS5pc1Rlcm1pbmFsKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZm91bmRUZXJtaW5hbCA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoZm91bmRUZXJtaW5hbCwgZm91
bmRUZXJtaW5hbCk7Ci0KLSAgICAgICAgICAgIGlmICh0ZXJtaW5hbEluZGV4ID09IGJsb2NrLT5z
aXplKCkgLSAxKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAvLyBU
aGVyZSBtdXN0IGJlIGluc3RydWN0aW9ucyBhZnRlciB0aGUgdGVybWluYWwgYmVjYXVzZSBpdCdz
IG5vdCB0aGUgbGFzdCBpbnN0cnVjdGlvbi4KLSAgICAgICAgICAgIEFTU0VSVCh0ZXJtaW5hbElu
ZGV4IDwgYmxvY2stPnNpemUoKSAtIDEpOwotICAgICAgICAgICAgVmVjdG9yPEluc3QsIDE+IGlu
c3RzVG9Nb3ZlOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdGVybWluYWxJbmRleCAr
IDE7IGkgPCBibG9jay0+c2l6ZSgpOyBpKyspCi0gICAgICAgICAgICAgICAgaW5zdHNUb01vdmUu
YXBwZW5kKGJsb2NrLT5hdChpKSk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpbnN0c1Rv
TW92ZS5zaXplKCkpOwotCi0gICAgICAgICAgICBmb3IgKEZyZXF1ZW50ZWRCbG9jayYgZnJlcXVl
bnRlZFN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKLSAgICAgICAgICAgICAgICBC
YXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBmcmVxdWVudGVkU3VjY2Vzc29yLmJsb2NrKCk7Ci0gICAg
ICAgICAgICAgICAgLy8gSWYgc3VjY2Vzc29yJ3Mgb25seSBwcmVkZWNlc3NvciBpcyBibG9jaywg
d2UgY2FuIHBsYW50IHRoZSBzcGlsbCBpbnNpZGUKLSAgICAgICAgICAgICAgICAvLyB0aGUgc3Vj
Y2Vzc29yLiBPdGhlcndpc2UsIHdlIG11c3Qgc3BsaXQgdGhlIGNyaXRpY2FsIGVkZ2UgYW5kIGNy
ZWF0ZQotICAgICAgICAgICAgICAgIC8vIGEgbmV3IGJsb2NrIGZvciB0aGUgc3BpbGwuCi0gICAg
ICAgICAgICAgICAgaWYgKHN1Y2Nlc3Nvci0+bnVtUHJlZGVjZXNzb3JzKCkgPT0gMSkgewotICAg
ICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0SW5zdHMoMCwgaW5zdHNUb01vdmUp
OwotICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShzdWNjZXNzb3IpOwot
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGFkZGVkQmxvY2tz
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHByb2JhYmx5IHdhbnQg
YmV0dGVyIGJsb2NrIG9yZGVyaW5nIGhlcmUuCi0gICAgICAgICAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIG5ld0Jsb2NrID0gbV9jb2RlLmFkZEJsb2NrKCk7Ci0gICAgICAgICAgICAgICAgICAgIGZv
ciAoY29uc3QgSW5zdCYgaW5zdCA6IGluc3RzVG9Nb3ZlKQotICAgICAgICAgICAgICAgICAgICAg
ICAgbmV3QmxvY2stPmFwcGVuZEluc3QoaW5zdCk7Ci0gICAgICAgICAgICAgICAgICAgIG5ld0Js
b2NrLT5hcHBlbmRJbnN0KEluc3QoSnVtcCwgaW5zdHNUb01vdmUubGFzdCgpLm9yaWdpbikpOwot
ICAgICAgICAgICAgICAgICAgICBuZXdCbG9jay0+c3VjY2Vzc29ycygpLmFwcGVuZChzdWNjZXNz
b3IpOwotICAgICAgICAgICAgICAgICAgICBmcmVxdWVudGVkU3VjY2Vzc29yLmJsb2NrKCkgPSBu
ZXdCbG9jazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGJsb2NrLT5yZXNpemUodGVybWluYWxJbmRleCArIDEpOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKGFkZGVkQmxvY2tzKQotICAgICAgICAgICAgbV9jb2RlLnJlc2V0UmVhY2hhYmlsaXR5KCk7
Ci0gICAgfQotCiAgICAgQ29kZSYgbV9jb2RlOwogICAgIFRtcFdpZHRoIG1fdG1wV2lkdGg7CiAg
ICAgVXNlQ291bnRzPFRtcD4mIG1fdXNlQ291bnRzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5
TGluZWFyU2Nhbi5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw1OTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyQWxsb2NhdGVSZWdpc3Rl
cnNCeUxpbmVhclNjYW4uaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJB
cmdJbmxpbmVzLmgiCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckZpeFNwaWxs
c0FmdGVyVGVybWluYWxzLmgiCisjaW5jbHVkZSAiQWlyUGhhc2VJbnNlcnRpb25TZXQuaCIKKyNp
bmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgorI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgiCisjaW5j
bHVkZSAiQWlyUGFkSW50ZXJmZXJlbmNlLmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgor
I2luY2x1ZGUgIkFpclJlZ0xpdmVuZXNzLmgiCisjaW5jbHVkZSAiQWlyVG1wSW5saW5lcy5oIgor
I2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorI2luY2x1ZGUgPHd0Zi9SYW5nZS5oPgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK25hbWVzcGFjZSB7
CisKK05PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggTkVWRVJfSU5MSU5FIHZvaWQgY3Jhc2goKQorewor
ICAgIENSQVNIKCk7Cit9CisKKyN1bmRlZiBSRUxFQVNFX0FTU0VSVAorI2RlZmluZSBSRUxFQVNF
X0FTU0VSVChhc3NlcnRpb24pIGRvIHsgXAorICAgIGlmICghKGFzc2VydGlvbikpIHsgXAorICAg
ICAgICBXVEZSZXBvcnRBc3NlcnRpb25GYWlsdXJlKF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BS
RVRUWV9GVU5DVElPTiwgI2Fzc2VydGlvbik7IFwKKyAgICAgICAgY3Jhc2goKTsgXAorICAgIH0g
XAorfSB3aGlsZSAoMCkKKworYm9vbCB2ZXJib3NlKCkgeyByZXR1cm4gT3B0aW9uczo6YWlyTGlu
ZWFyU2NhblZlcmJvc2UoKTsgfQorCisvLyBQaGFzZSBjb25zdGFudHMgd2UgdXNlIGZvciB0aGUg
UGhhc2VJbnNlcnRpb25TZXQuCitjb25zdCB1bnNpZ25lZCBmaXJzdFBoYXNlID0gMDsKK2NvbnN0
IHVuc2lnbmVkIHNlY29uZFBoYXNlID0gMTsKKwordHlwZWRlZiBSYW5nZTxzaXplX3Q+IEludGVy
dmFsOworCitzdHJ1Y3QgVG1wRGF0YSB7CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0CisgICAgeworICAgICAgICBvdXQucHJpbnQoIntpbnRlcnZhbCA9ICIsIGludGVydmFs
LCAiLCBzcGlsbGVkID0gIiwgcG9pbnRlckR1bXAoc3BpbGxlZCksICIsIGFzc2lnbmVkID0gIiwg
YXNzaWduZWQsICIsIGlzVW5zcGlsbGFibGUgPSAiLCBpc1Vuc3BpbGxhYmxlLCAiLCBwb3NzaWJs
ZVJlZ3MgPSAiLCBwb3NzaWJsZVJlZ3MsICIsIGRpZEJ1aWxkUG9zc2libGVSZWdzID0gIiwgZGlk
QnVpbGRQb3NzaWJsZVJlZ3MsICJ9Iik7CisgICAgfQorICAgIAorICAgIHZvaWQgdmFsaWRhdGUo
KQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIShzcGlsbGVkICYmIGFzc2lnbmVkKSk7
CisgICAgfQorICAgIAorICAgIEludGVydmFsIGludGVydmFsOworICAgIFN0YWNrU2xvdCogc3Bp
bGxlZCB7IG51bGxwdHIgfTsKKyAgICBSZWdpc3RlclNldCBwb3NzaWJsZVJlZ3M7CisgICAgUmVn
IGFzc2lnbmVkOworICAgIGJvb2wgaXNVbnNwaWxsYWJsZSB7IGZhbHNlIH07CisgICAgYm9vbCBk
aWRCdWlsZFBvc3NpYmxlUmVncyB7IGZhbHNlIH07Cit9OworCitzdHJ1Y3QgQ2xvYmJlciB7Cisg
ICAgQ2xvYmJlcigpCisgICAgeworICAgIH0KKyAgICAKKyAgICBDbG9iYmVyKHNpemVfdCBpbmRl
eCwgUmVnaXN0ZXJTZXQgcmVncykKKyAgICAgICAgOiBpbmRleChpbmRleCkKKyAgICAgICAgLCBy
ZWdzKHJlZ3MpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIG91dC5wcmludChpbmRleCwgIjoiLCByZWdzKTsK
KyAgICB9CisgICAgCisgICAgc2l6ZV90IGluZGV4IHsgMCB9OworICAgIFJlZ2lzdGVyU2V0IHJl
Z3M7Cit9OworCit0ZW1wbGF0ZTxCYW5rIGJhbms+CitjbGFzcyBMaW5lYXJTY2FuIHsKK3B1Ymxp
YzoKKyAgICBMaW5lYXJTY2FuKENvZGUmIGNvZGUpCisgICAgICAgIDogbV9jb2RlKGNvZGUpCisg
ICAgICAgICwgbV9zdGFydEluZGV4KGNvZGUuc2l6ZSgpKQorICAgICAgICAsIG1fbWFwKGNvZGUu
bnVtVG1wcyhiYW5rKSkKKyAgICAgICAgLCBtX2luc2VydGlvblNldHMoY29kZS5zaXplKCkpCisg
ICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIHJ1bigpCisgICAgeworICAgICAgICBidWlsZFJl
Z2lzdGVyU2V0KCk7CisgICAgICAgIGJ1aWxkSW5kaWNlcygpOworICAgICAgICBidWlsZEludGVy
dmFscygpOworICAgICAgICBpZiAoc2hvdWxkU3BpbGxFdmVyeXRoaW5nKCkpIHsKKyAgICAgICAg
ICAgIHNwaWxsRXZlcnl0aGluZygpOworICAgICAgICAgICAgZW1pdFNwaWxsQ29kZSgpOworICAg
ICAgICB9CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIHByZXBhcmVJbnRlcnZhbHMo
KTsKKyAgICAgICAgICAgIGF0dGVtcHRTY2FuKCk7CisgICAgICAgICAgICBpZiAoIW1fZGlkU3Bp
bGwpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBlbWl0U3BpbGxDb2RlKCk7
CisgICAgICAgIH0KKyAgICAgICAgaW5zZXJ0U3BpbGxDb2RlKCk7CisgICAgICAgIGFzc2lnblJl
Z2lzdGVycygpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgdm9pZCBidWlsZFJlZ2lzdGVy
U2V0KCkKKyAgICB7CisgICAgICAgIG1fcmVnaXN0ZXJzID0gbV9jb2RlLnJlZ3NJblByaW9yaXR5
T3JkZXIoYmFuayk7CisgICAgICAgIG1fcmVnaXN0ZXJTZXQuc2V0QWxsKG1fcmVnaXN0ZXJzKTsK
KyAgICB9CisKKyAgICB2b2lkIGJ1aWxkSW5kaWNlcygpCisgICAgeworICAgICAgICBzaXplX3Qg
aW5kZXggPSAwOworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7Cisg
ICAgICAgICAgICBtX3N0YXJ0SW5kZXhbYmxvY2tdID0gaW5kZXg7CisgICAgICAgICAgICBpbmRl
eCArPSBibG9jay0+c2l6ZSgpICogMjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBzaXpl
X3QgaW5kZXhPZkhlYWQoQmFzaWNCbG9jayogYmxvY2spCisgICAgeworICAgICAgICByZXR1cm4g
bV9zdGFydEluZGV4W2Jsb2NrXTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IGluZGV4T2ZUYWls
KEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGluZGV4T2ZIZWFkKGJs
b2NrKSArIGJsb2NrLT5zaXplKCkgKiAyOworICAgIH0KKyAgICAKKyAgICBJbnRlcnZhbCBpbnRl
cnZhbChzaXplX3QgaW5kZXhPZkVhcmx5LCBBcmc6OlRpbWluZyB0aW1pbmcpCisgICAgeworICAg
ICAgICBzd2l0Y2ggKHRpbWluZykgeworICAgICAgICBjYXNlIEFyZzo6T25seUVhcmx5OgorICAg
ICAgICAgICAgcmV0dXJuIEludGVydmFsKGluZGV4T2ZFYXJseSk7CisgICAgICAgIGNhc2UgQXJn
OjpPbmx5TGF0ZToKKyAgICAgICAgICAgIHJldHVybiBJbnRlcnZhbChpbmRleE9mRWFybHkgKyAx
KTsKKyAgICAgICAgY2FzZSBBcmc6OkVhcmx5QW5kTGF0ZToKKyAgICAgICAgICAgIHJldHVybiBJ
bnRlcnZhbChpbmRleE9mRWFybHksIGluZGV4T2ZFYXJseSArIDIpOworICAgICAgICB9CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gSW50ZXJ2YWwoKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBidWlsZEludGVydmFscygpCisgICAgeworICAgICAgICBUbXBM
aXZlbmVzczxiYW5rPiBsaXZlbmVzcyhtX2NvZGUpOworICAgICAgICAKKyAgICAgICAgZm9yIChC
YXNpY0Jsb2NrKiBibG9jayA6IG1fY29kZSkgeworICAgICAgICAgICAgc2l6ZV90IGluZGV4T2ZI
ZWFkID0gdGhpcy0+aW5kZXhPZkhlYWQoYmxvY2spOworICAgICAgICAgICAgc2l6ZV90IGluZGV4
T2ZUYWlsID0gdGhpcy0+aW5kZXhPZlRhaWwoYmxvY2spOworICAgICAgICAgICAgaWYgKHZlcmJv
c2UoKSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2coIkF0IGJsb2NrICIsIHBvaW50ZXJEdW1w
KGJsb2NrKSwgIlxuIik7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiICBpbmRleE9mSGVhZCA9
ICIsIGluZGV4T2ZIZWFkLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgIGlkbmV4
T2ZUYWlsID0gIiwgaW5kZXhPZlRhaWwsICJcbiIpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZm9yIChUbXAgdG1wIDogbGl2ZW5lc3MubGl2ZUF0SGVhZChibG9jaykpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoIXRtcC5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICBtX21hcFt0bXBd
LmludGVydmFsIHw9IEludGVydmFsKGluZGV4T2ZIZWFkKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGZvciAoVG1wIHRtcCA6IGxpdmVuZXNzLmxpdmVBdFRhaWwoYmxvY2spKSB7CisgICAg
ICAgICAgICAgICAgaWYgKCF0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9tYXBb
dG1wXS5pbnRlcnZhbCB8PSBJbnRlcnZhbChpbmRleE9mVGFpbCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gMDsgaW5z
dEluZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbnN0SW5kZXgpIHsKKyAgICAgICAgICAgICAgICBJ
bnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7CisgICAgICAgICAgICAgICAgc2l6ZV90
IGluZGV4T2ZFYXJseSA9IGluZGV4T2ZIZWFkICsgaW5zdEluZGV4ICogMjsKKyAgICAgICAgICAg
ICAgICBpbnN0LmZvckVhY2hUbXAoCisgICAgICAgICAgICAgICAgICAgIFsmXSAoVG1wJiB0bXAs
IEFyZzo6Um9sZSByb2xlLCBCYW5rIHRtcEJhbmssIFdpZHRoKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAodG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcEJhbmsgIT0gYmFuaykKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICBt
X21hcFt0bXBdLmludGVydmFsIHw9IGludGVydmFsKGluZGV4T2ZFYXJseSwgQXJnOjp0aW1pbmco
cm9sZSkpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgUmVnTGl2ZW5lc3M6OkxvY2FsQ2FsYyBsb2NhbENhbGMobGl2ZW5lc3MsIGJsb2NrKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgYXV0byByZWNvcmQgPSBbJl0gKHVuc2lnbmVkIGlu
c3RJbmRleCkgeworICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHJlZ3MgPSBsb2NhbENhbGMu
bGl2ZSgpOworICAgICAgICAgICAgICAgIGlmIChJbnN0KiBwcmV2ID0gYmxvY2stPmdldChpbnN0
SW5kZXggLSAxKSkgeworICAgICAgICAgICAgICAgICAgICBSZWdpc3RlclNldCBwcmV2UmVncyA9
IHJlZ3M7CisgICAgICAgICAgICAgICAgICAgIHByZXYtPmZvckVhY2g8UmVnPigKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFsmXSAoUmVnJiByZWcsIEFyZzo6Um9sZSByb2xlLCBCYW5rLCBXaWR0
aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzTGF0ZURlZihyb2xl
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldlJlZ3MuYWRkKHJlZyk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHByZXYt
PmtpbmQub3Bjb2RlID09IFBhdGNoKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJldlJlZ3Mu
bWVyZ2UocHJldi0+ZXh0cmFDbG9iYmVyZWRSZWdzKCkpOworICAgICAgICAgICAgICAgICAgICBw
cmV2UmVncy5maWx0ZXIobV9yZWdpc3RlclNldCk7CisgICAgICAgICAgICAgICAgICAgIGlmICgh
cHJldlJlZ3MuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgbV9jbG9iYmVycy5h
cHBlbmQoQ2xvYmJlcihpbmRleE9mSGVhZCArIGluc3RJbmRleCAqIDIgLSAxLCBwcmV2UmVncykp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoSW5zdCogbmV4dCA9IGJs
b2NrLT5nZXQoaW5zdEluZGV4KSkgeworICAgICAgICAgICAgICAgICAgICBSZWdpc3RlclNldCBu
ZXh0UmVncyA9IHJlZ3M7CisgICAgICAgICAgICAgICAgICAgIG5leHQtPmZvckVhY2g8UmVnPigK
KyAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoUmVnJiByZWcsIEFyZzo6Um9sZSByb2xlLCBC
YW5rLCBXaWR0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzRWFy
bHlEZWYocm9sZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRSZWdzLmFk
ZChyZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAg
IGlmIChuZXh0LT5raW5kLm9wY29kZSA9PSBQYXRjaCkKKyAgICAgICAgICAgICAgICAgICAgICAg
IG5leHRSZWdzLm1lcmdlKG5leHQtPmV4dHJhRWFybHlDbG9iYmVyZWRSZWdzKCkpOworICAgICAg
ICAgICAgICAgICAgICBpZiAoIW5leHRSZWdzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1fY2xvYmJlcnMuYXBwZW5kKENsb2JiZXIoaW5kZXhPZkhlYWQgKyBpbnN0SW5kZXgg
KiAyLCBuZXh0UmVncykpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIHJlY29yZChibG9jay0+c2l6ZSgpKTsKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gYmxvY2stPnNpemUoKTsgaW5zdEluZGV4LS07KSB7
CisgICAgICAgICAgICAgICAgbG9jYWxDYWxjLmV4ZWN1dGUoaW5zdEluZGV4KTsKKyAgICAgICAg
ICAgICAgICByZWNvcmQoaW5zdEluZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgc3RkOjpzb3J0KAorICAgICAgICAgICAgbV9jbG9iYmVycy5iZWdpbigp
LCBtX2Nsb2JiZXJzLmVuZCgpLAorICAgICAgICAgICAgW10gKENsb2JiZXImIGEsIENsb2JiZXIm
IGIpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IDwgYi5pbmRleDsK
KyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgaWYgKHZlcmJvc2UoKSkgeworICAg
ICAgICAgICAgZGF0YUxvZygiSW50ZXJ2YWxzOlxuIik7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIHRtcEluZGV4ID0gMDsgdG1wSW5kZXggPCBtX2NvZGUubnVtVG1wcyhiYW5rKTsgKyt0bXBJ
bmRleCkgeworICAgICAgICAgICAgICAgIFRtcCB0bXAgPSBUbXA6OnRtcEZvckluZGV4KGJhbmss
IHRtcEluZGV4KTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgIiwgdG1wLCAiOiAiLCBt
X21hcFt0bXBdLCAiXG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAK
KyAgICBib29sIHNob3VsZFNwaWxsRXZlcnl0aGluZygpCisgICAgeworICAgICAgICBpZiAoIU9w
dGlvbnM6OmFpckxpbmVhclNjYW5TcGlsbHNFdmVyeXRoaW5nKCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICAvLyBZb3UncmUgbWVhbnQgdG8gaGFjayB0aGlz
IHNvIHRoYXQgeW91IHNlbGVjdGl2ZWx5IHNwaWxsIGV2ZXJ5dGhpbmcgZGVwZW5kaW5nIG9uIHJl
YXNvbnMuCisgICAgICAgIC8vIFRoYXQncyBzdXBlciB1c2VmdWwgZm9yIGRlYnVnZ2luZy4KKwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzcGlsbEV2ZXJ5dGhp
bmcoKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCB0bXBJbmRleCA9IDA7IHRtcEluZGV4
IDwgbV9jb2RlLm51bVRtcHMoYmFuayk7ICsrdG1wSW5kZXgpCisgICAgICAgICAgICBzcGlsbChU
bXA6OnRtcEZvckluZGV4KGJhbmssIHRtcEluZGV4KSk7CisgICAgfQorICAgIAorICAgIHZvaWQg
cHJlcGFyZUludGVydmFscygpCisgICAgeworICAgICAgICBtX3RtcHMucmVzaXplKDApOworICAg
ICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCB0bXBJbmRleCA9IDA7IHRtcEluZGV4IDwgbV9j
b2RlLm51bVRtcHMoYmFuayk7ICsrdG1wSW5kZXgpIHsKKyAgICAgICAgICAgIFRtcCB0bXAgPSBU
bXA6OnRtcEZvckluZGV4KGJhbmssIHRtcEluZGV4KTsKKyAgICAgICAgICAgIFRtcERhdGEmIGRh
dGEgPSBtX21hcFt0bXBdOworICAgICAgICAgICAgaWYgKGRhdGEuc3BpbGxlZCkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZGF0YS5hc3NpZ25l
ZCA9IFJlZygpOworICAgICAgICAgICAgbV90bXBzLmFwcGVuZCh0bXApOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBzdGQ6OnNvcnQoCisgICAgICAgICAgICBtX3RtcHMuYmVnaW4oKSwg
bV90bXBzLmVuZCgpLAorICAgICAgICAgICAgWyZdIChUbXAmIGEsIFRtcCYgYikgeworICAgICAg
ICAgICAgICAgIHJldHVybiBtX21hcFthXS5pbnRlcnZhbC5iZWdpbigpIDwgbV9tYXBbYl0uaW50
ZXJ2YWwuYmVnaW4oKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgaWYgKHZl
cmJvc2UoKSkgeworICAgICAgICAgICAgZGF0YUxvZygiVG1wczogIiwgbGlzdER1bXAobV90bXBz
KSwgIlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKCJDbG9iYmVyczogIiwgbGlzdER1bXAobV9j
bG9iYmVycyksICJcbiIpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIFRtcCBhZGRTcGls
bFRtcFdpdGhJbnRlcnZhbChJbnRlcnZhbCBpbnRlcnZhbCkKKyAgICB7CisgICAgICAgIFRtcERh
dGEgZGF0YTsKKyAgICAgICAgZGF0YS5pbnRlcnZhbCA9IGludGVydmFsOworICAgICAgICBkYXRh
LmlzVW5zcGlsbGFibGUgPSB0cnVlOworICAgICAgICAKKyAgICAgICAgVG1wIHRtcCA9IG1fY29k
ZS5uZXdUbXAoYmFuayk7CisgICAgICAgIG1fbWFwLmFwcGVuZCh0bXAsIGRhdGEpOworICAgICAg
ICByZXR1cm4gdG1wOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0dGVtcHRTY2FuKCkKKyAgICB7
CisgICAgICAgIC8vIFRoaXMgaXMgbW9kZWxlZCBhZnRlciBMaW5lYXJTY2FuUmVnaXN0ZXJBbGxv
Y2F0aW9uIGluIEZpZy4gMSBpbgorICAgICAgICAvLyBodHRwOi8vZGwuYWNtLm9yZy9jaXRhdGlv
bi5jZm0/aWQ9MzMwMjUwLgorCisgICAgICAgIG1fZGlkU3BpbGwgPSBmYWxzZTsKKyAgICAgICAg
bV9hY3RpdmUuY2xlYXIoKTsKKyAgICAgICAgbV9hY3RpdmVSZWdzID0gUmVnaXN0ZXJTZXQoKTsK
KyAgICAgICAgCisgICAgICAgIHNpemVfdCBjbG9iYmVySW5kZXggPSAwOworICAgICAgICBmb3Ig
KFRtcCYgdG1wIDogbV90bXBzKSB7CisgICAgICAgICAgICBUbXBEYXRhJiBlbnRyeSA9IG1fbWFw
W3RtcF07CisgICAgICAgICAgICBzaXplX3QgaW5kZXggPSBlbnRyeS5pbnRlcnZhbC5iZWdpbigp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAodmVyYm9zZSgpKSB7CisgICAgICAgICAg
ICAgICAgZGF0YUxvZygiSW5kZXggIyIsIGluZGV4LCAiOiAiLCB0bXAsICJcbiIpOworICAgICAg
ICAgICAgICAgIGRhdGFMb2coIiAgIiwgdG1wLCAiOiAiLCBlbnRyeSwgIlxuIik7CisgICAgICAg
ICAgICAgICAgZGF0YUxvZygiICBjbG9iYmVySW5kZXggPSAiLCBjbG9iYmVySW5kZXgsICJcbiIp
OworICAgICAgICAgICAgICAgIC8vIFRoaXMgY291bGQgYmUgc28gbXVjaCBmYXN0ZXIuCisgICAg
ICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2NvZGVbMF07CisgICAgICAgICAgICAg
ICAgZm9yIChCYXNpY0Jsb2NrKiBjYW5kaWRhdGVCbG9jayA6IG1fY29kZSkgeworICAgICAgICAg
ICAgICAgICAgICBpZiAobV9zdGFydEluZGV4W2NhbmRpZGF0ZUJsb2NrXSA+IGluZGV4KQorICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGJsb2NrID0g
Y2FuZGlkYXRlQmxvY2s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGluc3RJbmRleCA9IChpbmRleCAtIG1fc3RhcnRJbmRleFtibG9ja10gKyAxKSAvIDI7Cisg
ICAgICAgICAgICAgICAgZGF0YUxvZygiICBBdDogIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiLCBp
bnN0SW5kZXggPSAiLCBpbnN0SW5kZXgsICJcbiIpOworICAgICAgICAgICAgICAgIGRhdGFMb2co
IiAgICBQcmV2OiAiLCBwb2ludGVyRHVtcChibG9jay0+Z2V0KGluc3RJbmRleCAtIDEpKSwgIlxu
Iik7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIE5leHQ6ICIsIHBvaW50ZXJEdW1wKGJs
b2NrLT5nZXQoaW5zdEluZGV4KSksICJcbiIpOworICAgICAgICAgICAgICAgIGRhdGFMb2coIiAg
QWN0aXZlOlxuIik7CisgICAgICAgICAgICAgICAgZm9yIChUbXAgdG1wIDogbV9hY3RpdmUpCisg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAiLCB0bXAsICI6ICIsIG1fbWFwW3RtcF0s
ICJcbiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUaGlz
IGlzIEV4cGlyZU9sZEludGVydmFscyBpbiBGaWcuIDEuCisgICAgICAgICAgICB3aGlsZSAoIW1f
YWN0aXZlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIFRtcCB0bXAgPSBtX2FjdGl2ZS5m
aXJzdCgpOworICAgICAgICAgICAgICAgIFRtcERhdGEmIGVudHJ5ID0gbV9tYXBbdG1wXTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBib29sIGV4cGlyZWQgPSBlbnRyeS5pbnRl
cnZhbC5lbmQoKSA8PSBpbmRleDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBp
ZiAoIWV4cGlyZWQpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIG1fYWN0aXZlLnJlbW92ZUZpcnN0KCk7CisgICAgICAgICAgICAg
ICAgbV9hY3RpdmVSZWdzLnJlbW92ZShlbnRyeS5hc3NpZ25lZCk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8vIElmIG5lY2Vzc2FyeSwgY29tcHV0ZSB0aGUgc2V0IG9mIHJlZ2lzdGVy
cyB0aGF0IHRoaXMgdG1wIGNvdWxkIGV2ZW4gdXNlLiBUaGlzIGlzIG5vdAorICAgICAgICAgICAg
Ly8gcGFydCBvZiBGaWcuIDEsIGJ1dCBpdCdzIGEgdGVjaG5pcXVlIHRoYXQgdGhlIGF1dGhvcnMg
Y2xhaW0gdG8gaGF2ZSBpbXBsZW1lbnRlZCBpbiBvbmUgb2YKKyAgICAgICAgICAgIC8vIHRoZWly
IHR3byBpbXBsZW1lbnRhdGlvbnMuIFRoZXJlIG1heSBiZSBvdGhlciBtb3JlIGVmZmljaWVudCB3
YXlzIHRvIGRvIHRoaXMsIGJ1dCB0aGlzCisgICAgICAgICAgICAvLyBpbXBsZW1lbnRhdGlvbiBn
ZXRzIHNvbWUgcGVyZiB3aW5zIGZyb20gcGlnZ3ktYmFja2luZyB0aGlzIGNhbGN1bGF0aW9uIGlu
IHRoZSBzY2FuLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGUg
ZGlkQnVpbGQgZmxhZyBzdGlja3MgdGhyb3VnaCBzcGlsbGluZy4gU3BpbGxpbmcgZG9lc24ndCBj
aGFuZ2UgdGhlCisgICAgICAgICAgICAvLyBpbnRlcmZlcmVuY2Ugc2l0dWF0aW9uLgorICAgICAg
ICAgICAgLy8KKyAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBjb3VsZCBzaG9ydC1jaXJjdWl0
IHRoaXMgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEgc3BpbGxhYmxlIHRtcCwgdGhlcmUgYXJlIG5v
CisgICAgICAgICAgICAvLyBmcmVlIHJlZ2lzdGVycywgYW5kIHRoaXMgcmVnaXN0ZXIncyBpbnRl
cnZhbCBlbmRzIGFmdGVyIHRoZSBvbmUgb24gdGhlIHRvcCBvZiB0aGUgYWN0aXZlCisgICAgICAg
ICAgICAvLyBzdGFjay4KKyAgICAgICAgICAgIGlmICghZW50cnkuZGlkQnVpbGRQb3NzaWJsZVJl
Z3MpIHsKKyAgICAgICAgICAgICAgICAvLyBBZHZhbmNlIHRoZSBjbG9iYmVyIGluZGV4IHVudGls
IGl0J3MgYXQgYSBjbG9iYmVyIHRoYXQgaXMgcmVsZXZhbnQgdG8gdXMuCisgICAgICAgICAgICAg
ICAgd2hpbGUgKGNsb2JiZXJJbmRleCA8IG1fY2xvYmJlcnMuc2l6ZSgpICYmIG1fY2xvYmJlcnNb
Y2xvYmJlckluZGV4XS5pbmRleCA8IGluZGV4KQorICAgICAgICAgICAgICAgICAgICBjbG9iYmVy
SW5kZXgrKzsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBSZWdpc3RlclNldCBw
b3NzaWJsZVJlZ3MgPSBtX3JlZ2lzdGVyU2V0OworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSBjbG9iYmVySW5kZXg7IGkgPCBtX2Nsb2JiZXJzLnNpemUoKSAmJiBtX2Nsb2JiZXJzW2ld
LmluZGV4IDwgZW50cnkuaW50ZXJ2YWwuZW5kKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAg
cG9zc2libGVSZWdzLmV4Y2x1ZGUobV9jbG9iYmVyc1tpXS5yZWdzKTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBlbnRyeS5wb3NzaWJsZVJlZ3MgPSBwb3NzaWJsZVJlZ3M7Cisg
ICAgICAgICAgICAgICAgZW50cnkuZGlkQnVpbGRQb3NzaWJsZVJlZ3MgPSB0cnVlOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAodmVyYm9zZSgpKQorICAgICAg
ICAgICAgICAgIGRhdGFMb2coIiAgUG9zc2libGUgcmVnczogIiwgZW50cnkucG9zc2libGVSZWdz
LCAiXG4iKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gRmluZCBhIGZyZWUgcmVnaXN0
ZXIgdGhhdCB3ZSBhcmUgYWxsb3dlZCB0byB1c2UuCisgICAgICAgICAgICBpZiAobV9hY3RpdmUu
c2l6ZSgpICE9IG1fcmVnaXN0ZXJzLnNpemUoKSkgeworICAgICAgICAgICAgICAgIGJvb2wgZGlk
QXNzaWduID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogbV9yZWdpc3Rl
cnMpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2FjdGl2ZVJlZ3MuY29udGFpbnMocmVn
KSAmJiBlbnRyeS5wb3NzaWJsZVJlZ3MuY29udGFpbnMocmVnKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgYXNzaWduKHRtcCwgcmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpZEFz
c2lnbiA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoZGlkQXNz
aWduKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgLy8gVGhpcyBpcyBTcGlsbEF0SW50ZXJ2YWwgaW4gRmlnLiAx
LCBidXQgbW9kaWZpZWQgdG8gaGFuZGxlIGNsb2JiZXJzLgorICAgICAgICAgICAgVG1wIHNwaWxs
VG1wID0gbV9hY3RpdmUudGFrZUxhc3QoCisgICAgICAgICAgICAgICAgWyZdIChUbXAgc3BpbGxD
YW5kaWRhdGUpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW50cnkucG9z
c2libGVSZWdzLmNvbnRhaW5zKG1fbWFwW3NwaWxsQ2FuZGlkYXRlXS5hc3NpZ25lZCk7CisgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpZiAoIXNwaWxsVG1wKSB7CisgICAgICAgICAg
ICAgICAgc3BpbGwodG1wKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIFRtcERhdGEmIHNwaWxsRW50cnkgPSBtX21hcFtzcGlsbFRtcF07Cisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzcGlsbEVudHJ5LmFzc2lnbmVkKTsKKyAgICAgICAg
ICAgIGlmIChzcGlsbEVudHJ5LmlzVW5zcGlsbGFibGUgfHwKKyAgICAgICAgICAgICAgICAoIWVu
dHJ5LmlzVW5zcGlsbGFibGUgJiYgc3BpbGxFbnRyeS5pbnRlcnZhbC5lbmQoKSA8PSBlbnRyeS5p
bnRlcnZhbC5lbmQoKSkpIHsKKyAgICAgICAgICAgICAgICBzcGlsbCh0bXApOworICAgICAgICAg
ICAgICAgIGFkZFRvQWN0aXZlKHNwaWxsVG1wKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgYXNzaWduKHRtcCwgc3Bp
bGxFbnRyeS5hc3NpZ25lZCk7CisgICAgICAgICAgICBzcGlsbChzcGlsbFRtcCk7CisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgdm9pZCBhZGRUb0FjdGl2ZShUbXAgdG1wKQorICAgIHsKKyAg
ICAgICAgaWYgKG1fbWFwW3RtcF0uaXNVbnNwaWxsYWJsZSkgeworICAgICAgICAgICAgbV9hY3Rp
dmUucHJlcGVuZCh0bXApOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBtX2FjdGl2ZS5hcHBlbmRBbmRCdWJibGUoCisgICAgICAgICAgICB0bXAsCisg
ICAgICAgICAgICBbJl0gKFRtcCBvdGhlclRtcCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAg
VG1wRGF0YSYgb3RoZXJFbnRyeSA9IG1fbWFwW290aGVyVG1wXTsKKyAgICAgICAgICAgICAgICBp
ZiAob3RoZXJFbnRyeS5pc1Vuc3BpbGxhYmxlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fbWFwW290aGVyVG1wXS5pbnRlcnZhbC5l
bmQoKSA+IG1fbWFwW3RtcF0uaW50ZXJ2YWwuZW5kKCk7CisgICAgICAgICAgICB9KTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBhc3NpZ24oVG1wIHRtcCwgUmVnIHJlZykKKyAgICB7CisgICAgICAg
IFRtcERhdGEmIGVudHJ5ID0gbV9tYXBbdG1wXTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWVu
dHJ5LnNwaWxsZWQpOworICAgICAgICBlbnRyeS5hc3NpZ25lZCA9IHJlZzsKKyAgICAgICAgbV9h
Y3RpdmVSZWdzLmFkZChyZWcpOworICAgICAgICBhZGRUb0FjdGl2ZSh0bXApOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIHNwaWxsKFRtcCB0bXApCisgICAgeworICAgICAgICBUbXBEYXRhJiBlbnRy
eSA9IG1fbWFwW3RtcF07CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFlbnRyeS5pc1Vuc3BpbGxh
YmxlKTsKKyAgICAgICAgZW50cnkuc3BpbGxlZCA9IG1fY29kZS5hZGRTdGFja1Nsb3QoOCwgU3Rh
Y2tTbG90S2luZDo6U3BpbGwpOworICAgICAgICBlbnRyeS5hc3NpZ25lZCA9IFJlZygpOworICAg
ICAgICBtX2RpZFNwaWxsID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBlbWl0U3BpbGxD
b2RlKCkKKyAgICB7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsK
KyAgICAgICAgICAgIHNpemVfdCBpbmRleE9mSGVhZCA9IHRoaXMtPmluZGV4T2ZIZWFkKGJsb2Nr
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gMDsgaW5zdEluZGV4IDwg
YmxvY2stPnNpemUoKTsgKytpbnN0SW5kZXgpIHsKKyAgICAgICAgICAgICAgICBJbnN0JiBpbnN0
ID0gYmxvY2stPmF0KGluc3RJbmRleCk7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXhP
ZkVhcmx5ID0gaW5kZXhPZkhlYWQgKyBpbnN0SW5kZXggKiAyOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIC8vIEZpcnN0IHRyeSB0byBzcGlsbCBkaXJlY3RseS4KKyAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5zdC5hcmdzLnNpemUoKTsgKytpKSB7
CisgICAgICAgICAgICAgICAgICAgIEFyZyYgYXJnID0gaW5zdC5hcmdzW2ldOworICAgICAgICAg
ICAgICAgICAgICBpZiAoIWFyZy5pc1RtcCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgICAgIGlmIChhcmcuaXNSZWcoKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBpZiAoYXJnLmJhbmso
KSAhPSBiYW5rKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgICAgIFN0YWNrU2xvdCogc3BpbGxlZCA9IG1fbWFwW2FyZy50bXAoKV0uc3BpbGxlZDsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFzcGlsbGVkKQorICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIGlmICghaW5zdC5hZG1pdHNTdGFjayhp
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAg
ICBhcmcgPSBBcmc6OnN0YWNrKHNwaWxsZWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBGYWxsIGJhY2sgb24gdGhlIGhhcmQgd2F5Lgor
ICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcCgKKyAgICAgICAgICAgICAgICAgICAgWyZd
IChUbXAmIHRtcCwgQXJnOjpSb2xlIHJvbGUsIEJhbmsgdG1wQmFuaywgV2lkdGgpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wQmFuayAhPSBi
YW5rKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFN0YWNrU2xvdCogc3BpbGxlZCA9IG1fbWFwW3RtcF0uc3BpbGxlZDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghc3BpbGxlZCkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICBPcGNvZGUgbW92ZSA9IGJhbmsg
PT0gR1AgPyBNb3ZlIDogTW92ZURvdWJsZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9
IGFkZFNwaWxsVG1wV2l0aEludGVydmFsKGludGVydmFsKGluZGV4T2ZFYXJseSwgQXJnOjp0aW1p
bmcocm9sZSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyb2xlID09IEFyZzo6U2Ny
YXRjaCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoQXJnOjppc0FueVVzZShyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX2luc2VydGlvblNldHNbYmxvY2tdLmluc2VydChpbnN0SW5kZXgsIHNlY29uZFBo
YXNlLCBtb3ZlLCBpbnN0Lm9yaWdpbiwgQXJnOjpzdGFjayhzcGlsbGVkKSwgdG1wKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzQW55RGVmKHJvbGUpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0c1tibG9ja10uaW5zZXJ0KGluc3RJbmRleCAr
IDEsIGZpcnN0UGhhc2UsIG1vdmUsIGluc3Qub3JpZ2luLCB0bXAsIEFyZzo6c3RhY2soc3BpbGxl
ZCkpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGluc2VydFNwaWxsQ29kZSgpCisgICAgeworICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKQorICAgICAgICAgICAgbV9pbnNlcnRpb25T
ZXRzW2Jsb2NrXS5leGVjdXRlKGJsb2NrKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhc3NpZ25S
ZWdpc3RlcnMoKQorICAgIHsKKyAgICAgICAgaWYgKHZlcmJvc2UoKSkgeworICAgICAgICAgICAg
ZGF0YUxvZygiQWJvdXQgdG8gYWxsb2NhdGUgcmVnaXN0ZXJzLiBTdGF0ZSBvZiBhbGwgdG1wczpc
biIpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB0bXBJbmRleCA9IDA7IHRtcEluZGV4IDwg
bV9jb2RlLm51bVRtcHMoYmFuayk7ICsrdG1wSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBUbXAg
dG1wID0gVG1wOjp0bXBGb3JJbmRleChiYW5rLCB0bXBJbmRleCk7CisgICAgICAgICAgICAgICAg
ZGF0YUxvZygiICAgICIsIHRtcCwgIjogIiwgbV9tYXBbdG1wXSwgIlxuIik7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBkYXRhTG9nKCJJUjpcbiIpOworICAgICAgICAgICAgZGF0YUxvZyht
X2NvZGUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJs
b2NrIDogbV9jb2RlKSB7CisgICAgICAgICAgICBmb3IgKEluc3QmIGluc3QgOiAqYmxvY2spIHsK
KyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSgpKQorICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKCJBdDogIiwgaW5zdCwgIlxuIik7CisgICAgICAgICAgICAgICAgaW5zdC5mb3JFYWNoVG1w
RmFzdCgKKyAgICAgICAgICAgICAgICAgICAgWyZdIChUbXAmIHRtcCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHRtcC5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXAuYmFuaygpICE9IGJhbmsp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBSZWcgcmVnID0gbV9tYXBbdG1wXS5hc3Np
Z25lZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVnKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiRmFpbGVkIHRvIGFsbG9jYXRlIHJlZyBmb3I6ICIsIHRt
cCwgIlxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRtcCA9IFRtcChyZWcpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBDb2RlJiBtX2NvZGU7CisgICAgVmVj
dG9yPFJlZz4gbV9yZWdpc3RlcnM7CisgICAgUmVnaXN0ZXJTZXQgbV9yZWdpc3RlclNldDsKKyAg
ICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgc2l6ZV90PiBtX3N0YXJ0SW5kZXg7CisgICAgSW5kZXhN
YXA8VG1wOjpJbmRleGVkPGJhbms+LCBUbXBEYXRhPiBtX21hcDsKKyAgICBJbmRleE1hcDxCYXNp
Y0Jsb2NrKiwgUGhhc2VJbnNlcnRpb25TZXQ+IG1faW5zZXJ0aW9uU2V0czsKKyAgICBWZWN0b3I8
Q2xvYmJlcj4gbV9jbG9iYmVyczsgLy8gQWZ0ZXIgd2UgYWxsb2NhdGUgdGhpcywgd2UgaGFwcGls
eSBwb2ludCBwb2ludGVycyBpbnRvIGl0LgorICAgIFZlY3RvcjxUbXA+IG1fdG1wczsKKyAgICBE
ZXF1ZTxUbXA+IG1fYWN0aXZlOworICAgIFJlZ2lzdGVyU2V0IG1fYWN0aXZlUmVnczsKKyAgICBi
b29sIG1fZGlkU3BpbGwgeyBmYWxzZSB9OworfTsKKwordGVtcGxhdGU8QmFuayBiYW5rPgordm9p
ZCBydW5MaW5lYXJTY2FuKENvZGUmIGNvZGUpCit7CisgICAgaWYgKHZlcmJvc2UoKSkKKyAgICAg
ICAgZGF0YUxvZygiQWlyIGJlZm9yZSBsaW5lYXIgc2NhbiBmb3IgIiwgYmFuaywgIjpcbiIsIGNv
ZGUpOworICAgIExpbmVhclNjYW48YmFuaz4gbGluZWFyU2Nhbihjb2RlKTsKKyAgICBsaW5lYXJT
Y2FuLnJ1bigpOworICAgIGlmICh2ZXJib3NlKCkpCisgICAgICAgIGRhdGFMb2coIkFpciBhZnRl
ciBsaW5lYXIgc2NhbiBmb3IgIiwgYmFuaywgIjpcbiIsIGNvZGUpOworfQorCit9IC8vIGFub255
bW91cyBuYW1lc3BhY2UKKwordm9pZCBhbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2NhbihDb2Rl
JiBjb2RlKQoreworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAiYWxsb2NhdGVSZWdp
c3RlcnNCeUxpbmVhclNjYW4iKTsKKyAgICBwYWRJbnRlcmZlcmVuY2UoY29kZSk7CisgICAgcnVu
TGluZWFyU2NhbjxGUD4oY29kZSk7CisgICAgcnVuTGluZWFyU2NhbjxHUD4oY29kZSk7CisgICAg
Zml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMoY29kZSk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lz
dGVyc0J5TGluZWFyU2Nhbi5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
Q1BVLmgiCisjaW5jbHVkZSAiT3B0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKKy8vIFRoaXMgaW1wbGVtZW50
cyB0aGUgUG9sZXR0byBhbmQgU2Fya2FyIHJlZ2lzdGVyIGFsbG9jYXRvciBjYWxsZWQgImxpbmVh
ciBzY2FuIjoKKy8vIGh0dHA6Ly9kbC5hY20ub3JnL2NpdGF0aW9uLmNmbT9pZD0zMzAyNTAKKy8v
CisvLyBUaGlzIGlzIG5vdCBBaXIncyBwcmltYXJ5IHJlZ2lzdGVyIGFsbG9jYXRvci4gV2UgdXNl
IGl0IG9ubHkgd2hlbiBydW5uaW5nIGF0IG9wdExldmVsPDIuIFRoYXQncyBub3QKKy8vIHRoZSBk
ZWZhdWx0IGxldmVsLiBUaGlzIHJlZ2lzdGVyIGFsbG9jYXRvciBpcyBvcHRpbWl6ZWQgcHJpbWFy
aWx5IGZvciBydW5uaW5nIHF1aWNrbHkuIEl0J3MgZXhwZWN0ZWQKKy8vIHRoYXQgaW1wcm92ZW1l
bnRzIHRvIHRoaXMgcmVnaXN0ZXIgYWxsb2NhdG9yIHNob3VsZCBmb2N1cyBvbiBpbXByb3Zpbmcg
aXRzIGV4ZWN1dGlvbiB0aW1lIHdpdGhvdXQgbXVjaAorLy8gcmVnYXJkIGZvciB0aGUgcXVhbGl0
eSBvZiBnZW5lcmF0ZWQgY29kZS4gSWYgeW91IHdhbnQgZ29vZCBjb2RlLCB1c2UgZ3JhcGggY29s
b3JpbmcuCisvLworLy8gRm9yIEFpcidzIHByaW1hcnkgcmVnaXN0ZXIgYWxsb2NhdG9yLCBzZWUg
QWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuaHxjcHAuCit2b2lkIGFsbG9jYXRl
UmVnaXN0ZXJzQnlMaW5lYXJTY2FuKENvZGUmKTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcAkocmV2aXNpb24gMjE0
NjE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTYxLDcgKzE2MSw3IEBAIHZvaWQgYWxsb2NhdGVTdGFjayhD
b2RlJiBjb2RlKQogCiAgICAgLy8gTm93IHdlIGhhbmRsZSB0aGUgc3BpbGwgc2xvdHMuCiAgICAg
U3RhY2tTbG90TGl2ZW5lc3MgbGl2ZW5lc3MoY29kZSk7Ci0gICAgSW5kZXhNYXA8U3RhY2tTbG90
LCBIYXNoU2V0PFN0YWNrU2xvdCo+PiBpbnRlcmZlcmVuY2UoY29kZS5zdGFja1Nsb3RzKCkuc2l6
ZSgpKTsKKyAgICBJbmRleE1hcDxTdGFja1Nsb3QqLCBIYXNoU2V0PFN0YWNrU2xvdCo+PiBpbnRl
cmZlcmVuY2UoY29kZS5zdGFja1Nsb3RzKCkuc2l6ZSgpKTsKICAgICBWZWN0b3I8U3RhY2tTbG90
Kj4gc2xvdHM7CiAKICAgICAvLyBXZSB3aWxsIHBlcmZvcm0gc29tZSBzcGlsbCBjb2FsZXNjaW5n
LiBUbyBtYWtlIHRoYXQgZWZmZWN0aXZlLCB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gaWRlbnRpZnkK
QEAgLTMwOSw3ICszMDksNyBAQCB2b2lkIGFsbG9jYXRlU3RhY2soQ29kZSYgY29kZSkKICAgICAg
ICAgICAgIHJldHVybiBhLmZyZXF1ZW5jeSA+IGIuZnJlcXVlbmN5OwogICAgICAgICB9KTsKICAg
ICAKLSAgICBJbmRleE1hcDxTdGFja1Nsb3QsIFN0YWNrU2xvdCo+IHJlbWFwcGVkU3RhY2tTbG90
cyhjb2RlLnN0YWNrU2xvdHMoKS5zaXplKCkpOworICAgIEluZGV4TWFwPFN0YWNrU2xvdCosIFN0
YWNrU2xvdCo+IHJlbWFwcGVkU3RhY2tTbG90cyhjb2RlLnN0YWNrU2xvdHMoKS5zaXplKCkpOwog
ICAgIGF1dG8gcmVtYXAgPSBbJl0gKFN0YWNrU2xvdCogc2xvdCkgLT4gU3RhY2tTbG90KiB7CiAg
ICAgICAgIGlmICghc2xvdCkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkocmV2aXNpb24gMjE0NjE4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yODIsNiArMjgyLDM3IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBB
cmcKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCit2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQXJnOjpQaGFzZSBwaGFzZSkKK3sKKyAgICBzd2l0Y2gg
KHBoYXNlKSB7CisgICAgY2FzZSBBcmc6OkVhcmx5OgorICAgICAgICBvdXQucHJpbnQoIkVhcmx5
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFyZzo6TGF0ZToKKyAgICAgICAgb3V0LnBy
aW50KCJMYXRlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91
dCwgQXJnOjpUaW1pbmcgdGltaW5nKQoreworICAgIHN3aXRjaCAodGltaW5nKSB7CisgICAgY2Fz
ZSBBcmc6Ok9ubHlFYXJseToKKyAgICAgICAgb3V0LnByaW50KCJPbmx5RWFybHkiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgQXJnOjpPbmx5TGF0ZToKKyAgICAgICAgb3V0LnByaW50KCJP
bmx5TGF0ZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcmc6OkVhcmx5QW5kTGF0ZToK
KyAgICAgICAgb3V0LnByaW50KCJFYXJseUFuZExhdGUiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKIHZvaWQgcHJpbnRJ
bnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBcmc6OlJvbGUgcm9sZSkKIHsKICAgICBzd2l0Y2gg
KHJvbGUpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAkocmV2aXNp
b24gMjE0NjE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAkod29y
a2luZyBjb3B5KQpAQCAtOTIsNiArOTIsMTcgQEAgcHVibGljOgogICAgICAgICBDb2xkLAogICAg
ICAgICBXYXJtCiAgICAgfTsKKyAgICAKKyAgICBlbnVtIFBoYXNlIDogaW50OF90IHsKKyAgICAg
ICAgRWFybHksCisgICAgICAgIExhdGUKKyAgICB9OworICAgIAorICAgIGVudW0gVGltaW5nIDog
aW50OF90IHsKKyAgICAgICAgT25seUVhcmx5LAorICAgICAgICBPbmx5TGF0ZSwKKyAgICAgICAg
RWFybHlBbmRMYXRlCisgICAgfTsKIAogICAgIGVudW0gUm9sZSA6IGludDhfdCB7CiAgICAgICAg
IC8vIFVzZSBtZWFucyB0aGF0IHRoZSBJbnN0IHdpbGwgcmVhZCBmcm9tIHRoaXMgdmFsdWUgYmVm
b3JlIGRvaW5nIGFueXRoaW5nIGVsc2UuCkBAIC0yNTMsNyArMjY0LDgyIEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgICAgIHJldHVybiBpc0NvbGRVc2Uocm9sZSkgPyBDb2xkIDogV2FybTsKICAgICB9
Ci0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCBhY3RpdmVBdChSb2xlIHJvbGUsIFBoYXNlIHBoYXNl
KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChyb2xlKSB7CisgICAgICAgIGNhc2UgVXNlOgorICAg
ICAgICBjYXNlIENvbGRVc2U6CisgICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAgIGNhc2Ug
RWFybHlaRGVmOgorICAgICAgICBjYXNlIFVzZUFkZHI6CisgICAgICAgICAgICByZXR1cm4gcGhh
c2UgPT0gRWFybHk7CisgICAgICAgIGNhc2UgTGF0ZVVzZToKKyAgICAgICAgY2FzZSBMYXRlQ29s
ZFVzZToKKyAgICAgICAgY2FzZSBEZWY6CisgICAgICAgIGNhc2UgWkRlZjoKKyAgICAgICAgICAg
IHJldHVybiBwaGFzZSA9PSBMYXRlOworICAgICAgICBjYXNlIFVzZURlZjoKKyAgICAgICAgY2Fz
ZSBVc2VaRGVmOgorICAgICAgICBjYXNlIFNjcmF0Y2g6CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAg
CisgICAgc3RhdGljIGJvb2wgYWN0aXZlQXQoVGltaW5nIHRpbWluZywgUGhhc2UgcGhhc2UpCisg
ICAgeworICAgICAgICBzd2l0Y2ggKHRpbWluZykgeworICAgICAgICBjYXNlIE9ubHlFYXJseToK
KyAgICAgICAgICAgIHJldHVybiBwaGFzZSA9PSBFYXJseTsKKyAgICAgICAgY2FzZSBPbmx5TGF0
ZToKKyAgICAgICAgICAgIHJldHVybiBwaGFzZSA9PSBMYXRlOworICAgICAgICBjYXNlIEVhcmx5
QW5kTGF0ZToKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVGltaW5nIHRpbWlu
ZyhSb2xlIHJvbGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHJvbGUpIHsKKyAgICAgICAgY2Fz
ZSBVc2U6CisgICAgICAgIGNhc2UgQ29sZFVzZToKKyAgICAgICAgY2FzZSBFYXJseURlZjoKKyAg
ICAgICAgY2FzZSBFYXJseVpEZWY6CisgICAgICAgIGNhc2UgVXNlQWRkcjoKKyAgICAgICAgICAg
IHJldHVybiBPbmx5RWFybHk7CisgICAgICAgIGNhc2UgTGF0ZVVzZToKKyAgICAgICAgY2FzZSBM
YXRlQ29sZFVzZToKKyAgICAgICAgY2FzZSBEZWY6CisgICAgICAgIGNhc2UgWkRlZjoKKyAgICAg
ICAgICAgIHJldHVybiBPbmx5TGF0ZTsKKyAgICAgICAgY2FzZSBVc2VEZWY6CisgICAgICAgIGNh
c2UgVXNlWkRlZjoKKyAgICAgICAgY2FzZSBTY3JhdGNoOgorICAgICAgICAgICAgcmV0dXJuIEVh
cmx5QW5kTGF0ZTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICBzdGF0aWMgdm9pZCBm
b3JFYWNoUGhhc2UoVGltaW5nIHRpbWluZywgY29uc3QgRnVuYyYgZnVuYykKKyAgICB7CisgICAg
ICAgIGlmIChhY3RpdmVBdCh0aW1pbmcsIEVhcmx5KSkKKyAgICAgICAgICAgIGZ1bmMoRWFybHkp
OworICAgICAgICBpZiAoYWN0aXZlQXQodGltaW5nLCBMYXRlKSkKKyAgICAgICAgICAgIGZ1bmMo
TGF0ZSk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgc3Rh
dGljIHZvaWQgZm9yRWFjaFBoYXNlKFJvbGUgcm9sZSwgY29uc3QgRnVuYyYgZnVuYykKKyAgICB7
CisgICAgICAgIGlmIChhY3RpdmVBdChyb2xlLCBFYXJseSkpCisgICAgICAgICAgICBmdW5jKEVh
cmx5KTsKKyAgICAgICAgaWYgKGFjdGl2ZUF0KHJvbGUsIExhdGUpKQorICAgICAgICAgICAgZnVu
YyhMYXRlKTsKKyAgICB9CisgICAgCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBSb2xlIGlt
cGxpZXMgdGhhdCB0aGUgSW5zdCB3aWxsIFVzZSB0aGUgQXJnIGJlZm9yZSBkb2luZyBhbnl0aGlu
ZyBlbHNlLgogICAgIHN0YXRpYyBib29sIGlzRWFybHlVc2UoUm9sZSByb2xlKQogICAgIHsKQEAg
LTEzNTQsNiArMTQ0MCw4IEBAIG5hbWVzcGFjZSBXVEYgewogCiBKU19FWFBPUlRfUFJJVkFURSB2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpBaXI6OkFyZzo6S2luZCk7
CiBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6
OkIzOjpBaXI6OkFyZzo6VGVtcGVyYXR1cmUpOworSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6QWlyOjpBcmc6OlBoYXNlKTsKK0pTX0VY
UE9SVF9QUklWQVRFIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OkFp
cjo6QXJnOjpUaW1pbmcpOwogSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmludEludGVybmFsKFBy
aW50U3RyZWFtJiwgSlNDOjpCMzo6QWlyOjpBcmc6OlJvbGUpOwogSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6QWlyOjpBcmc6OlNpZ25l
ZG5lc3MpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxv
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2lj
QmxvY2suaAkocmV2aXNpb24gMjE0NjE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAgbmFtZXNw
YWNlIEFpciB7CiBjbGFzcyBCbG9ja0luc2VydGlvblNldDsKIGNsYXNzIENvZGU7CiBjbGFzcyBJ
bnNlcnRpb25TZXQ7CitjbGFzcyBQaGFzZUluc2VydGlvblNldDsKIAogY2xhc3MgQmFzaWNCbG9j
ayB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQmFzaWNCbG9jayk7CkBAIC0xNDAsNiArMTQx
LDcgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQmxvY2tJbnNlcnRpb25TZXQ7CiAgICAg
ZnJpZW5kIGNsYXNzIENvZGU7CiAgICAgZnJpZW5kIGNsYXNzIEluc2VydGlvblNldDsKKyAgICBm
cmllbmQgY2xhc3MgUGhhc2VJbnNlcnRpb25TZXQ7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWU+IGZy
aWVuZCBjbGFzcyBCMzo6R2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0OwogICAgIAogICAgIEJhc2lj
QmxvY2sodW5zaWduZWQgaW5kZXgsIGRvdWJsZSBmcmVxdWVuY3kpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja1dvcmtsaXN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja1dvcmtsaXN0LmgJKHJldmlzaW9uIDIx
NDYxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmxvY2tXb3JrbGlzdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7IG5hbWVzcGFjZSBBaXIgewogCi10eXBlZGVmIEdyYXBoTm9kZVdvcmtsaXN0PEJhc2lj
QmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrPj4gQmxvY2tXb3JrbGlzdDsKK3R5cGVkZWYgR3Jh
cGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2sqPj4gQmxvY2tX
b3JrbGlzdDsKIAogLy8gV2hlbiB5b3Ugc2F5IEJsb2NrV2l0aDxpbnQ+IHlvdSBzaG91bGQgcmVh
ZCBpdCBhcyAiYmxvY2sgd2l0aCBhbiBpbnQiLgogdGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcg
QmxvY2tXaXRoID0gR3JhcGhOb2RlV2l0aDxCYXNpY0Jsb2NrKiwgVD47CkBAIC00MSwxMSArNDEs
MTEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcgQmxvY2tXaXRoID0gRwogLy8gcGVybWl0
cyBmb3JjaWJseSBlbnF1ZXVlaW5nIHRoaW5ncyBldmVuIGlmIHRoZSBibG9jayBoYXMgYWxyZWFk
eSBiZWVuIHNlZW4uIEl0J3MgdXNlZnVsIGZvcgogLy8gdGhpbmdzIGxpa2UgYnVpbGRpbmcgYSBz
cGFubmluZyB0cmVlLCBpbiB3aGljaCBjYXNlIFQgKHRoZSBhdXhpbGlhcnkgcGF5bG9hZCkgd291
bGQgYmUgdGhlCiAvLyBzdWNjZXNzb3IgaW5kZXguCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2lu
ZyBFeHRlbmRlZEJsb2NrV29ya2xpc3QgPSBFeHRlbmRlZEdyYXBoTm9kZVdvcmtsaXN0PEJhc2lj
QmxvY2sqLCBULCBJbmRleFNldDxCYXNpY0Jsb2NrPj47Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1
c2luZyBFeHRlbmRlZEJsb2NrV29ya2xpc3QgPSBFeHRlbmRlZEdyYXBoTm9kZVdvcmtsaXN0PEJh
c2ljQmxvY2sqLCBULCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+OwogCiB0eXBlZGVmIEdyYXBoTm9k
ZVdpdGhPcmRlcjxCYXNpY0Jsb2NrKj4gQmxvY2tXaXRoT3JkZXI7CiAKLXR5cGVkZWYgUG9zdE9y
ZGVyR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2s+PiBQ
b3N0T3JkZXJCbG9ja1dvcmtsaXN0OwordHlwZWRlZiBQb3N0T3JkZXJHcmFwaE5vZGVXb3JrbGlz
dDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jayo+PiBQb3N0T3JkZXJCbG9ja1dvcmts
aXN0OwogCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0ZHLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJDRkcuaAkocmV2aXNpb24gMjE0NjE4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDRkcuaAkod29ya2luZyBjb3B5KQpAQCAtMzksOCArMzks
OCBAQCBjbGFzcyBDRkcgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgog
ICAgIHR5cGVkZWYgQmFzaWNCbG9jayogTm9kZTsKLSAgICB0eXBlZGVmIEluZGV4U2V0PEJhc2lj
QmxvY2s+IFNldDsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBNYXAgPSBJbmRleE1h
cDxCYXNpY0Jsb2NrLCBUPjsKKyAgICB0eXBlZGVmIEluZGV4U2V0PEJhc2ljQmxvY2sqPiBTZXQ7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcgTWFwID0gSW5kZXhNYXA8QmFzaWNCbG9j
ayosIFQ+OwogICAgIHR5cGVkZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCA0PiBMaXN0OwogCiAgICAg
Q0ZHKENvZGUmIGNvZGUpCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICBOb2RlIHJvb3Qo
KSB7IHJldHVybiBtX2NvZGVbMF07IH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAg
TWFwPFQ+IG5ld01hcCgpIHsgcmV0dXJuIEluZGV4TWFwPEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9j
aywgVD4obV9jb2RlLnNpemUoKSk7IH0KKyAgICBNYXA8VD4gbmV3TWFwKCkgeyByZXR1cm4gSW5k
ZXhNYXA8SlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrKiwgVD4obV9jb2RlLnNpemUoKSk7IH0KIAog
ICAgIFN1Y2Nlc3NvckNvbGxlY3Rpb248QmFzaWNCbG9jaywgQmFzaWNCbG9jazo6U3VjY2Vzc29y
TGlzdD4gc3VjY2Vzc29ycyhOb2RlIG5vZGUpIHsgcmV0dXJuIG5vZGUtPnN1Y2Nlc3NvckJsb2Nr
cygpOyB9CiAgICAgQmFzaWNCbG9jazo6UHJlZGVjZXNzb3JMaXN0JiBwcmVkZWNlc3NvcnMoTm9k
ZSBub2RlKSB7IHJldHVybiBub2RlLT5wcmVkZWNlc3NvcnMoKTsgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbGltaW5hdGVEZWFkQ29kZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbGltaW5hdGVEZWFkQ29kZS5jcHAJ
KHJldmlzaW9uIDIxNDYxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRWxp
bWluYXRlRGVhZENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIGJvb2wg
ZWxpbWluYXRlRGVhZENvZGUoQ29kZSYgY29kZSkKICAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUo
Y29kZSwgImVsaW1pbmF0ZURlYWRDb2RlIik7CiAKICAgICBIYXNoU2V0PFRtcD4gbGl2ZVRtcHM7
Ci0gICAgSW5kZXhTZXQ8U3RhY2tTbG90PiBsaXZlU3RhY2tTbG90czsKKyAgICBJbmRleFNldDxT
dGFja1Nsb3QqPiBsaXZlU3RhY2tTbG90czsKICAgICBib29sIGNoYW5nZWQ7CiAKICAgICBhdXRv
IGlzQXJnTGl2ZSA9IFsmXSAoY29uc3QgQXJnJiBhcmcpIC0+IGJvb2wgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhPYnZpb3VzU3BpbGxzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeE9idmlvdXNTcGlsbHMuY3Bw
CShyZXZpc2lvbiAyMTQ2MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZp
eE9idmlvdXNTcGlsbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NDcsNyArNTQ3LDcgQEAgcHJp
dmF0ZToKICAgICB9OwogCiAgICAgQ29kZSYgbV9jb2RlOwotICAgIEluZGV4TWFwPEJhc2ljQmxv
Y2ssIFN0YXRlPiBtX2F0SGVhZDsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgU3RhdGU+IG1f
YXRIZWFkOwogICAgIFN0YXRlIG1fc3RhdGU7CiAgICAgQmFzaWNCbG9jayogbV9ibG9jayB7IG51
bGxwdHIgfTsKICAgICB1bnNpZ25lZCBtX2luc3RJbmRleCB7IDAgfTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeFBhcnRpYWxSZWdp
c3RlclN0YWxscy5jcHAJKHJldmlzaW9uIDIxNDYxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTU1LDEwICsxNTUsMTAgQEAgdm9pZCBmaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMoQ29kZSYg
Y29kZQogCiAgICAgLy8gRm9yIGVhY2ggYmxvY2ssIHRoaXMgcHJvdmlkZXMgdGhlIGRpc3RhbmNl
IHRvIHRoZSBsYXN0IGluc3RydWN0aW9uIHNldHRpbmcgZWFjaCByZWdpc3RlcgogICAgIC8vIG9u
IGJsb2NrICplbnRyeSouCi0gICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgRlBEZWZEaXN0YW5jZT4g
bGFzdERlZkRpc3RhbmNlKGNvZGUuc2l6ZSgpKTsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwg
RlBEZWZEaXN0YW5jZT4gbGFzdERlZkRpc3RhbmNlKGNvZGUuc2l6ZSgpKTsKIAogICAgIC8vIEJs
b2NrcyB3aXRoIGRpcnR5IGRpc3RhbmNlIGF0IGhlYWQuCi0gICAgSW5kZXhTZXQ8QmFzaWNCbG9j
az4gZGlydHk7CisgICAgSW5kZXhTZXQ8QmFzaWNCbG9jayo+IGRpcnR5OwogCiAgICAgLy8gRmly
c3QsIHdlIGNvbXB1dGUgdGhlIGxvY2FsIGRpc3RhbmNlIGZvciBlYWNoIGJsb2NrIGFuZCBwdXNo
IGl0IHRvIHRoZSBzdWNjZXNzb3JzLgogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2Rl
KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeFNwaWxsc0FmdGVy
VGVybWluYWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckZpeFNw
aWxsc0FmdGVyVGVybWluYWxzLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
QWlyQmxvY2tJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAi
QWlySW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKKyNpbmNsdWRl
ICJBaXJUbXBJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1l
c3BhY2UgQWlyIHsKKwordm9pZCBmaXhTcGlsbHNBZnRlclRlcm1pbmFscyhDb2RlJiBjb2RlKQor
eworICAgIC8vIEJlY2F1c2UgdGhlcmUgbWF5IGJlIHRlcm1pbmFscyB0aGF0IHByb2R1Y2UgdmFs
dWVzLCBJUkMgbWF5CisgICAgLy8gd2FudCB0byBzcGlsbCB0aG9zZSB0ZXJtaW5hbHMuIEl0J2xs
IGhhcHBlbiB0byBzcGlsbCBpdCBhZnRlcgorICAgIC8vIHRoZSB0ZXJtaW5hbC4gSWYgd2UgbGVm
dCB0aGUgZ3JhcGggaW4gdGhpcyBzdGF0ZSwgaXQnZCBiZSBpbnZhbGlkCisgICAgLy8gYmVjYXVz
ZSBhIHRlcm1pbmFsIG11c3QgYmUgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24gaW4gYSBibG9jay4KKyAg
ICAvLyBXZSBmaXggdGhhdCBoZXJlLgorCisgICAgQmxvY2tJbnNlcnRpb25TZXQgYmxvY2tJbnNl
cnRpb25TZXQoY29kZSk7CisgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChjb2RlKTsKKwor
ICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIHVuc2lnbmVkIHRl
cm1pbmFsSW5kZXggPSBibG9jay0+c2l6ZSgpOworICAgICAgICBib29sIGZvdW5kVGVybWluYWwg
PSBmYWxzZTsKKyAgICAgICAgd2hpbGUgKHRlcm1pbmFsSW5kZXgtLSkgeworICAgICAgICAgICAg
aWYgKGJsb2NrLT5hdCh0ZXJtaW5hbEluZGV4KS5pc1Rlcm1pbmFsKCkpIHsKKyAgICAgICAgICAg
ICAgICBmb3VuZFRlcm1pbmFsID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfVU5VU0VEKGZvdW5kVGVybWluYWws
IGZvdW5kVGVybWluYWwpOworCisgICAgICAgIGlmICh0ZXJtaW5hbEluZGV4ID09IGJsb2NrLT5z
aXplKCkgLSAxKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8gVGhlcmUgbXVz
dCBiZSBpbnN0cnVjdGlvbnMgYWZ0ZXIgdGhlIHRlcm1pbmFsIGJlY2F1c2UgaXQncyBub3QgdGhl
IGxhc3QgaW5zdHJ1Y3Rpb24uCisgICAgICAgIEFTU0VSVCh0ZXJtaW5hbEluZGV4IDwgYmxvY2st
PnNpemUoKSAtIDEpOworICAgICAgICBWZWN0b3I8SW5zdCwgMT4gaW5zdHNUb01vdmU7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IHRlcm1pbmFsSW5kZXggKyAxOyBpIDwgYmxvY2stPnNpemUo
KTsgaSsrKQorICAgICAgICAgICAgaW5zdHNUb01vdmUuYXBwZW5kKGJsb2NrLT5hdChpKSk7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGluc3RzVG9Nb3ZlLnNpemUoKSk7CisKKyAgICAgICAgZm9y
IChGcmVxdWVudGVkQmxvY2smIGZyZXF1ZW50ZWRTdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29y
cygpKSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBmcmVxdWVudGVkU3Vj
Y2Vzc29yLmJsb2NrKCk7CisgICAgICAgICAgICAvLyBJZiBzdWNjZXNzb3IncyBvbmx5IHByZWRl
Y2Vzc29yIGlzIGJsb2NrLCB3ZSBjYW4gcGxhbnQgdGhlIHNwaWxsIGluc2lkZQorICAgICAgICAg
ICAgLy8gdGhlIHN1Y2Nlc3Nvci4gT3RoZXJ3aXNlLCB3ZSBtdXN0IHNwbGl0IHRoZSBjcml0aWNh
bCBlZGdlIGFuZCBjcmVhdGUKKyAgICAgICAgICAgIC8vIGEgbmV3IGJsb2NrIGZvciB0aGUgc3Bp
bGwuCisgICAgICAgICAgICBpZiAoc3VjY2Vzc29yLT5udW1QcmVkZWNlc3NvcnMoKSA9PSAxKSB7
CisgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydEluc3RzKDAsIGluc3RzVG9Nb3Zl
KTsKKyAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShzdWNjZXNzb3IpOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBuZXdCbG9jayA9
IGJsb2NrSW5zZXJ0aW9uU2V0Lmluc2VydEJlZm9yZShzdWNjZXNzb3IsIHN1Y2Nlc3Nvci0+ZnJl
cXVlbmN5KCkpOworICAgICAgICAgICAgICAgIGZvciAoY29uc3QgSW5zdCYgaW5zdCA6IGluc3Rz
VG9Nb3ZlKQorICAgICAgICAgICAgICAgICAgICBuZXdCbG9jay0+YXBwZW5kSW5zdChpbnN0KTsK
KyAgICAgICAgICAgICAgICBuZXdCbG9jay0+YXBwZW5kSW5zdChJbnN0KEp1bXAsIGluc3RzVG9N
b3ZlLmxhc3QoKS5vcmlnaW4pKTsKKyAgICAgICAgICAgICAgICBuZXdCbG9jay0+c3VjY2Vzc29y
cygpLmFwcGVuZChzdWNjZXNzb3IpOworICAgICAgICAgICAgICAgIGZyZXF1ZW50ZWRTdWNjZXNz
b3IuYmxvY2soKSA9IG5ld0Jsb2NrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgYmxvY2stPnJlc2l6ZSh0ZXJtaW5hbEluZGV4ICsgMSk7CisgICAgfQorCisgICAgaWYgKGJs
b2NrSW5zZXJ0aW9uU2V0LmV4ZWN1dGUoKSkKKyAgICAgICAgY29kZS5yZXNldFJlYWNoYWJpbGl0
eSgpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZp
eFNwaWxsc0FmdGVyVGVybWluYWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5oCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2Ns
YXNzIENvZGU7CisKKy8vIEJlY2F1c2UgdGhlcmUgbWF5IGJlIHRlcm1pbmFscyB0aGF0IHByb2R1
Y2UgdmFsdWVzLCB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yIG1heQorLy8gd2FudCB0byBzcGlsbCB0
aG9zZSB0ZXJtaW5hbHMuIEl0J2xsIGhhcHBlbiB0byBzcGlsbCBpdCBhZnRlcgorLy8gdGhlIHRl
cm1pbmFsLiBJZiB3ZSBsZWZ0IHRoZSBncmFwaCBpbiB0aGlzIHN0YXRlLCBpdCdkIGJlIGludmFs
aWQKKy8vIGJlY2F1c2UgYSB0ZXJtaW5hbCBtdXN0IGJlIHRoZSBsYXN0IGluc3RydWN0aW9uIGlu
IGEgYmxvY2suCisvLyBXZSBmaXggdGhhdCBoZXJlLgordm9pZCBmaXhTcGlsbHNBZnRlclRlcm1p
bmFscyhDb2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyR2VuZXJhdGUuY3BwCShyZXZpc2lvbiAyMTQ2MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjks
NyBAQAogI2lmIEVOQUJMRShCM19KSVQpCiAKICNpbmNsdWRlICJBaXJBbGxvY2F0ZVJlZ2lzdGVy
c0J5R3JhcGhDb2xvcmluZy5oIgorI2luY2x1ZGUgIkFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5l
YXJTY2FuLmgiCiAjaW5jbHVkZSAiQWlyQWxsb2NhdGVTdGFjay5oIgogI2luY2x1ZGUgIkFpckNv
ZGUuaCIKICNpbmNsdWRlICJBaXJFbGltaW5hdGVEZWFkQ29kZS5oIgpAQCAtNTcsNyArNTgsNyBA
QAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CiAKLXZv
aWQgcHJlcGFyZUZvckdlbmVyYXRpb24oQ29kZSYgY29kZSkKK3ZvaWQgcHJlcGFyZUZvckdlbmVy
YXRpb24oQ29kZSYgY29kZSwgdW5zaWduZWQgb3B0TGV2ZWwpCiB7CiAgICAgVGltaW5nU2NvcGUg
dGltaW5nU2NvcGUoIkFpcjo6cHJlcGFyZUZvckdlbmVyYXRpb24iKTsKICAgICAKQEAgLTg5LDE4
ICs5MCwyMiBAQCB2b2lkIHByZXBhcmVGb3JHZW5lcmF0aW9uKENvZGUmIGNvZGUpCiAgICAgLy8g
Rm9yIGRlYnVnZ2luZywgeW91IGNhbiB1c2Ugc3BpbGxFdmVyeXRoaW5nKCkgdG8gcHV0IGV2ZXJ5
dGhpbmcgdG8gdGhlIHN0YWNrIGJldHdlZW4gZWFjaCBJbnN0LgogICAgIGlmIChPcHRpb25zOjph
aXJTcGlsbHNFdmVyeXRoaW5nKCkpCiAgICAgICAgIHNwaWxsRXZlcnl0aGluZyhjb2RlKTsKLSAg
ICBlbHNlCisgICAgZWxzZSBpZiAob3B0TGV2ZWwgPj0gMikKICAgICAgICAgYWxsb2NhdGVSZWdp
c3RlcnNCeUdyYXBoQ29sb3JpbmcoY29kZSk7CisgICAgZWxzZQorICAgICAgICBhbGxvY2F0ZVJl
Z2lzdGVyc0J5TGluZWFyU2Nhbihjb2RlKTsKIAogICAgIGlmIChPcHRpb25zOjpsb2dBaXJSZWdp
c3RlclByZXNzdXJlKCkpIHsKICAgICAgICAgZGF0YUxvZygiUmVnaXN0ZXIgcHJlc3N1cmUgYWZ0
ZXIgcmVnaXN0ZXIgYWxsb2NhdGlvbjpcbiIpOwogICAgICAgICBsb2dSZWdpc3RlclByZXNzdXJl
KGNvZGUpOwogICAgIH0KLQotICAgIC8vIFRoaXMgcmVwbGFjZXMgdXNlcyBvZiBzcGlsbCBzbG90
cyB3aXRoIHJlZ2lzdGVycyBvciBjb25zdGFudHMgaWYgcG9zc2libGUuIEl0IGRvZXMgdGhpcyBi
eQotICAgIC8vIG1pbmltaXppbmcgdGhlIGFtb3VudCB0aGF0IHdlIHBlcnR1cmIgdGhlIGFscmVh
ZHktY2hvc2VuIHJlZ2lzdGVyIGFsbG9jYXRpb24uIEl0IG1heSBleHRlbmQKLSAgICAvLyB0aGUg
bGl2ZSByYW5nZXMgb2YgcmVnaXN0ZXJzIHRob3VnaC4KLSAgICBmaXhPYnZpb3VzU3BpbGxzKGNv
ZGUpOworICAgIAorICAgIGlmIChvcHRMZXZlbCA+PSAyKSB7CisgICAgICAgIC8vIFRoaXMgcmVw
bGFjZXMgdXNlcyBvZiBzcGlsbCBzbG90cyB3aXRoIHJlZ2lzdGVycyBvciBjb25zdGFudHMgaWYg
cG9zc2libGUuIEl0IGRvZXMgdGhpcyBieQorICAgICAgICAvLyBtaW5pbWl6aW5nIHRoZSBhbW91
bnQgdGhhdCB3ZSBwZXJ0dXJiIHRoZSBhbHJlYWR5LWNob3NlbiByZWdpc3RlciBhbGxvY2F0aW9u
LiBJdCBtYXkgZXh0ZW5kCisgICAgICAgIC8vIHRoZSBsaXZlIHJhbmdlcyBvZiByZWdpc3RlcnMg
dGhvdWdoLgorICAgICAgICBmaXhPYnZpb3VzU3BpbGxzKGNvZGUpOworICAgIH0KIAogICAgIGxv
d2VyQWZ0ZXJSZWdBbGxvYyhjb2RlKTsKIApAQCAtMTY1LDcgKzE3MCw3IEBAIHZvaWQgZ2VuZXJh
dGUoQ29kZSYgY29kZSwgQ0NhbGxIZWxwZXJzJiAKICAgICAgICAgaWYgKGJsb2NrKQogICAgICAg
ICAgICAgY29udGV4dC5ibG9ja0xhYmVsc1tibG9ja10gPSBCb3g8Q0NhbGxIZWxwZXJzOjpMYWJl
bD46OmNyZWF0ZSgpOwogICAgIH0KLSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBDQ2FsbEhlbHBl
cnM6Okp1bXBMaXN0PiBibG9ja0p1bXBzKGNvZGUuc2l6ZSgpKTsKKyAgICBJbmRleE1hcDxCYXNp
Y0Jsb2NrKiwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdD4gYmxvY2tKdW1wcyhjb2RlLnNpemUoKSk7
CiAKICAgICBhdXRvIGxpbmsgPSBbJl0gKENDYWxsSGVscGVyczo6SnVtcCBqdW1wLCBCYXNpY0Js
b2NrKiB0YXJnZXQpIHsKICAgICAgICAgaWYgKGNvbnRleHQuYmxvY2tMYWJlbHNbdGFyZ2V0XS0+
aXNTZXQoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJh
dGUuaAkocmV2aXNpb24gMjE0NjE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJHZW5lcmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNiArMjcsOCBAQAogCiAjaWYgRU5B
QkxFKEIzX0pJVCkKIAorI2luY2x1ZGUgIkIzQ29tbW9uLmgiCisKIG5hbWVzcGFjZSBKU0Mgewog
CiBjbGFzcyBDQ2FsbEhlbHBlcnM7CkBAIC0zNyw3ICszOSw3IEBAIGNsYXNzIENvZGU7CiAKIC8v
IFRoaXMgdGFrZXMgYW4gQWlyOjpDb2RlIHRoYXQgaGFzbid0IGhhZCBhbnkgc3RhY2sgYWxsb2Nh
dGlvbiBhbmQgb3B0aW9uYWxseSBoYXNuJ3QgaGFkIGFueQogLy8gcmVnaXN0ZXIgYWxsb2NhdGlv
biBhbmQgZG9lcyBib3RoIG9mIHRob3NlIHRoaW5ncy4KLUpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
cHJlcGFyZUZvckdlbmVyYXRpb24oQ29kZSYpOworSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmVw
YXJlRm9yR2VuZXJhdGlvbihDb2RlJiwgdW5zaWduZWQgb3B0TGV2ZWwgPSBkZWZhdWx0T3B0TGV2
ZWwoKSk7CiAKIC8vIFRoaXMgZ2VuZXJhdGVzIHRoZSBjb2RlIHVzaW5nIHRoZSBnaXZlbiBDQ2Fs
bEhlbHBlcnMgaW5zdGFuY2UuIE5vdGUgdGhhdCB0aGlzIG1heSBjYWxsIGNhbGxiYWNrcwogLy8g
aW4gdGhlIHN1cHBsaWVkIGNvZGUgYXMgaXQgaXMgZ2VuZXJhdGluZy4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGlvbkNvbnRleHQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRpb25Db250ZXh0LmgJKHJl
dmlzaW9uIDIxNDYxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJh
dGlvbkNvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAg
ICAgdHlwZWRlZiBTaGFyZWRUYXNrPExhdGVQYXRoRnVuY3Rpb24+IExhdGVQYXRoOwogCiAgICAg
VmVjdG9yPFJlZlB0cjxMYXRlUGF0aD4+IGxhdGVQYXRoczsKLSAgICBJbmRleE1hcDxCYXNpY0Js
b2NrLCBCb3g8Q0NhbGxIZWxwZXJzOjpMYWJlbD4+IGJsb2NrTGFiZWxzOworICAgIEluZGV4TWFw
PEJhc2ljQmxvY2sqLCBCb3g8Q0NhbGxIZWxwZXJzOjpMYWJlbD4+IGJsb2NrTGFiZWxzOwogICAg
IEJhc2ljQmxvY2sqIGN1cnJlbnRCbG9jayB7IG51bGxwdHIgfTsKICAgICB1bnNpZ25lZCBpbmRl
eEluQmxvY2sgeyBVSU5UX01BWCB9OwogICAgIENvZGUqIGNvZGUgeyBudWxscHRyIH07CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmgJKHJl
dmlzaW9uIDIxNDYxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0
aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgogICAgICAg
ICBhcHBlbmRJbnNlcnRpb24oSW5zZXJ0aW9uKGluZGV4LCBzdGQ6OmZvcndhcmQ8SW5zdD4oaW5z
dCkpKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSW5zdFZlY3Rvcj4KKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBJbnN0VmVjdG9yPgogICAgIHZvaWQgaW5zZXJ0SW5zdHMoc2l6ZV90
IGluZGV4LCBjb25zdCBJbnN0VmVjdG9yJiBpbnN0cykKICAgICB7CiAgICAgICAgIGZvciAoY29u
c3QgSW5zdCYgaW5zdCA6IGluc3RzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJJbnN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0Fpckluc3QuY3BwCShyZXZpc2lvbiAyMTQ2MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpckluc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw4IEBAIGJvb2wg
SW5zdDo6aGFzTGF0ZVVzZU9yRGVmKCkKIAogYm9vbCBJbnN0OjpuZWVkc1BhZGRpbmcoSW5zdCog
cHJldkluc3QsIEluc3QqIG5leHRJbnN0KQogewotICAgIHJldHVybiBwcmV2SW5zdCAmJiBuZXh0
SW5zdCAmJiBwcmV2SW5zdC0+aGFzTGF0ZVVzZU9yRGVmKCkgJiYgbmV4dEluc3QtPmhhc0Vhcmx5
RGVmKCk7CisgICAgYm9vbCByZXN1bHQgPSBwcmV2SW5zdCAmJiBuZXh0SW5zdCAmJiBwcmV2SW5z
dC0+aGFzTGF0ZVVzZU9yRGVmKCkgJiYgbmV4dEluc3QtPmhhc0Vhcmx5RGVmKCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAogYm9vbCBJbnN0OjpoYXNBcmdFZmZlY3RzKCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxv
Yy5jcHAJKHJldmlzaW9uIDIxNDYxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsMTEg
QEAgdm9pZCBsb3dlckFmdGVyUmVnQWxsb2MoQ29kZSYgY29kZSkKIAogICAgIGlmICh2ZXJib3Nl
KQogICAgICAgICBkYXRhTG9nKCJDb2RlIGJlZm9yZSBsb3dlckFmdGVyUmVnQWxsb2M6XG4iLCBj
b2RlKTsKKyAgICAKKyAgICAvLyBGSVhNRToKKyAgICAvLyAxKSBUaGlzIHNob3VsZCBiYWlsIGVh
cmx5IGlmIHRoZXJlIGFyZSBubyBTaHVmZmxlcyBvciBDb2xkQ0NhbGxzLiAoT09QUyEhIG5lZWQg
YnVnIHVybCkKKyAgICAvLyAyKSBXZSBzaG91bGQgbm90IGludHJvZHVjZSBTaHVmZmxlcyBmb3Ig
bm9ybWFsIGNhbGxzLiAoT09QUyEhIG5lZWQgYnVnIHVybCkKKyAgICAvLyAzKSBXZSBzaG91bGQg
ZW1pdCBDb2xkQ0NhbGwgb25seSBhdCBvcHRMZXZlbD09MS4gKE9PUFMhISBuZWVkIGJ1ZyB1cmwp
CiAKICAgICBIYXNoTWFwPEluc3QqLCBSZWdpc3RlclNldD4gdXNlZFJlZ2lzdGVyczsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlckVudHJ5U3dpdGNoLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyRW50cnlT
d2l0Y2guY3BwCShyZXZpc2lvbiAyMTQ2MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpckxvd2VyRW50cnlTd2l0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3
IEBAIHZvaWQgbG93ZXJFbnRyeVN3aXRjaChDb2RlJiBjb2RlKQogICAgIC8vIE5vdyBkdXBsaWNh
dGUgdGhlbS4KICAgICBWZWN0b3I8RnJlcXVlbnRlZEJsb2NrPiBlbnRyeXBvaW50czsKICAgICBl
bnRyeXBvaW50cy5hcHBlbmQoRnJlcXVlbnRlZEJsb2NrKGNvZGVbMF0sIGVudHJ5cG9pbnRGcmVx
dWVuY2llc1swXSkpOwotICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIEJhc2ljQmxvY2sqPiBtYXAo
Y29kZS5zaXplKCkpOworICAgIEluZGV4TWFwPEJhc2ljQmxvY2sqLCBCYXNpY0Jsb2NrKj4gbWFw
KGNvZGUuc2l6ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGVudHJ5cG9pbnRJbmRleCA9IDE7IGVu
dHJ5cG9pbnRJbmRleCA8IGNvZGUucHJvYygpLm51bUVudHJ5cG9pbnRzKCk7ICsrZW50cnlwb2lu
dEluZGV4KSB7CiAgICAgICAgIG1hcC5jbGVhcigpOwogICAgICAgICBmb3IgKEJhc2ljQmxvY2sq
IGJsb2NrIDogd29ya2xpc3Quc2VlbigpLnZhbHVlcyhjb2RlKSkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcwkocmV2aXNpb24gMjE0NjE4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwkod29y
a2luZyBjb3B5KQpAQCAtNjQ5LDcgKzY0OSw3IEBAIE1vdmUzMiBVOkc6MzIsIFpEOkc6MzIKIE1v
dmUzMiBVOkc6MzIsIFpEOkc6MzIsIFM6RzozMgogICAgIEFkZHIsIEFkZHIsIFRtcAogCi1TdG9y
ZVplcm8zMiBVOkc6MzIKK1N0b3JlWmVybzMyIEQ6RzozMgogICAgIEFkZHIKICAgICBJbmRleAog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBoYXNlSW5zZXJ0aW9uU2V0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBoYXNl
SW5zZXJ0aW9uU2V0LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpclBoYXNlSW5zZXJ0aW9uU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJQaGFzZUluc2VydGlvblNldC5oIgorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckJhc2ljQmxvY2suaCIKKyNpbmNsdWRl
IDx3dGYvQnViYmxlU29ydC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFt
ZXNwYWNlIEFpciB7CisKK3ZvaWQgUGhhc2VJbnNlcnRpb25TZXQ6OmV4ZWN1dGUoQmFzaWNCbG9j
ayogYmxvY2spCit7CisgICAgYnViYmxlU29ydChtX2luc2VydGlvbnMuYmVnaW4oKSwgbV9pbnNl
cnRpb25zLmVuZCgpKTsKKyAgICBleGVjdXRlSW5zZXJ0aW9ucyhibG9jay0+bV9pbnN0cywgbV9p
bnNlcnRpb25zKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJQaGFzZUluc2VydGlvblNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyUGhhc2VJbnNlcnRpb25TZXQuaAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBoYXNlSW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNs
dWRlICJBaXJJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlIDx3dGYvSW5zZXJ0aW9uLmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFt
ZXNwYWNlIEFpciB7CisKK2NsYXNzIEJhc2ljQmxvY2s7CitjbGFzcyBDb2RlOworCisvLyBQaGFz
ZWQgaW5zZXJ0aW9ucyBhbGxvdyB5b3UgdG8gYXNjcmliZSBwaGFzZXMgdG8gdGhlIHRoaW5ncyBp
bnNlcnRlZCBhdCBhbiBpbnN0cnVjdGlvbiBib3VuZGFyeS4KK2NsYXNzIFBoYXNlSW5zZXJ0aW9u
IDogcHVibGljIEluc2VydGlvbiB7CitwdWJsaWM6CisgICAgUGhhc2VJbnNlcnRpb24oKSB7IH0K
KyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFBoYXNlSW5zZXJ0aW9uKHNpemVf
dCBpbmRleCwgdW5zaWduZWQgcGhhc2UsIFQmJiBlbGVtZW50KQorICAgICAgICA6IEluc2VydGlv
bihpbmRleCwgc3RkOjpmb3J3YXJkPFQ+KGVsZW1lbnQpKQorICAgICAgICAsIG1fcGhhc2UocGhh
c2UpCisgICAgeworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBwaGFzZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcGhhc2U7IH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPChjb25zdCBQaGFzZUluc2Vy
dGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaW5kZXgoKSAhPSBvdGhlci5p
bmRleCgpKQorICAgICAgICAgICAgcmV0dXJuIGluZGV4KCkgPCBvdGhlci5pbmRleCgpOworICAg
ICAgICByZXR1cm4gbV9waGFzZSA8IG90aGVyLm1fcGhhc2U7CisgICAgfQorCitwcml2YXRlOgor
ICAgIHVuc2lnbmVkIG1fcGhhc2UgeyAwIH07Cit9OworCitjbGFzcyBQaGFzZUluc2VydGlvblNl
dCB7CitwdWJsaWM6CisgICAgUGhhc2VJbnNlcnRpb25TZXQoKQorICAgIHsKKyAgICB9CisgICAg
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2b2lkIGFwcGVuZEluc2VydGlvbihUJiYg
aW5zZXJ0aW9uKQorICAgIHsKKyAgICAgICAgbV9pbnNlcnRpb25zLmFwcGVuZChzdGQ6OmZvcndh
cmQ8VD4oaW5zZXJ0aW9uKSk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIElu
c3Q+CisgICAgdm9pZCBpbnNlcnRJbnN0KHNpemVfdCBpbmRleCwgdW5zaWduZWQgcGhhc2UsIElu
c3QmJiBpbnN0KQorICAgIHsKKyAgICAgICAgYXBwZW5kSW5zZXJ0aW9uKFBoYXNlSW5zZXJ0aW9u
KGluZGV4LCBwaGFzZSwgc3RkOjpmb3J3YXJkPEluc3Q+KGluc3QpKSk7CisgICAgfQorICAgIAor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICB2b2lkIGluc2VydChzaXpl
X3QgaW5kZXgsIHVuc2lnbmVkIHBoYXNlLCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAg
eworICAgICAgICBpbnNlcnRJbnN0KGluZGV4LCBwaGFzZSwgSW5zdChzdGQ6OmZvcndhcmQ8QXJn
dW1lbnRzPihhcmd1bWVudHMpLi4uKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZXhlY3V0ZShC
YXNpY0Jsb2NrKik7CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPFBoYXNlSW5zZXJ0aW9uLCA4PiBt
X2luc2VydGlvbnM7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpclJlZ0xpdmVuZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJSZWdMaXZlbmVzcy5oCShyZXZpc2lvbiAyMTQ2MTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ0xpdmVuZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMw
LDYgKzMwLDcgQEAKICNpbmNsdWRlICJBaXJCYXNpY0Jsb2NrLmgiCiAjaW5jbHVkZSAiQWlyQ29k
ZS5oIgogI2luY2x1ZGUgIkFpckluc3QuaCIKKyNpbmNsdWRlICJBaXJMaXZlbmVzcy5oIgogI2lu
Y2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBu
YW1lc3BhY2UgQWlyIHsKQEAgLTU0LDYgKzU1LDE5IEBAIHB1YmxpYzoKICAgICAgICAgewogICAg
ICAgICB9CiAgICAgICAgIAorICAgICAgICAvLyBJZiB5b3UgY29tcHV0ZWQgVG1wIGxpdmVuZXNz
IGZvciBzb21lIGJhbmssIHlvdSBjYW4gdXNlIHJlZyBsaXZlbmVzcyB0byBmaWxsIGluIHRoZSBi
bGFua3MuCisgICAgICAgIC8vIE5vdGUgdGhhdCB3aGF0IGhhcHBlbnMgdG8gdGhlIHJlZ2lzdGVy
cyBub3QgYmVsb25naW5nIHRvIHRoZSBiYW5rIGlzIGFyYml0cmFyeSAtIHRoZXkgbWF5IGdldAor
ICAgICAgICAvLyBzZXQgb3Igbm90LgorICAgICAgICB0ZW1wbGF0ZTxCYW5rIGJhbms+CisgICAg
ICAgIExvY2FsQ2FsYyhUbXBMaXZlbmVzczxiYW5rPiYgbGl2ZW5lc3MsIEJhc2ljQmxvY2sqIGJs
b2NrKQorICAgICAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgICAgICB7CisgICAgICAgICAg
ICBmb3IgKFRtcCB0bXAgOiBsaXZlbmVzcy5saXZlQXRUYWlsKGJsb2NrKSkgeworICAgICAgICAg
ICAgICAgIGlmICh0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgbV93b3Jrc2V0LnNl
dCh0bXAucmVnKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAogICAgICAg
ICBjb25zdCBSZWdpc3RlclNldCYgbGl2ZSgpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAg
IHJldHVybiBtX3dvcmtzZXQ7CkBAIC04NCw4ICs5OCw4IEBAIHB1YmxpYzoKICAgICB9CiAgICAg
CiBwcml2YXRlOgotICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIFJlZ2lzdGVyU2V0PiBtX2xpdmVB
dEhlYWQ7Ci0gICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgUmVnaXN0ZXJTZXQ+IG1fbGl2ZUF0VGFp
bDsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgUmVnaXN0ZXJTZXQ+IG1fbGl2ZUF0SGVhZDsK
KyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgUmVnaXN0ZXJTZXQ+IG1fbGl2ZUF0VGFpbDsKIH07
CiAKIH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAJKHJldmlzaW9u
IDIxNDYxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRo
aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQWly
QXJnSW5saW5lcy5oIgogI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJGaXhTcGls
bHNBZnRlclRlcm1pbmFscy5oIgogI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgogI2luY2x1
ZGUgIkFpckluc3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQWlyTGl2ZW5lc3MuaCIKQEAgLTQ2LDcg
KzQ3LDcgQEAgdm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYgY29kZSkKICAgICBwYWRJbnRlcmZl
cmVuY2UoY29kZSk7CiAKICAgICAvLyBXZSB3YW50IHRvIGtub3cgdGhlIHNldCBvZiByZWdpc3Rl
cnMgdXNlZCBhdCBldmVyeSBwb2ludCBpbiBldmVyeSBiYXNpYyBibG9jay4KLSAgICBJbmRleE1h
cDxCYXNpY0Jsb2NrLCBWZWN0b3I8UmVnaXN0ZXJTZXQ+PiB1c2VkUmVnaXN0ZXJzKGNvZGUuc2l6
ZSgpKTsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgVmVjdG9yPFJlZ2lzdGVyU2V0Pj4gdXNl
ZFJlZ2lzdGVycyhjb2RlLnNpemUoKSk7CiAgICAgR1BMaXZlbmVzcyBncExpdmVuZXNzKGNvZGUp
OwogICAgIEZQTGl2ZW5lc3MgZnBMaXZlbmVzcyhjb2RlKTsKICAgICBmb3IgKEJhc2ljQmxvY2sq
IGJsb2NrIDogY29kZSkgewpAQCAtMTczLDEwICsxNzQsMTMgQEAgdm9pZCBzcGlsbEV2ZXJ5dGhp
bmcoQ29kZSYgY29kZSkKICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2hvc2Vu
UmVnKTsKIAogICAgICAgICAgICAgICAgICAgICB0bXAgPSBUbXAoY2hvc2VuUmVnKTsKKyAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChyb2xlID09IEFyZzo6U2Ny
YXRjaCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAgICAg
ICAgICBPcGNvZGUgbW92ZSA9IGJhbmsgPT0gR1AgPyBNb3ZlIDogTW92ZURvdWJsZTsKIAotICAg
ICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0FueVVzZShyb2xlKSAmJiByb2xlICE9IEFyZzo6
U2NyYXRjaCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlVc2Uocm9sZSkpCiAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KGluc3RJbmRleCwgbW92
ZSwgaW5zdC5vcmlnaW4sIGFyZywgdG1wKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6
aXNBbnlEZWYocm9sZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5z
ZXJ0KGluc3RJbmRleCArIDEsIG1vdmUsIGluc3Qub3JpZ2luLCB0bXAsIGFyZyk7CkBAIC0xODQs
NiArMTg4LDggQEAgdm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYgY29kZSkKICAgICAgICAgfQog
ICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CiAgICAgfQorICAgIAorICAgIGZp
eFNwaWxsc0FmdGVyVGVybWluYWxzKGNvZGUpOwogfQogCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMzo6QWlyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuY3BwCShy
ZXZpc2lvbiAyMTQ2MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjgsOCArMjgsMTUgQEAKIAogI2lmIEVOQUJMRShCM19KSVQpCiAK
KyNpbmNsdWRlICJBaXJUbXBJbmxpbmVzLmgiCisKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeyBuYW1lc3BhY2UgQWlyIHsKIAordGVtcGxhdGU8PiBjb25zdCBjaGFyKiBjb25zdCBUbXA6
OkluZGV4ZWQ8R1A+OjpkdW1wUHJlZml4ID0gIiV0bXAiOwordGVtcGxhdGU8PiBjb25zdCBjaGFy
KiBjb25zdCBUbXA6OkluZGV4ZWQ8RlA+OjpkdW1wUHJlZml4ID0gIiVmdG1wIjsKK3RlbXBsYXRl
PD4gY29uc3QgY2hhciogY29uc3QgVG1wOjpBYnNvbHV0ZWx5SW5kZXhlZDxHUD46OmR1bXBQcmVm
aXggPSAiJWFicyI7Cit0ZW1wbGF0ZTw+IGNvbnN0IGNoYXIqIGNvbnN0IFRtcDo6QWJzb2x1dGVs
eUluZGV4ZWQ8RlA+OjpkdW1wUHJlZml4ID0gIiVmYWJzIjsKKwogdm9pZCBUbXA6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBpZiAoISp0aGlzKSB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmgJKHJldmlzaW9uIDIxNDYxOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzQsNiArNzQsMTQg
QEAgcHVibGljOgogICAgICAgICByZXN1bHQubV92YWx1ZSA9IGVuY29kZUZQVG1wKGluZGV4KTsK
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CisgICAgCisgICAgc3RhdGljIFRtcCB0bXBG
b3JJbmRleChCYW5rIGJhbmssIHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgaWYgKGJh
bmsgPT0gR1ApCisgICAgICAgICAgICByZXR1cm4gZ3BUbXBGb3JJbmRleChpbmRleCk7CisgICAg
ICAgIEFTU0VSVChiYW5rID09IEZQKTsKKyAgICAgICAgcmV0dXJuIGZwVG1wRm9ySW5kZXgoaW5k
ZXgpOworICAgIH0KIAogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVy
biAhIW1fdmFsdWU7IH0KICAgICAKQEAgLTE1NCw3ICsxNjIsMTYgQEAgcHVibGljOgogICAgICAg
ICAgICAgcmV0dXJuIGdwVG1wSW5kZXgoKTsKICAgICAgICAgcmV0dXJuIGZwVG1wSW5kZXgoKTsK
ICAgICB9Ci0KKyAgICAKKyAgICB0ZW1wbGF0ZTxCYW5rIGJhbms+IGNsYXNzIEluZGV4ZWQ7Cisg
ICAgdGVtcGxhdGU8QmFuayBiYW5rPiBjbGFzcyBBYnNvbHV0ZWx5SW5kZXhlZDsKKyAgICAKKyAg
ICB0ZW1wbGF0ZTxCYW5rIGJhbms+CisgICAgSW5kZXhlZDxiYW5rPiBpbmRleGVkKCkgY29uc3Q7
CisgICAgCisgICAgdGVtcGxhdGU8QmFuayBiYW5rPgorICAgIEFic29sdXRlbHlJbmRleGVkPGJh
bms+IGFic29sdXRlbHlJbmRleGVkKCkgY29uc3Q7CisgICAgCiAgICAgYm9vbCBpc0FsaXZlKCkg
Y29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiAhISp0aGlzOwpAQCAtMTk1LDYgKzIxMiw4IEBA
IHB1YmxpYzoKICAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KGluZGV4
KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CisgICAgCisgICAgc3RhdGljIFRtcCB0
bXBGb3JBYnNvbHV0ZUluZGV4KEJhbmssIHVuc2lnbmVkKTsKIAogcHJpdmF0ZToKICAgICBzdGF0
aWMgaW50IGVuY29kZUdQKHVuc2lnbmVkIGluZGV4KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJUbXBJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJUbXBJbmxpbmVzLmgJKHJldmlzaW9uIDIxNDYxOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC05Miw2ICs5Miw1OCBAQCBzdHJ1Y3QgQWJzb2x1dGVUbXBNYXBwZXI8RlA+IHsKICAgICB9CiB9
OwogCit0ZW1wbGF0ZTxCYW5rIHRoZUJhbms+CitjbGFzcyBUbXA6OkluZGV4ZWQgOiBwdWJsaWMg
VG1wIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZHVtcFByZWZpeDsK
KyAgICAKKyAgICBJbmRleGVkKFRtcCB0bXApCisgICAgICAgIDogVG1wKHRtcCkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiB0bXBJbmRleCh0aGVCYW5rKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTxCYW5rIHRoZUJh
bms+CitjbGFzcyBUbXA6OkFic29sdXRlbHlJbmRleGVkIDogcHVibGljIFRtcCB7CitwdWJsaWM6
CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGR1bXBQcmVmaXg7CisKKyAgICBBYnNvbHV0
ZWx5SW5kZXhlZChUbXAgdG1wKQorICAgICAgICA6IFRtcCh0bXApCisgICAgeworICAgIH0KKyAg
ICAKKyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gQWJz
b2x1dGVUbXBNYXBwZXI8dGhlQmFuaz46OmFic29sdXRlSW5kZXgoKnRoaXMpOworICAgIH0KK307
CisKK3RlbXBsYXRlPEJhbmsgdGhlQmFuaz4KK1RtcDo6SW5kZXhlZDx0aGVCYW5rPiBUbXA6Omlu
ZGV4ZWQoKSBjb25zdAoreworICAgIHJldHVybiBJbmRleGVkPHRoZUJhbms+KCp0aGlzKTsKK30K
KwordGVtcGxhdGU8QmFuayB0aGVCYW5rPgorVG1wOjpBYnNvbHV0ZWx5SW5kZXhlZDx0aGVCYW5r
PiBUbXA6OmFic29sdXRlbHlJbmRleGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gQWJzb2x1dGVs
eUluZGV4ZWQ8dGhlQmFuaz4oKnRoaXMpOworfQorCitUbXAgVG1wOjp0bXBGb3JBYnNvbHV0ZUlu
ZGV4KEJhbmsgYmFuaywgdW5zaWduZWQgaW5kZXgpCit7CisgICAgaWYgKGJhbmsgPT0gR1ApCisg
ICAgICAgIHJldHVybiBBYnNvbHV0ZVRtcE1hcHBlcjxHUD46OnRtcEZyb21BYnNvbHV0ZUluZGV4
KGluZGV4KTsKKyAgICBBU1NFUlQoYmFuayA9PSBGUCk7CisgICAgcmV0dXJuIEFic29sdXRlVG1w
TWFwcGVyPEZQPjo6dG1wRnJvbUFic29sdXRlSW5kZXgoaW5kZXgpOworfQorCiB9IH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMzo6QWlyCiAKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAkocmV2aXNpb24gMjE0NjE4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDIsOCArMTAyLDE2IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgLy8gQWxzbyBh
bGxvdyBhZGQvcmVtb3ZlL2NvbnRhaW5zIHRlcm1pbm9sb2d5LCB3aGljaCBtZWFucyB0aGUgc2Ft
ZSB0aGluZyBhcyBzZXQvY2xlYXIvZ2V0LgotICAgIHZvaWQgYWRkKFJlZyByZWcpIHsgc2V0KHJl
Zyk7IH0KLSAgICB2b2lkIHJlbW92ZShSZWcgcmVnKSB7IGNsZWFyKHJlZyk7IH0KKyAgICBib29s
IGFkZChSZWcgcmVnKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCEhcmVnKTsKKyAgICAgICAgcmV0
dXJuICFtX2JpdHMudGVzdEFuZFNldChyZWcuaW5kZXgoKSk7CisgICAgfQorICAgIGJvb2wgcmVt
b3ZlKFJlZyByZWcpCisgICAgeworICAgICAgICBBU1NFUlQoISFyZWcpOworICAgICAgICByZXR1
cm4gbV9iaXRzLnRlc3RBbmRDbGVhcihyZWcuaW5kZXgoKSk7CisgICAgfQogICAgIGJvb2wgY29u
dGFpbnMoUmVnIHJlZykgY29uc3QgeyByZXR1cm4gZ2V0KHJlZyk7IH0KICAgICAKICAgICB2b2lk
IG1lcmdlKGNvbnN0IFJlZ2lzdGVyU2V0JiBvdGhlcikgeyBtX2JpdHMubWVyZ2Uob3RoZXIubV9i
aXRzKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2
aXNpb24gMjE0NjE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMjUsNiArMjI1LDcgQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBv
cHRpb25TdHJpbmc7CiAgICAgdihib29sLCB1c2VGVExKSVQsIHRydWUsIE5vcm1hbCwgImFsbG93
cyB0aGUgRlRMIEpJVCB0byBiZSB1c2VkIGlmIHRydWUiKSBcCiAgICAgdihib29sLCB1c2VGVExU
QkFBLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIHZhbGlkYXRlRlRMT1NS
RXhpdExpdmVuZXNzLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdih1bnNpZ25lZCwg
ZGVmYXVsdEIzT3B0TGV2ZWwsIDIsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgYjNB
bHdheXNGYWlsc0JlZm9yZUNvbXBpbGUsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2
KGJvb2wsIGIzQWx3YXlzRmFpbHNCZWZvcmVMaW5rLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBc
CiAgICAgdihib29sLCBmdGxDcmFzaGVzLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSAvKiBmb29s
LXByb29mIHdheSBvZiBjaGVja2luZyB0aGF0IHlvdSBlbmRlZCB1cCBpbiB0aGUgRlRMLiA7LSkg
Ki9cCkBAIC0zOTgsNiArMzk5LDggQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7
CiAgICAgdihib29sLCBsb2dCM1BoYXNlVGltZXMsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwK
ICAgICB2KGRvdWJsZSwgcmFyZUJsb2NrUGVuYWx0eSwgMC4wMDEsIE5vcm1hbCwgbnVsbHB0cikg
XAogICAgIHYoYm9vbCwgYWlyU3BpbGxzRXZlcnl0aGluZywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0
cikgXAorICAgIHYoYm9vbCwgYWlyTGluZWFyU2NhblZlcmJvc2UsIGZhbHNlLCBOb3JtYWwsIG51
bGxwdHIpIFwKKyAgICB2KGJvb2wsIGFpckxpbmVhclNjYW5TcGlsbHNFdmVyeXRoaW5nLCBmYWxz
ZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCBhaXJGb3JjZUJyaWdnc0FsbG9jYXRv
ciwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgYWlyRm9yY2VJUkNBbGxv
Y2F0b3IsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGNvYWxlc2NlU3Bp
bGxTbG90cywgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgJKHJldmlzaW9uIDIxNDYxOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCisjaW5jbHVk
ZSAiQjNDb21tb24uaCIKICNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCiAjaW5jbHVkZSAiQ0Nh
bGxIZWxwZXJzLmgiCiAjaW5jbHVkZSAiVk0uaCIKQEAgLTQ4LDcgKzQ5LDcgQEAgc3RydWN0IENv
bXBpbGF0aW9uQ29udGV4dCB7CiAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGpzRW50cnlwb2ludFRv
V2FzbUVudHJ5cG9pbnRDYWxsOwogfTsKIAotRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPFdhc21J
bnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoVk0mLCBDb21waWxhdGlv
bkNvbnRleHQmLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBTaWduYXR1cmUqLCBWZWN0
b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIGNv
bnN0IFZlY3RvcjxTaWduYXR1cmVJbmRleD4mLCBNZW1vcnlNb2RlLCB1bnNpZ25lZCBvcHRMZXZl
bCA9IDEpOworRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPiwg
U3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoVk0mLCBDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCB1
aW50OF90Kiwgc2l6ZV90LCBjb25zdCBTaWduYXR1cmUqLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9X
YXNtQ2FsbD4mLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIGNvbnN0IFZlY3RvcjxTaWduYXR1
cmVJbmRleD4mLCBNZW1vcnlNb2RlLCB1bnNpZ25lZCBvcHRMZXZlbCA9IEIzOjpkZWZhdWx0T3B0
TGV2ZWwoKSk7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKSW5kZXg6IFNvdXJjZS9X
VEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lv
biAyMTQ2MTgpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDQ2IEBACisyMDE3LTAzLTMwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisK
KyAgICAgICAgQWlyIHNob3VsZCBzdXBwb3J0IGxpbmVhciBzY2FuIGZvciBvcHRMZXZlbDwyCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzAxNjEKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRo
aXMgY2hhbmdlIGludHJvZHVjZXMgYSBuZXcgbG93LWxhdGVuY3kgcmVnaXN0ZXIgYWxsb2NhdG9y
LiBJdCBjYW4gYWxsb2NhdGUgcmVnaXN0ZXJzIHZlcnkKKyAgICAgICAgcXVpY2tseSBieSBkb2lu
ZyBhIHJlbGF0aXZlbHkgcG9vciBqb2IuIEltcGxlbWVudGluZyB0aGlzIGFsZ29yaXRobSByZXF1
aXJlZCBiZWVmaW5nIHVwIHNvbWUgb2YKKyAgICAgICAgb3VyIGNvcmUgYWxnb3JpdGhtcy4KKwor
ICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9D
TWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvRGVxdWUuaDogTWFrZSBpdCBwb3NzaWJsZSB0
byBkbyBzb21lIGJhc2ljIHByaW9yaXR5IHF1ZXVlaW5nIHdpdGggdGhpcyBkYXRhIHN0cnVjdHVy
ZS4KKyAgICAgICAgKFdURjo6aW5saW5lQ2FwYWNpdHk+OjpyZW1vdmVBbGxNYXRjaGluZyk6Cisg
ICAgICAgIChXVEY6OmlubGluZUNhcGFjaXR5Pjo6YXBwZW5kQW5kQnViYmxlKToKKyAgICAgICAg
KFdURjo6aW5saW5lQ2FwYWNpdHk+Ojp0YWtlTGFzdCk6CisgICAgICAgICogd3RmL0luZGV4S2V5
VHlwZS5oOiBBZGRlZC4gVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byB1c2UgSW5kZXhNYXAgYW5k
IEluZGV4U2V0IHdpdGggdmFsdWUgb3IgcG9pbnRlciB0eXBlcy4gUHJldmlvdXNseSB0aGV5IGp1
c3Qgd29ya2VkIHdpdGggcG9pbnRlciB0eXBlcy4KKyAgICAgICAgKFdURjo6SW5kZXhLZXlUeXBl
OjppbmRleCk6CisgICAgICAgICogd3RmL0luZGV4TWFwLmg6IEFkb3B0IEluZGV4S2V5VHlwZS4K
KyAgICAgICAgKFdURjo6SW5kZXhNYXA6Om9wZXJhdG9yW10pOgorICAgICAgICAoV1RGOjpJbmRl
eE1hcDo6YXBwZW5kKToKKyAgICAgICAgKiB3dGYvSW5kZXhTZXQuaDogQWRvcHQgSW5kZXhLZXlU
eXBlLgorICAgICAgICAoV1RGOjpJbmRleFNldDo6YWRkKToKKyAgICAgICAgKFdURjo6SW5kZXhT
ZXQ6OmFkZEFsbCk6CisgICAgICAgIChXVEY6OkluZGV4U2V0OjpyZW1vdmUpOgorICAgICAgICAo
V1RGOjpJbmRleFNldDo6Y29udGFpbnMpOgorICAgICAgICAoV1RGOjpJbmRleFNldDo6SXRlcmFi
bGU6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAqIHd0Zi9SYW5nZS5oOiBBZGRlZC4g
VGhpcyB1c2VkIHRvIGJlIEIzOjpIZWFwUmFuZ2UuIFRoaXMgZ2VuZXJhbGl6ZXMgdGhhdCBkYXRh
IHN0cnVjdHVyZSB0byBhbnkga2luZCBvZiByYW5nZSBzdHVmZi4KKyAgICAgICAgKFdURjo6UmFu
Z2U6OlJhbmdlKToKKyAgICAgICAgKFdURjo6UmFuZ2U6OnRvcCk6CisgICAgICAgIChXVEY6OlJh
bmdlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdURjo6UmFuZ2U6Om9wZXJhdG9yIT0pOgorICAg
ICAgICAoV1RGOjpSYW5nZTo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgIChXVEY6OlJhbmdlOjpv
cGVyYXRvcnwpOgorICAgICAgICAoV1RGOjpSYW5nZTo6b3BlcmF0b3J8PSk6CisgICAgICAgIChX
VEY6OlJhbmdlOjpiZWdpbik6CisgICAgICAgIChXVEY6OlJhbmdlOjplbmQpOgorICAgICAgICAo
V1RGOjpSYW5nZTo6b3ZlcmxhcHMpOgorICAgICAgICAoV1RGOjpSYW5nZTo6ZHVtcCk6CisgICAg
ICAgICogd3RmL1JhbmdlU2V0Lmg6CisgICAgICAgIChXVEY6OlJhbmdlU2V0OjphZGQpOgorCiAy
MDE3LTAzLTI1ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogCiAgICAg
ICAgIFtKU0NdIE1vdmUgcGxhdGZvcm1UaHJlYWRTaWduYWwgdG8gV1RGCkluZGV4OiBTb3VyY2Uv
V1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIxNDYxOCkKKysrIFNv
dXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTIzLDYgKzIzLDggQEAKIC8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCiAJCTBGMEQ4
NUI0MTcyMzRDQzEwMDMzODIxMCAvKiBOb0xvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEQ4NUIzMTcyMzRDQjEwMDMzODIxMCAvKiBOb0xvY2su
aCAqLzsgfTsKIAkJMEYwRkNEREUxREQxNjdGOTAwQ0NBQjUzIC8qIExvY2tBbGdvcml0aG0uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEZDREREMURE
MTY3RjkwMENDQUI1MyAvKiBMb2NrQWxnb3JpdGhtLmggKi87IH07CisJCTBGMkFDNTYxMUU4OUY3
MEMwMDAxRUUzRiAvKiBSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYyQUM1NjAxRTg5RjcwQzAwMDFFRTNGIC8qIFJhbmdlLmggKi87IH07CisJ
CTBGMkFDNTYzMUU4QTAxNDkwMDAxRUUzRiAvKiBJbmRleEtleVR5cGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkFDNTYyMUU4QTAxNDkwMDAxRUUz
RiAvKiBJbmRleEtleVR5cGUuaCAqLzsgfTsKIAkJMEYyQjY2QTYxN0I2QjRGQjAwQTdBRTNGIC8q
IERlZmVycmFibGVSZWZDb3VudGVkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJCNjZBNDE3QjZCNEY3MDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNv
dW50ZWQuaCAqLzsgfTsKIAkJMEYyQjY2QTcxN0I2QjRGRDAwQTdBRTNGIC8qIEZsaXBCeXRlcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QTUx
N0I2QjRGNzAwQTdBRTNGIC8qIEZsaXBCeXRlcy5oICovOyB9OwogCQkwRjMwQkE5MDFFNzg3MDhF
MDAyQ0E4NDcgLyogR2xvYmFsVmVyc2lvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMwQkE4QTFFNzg3MDhFMDAyQ0E4NDcgLyogR2xvYmFsVmVy
c2lvbi5jcHAgKi87IH07CkBAIC00MDgsNiArNDEwLDggQEAKIC8qIEJlZ2luIFBCWEZpbGVSZWZl
cmVuY2Ugc2VjdGlvbiAqLwogCQkwRjBEODVCMzE3MjM0Q0IxMDAzMzgyMTAgLyogTm9Mb2NrLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE5vTG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjBGQ0RERDFERDE2N0Y5MDBDQ0FCNTMgLyogTG9ja0FsZ29yaXRobS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBMb2NrQWxnb3JpdGhtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGMkFDNTYwMUU4OUY3MEMwMDAxRUUzRiAvKiBSYW5nZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSYW5nZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjJBQzU2MjFFOEEwMTQ5MDAwMUVFM0YgLyogSW5kZXhLZXlUeXBlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZGV4S2V5VHlwZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjJCNjZBNDE3QjZCNEY3MDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNv
dW50ZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVmZXJyYWJsZVJlZkNvdW50ZWQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQjY2QTUxN0I2QjRGNzAwQTdBRTNGIC8qIEZsaXBCeXRl
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBGbGlwQnl0ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYzMDBCN0QxOEFCNDhCNDAwQTZENzJFIC8qIEhhc2hNZXRob2QuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSGFzaE1ldGhvZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTAxOCwx
MCArMTAyMiwxMSBAQAogCQkJCUE4QTQ3MkJBMTUxQTgyNUEwMDQxMjNGRiAvKiBIYXNoVHJhaXRz
LmggKi8sCiAJCQkJQThBNDcyQkIxNTFBODI1QTAwNDEyM0ZGIC8qIEhleE51bWJlci5oICovLAog
CQkJCUZFODkyNUFGMUQwMERBRUMwMDQ2OTA3RSAvKiBJbmRlbnRlci5oICovLAotCQkJCTlDNjdD
NTQyNTg5MzQ4RTI4NUI0OTY5OSAvKiBJbmRleGVkQ29udGFpbmVySXRlcmF0b3IuaCAqLywKKwkJ
CQkwRjJBQzU2MjFFOEEwMTQ5MDAwMUVFM0YgLyogSW5kZXhLZXlUeXBlLmggKi8sCiAJCQkJNUI0
MzM4M0E1RDBCNDYzQzk0MzNEOTMzIC8qIEluZGV4TWFwLmggKi8sCiAJCQkJMzEzN0UxRDdEQkQ4
NEFDMzhGQUU0RDM0IC8qIEluZGV4U2V0LmggKi8sCiAJCQkJMjY4NEQ0MzUxQzAwMEQ0MDAwODFE
NjYzIC8qIEluZGV4U3BhcnNlU2V0LmggKi8sCisJCQkJOUM2N0M1NDI1ODkzNDhFMjg1QjQ5Njk5
IC8qIEluZGV4ZWRDb250YWluZXJJdGVyYXRvci5oICovLAogCQkJCUE4QTQ3MkJDMTUxQTgyNUEw
MDQxMjNGRiAvKiBJbmxpbmVBU00uaCAqLywKIAkJCQlBNzBEQTA4MjE3OTlGMDREMDA1MjlBOUIg
LyogSW5zZXJ0aW9uLmggKi8sCiAJCQkJN0NERDdGRjcxODZEMjkxRTAwNzQzM0NEIC8qIEl0ZXJh
dG9yQWRhcHRvcnMuaCAqLywKQEAgLTExMDAsNiArMTEwNSw3IEBACiAJCQkJQThBNDcyRkIxNTFB
ODI1QjAwNDEyM0ZGIC8qIFJhbmRvbU51bWJlci5jcHAgKi8sCiAJCQkJQThBNDcyRkMxNTFBODI1
QjAwNDEyM0ZGIC8qIFJhbmRvbU51bWJlci5oICovLAogCQkJCUE4QTQ3MkZEMTUxQTgyNUIwMDQx
MjNGRiAvKiBSYW5kb21OdW1iZXJTZWVkLmggKi8sCisJCQkJMEYyQUM1NjAxRTg5RjcwQzAwMDFF
RTNGIC8qIFJhbmdlLmggKi8sCiAJCQkJMEY3MjVDQUIxQzUwNDYxNjAwQUQ5NDNBIC8qIFJhbmdl
U2V0LmggKi8sCiAJCQkJMEY4NzEwNTkxNjY0M0YxOTAwOTBCMEFEIC8qIFJhd1BvaW50ZXIuaCAq
LywKIAkJCQkwRkRFODdGNjFERkQwN0NDMDA2NEMzOTAgLyogUmVjdXJzaXZlTG9ja0FkYXB0ZXIu
aCAqLywKQEAgLTE0ODUsNiArMTQ5MSw3IEBACiAJCQkJQzkxNkI5NzVGMDJGNEY3RThCNEFCMTJE
IC8qIEluZGV4TWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlDOEIwRTFBMUUwMUE0ODZFQjk1RTBE
MTEgLyogSW5kZXhTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTI2ODRENDM2MUMwMDBENDAwMDgx
RDY2MyAvKiBJbmRleFNwYXJzZVNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQUM1NjMxRThB
MDE0OTAwMDFFRTNGIC8qIEluZGV4S2V5VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDcz
REMxNTFBODI1QjAwNDEyM0ZGIC8qIElubGluZUFTTS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcw
REEwODQxNzk5RjA0RDAwNTI5QTlCIC8qIEluc2VydGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MjYxNDdCMEExNUREQ0NEQzAwRERCOTA3IC8qIEludGVnZXJUb1N0cmluZ0NvbnZlcnNpb24uaCBp
biBIZWFkZXJzICovLApAQCAtMTU4Niw2ICsxNTkzLDcgQEAKIAkJCQk0MzBCNDc4OTFBQUFBQzFB
MDAxMjIzREEgLyogU3RyaW5nQ29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQzRTE1
MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nQ29uY2F0ZW5hdGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTdDRDRDMjcwMUUyQzgyQjkwMDkyOTQ3MCAvKiBTdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGMkFDNTYxMUU4OUY3MEMwMDAxRUUzRiAvKiBSYW5nZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0MkMxNTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ0V4dHJh
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0M0YxNTFBODI1QjAwNDEyM0ZGIC8qIFN0cmlu
Z0hhc2guaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDg3NDU0MTdBMEJEQUUwMEZBMDRDQiAvKiBT
dHJpbmdIYXNoRHVtcENvbnRleHQuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dURi93
dGYvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ01ha2VMaXN0
cy50eHQJKHJldmlzaW9uIDIxNDYxOCkKKysrIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNiArMTAwLDcgQEAgc2V0KFdURl9IRUFERVJTCiAgICAg
UkFNU2l6ZS5oCiAgICAgUmFuZG9tTnVtYmVyLmgKICAgICBSYW5kb21OdW1iZXJTZWVkLmgKKyAg
ICBSYW5nZS5oCiAgICAgUmFuZ2VTZXQuaAogICAgIFJhd1BvaW50ZXIuaAogICAgIFJlY3Vyc2l2
ZUxvY2tBZGFwdGVyLmgKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0RlcXVlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvRGVxdWUuaAkocmV2aXNpb24gMjE0NjE4KQorKysgU291cmNlL1dU
Ri93dGYvRGVxdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC04OSw2ICs4OSwxOSBAQCBwdWJsaWM6CiAgICAgdm9p
ZCByZW1vdmVMYXN0KCk7CiAgICAgdm9pZCByZW1vdmUoaXRlcmF0b3ImKTsKICAgICB2b2lkIHJl
bW92ZShjb25zdF9pdGVyYXRvciYpOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+
IHZvaWQgcmVtb3ZlQWxsTWF0Y2hpbmcoY29uc3QgRnVuYyYpOworICAgIAorICAgIC8vIFRoaXMg
aXMgYSBwcmlvcml0eSBlbnF1ZXVlLiBUaGUgY2FsbGJhY2sgaXMgZ2l2ZW4gYSB2YWx1ZSwgYW5k
IGlmIGl0IHJldHVybnMgdHJ1ZSwgdGhlbiB0aGlzCisgICAgLy8gd2lsbCBwdXQgdGhlIGFwcGVu
ZGVkIHZhbHVlIGJlZm9yZSB0aGF0IHZhbHVlLiBJdCB3aWxsIGtlZXAgYnViYmxpbmcgdW50aWwg
dGhlIGNhbGxiYWNrIHJldHVybnMKKyAgICAvLyBmYWxzZSBvciB0aGUgdmFsdWUgZW5kcyB1cCBh
dCB0aGUgaGVhZCBvZiB0aGUgcXVldWUuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgdHlwZW5h
bWUgRnVuYz4KKyAgICB2b2lkIGFwcGVuZEFuZEJ1YmJsZShVJiYsIGNvbnN0IEZ1bmMmKTsKKyAg
ICAKKyAgICAvLyBSZW1vdmUgYW5kIHJldHVybiB0aGUgbGFzdCBlbGVtZW50IGZvciB3aGljaCB0
aGUgY2FsbGJhY2sgcmV0dXJucyB0cnVlLiBSZXR1cm5zIGEgbnVsbCB2ZXJzaW9uIG9mCisgICAg
Ly8gVCBpZiBpdCB0aGUgY2FsbGJhY2sgYWx3YXlzIHJldHVybnMgZmFsc2UuCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuYz4KKyAgICBUIHRha2VMYXN0KGNvbnN0IEZ1bmMmKTsKIAogICAgIHZv
aWQgY2xlYXIoKTsKIApAQCAtNTI0LDYgKzUzNyw1NSBAQCBpbmxpbmUgdm9pZCBEZXF1ZTxULCBp
bmxpbmVDYXBhY2l0eT46OnJlCiAgICAgY2hlY2tWYWxpZGl0eSgpOwogfQogCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
PgoraW5saW5lIHZvaWQgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+OjpyZW1vdmVBbGxNYXRjaGlu
Zyhjb25zdCBGdW5jJiBmdW5jKQoreworICAgIHNpemVfdCBjb3VudCA9IHNpemUoKTsKKyAgICB3
aGlsZSAoY291bnQtLSkgeworICAgICAgICBUIHZhbHVlID0gdGFrZUZpcnN0KCk7CisgICAgICAg
IGlmICghZnVuYyh2YWx1ZSkpCisgICAgICAgICAgICBhcHBlbmQoV1RGTW92ZSh2YWx1ZSkpOwor
ICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5Pgor
dGVtcGxhdGU8dHlwZW5hbWUgVSwgdHlwZW5hbWUgRnVuYz4KK2lubGluZSB2b2lkIERlcXVlPFQs
IGlubGluZUNhcGFjaXR5Pjo6YXBwZW5kQW5kQnViYmxlKFUmJiB2YWx1ZSwgY29uc3QgRnVuYyYg
ZnVuYykKK3sKKyAgICBhcHBlbmQoV1RGTW92ZSh2YWx1ZSkpOworICAgIGl0ZXJhdG9yIGJlZ2lu
ID0gdGhpcy0+YmVnaW4oKTsKKyAgICBpdGVyYXRvciBpdGVyID0gZW5kKCk7CisgICAgLS1pdGVy
OworICAgIHdoaWxlIChpdGVyICE9IGJlZ2luKSB7CisgICAgICAgIGl0ZXJhdG9yIHByZXYgPSBp
dGVyOworICAgICAgICAtLXByZXY7CisgICAgICAgIGlmICghZnVuYygqcHJldikpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIHN0ZDo6c3dhcCgqcHJldiwgKml0ZXIpOworICAgICAgICBp
dGVyID0gcHJldjsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxp
bmVDYXBhY2l0eT4KK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CitpbmxpbmUgVCBEZXF1ZTxULCBp
bmxpbmVDYXBhY2l0eT46OnRha2VMYXN0KGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgdW5zaWdu
ZWQgY291bnQgPSAwOworICAgIHVuc2lnbmVkIHNpemUgPSB0aGlzLT5zaXplKCk7CisgICAgd2hp
bGUgKGNvdW50IDwgc2l6ZSkgeworICAgICAgICBUIGNhbmRpZGF0ZSA9IHRha2VMYXN0KCk7Cisg
ICAgICAgIGlmIChmdW5jKGNhbmRpZGF0ZSkpIHsKKyAgICAgICAgICAgIHdoaWxlIChjb3VudC0t
KQorICAgICAgICAgICAgICAgIGFwcGVuZCh0YWtlRmlyc3QoKSk7CisgICAgICAgICAgICByZXR1
cm4gY2FuZGlkYXRlOworICAgICAgICB9CisgICAgICAgIGNvdW50Kys7CisgICAgICAgIHByZXBl
bmQoV1RGTW92ZShjYW5kaWRhdGUpKTsKKyAgICB9CisgICAgcmV0dXJuIFQoKTsKK30KKwogI2lm
ZGVmIE5ERUJVRwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBp
bmxpbmUgdm9pZCBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT46OmNoZWNrVmFs
aWRpdHkoKSBjb25zdCB7IH0KIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBh
Y2l0eT4gaW5saW5lIHZvaWQgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+Ojpj
aGVja1ZhbGlkaXR5KGNvbnN0IERlcXVlSXRlcmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5PiYp
IGNvbnN0IHsgfQpJbmRleDogU291cmNlL1dURi93dGYvSW5kZXhLZXlUeXBlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvSW5kZXhLZXlUeXBlLmgJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL1dURi93dGYvSW5kZXhLZXlUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21h
IG9uY2UKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3Qg
SW5kZXhLZXlUeXBlIHsKKyAgICBzdGF0aWMgc2l6ZV90IGluZGV4KGNvbnN0IFQmIGtleSkgeyBy
ZXR1cm4ga2V5LmluZGV4KCk7IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3Qg
SW5kZXhLZXlUeXBlPFQqPiB7CisgICAgc3RhdGljIHNpemVfdCBpbmRleChUKiBrZXkpIHsgcmV0
dXJuIGtleS0+aW5kZXgoKTsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL0luZGV4TWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSW5k
ZXhNYXAuaAkocmV2aXNpb24gMjE0NjE4KQorKysgU291cmNlL1dURi93dGYvSW5kZXhNYXAuaAko
d29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1
ZGUgPHd0Zi9JbmRleEtleVR5cGUuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVz
cGFjZSBXVEYgewpAQCAtNzAsMTggKzcxLDI0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1f
dmVjdG9yW2luZGV4XTsKICAgICB9CiAgICAgCi0gICAgVmFsdWUmIG9wZXJhdG9yW10oS2V5KiBr
ZXkpCisgICAgVmFsdWUmIG9wZXJhdG9yW10oY29uc3QgS2V5JiBrZXkpCiAgICAgewotICAgICAg
ICByZXR1cm4gbV92ZWN0b3Jba2V5LT5pbmRleCgpXTsKKyAgICAgICAgcmV0dXJuIG1fdmVjdG9y
W0luZGV4S2V5VHlwZTxLZXk+OjppbmRleChrZXkpXTsKICAgICB9CiAgICAgCi0gICAgY29uc3Qg
VmFsdWUmIG9wZXJhdG9yW10oS2V5KiBrZXkpIGNvbnN0CisgICAgY29uc3QgVmFsdWUmIG9wZXJh
dG9yW10oY29uc3QgS2V5JiBrZXkpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV92ZWN0
b3Jba2V5LT5pbmRleCgpXTsKKyAgICAgICAgcmV0dXJuIG1fdmVjdG9yW0luZGV4S2V5VHlwZTxL
ZXk+OjppbmRleChrZXkpXTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhcHBlbmQoY29uc3QgS2V5
JiBrZXksIFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoSW5kZXhL
ZXlUeXBlPEtleT46OmluZGV4KGtleSkgPT0gbV92ZWN0b3Iuc2l6ZSgpKTsKKyAgICAgICAgbV92
ZWN0b3IuYXBwZW5kKHZhbHVlKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgVmVjdG9yPFZhbHVl
PiBtX3ZlY3RvcjsKKyAgICBWZWN0b3I8VmFsdWUsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBt
X3ZlY3RvcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL1dURi93dGYv
SW5kZXhTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9JbmRleFNldC5oCShyZXZp
c2lvbiAyMTQ2MTgpCisrKyBTb3VyY2UvV1RGL3d0Zi9JbmRleFNldC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSA8d3RmL0JpdFZlY3Rvci5oPgogI2luY2x1
ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSW5kZXhLZXlUeXBlLmg+CiAK
IG5hbWVzcGFjZSBXVEYgewogCkBAIC00MiwzMCArNDMsMzAgQEAgcHVibGljOgogICAgIHsKICAg
ICB9CiAKLSAgICBib29sIGFkZChUKiB2YWx1ZSkKKyAgICBib29sIGFkZChjb25zdCBUJiB2YWx1
ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiAhbV9zZXQuc2V0KHZhbHVlLT5pbmRleCgpKTsKKyAg
ICAgICAgcmV0dXJuICFtX3NldC5zZXQoSW5kZXhLZXlUeXBlPFQ+OjppbmRleCh2YWx1ZSkpOwog
ICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhYmxlPgogICAgIGJvb2wgYWRkQWxs
KGNvbnN0IEl0ZXJhYmxlJiBpdGVyYWJsZSkKICAgICB7CiAgICAgICAgIGJvb2wgcmVzdWx0ID0g
ZmFsc2U7Ci0gICAgICAgIGZvciAoVCogdmFsdWUgOiBpdGVyYWJsZSkKKyAgICAgICAgZm9yIChj
b25zdCBUJiB2YWx1ZSA6IGl0ZXJhYmxlKQogICAgICAgICAgICAgcmVzdWx0IHw9IGFkZCh2YWx1
ZSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgYm9vbCByZW1vdmUoVCog
dmFsdWUpCisgICAgYm9vbCByZW1vdmUoY29uc3QgVCYgdmFsdWUpCiAgICAgewotICAgICAgICBy
ZXR1cm4gbV9zZXQuY2xlYXIodmFsdWUtPmluZGV4KCkpOworICAgICAgICByZXR1cm4gbV9zZXQu
Y2xlYXIoSW5kZXhLZXlUeXBlPFQ+OjppbmRleCh2YWx1ZSkpOwogICAgIH0KIAotICAgIGJvb2wg
Y29udGFpbnMoVCogdmFsdWUpIGNvbnN0CisgICAgYm9vbCBjb250YWlucyhjb25zdCBUJiB2YWx1
ZSkgY29uc3QKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIHJldHVybiBtX3NldC5nZXQodmFsdWUtPmluZGV4KCkpOworICAgICAg
ICByZXR1cm4gbV9zZXQuZ2V0KEluZGV4S2V5VHlwZTxUPjo6aW5kZXgodmFsdWUpKTsKICAgICB9
CiAKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0CkBAIC0xMDAsNyArMTAxLDcgQEAgcHVibGljOgog
ICAgICAgICAgICAgewogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBUKiBvcGVyYXRvcioo
KQorICAgICAgICAgICAgVCBvcGVyYXRvciooKQogICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgIHJldHVybiBtX2NvbGxlY3Rpb24tPmF0KCptX2l0ZXIpOwogICAgICAgICAgICAgfQpJbmRl
eDogU291cmNlL1dURi93dGYvUmFuZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9S
YW5nZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL1JhbmdlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPGxpbWl0cy5oPgor
I2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+
CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBOb3RlIHRoYXQgdGhlICdiZWdpbicgaXMgaW5jbHVz
aXZlLCB3aGlsZSB0aGUgJ2VuZCcgaXMgZXhjbHVzaXZlLiBUaGVzZSB0d28gcmFuZ2VzIGFyZSBu
b24tCisvLyBvdmVybGFwcGluZzoKKy8vCisvLyAgICAgcmFuZ2VBID0gMC4uLjgKKy8vICAgICBy
YW5nZUIgPSA4Li4uMTYKKwordGVtcGxhdGU8dHlwZW5hbWUgUGFzc2VkVHlwZT4KK2NsYXNzIFJh
bmdlIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFBhc3NlZFR5cGUgVHlwZTsKKyAgICAKKyAgICBS
YW5nZSgpCisgICAgICAgIDogbV9iZWdpbigwKQorICAgICAgICAsIG1fZW5kKDApCisgICAgewor
ICAgIH0KKworICAgIGV4cGxpY2l0IFJhbmdlKFR5cGUgdmFsdWUpCisgICAgICAgIDogbV9iZWdp
bih2YWx1ZSkKKyAgICAgICAgLCBtX2VuZCh2YWx1ZSArIDEpCisgICAgeworICAgICAgICBBU1NF
UlQobV9lbmQgPj0gbV9iZWdpbik7CisgICAgfQorCisgICAgUmFuZ2UoVHlwZSBiZWdpbiwgVHlw
ZSBlbmQpCisgICAgICAgIDogbV9iZWdpbihiZWdpbikKKyAgICAgICAgLCBtX2VuZChlbmQpCisg
ICAgeworICAgICAgICBBU1NFUlQobV9lbmQgPj0gbV9iZWdpbik7CisgICAgICAgIGlmIChtX2Jl
Z2luID09IG1fZW5kKSB7CisgICAgICAgICAgICAvLyBDYW5vbmljYWxpemUgZW1wdHkgcmFuZ2Vz
LgorICAgICAgICAgICAgbV9iZWdpbiA9IDA7CisgICAgICAgICAgICBtX2VuZCA9IDA7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgUmFuZ2UgdG9wKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBSYW5nZShzdGQ6Om51bWVyaWNfbGltaXRzPFR5cGU+OjptaW4oKSwgc3RkOjpudW1lcmlj
X2xpbWl0czxUeXBlPjo6bWF4KCkpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBSYW5nZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9iZWdpbiA9PSBv
dGhlci5tX2JlZ2luCisgICAgICAgICAgICAmJiBtX2VuZCA9PSBvdGhlci5tX2VuZDsKKyAgICB9
CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgUmFuZ2UmIG90aGVyKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKyAgICAKKyAgICBleHBs
aWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9iZWdpbiAhPSBtX2VuZDsgfQor
CisgICAgUmFuZ2Ugb3BlcmF0b3J8KGNvbnN0IFJhbmdlJiBvdGhlcikgY29uc3QKKyAgICB7Cisg
ICAgICAgIGlmICghKnRoaXMpCisgICAgICAgICAgICByZXR1cm4gb3RoZXI7CisgICAgICAgIGlm
ICghb3RoZXIpCisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIHJldHVybiBSYW5n
ZSgKKyAgICAgICAgICAgIHN0ZDo6bWluKG1fYmVnaW4sIG90aGVyLm1fYmVnaW4pLAorICAgICAg
ICAgICAgc3RkOjptYXgobV9lbmQsIG90aGVyLm1fZW5kKSk7CisgICAgfQorICAgIAorICAgIFJh
bmdlJiBvcGVyYXRvcnw9KGNvbnN0IFJhbmdlJiBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVy
biAqdGhpcyA9ICp0aGlzIHwgb3RoZXI7CisgICAgfQorICAgIAorICAgIFR5cGUgYmVnaW4oKSBj
b25zdCB7IHJldHVybiBtX2JlZ2luOyB9CisgICAgVHlwZSBlbmQoKSBjb25zdCB7IHJldHVybiBt
X2VuZDsgfQorCisgICAgYm9vbCBvdmVybGFwcyhjb25zdCBSYW5nZSYgb3RoZXIpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gV1RGOjpyYW5nZXNPdmVybGFwKG1fYmVnaW4sIG1fZW5kLCBv
dGhlci5tX2JlZ2luLCBvdGhlci5tX2VuZCk7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoKnRoaXMgPT0gUmFuZ2UoKSkg
eworICAgICAgICAgICAgb3V0LnByaW50KCJCb3R0b20iKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICBpZiAoKnRoaXMgPT0gdG9wKCkpIHsKKyAgICAgICAgICAgIG91
dC5wcmludCgiVG9wIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
aWYgKG1fYmVnaW4gPT0gbV9lbmQgKyAxKSB7CisgICAgICAgICAgICBvdXQucHJpbnQobV9iZWdp
bik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgb3V0LnByaW50KG1f
YmVnaW4sICIuLi4iLCBtX2VuZCk7CisgICAgfQorCitwcml2YXRlOgorICAgIFR5cGUgbV9iZWdp
bjsKKyAgICBUeXBlIG1fZW5kOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdU
Rjo6UmFuZ2U7CisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1JhbmdlU2V0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvUmFuZ2VTZXQuaAkocmV2aXNpb24gMjE0NjE4KQorKysgU291cmNl
L1dURi93dGYvUmFuZ2VTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsNiArNzcsMTAgQEAgcHVi
bGljOgogICAgICAgICBtX2lzQ29tcGFjdCA9IGZhbHNlOwogCiAgICAgICAgIC8vIFdlIGFwcGVu
ZCB3aXRob3V0IGNvbXBhY3Rpbmcgb25seSBpZiBkb2luZyBzbyBpcyBndWFyYW50ZWVkIG5vdCB0
byByZXNpemUgdGhlIHZlY3Rvci4KKyAgICAgICAgLy8gRklYTUU6IFRoaXMgaGV1cmlzdGljIGlz
IGFsbW9zdCBjZXJ0YWlubHkgd3JvbmcsIGJlY2F1c2Ugd2UgZG9uJ3QgY29udHJvbCB0aGUgY2Fw
YWNpdHkuIEkKKyAgICAgICAgLy8gdGhpbmsgdGhhdCB0aGlzIG1lYW5zIHRoYXQgd2Ugd2lsbCBz
b21ldGltZXMgYmUgcmFnZS1jb21wYWN0aW5nIHdoZW4gd2UgYXJlIGp1c3Qgc2h5IG9mIHRoZQor
ICAgICAgICAvLyBjYXBhY2l0eS4KKyAgICAgICAgLy8gT09QUzogbmVlZCBidWcgdXJsCiAgICAg
ICAgIGlmIChtX3Jhbmdlcy5zaXplKCkgKyAxIDwgbV9yYW5nZXMuY2FwYWNpdHkoKSkgewogICAg
ICAgICAgICAgbV9yYW5nZXMuYXBwZW5kKHJhbmdlKTsKICAgICAgICAgICAgIHJldHVybjsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305896</attachid>
            <date>2017-03-30 13:50:15 -0700</date>
            <delta_ts>2017-03-30 15:37:48 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>135792</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE0NjE4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0NCBA
QAorMjAxNy0wMy0zMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEFpciBzaG91bGQgc3VwcG9ydCBsaW5lYXIgc2NhbiBmb3Igb3B0TGV2ZWw8MgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwMTYxCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGNoYW5n
ZXMgdGhlIGRlZmF1bHQgb3B0IGxldmVsIG9mIEIzIHRvIDIuIEl0IG1ha2VzIHRoZSBvdGhlciBv
cHQgbGV2ZWxzIHVzZWZ1bCBieSBhZGRpbmcgYQorICAgICAgICBuZXcgcmVnaXN0ZXIgYWxsb2Nh
dG9yLiBUaGlzIG5ldyBsaW5lYXIgc2NhbiBhbGxvY2F0b3Igd2lsbCBwcm9kdWNlIHNpZ25pZmlj
YW50bHkgd29yc2UgY29kZS4KKyAgICAgICAgQnV0IGl0IHdpbGwgcHJvZHVjZSB0aGF0IGNvZGUg
YSBsb3QgZmFzdGVyIHRoYW4gSVJDIG9yIEJyaWdncy4KKyAgICAgICAgCisgICAgICAgIFRoZSBv
cHQgbGV2ZWxzIGFyZToKKyAgICAgICAgICAgIDA6IG5vIG9wdGltaXphdGlvbnMsIGxpbmVhciBz
Y2FuCisgICAgICAgICAgICAxOiBzb21lIG9wdGltaXphdGlvbnMsIGxpbmVhciBzY2FuCisgICAg
ICAgICAgICAyOiBmdWxsIG9wdGltaXphdGlvbnMsIGdyYXBoIGNvbG9yaW5nIChJUkMgb3IgQnJp
Z2dzIGJhc2VkIG9uIENQVSkKKyAgICAgICAgCisgICAgICAgIFdoYXQgd2UgdXNlZCB0byBjYWxs
IG9wdExldmVsPTEgaXMgbm90IGNhbGxlZCBvcHRMZXZlbD0yLCBvciBiZXR0ZXIgeWV0LAorICAg
ICAgICBvcHRMZXZlbD1CMzo6ZGVmYXVsdE9wdExldmVsKCkuIFdlIG5vIGxvbmdlciBoYXZlIGFu
eXRoaW5nIGxpa2UgdGhlIG9sZCBvcHRMZXZlbD0wICh3aGljaCBkaWQgbm8KKyAgICAgICAgb3B0
aW1pemF0aW9ucyBidXQgcmFuIGdyYXBoIGNvbG9yaW5nKS4KKyAgICAgICAgCisgICAgICAgIGFs
bG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuKCkgZmFpdGhmdWxseSBpbXBsZW1lbnRzIE1hc3Np
bWlsaWFubyBQb2xldHRvIGFuZCBWaXZlayBTYXJrYXIncworICAgICAgICBmYW1vdXMgYWxnb3Jp
dGhtLiBJdCB1c2VzIHRoZSB2YXJpYW50IHRoYXQgaGFuZGxlcyBjbG9iYmVyZWQgcmVnaXN0ZXJz
IGJ5IGF2b2lkaW5nIGFzc2lnbmluZworICAgICAgICByYW5nZXMgdG8gdGhvc2UgcmVnaXN0ZXJz
IGlmIHRoZSByYW5nZSBvdmVybGFwcyBhIGNsb2JiZXIuIEl0J3MgZW5naW5lZXJlZCB0byBhbGxv
Y2F0ZSByZWdpc3RlcnMKKyAgICAgICAgdmVyeSBxdWlja2x5IGFuZCBnZW5lcmF0ZSBpbmVmZmlj
aWVudCBjb2RlIHdpdGhvdXQgZmFsbGluZyBvZmYgYSBjbGlmZi4KKyAgICAgICAgCisgICAgICAg
IFRoZSBuZXcgb3B0TGV2ZWw9MSBzcGVlZHMgdXAgQjMgYnkgYSBmYWN0b3Igb2YgMiwgYW5kIHJl
c3VsdHMgaW4gYSA4MCUgdGhyb3VnaHB1dCByZWdyZXNzaW9uLgorCisgICAgICAgICogQ01ha2VM
aXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBiMy9CM0Jhc2ljQmxvY2tVdGlscy5oOgorICAgICAgICAoSlNDOjpC
Mzo6YmxvY2tzSW5QcmVPcmRlcik6CisgICAgICAgIChKU0M6OkIzOjpibG9ja3NJblBvc3RPcmRl
cik6CisgICAgICAgICogYjMvQjNCbG9ja1dvcmtsaXN0Lmg6CisgICAgICAgICogYjMvQjNDRkcu
aDoKKyAgICAgICAgKEpTQzo6QjM6OkNGRzo6bmV3TWFwKToKKyAgICAgICAgKiBiMy9CM0NvbW1v
bi5oOgorICAgICAgICAoSlNDOjpCMzo6ZGVmYXVsdE9wdExldmVsKToKKyAgICAgICAgKiBiMy9C
M0NvbXBpbGUuaDoKKyAgICAgICAgKiBiMy9CM0R1cGxpY2F0ZVRhaWxzLmNwcDoKKyAgICAgICAg
KiBiMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcDoKKyAgICAgICAgKiBiMy9C
M0ZpeFNTQS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpkZW1vdGVWYWx1ZXMpOgorICAgICAgICAo
SlNDOjpCMzo6Zml4U1NBKToKKyAgICAgICAgKiBiMy9CM0ZpeFNTQS5oOgorICAgICAgICAqIGIz
L0IzR2VuZXJhdGUuY3BwOgorICAgICAgICAoSlNDOjpCMzo6cHJlcGFyZUZvckdlbmVyYXRpb24p
OgorICAgICAgICAoSlNDOjpCMzo6Z2VuZXJhdGVUb0Fpcik6CisgICAgICAgICogYjMvQjNHZW5l
cmF0ZS5oOgorICAgICAgICAqIGIzL0IzSGVhcFJhbmdlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBiMy9CM0hlYXBSYW5nZS5oOgorICAgICAgICAoSlNDOjpCMzo6SGVhcFJhbmdlOjpIZWFwUmFu
Z2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6SGVhcFJhbmdlOjp0b3ApOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpCMzo6SGVhcFJhbmdlOjpvcGVyYXRvcj09KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6QjM6OkhlYXBSYW5nZTo6b3BlcmF0b3IhPSk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkIzOjpIZWFwUmFuZ2U6Om9wZXJhdG9yfCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkIzOjpIZWFwUmFuZ2U6Om9wZXJhdG9yIGJvb2wpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpC
Mzo6SGVhcFJhbmdlOjpiZWdpbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpIZWFwUmFu
Z2U6OmVuZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpIZWFwUmFuZ2U6Om92ZXJsYXBz
KTogRGVsZXRlZC4KKyAgICAgICAgKiBiMy9CM0xvd2VyVG9BaXIuY3BwOgorICAgICAgICAqIGIz
L0IzTW92ZUNvbnN0YW50cy5jcHA6CisgICAgICAgICogYjMvQjNQaGlDaGlsZHJlbi5oOgorICAg
ICAgICAqIGIzL0IzUHJvY2VkdXJlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6
ZHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OmRlbGV0ZU9ycGhhbnMpOgorICAg
ICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpzZXRCbG9ja09yZGVySW1wbCk6CisgICAgICAgICog
YjMvQjNSZWR1Y2VEb3VibGVUb0Zsb2F0LmNwcDoKKyAgICAgICAgKiBiMy9CM1JlZHVjZVN0cmVu
Z3RoLmNwcDoKKyAgICAgICAgKiBiMy9CM1NTQUNhbGN1bGF0b3IuaDoKKyAgICAgICAgKiBiMy9C
M1VzZUNvdW50cy5oOgorICAgICAgICAqIGIzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3Jh
cGhDb2xvcmluZy5jcHA6CisgICAgICAgICogYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlM
aW5lYXJTY2FuLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OmFsbG9jYXRlUmVn
aXN0ZXJzQnlMaW5lYXJTY2FuKToKKyAgICAgICAgKiBiMy9haXIvQWlyQWxsb2NhdGVSZWdpc3Rl
cnNCeUxpbmVhclNjYW4uaDogQWRkZWQuCisgICAgICAgICogYjMvYWlyL0FpckFsbG9jYXRlU3Rh
Y2suY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjphbGxvY2F0ZVN0YWNrKToKKyAgICAgICAg
KiBiMy9haXIvQWlyQXJnLmNwcDoKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAg
ICAgICogYjMvYWlyL0FpckFyZy5oOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFjdGl2
ZUF0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjp0aW1pbmcpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpBcmc6OmZvckVhY2hQaGFzZSk6CisgICAgICAgICogYjMvYWlyL0FpckJhc2lj
QmxvY2suaDoKKyAgICAgICAgKiBiMy9haXIvQWlyQmxvY2tXb3JrbGlzdC5oOgorICAgICAgICAq
IGIzL2Fpci9BaXJDRkcuaDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0ZHOjpuZXdNYXApOgor
ICAgICAgICAqIGIzL2Fpci9BaXJFbGltaW5hdGVEZWFkQ29kZS5jcHA6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OmVsaW1pbmF0ZURlYWRDb2RlKToKKyAgICAgICAgKiBiMy9haXIvQWlyRml4T2J2
aW91c1NwaWxscy5jcHA6CisgICAgICAgICogYjMvYWlyL0FpckZpeFBhcnRpYWxSZWdpc3RlclN0
YWxscy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OmZpeFBhcnRpYWxSZWdpc3RlclN0YWxs
cyk6CisgICAgICAgICogYjMvYWlyL0FpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OmZpeFNwaWxsc0FmdGVyVGVybWluYWxzKToKKyAg
ICAgICAgKiBiMy9haXIvQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaDogQWRkZWQuCisgICAg
ICAgICogYjMvYWlyL0FpckdlbmVyYXRlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6cHJl
cGFyZUZvckdlbmVyYXRpb24pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpnZW5lcmF0ZSk6Cisg
ICAgICAgICogYjMvYWlyL0FpckdlbmVyYXRlLmg6CisgICAgICAgICogYjMvYWlyL0FpckdlbmVy
YXRpb25Db250ZXh0Lmg6CisgICAgICAgICogYjMvYWlyL0Fpckluc2VydGlvblNldC5oOgorICAg
ICAgICAqIGIzL2Fpci9BaXJJbnN0LmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zdDo6
bmVlZHNQYWRkaW5nKToKKyAgICAgICAgKiBiMy9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNw
cDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6bG93ZXJBZnRlclJlZ0FsbG9jKToKKyAgICAgICAg
KiBiMy9haXIvQWlyTG93ZXJFbnRyeVN3aXRjaC5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
Omxvd2VyRW50cnlTd2l0Y2gpOgorICAgICAgICAqIGIzL2Fpci9BaXJPcGNvZGUub3Bjb2RlczoK
KyAgICAgICAgKiBiMy9haXIvQWlyUGhhc2VJbnNlcnRpb25TZXQuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6UGhhc2VJbnNlcnRpb25TZXQ6OmV4ZWN1dGUpOgorICAgICAgICAq
IGIzL2Fpci9BaXJQaGFzZUluc2VydGlvblNldC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6UGhhc2VJbnNlcnRpb246OlBoYXNlSW5zZXJ0aW9uKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6UGhhc2VJbnNlcnRpb246OnBoYXNlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6UGhh
c2VJbnNlcnRpb246Om9wZXJhdG9yPCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlBoYXNlSW5z
ZXJ0aW9uU2V0OjpQaGFzZUluc2VydGlvblNldCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlBo
YXNlSW5zZXJ0aW9uU2V0OjphcHBlbmRJbnNlcnRpb24pOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpQaGFzZUluc2VydGlvblNldDo6aW5zZXJ0SW5zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OlBoYXNlSW5zZXJ0aW9uU2V0OjppbnNlcnQpOgorICAgICAgICAqIGIzL2Fpci9BaXJSZWdMaXZl
bmVzcy5oOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpSZWdMaXZlbmVzczo6TG9jYWxDYWxjOjpM
b2NhbENhbGMpOgorICAgICAgICAqIGIzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpzcGlsbEV2ZXJ5dGhpbmcpOgorICAgICAgICAqIGIzL2Fpci9B
aXJUbXAuY3BwOgorICAgICAgICAqIGIzL2Fpci9BaXJUbXAuaDoKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6VG1wOjp0bXBGb3JJbmRleCk6CisgICAgICAgICogYjMvYWlyL0FpclRtcElubGluZXMu
aDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpJbmRleGVkOjpJbmRleGVkKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpJbmRleGVkOjppbmRleCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OlRtcDo6QWJzb2x1dGVseUluZGV4ZWQ6OkFic29sdXRlbHlJbmRleGVkKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpBYnNvbHV0ZWx5SW5kZXhlZDo6aW5kZXgpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpUbXA6OmluZGV4ZWQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpU
bXA6OmFic29sdXRlbHlJbmRleGVkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjp0bXBG
b3JBYnNvbHV0ZUluZGV4KToKKyAgICAgICAgKiBiMy90ZXN0YjMuY3BwOgorICAgICAgICAoSlND
OjpCMzo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0TXVsTG9hZFR3aWNlKToKKyAg
ICAgICAgKiBqaXQvUmVnaXN0ZXJTZXQuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6OmFk
ZCk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0OjpyZW1vdmUpOgorICAgICAgICAqIHJ1bnRp
bWUvT3B0aW9ucy5oOgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuaDoKKwogMjAx
Ny0wMy0zMCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWJB
c3NlbWJseTogcGFzcyBXYXNtOjpDb250ZXh0KiB0byB2bUVudHJ5VG9XYXNtIHdoZW4gbm90IHVz
aW5nIGZhc3QgVExTCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZp
c2lvbiAyMTQ2MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTc0LDYgKzc0LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMK
ICAgICBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwCiAKICAgICBiMy9haXIv
QWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuY3BwCisgICAgYjMvYWlyL0FpckFs
bG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcAogICAgIGIzL2Fpci9BaXJBbGxvY2F0ZVN0
YWNrLmNwcAogICAgIGIzL2Fpci9BaXJBcmcuY3BwCiAgICAgYjMvYWlyL0FpckJhc2ljQmxvY2su
Y3BwCkBAIC04OCw2ICs4OSw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYjMv
YWlyL0FpckVtaXRTaHVmZmxlLmNwcAogICAgIGIzL2Fpci9BaXJGaXhPYnZpb3VzU3BpbGxzLmNw
cAogICAgIGIzL2Fpci9BaXJGaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMuY3BwCisgICAgYjMvYWly
L0FpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmNwcAogICAgIGIzL2Fpci9BaXJHZW5lcmF0ZS5j
cHAKICAgICBiMy9haXIvQWlyR2VuZXJhdGVkLmNwcAogICAgIGIzL2Fpci9BaXJIYW5kbGVDYWxs
ZWVTYXZlcy5jcHAKQEAgLTEwMCw2ICsxMDIsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNF
UwogICAgIGIzL2Fpci9BaXJMb3dlck1hY3Jvcy5jcHAKICAgICBiMy9haXIvQWlyT3B0aW1pemVC
bG9ja09yZGVyLmNwcAogICAgIGIzL2Fpci9BaXJQYWRJbnRlcmZlcmVuY2UuY3BwCisgICAgYjMv
YWlyL0FpclBoYXNlSW5zZXJ0aW9uU2V0LmNwcAogICAgIGIzL2Fpci9BaXJQaGFzZVNjb3BlLmNw
cAogICAgIGIzL2Fpci9BaXJSZWdMaXZlbmVzcy5jcHAKICAgICBiMy9haXIvQWlyUmVwb3J0VXNl
ZFJlZ2lzdGVycy5jcHAKQEAgLTE0MCw3ICsxNDMsNiBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09V
UkNFUwogICAgIGIzL0IzRm9sZFBhdGhDb25zdGFudHMuY3BwCiAgICAgYjMvQjNGcmVxdWVuY3lD
bGFzcy5jcHAKICAgICBiMy9CM0dlbmVyYXRlLmNwcAotICAgIGIzL0IzSGVhcFJhbmdlLmNwcAog
ICAgIGIzL0IzSW5mZXJTd2l0Y2hlcy5jcHAKICAgICBiMy9CM0luc2VydGlvblNldC5jcHAKICAg
ICBiMy9CM0tpbmQuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMjE0NjE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE4Myw2ICsxODMsMTIgQEAK
IAkJMEYyNUYxQjIxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNUYxQUIxODE2MzVGMzAw
NTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGMjVGMUIzMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93
UGF0aENhbGxLZXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyNUYxQUMxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAg
Ki87IH07CiAJCTBGMjVGMUI0MTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjVGMUFE
MTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJBQzU2NjFFOEEwQjc3MDAwMUVF
M0YgLyogQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQUM1NjQxRThBMEI3NjAwMDFFRTNGIC8qIEFp
ckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmNwcCAqLzsgfTsKKwkJMEYyQUM1NjcxRThBMEI3OTAw
MDFFRTNGIC8qIEFpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJBQzU2NTFFOEEwQjc2MDAwMUVFM0YgLyog
QWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCAqLzsgfTsKKwkJMEYyQUM1NkExRThBMEJEMzAw
MDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkFDNTY4MUU4QTBCRDEwMDAx
RUUzRiAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5jcHAgKi87IH07CisJCTBG
MkFDNTZCMUU4QTBCRDUwMDAxRUUzRiAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nh
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQUM1
NjkxRThBMEJEMTAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmgg
Ki87IH07CisJCTBGMkFDNTZFMUU4RDdCMDAwMDAxRUUzRiAvKiBBaXJQaGFzZUluc2VydGlvblNl
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJB
QzU2QzFFOEQ3QUZGMDAwMUVFM0YgLyogQWlyUGhhc2VJbnNlcnRpb25TZXQuY3BwICovOyB9Owor
CQkwRjJBQzU2RjFFOEQ3QjAzMDAwMUVFM0YgLyogQWlyUGhhc2VJbnNlcnRpb25TZXQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkFDNTZEMUU4RDdB
RkYwMDAxRUUzRiAvKiBBaXJQaGFzZUluc2VydGlvblNldC5oICovOyB9OwogCQkwRjJCNjZBQzE3
QjZCNTNGMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE4MTdCNkI1M0QwMEE3QUUzRiAv
KiBHQ0luY29taW5nUmVmQ291bnRlZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGMkI2NkFEMTdCNkI1NDUwMEE3QUUzRiAvKiBHQ0luY29taW5n
UmVmQ291bnRlZElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMkI2NkE5MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRl
ZElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjJCNjZBRTE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkFB
MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC05NjksNyArOTc1LDYgQEAK
IAkJMEZFQzg1QkMxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVkdWNlU3RyZW5ndGguY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1QjcxQkUxNDYy
RjAwODBGRjc0IC8qIEIzUmVkdWNlU3RyZW5ndGguY3BwICovOyB9OwogCQkwRkVDODVCRDFCRTE0
NjJGMDA4MEZGNzQgLyogQjNSZWR1Y2VTdHJlbmd0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1QjgxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVk
dWNlU3RyZW5ndGguaCAqLzsgfTsKIAkJMEZFQzg1QzExQkUxNjdBMDAwODBGRjc0IC8qIEIzRWZm
ZWN0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg1QkUxQkUxNjdBMDAwODBGRjc0IC8qIEIzRWZmZWN0cy5oICovOyB9OwotCQkwRkVDODVDMjFC
RTE2N0EwMDA4MEZGNzQgLyogQjNIZWFwUmFuZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1QkYxQkUxNjdBMDAwODBGRjc0IC8qIEIzSGVh
cFJhbmdlLmNwcCAqLzsgfTsKIAkJMEZFQzg1QzMxQkUxNjdBMDAwODBGRjc0IC8qIEIzSGVhcFJh
bmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVD
ODVDMDFCRTE2N0EwMDA4MEZGNzQgLyogQjNIZWFwUmFuZ2UuaCAqLzsgfTsKIAkJMEZFQzg1QzUx
QkUxNkY1QTAwODBGRjc0IC8qIEIzRWZmZWN0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODVDNDFCRTE2RjVBMDA4MEZGNzQgLyogQjNFZmZl
Y3RzLmNwcCAqLzsgfTsKIAkJMEZFRDY3QjkxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0YW50
SG9pc3RpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVENjdCNzFCMjYyNTZEMDA2NkNFMTUgLyogREZHQ29uc3RhbnRIb2lzdGluZ1Bo
YXNlLmNwcCAqLzsgfTsKQEAgLTI3MTAsNiArMjcxNSwxMiBAQAogCQkwRjI1RjFBQjE4MTYzNUYz
MDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEZUTFNsb3dQYXRoQ2FsbC5oOyBwYXRoID0gZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjI1RjFBQzE4MTYzNUYzMDA1MjJGMzkgLyog
RlRMU2xvd1BhdGhDYWxsS2V5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEZUTFNsb3dQYXRoQ2FsbEtleS5jcHA7IHBhdGggPSBmdGwvRlRMU2xvd1BhdGhDYWxsS2V5
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNUYxQUQxODE2MzVGMzAwNTIy
RjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBGVExTbG93UGF0aENhbGxLZXkuaDsgcGF0aCA9IGZ0bC9GVExTbG93UGF0aENhbGxLZXku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQUM1NjQxRThBMEI3NjAwMDFFRTNG
IC8qIEFpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IEFpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmNwcDsgcGF0aCA9IGIz
L2Fpci9BaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGMkFDNTY1MUU4QTBCNzYwMDAxRUUzRiAvKiBBaXJGaXhTcGlsbHNBZnRlclRl
cm1pbmFscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJGaXhTcGlsbHNB
ZnRlclRlcm1pbmFscy5oOyBwYXRoID0gYjMvYWlyL0FpckZpeFNwaWxsc0FmdGVyVGVybWluYWxz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkFDNTY4MUU4QTBCRDEwMDAxRUUz
RiAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5j
cHA7IHBhdGggPSBiMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJBQzU2OTFFOEEwQkQxMDAwMUVFM0YgLyog
QWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaDsgcGF0aCA9IGIz
L2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjJBQzU2QzFFOEQ3QUZGMDAwMUVFM0YgLyogQWlyUGhhc2VJbnNlcnRp
b25TZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyUGhhc2VJ
bnNlcnRpb25TZXQuY3BwOyBwYXRoID0gYjMvYWlyL0FpclBoYXNlSW5zZXJ0aW9uU2V0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQUM1NkQxRThEN0FGRjAwMDFFRTNGIC8q
IEFpclBoYXNlSW5zZXJ0aW9uU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEFpclBoYXNlSW5zZXJ0aW9uU2V0Lmg7IHBhdGggPSBiMy9haXIvQWlyUGhhc2VJbnNlcnRpb25T
ZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQjY2QTgxN0I2QjUzRDAwQTdB
RTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5jb21pbmdS
ZWZDb3VudGVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkE5MTdCNkI1
M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMkI2NkFBMTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNl
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMzUwMyw3ICszNTE0LDYgQEAKIAkJMEZFQzg1QjcxQkUxNDYy
RjAwODBGRjc0IC8qIEIzUmVkdWNlU3RyZW5ndGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQjNSZWR1Y2VTdHJlbmd0aC5jcHA7IHBhdGggPSBiMy9CM1JlZHVjZVN0
cmVuZ3RoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQzg1QjgxQkUxNDYy
RjAwODBGRjc0IC8qIEIzUmVkdWNlU3RyZW5ndGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gQjNSZWR1Y2VTdHJlbmd0aC5oOyBwYXRoID0gYjMvQjNSZWR1Y2VTdHJlbmd0aC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVDODVCRTFCRTE2N0EwMDA4MEZGNzQg
LyogQjNFZmZlY3RzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzRWZmZWN0
cy5oOyBwYXRoID0gYjMvQjNFZmZlY3RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTBGRUM4NUJGMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hlYXBSYW5nZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0hlYXBSYW5nZS5jcHA7IHBhdGggPSBiMy9CM0hl
YXBSYW5nZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUM4NUMwMUJFMTY3
QTAwMDgwRkY3NCAvKiBCM0hlYXBSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBCM0hlYXBSYW5nZS5oOyBwYXRoID0gYjMvQjNIZWFwUmFuZ2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQzg1QzQxQkUxNkY1QTAwODBGRjc0IC8qIEIzRWZmZWN0cy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0VmZmVjdHMuY3BwOyBw
YXRoID0gYjMvQjNFZmZlY3RzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZF
RDY3QjcxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDb25zdGFudEhvaXN0aW5nUGhh
c2UuY3BwOyBwYXRoID0gZGZnL0RGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NDMzLDcgKzU0NDMsNiBAQAogCQkJCTBGRUM4NENGMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRlLmggKi8sCiAJCQkJMEYyQzYzQjUxRTYzNDNFODAw
QzEzODM5IC8qIEIzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi8sCiAJCQkJMEZFQzg0RDAx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oICovLAotCQkJCTBG
RUM4NUJGMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hlYXBSYW5nZS5jcHAgKi8sCiAJCQkJMEZFQzg1
QzAxQkUxNjdBMDAwODBGRjc0IC8qIEIzSGVhcFJhbmdlLmggKi8sCiAJCQkJREM2OUI5OUExRDE1
RjkwRjAwMkUzQzAwIC8qIEIzSW5mZXJTd2l0Y2hlcy5jcHAgKi8sCiAJCQkJREM2OUI5OUIxRDE1
RjkwRjAwMkUzQzAwIC8qIEIzSW5mZXJTd2l0Y2hlcy5oICovLApAQCAtNTU0NCw2ICs1NTUzLDgg
QEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTc5NjVDMjE0MUU1RDc5OTYwMEI3NTkxRCAvKiBBaXJB
bGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5jcHAgKi8sCiAJCQkJNzk2NUMyMTUxRTVE
Nzk5NjAwQjc1OTFEIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmggKi8s
CisJCQkJMEYyQUM1NjgxRThBMEJEMTAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlM
aW5lYXJTY2FuLmNwcCAqLywKKwkJCQkwRjJBQzU2OTFFOEEwQkQxMDAwMUVFM0YgLyogQWlyQWxs
b2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaCAqLywKIAkJCQkwRkVDODU0ODFCREFDREM3MDA4
MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFjay5jcHAgKi8sCiAJCQkJMEZFQzg1NDkxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suaCAqLywKIAkJCQkwRkVDODU0QTFCREFDREM3MDA4
MEZGNzQgLyogQWlyQXJnLmNwcCAqLywKQEAgLTU1NzUsNiArNTU4Niw4IEBACiAJCQkJMEY0REUx
Q0QxQzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCAqLywKIAkJCQkyNjJE
ODVCNDFDMEQ2NTBGMDA2QUNCNjEgLyogQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmNwcCAq
LywKIAkJCQkyNjJEODVCNTFDMEQ2NTBGMDA2QUNCNjEgLyogQWlyRml4UGFydGlhbFJlZ2lzdGVy
U3RhbGxzLmggKi8sCisJCQkJMEYyQUM1NjQxRThBMEI3NjAwMDFFRTNGIC8qIEFpckZpeFNwaWxs
c0FmdGVyVGVybWluYWxzLmNwcCAqLywKKwkJCQkwRjJBQzU2NTFFOEEwQjc2MDAwMUVFM0YgLyog
QWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCAqLywKIAkJCQkwRkVDODU1MjFCREFDREM3MDA4
MEZGNzQgLyogQWlyRnJlcXVlbnRlZEJsb2NrLmggKi8sCiAJCQkJMEZFQzg1NTMxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckdlbmVyYXRlLmNwcCAqLywKIAkJCQkwRkVDODU1NDFCREFDREM3MDA4MEZG
NzQgLyogQWlyR2VuZXJhdGUuaCAqLywKQEAgLTU2MDMsNiArNTYxNiw4IEBACiAJCQkJMEZCMzg3
OEQxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpck9wdGltaXplQmxvY2tPcmRlci5oICovLAogCQkJCTBG
OUNBQkM2MURCNTRBNzYwMDA4RTgzQiAvKiBBaXJQYWRJbnRlcmZlcmVuY2UuY3BwICovLAogCQkJ
CTBGOUNBQkM3MURCNTRBNzYwMDA4RTgzQiAvKiBBaXJQYWRJbnRlcmZlcmVuY2UuaCAqLywKKwkJ
CQkwRjJBQzU2QzFFOEQ3QUZGMDAwMUVFM0YgLyogQWlyUGhhc2VJbnNlcnRpb25TZXQuY3BwICov
LAorCQkJCTBGMkFDNTZEMUU4RDdBRkYwMDAxRUUzRiAvKiBBaXJQaGFzZUluc2VydGlvblNldC5o
ICovLAogCQkJCTBGRUM4NTVFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3BlLmNwcCAq
LywKIAkJCQkwRkVDODU1RjFCREFDREM3MDA4MEZGNzQgLyogQWlyUGhhc2VTY29wZS5oICovLAog
CQkJCTBGRjRCNEJBMUU4ODQ0OTUwMERCQkU4NiAvKiBBaXJSZWdMaXZlbmVzcy5jcHAgKi8sCkBA
IC04MTYwLDYgKzgxNzUsNyBAQAogCQkJCTBGRUM4NTEwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Nv
bnN0NjRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MTIxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQ29uc3REb3VibGVWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM0MjJBNjMxQzE1
OEU2RDAwRTJFQjk4IC8qIEIzQ29uc3RGbG9hdFZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RjJBQzU2QjFFOEEwQkQ1MDAwMUVFM0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNj
YW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NUIzMUJERUQ5NTcwMDgwRkY3NCAvKiBCM0Nv
bnN0UHRyVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzM4REY2MUJFOTNENTUwMDEzQzg4
RiAvKiBCM0NvbnN0cmFpbmVkVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkM2M0I4MUU2
MzQzRjcwMEMxMzgzOSAvKiBCM0dlbmVyaWNCbG9ja0luc2VydGlvblNldC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC04MzkzLDYgKzg0MDksNyBAQAogCQkJCTBGRkZDOTU4MTRFRjkwQTIwMEM3MjUzMiAv
KiBERkdDRkFQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzQjNBMjgxNTQ0Qzk5NzAwM0VE
MEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
OUQzNjk1MUFFOUNDMzMwMDBENERGQiAvKiBERkdDbGVhblVwUGhhc2UuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGMkFDNTZGMUU4RDdCMDMwMDAxRUUzRiAvKiBBaXJQaGFzZUluc2VydGlvblNldC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTc3QTQyNDAxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Nsb2Ji
ZXJpemUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3N0E0MjQyMTdBMEJCRkQwMEE4REI4MSAvKiBE
RkdDbG9iYmVyU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjNDMUYxQjFCODY4RTc5MDBBQkIw
OEIgLyogREZHQ2xvYmJlcnNFeGl0U3RhdGUuaCBpbiBIZWFkZXJzICovLApAQCAtOTM4Nyw2ICs5
NDA0LDcgQEAKIAkJCQk3MDlGQjg2QTFBRTMzNUM2MDAzOUQwNjkgLyogV2Vha1NldENvbnN0cnVj
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDE1MDEzMzE1NEJCMTNGMDA1RDhDOTggLyogV2Vh
a1NldElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwOUZCODZDMUFFMzM1QzYwMDM5RDA2
OSAvKiBXZWFrU2V0UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJBQzU2NzFFOEEw
Qjc5MDAwMUVFM0YgLyogQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUFEMkZDQkVEMURCNThEQUQwMEIzRTczNiAvKiBXZWJBc3NlbWJseUNvbXBpbGVFcnJv
ckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0MxNjFEQjU5Q0IyMDBCM0U3
MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUFEMkZDQkVGMURCNThEQUQwMEIzRTczNiAvKiBXZWJBc3NlbWJseUNvbXBpbGVF
cnJvclByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDAxNSw3ICsxMDAzMyw2IEBACiAJ
CQkJMEY3MjVDQUYxQzUwNkQzQjAwQUQ5NDNBIC8qIEIzRm9sZFBhdGhDb25zdGFudHMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZFQzg1MTUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5
Q2xhc3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQzg1MTgxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzR2VuZXJhdGUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEZFQzg1QzIxQkUxNjdBMDAwODBG
Rjc0IC8qIEIzSGVhcFJhbmdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCURDNjlCOTlDMUQxNUY5
MTIwMDJFM0MwMCAvKiBCM0luZmVyU3dpdGNoZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZF
Qzg1QjkxQkUxNDYyRjAwODBGRjc0IC8qIEIzSW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGREY2N0QzMUQ5QzZEMkEwMDFCOTgyNSAvKiBCM0tpbmQuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC0xMDE4MSw2ICsxMDE5OCw3IEBACiAJCQkJQTc4QTk3NzYxNzk3MzhCODAwOURGNzQ0
IC8qIERGR0ZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCREMxNTE1MUM1RDRE
MDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIwMTc3
RjFEQ0FEQzMzMDBFQTU5NTAgLyogREZHRmxvd0luZGV4aW5nLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTBGMkFDNTZBMUU4QTBCRDMwMDAxRUUzRiAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGlu
ZWFyU2Nhbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjlEMzM5NjE3RkZDNEU2MDA3M0MyQkMg
LyogREZHRmx1c2hlZEF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RDg5Q0Y3MTdBMEI4Q0Mw
MDc3M0FEOCAvKiBERkdGbHVzaEZvcm1hdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjY5Q0M4
ODE5M0FDNjBBMDA0NTc1OUUgLyogREZHRnJvemVuVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC0xMDI5MCw2ICsxMDMwOCw3IEBACiAJCQkJMkE4MzYzODUxOEQ3RDBFRTAwMDBFQkNDIC8qIEVk
ZW5HQ0FjdGl2aXR5Q2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTlFNDVBMjUxOEEx
QjI1OTAwMjZEODhGIC8qIEVuY29kZWRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdG
MzlDNzEwN0VDMzc2MDA0MjdBNDggLyogRXJyb3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYy
QUM1NjYxRThBMEI3NzAwMDFFRTNGIC8qIEFpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTE0N0YzOUM4MTA3RUMzNzYwMDQyN0E0OCAvKiBFcnJvckNvbnN0
cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFQjU4QzE0MTg3QjhCMTYwMDk4RUYwQiAv
KiBFcnJvckhhbmRsaW5nU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzkxMDdF
QzM3NjAwNDI3QTQ4IC8qIEVycm9ySW5zdGFuY2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDQw
Nyw2ICsxMDQyNiw3IEBACiAJCQkJRTM1RTAzNUYxQjdBQjQzRTAwNzNBRDJBIC8qIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbk9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTMyNDM4QjE4
NTY4MzM1MDAyRUQ2OTIgLyogSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE1MEU0QjYxMTg4MDlERDUwMDY4QTQ2RCAvKiBJbnNwZWN0b3JSdW50aW1lQWdl
bnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQUM1NkUxRThEN0IwMDAwMDFFRTNGIC8qIEFp
clBoYXNlSW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkM2M0JCMUU2MzQ0
MEEwMEMxMzgzOSAvKiBBaXJCbG9ja0luc2VydGlvblNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNTUxNjVEMjFCREYwQjk4MDAzQjc1QzEgLyogSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2Vu
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTkzQ0Y4MjE4NDAzNzcxMDBCRkNFMjcgLyogSW5z
cGVjdG9yVmFsdWVzLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQmFzaWNCbG9ja1V0aWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQmFzaWNCbG9ja1V0aWxzLmgJKHJldmlzaW9uIDIxNDYxOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTQsNyArMTE0LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KIFZlY3RvcjxC
YXNpY0Jsb2NrKj4gYmxvY2tzSW5QcmVPcmRlcihCYXNpY0Jsb2NrKiByb290KQogewogICAgIFZl
Y3RvcjxCYXNpY0Jsb2NrKj4gcmVzdWx0OwotICAgIEdyYXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxv
Y2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrPj4gd29ya2xpc3Q7CisgICAgR3JhcGhOb2RlV29ya2xp
c3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2sqPj4gd29ya2xpc3Q7CiAgICAgd29y
a2xpc3QucHVzaChyb290KTsKICAgICB3aGlsZSAoQmFzaWNCbG9jayogYmxvY2sgPSB3b3JrbGlz
dC5wb3AoKSkgewogICAgICAgICByZXN1bHQuYXBwZW5kKGJsb2NrKTsKQEAgLTEyOCw3ICsxMjgs
NyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Jsb2NrPgogVmVjdG9yPEJhc2ljQmxvY2sqPiBi
bG9ja3NJblBvc3RPcmRlcihCYXNpY0Jsb2NrKiByb290KQogewogICAgIFZlY3RvcjxCYXNpY0Js
b2NrKj4gcmVzdWx0OwotICAgIFBvc3RPcmRlckdyYXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxvY2sq
LCBJbmRleFNldDxCYXNpY0Jsb2NrPj4gd29ya2xpc3Q7CisgICAgUG9zdE9yZGVyR3JhcGhOb2Rl
V29ya2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2sqPj4gd29ya2xpc3Q7CiAg
ICAgd29ya2xpc3QucHVzaChyb290KTsKICAgICB3aGlsZSAoR3JhcGhOb2RlV2l0aE9yZGVyPEJh
c2ljQmxvY2sqPiBpdGVtID0gd29ya2xpc3QucG9wKCkpIHsKICAgICAgICAgc3dpdGNoIChpdGVt
Lm9yZGVyKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja1dvcmtsaXN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tXb3JrbGlz
dC5oCShyZXZpc2lvbiAyMTQ2MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9j
a1dvcmtsaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNyArMzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKIAogY2xhc3MgQmFzaWNCbG9jazsKIAotdHlwZWRlZiBHcmFwaE5vZGVX
b3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IEJsb2NrV29ya2xpc3Q7
Cit0eXBlZGVmIEdyYXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Js
b2NrKj4+IEJsb2NrV29ya2xpc3Q7CiAKIC8vIFdoZW4geW91IHNheSBCbG9ja1dpdGg8aW50PiB5
b3Ugc2hvdWxkIHJlYWQgaXQgYXMgImJsb2NrIHdpdGggYW4gaW50Ii4KIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHVzaW5nIEJsb2NrV2l0aCA9IEdyYXBoTm9kZVdpdGg8QmFzaWNCbG9jayosIFQ+OwpA
QCAtNDQsMTMgKzQ0LDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5nIEJsb2NrV2l0aCA9
IEcKIC8vIHBlcm1pdHMgZm9yY2libHkgZW5xdWV1ZWluZyB0aGluZ3MgZXZlbiBpZiB0aGUgYmxv
Y2sgaGFzIGFscmVhZHkgYmVlbiBzZWVuLiBJdCdzIHVzZWZ1bCBmb3IKIC8vIHRoaW5ncyBsaWtl
IGJ1aWxkaW5nIGEgc3Bhbm5pbmcgdHJlZSwgaW4gd2hpY2ggY2FzZSBUICh0aGUgYXV4aWxpYXJ5
IHBheWxvYWQpIHdvdWxkIGJlIHRoZQogLy8gc3VjY2Vzc29yIGluZGV4LgotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gdXNpbmcgRXh0ZW5kZWRCbG9ja1dvcmtsaXN0ID0gRXh0ZW5kZWRHcmFwaE5vZGVX
b3JrbGlzdDxCYXNpY0Jsb2NrKiwgVCwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+OwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gdXNpbmcgRXh0ZW5kZWRCbG9ja1dvcmtsaXN0ID0gRXh0ZW5kZWRHcmFwaE5v
ZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgVCwgSW5kZXhTZXQ8QmFzaWNCbG9jayo+PjsKIAogdHlw
ZWRlZiBHcmFwaFZpc2l0T3JkZXIgVmlzaXRPcmRlcjsKIAogdHlwZWRlZiBHcmFwaE5vZGVXaXRo
T3JkZXI8QmFzaWNCbG9jayo+IEJsb2NrV2l0aE9yZGVyOwogCi10eXBlZGVmIFBvc3RPcmRlckdy
YXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrPj4gUG9zdE9y
ZGVyQmxvY2tXb3JrbGlzdDsKK3R5cGVkZWYgUG9zdE9yZGVyR3JhcGhOb2RlV29ya2xpc3Q8QmFz
aWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2sqPj4gUG9zdE9yZGVyQmxvY2tXb3JrbGlzdDsK
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0NGRy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NG
Ry5oCShyZXZpc2lvbiAyMTQ2MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDRkcu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zOSw4ICszOSw4IEBAIGNsYXNzIENGRyB7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBCYXNpY0Jsb2NrKiBOb2RlOwot
ICAgIHR5cGVkZWYgSW5kZXhTZXQ8QmFzaWNCbG9jaz4gU2V0OwotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHVzaW5nIE1hcCA9IEluZGV4TWFwPEJhc2ljQmxvY2ssIFQ+OworICAgIHR5cGVkZWYg
SW5kZXhTZXQ8QmFzaWNCbG9jayo+IFNldDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2lu
ZyBNYXAgPSBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgVD47CiAgICAgdHlwZWRlZiBWZWN0b3I8QmFz
aWNCbG9jayosIDQ+IExpc3Q7CiAKICAgICBDRkcoUHJvY2VkdXJlJiBwcm9jKQpAQCAtNTEsNyAr
NTEsNyBAQCBwdWJsaWM6CiAgICAgTm9kZSByb290KCkgeyByZXR1cm4gbV9wcm9jWzBdOyB9CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIE1hcDxUPiBuZXdNYXAoKSB7IHJldHVybiBJ
bmRleE1hcDxKU0M6OkIzOjpCYXNpY0Jsb2NrLCBUPihtX3Byb2Muc2l6ZSgpKTsgfQorICAgIE1h
cDxUPiBuZXdNYXAoKSB7IHJldHVybiBJbmRleE1hcDxKU0M6OkIzOjpCYXNpY0Jsb2NrKiwgVD4o
bV9wcm9jLnNpemUoKSk7IH0KIAogICAgIFN1Y2Nlc3NvckNvbGxlY3Rpb248QmFzaWNCbG9jaywg
QmFzaWNCbG9jazo6U3VjY2Vzc29yTGlzdD4gc3VjY2Vzc29ycyhOb2RlIG5vZGUpIHsgcmV0dXJu
IG5vZGUtPnN1Y2Nlc3NvckJsb2NrcygpOyB9CiAgICAgQmFzaWNCbG9jazo6UHJlZGVjZXNzb3JM
aXN0JiBwcmVkZWNlc3NvcnMoTm9kZSBub2RlKSB7IHJldHVybiBub2RlLT5wcmVkZWNlc3NvcnMo
KTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmgJKHJldmlzaW9uIDIxNDYx
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKEIzX0pJVCkKIAogI2luY2x1ZGUgIkpTRXhw
b3J0TWFjcm9zLmgiCisjaW5jbHVkZSAiT3B0aW9ucy5oIgogI2luY2x1ZGUgPHd0Zi9PcHRpb25h
bC5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKQEAgLTE3MCw2ICsxNzEsMTMg
QEAgc3RhdGljIEludFR5cGUgcm90YXRlTGVmdChJbnRUeXBlIHZhbHVlLAogICAgIHJldHVybiAo
dVZhbHVlIDw8IHNoaWZ0KSB8ICh1VmFsdWUgPj4gKChiaXRzIC0gc2hpZnQpICYgbWFzaykpOwog
fQogCitpbmxpbmUgdW5zaWduZWQgZGVmYXVsdE9wdExldmVsKCkKK3sKKyAgICAvLyBUaGlzIHNo
b3VsZCBhbG1vc3QgYWx3YXlzIHJldHVybiAyLCBidXQgd2UgYWxsb3cgdGhpcyBkZWZhdWx0IHRv
IGJlIGxvd2VyZWQgZm9yIHRlc3RpbmcuIFNvbWUKKyAgICAvLyBjb21wb25lbnRzIHdpbGwgZGVs
aWJlcmF0ZWx5IHNldCB0aGUgb3B0TGV2ZWwuCisgICAgcmV0dXJuIE9wdGlvbnM6OmRlZmF1bHRC
M09wdExldmVsKCk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCiAjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBpbGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxlLmgJKHJl
dmlzaW9uIDIxNDYxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBpbGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKEIzX0pJVCkKIAor
I2luY2x1ZGUgIkIzQ29tbW9uLmgiCiAjaW5jbHVkZSAiQjNDb21waWxhdGlvbi5oIgogCiBuYW1l
c3BhY2UgSlNDIHsKQEAgLTQ1LDcgKzQ2LDcgQEAgY2xhc3MgUHJvY2VkdXJlOwogLy8gVGhlbiB5
b3Uga2VlcCB0aGUgQ29tcGlsYXRpb24gb2JqZWN0IGFsaXZlIGZvciBhcyBsb25nIGFzIHlvdSB3
YW50IHRvIGJlIGFibGUgdG8gcnVuIHRoZSBjb2RlLgogLy8gSWYgdGhpcyBBUEkgZmVlbHMgdG9v
IGhpZ2gtbGV2ZWwsIHlvdSBjYW4gdXNlIEIzOjpnZW5lcmF0ZSgpIGRpcmVjdGx5LgogCi1KU19F
WFBPUlRfUFJJVkFURSBDb21waWxhdGlvbiBjb21waWxlKFByb2NlZHVyZSYsIHVuc2lnbmVkIG9w
dExldmVsID0gMSk7CitKU19FWFBPUlRfUFJJVkFURSBDb21waWxhdGlvbiBjb21waWxlKFByb2Nl
ZHVyZSYsIHVuc2lnbmVkIG9wdExldmVsID0gZGVmYXVsdE9wdExldmVsKCkpOwogCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRHVw
bGljYXRlVGFpbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0R1cGxpY2F0ZVRhaWxzLmNwcAkocmV2aXNpb24gMjE0NjE4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzRHVwbGljYXRlVGFpbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2
OCw3IEBAIHB1YmxpYzoKIAogICAgICAgICBtX3Byb2MucmVzZXRWYWx1ZU93bmVycygpOwogCi0g
ICAgICAgIEluZGV4U2V0PEJhc2ljQmxvY2s+IGNhbmRpZGF0ZXM7CisgICAgICAgIEluZGV4U2V0
PEJhc2ljQmxvY2sqPiBjYW5kaWRhdGVzOwogCiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxv
Y2sgOiBtX3Byb2MpIHsKICAgICAgICAgICAgIGlmIChibG9jay0+c2l6ZSgpID4gbV9tYXhTaXpl
KQpAQCAtODIsNyArODIsNyBAQCBwdWJsaWM6CiAgICAgICAgIH0KIAogICAgICAgICAvLyBDb2xs
ZWN0IHRoZSBzZXQgb2YgdmFsdWVzIHRoYXQgbXVzdCBiZSBkZS1TU0EnZC4KLSAgICAgICAgSW5k
ZXhTZXQ8VmFsdWU+IHZhbHVlc1RvRGVtb3RlOworICAgICAgICBJbmRleFNldDxWYWx1ZSo+IHZh
bHVlc1RvRGVtb3RlOwogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jKSB7
CiAgICAgICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6ICpibG9jaykgewogICAgICAgICAgICAg
ICAgIGlmICh2YWx1ZS0+b3Bjb2RlKCkgPT0gUGhpICYmIGNhbmRpZGF0ZXMuY29udGFpbnMoYmxv
Y2spKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWxpbWluYXRlQ29tbW9uU3Vi
ZXhwcmVzc2lvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAkocmV2aXNpb24gMjE0NjE4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODIsNyArNjgyLDcgQEAgcHJpdmF0ZToKICAgICBEb21p
bmF0b3JzJiBtX2RvbWluYXRvcnM7CiAgICAgUHVyZUNTRSBtX3B1cmVDU0U7CiAgICAgCi0gICAg
SW5kZXhNYXA8QmFzaWNCbG9jaywgSW1wdXJlQmxvY2tEYXRhPiBtX2ltcHVyZUJsb2NrRGF0YTsK
KyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgSW1wdXJlQmxvY2tEYXRhPiBtX2ltcHVyZUJsb2Nr
RGF0YTsKIAogICAgIEltcHVyZUJsb2NrRGF0YSBtX2RhdGE7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0ZpeFNTQS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzRml4U1NBLmNwcAkocmV2aXNpb24gMjE0NjE4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzRml4U1NBLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBA
QCBuYW1lc3BhY2UgewogY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiB9IC8vIGFub255bW91
cyBuYW1lc3BhY2UKIAotdm9pZCBkZW1vdGVWYWx1ZXMoUHJvY2VkdXJlJiBwcm9jLCBjb25zdCBJ
bmRleFNldDxWYWx1ZT4mIHZhbHVlcykKK3ZvaWQgZGVtb3RlVmFsdWVzKFByb2NlZHVyZSYgcHJv
YywgY29uc3QgSW5kZXhTZXQ8VmFsdWUqPiYgdmFsdWVzKQogewogICAgIEhhc2hNYXA8VmFsdWUq
LCBWYXJpYWJsZSo+IG1hcDsKICAgICBIYXNoTWFwPFZhbHVlKiwgVmFyaWFibGUqPiBwaGlNYXA7
CkBAIC0xMjEsNyArMTIxLDcgQEAgYm9vbCBmaXhTU0EoUHJvY2VkdXJlJiBwcm9jKQogICAgIC8v
IEp1c3QgZm9yIHNhbml0eSwgcmVtb3ZlIGFueSB1bnVzZWQgdmFyaWFibGVzIGZpcnN0LiBJdCdz
IHVubGlrZWx5IHRoYXQgdGhpcyBjb2RlIGhhcyBhbnkKICAgICAvLyBidWdzIGhhdmluZyB0byBk
byB3aXRoIGRlYWQgdmFyaWFibGVzLCBidXQgaXQgd291bGQgYmUgc2lsbHkgdG8gaGF2ZSB0byBm
aXggc3VjaCBhIGJ1ZyBpZgogICAgIC8vIGl0IGRpZCBhcmlzZS4KLSAgICBJbmRleFNldDxWYXJp
YWJsZT4gbGl2ZVZhcmlhYmxlczsKKyAgICBJbmRleFNldDxWYXJpYWJsZSo+IGxpdmVWYXJpYWJs
ZXM7CiAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiBwcm9jLnZhbHVlcygpKSB7CiAgICAgICAgIGlm
IChWYXJpYWJsZVZhbHVlKiB2YXJpYWJsZVZhbHVlID0gdmFsdWUtPmFzPFZhcmlhYmxlVmFsdWU+
KCkpCiAgICAgICAgICAgICBsaXZlVmFyaWFibGVzLmFkZCh2YXJpYWJsZVZhbHVlLT52YXJpYWJs
ZSgpKTsKQEAgLTE0NSw3ICsxNDUsNyBAQCBib29sIGZpeFNTQShQcm9jZWR1cmUmIHByb2MpCiAK
ICAgICAvLyBDcmVhdGUgYSBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSAoImNhbGNWYXIiKSBmb3Ig
ZXZlcnkgdmFyaWFibGUuCiAgICAgVmVjdG9yPFZhcmlhYmxlKj4gY2FsY1ZhclRvVmFyaWFibGU7
Ci0gICAgSW5kZXhNYXA8VmFyaWFibGUsIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKj4gdmFyaWFi
bGVUb0NhbGNWYXIocHJvYy52YXJpYWJsZXMoKS5zaXplKCkpOworICAgIEluZGV4TWFwPFZhcmlh
YmxlKiwgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqPiB2YXJpYWJsZVRvQ2FsY1Zhcihwcm9jLnZh
cmlhYmxlcygpLnNpemUoKSk7CiAKICAgICBmb3IgKFZhcmlhYmxlKiB2YXJpYWJsZSA6IHByb2Mu
dmFyaWFibGVzKCkpIHsKICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIGNhbGNWYXIg
PSBzc2EubmV3VmFyaWFibGUoKTsKQEAgLTE4NSw3ICsxODUsNyBAQCBib29sIGZpeFNTQShQcm9j
ZWR1cmUmIHByb2MpCiAKICAgICAvLyBOb3cgcGVyZm9ybSB0aGUgY29udmVyc2lvbi4KICAgICBJ
bnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KHByb2MpOwotICAgIEluZGV4TWFwPFZhcmlhYmxlLCBW
YWx1ZSo+IG1hcHBpbmcocHJvYy52YXJpYWJsZXMoKS5zaXplKCkpOworICAgIEluZGV4TWFwPFZh
cmlhYmxlKiwgVmFsdWUqPiBtYXBwaW5nKHByb2MudmFyaWFibGVzKCkuc2l6ZSgpKTsKICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogcHJvYy5ibG9ja3NJblByZU9yZGVyKCkpIHsKICAgICAg
ICAgbWFwcGluZy5jbGVhcigpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNG
aXhTU0EuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGaXhTU0Eu
aAkocmV2aXNpb24gMjE0NjE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRml4U1NB
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzcsNyArMzcsNyBAQCBjbGFzcyBQcm9jZWR1cmU7CiAKIC8vIFR1
cm5zIGFsbCBtZW50aW9ucyBvZiB0aGUgZ2l2ZW4gdmFsdWVzIGludG8gYWNjZXNzZXMgdG8gdmFy
aWFibGVzLiBUaGlzIGlzIG1lYW50IHRvIGJlIHVzZWQKIC8vIGZyb20gcGhhc2VzIHRoYXQgZG9u
J3QgbGlrZSBTU0EgZm9yIHdoYXRldmVyIHJlYXNvbi4KLXZvaWQgZGVtb3RlVmFsdWVzKFByb2Nl
ZHVyZSYsIGNvbnN0IEluZGV4U2V0PFZhbHVlPiYpOwordm9pZCBkZW1vdGVWYWx1ZXMoUHJvY2Vk
dXJlJiwgY29uc3QgSW5kZXhTZXQ8VmFsdWUqPiYpOwogCiAvLyBUaGlzIGZpeGVzIFNTQSBmb3Ig
eW91LiBVc2UgdGhpcyBhZnRlciB5b3UgaGF2ZSBkb25lIGRlbW90ZVZhbHVlcygpIGFuZCB5b3Ug
aGF2ZSBwZXJmb3JtZWQKIC8vIHdoYXRldmVyIGV2aWwgdHJhbnNmb3JtYXRpb24geW91IG5lZWRl
ZC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAJKHJldmlzaW9u
IDIxNDYxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCB2b2lkIHByZXBhcmVGb3JHZW5lcmF0aW9uKFBy
b2NlZHVyZSYgcHJvCiAgICAgVGltaW5nU2NvcGUgdGltaW5nU2NvcGUoInByZXBhcmVGb3JHZW5l
cmF0aW9uIik7CiAKICAgICBnZW5lcmF0ZVRvQWlyKHByb2NlZHVyZSwgb3B0TGV2ZWwpOwotICAg
IEFpcjo6cHJlcGFyZUZvckdlbmVyYXRpb24ocHJvY2VkdXJlLmNvZGUoKSk7CisgICAgQWlyOjpw
cmVwYXJlRm9yR2VuZXJhdGlvbihwcm9jZWR1cmUuY29kZSgpLCBvcHRMZXZlbCk7CiB9CiAKIHZv
aWQgZ2VuZXJhdGUoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIENDYWxsSGVscGVycyYgaml0KQpAQCAt
ODAsNyArODAsNyBAQCB2b2lkIGdlbmVyYXRlVG9BaXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUsCiAg
ICAgaWYgKHNob3VsZFZhbGlkYXRlSVIoKSkKICAgICAgICAgdmFsaWRhdGUocHJvY2VkdXJlKTsK
IAotICAgIGlmIChvcHRMZXZlbCA+PSAxKSB7CisgICAgaWYgKG9wdExldmVsID49IDIpIHsKICAg
ICAgICAgcmVkdWNlRG91YmxlVG9GbG9hdChwcm9jZWR1cmUpOwogICAgICAgICByZWR1Y2VTdHJl
bmd0aChwcm9jZWR1cmUpOwogICAgICAgICBlbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucyhw
cm9jZWR1cmUpOwpAQCAtOTEsMTIgKzkxLDE1IEBAIHZvaWQgZ2VuZXJhdGVUb0FpcihQcm9jZWR1
cmUmIHByb2NlZHVyZSwKICAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiBBZGQgbW9yZSBvcHRp
bWl6YXRpb25zIGhlcmUuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNTA1MDcKKyAgICB9IGVsc2UgaWYgKG9wdExldmVsID49IDEpIHsKKyAgICAg
ICAgLy8gRklYTUU6IEV4cGxvcmUgYmV0dGVyICJxdWljayBtb2RlIiBvcHRpbWl6YXRpb25zLgor
ICAgICAgICByZWR1Y2VTdHJlbmd0aChwcm9jZWR1cmUpOwogICAgIH0KIAogICAgIC8vIFRoaXMg
cHV0cyB0aGUgSVIgaW4gcXVpcmtzIG1vZGUuCiAgICAgbG93ZXJNYWNyb3MocHJvY2VkdXJlKTsK
IAotICAgIGlmIChvcHRMZXZlbCA+PSAxKSB7CisgICAgaWYgKG9wdExldmVsID49IDIpIHsKICAg
ICAgICAgcmVkdWNlU3RyZW5ndGgocHJvY2VkdXJlKTsKIAogICAgICAgICAvLyBGSVhNRTogQWRk
IG1vcmUgb3B0aW1pemF0aW9ucyBoZXJlLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzR2VuZXJhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNH
ZW5lcmF0ZS5oCShyZXZpc2lvbiAyMTQ2MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNHZW5lcmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw4IEBACiAKICNpZiBFTkFC
TEUoQjNfSklUKQogCisjaW5jbHVkZSAiQjNDb21tb24uaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAK
IGNsYXNzIENDYWxsSGVscGVyczsKQEAgLTM4LDcgKzQwLDcgQEAgbmFtZXNwYWNlIEFpciB7IGNs
YXNzIENvZGU7IH0KIAogLy8gVGhpcyB0YWtlcyBhIEIzOjpQcm9jZWR1cmUsIG9wdGltaXplcyBp
dCBpbi1wbGFjZSwgbG93ZXJzIGl0IHRvIEFpciwgYW5kIHByZXBhcmVzIHRoZSBBaXIgZm9yCiAv
LyBnZW5lcmF0aW9uLgotSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmVwYXJlRm9yR2VuZXJhdGlv
bihQcm9jZWR1cmUmLCB1bnNpZ25lZCBvcHRMZXZlbCA9IDEpOworSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBwcmVwYXJlRm9yR2VuZXJhdGlvbihQcm9jZWR1cmUmLCB1bnNpZ25lZCBvcHRMZXZlbCA9
IGRlZmF1bHRPcHRMZXZlbCgpKTsKIAogLy8gVGhpcyB0YWtlcyBhIEIzOjpQcm9jZWR1cmUgdGhh
dCBoYXMgYmVlbiBwcmVwYXJlZCBmb3IgZ2VuZXJhdGlvbiAoaS5lLiBpdCBoYXMgYmVlbiBsb3dl
cmVkIHRvIEFpciBhbmQKIC8vIHRoZSBBaXIgaGFzIGJlZW4gcHJlcGFyZWQgZm9yIGdlbmVyYXRp
b24pIGFuZCBnZW5lcmF0ZXMgaXQuIFRoaXMgaXMgdGhlIGVxdWl2YWxlbnQgb2YgY2FsbGluZwpA
QCAtNDgsNyArNTAsNyBAQCBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGdlbmVyYXRlKFByb2NlZHVy
CiAvLyBUaGlzIHRha2VzIGEgQjM6OlByb2NlZHVyZSwgb3B0aW1pemVzIGl0IGluLXBsYWNlLCBh
bmQgbG93ZXJzIGl0IHRvIEFpci4gWW91IGNhbiB0aGVuIGdlbmVyYXRlCiAvLyB0aGUgQWlyIHRv
IG1hY2hpbmUgY29kZSB1c2luZyBBaXI6OnByZXBhcmVGb3JHZW5lcmF0aW9uKCkgYW5kIEFpcjo6
Z2VuZXJhdGUoKSBvbiB0aGUgUHJvY2VkdXJlJ3MKIC8vIGNvZGUoKS4KLXZvaWQgZ2VuZXJhdGVU
b0FpcihQcm9jZWR1cmUmLCB1bnNpZ25lZCBvcHRMZXZlbCA9IDEpOwordm9pZCBnZW5lcmF0ZVRv
QWlyKFByb2NlZHVyZSYsIHVuc2lnbmVkIG9wdExldmVsID0gZGVmYXVsdE9wdExldmVsKCkpOwog
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzSGVhcFJhbmdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNIZWFwUmFuZ2UuY3BwCShyZXZpc2lvbiAyMTQ2MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNIZWFwUmFuZ2UuY3BwCShub25leGlzdGVudCkKQEAgLTEsNDkgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiQjNIZWFwUmFuZ2UuaCIKLQotI2lmIEVOQUJMRShCM19KSVQp
Ci0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewotCi12b2lkIEhlYXBSYW5nZTo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotewotICAgIGlmICgqdGhpcyA9PSBIZWFwUmFuZ2Uo
KSkgewotICAgICAgICBvdXQucHJpbnQoIkJvdHRvbSIpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIGlmICgqdGhpcyA9PSB0b3AoKSkgewotICAgICAgICBvdXQucHJpbnQoIlRvcCIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG91dC5wcmludChtX2JlZ2luLCAiLi4uIiwgbV9l
bmQpOwotfQotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKLQotI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5oCShyZXZp
c2lvbiAyMTQ2MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNIZWFwUmFuZ2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMjcsOTAgKzI3LDE1IEBACiAKICNpZiBFTkFCTEUoQjNfSklUKQog
Ci0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNs
dWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKyNpbmNsdWRlIDx3dGYvUmFuZ2UuaD4KIAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAKIC8vIEFsaWFzIGFuYWx5c2lzIGluIEIzIGlzIGRv
bmUgYnkgY2hlY2tpbmcgaWYgdHdvIGludGVnZXIgcmFuZ2VzIG92ZXJsYXAuIFRoaXMgaXMgcG93
ZXJmdWwgZW5vdWdoCiAvLyB0byBiZSB1c2VkIGZvciBUQkFBLXN0eWxlIGFsaWFzIGFuYWx5c2lz
IHVzZWQgYnkgdGhlIERGRywgRlRMLCBhbmQgTExWTTogeW91IGp1c3QgdHVybiBlYWNoIG5vZGUK
IC8vIGluIHRoZSB0cmVlIG9mIGFic3RyYWN0IGhlYXBzIGludG8gYSBwcmUvcG9zdCByYW5nZS4K
LS8vCi0vLyBOb3RlIHRoYXQgdGhlICdiZWdpbicgaXMgaW5jbHVzaXZlLCB3aGlsZSB0aGUgJ2Vu
ZCcgaXMgZXhjbHVzaXZlLiBUaGVzZSB0d28gcmFuZ2VzIGFyZSBub24tCi0vLyBvdmVybGFwcGlu
ZzoKLS8vCi0vLyAgICAgcmFuZ2VBID0gMC4uLjgKLS8vICAgICByYW5nZUIgPSA4Li4uMTYKLQot
Y2xhc3MgSGVhcFJhbmdlIHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIHVuc2lnbmVkIFR5cGU7Ci0g
ICAgCi0gICAgSGVhcFJhbmdlKCkKLSAgICAgICAgOiBtX2JlZ2luKDApCi0gICAgICAgICwgbV9l
bmQoMCkKLSAgICB7Ci0gICAgfQotCi0gICAgZXhwbGljaXQgSGVhcFJhbmdlKHVuc2lnbmVkIHZh
bHVlKQotICAgICAgICA6IG1fYmVnaW4odmFsdWUpCi0gICAgICAgICwgbV9lbmQodmFsdWUgKyAx
KQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fZW5kID49IG1fYmVnaW4pOwotICAgIH0KLQotICAg
IEhlYXBSYW5nZSh1bnNpZ25lZCBiZWdpbiwgdW5zaWduZWQgZW5kKQotICAgICAgICA6IG1fYmVn
aW4oYmVnaW4pCi0gICAgICAgICwgbV9lbmQoZW5kKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1f
ZW5kID49IG1fYmVnaW4pOwotICAgICAgICBpZiAobV9iZWdpbiA9PSBtX2VuZCkgewotICAgICAg
ICAgICAgLy8gQ2Fub25pY2FsaXplIGVtcHR5IHJhbmdlcy4KLSAgICAgICAgICAgIG1fYmVnaW4g
PSAwOwotICAgICAgICAgICAgbV9lbmQgPSAwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3Rh
dGljIEhlYXBSYW5nZSB0b3AoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEhlYXBSYW5nZSgwLCBV
SU5UX01BWCk7Ci0gICAgfQotCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEhlYXBSYW5nZSYg
b3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9iZWdpbiA9PSBvdGhlci5tX2Jl
Z2luCi0gICAgICAgICAgICAmJiBtX2VuZCA9PSBvdGhlci5tX2VuZDsKLSAgICB9Ci0KLSAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgSGVhcFJhbmdlJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKLSAgICB9Ci0gICAgCi0gICAgSGVhcFJhbmdl
IG9wZXJhdG9yfChjb25zdCBIZWFwUmFuZ2UmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAg
cmV0dXJuIEhlYXBSYW5nZSgKLSAgICAgICAgICAgIHN0ZDo6bWluKG1fYmVnaW4sIG90aGVyLm1f
YmVnaW4pLAotICAgICAgICAgICAgc3RkOjptYXgobV9lbmQsIG90aGVyLm1fZW5kKSk7Ci0gICAg
fQotICAgIAotICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX2Jl
Z2luICE9IG1fZW5kOyB9Ci0KLSAgICB1bnNpZ25lZCBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1f
YmVnaW47IH0KLSAgICB1bnNpZ25lZCBlbmQoKSBjb25zdCB7IHJldHVybiBtX2VuZDsgfQotCi0g
ICAgYm9vbCBvdmVybGFwcyhjb25zdCBIZWFwUmFuZ2UmIG90aGVyKSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuIFdURjo6cmFuZ2VzT3ZlcmxhcChtX2JlZ2luLCBtX2VuZCwgb3RoZXIubV9i
ZWdpbiwgb3RoZXIubV9lbmQpOwotICAgIH0KLQotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICB1bnNpZ25lZCBt
X2JlZ2luOwotICAgIHVuc2lnbmVkIG1fZW5kOwotfTsKKwordHlwZWRlZiBSYW5nZTx1bnNpZ25l
ZD4gSGVhcFJhbmdlOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHJldmlzaW9uIDIxNDYxOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMzc5LDEwICszMzc5LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgfQogICAgIAotICAgIEluZGV4U2V0PFZhbHVlPiBtX2xvY2tl
ZDsgLy8gVGhlc2UgYXJlIHZhbHVlcyB0aGF0IHdpbGwgaGF2ZSBubyBUbXAgaW4gQWlyLgotICAg
IEluZGV4TWFwPFZhbHVlLCBUbXA+IG1fdmFsdWVUb1RtcDsgLy8gVGhlc2UgYXJlIHZhbHVlcyB0
aGF0IG11c3QgaGF2ZSBhIFRtcCBpbiBBaXIuIFdlIHNheSB0aGF0IGEgVmFsdWUqIHdpdGggYSBu
b24tbnVsbCBUbXAgaXMgInBpbm5lZCIuCi0gICAgSW5kZXhNYXA8VmFsdWUsIFRtcD4gbV9waGlU
b1RtcDsgLy8gRWFjaCBQaGkgZ2V0cyBpdHMgb3duIFRtcC4KLSAgICBJbmRleE1hcDxCMzo6QmFz
aWNCbG9jaywgQWlyOjpCYXNpY0Jsb2NrKj4gbV9ibG9ja1RvQmxvY2s7CisgICAgSW5kZXhTZXQ8
VmFsdWUqPiBtX2xvY2tlZDsgLy8gVGhlc2UgYXJlIHZhbHVlcyB0aGF0IHdpbGwgaGF2ZSBubyBU
bXAgaW4gQWlyLgorICAgIEluZGV4TWFwPFZhbHVlKiwgVG1wPiBtX3ZhbHVlVG9UbXA7IC8vIFRo
ZXNlIGFyZSB2YWx1ZXMgdGhhdCBtdXN0IGhhdmUgYSBUbXAgaW4gQWlyLiBXZSBzYXkgdGhhdCBh
IFZhbHVlKiB3aXRoIGEgbm9uLW51bGwgVG1wIGlzICJwaW5uZWQiLgorICAgIEluZGV4TWFwPFZh
bHVlKiwgVG1wPiBtX3BoaVRvVG1wOyAvLyBFYWNoIFBoaSBnZXRzIGl0cyBvd24gVG1wLgorICAg
IEluZGV4TWFwPEIzOjpCYXNpY0Jsb2NrKiwgQWlyOjpCYXNpY0Jsb2NrKj4gbV9ibG9ja1RvQmxv
Y2s7CiAgICAgSGFzaE1hcDxCMzo6U3RhY2tTbG90KiwgQWlyOjpTdGFja1Nsb3QqPiBtX3N0YWNr
VG9TdGFjazsKICAgICBIYXNoTWFwPFZhcmlhYmxlKiwgVG1wPiBtX3ZhcmlhYmxlVG9UbXA7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01vdmVDb25zdGFudHMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01vdmVDb25zdGFudHMuY3BwCShy
ZXZpc2lvbiAyMTQ2MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNb3ZlQ29uc3Rh
bnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCBwcml2YXRlOgogICAgIHsK
ICAgICAgICAgRG9taW5hdG9ycyYgZG9taW5hdG9ycyA9IG1fcHJvYy5kb21pbmF0b3JzKCk7CiAg
ICAgICAgIEhhc2hNYXA8VmFsdWVLZXksIFZhbHVlKj4gdmFsdWVGb3JDb25zdGFudDsKLSAgICAg
ICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgVmVjdG9yPFZhbHVlKj4+IG1hdGVyaWFsaXphdGlvbnMo
bV9wcm9jLnNpemUoKSk7CisgICAgICAgIEluZGV4TWFwPEJhc2ljQmxvY2sqLCBWZWN0b3I8VmFs
dWUqPj4gbWF0ZXJpYWxpemF0aW9ucyhtX3Byb2Muc2l6ZSgpKTsKIAogICAgICAgICAvLyBXZSBk
ZXRlcm1pbmUgd2hlcmUgdGhpbmdzIGdldCBtYXRlcmlhbGl6ZWQgYmFzZWQgb24gd2hlcmUgdGhl
eSBhcmUgdXNlZC4KICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvYykgewpA
QCAtMjc0LDcgKzI3NCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBt
X2NvbnN0VGFibGUpCiAgICAgICAgICAgICBtX2RhdGFTZWN0aW9uW2VudHJ5LnZhbHVlXSA9IGVu
dHJ5LmtleS52YWx1ZSgpOwogCi0gICAgICAgIEluZGV4U2V0PFZhbHVlPiBvZmZMaW1pdHM7Cisg
ICAgICAgIEluZGV4U2V0PFZhbHVlKj4gb2ZmTGltaXRzOwogICAgICAgICBmb3IgKEJhc2ljQmxv
Y2sqIGJsb2NrIDogbV9wcm9jKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHZhbHVlSW5k
ZXggPSAwOyB2YWx1ZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKyt2YWx1ZUluZGV4KSB7CiAgICAg
ICAgICAgICAgICAgU3RhY2ttYXBWYWx1ZSogdmFsdWUgPSBibG9jay0+YXQodmFsdWVJbmRleCkt
PmFzPFN0YWNrbWFwVmFsdWU+KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQ
aGlDaGlsZHJlbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Bo
aUNoaWxkcmVuLmgJKHJldmlzaW9uIDIxNDYxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1BoaUNoaWxkcmVuLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2OCw3ICsxNjgsNyBAQCBwdWJs
aWM6CiAgICAgY29uc3QgVmVjdG9yPFZhbHVlKiwgOD4mIHBoaXMoKSBjb25zdCB7IHJldHVybiBt
X3BoaXM7IH0KIAogcHJpdmF0ZToKLSAgICBJbmRleE1hcDxWYWx1ZSwgVmVjdG9yPFVwc2lsb25W
YWx1ZSo+PiBtX3Vwc2lsb25zOworICAgIEluZGV4TWFwPFZhbHVlKiwgVmVjdG9yPFVwc2lsb25W
YWx1ZSo+PiBtX3Vwc2lsb25zOwogICAgIFZlY3RvcjxWYWx1ZSosIDg+IG1fcGhpczsKIH07CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkocmV2aXNpb24g
MjE0NjE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjA0LDcgKzIwNCw3IEBAIHZvaWQgUHJvY2VkdXJlOjppbnZhbGlkYXRl
Q0ZHKCkKIAogdm9pZCBQcm9jZWR1cmU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsK
LSAgICBJbmRleFNldDxWYWx1ZT4gdmFsdWVzSW5CbG9ja3M7CisgICAgSW5kZXhTZXQ8VmFsdWUq
PiB2YWx1ZXNJbkJsb2NrczsKICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogKnRoaXMpIHsK
ICAgICAgICAgb3V0LnByaW50KGRlZXBEdW1wKCp0aGlzLCBibG9jaykpOwogICAgICAgICB2YWx1
ZXNJbkJsb2Nrcy5hZGRBbGwoKmJsb2NrKTsKQEAgLTI2Myw3ICsyNjMsNyBAQCB2b2lkIFByb2Nl
ZHVyZTo6ZGVsZXRlVmFsdWUoVmFsdWUqIHZhbHVlCiAKIHZvaWQgUHJvY2VkdXJlOjpkZWxldGVP
cnBoYW5zKCkKIHsKLSAgICBJbmRleFNldDxWYWx1ZT4gdmFsdWVzSW5CbG9ja3M7CisgICAgSW5k
ZXhTZXQ8VmFsdWUqPiB2YWx1ZXNJbkJsb2NrczsKICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2Nr
IDogKnRoaXMpCiAgICAgICAgIHZhbHVlc0luQmxvY2tzLmFkZEFsbCgqYmxvY2spOwogCkBAIC0z
NTEsNyArMzUxLDcgQEAgVmFsdWUqIFByb2NlZHVyZTo6YWRkVmFsdWVJbXBsKFZhbHVlKiB2YQog
CiB2b2lkIFByb2NlZHVyZTo6c2V0QmxvY2tPcmRlckltcGwoVmVjdG9yPEJhc2ljQmxvY2sqPiYg
YmxvY2tzKQogewotICAgIEluZGV4U2V0PEJhc2ljQmxvY2s+IGJsb2Nrc1NldDsKKyAgICBJbmRl
eFNldDxCYXNpY0Jsb2NrKj4gYmxvY2tzU2V0OwogICAgIGJsb2Nrc1NldC5hZGRBbGwoYmxvY2tz
KTsKIAogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiAqdGhpcykgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlRG91YmxlVG9GbG9hdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlRG91YmxlVG9GbG9hdC5jcHAJKHJl
dmlzaW9uIDIxNDYxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZURvdWJs
ZVRvRmxvYXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjQsMTggKzQyNCwxOCBAQCBwcml2YXRl
OgogCiAgICAgLy8gU2V0IG9mIGFsbCB0aGUgRG91YmxlIHZhbHVlcyB0aGF0IGFyZSBhY3R1YWxs
eSB1c2VkIGFzIERvdWJsZS4KICAgICAvLyBDb252ZXJ0aW5nIGFueSBvZiB0aGVtIHRvIEZsb2F0
IHdvdWxkIGxvc2UgcHJlY2lzaW9uLgotICAgIEluZGV4U2V0PFZhbHVlPiBtX3ZhbHVlc1VzZWRB
c0RvdWJsZTsKKyAgICBJbmRleFNldDxWYWx1ZSo+IG1fdmFsdWVzVXNlZEFzRG91YmxlOwogCiAg
ICAgLy8gU2V0IG9mIGFsbCB0aGUgUGhpIG9mIHR5cGUgRG91YmxlIHRoYXQgcmVhbGx5IGNvbnRh
aW5zIGEgRG91YmxlLgogICAgIC8vIEFueSBEb3VibGUgUGhpIG5vdCBpbiB0aGUgc2V0IGNhbiBi
ZSBjb252ZXJ0ZWQgdG8gRmxvYXQgd2l0aG91dCBsb3NpbmcgcHJlY2lzaW9uLgotICAgIEluZGV4
U2V0PFZhbHVlPiBtX3BoaXNDb250YWluaW5nRG91YmxlOworICAgIEluZGV4U2V0PFZhbHVlKj4g
bV9waGlzQ29udGFpbmluZ0RvdWJsZTsKIAogICAgIC8vIEFueSB2YWx1ZSB0aGF0IHdhcyBjb252
ZXJ0ZWQgZnJvbSBwcm9kdWNpbmcgYSBEb3VibGUgdG8gcHJvZHVjaW5nIGEgRmxvYXQuCiAgICAg
Ly8gVGhpcyBzZXQgZG9lcyBub3QgaW5jbHVkZSBQaGktVXBzaWxvbnMuCi0gICAgSW5kZXhTZXQ8
VmFsdWU+IG1fY29udmVydGVkVmFsdWU7CisgICAgSW5kZXhTZXQ8VmFsdWUqPiBtX2NvbnZlcnRl
ZFZhbHVlOwogCiAgICAgLy8gQW55IHZhbHVlIHRoYXQgcHJldmlvdXNseSBwcm9kdWNlZCBEb3Vi
bGUgYW5kIG5vdyBwcm9kdWNlIEZsb2F0LgotICAgIEluZGV4U2V0PFZhbHVlPiBtX2NvbnZlcnRl
ZFBoaXM7CisgICAgSW5kZXhTZXQ8VmFsdWUqPiBtX2NvbnZlcnRlZFBoaXM7CiB9OwogCiB2b2lk
IHByaW50R3JhcGhJZkNvbnZlcnRpbmcoUHJvY2VkdXJlJiBwcm9jZWR1cmUpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCShyZXZpc2lvbiAy
MTQ2MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIzOTIsNyArMjM5Miw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lk
IGtpbGxEZWFkQ29kZSgpCiAgICAgewotICAgICAgICBHcmFwaE5vZGVXb3JrbGlzdDxWYWx1ZSos
IEluZGV4U2V0PFZhbHVlPj4gd29ya2xpc3Q7CisgICAgICAgIEdyYXBoTm9kZVdvcmtsaXN0PFZh
bHVlKiwgSW5kZXhTZXQ8VmFsdWUqPj4gd29ya2xpc3Q7CiAgICAgICAgIFZlY3RvcjxVcHNpbG9u
VmFsdWUqLCA2ND4gdXBzaWxvbnM7CiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBt
X3Byb2MpIHsKICAgICAgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogKmJsb2NrKSB7CkBAIC0y
NDI5LDcgKzI0MjksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAKLSAgICAgICAgSW5kZXhTZXQ8VmFyaWFibGU+IGxpdmVWYXJpYWJsZXM7CisgICAgICAg
IEluZGV4U2V0PFZhcmlhYmxlKj4gbGl2ZVZhcmlhYmxlczsKICAgICAgICAgCiAgICAgICAgIGZv
ciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2MpIHsKICAgICAgICAgICAgIHNpemVfdCBzb3Vy
Y2VJbmRleCA9IDA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTU0FDYWxjdWxh
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU1NBQ2FsY3Vs
YXRvci5oCShyZXZpc2lvbiAyMTQ2MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
U0FDYWxjdWxhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTU2LDcgKzE1Niw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIFZlY3RvcjxEZWYqPiBtX3BoaXM7CiAgICAgfTsKICAgICAKLSAgICBJbmRleE1hcDxC
YXNpY0Jsb2NrLCBCbG9ja0RhdGE+IG1fZGF0YTsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwg
QmxvY2tEYXRhPiBtX2RhdGE7CiAKICAgICBEb21pbmF0b3JzKiBtX2RvbWluYXRvcnMgeyBudWxs
cHRyIH07CiAgICAgUHJvY2VkdXJlJiBtX3Byb2M7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNVc2VDb3VudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNVc2VDb3VudHMuaAkocmV2aXNpb24gMjE0NjE4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVXNlQ291bnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OCw3ICs0OCw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIHVuc2lnbmVkIG51bVVzaW5nSW5zdHJ1Y3Rpb25zIHsgMCB9OwogICAg
IH07CiAgICAgCi0gICAgSW5kZXhNYXA8VmFsdWUsIENvdW50cz4gbV9jb3VudHM7CisgICAgSW5k
ZXhNYXA8VmFsdWUqLCBDb3VudHM+IG1fY291bnRzOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkocmV2aXNpb24gMjE0
NjE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTExNyw3ICsxMTcsNyBAQCBTdGF0aWNMb2NrIGNyYXNoTG9jazsKICAgICAgICAgQ1JB
U0goKTsgXAogICAgIH0gd2hpbGUgKGZhbHNlKQogCi1zdGQ6OnVuaXF1ZV9wdHI8Q29tcGlsYXRp
b24+IGNvbXBpbGVQcm9jKFByb2NlZHVyZSYgcHJvY2VkdXJlLCB1bnNpZ25lZCBvcHRMZXZlbCA9
IDEpCitzdGQ6OnVuaXF1ZV9wdHI8Q29tcGlsYXRpb24+IGNvbXBpbGVQcm9jKFByb2NlZHVyZSYg
cHJvY2VkdXJlLCB1bnNpZ25lZCBvcHRMZXZlbCA9IGRlZmF1bHRPcHRMZXZlbCgpKQogewogICAg
IHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPENvbXBpbGF0aW9uPihCMzo6Y29tcGlsZShwcm9jZWR1
cmUsIG9wdExldmVsKSk7CiB9CkBAIC05ODcsNiArOTg3LDcgQEAgdm9pZCB0ZXN0TXVsTG9hZFR3
aWNlKCkKIAogICAgIHRlc3QoMCk7CiAgICAgdGVzdCgxKTsKKyAgICB0ZXN0KDIpOwogfQogCiB2
b2lkIHRlc3RNdWxBZGRBcmdzTGVmdCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFw
aENvbG9yaW5nLmNwcAkocmV2aXNpb24gMjE0NjE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoQjNfSklUKQogCiAjaW5jbHVkZSAi
QWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmgiCiAjaW5j
bHVkZSAiQWlySW5zZXJ0aW9uU2V0LmgiCiAjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKICNp
bmNsdWRlICJBaXJMaXZlbmVzcy5oIgpAQCAtMTU4NSw2ICsxNTg2LDkgQEAgcHJvdGVjdGVkOgog
ICAgICAgICBtX2NvYWxlc2NpbmdDYW5kaWRhdGVzLmNsZWFyKCk7CiAgICAgICAgIG1fd29ya2xp
c3RNb3Zlcy5jbGVhcigpOwogCisgICAgICAgIC8vIEZJWE1FOiBJdCBzZWVtcyBsaWtlIHdlIGRv
bid0IG5lZWQgdG8gcmVjb21wdXRlIGxpdmVuZXNzLiBXZSBqdXN0IG5lZWQgdG8gdXBkYXRlIGl0
cyBkYXRhCisgICAgICAgIC8vIHN0cnVjdHVyZXMgc28gdGhhdCBpdCBrbm93cyB0aGF0IHRoZSBu
ZXdseSBpbnRyb2R1Y2VkIHRlbXBvcmFyaWVzIGFyZSBub3QgbGl2ZSBhdCBhbnkgYmFzaWMKKyAg
ICAgICAgLy8gYmxvY2sgYm91bmRhcnkuIFRoaXMgc2hvdWxkIHRyaXZpYWxseSBiZSB0cnVlIGZv
ciBub3cuCiAgICAgICAgIFRtcExpdmVuZXNzPGJhbms+IGxpdmVuZXNzKG1fY29kZSk7CiAgICAg
ICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsKICAgICAgICAgICAgIHR5cGVu
YW1lIFRtcExpdmVuZXNzPGJhbms+OjpMb2NhbENhbGMgbG9jYWxDYWxjKGxpdmVuZXNzLCBibG9j
ayk7CkBAIC0xNzk4LDcgKzE4MDIsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fbnVtSXRlcmF0aW9u
cyA9IDA7CiAgICAgICAgIGFsbG9jYXRlT25CYW5rPEZQPigpOwogCi0gICAgICAgIGZpeFNwaWxs
c0FmdGVyVGVybWluYWxzKCk7CisgICAgICAgIGZpeFNwaWxsc0FmdGVyVGVybWluYWxzKG1fY29k
ZSk7CiAKICAgICAgICAgaWYgKHJlcG9ydFN0YXRzKQogICAgICAgICAgICAgZGF0YUxvZygiTnVt
IGl0ZXJhdGlvbnMgPSAiLCBtX251bUl0ZXJhdGlvbnMsICJcbiIpOwpAQCAtMTk1NCw3ICsxOTU4
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBpbnN0
LmZvckVhY2hUbXBGYXN0KFsmXSAoVG1wJiB0bXApIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KHRtcC5pc1JlZygpIHx8IHRtcC5pc0dQKCkgPT0gKGJhbmsgIT0gR1ApKQorICAgICAgICAgICAg
ICAgICAgICBpZiAodG1wLmlzUmVnKCkgfHwgdG1wLmJhbmsoKSAhPSBiYW5rKQogICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICAgICAgICAgIFRtcCBhbGlhc1Rt
cCA9IGFsbG9jYXRvci5nZXRBbGlhcyh0bXApOwpAQCAtMjEzMiw3ICsyMTM2LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgLy8gb3RoZXIuIEFzIHdlbGwsIHdlIG5lZWQgdGhpcyBp
ZiB0aGUgcHJldmlvdXMgaW5zdHJ1Y3Rpb24gaGFkIGFueSBsYXRlIGVmZmVjdHMsCiAgICAgICAg
ICAgICAgICAgICAgIC8vIHNpbmNlIG90aGVyd2lzZSB0aGUgc2NyYXRjaCB3b3VsZCBhcHBlYXIg
dG8gaW50ZXJmZXJlIHdpdGggdGhvc2UuIE9uIHRoZSBvdGhlcgogICAgICAgICAgICAgICAgICAg
ICAvLyBoYW5kLCB0aGUgbGF0ZSB1c2UgYWRkZWQgYXQgdGhlIGVuZCBvZiB0aGlzIHNwaWxsIG1v
dmUgKHByZXZpb3VzbHkgaXQgd2FzIGp1c3QgYQotICAgICAgICAgICAgICAgICAgICAvLyBsYXRl
IGRlZikgZG9lc24ndCBjaGFuZ2UgdGhlIHBhZGRpbmcgc2l0dWF0aW9uOiB0aGUgbGF0ZSBkZWYg
d291bGQgaGF2ZSBhbHJlYWR5CisgICAgICAgICAgICAgICAgICAgIC8vIGxhdGUgZGVmKSBkb2Vz
bid0IGNoYW5nZSB0aGUgcGFkZGluZyBzaXR1YXRpb24uOiB0aGUgbGF0ZSBkZWYgd291bGQgaGF2
ZSBhbHJlYWR5CiAgICAgICAgICAgICAgICAgICAgIC8vIGNhdXNlZCBpdCB0byByZXBvcnQgaGFz
TGF0ZVVzZU9yRGVmIGluIEluc3Q6Om5lZWRzUGFkZGluZy4KICAgICAgICAgICAgICAgICAgICAg
aW5zZXJ0aW9uU2V0Lmluc2VydChpbnN0SW5kZXgsIE5vcCwgaW5zdC5vcmlnaW4pOwogICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTIxNjksOSArMjE3MywxMiBAQCBwcml2YXRlOgog
CiAgICAgICAgICAgICAgICAgICAgIHRtcCA9IG1fY29kZS5uZXdUbXAoYmFuayk7CiAgICAgICAg
ICAgICAgICAgICAgIHVuc3BpbGxhYmxlVG1wcy5hZGQoQWJzb2x1dGVUbXBNYXBwZXI8YmFuaz46
OmFic29sdXRlSW5kZXgodG1wKSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICBpZiAocm9sZSA9PSBBcmc6OlNjcmF0Y2gpCisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CiAKICAgICAgICAgICAgICAgICAgICAgQXJnIGFyZyA9IEFyZzo6c3RhY2soc3Rh
Y2tTbG90RW50cnktPnZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlV
c2Uocm9sZSkgJiYgcm9sZSAhPSBBcmc6OlNjcmF0Y2gpCisgICAgICAgICAgICAgICAgICAgIGlm
IChBcmc6OmlzQW55VXNlKHJvbGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9u
U2V0Lmluc2VydChpbnN0SW5kZXgsIG1vdmUsIGluc3Qub3JpZ2luLCBhcmcsIHRtcCk7CiAgICAg
ICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzQW55RGVmKHJvbGUpKQogICAgICAgICAgICAgICAg
ICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydChpbnN0SW5kZXggKyAxLCBtb3ZlLCBpbnN0Lm9y
aWdpbiwgdG1wLCBhcmcpOwpAQCAtMjE4Nyw2NiArMjE5NCw2IEBAIHByaXZhdGU6CiAgICAgICAg
IH0KICAgICB9CiAKLSAgICB2b2lkIGZpeFNwaWxsc0FmdGVyVGVybWluYWxzKCkKLSAgICB7Ci0g
ICAgICAgIC8vIEJlY2F1c2UgdGhlcmUgbWF5IGJlIHRlcm1pbmFscyB0aGF0IHByb2R1Y2UgdmFs
dWVzLCBJUkMgbWF5Ci0gICAgICAgIC8vIHdhbnQgdG8gc3BpbGwgdGhvc2UgdGVybWluYWxzLiBJ
dCdsbCBoYXBwZW4gdG8gc3BpbGwgaXQgYWZ0ZXIKLSAgICAgICAgLy8gdGhlIHRlcm1pbmFsLiBJ
ZiB3ZSBsZWZ0IHRoZSBncmFwaCBpbiB0aGlzIHN0YXRlLCBpdCdkIGJlIGludmFsaWQKLSAgICAg
ICAgLy8gYmVjYXVzZSBhIHRlcm1pbmFsIG11c3QgYmUgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24gaW4g
YSBibG9jay4KLSAgICAgICAgLy8gV2UgZml4IHRoYXQgaGVyZS4KLQotICAgICAgICBJbnNlcnRp
b25TZXQgaW5zZXJ0aW9uU2V0KG1fY29kZSk7Ci0KLSAgICAgICAgYm9vbCBhZGRlZEJsb2NrcyA9
IGZhbHNlOwotCi0gICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIHRlcm1pbmFsSW5kZXggPSBibG9jay0+c2l6ZSgpOwotICAgICAg
ICAgICAgYm9vbCBmb3VuZFRlcm1pbmFsID0gZmFsc2U7Ci0gICAgICAgICAgICB3aGlsZSAodGVy
bWluYWxJbmRleC0tKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGJsb2NrLT5hdCh0ZXJtaW5hbElu
ZGV4KS5pc1Rlcm1pbmFsKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZm91bmRUZXJtaW5hbCA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoZm91bmRUZXJtaW5hbCwgZm91
bmRUZXJtaW5hbCk7Ci0KLSAgICAgICAgICAgIGlmICh0ZXJtaW5hbEluZGV4ID09IGJsb2NrLT5z
aXplKCkgLSAxKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAvLyBU
aGVyZSBtdXN0IGJlIGluc3RydWN0aW9ucyBhZnRlciB0aGUgdGVybWluYWwgYmVjYXVzZSBpdCdz
IG5vdCB0aGUgbGFzdCBpbnN0cnVjdGlvbi4KLSAgICAgICAgICAgIEFTU0VSVCh0ZXJtaW5hbElu
ZGV4IDwgYmxvY2stPnNpemUoKSAtIDEpOwotICAgICAgICAgICAgVmVjdG9yPEluc3QsIDE+IGlu
c3RzVG9Nb3ZlOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdGVybWluYWxJbmRleCAr
IDE7IGkgPCBibG9jay0+c2l6ZSgpOyBpKyspCi0gICAgICAgICAgICAgICAgaW5zdHNUb01vdmUu
YXBwZW5kKGJsb2NrLT5hdChpKSk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpbnN0c1Rv
TW92ZS5zaXplKCkpOwotCi0gICAgICAgICAgICBmb3IgKEZyZXF1ZW50ZWRCbG9jayYgZnJlcXVl
bnRlZFN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKLSAgICAgICAgICAgICAgICBC
YXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBmcmVxdWVudGVkU3VjY2Vzc29yLmJsb2NrKCk7Ci0gICAg
ICAgICAgICAgICAgLy8gSWYgc3VjY2Vzc29yJ3Mgb25seSBwcmVkZWNlc3NvciBpcyBibG9jaywg
d2UgY2FuIHBsYW50IHRoZSBzcGlsbCBpbnNpZGUKLSAgICAgICAgICAgICAgICAvLyB0aGUgc3Vj
Y2Vzc29yLiBPdGhlcndpc2UsIHdlIG11c3Qgc3BsaXQgdGhlIGNyaXRpY2FsIGVkZ2UgYW5kIGNy
ZWF0ZQotICAgICAgICAgICAgICAgIC8vIGEgbmV3IGJsb2NrIGZvciB0aGUgc3BpbGwuCi0gICAg
ICAgICAgICAgICAgaWYgKHN1Y2Nlc3Nvci0+bnVtUHJlZGVjZXNzb3JzKCkgPT0gMSkgewotICAg
ICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0SW5zdHMoMCwgaW5zdHNUb01vdmUp
OwotICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShzdWNjZXNzb3IpOwot
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGFkZGVkQmxvY2tz
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHByb2JhYmx5IHdhbnQg
YmV0dGVyIGJsb2NrIG9yZGVyaW5nIGhlcmUuCi0gICAgICAgICAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIG5ld0Jsb2NrID0gbV9jb2RlLmFkZEJsb2NrKCk7Ci0gICAgICAgICAgICAgICAgICAgIGZv
ciAoY29uc3QgSW5zdCYgaW5zdCA6IGluc3RzVG9Nb3ZlKQotICAgICAgICAgICAgICAgICAgICAg
ICAgbmV3QmxvY2stPmFwcGVuZEluc3QoaW5zdCk7Ci0gICAgICAgICAgICAgICAgICAgIG5ld0Js
b2NrLT5hcHBlbmRJbnN0KEluc3QoSnVtcCwgaW5zdHNUb01vdmUubGFzdCgpLm9yaWdpbikpOwot
ICAgICAgICAgICAgICAgICAgICBuZXdCbG9jay0+c3VjY2Vzc29ycygpLmFwcGVuZChzdWNjZXNz
b3IpOwotICAgICAgICAgICAgICAgICAgICBmcmVxdWVudGVkU3VjY2Vzc29yLmJsb2NrKCkgPSBu
ZXdCbG9jazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGJsb2NrLT5yZXNpemUodGVybWluYWxJbmRleCArIDEpOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKGFkZGVkQmxvY2tzKQotICAgICAgICAgICAgbV9jb2RlLnJlc2V0UmVhY2hhYmlsaXR5KCk7
Ci0gICAgfQotCiAgICAgQ29kZSYgbV9jb2RlOwogICAgIFRtcFdpZHRoIG1fdG1wV2lkdGg7CiAg
ICAgVXNlQ291bnRzPFRtcD4mIG1fdXNlQ291bnRzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5
TGluZWFyU2Nhbi5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw1OTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyQWxsb2NhdGVSZWdpc3Rl
cnNCeUxpbmVhclNjYW4uaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJB
cmdJbmxpbmVzLmgiCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckZpeFNwaWxs
c0FmdGVyVGVybWluYWxzLmgiCisjaW5jbHVkZSAiQWlyUGhhc2VJbnNlcnRpb25TZXQuaCIKKyNp
bmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgorI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgiCisjaW5j
bHVkZSAiQWlyUGFkSW50ZXJmZXJlbmNlLmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgor
I2luY2x1ZGUgIkFpclJlZ0xpdmVuZXNzLmgiCisjaW5jbHVkZSAiQWlyVG1wSW5saW5lcy5oIgor
I2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorI2luY2x1ZGUgPHd0Zi9SYW5nZS5oPgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK25hbWVzcGFjZSB7
CisKK05PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggTkVWRVJfSU5MSU5FIHZvaWQgY3Jhc2goKQorewor
ICAgIENSQVNIKCk7Cit9CisKKyN1bmRlZiBSRUxFQVNFX0FTU0VSVAorI2RlZmluZSBSRUxFQVNF
X0FTU0VSVChhc3NlcnRpb24pIGRvIHsgXAorICAgIGlmICghKGFzc2VydGlvbikpIHsgXAorICAg
ICAgICBXVEZSZXBvcnRBc3NlcnRpb25GYWlsdXJlKF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BS
RVRUWV9GVU5DVElPTiwgI2Fzc2VydGlvbik7IFwKKyAgICAgICAgY3Jhc2goKTsgXAorICAgIH0g
XAorfSB3aGlsZSAoMCkKKworYm9vbCB2ZXJib3NlKCkgeyByZXR1cm4gT3B0aW9uczo6YWlyTGlu
ZWFyU2NhblZlcmJvc2UoKTsgfQorCisvLyBQaGFzZSBjb25zdGFudHMgd2UgdXNlIGZvciB0aGUg
UGhhc2VJbnNlcnRpb25TZXQuCitjb25zdCB1bnNpZ25lZCBmaXJzdFBoYXNlID0gMDsKK2NvbnN0
IHVuc2lnbmVkIHNlY29uZFBoYXNlID0gMTsKKwordHlwZWRlZiBSYW5nZTxzaXplX3Q+IEludGVy
dmFsOworCitzdHJ1Y3QgVG1wRGF0YSB7CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0CisgICAgeworICAgICAgICBvdXQucHJpbnQoIntpbnRlcnZhbCA9ICIsIGludGVydmFs
LCAiLCBzcGlsbGVkID0gIiwgcG9pbnRlckR1bXAoc3BpbGxlZCksICIsIGFzc2lnbmVkID0gIiwg
YXNzaWduZWQsICIsIGlzVW5zcGlsbGFibGUgPSAiLCBpc1Vuc3BpbGxhYmxlLCAiLCBwb3NzaWJs
ZVJlZ3MgPSAiLCBwb3NzaWJsZVJlZ3MsICIsIGRpZEJ1aWxkUG9zc2libGVSZWdzID0gIiwgZGlk
QnVpbGRQb3NzaWJsZVJlZ3MsICJ9Iik7CisgICAgfQorICAgIAorICAgIHZvaWQgdmFsaWRhdGUo
KQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIShzcGlsbGVkICYmIGFzc2lnbmVkKSk7
CisgICAgfQorICAgIAorICAgIEludGVydmFsIGludGVydmFsOworICAgIFN0YWNrU2xvdCogc3Bp
bGxlZCB7IG51bGxwdHIgfTsKKyAgICBSZWdpc3RlclNldCBwb3NzaWJsZVJlZ3M7CisgICAgUmVn
IGFzc2lnbmVkOworICAgIGJvb2wgaXNVbnNwaWxsYWJsZSB7IGZhbHNlIH07CisgICAgYm9vbCBk
aWRCdWlsZFBvc3NpYmxlUmVncyB7IGZhbHNlIH07Cit9OworCitzdHJ1Y3QgQ2xvYmJlciB7Cisg
ICAgQ2xvYmJlcigpCisgICAgeworICAgIH0KKyAgICAKKyAgICBDbG9iYmVyKHNpemVfdCBpbmRl
eCwgUmVnaXN0ZXJTZXQgcmVncykKKyAgICAgICAgOiBpbmRleChpbmRleCkKKyAgICAgICAgLCBy
ZWdzKHJlZ3MpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIG91dC5wcmludChpbmRleCwgIjoiLCByZWdzKTsK
KyAgICB9CisgICAgCisgICAgc2l6ZV90IGluZGV4IHsgMCB9OworICAgIFJlZ2lzdGVyU2V0IHJl
Z3M7Cit9OworCit0ZW1wbGF0ZTxCYW5rIGJhbms+CitjbGFzcyBMaW5lYXJTY2FuIHsKK3B1Ymxp
YzoKKyAgICBMaW5lYXJTY2FuKENvZGUmIGNvZGUpCisgICAgICAgIDogbV9jb2RlKGNvZGUpCisg
ICAgICAgICwgbV9zdGFydEluZGV4KGNvZGUuc2l6ZSgpKQorICAgICAgICAsIG1fbWFwKGNvZGUu
bnVtVG1wcyhiYW5rKSkKKyAgICAgICAgLCBtX2luc2VydGlvblNldHMoY29kZS5zaXplKCkpCisg
ICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIHJ1bigpCisgICAgeworICAgICAgICBidWlsZFJl
Z2lzdGVyU2V0KCk7CisgICAgICAgIGJ1aWxkSW5kaWNlcygpOworICAgICAgICBidWlsZEludGVy
dmFscygpOworICAgICAgICBpZiAoc2hvdWxkU3BpbGxFdmVyeXRoaW5nKCkpIHsKKyAgICAgICAg
ICAgIHNwaWxsRXZlcnl0aGluZygpOworICAgICAgICAgICAgZW1pdFNwaWxsQ29kZSgpOworICAg
ICAgICB9CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIHByZXBhcmVJbnRlcnZhbHMo
KTsKKyAgICAgICAgICAgIGF0dGVtcHRTY2FuKCk7CisgICAgICAgICAgICBpZiAoIW1fZGlkU3Bp
bGwpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBlbWl0U3BpbGxDb2RlKCk7
CisgICAgICAgIH0KKyAgICAgICAgaW5zZXJ0U3BpbGxDb2RlKCk7CisgICAgICAgIGFzc2lnblJl
Z2lzdGVycygpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgdm9pZCBidWlsZFJlZ2lzdGVy
U2V0KCkKKyAgICB7CisgICAgICAgIG1fcmVnaXN0ZXJzID0gbV9jb2RlLnJlZ3NJblByaW9yaXR5
T3JkZXIoYmFuayk7CisgICAgICAgIG1fcmVnaXN0ZXJTZXQuc2V0QWxsKG1fcmVnaXN0ZXJzKTsK
KyAgICB9CisKKyAgICB2b2lkIGJ1aWxkSW5kaWNlcygpCisgICAgeworICAgICAgICBzaXplX3Qg
aW5kZXggPSAwOworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7Cisg
ICAgICAgICAgICBtX3N0YXJ0SW5kZXhbYmxvY2tdID0gaW5kZXg7CisgICAgICAgICAgICBpbmRl
eCArPSBibG9jay0+c2l6ZSgpICogMjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBzaXpl
X3QgaW5kZXhPZkhlYWQoQmFzaWNCbG9jayogYmxvY2spCisgICAgeworICAgICAgICByZXR1cm4g
bV9zdGFydEluZGV4W2Jsb2NrXTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IGluZGV4T2ZUYWls
KEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGluZGV4T2ZIZWFkKGJs
b2NrKSArIGJsb2NrLT5zaXplKCkgKiAyOworICAgIH0KKyAgICAKKyAgICBJbnRlcnZhbCBpbnRl
cnZhbChzaXplX3QgaW5kZXhPZkVhcmx5LCBBcmc6OlRpbWluZyB0aW1pbmcpCisgICAgeworICAg
ICAgICBzd2l0Y2ggKHRpbWluZykgeworICAgICAgICBjYXNlIEFyZzo6T25seUVhcmx5OgorICAg
ICAgICAgICAgcmV0dXJuIEludGVydmFsKGluZGV4T2ZFYXJseSk7CisgICAgICAgIGNhc2UgQXJn
OjpPbmx5TGF0ZToKKyAgICAgICAgICAgIHJldHVybiBJbnRlcnZhbChpbmRleE9mRWFybHkgKyAx
KTsKKyAgICAgICAgY2FzZSBBcmc6OkVhcmx5QW5kTGF0ZToKKyAgICAgICAgICAgIHJldHVybiBJ
bnRlcnZhbChpbmRleE9mRWFybHksIGluZGV4T2ZFYXJseSArIDIpOworICAgICAgICB9CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gSW50ZXJ2YWwoKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBidWlsZEludGVydmFscygpCisgICAgeworICAgICAgICBUbXBM
aXZlbmVzczxiYW5rPiBsaXZlbmVzcyhtX2NvZGUpOworICAgICAgICAKKyAgICAgICAgZm9yIChC
YXNpY0Jsb2NrKiBibG9jayA6IG1fY29kZSkgeworICAgICAgICAgICAgc2l6ZV90IGluZGV4T2ZI
ZWFkID0gdGhpcy0+aW5kZXhPZkhlYWQoYmxvY2spOworICAgICAgICAgICAgc2l6ZV90IGluZGV4
T2ZUYWlsID0gdGhpcy0+aW5kZXhPZlRhaWwoYmxvY2spOworICAgICAgICAgICAgaWYgKHZlcmJv
c2UoKSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2coIkF0IGJsb2NrICIsIHBvaW50ZXJEdW1w
KGJsb2NrKSwgIlxuIik7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiICBpbmRleE9mSGVhZCA9
ICIsIGluZGV4T2ZIZWFkLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgIGlkbmV4
T2ZUYWlsID0gIiwgaW5kZXhPZlRhaWwsICJcbiIpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZm9yIChUbXAgdG1wIDogbGl2ZW5lc3MubGl2ZUF0SGVhZChibG9jaykpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoIXRtcC5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICBtX21hcFt0bXBd
LmludGVydmFsIHw9IEludGVydmFsKGluZGV4T2ZIZWFkKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGZvciAoVG1wIHRtcCA6IGxpdmVuZXNzLmxpdmVBdFRhaWwoYmxvY2spKSB7CisgICAg
ICAgICAgICAgICAgaWYgKCF0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9tYXBb
dG1wXS5pbnRlcnZhbCB8PSBJbnRlcnZhbChpbmRleE9mVGFpbCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gMDsgaW5z
dEluZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbnN0SW5kZXgpIHsKKyAgICAgICAgICAgICAgICBJ
bnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7CisgICAgICAgICAgICAgICAgc2l6ZV90
IGluZGV4T2ZFYXJseSA9IGluZGV4T2ZIZWFkICsgaW5zdEluZGV4ICogMjsKKyAgICAgICAgICAg
ICAgICBpbnN0LmZvckVhY2hUbXAoCisgICAgICAgICAgICAgICAgICAgIFsmXSAoVG1wJiB0bXAs
IEFyZzo6Um9sZSByb2xlLCBCYW5rIHRtcEJhbmssIFdpZHRoKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAodG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcEJhbmsgIT0gYmFuaykKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICBt
X21hcFt0bXBdLmludGVydmFsIHw9IGludGVydmFsKGluZGV4T2ZFYXJseSwgQXJnOjp0aW1pbmco
cm9sZSkpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgUmVnTGl2ZW5lc3M6OkxvY2FsQ2FsYyBsb2NhbENhbGMobGl2ZW5lc3MsIGJsb2NrKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgYXV0byByZWNvcmQgPSBbJl0gKHVuc2lnbmVkIGlu
c3RJbmRleCkgeworICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHJlZ3MgPSBsb2NhbENhbGMu
bGl2ZSgpOworICAgICAgICAgICAgICAgIGlmIChJbnN0KiBwcmV2ID0gYmxvY2stPmdldChpbnN0
SW5kZXggLSAxKSkgeworICAgICAgICAgICAgICAgICAgICBSZWdpc3RlclNldCBwcmV2UmVncyA9
IHJlZ3M7CisgICAgICAgICAgICAgICAgICAgIHByZXYtPmZvckVhY2g8UmVnPigKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFsmXSAoUmVnJiByZWcsIEFyZzo6Um9sZSByb2xlLCBCYW5rLCBXaWR0
aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzTGF0ZURlZihyb2xl
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldlJlZ3MuYWRkKHJlZyk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHByZXYt
PmtpbmQub3Bjb2RlID09IFBhdGNoKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJldlJlZ3Mu
bWVyZ2UocHJldi0+ZXh0cmFDbG9iYmVyZWRSZWdzKCkpOworICAgICAgICAgICAgICAgICAgICBw
cmV2UmVncy5maWx0ZXIobV9yZWdpc3RlclNldCk7CisgICAgICAgICAgICAgICAgICAgIGlmICgh
cHJldlJlZ3MuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgbV9jbG9iYmVycy5h
cHBlbmQoQ2xvYmJlcihpbmRleE9mSGVhZCArIGluc3RJbmRleCAqIDIgLSAxLCBwcmV2UmVncykp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoSW5zdCogbmV4dCA9IGJs
b2NrLT5nZXQoaW5zdEluZGV4KSkgeworICAgICAgICAgICAgICAgICAgICBSZWdpc3RlclNldCBu
ZXh0UmVncyA9IHJlZ3M7CisgICAgICAgICAgICAgICAgICAgIG5leHQtPmZvckVhY2g8UmVnPigK
KyAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoUmVnJiByZWcsIEFyZzo6Um9sZSByb2xlLCBC
YW5rLCBXaWR0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzRWFy
bHlEZWYocm9sZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRSZWdzLmFk
ZChyZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAg
IGlmIChuZXh0LT5raW5kLm9wY29kZSA9PSBQYXRjaCkKKyAgICAgICAgICAgICAgICAgICAgICAg
IG5leHRSZWdzLm1lcmdlKG5leHQtPmV4dHJhRWFybHlDbG9iYmVyZWRSZWdzKCkpOworICAgICAg
ICAgICAgICAgICAgICBpZiAoIW5leHRSZWdzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1fY2xvYmJlcnMuYXBwZW5kKENsb2JiZXIoaW5kZXhPZkhlYWQgKyBpbnN0SW5kZXgg
KiAyLCBuZXh0UmVncykpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIHJlY29yZChibG9jay0+c2l6ZSgpKTsKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gYmxvY2stPnNpemUoKTsgaW5zdEluZGV4LS07KSB7
CisgICAgICAgICAgICAgICAgbG9jYWxDYWxjLmV4ZWN1dGUoaW5zdEluZGV4KTsKKyAgICAgICAg
ICAgICAgICByZWNvcmQoaW5zdEluZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgc3RkOjpzb3J0KAorICAgICAgICAgICAgbV9jbG9iYmVycy5iZWdpbigp
LCBtX2Nsb2JiZXJzLmVuZCgpLAorICAgICAgICAgICAgW10gKENsb2JiZXImIGEsIENsb2JiZXIm
IGIpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IDwgYi5pbmRleDsK
KyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgaWYgKHZlcmJvc2UoKSkgeworICAg
ICAgICAgICAgZGF0YUxvZygiSW50ZXJ2YWxzOlxuIik7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIHRtcEluZGV4ID0gMDsgdG1wSW5kZXggPCBtX2NvZGUubnVtVG1wcyhiYW5rKTsgKyt0bXBJ
bmRleCkgeworICAgICAgICAgICAgICAgIFRtcCB0bXAgPSBUbXA6OnRtcEZvckluZGV4KGJhbmss
IHRtcEluZGV4KTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgIiwgdG1wLCAiOiAiLCBt
X21hcFt0bXBdLCAiXG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAK
KyAgICBib29sIHNob3VsZFNwaWxsRXZlcnl0aGluZygpCisgICAgeworICAgICAgICBpZiAoIU9w
dGlvbnM6OmFpckxpbmVhclNjYW5TcGlsbHNFdmVyeXRoaW5nKCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICAvLyBZb3UncmUgbWVhbnQgdG8gaGFjayB0aGlz
IHNvIHRoYXQgeW91IHNlbGVjdGl2ZWx5IHNwaWxsIGV2ZXJ5dGhpbmcgZGVwZW5kaW5nIG9uIHJl
YXNvbnMuCisgICAgICAgIC8vIFRoYXQncyBzdXBlciB1c2VmdWwgZm9yIGRlYnVnZ2luZy4KKwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzcGlsbEV2ZXJ5dGhp
bmcoKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCB0bXBJbmRleCA9IDA7IHRtcEluZGV4
IDwgbV9jb2RlLm51bVRtcHMoYmFuayk7ICsrdG1wSW5kZXgpCisgICAgICAgICAgICBzcGlsbChU
bXA6OnRtcEZvckluZGV4KGJhbmssIHRtcEluZGV4KSk7CisgICAgfQorICAgIAorICAgIHZvaWQg
cHJlcGFyZUludGVydmFscygpCisgICAgeworICAgICAgICBtX3RtcHMucmVzaXplKDApOworICAg
ICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCB0bXBJbmRleCA9IDA7IHRtcEluZGV4IDwgbV9j
b2RlLm51bVRtcHMoYmFuayk7ICsrdG1wSW5kZXgpIHsKKyAgICAgICAgICAgIFRtcCB0bXAgPSBU
bXA6OnRtcEZvckluZGV4KGJhbmssIHRtcEluZGV4KTsKKyAgICAgICAgICAgIFRtcERhdGEmIGRh
dGEgPSBtX21hcFt0bXBdOworICAgICAgICAgICAgaWYgKGRhdGEuc3BpbGxlZCkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZGF0YS5hc3NpZ25l
ZCA9IFJlZygpOworICAgICAgICAgICAgbV90bXBzLmFwcGVuZCh0bXApOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBzdGQ6OnNvcnQoCisgICAgICAgICAgICBtX3RtcHMuYmVnaW4oKSwg
bV90bXBzLmVuZCgpLAorICAgICAgICAgICAgWyZdIChUbXAmIGEsIFRtcCYgYikgeworICAgICAg
ICAgICAgICAgIHJldHVybiBtX21hcFthXS5pbnRlcnZhbC5iZWdpbigpIDwgbV9tYXBbYl0uaW50
ZXJ2YWwuYmVnaW4oKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgaWYgKHZl
cmJvc2UoKSkgeworICAgICAgICAgICAgZGF0YUxvZygiVG1wczogIiwgbGlzdER1bXAobV90bXBz
KSwgIlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKCJDbG9iYmVyczogIiwgbGlzdER1bXAobV9j
bG9iYmVycyksICJcbiIpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIFRtcCBhZGRTcGls
bFRtcFdpdGhJbnRlcnZhbChJbnRlcnZhbCBpbnRlcnZhbCkKKyAgICB7CisgICAgICAgIFRtcERh
dGEgZGF0YTsKKyAgICAgICAgZGF0YS5pbnRlcnZhbCA9IGludGVydmFsOworICAgICAgICBkYXRh
LmlzVW5zcGlsbGFibGUgPSB0cnVlOworICAgICAgICAKKyAgICAgICAgVG1wIHRtcCA9IG1fY29k
ZS5uZXdUbXAoYmFuayk7CisgICAgICAgIG1fbWFwLmFwcGVuZCh0bXAsIGRhdGEpOworICAgICAg
ICByZXR1cm4gdG1wOworICAgIH0KKyAgICAKKyAgICB2b2lkIGF0dGVtcHRTY2FuKCkKKyAgICB7
CisgICAgICAgIC8vIFRoaXMgaXMgbW9kZWxlZCBhZnRlciBMaW5lYXJTY2FuUmVnaXN0ZXJBbGxv
Y2F0aW9uIGluIEZpZy4gMSBpbgorICAgICAgICAvLyBodHRwOi8vZGwuYWNtLm9yZy9jaXRhdGlv
bi5jZm0/aWQ9MzMwMjUwLgorCisgICAgICAgIG1fZGlkU3BpbGwgPSBmYWxzZTsKKyAgICAgICAg
bV9hY3RpdmUuY2xlYXIoKTsKKyAgICAgICAgbV9hY3RpdmVSZWdzID0gUmVnaXN0ZXJTZXQoKTsK
KyAgICAgICAgCisgICAgICAgIHNpemVfdCBjbG9iYmVySW5kZXggPSAwOworICAgICAgICBmb3Ig
KFRtcCYgdG1wIDogbV90bXBzKSB7CisgICAgICAgICAgICBUbXBEYXRhJiBlbnRyeSA9IG1fbWFw
W3RtcF07CisgICAgICAgICAgICBzaXplX3QgaW5kZXggPSBlbnRyeS5pbnRlcnZhbC5iZWdpbigp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAodmVyYm9zZSgpKSB7CisgICAgICAgICAg
ICAgICAgZGF0YUxvZygiSW5kZXggIyIsIGluZGV4LCAiOiAiLCB0bXAsICJcbiIpOworICAgICAg
ICAgICAgICAgIGRhdGFMb2coIiAgIiwgdG1wLCAiOiAiLCBlbnRyeSwgIlxuIik7CisgICAgICAg
ICAgICAgICAgZGF0YUxvZygiICBjbG9iYmVySW5kZXggPSAiLCBjbG9iYmVySW5kZXgsICJcbiIp
OworICAgICAgICAgICAgICAgIC8vIFRoaXMgY291bGQgYmUgc28gbXVjaCBmYXN0ZXIuCisgICAg
ICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2NvZGVbMF07CisgICAgICAgICAgICAg
ICAgZm9yIChCYXNpY0Jsb2NrKiBjYW5kaWRhdGVCbG9jayA6IG1fY29kZSkgeworICAgICAgICAg
ICAgICAgICAgICBpZiAobV9zdGFydEluZGV4W2NhbmRpZGF0ZUJsb2NrXSA+IGluZGV4KQorICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGJsb2NrID0g
Y2FuZGlkYXRlQmxvY2s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGluc3RJbmRleCA9IChpbmRleCAtIG1fc3RhcnRJbmRleFtibG9ja10gKyAxKSAvIDI7Cisg
ICAgICAgICAgICAgICAgZGF0YUxvZygiICBBdDogIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiLCBp
bnN0SW5kZXggPSAiLCBpbnN0SW5kZXgsICJcbiIpOworICAgICAgICAgICAgICAgIGRhdGFMb2co
IiAgICBQcmV2OiAiLCBwb2ludGVyRHVtcChibG9jay0+Z2V0KGluc3RJbmRleCAtIDEpKSwgIlxu
Iik7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIE5leHQ6ICIsIHBvaW50ZXJEdW1wKGJs
b2NrLT5nZXQoaW5zdEluZGV4KSksICJcbiIpOworICAgICAgICAgICAgICAgIGRhdGFMb2coIiAg
QWN0aXZlOlxuIik7CisgICAgICAgICAgICAgICAgZm9yIChUbXAgdG1wIDogbV9hY3RpdmUpCisg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAiLCB0bXAsICI6ICIsIG1fbWFwW3RtcF0s
ICJcbiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUaGlz
IGlzIEV4cGlyZU9sZEludGVydmFscyBpbiBGaWcuIDEuCisgICAgICAgICAgICB3aGlsZSAoIW1f
YWN0aXZlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIFRtcCB0bXAgPSBtX2FjdGl2ZS5m
aXJzdCgpOworICAgICAgICAgICAgICAgIFRtcERhdGEmIGVudHJ5ID0gbV9tYXBbdG1wXTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBib29sIGV4cGlyZWQgPSBlbnRyeS5pbnRl
cnZhbC5lbmQoKSA8PSBpbmRleDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBp
ZiAoIWV4cGlyZWQpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIG1fYWN0aXZlLnJlbW92ZUZpcnN0KCk7CisgICAgICAgICAgICAg
ICAgbV9hY3RpdmVSZWdzLnJlbW92ZShlbnRyeS5hc3NpZ25lZCk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8vIElmIG5lY2Vzc2FyeSwgY29tcHV0ZSB0aGUgc2V0IG9mIHJlZ2lzdGVy
cyB0aGF0IHRoaXMgdG1wIGNvdWxkIGV2ZW4gdXNlLiBUaGlzIGlzIG5vdAorICAgICAgICAgICAg
Ly8gcGFydCBvZiBGaWcuIDEsIGJ1dCBpdCdzIGEgdGVjaG5pcXVlIHRoYXQgdGhlIGF1dGhvcnMg
Y2xhaW0gdG8gaGF2ZSBpbXBsZW1lbnRlZCBpbiBvbmUgb2YKKyAgICAgICAgICAgIC8vIHRoZWly
IHR3byBpbXBsZW1lbnRhdGlvbnMuIFRoZXJlIG1heSBiZSBvdGhlciBtb3JlIGVmZmljaWVudCB3
YXlzIHRvIGRvIHRoaXMsIGJ1dCB0aGlzCisgICAgICAgICAgICAvLyBpbXBsZW1lbnRhdGlvbiBn
ZXRzIHNvbWUgcGVyZiB3aW5zIGZyb20gcGlnZ3ktYmFja2luZyB0aGlzIGNhbGN1bGF0aW9uIGlu
IHRoZSBzY2FuLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGUg
ZGlkQnVpbGQgZmxhZyBzdGlja3MgdGhyb3VnaCBzcGlsbGluZy4gU3BpbGxpbmcgZG9lc24ndCBj
aGFuZ2UgdGhlCisgICAgICAgICAgICAvLyBpbnRlcmZlcmVuY2Ugc2l0dWF0aW9uLgorICAgICAg
ICAgICAgLy8KKyAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBjb3VsZCBzaG9ydC1jaXJjdWl0
IHRoaXMgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEgc3BpbGxhYmxlIHRtcCwgdGhlcmUgYXJlIG5v
CisgICAgICAgICAgICAvLyBmcmVlIHJlZ2lzdGVycywgYW5kIHRoaXMgcmVnaXN0ZXIncyBpbnRl
cnZhbCBlbmRzIGFmdGVyIHRoZSBvbmUgb24gdGhlIHRvcCBvZiB0aGUgYWN0aXZlCisgICAgICAg
ICAgICAvLyBzdGFjay4KKyAgICAgICAgICAgIGlmICghZW50cnkuZGlkQnVpbGRQb3NzaWJsZVJl
Z3MpIHsKKyAgICAgICAgICAgICAgICAvLyBBZHZhbmNlIHRoZSBjbG9iYmVyIGluZGV4IHVudGls
IGl0J3MgYXQgYSBjbG9iYmVyIHRoYXQgaXMgcmVsZXZhbnQgdG8gdXMuCisgICAgICAgICAgICAg
ICAgd2hpbGUgKGNsb2JiZXJJbmRleCA8IG1fY2xvYmJlcnMuc2l6ZSgpICYmIG1fY2xvYmJlcnNb
Y2xvYmJlckluZGV4XS5pbmRleCA8IGluZGV4KQorICAgICAgICAgICAgICAgICAgICBjbG9iYmVy
SW5kZXgrKzsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBSZWdpc3RlclNldCBw
b3NzaWJsZVJlZ3MgPSBtX3JlZ2lzdGVyU2V0OworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSBjbG9iYmVySW5kZXg7IGkgPCBtX2Nsb2JiZXJzLnNpemUoKSAmJiBtX2Nsb2JiZXJzW2ld
LmluZGV4IDwgZW50cnkuaW50ZXJ2YWwuZW5kKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAg
cG9zc2libGVSZWdzLmV4Y2x1ZGUobV9jbG9iYmVyc1tpXS5yZWdzKTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBlbnRyeS5wb3NzaWJsZVJlZ3MgPSBwb3NzaWJsZVJlZ3M7Cisg
ICAgICAgICAgICAgICAgZW50cnkuZGlkQnVpbGRQb3NzaWJsZVJlZ3MgPSB0cnVlOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAodmVyYm9zZSgpKQorICAgICAg
ICAgICAgICAgIGRhdGFMb2coIiAgUG9zc2libGUgcmVnczogIiwgZW50cnkucG9zc2libGVSZWdz
LCAiXG4iKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gRmluZCBhIGZyZWUgcmVnaXN0
ZXIgdGhhdCB3ZSBhcmUgYWxsb3dlZCB0byB1c2UuCisgICAgICAgICAgICBpZiAobV9hY3RpdmUu
c2l6ZSgpICE9IG1fcmVnaXN0ZXJzLnNpemUoKSkgeworICAgICAgICAgICAgICAgIGJvb2wgZGlk
QXNzaWduID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogbV9yZWdpc3Rl
cnMpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2FjdGl2ZVJlZ3MuY29udGFpbnMocmVn
KSAmJiBlbnRyeS5wb3NzaWJsZVJlZ3MuY29udGFpbnMocmVnKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgYXNzaWduKHRtcCwgcmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpZEFz
c2lnbiA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoZGlkQXNz
aWduKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgLy8gVGhpcyBpcyBTcGlsbEF0SW50ZXJ2YWwgaW4gRmlnLiAx
LCBidXQgbW9kaWZpZWQgdG8gaGFuZGxlIGNsb2JiZXJzLgorICAgICAgICAgICAgVG1wIHNwaWxs
VG1wID0gbV9hY3RpdmUudGFrZUxhc3QoCisgICAgICAgICAgICAgICAgWyZdIChUbXAgc3BpbGxD
YW5kaWRhdGUpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW50cnkucG9z
c2libGVSZWdzLmNvbnRhaW5zKG1fbWFwW3NwaWxsQ2FuZGlkYXRlXS5hc3NpZ25lZCk7CisgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpZiAoIXNwaWxsVG1wKSB7CisgICAgICAgICAg
ICAgICAgc3BpbGwodG1wKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIFRtcERhdGEmIHNwaWxsRW50cnkgPSBtX21hcFtzcGlsbFRtcF07Cisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzcGlsbEVudHJ5LmFzc2lnbmVkKTsKKyAgICAgICAg
ICAgIGlmIChzcGlsbEVudHJ5LmlzVW5zcGlsbGFibGUgfHwKKyAgICAgICAgICAgICAgICAoIWVu
dHJ5LmlzVW5zcGlsbGFibGUgJiYgc3BpbGxFbnRyeS5pbnRlcnZhbC5lbmQoKSA8PSBlbnRyeS5p
bnRlcnZhbC5lbmQoKSkpIHsKKyAgICAgICAgICAgICAgICBzcGlsbCh0bXApOworICAgICAgICAg
ICAgICAgIGFkZFRvQWN0aXZlKHNwaWxsVG1wKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgYXNzaWduKHRtcCwgc3Bp
bGxFbnRyeS5hc3NpZ25lZCk7CisgICAgICAgICAgICBzcGlsbChzcGlsbFRtcCk7CisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgdm9pZCBhZGRUb0FjdGl2ZShUbXAgdG1wKQorICAgIHsKKyAg
ICAgICAgaWYgKG1fbWFwW3RtcF0uaXNVbnNwaWxsYWJsZSkgeworICAgICAgICAgICAgbV9hY3Rp
dmUucHJlcGVuZCh0bXApOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBtX2FjdGl2ZS5hcHBlbmRBbmRCdWJibGUoCisgICAgICAgICAgICB0bXAsCisg
ICAgICAgICAgICBbJl0gKFRtcCBvdGhlclRtcCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAg
VG1wRGF0YSYgb3RoZXJFbnRyeSA9IG1fbWFwW290aGVyVG1wXTsKKyAgICAgICAgICAgICAgICBp
ZiAob3RoZXJFbnRyeS5pc1Vuc3BpbGxhYmxlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fbWFwW290aGVyVG1wXS5pbnRlcnZhbC5l
bmQoKSA+IG1fbWFwW3RtcF0uaW50ZXJ2YWwuZW5kKCk7CisgICAgICAgICAgICB9KTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBhc3NpZ24oVG1wIHRtcCwgUmVnIHJlZykKKyAgICB7CisgICAgICAg
IFRtcERhdGEmIGVudHJ5ID0gbV9tYXBbdG1wXTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWVu
dHJ5LnNwaWxsZWQpOworICAgICAgICBlbnRyeS5hc3NpZ25lZCA9IHJlZzsKKyAgICAgICAgbV9h
Y3RpdmVSZWdzLmFkZChyZWcpOworICAgICAgICBhZGRUb0FjdGl2ZSh0bXApOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIHNwaWxsKFRtcCB0bXApCisgICAgeworICAgICAgICBUbXBEYXRhJiBlbnRy
eSA9IG1fbWFwW3RtcF07CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFlbnRyeS5pc1Vuc3BpbGxh
YmxlKTsKKyAgICAgICAgZW50cnkuc3BpbGxlZCA9IG1fY29kZS5hZGRTdGFja1Nsb3QoOCwgU3Rh
Y2tTbG90S2luZDo6U3BpbGwpOworICAgICAgICBlbnRyeS5hc3NpZ25lZCA9IFJlZygpOworICAg
ICAgICBtX2RpZFNwaWxsID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBlbWl0U3BpbGxD
b2RlKCkKKyAgICB7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsK
KyAgICAgICAgICAgIHNpemVfdCBpbmRleE9mSGVhZCA9IHRoaXMtPmluZGV4T2ZIZWFkKGJsb2Nr
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gMDsgaW5zdEluZGV4IDwg
YmxvY2stPnNpemUoKTsgKytpbnN0SW5kZXgpIHsKKyAgICAgICAgICAgICAgICBJbnN0JiBpbnN0
ID0gYmxvY2stPmF0KGluc3RJbmRleCk7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXhP
ZkVhcmx5ID0gaW5kZXhPZkhlYWQgKyBpbnN0SW5kZXggKiAyOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIC8vIEZpcnN0IHRyeSB0byBzcGlsbCBkaXJlY3RseS4KKyAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5zdC5hcmdzLnNpemUoKTsgKytpKSB7
CisgICAgICAgICAgICAgICAgICAgIEFyZyYgYXJnID0gaW5zdC5hcmdzW2ldOworICAgICAgICAg
ICAgICAgICAgICBpZiAoIWFyZy5pc1RtcCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgICAgIGlmIChhcmcuaXNSZWcoKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBpZiAoYXJnLmJhbmso
KSAhPSBiYW5rKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgICAgIFN0YWNrU2xvdCogc3BpbGxlZCA9IG1fbWFwW2FyZy50bXAoKV0uc3BpbGxlZDsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFzcGlsbGVkKQorICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIGlmICghaW5zdC5hZG1pdHNTdGFjayhp
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAg
ICBhcmcgPSBBcmc6OnN0YWNrKHNwaWxsZWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBGYWxsIGJhY2sgb24gdGhlIGhhcmQgd2F5Lgor
ICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcCgKKyAgICAgICAgICAgICAgICAgICAgWyZd
IChUbXAmIHRtcCwgQXJnOjpSb2xlIHJvbGUsIEJhbmsgdG1wQmFuaywgV2lkdGgpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wQmFuayAhPSBi
YW5rKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFN0YWNrU2xvdCogc3BpbGxlZCA9IG1fbWFwW3RtcF0uc3BpbGxlZDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghc3BpbGxlZCkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICBPcGNvZGUgbW92ZSA9IGJhbmsg
PT0gR1AgPyBNb3ZlIDogTW92ZURvdWJsZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9
IGFkZFNwaWxsVG1wV2l0aEludGVydmFsKGludGVydmFsKGluZGV4T2ZFYXJseSwgQXJnOjp0aW1p
bmcocm9sZSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyb2xlID09IEFyZzo6U2Ny
YXRjaCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoQXJnOjppc0FueVVzZShyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX2luc2VydGlvblNldHNbYmxvY2tdLmluc2VydChpbnN0SW5kZXgsIHNlY29uZFBo
YXNlLCBtb3ZlLCBpbnN0Lm9yaWdpbiwgQXJnOjpzdGFjayhzcGlsbGVkKSwgdG1wKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzQW55RGVmKHJvbGUpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0c1tibG9ja10uaW5zZXJ0KGluc3RJbmRleCAr
IDEsIGZpcnN0UGhhc2UsIG1vdmUsIGluc3Qub3JpZ2luLCB0bXAsIEFyZzo6c3RhY2soc3BpbGxl
ZCkpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGluc2VydFNwaWxsQ29kZSgpCisgICAgeworICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKQorICAgICAgICAgICAgbV9pbnNlcnRpb25T
ZXRzW2Jsb2NrXS5leGVjdXRlKGJsb2NrKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhc3NpZ25S
ZWdpc3RlcnMoKQorICAgIHsKKyAgICAgICAgaWYgKHZlcmJvc2UoKSkgeworICAgICAgICAgICAg
ZGF0YUxvZygiQWJvdXQgdG8gYWxsb2NhdGUgcmVnaXN0ZXJzLiBTdGF0ZSBvZiBhbGwgdG1wczpc
biIpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB0bXBJbmRleCA9IDA7IHRtcEluZGV4IDwg
bV9jb2RlLm51bVRtcHMoYmFuayk7ICsrdG1wSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBUbXAg
dG1wID0gVG1wOjp0bXBGb3JJbmRleChiYW5rLCB0bXBJbmRleCk7CisgICAgICAgICAgICAgICAg
ZGF0YUxvZygiICAgICIsIHRtcCwgIjogIiwgbV9tYXBbdG1wXSwgIlxuIik7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBkYXRhTG9nKCJJUjpcbiIpOworICAgICAgICAgICAgZGF0YUxvZyht
X2NvZGUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJs
b2NrIDogbV9jb2RlKSB7CisgICAgICAgICAgICBmb3IgKEluc3QmIGluc3QgOiAqYmxvY2spIHsK
KyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSgpKQorICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKCJBdDogIiwgaW5zdCwgIlxuIik7CisgICAgICAgICAgICAgICAgaW5zdC5mb3JFYWNoVG1w
RmFzdCgKKyAgICAgICAgICAgICAgICAgICAgWyZdIChUbXAmIHRtcCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHRtcC5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXAuYmFuaygpICE9IGJhbmsp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBSZWcgcmVnID0gbV9tYXBbdG1wXS5hc3Np
Z25lZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVnKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiRmFpbGVkIHRvIGFsbG9jYXRlIHJlZyBmb3I6ICIsIHRt
cCwgIlxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRtcCA9IFRtcChyZWcpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBDb2RlJiBtX2NvZGU7CisgICAgVmVj
dG9yPFJlZz4gbV9yZWdpc3RlcnM7CisgICAgUmVnaXN0ZXJTZXQgbV9yZWdpc3RlclNldDsKKyAg
ICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgc2l6ZV90PiBtX3N0YXJ0SW5kZXg7CisgICAgSW5kZXhN
YXA8VG1wOjpJbmRleGVkPGJhbms+LCBUbXBEYXRhPiBtX21hcDsKKyAgICBJbmRleE1hcDxCYXNp
Y0Jsb2NrKiwgUGhhc2VJbnNlcnRpb25TZXQ+IG1faW5zZXJ0aW9uU2V0czsKKyAgICBWZWN0b3I8
Q2xvYmJlcj4gbV9jbG9iYmVyczsgLy8gQWZ0ZXIgd2UgYWxsb2NhdGUgdGhpcywgd2UgaGFwcGls
eSBwb2ludCBwb2ludGVycyBpbnRvIGl0LgorICAgIFZlY3RvcjxUbXA+IG1fdG1wczsKKyAgICBE
ZXF1ZTxUbXA+IG1fYWN0aXZlOworICAgIFJlZ2lzdGVyU2V0IG1fYWN0aXZlUmVnczsKKyAgICBi
b29sIG1fZGlkU3BpbGwgeyBmYWxzZSB9OworfTsKKwordGVtcGxhdGU8QmFuayBiYW5rPgordm9p
ZCBydW5MaW5lYXJTY2FuKENvZGUmIGNvZGUpCit7CisgICAgaWYgKHZlcmJvc2UoKSkKKyAgICAg
ICAgZGF0YUxvZygiQWlyIGJlZm9yZSBsaW5lYXIgc2NhbiBmb3IgIiwgYmFuaywgIjpcbiIsIGNv
ZGUpOworICAgIExpbmVhclNjYW48YmFuaz4gbGluZWFyU2Nhbihjb2RlKTsKKyAgICBsaW5lYXJT
Y2FuLnJ1bigpOworICAgIGlmICh2ZXJib3NlKCkpCisgICAgICAgIGRhdGFMb2coIkFpciBhZnRl
ciBsaW5lYXIgc2NhbiBmb3IgIiwgYmFuaywgIjpcbiIsIGNvZGUpOworfQorCit9IC8vIGFub255
bW91cyBuYW1lc3BhY2UKKwordm9pZCBhbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2NhbihDb2Rl
JiBjb2RlKQoreworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAiYWxsb2NhdGVSZWdp
c3RlcnNCeUxpbmVhclNjYW4iKTsKKyAgICBwYWRJbnRlcmZlcmVuY2UoY29kZSk7CisgICAgcnVu
TGluZWFyU2NhbjxGUD4oY29kZSk7CisgICAgcnVuTGluZWFyU2NhbjxHUD4oY29kZSk7CisgICAg
Zml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMoY29kZSk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lz
dGVyc0J5TGluZWFyU2Nhbi5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
Q1BVLmgiCisjaW5jbHVkZSAiT3B0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKKy8vIFRoaXMgaW1wbGVtZW50
cyB0aGUgUG9sZXR0byBhbmQgU2Fya2FyIHJlZ2lzdGVyIGFsbG9jYXRvciBjYWxsZWQgImxpbmVh
ciBzY2FuIjoKKy8vIGh0dHA6Ly9kbC5hY20ub3JnL2NpdGF0aW9uLmNmbT9pZD0zMzAyNTAKKy8v
CisvLyBUaGlzIGlzIG5vdCBBaXIncyBwcmltYXJ5IHJlZ2lzdGVyIGFsbG9jYXRvci4gV2UgdXNl
IGl0IG9ubHkgd2hlbiBydW5uaW5nIGF0IG9wdExldmVsPDIuIFRoYXQncyBub3QKKy8vIHRoZSBk
ZWZhdWx0IGxldmVsLiBUaGlzIHJlZ2lzdGVyIGFsbG9jYXRvciBpcyBvcHRpbWl6ZWQgcHJpbWFy
aWx5IGZvciBydW5uaW5nIHF1aWNrbHkuIEl0J3MgZXhwZWN0ZWQKKy8vIHRoYXQgaW1wcm92ZW1l
bnRzIHRvIHRoaXMgcmVnaXN0ZXIgYWxsb2NhdG9yIHNob3VsZCBmb2N1cyBvbiBpbXByb3Zpbmcg
aXRzIGV4ZWN1dGlvbiB0aW1lIHdpdGhvdXQgbXVjaAorLy8gcmVnYXJkIGZvciB0aGUgcXVhbGl0
eSBvZiBnZW5lcmF0ZWQgY29kZS4gSWYgeW91IHdhbnQgZ29vZCBjb2RlLCB1c2UgZ3JhcGggY29s
b3JpbmcuCisvLworLy8gRm9yIEFpcidzIHByaW1hcnkgcmVnaXN0ZXIgYWxsb2NhdG9yLCBzZWUg
QWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuaHxjcHAuCit2b2lkIGFsbG9jYXRl
UmVnaXN0ZXJzQnlMaW5lYXJTY2FuKENvZGUmKTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcAkocmV2aXNpb24gMjE0
NjE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTYxLDcgKzE2MSw3IEBAIHZvaWQgYWxsb2NhdGVTdGFjayhD
b2RlJiBjb2RlKQogCiAgICAgLy8gTm93IHdlIGhhbmRsZSB0aGUgc3BpbGwgc2xvdHMuCiAgICAg
U3RhY2tTbG90TGl2ZW5lc3MgbGl2ZW5lc3MoY29kZSk7Ci0gICAgSW5kZXhNYXA8U3RhY2tTbG90
LCBIYXNoU2V0PFN0YWNrU2xvdCo+PiBpbnRlcmZlcmVuY2UoY29kZS5zdGFja1Nsb3RzKCkuc2l6
ZSgpKTsKKyAgICBJbmRleE1hcDxTdGFja1Nsb3QqLCBIYXNoU2V0PFN0YWNrU2xvdCo+PiBpbnRl
cmZlcmVuY2UoY29kZS5zdGFja1Nsb3RzKCkuc2l6ZSgpKTsKICAgICBWZWN0b3I8U3RhY2tTbG90
Kj4gc2xvdHM7CiAKICAgICAvLyBXZSB3aWxsIHBlcmZvcm0gc29tZSBzcGlsbCBjb2FsZXNjaW5n
LiBUbyBtYWtlIHRoYXQgZWZmZWN0aXZlLCB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gaWRlbnRpZnkK
QEAgLTMwOSw3ICszMDksNyBAQCB2b2lkIGFsbG9jYXRlU3RhY2soQ29kZSYgY29kZSkKICAgICAg
ICAgICAgIHJldHVybiBhLmZyZXF1ZW5jeSA+IGIuZnJlcXVlbmN5OwogICAgICAgICB9KTsKICAg
ICAKLSAgICBJbmRleE1hcDxTdGFja1Nsb3QsIFN0YWNrU2xvdCo+IHJlbWFwcGVkU3RhY2tTbG90
cyhjb2RlLnN0YWNrU2xvdHMoKS5zaXplKCkpOworICAgIEluZGV4TWFwPFN0YWNrU2xvdCosIFN0
YWNrU2xvdCo+IHJlbWFwcGVkU3RhY2tTbG90cyhjb2RlLnN0YWNrU2xvdHMoKS5zaXplKCkpOwog
ICAgIGF1dG8gcmVtYXAgPSBbJl0gKFN0YWNrU2xvdCogc2xvdCkgLT4gU3RhY2tTbG90KiB7CiAg
ICAgICAgIGlmICghc2xvdCkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkocmV2aXNpb24gMjE0NjE4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yODIsNiArMjgyLDM3IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBB
cmcKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCit2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQXJnOjpQaGFzZSBwaGFzZSkKK3sKKyAgICBzd2l0Y2gg
KHBoYXNlKSB7CisgICAgY2FzZSBBcmc6OkVhcmx5OgorICAgICAgICBvdXQucHJpbnQoIkVhcmx5
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFyZzo6TGF0ZToKKyAgICAgICAgb3V0LnBy
aW50KCJMYXRlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91
dCwgQXJnOjpUaW1pbmcgdGltaW5nKQoreworICAgIHN3aXRjaCAodGltaW5nKSB7CisgICAgY2Fz
ZSBBcmc6Ok9ubHlFYXJseToKKyAgICAgICAgb3V0LnByaW50KCJPbmx5RWFybHkiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgQXJnOjpPbmx5TGF0ZToKKyAgICAgICAgb3V0LnByaW50KCJP
bmx5TGF0ZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcmc6OkVhcmx5QW5kTGF0ZToK
KyAgICAgICAgb3V0LnByaW50KCJFYXJseUFuZExhdGUiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKIHZvaWQgcHJpbnRJ
bnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBcmc6OlJvbGUgcm9sZSkKIHsKICAgICBzd2l0Y2gg
KHJvbGUpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAkocmV2aXNp
b24gMjE0NjE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAkod29y
a2luZyBjb3B5KQpAQCAtOTIsNiArOTIsMTcgQEAgcHVibGljOgogICAgICAgICBDb2xkLAogICAg
ICAgICBXYXJtCiAgICAgfTsKKyAgICAKKyAgICBlbnVtIFBoYXNlIDogaW50OF90IHsKKyAgICAg
ICAgRWFybHksCisgICAgICAgIExhdGUKKyAgICB9OworICAgIAorICAgIGVudW0gVGltaW5nIDog
aW50OF90IHsKKyAgICAgICAgT25seUVhcmx5LAorICAgICAgICBPbmx5TGF0ZSwKKyAgICAgICAg
RWFybHlBbmRMYXRlCisgICAgfTsKIAogICAgIGVudW0gUm9sZSA6IGludDhfdCB7CiAgICAgICAg
IC8vIFVzZSBtZWFucyB0aGF0IHRoZSBJbnN0IHdpbGwgcmVhZCBmcm9tIHRoaXMgdmFsdWUgYmVm
b3JlIGRvaW5nIGFueXRoaW5nIGVsc2UuCkBAIC0yNTMsNyArMjY0LDgyIEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgICAgIHJldHVybiBpc0NvbGRVc2Uocm9sZSkgPyBDb2xkIDogV2FybTsKICAgICB9
Ci0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCBhY3RpdmVBdChSb2xlIHJvbGUsIFBoYXNlIHBoYXNl
KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChyb2xlKSB7CisgICAgICAgIGNhc2UgVXNlOgorICAg
ICAgICBjYXNlIENvbGRVc2U6CisgICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAgIGNhc2Ug
RWFybHlaRGVmOgorICAgICAgICBjYXNlIFVzZUFkZHI6CisgICAgICAgICAgICByZXR1cm4gcGhh
c2UgPT0gRWFybHk7CisgICAgICAgIGNhc2UgTGF0ZVVzZToKKyAgICAgICAgY2FzZSBMYXRlQ29s
ZFVzZToKKyAgICAgICAgY2FzZSBEZWY6CisgICAgICAgIGNhc2UgWkRlZjoKKyAgICAgICAgICAg
IHJldHVybiBwaGFzZSA9PSBMYXRlOworICAgICAgICBjYXNlIFVzZURlZjoKKyAgICAgICAgY2Fz
ZSBVc2VaRGVmOgorICAgICAgICBjYXNlIFNjcmF0Y2g6CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAg
CisgICAgc3RhdGljIGJvb2wgYWN0aXZlQXQoVGltaW5nIHRpbWluZywgUGhhc2UgcGhhc2UpCisg
ICAgeworICAgICAgICBzd2l0Y2ggKHRpbWluZykgeworICAgICAgICBjYXNlIE9ubHlFYXJseToK
KyAgICAgICAgICAgIHJldHVybiBwaGFzZSA9PSBFYXJseTsKKyAgICAgICAgY2FzZSBPbmx5TGF0
ZToKKyAgICAgICAgICAgIHJldHVybiBwaGFzZSA9PSBMYXRlOworICAgICAgICBjYXNlIEVhcmx5
QW5kTGF0ZToKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVGltaW5nIHRpbWlu
ZyhSb2xlIHJvbGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHJvbGUpIHsKKyAgICAgICAgY2Fz
ZSBVc2U6CisgICAgICAgIGNhc2UgQ29sZFVzZToKKyAgICAgICAgY2FzZSBFYXJseURlZjoKKyAg
ICAgICAgY2FzZSBFYXJseVpEZWY6CisgICAgICAgIGNhc2UgVXNlQWRkcjoKKyAgICAgICAgICAg
IHJldHVybiBPbmx5RWFybHk7CisgICAgICAgIGNhc2UgTGF0ZVVzZToKKyAgICAgICAgY2FzZSBM
YXRlQ29sZFVzZToKKyAgICAgICAgY2FzZSBEZWY6CisgICAgICAgIGNhc2UgWkRlZjoKKyAgICAg
ICAgICAgIHJldHVybiBPbmx5TGF0ZTsKKyAgICAgICAgY2FzZSBVc2VEZWY6CisgICAgICAgIGNh
c2UgVXNlWkRlZjoKKyAgICAgICAgY2FzZSBTY3JhdGNoOgorICAgICAgICAgICAgcmV0dXJuIEVh
cmx5QW5kTGF0ZTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICBzdGF0aWMgdm9pZCBm
b3JFYWNoUGhhc2UoVGltaW5nIHRpbWluZywgY29uc3QgRnVuYyYgZnVuYykKKyAgICB7CisgICAg
ICAgIGlmIChhY3RpdmVBdCh0aW1pbmcsIEVhcmx5KSkKKyAgICAgICAgICAgIGZ1bmMoRWFybHkp
OworICAgICAgICBpZiAoYWN0aXZlQXQodGltaW5nLCBMYXRlKSkKKyAgICAgICAgICAgIGZ1bmMo
TGF0ZSk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgc3Rh
dGljIHZvaWQgZm9yRWFjaFBoYXNlKFJvbGUgcm9sZSwgY29uc3QgRnVuYyYgZnVuYykKKyAgICB7
CisgICAgICAgIGlmIChhY3RpdmVBdChyb2xlLCBFYXJseSkpCisgICAgICAgICAgICBmdW5jKEVh
cmx5KTsKKyAgICAgICAgaWYgKGFjdGl2ZUF0KHJvbGUsIExhdGUpKQorICAgICAgICAgICAgZnVu
YyhMYXRlKTsKKyAgICB9CisgICAgCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBSb2xlIGlt
cGxpZXMgdGhhdCB0aGUgSW5zdCB3aWxsIFVzZSB0aGUgQXJnIGJlZm9yZSBkb2luZyBhbnl0aGlu
ZyBlbHNlLgogICAgIHN0YXRpYyBib29sIGlzRWFybHlVc2UoUm9sZSByb2xlKQogICAgIHsKQEAg
LTEzNTQsNiArMTQ0MCw4IEBAIG5hbWVzcGFjZSBXVEYgewogCiBKU19FWFBPUlRfUFJJVkFURSB2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpBaXI6OkFyZzo6S2luZCk7
CiBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6
OkIzOjpBaXI6OkFyZzo6VGVtcGVyYXR1cmUpOworSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6QWlyOjpBcmc6OlBoYXNlKTsKK0pTX0VY
UE9SVF9QUklWQVRFIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OkFp
cjo6QXJnOjpUaW1pbmcpOwogSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmludEludGVybmFsKFBy
aW50U3RyZWFtJiwgSlNDOjpCMzo6QWlyOjpBcmc6OlJvbGUpOwogSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6QWlyOjpBcmc6OlNpZ25l
ZG5lc3MpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxv
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2lj
QmxvY2suaAkocmV2aXNpb24gMjE0NjE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAgbmFtZXNw
YWNlIEFpciB7CiBjbGFzcyBCbG9ja0luc2VydGlvblNldDsKIGNsYXNzIENvZGU7CiBjbGFzcyBJ
bnNlcnRpb25TZXQ7CitjbGFzcyBQaGFzZUluc2VydGlvblNldDsKIAogY2xhc3MgQmFzaWNCbG9j
ayB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQmFzaWNCbG9jayk7CkBAIC0xNDAsNiArMTQx
LDcgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQmxvY2tJbnNlcnRpb25TZXQ7CiAgICAg
ZnJpZW5kIGNsYXNzIENvZGU7CiAgICAgZnJpZW5kIGNsYXNzIEluc2VydGlvblNldDsKKyAgICBm
cmllbmQgY2xhc3MgUGhhc2VJbnNlcnRpb25TZXQ7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWU+IGZy
aWVuZCBjbGFzcyBCMzo6R2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0OwogICAgIAogICAgIEJhc2lj
QmxvY2sodW5zaWduZWQgaW5kZXgsIGRvdWJsZSBmcmVxdWVuY3kpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja1dvcmtsaXN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja1dvcmtsaXN0LmgJKHJldmlzaW9uIDIx
NDYxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmxvY2tXb3JrbGlzdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7IG5hbWVzcGFjZSBBaXIgewogCi10eXBlZGVmIEdyYXBoTm9kZVdvcmtsaXN0PEJhc2lj
QmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrPj4gQmxvY2tXb3JrbGlzdDsKK3R5cGVkZWYgR3Jh
cGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2sqPj4gQmxvY2tX
b3JrbGlzdDsKIAogLy8gV2hlbiB5b3Ugc2F5IEJsb2NrV2l0aDxpbnQ+IHlvdSBzaG91bGQgcmVh
ZCBpdCBhcyAiYmxvY2sgd2l0aCBhbiBpbnQiLgogdGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcg
QmxvY2tXaXRoID0gR3JhcGhOb2RlV2l0aDxCYXNpY0Jsb2NrKiwgVD47CkBAIC00MSwxMSArNDEs
MTEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcgQmxvY2tXaXRoID0gRwogLy8gcGVybWl0
cyBmb3JjaWJseSBlbnF1ZXVlaW5nIHRoaW5ncyBldmVuIGlmIHRoZSBibG9jayBoYXMgYWxyZWFk
eSBiZWVuIHNlZW4uIEl0J3MgdXNlZnVsIGZvcgogLy8gdGhpbmdzIGxpa2UgYnVpbGRpbmcgYSBz
cGFubmluZyB0cmVlLCBpbiB3aGljaCBjYXNlIFQgKHRoZSBhdXhpbGlhcnkgcGF5bG9hZCkgd291
bGQgYmUgdGhlCiAvLyBzdWNjZXNzb3IgaW5kZXguCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2lu
ZyBFeHRlbmRlZEJsb2NrV29ya2xpc3QgPSBFeHRlbmRlZEdyYXBoTm9kZVdvcmtsaXN0PEJhc2lj
QmxvY2sqLCBULCBJbmRleFNldDxCYXNpY0Jsb2NrPj47Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1
c2luZyBFeHRlbmRlZEJsb2NrV29ya2xpc3QgPSBFeHRlbmRlZEdyYXBoTm9kZVdvcmtsaXN0PEJh
c2ljQmxvY2sqLCBULCBJbmRleFNldDxCYXNpY0Jsb2NrKj4+OwogCiB0eXBlZGVmIEdyYXBoTm9k
ZVdpdGhPcmRlcjxCYXNpY0Jsb2NrKj4gQmxvY2tXaXRoT3JkZXI7CiAKLXR5cGVkZWYgUG9zdE9y
ZGVyR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2s+PiBQ
b3N0T3JkZXJCbG9ja1dvcmtsaXN0OwordHlwZWRlZiBQb3N0T3JkZXJHcmFwaE5vZGVXb3JrbGlz
dDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jayo+PiBQb3N0T3JkZXJCbG9ja1dvcmts
aXN0OwogCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0ZHLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJDRkcuaAkocmV2aXNpb24gMjE0NjE4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDRkcuaAkod29ya2luZyBjb3B5KQpAQCAtMzksOCArMzks
OCBAQCBjbGFzcyBDRkcgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgog
ICAgIHR5cGVkZWYgQmFzaWNCbG9jayogTm9kZTsKLSAgICB0eXBlZGVmIEluZGV4U2V0PEJhc2lj
QmxvY2s+IFNldDsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBNYXAgPSBJbmRleE1h
cDxCYXNpY0Jsb2NrLCBUPjsKKyAgICB0eXBlZGVmIEluZGV4U2V0PEJhc2ljQmxvY2sqPiBTZXQ7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcgTWFwID0gSW5kZXhNYXA8QmFzaWNCbG9j
ayosIFQ+OwogICAgIHR5cGVkZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCA0PiBMaXN0OwogCiAgICAg
Q0ZHKENvZGUmIGNvZGUpCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICBOb2RlIHJvb3Qo
KSB7IHJldHVybiBtX2NvZGVbMF07IH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAg
TWFwPFQ+IG5ld01hcCgpIHsgcmV0dXJuIEluZGV4TWFwPEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9j
aywgVD4obV9jb2RlLnNpemUoKSk7IH0KKyAgICBNYXA8VD4gbmV3TWFwKCkgeyByZXR1cm4gSW5k
ZXhNYXA8SlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrKiwgVD4obV9jb2RlLnNpemUoKSk7IH0KIAog
ICAgIFN1Y2Nlc3NvckNvbGxlY3Rpb248QmFzaWNCbG9jaywgQmFzaWNCbG9jazo6U3VjY2Vzc29y
TGlzdD4gc3VjY2Vzc29ycyhOb2RlIG5vZGUpIHsgcmV0dXJuIG5vZGUtPnN1Y2Nlc3NvckJsb2Nr
cygpOyB9CiAgICAgQmFzaWNCbG9jazo6UHJlZGVjZXNzb3JMaXN0JiBwcmVkZWNlc3NvcnMoTm9k
ZSBub2RlKSB7IHJldHVybiBub2RlLT5wcmVkZWNlc3NvcnMoKTsgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbGltaW5hdGVEZWFkQ29kZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbGltaW5hdGVEZWFkQ29kZS5jcHAJ
KHJldmlzaW9uIDIxNDYxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRWxp
bWluYXRlRGVhZENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIGJvb2wg
ZWxpbWluYXRlRGVhZENvZGUoQ29kZSYgY29kZSkKICAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUo
Y29kZSwgImVsaW1pbmF0ZURlYWRDb2RlIik7CiAKICAgICBIYXNoU2V0PFRtcD4gbGl2ZVRtcHM7
Ci0gICAgSW5kZXhTZXQ8U3RhY2tTbG90PiBsaXZlU3RhY2tTbG90czsKKyAgICBJbmRleFNldDxT
dGFja1Nsb3QqPiBsaXZlU3RhY2tTbG90czsKICAgICBib29sIGNoYW5nZWQ7CiAKICAgICBhdXRv
IGlzQXJnTGl2ZSA9IFsmXSAoY29uc3QgQXJnJiBhcmcpIC0+IGJvb2wgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhPYnZpb3VzU3BpbGxzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeE9idmlvdXNTcGlsbHMuY3Bw
CShyZXZpc2lvbiAyMTQ2MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZp
eE9idmlvdXNTcGlsbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NDcsNyArNTQ3LDcgQEAgcHJp
dmF0ZToKICAgICB9OwogCiAgICAgQ29kZSYgbV9jb2RlOwotICAgIEluZGV4TWFwPEJhc2ljQmxv
Y2ssIFN0YXRlPiBtX2F0SGVhZDsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgU3RhdGU+IG1f
YXRIZWFkOwogICAgIFN0YXRlIG1fc3RhdGU7CiAgICAgQmFzaWNCbG9jayogbV9ibG9jayB7IG51
bGxwdHIgfTsKICAgICB1bnNpZ25lZCBtX2luc3RJbmRleCB7IDAgfTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeFBhcnRpYWxSZWdp
c3RlclN0YWxscy5jcHAJKHJldmlzaW9uIDIxNDYxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTU1LDEwICsxNTUsMTAgQEAgdm9pZCBmaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMoQ29kZSYg
Y29kZQogCiAgICAgLy8gRm9yIGVhY2ggYmxvY2ssIHRoaXMgcHJvdmlkZXMgdGhlIGRpc3RhbmNl
IHRvIHRoZSBsYXN0IGluc3RydWN0aW9uIHNldHRpbmcgZWFjaCByZWdpc3RlcgogICAgIC8vIG9u
IGJsb2NrICplbnRyeSouCi0gICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgRlBEZWZEaXN0YW5jZT4g
bGFzdERlZkRpc3RhbmNlKGNvZGUuc2l6ZSgpKTsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwg
RlBEZWZEaXN0YW5jZT4gbGFzdERlZkRpc3RhbmNlKGNvZGUuc2l6ZSgpKTsKIAogICAgIC8vIEJs
b2NrcyB3aXRoIGRpcnR5IGRpc3RhbmNlIGF0IGhlYWQuCi0gICAgSW5kZXhTZXQ8QmFzaWNCbG9j
az4gZGlydHk7CisgICAgSW5kZXhTZXQ8QmFzaWNCbG9jayo+IGRpcnR5OwogCiAgICAgLy8gRmly
c3QsIHdlIGNvbXB1dGUgdGhlIGxvY2FsIGRpc3RhbmNlIGZvciBlYWNoIGJsb2NrIGFuZCBwdXNo
IGl0IHRvIHRoZSBzdWNjZXNzb3JzLgogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2Rl
KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeFNwaWxsc0FmdGVy
VGVybWluYWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckZpeFNw
aWxsc0FmdGVyVGVybWluYWxzLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
QWlyQmxvY2tJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAi
QWlySW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKKyNpbmNsdWRl
ICJBaXJUbXBJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1l
c3BhY2UgQWlyIHsKKwordm9pZCBmaXhTcGlsbHNBZnRlclRlcm1pbmFscyhDb2RlJiBjb2RlKQor
eworICAgIC8vIEJlY2F1c2UgdGhlcmUgbWF5IGJlIHRlcm1pbmFscyB0aGF0IHByb2R1Y2UgdmFs
dWVzLCBJUkMgbWF5CisgICAgLy8gd2FudCB0byBzcGlsbCB0aG9zZSB0ZXJtaW5hbHMuIEl0J2xs
IGhhcHBlbiB0byBzcGlsbCBpdCBhZnRlcgorICAgIC8vIHRoZSB0ZXJtaW5hbC4gSWYgd2UgbGVm
dCB0aGUgZ3JhcGggaW4gdGhpcyBzdGF0ZSwgaXQnZCBiZSBpbnZhbGlkCisgICAgLy8gYmVjYXVz
ZSBhIHRlcm1pbmFsIG11c3QgYmUgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24gaW4gYSBibG9jay4KKyAg
ICAvLyBXZSBmaXggdGhhdCBoZXJlLgorCisgICAgQmxvY2tJbnNlcnRpb25TZXQgYmxvY2tJbnNl
cnRpb25TZXQoY29kZSk7CisgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChjb2RlKTsKKwor
ICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIHVuc2lnbmVkIHRl
cm1pbmFsSW5kZXggPSBibG9jay0+c2l6ZSgpOworICAgICAgICBib29sIGZvdW5kVGVybWluYWwg
PSBmYWxzZTsKKyAgICAgICAgd2hpbGUgKHRlcm1pbmFsSW5kZXgtLSkgeworICAgICAgICAgICAg
aWYgKGJsb2NrLT5hdCh0ZXJtaW5hbEluZGV4KS5pc1Rlcm1pbmFsKCkpIHsKKyAgICAgICAgICAg
ICAgICBmb3VuZFRlcm1pbmFsID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfVU5VU0VEKGZvdW5kVGVybWluYWws
IGZvdW5kVGVybWluYWwpOworCisgICAgICAgIGlmICh0ZXJtaW5hbEluZGV4ID09IGJsb2NrLT5z
aXplKCkgLSAxKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8gVGhlcmUgbXVz
dCBiZSBpbnN0cnVjdGlvbnMgYWZ0ZXIgdGhlIHRlcm1pbmFsIGJlY2F1c2UgaXQncyBub3QgdGhl
IGxhc3QgaW5zdHJ1Y3Rpb24uCisgICAgICAgIEFTU0VSVCh0ZXJtaW5hbEluZGV4IDwgYmxvY2st
PnNpemUoKSAtIDEpOworICAgICAgICBWZWN0b3I8SW5zdCwgMT4gaW5zdHNUb01vdmU7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IHRlcm1pbmFsSW5kZXggKyAxOyBpIDwgYmxvY2stPnNpemUo
KTsgaSsrKQorICAgICAgICAgICAgaW5zdHNUb01vdmUuYXBwZW5kKGJsb2NrLT5hdChpKSk7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGluc3RzVG9Nb3ZlLnNpemUoKSk7CisKKyAgICAgICAgZm9y
IChGcmVxdWVudGVkQmxvY2smIGZyZXF1ZW50ZWRTdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29y
cygpKSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBmcmVxdWVudGVkU3Vj
Y2Vzc29yLmJsb2NrKCk7CisgICAgICAgICAgICAvLyBJZiBzdWNjZXNzb3IncyBvbmx5IHByZWRl
Y2Vzc29yIGlzIGJsb2NrLCB3ZSBjYW4gcGxhbnQgdGhlIHNwaWxsIGluc2lkZQorICAgICAgICAg
ICAgLy8gdGhlIHN1Y2Nlc3Nvci4gT3RoZXJ3aXNlLCB3ZSBtdXN0IHNwbGl0IHRoZSBjcml0aWNh
bCBlZGdlIGFuZCBjcmVhdGUKKyAgICAgICAgICAgIC8vIGEgbmV3IGJsb2NrIGZvciB0aGUgc3Bp
bGwuCisgICAgICAgICAgICBpZiAoc3VjY2Vzc29yLT5udW1QcmVkZWNlc3NvcnMoKSA9PSAxKSB7
CisgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydEluc3RzKDAsIGluc3RzVG9Nb3Zl
KTsKKyAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShzdWNjZXNzb3IpOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBuZXdCbG9jayA9
IGJsb2NrSW5zZXJ0aW9uU2V0Lmluc2VydEJlZm9yZShzdWNjZXNzb3IsIHN1Y2Nlc3Nvci0+ZnJl
cXVlbmN5KCkpOworICAgICAgICAgICAgICAgIGZvciAoY29uc3QgSW5zdCYgaW5zdCA6IGluc3Rz
VG9Nb3ZlKQorICAgICAgICAgICAgICAgICAgICBuZXdCbG9jay0+YXBwZW5kSW5zdChpbnN0KTsK
KyAgICAgICAgICAgICAgICBuZXdCbG9jay0+YXBwZW5kSW5zdChJbnN0KEp1bXAsIGluc3RzVG9N
b3ZlLmxhc3QoKS5vcmlnaW4pKTsKKyAgICAgICAgICAgICAgICBuZXdCbG9jay0+c3VjY2Vzc29y
cygpLmFwcGVuZChzdWNjZXNzb3IpOworICAgICAgICAgICAgICAgIGZyZXF1ZW50ZWRTdWNjZXNz
b3IuYmxvY2soKSA9IG5ld0Jsb2NrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgYmxvY2stPnJlc2l6ZSh0ZXJtaW5hbEluZGV4ICsgMSk7CisgICAgfQorCisgICAgaWYgKGJs
b2NrSW5zZXJ0aW9uU2V0LmV4ZWN1dGUoKSkKKyAgICAgICAgY29kZS5yZXNldFJlYWNoYWJpbGl0
eSgpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZp
eFNwaWxsc0FmdGVyVGVybWluYWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5oCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2Ns
YXNzIENvZGU7CisKKy8vIEJlY2F1c2UgdGhlcmUgbWF5IGJlIHRlcm1pbmFscyB0aGF0IHByb2R1
Y2UgdmFsdWVzLCB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yIG1heQorLy8gd2FudCB0byBzcGlsbCB0
aG9zZSB0ZXJtaW5hbHMuIEl0J2xsIGhhcHBlbiB0byBzcGlsbCBpdCBhZnRlcgorLy8gdGhlIHRl
cm1pbmFsLiBJZiB3ZSBsZWZ0IHRoZSBncmFwaCBpbiB0aGlzIHN0YXRlLCBpdCdkIGJlIGludmFs
aWQKKy8vIGJlY2F1c2UgYSB0ZXJtaW5hbCBtdXN0IGJlIHRoZSBsYXN0IGluc3RydWN0aW9uIGlu
IGEgYmxvY2suCisvLyBXZSBmaXggdGhhdCBoZXJlLgordm9pZCBmaXhTcGlsbHNBZnRlclRlcm1p
bmFscyhDb2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyR2VuZXJhdGUuY3BwCShyZXZpc2lvbiAyMTQ2MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjks
NyBAQAogI2lmIEVOQUJMRShCM19KSVQpCiAKICNpbmNsdWRlICJBaXJBbGxvY2F0ZVJlZ2lzdGVy
c0J5R3JhcGhDb2xvcmluZy5oIgorI2luY2x1ZGUgIkFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5l
YXJTY2FuLmgiCiAjaW5jbHVkZSAiQWlyQWxsb2NhdGVTdGFjay5oIgogI2luY2x1ZGUgIkFpckNv
ZGUuaCIKICNpbmNsdWRlICJBaXJFbGltaW5hdGVEZWFkQ29kZS5oIgpAQCAtNTcsNyArNTgsNyBA
QAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CiAKLXZv
aWQgcHJlcGFyZUZvckdlbmVyYXRpb24oQ29kZSYgY29kZSkKK3ZvaWQgcHJlcGFyZUZvckdlbmVy
YXRpb24oQ29kZSYgY29kZSwgdW5zaWduZWQgb3B0TGV2ZWwpCiB7CiAgICAgVGltaW5nU2NvcGUg
dGltaW5nU2NvcGUoIkFpcjo6cHJlcGFyZUZvckdlbmVyYXRpb24iKTsKICAgICAKQEAgLTg5LDE4
ICs5MCwyMiBAQCB2b2lkIHByZXBhcmVGb3JHZW5lcmF0aW9uKENvZGUmIGNvZGUpCiAgICAgLy8g
Rm9yIGRlYnVnZ2luZywgeW91IGNhbiB1c2Ugc3BpbGxFdmVyeXRoaW5nKCkgdG8gcHV0IGV2ZXJ5
dGhpbmcgdG8gdGhlIHN0YWNrIGJldHdlZW4gZWFjaCBJbnN0LgogICAgIGlmIChPcHRpb25zOjph
aXJTcGlsbHNFdmVyeXRoaW5nKCkpCiAgICAgICAgIHNwaWxsRXZlcnl0aGluZyhjb2RlKTsKLSAg
ICBlbHNlCisgICAgZWxzZSBpZiAob3B0TGV2ZWwgPj0gMikKICAgICAgICAgYWxsb2NhdGVSZWdp
c3RlcnNCeUdyYXBoQ29sb3JpbmcoY29kZSk7CisgICAgZWxzZQorICAgICAgICBhbGxvY2F0ZVJl
Z2lzdGVyc0J5TGluZWFyU2Nhbihjb2RlKTsKIAogICAgIGlmIChPcHRpb25zOjpsb2dBaXJSZWdp
c3RlclByZXNzdXJlKCkpIHsKICAgICAgICAgZGF0YUxvZygiUmVnaXN0ZXIgcHJlc3N1cmUgYWZ0
ZXIgcmVnaXN0ZXIgYWxsb2NhdGlvbjpcbiIpOwogICAgICAgICBsb2dSZWdpc3RlclByZXNzdXJl
KGNvZGUpOwogICAgIH0KLQotICAgIC8vIFRoaXMgcmVwbGFjZXMgdXNlcyBvZiBzcGlsbCBzbG90
cyB3aXRoIHJlZ2lzdGVycyBvciBjb25zdGFudHMgaWYgcG9zc2libGUuIEl0IGRvZXMgdGhpcyBi
eQotICAgIC8vIG1pbmltaXppbmcgdGhlIGFtb3VudCB0aGF0IHdlIHBlcnR1cmIgdGhlIGFscmVh
ZHktY2hvc2VuIHJlZ2lzdGVyIGFsbG9jYXRpb24uIEl0IG1heSBleHRlbmQKLSAgICAvLyB0aGUg
bGl2ZSByYW5nZXMgb2YgcmVnaXN0ZXJzIHRob3VnaC4KLSAgICBmaXhPYnZpb3VzU3BpbGxzKGNv
ZGUpOworICAgIAorICAgIGlmIChvcHRMZXZlbCA+PSAyKSB7CisgICAgICAgIC8vIFRoaXMgcmVw
bGFjZXMgdXNlcyBvZiBzcGlsbCBzbG90cyB3aXRoIHJlZ2lzdGVycyBvciBjb25zdGFudHMgaWYg
cG9zc2libGUuIEl0IGRvZXMgdGhpcyBieQorICAgICAgICAvLyBtaW5pbWl6aW5nIHRoZSBhbW91
bnQgdGhhdCB3ZSBwZXJ0dXJiIHRoZSBhbHJlYWR5LWNob3NlbiByZWdpc3RlciBhbGxvY2F0aW9u
LiBJdCBtYXkgZXh0ZW5kCisgICAgICAgIC8vIHRoZSBsaXZlIHJhbmdlcyBvZiByZWdpc3RlcnMg
dGhvdWdoLgorICAgICAgICBmaXhPYnZpb3VzU3BpbGxzKGNvZGUpOworICAgIH0KIAogICAgIGxv
d2VyQWZ0ZXJSZWdBbGxvYyhjb2RlKTsKIApAQCAtMTY1LDcgKzE3MCw3IEBAIHZvaWQgZ2VuZXJh
dGUoQ29kZSYgY29kZSwgQ0NhbGxIZWxwZXJzJiAKICAgICAgICAgaWYgKGJsb2NrKQogICAgICAg
ICAgICAgY29udGV4dC5ibG9ja0xhYmVsc1tibG9ja10gPSBCb3g8Q0NhbGxIZWxwZXJzOjpMYWJl
bD46OmNyZWF0ZSgpOwogICAgIH0KLSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBDQ2FsbEhlbHBl
cnM6Okp1bXBMaXN0PiBibG9ja0p1bXBzKGNvZGUuc2l6ZSgpKTsKKyAgICBJbmRleE1hcDxCYXNp
Y0Jsb2NrKiwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdD4gYmxvY2tKdW1wcyhjb2RlLnNpemUoKSk7
CiAKICAgICBhdXRvIGxpbmsgPSBbJl0gKENDYWxsSGVscGVyczo6SnVtcCBqdW1wLCBCYXNpY0Js
b2NrKiB0YXJnZXQpIHsKICAgICAgICAgaWYgKGNvbnRleHQuYmxvY2tMYWJlbHNbdGFyZ2V0XS0+
aXNTZXQoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJh
dGUuaAkocmV2aXNpb24gMjE0NjE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJHZW5lcmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNiArMjcsOCBAQAogCiAjaWYgRU5B
QkxFKEIzX0pJVCkKIAorI2luY2x1ZGUgIkIzQ29tbW9uLmgiCisKIG5hbWVzcGFjZSBKU0Mgewog
CiBjbGFzcyBDQ2FsbEhlbHBlcnM7CkBAIC0zNyw3ICszOSw3IEBAIGNsYXNzIENvZGU7CiAKIC8v
IFRoaXMgdGFrZXMgYW4gQWlyOjpDb2RlIHRoYXQgaGFzbid0IGhhZCBhbnkgc3RhY2sgYWxsb2Nh
dGlvbiBhbmQgb3B0aW9uYWxseSBoYXNuJ3QgaGFkIGFueQogLy8gcmVnaXN0ZXIgYWxsb2NhdGlv
biBhbmQgZG9lcyBib3RoIG9mIHRob3NlIHRoaW5ncy4KLUpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
cHJlcGFyZUZvckdlbmVyYXRpb24oQ29kZSYpOworSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmVw
YXJlRm9yR2VuZXJhdGlvbihDb2RlJiwgdW5zaWduZWQgb3B0TGV2ZWwgPSBkZWZhdWx0T3B0TGV2
ZWwoKSk7CiAKIC8vIFRoaXMgZ2VuZXJhdGVzIHRoZSBjb2RlIHVzaW5nIHRoZSBnaXZlbiBDQ2Fs
bEhlbHBlcnMgaW5zdGFuY2UuIE5vdGUgdGhhdCB0aGlzIG1heSBjYWxsIGNhbGxiYWNrcwogLy8g
aW4gdGhlIHN1cHBsaWVkIGNvZGUgYXMgaXQgaXMgZ2VuZXJhdGluZy4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGlvbkNvbnRleHQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRpb25Db250ZXh0LmgJKHJl
dmlzaW9uIDIxNDYxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJh
dGlvbkNvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAg
ICAgdHlwZWRlZiBTaGFyZWRUYXNrPExhdGVQYXRoRnVuY3Rpb24+IExhdGVQYXRoOwogCiAgICAg
VmVjdG9yPFJlZlB0cjxMYXRlUGF0aD4+IGxhdGVQYXRoczsKLSAgICBJbmRleE1hcDxCYXNpY0Js
b2NrLCBCb3g8Q0NhbGxIZWxwZXJzOjpMYWJlbD4+IGJsb2NrTGFiZWxzOworICAgIEluZGV4TWFw
PEJhc2ljQmxvY2sqLCBCb3g8Q0NhbGxIZWxwZXJzOjpMYWJlbD4+IGJsb2NrTGFiZWxzOwogICAg
IEJhc2ljQmxvY2sqIGN1cnJlbnRCbG9jayB7IG51bGxwdHIgfTsKICAgICB1bnNpZ25lZCBpbmRl
eEluQmxvY2sgeyBVSU5UX01BWCB9OwogICAgIENvZGUqIGNvZGUgeyBudWxscHRyIH07CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmgJKHJl
dmlzaW9uIDIxNDYxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0
aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgogICAgICAg
ICBhcHBlbmRJbnNlcnRpb24oSW5zZXJ0aW9uKGluZGV4LCBzdGQ6OmZvcndhcmQ8SW5zdD4oaW5z
dCkpKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSW5zdFZlY3Rvcj4KKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBJbnN0VmVjdG9yPgogICAgIHZvaWQgaW5zZXJ0SW5zdHMoc2l6ZV90
IGluZGV4LCBjb25zdCBJbnN0VmVjdG9yJiBpbnN0cykKICAgICB7CiAgICAgICAgIGZvciAoY29u
c3QgSW5zdCYgaW5zdCA6IGluc3RzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJJbnN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0Fpckluc3QuY3BwCShyZXZpc2lvbiAyMTQ2MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpckluc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw4IEBAIGJvb2wg
SW5zdDo6aGFzTGF0ZVVzZU9yRGVmKCkKIAogYm9vbCBJbnN0OjpuZWVkc1BhZGRpbmcoSW5zdCog
cHJldkluc3QsIEluc3QqIG5leHRJbnN0KQogewotICAgIHJldHVybiBwcmV2SW5zdCAmJiBuZXh0
SW5zdCAmJiBwcmV2SW5zdC0+aGFzTGF0ZVVzZU9yRGVmKCkgJiYgbmV4dEluc3QtPmhhc0Vhcmx5
RGVmKCk7CisgICAgYm9vbCByZXN1bHQgPSBwcmV2SW5zdCAmJiBuZXh0SW5zdCAmJiBwcmV2SW5z
dC0+aGFzTGF0ZVVzZU9yRGVmKCkgJiYgbmV4dEluc3QtPmhhc0Vhcmx5RGVmKCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAogYm9vbCBJbnN0OjpoYXNBcmdFZmZlY3RzKCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxv
Yy5jcHAJKHJldmlzaW9uIDIxNDYxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsMTEg
QEAgdm9pZCBsb3dlckFmdGVyUmVnQWxsb2MoQ29kZSYgY29kZSkKIAogICAgIGlmICh2ZXJib3Nl
KQogICAgICAgICBkYXRhTG9nKCJDb2RlIGJlZm9yZSBsb3dlckFmdGVyUmVnQWxsb2M6XG4iLCBj
b2RlKTsKKyAgICAKKyAgICAvLyBGSVhNRToKKyAgICAvLyAxKSBUaGlzIHNob3VsZCBiYWlsIGVh
cmx5IGlmIHRoZXJlIGFyZSBubyBTaHVmZmxlcyBvciBDb2xkQ0NhbGxzLiAoT09QUyEhIG5lZWQg
YnVnIHVybCkKKyAgICAvLyAyKSBXZSBzaG91bGQgbm90IGludHJvZHVjZSBTaHVmZmxlcyBmb3Ig
bm9ybWFsIGNhbGxzLiAoT09QUyEhIG5lZWQgYnVnIHVybCkKKyAgICAvLyAzKSBXZSBzaG91bGQg
ZW1pdCBDb2xkQ0NhbGwgb25seSBhdCBvcHRMZXZlbD09MS4gKE9PUFMhISBuZWVkIGJ1ZyB1cmwp
CiAKICAgICBIYXNoTWFwPEluc3QqLCBSZWdpc3RlclNldD4gdXNlZFJlZ2lzdGVyczsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlckVudHJ5U3dpdGNoLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyRW50cnlT
d2l0Y2guY3BwCShyZXZpc2lvbiAyMTQ2MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpckxvd2VyRW50cnlTd2l0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3
IEBAIHZvaWQgbG93ZXJFbnRyeVN3aXRjaChDb2RlJiBjb2RlKQogICAgIC8vIE5vdyBkdXBsaWNh
dGUgdGhlbS4KICAgICBWZWN0b3I8RnJlcXVlbnRlZEJsb2NrPiBlbnRyeXBvaW50czsKICAgICBl
bnRyeXBvaW50cy5hcHBlbmQoRnJlcXVlbnRlZEJsb2NrKGNvZGVbMF0sIGVudHJ5cG9pbnRGcmVx
dWVuY2llc1swXSkpOwotICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIEJhc2ljQmxvY2sqPiBtYXAo
Y29kZS5zaXplKCkpOworICAgIEluZGV4TWFwPEJhc2ljQmxvY2sqLCBCYXNpY0Jsb2NrKj4gbWFw
KGNvZGUuc2l6ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGVudHJ5cG9pbnRJbmRleCA9IDE7IGVu
dHJ5cG9pbnRJbmRleCA8IGNvZGUucHJvYygpLm51bUVudHJ5cG9pbnRzKCk7ICsrZW50cnlwb2lu
dEluZGV4KSB7CiAgICAgICAgIG1hcC5jbGVhcigpOwogICAgICAgICBmb3IgKEJhc2ljQmxvY2sq
IGJsb2NrIDogd29ya2xpc3Quc2VlbigpLnZhbHVlcyhjb2RlKSkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcwkocmV2aXNpb24gMjE0NjE4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwkod29y
a2luZyBjb3B5KQpAQCAtNjQ5LDcgKzY0OSw3IEBAIE1vdmUzMiBVOkc6MzIsIFpEOkc6MzIKIE1v
dmUzMiBVOkc6MzIsIFpEOkc6MzIsIFM6RzozMgogICAgIEFkZHIsIEFkZHIsIFRtcAogCi1TdG9y
ZVplcm8zMiBVOkc6MzIKK1N0b3JlWmVybzMyIEQ6RzozMgogICAgIEFkZHIKICAgICBJbmRleAog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBoYXNlSW5zZXJ0aW9uU2V0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBoYXNl
SW5zZXJ0aW9uU2V0LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpclBoYXNlSW5zZXJ0aW9uU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJQaGFzZUluc2VydGlvblNldC5oIgorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckJhc2ljQmxvY2suaCIKKyNpbmNsdWRl
IDx3dGYvQnViYmxlU29ydC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFt
ZXNwYWNlIEFpciB7CisKK3ZvaWQgUGhhc2VJbnNlcnRpb25TZXQ6OmV4ZWN1dGUoQmFzaWNCbG9j
ayogYmxvY2spCit7CisgICAgYnViYmxlU29ydChtX2luc2VydGlvbnMuYmVnaW4oKSwgbV9pbnNl
cnRpb25zLmVuZCgpKTsKKyAgICBleGVjdXRlSW5zZXJ0aW9ucyhibG9jay0+bV9pbnN0cywgbV9p
bnNlcnRpb25zKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJQaGFzZUluc2VydGlvblNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyUGhhc2VJbnNlcnRpb25TZXQuaAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBoYXNlSW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNs
dWRlICJBaXJJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlIDx3dGYvSW5zZXJ0aW9uLmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFt
ZXNwYWNlIEFpciB7CisKK2NsYXNzIEJhc2ljQmxvY2s7CitjbGFzcyBDb2RlOworCisvLyBQaGFz
ZWQgaW5zZXJ0aW9ucyBhbGxvdyB5b3UgdG8gYXNjcmliZSBwaGFzZXMgdG8gdGhlIHRoaW5ncyBp
bnNlcnRlZCBhdCBhbiBpbnN0cnVjdGlvbiBib3VuZGFyeS4KK2NsYXNzIFBoYXNlSW5zZXJ0aW9u
IDogcHVibGljIEluc2VydGlvbiB7CitwdWJsaWM6CisgICAgUGhhc2VJbnNlcnRpb24oKSB7IH0K
KyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFBoYXNlSW5zZXJ0aW9uKHNpemVf
dCBpbmRleCwgdW5zaWduZWQgcGhhc2UsIFQmJiBlbGVtZW50KQorICAgICAgICA6IEluc2VydGlv
bihpbmRleCwgc3RkOjpmb3J3YXJkPFQ+KGVsZW1lbnQpKQorICAgICAgICAsIG1fcGhhc2UocGhh
c2UpCisgICAgeworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBwaGFzZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcGhhc2U7IH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPChjb25zdCBQaGFzZUluc2Vy
dGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaW5kZXgoKSAhPSBvdGhlci5p
bmRleCgpKQorICAgICAgICAgICAgcmV0dXJuIGluZGV4KCkgPCBvdGhlci5pbmRleCgpOworICAg
ICAgICByZXR1cm4gbV9waGFzZSA8IG90aGVyLm1fcGhhc2U7CisgICAgfQorCitwcml2YXRlOgor
ICAgIHVuc2lnbmVkIG1fcGhhc2UgeyAwIH07Cit9OworCitjbGFzcyBQaGFzZUluc2VydGlvblNl
dCB7CitwdWJsaWM6CisgICAgUGhhc2VJbnNlcnRpb25TZXQoKQorICAgIHsKKyAgICB9CisgICAg
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2b2lkIGFwcGVuZEluc2VydGlvbihUJiYg
aW5zZXJ0aW9uKQorICAgIHsKKyAgICAgICAgbV9pbnNlcnRpb25zLmFwcGVuZChzdGQ6OmZvcndh
cmQ8VD4oaW5zZXJ0aW9uKSk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIElu
c3Q+CisgICAgdm9pZCBpbnNlcnRJbnN0KHNpemVfdCBpbmRleCwgdW5zaWduZWQgcGhhc2UsIElu
c3QmJiBpbnN0KQorICAgIHsKKyAgICAgICAgYXBwZW5kSW5zZXJ0aW9uKFBoYXNlSW5zZXJ0aW9u
KGluZGV4LCBwaGFzZSwgc3RkOjpmb3J3YXJkPEluc3Q+KGluc3QpKSk7CisgICAgfQorICAgIAor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICB2b2lkIGluc2VydChzaXpl
X3QgaW5kZXgsIHVuc2lnbmVkIHBoYXNlLCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAg
eworICAgICAgICBpbnNlcnRJbnN0KGluZGV4LCBwaGFzZSwgSW5zdChzdGQ6OmZvcndhcmQ8QXJn
dW1lbnRzPihhcmd1bWVudHMpLi4uKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZXhlY3V0ZShC
YXNpY0Jsb2NrKik7CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPFBoYXNlSW5zZXJ0aW9uLCA4PiBt
X2luc2VydGlvbnM7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpclJlZ0xpdmVuZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJSZWdMaXZlbmVzcy5oCShyZXZpc2lvbiAyMTQ2MTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ0xpdmVuZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMw
LDYgKzMwLDcgQEAKICNpbmNsdWRlICJBaXJCYXNpY0Jsb2NrLmgiCiAjaW5jbHVkZSAiQWlyQ29k
ZS5oIgogI2luY2x1ZGUgIkFpckluc3QuaCIKKyNpbmNsdWRlICJBaXJMaXZlbmVzcy5oIgogI2lu
Y2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBu
YW1lc3BhY2UgQWlyIHsKQEAgLTU0LDYgKzU1LDE5IEBAIHB1YmxpYzoKICAgICAgICAgewogICAg
ICAgICB9CiAgICAgICAgIAorICAgICAgICAvLyBJZiB5b3UgY29tcHV0ZWQgVG1wIGxpdmVuZXNz
IGZvciBzb21lIGJhbmssIHlvdSBjYW4gdXNlIHJlZyBsaXZlbmVzcyB0byBmaWxsIGluIHRoZSBi
bGFua3MuCisgICAgICAgIC8vIE5vdGUgdGhhdCB3aGF0IGhhcHBlbnMgdG8gdGhlIHJlZ2lzdGVy
cyBub3QgYmVsb25naW5nIHRvIHRoZSBiYW5rIGlzIGFyYml0cmFyeSAtIHRoZXkgbWF5IGdldAor
ICAgICAgICAvLyBzZXQgb3Igbm90LgorICAgICAgICB0ZW1wbGF0ZTxCYW5rIGJhbms+CisgICAg
ICAgIExvY2FsQ2FsYyhUbXBMaXZlbmVzczxiYW5rPiYgbGl2ZW5lc3MsIEJhc2ljQmxvY2sqIGJs
b2NrKQorICAgICAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgICAgICB7CisgICAgICAgICAg
ICBmb3IgKFRtcCB0bXAgOiBsaXZlbmVzcy5saXZlQXRUYWlsKGJsb2NrKSkgeworICAgICAgICAg
ICAgICAgIGlmICh0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgbV93b3Jrc2V0LnNl
dCh0bXAucmVnKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAogICAgICAg
ICBjb25zdCBSZWdpc3RlclNldCYgbGl2ZSgpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAg
IHJldHVybiBtX3dvcmtzZXQ7CkBAIC04NCw4ICs5OCw4IEBAIHB1YmxpYzoKICAgICB9CiAgICAg
CiBwcml2YXRlOgotICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIFJlZ2lzdGVyU2V0PiBtX2xpdmVB
dEhlYWQ7Ci0gICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgUmVnaXN0ZXJTZXQ+IG1fbGl2ZUF0VGFp
bDsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgUmVnaXN0ZXJTZXQ+IG1fbGl2ZUF0SGVhZDsK
KyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgUmVnaXN0ZXJTZXQ+IG1fbGl2ZUF0VGFpbDsKIH07
CiAKIH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAJKHJldmlzaW9u
IDIxNDYxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRo
aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQWly
QXJnSW5saW5lcy5oIgogI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJGaXhTcGls
bHNBZnRlclRlcm1pbmFscy5oIgogI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgogI2luY2x1
ZGUgIkFpckluc3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQWlyTGl2ZW5lc3MuaCIKQEAgLTQ2LDcg
KzQ3LDcgQEAgdm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYgY29kZSkKICAgICBwYWRJbnRlcmZl
cmVuY2UoY29kZSk7CiAKICAgICAvLyBXZSB3YW50IHRvIGtub3cgdGhlIHNldCBvZiByZWdpc3Rl
cnMgdXNlZCBhdCBldmVyeSBwb2ludCBpbiBldmVyeSBiYXNpYyBibG9jay4KLSAgICBJbmRleE1h
cDxCYXNpY0Jsb2NrLCBWZWN0b3I8UmVnaXN0ZXJTZXQ+PiB1c2VkUmVnaXN0ZXJzKGNvZGUuc2l6
ZSgpKTsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgVmVjdG9yPFJlZ2lzdGVyU2V0Pj4gdXNl
ZFJlZ2lzdGVycyhjb2RlLnNpemUoKSk7CiAgICAgR1BMaXZlbmVzcyBncExpdmVuZXNzKGNvZGUp
OwogICAgIEZQTGl2ZW5lc3MgZnBMaXZlbmVzcyhjb2RlKTsKICAgICBmb3IgKEJhc2ljQmxvY2sq
IGJsb2NrIDogY29kZSkgewpAQCAtMTczLDEwICsxNzQsMTMgQEAgdm9pZCBzcGlsbEV2ZXJ5dGhp
bmcoQ29kZSYgY29kZSkKICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2hvc2Vu
UmVnKTsKIAogICAgICAgICAgICAgICAgICAgICB0bXAgPSBUbXAoY2hvc2VuUmVnKTsKKyAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChyb2xlID09IEFyZzo6U2Ny
YXRjaCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAgICAg
ICAgICBPcGNvZGUgbW92ZSA9IGJhbmsgPT0gR1AgPyBNb3ZlIDogTW92ZURvdWJsZTsKIAotICAg
ICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0FueVVzZShyb2xlKSAmJiByb2xlICE9IEFyZzo6
U2NyYXRjaCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlVc2Uocm9sZSkpCiAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KGluc3RJbmRleCwgbW92
ZSwgaW5zdC5vcmlnaW4sIGFyZywgdG1wKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6
aXNBbnlEZWYocm9sZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5z
ZXJ0KGluc3RJbmRleCArIDEsIG1vdmUsIGluc3Qub3JpZ2luLCB0bXAsIGFyZyk7CkBAIC0xODQs
NiArMTg4LDggQEAgdm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYgY29kZSkKICAgICAgICAgfQog
ICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CiAgICAgfQorICAgIAorICAgIGZp
eFNwaWxsc0FmdGVyVGVybWluYWxzKGNvZGUpOwogfQogCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMzo6QWlyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuY3BwCShy
ZXZpc2lvbiAyMTQ2MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjgsOCArMjgsMTUgQEAKIAogI2lmIEVOQUJMRShCM19KSVQpCiAK
KyNpbmNsdWRlICJBaXJUbXBJbmxpbmVzLmgiCisKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeyBuYW1lc3BhY2UgQWlyIHsKIAordGVtcGxhdGU8PiBjb25zdCBjaGFyKiBjb25zdCBUbXA6
OkluZGV4ZWQ8R1A+OjpkdW1wUHJlZml4ID0gIiV0bXAiOwordGVtcGxhdGU8PiBjb25zdCBjaGFy
KiBjb25zdCBUbXA6OkluZGV4ZWQ8RlA+OjpkdW1wUHJlZml4ID0gIiVmdG1wIjsKK3RlbXBsYXRl
PD4gY29uc3QgY2hhciogY29uc3QgVG1wOjpBYnNvbHV0ZWx5SW5kZXhlZDxHUD46OmR1bXBQcmVm
aXggPSAiJWFicyI7Cit0ZW1wbGF0ZTw+IGNvbnN0IGNoYXIqIGNvbnN0IFRtcDo6QWJzb2x1dGVs
eUluZGV4ZWQ8RlA+OjpkdW1wUHJlZml4ID0gIiVmYWJzIjsKKwogdm9pZCBUbXA6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBpZiAoISp0aGlzKSB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmgJKHJldmlzaW9uIDIxNDYxOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzQsNiArNzQsMTQg
QEAgcHVibGljOgogICAgICAgICByZXN1bHQubV92YWx1ZSA9IGVuY29kZUZQVG1wKGluZGV4KTsK
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CisgICAgCisgICAgc3RhdGljIFRtcCB0bXBG
b3JJbmRleChCYW5rIGJhbmssIHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgaWYgKGJh
bmsgPT0gR1ApCisgICAgICAgICAgICByZXR1cm4gZ3BUbXBGb3JJbmRleChpbmRleCk7CisgICAg
ICAgIEFTU0VSVChiYW5rID09IEZQKTsKKyAgICAgICAgcmV0dXJuIGZwVG1wRm9ySW5kZXgoaW5k
ZXgpOworICAgIH0KIAogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVy
biAhIW1fdmFsdWU7IH0KICAgICAKQEAgLTE1NCw3ICsxNjIsMTYgQEAgcHVibGljOgogICAgICAg
ICAgICAgcmV0dXJuIGdwVG1wSW5kZXgoKTsKICAgICAgICAgcmV0dXJuIGZwVG1wSW5kZXgoKTsK
ICAgICB9Ci0KKyAgICAKKyAgICB0ZW1wbGF0ZTxCYW5rIGJhbms+IGNsYXNzIEluZGV4ZWQ7Cisg
ICAgdGVtcGxhdGU8QmFuayBiYW5rPiBjbGFzcyBBYnNvbHV0ZWx5SW5kZXhlZDsKKyAgICAKKyAg
ICB0ZW1wbGF0ZTxCYW5rIGJhbms+CisgICAgSW5kZXhlZDxiYW5rPiBpbmRleGVkKCkgY29uc3Q7
CisgICAgCisgICAgdGVtcGxhdGU8QmFuayBiYW5rPgorICAgIEFic29sdXRlbHlJbmRleGVkPGJh
bms+IGFic29sdXRlbHlJbmRleGVkKCkgY29uc3Q7CisgICAgCiAgICAgYm9vbCBpc0FsaXZlKCkg
Y29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiAhISp0aGlzOwpAQCAtMTk1LDYgKzIxMiw4IEBA
IHB1YmxpYzoKICAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KGluZGV4
KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CisgICAgCisgICAgc3RhdGljIFRtcCB0
bXBGb3JBYnNvbHV0ZUluZGV4KEJhbmssIHVuc2lnbmVkKTsKIAogcHJpdmF0ZToKICAgICBzdGF0
aWMgaW50IGVuY29kZUdQKHVuc2lnbmVkIGluZGV4KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJUbXBJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJUbXBJbmxpbmVzLmgJKHJldmlzaW9uIDIxNDYxOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC05Miw2ICs5Miw1OCBAQCBzdHJ1Y3QgQWJzb2x1dGVUbXBNYXBwZXI8RlA+IHsKICAgICB9CiB9
OwogCit0ZW1wbGF0ZTxCYW5rIHRoZUJhbms+CitjbGFzcyBUbXA6OkluZGV4ZWQgOiBwdWJsaWMg
VG1wIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZHVtcFByZWZpeDsK
KyAgICAKKyAgICBJbmRleGVkKFRtcCB0bXApCisgICAgICAgIDogVG1wKHRtcCkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiB0bXBJbmRleCh0aGVCYW5rKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTxCYW5rIHRoZUJh
bms+CitjbGFzcyBUbXA6OkFic29sdXRlbHlJbmRleGVkIDogcHVibGljIFRtcCB7CitwdWJsaWM6
CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGR1bXBQcmVmaXg7CisKKyAgICBBYnNvbHV0
ZWx5SW5kZXhlZChUbXAgdG1wKQorICAgICAgICA6IFRtcCh0bXApCisgICAgeworICAgIH0KKyAg
ICAKKyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gQWJz
b2x1dGVUbXBNYXBwZXI8dGhlQmFuaz46OmFic29sdXRlSW5kZXgoKnRoaXMpOworICAgIH0KK307
CisKK3RlbXBsYXRlPEJhbmsgdGhlQmFuaz4KK2lubGluZSBUbXA6OkluZGV4ZWQ8dGhlQmFuaz4g
VG1wOjppbmRleGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW5kZXhlZDx0aGVCYW5rPigqdGhp
cyk7Cit9CisKK3RlbXBsYXRlPEJhbmsgdGhlQmFuaz4KK2lubGluZSBUbXA6OkFic29sdXRlbHlJ
bmRleGVkPHRoZUJhbms+IFRtcDo6YWJzb2x1dGVseUluZGV4ZWQoKSBjb25zdAoreworICAgIHJl
dHVybiBBYnNvbHV0ZWx5SW5kZXhlZDx0aGVCYW5rPigqdGhpcyk7Cit9CisKK2lubGluZSBUbXAg
VG1wOjp0bXBGb3JBYnNvbHV0ZUluZGV4KEJhbmsgYmFuaywgdW5zaWduZWQgaW5kZXgpCit7Cisg
ICAgaWYgKGJhbmsgPT0gR1ApCisgICAgICAgIHJldHVybiBBYnNvbHV0ZVRtcE1hcHBlcjxHUD46
OnRtcEZyb21BYnNvbHV0ZUluZGV4KGluZGV4KTsKKyAgICBBU1NFUlQoYmFuayA9PSBGUCk7Cisg
ICAgcmV0dXJuIEFic29sdXRlVG1wTWFwcGVyPEZQPjo6dG1wRnJvbUFic29sdXRlSW5kZXgoaW5k
ZXgpOworfQorCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCiAKICNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNl
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQu
aAkocmV2aXNpb24gMjE0NjE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rl
clNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsOCArMTAyLDE2IEBAIHB1YmxpYzoKICAgICB9
CiAgICAgCiAgICAgLy8gQWxzbyBhbGxvdyBhZGQvcmVtb3ZlL2NvbnRhaW5zIHRlcm1pbm9sb2d5
LCB3aGljaCBtZWFucyB0aGUgc2FtZSB0aGluZyBhcyBzZXQvY2xlYXIvZ2V0LgotICAgIHZvaWQg
YWRkKFJlZyByZWcpIHsgc2V0KHJlZyk7IH0KLSAgICB2b2lkIHJlbW92ZShSZWcgcmVnKSB7IGNs
ZWFyKHJlZyk7IH0KKyAgICBib29sIGFkZChSZWcgcmVnKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KCEhcmVnKTsKKyAgICAgICAgcmV0dXJuICFtX2JpdHMudGVzdEFuZFNldChyZWcuaW5kZXgoKSk7
CisgICAgfQorICAgIGJvb2wgcmVtb3ZlKFJlZyByZWcpCisgICAgeworICAgICAgICBBU1NFUlQo
ISFyZWcpOworICAgICAgICByZXR1cm4gbV9iaXRzLnRlc3RBbmRDbGVhcihyZWcuaW5kZXgoKSk7
CisgICAgfQogICAgIGJvb2wgY29udGFpbnMoUmVnIHJlZykgY29uc3QgeyByZXR1cm4gZ2V0KHJl
Zyk7IH0KICAgICAKICAgICB2b2lkIG1lcmdlKGNvbnN0IFJlZ2lzdGVyU2V0JiBvdGhlcikgeyBt
X2JpdHMubWVyZ2Uob3RoZXIubV9iaXRzKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMjE0NjE4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjUsNiArMjI1LDcgQEAg
dHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgdihib29sLCB1c2VGVExKSVQs
IHRydWUsIE5vcm1hbCwgImFsbG93cyB0aGUgRlRMIEpJVCB0byBiZSB1c2VkIGlmIHRydWUiKSBc
CiAgICAgdihib29sLCB1c2VGVExUQkFBLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2
KGJvb2wsIHZhbGlkYXRlRlRMT1NSRXhpdExpdmVuZXNzLCBmYWxzZSwgTm9ybWFsLCBudWxscHRy
KSBcCisgICAgdih1bnNpZ25lZCwgZGVmYXVsdEIzT3B0TGV2ZWwsIDIsIE5vcm1hbCwgbnVsbHB0
cikgXAogICAgIHYoYm9vbCwgYjNBbHdheXNGYWlsc0JlZm9yZUNvbXBpbGUsIGZhbHNlLCBOb3Jt
YWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGIzQWx3YXlzRmFpbHNCZWZvcmVMaW5rLCBmYWxz
ZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCBmdGxDcmFzaGVzLCBmYWxzZSwgTm9y
bWFsLCBudWxscHRyKSAvKiBmb29sLXByb29mIHdheSBvZiBjaGVja2luZyB0aGF0IHlvdSBlbmRl
ZCB1cCBpbiB0aGUgRlRMLiA7LSkgKi9cCkBAIC0zOTgsNiArMzk5LDggQEAgdHlwZWRlZiBjb25z
dCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgdihib29sLCBsb2dCM1BoYXNlVGltZXMsIGZhbHNl
LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGRvdWJsZSwgcmFyZUJsb2NrUGVuYWx0eSwgMC4w
MDEsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgYWlyU3BpbGxzRXZlcnl0aGluZywg
ZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAorICAgIHYoYm9vbCwgYWlyTGluZWFyU2NhblZlcmJv
c2UsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KGJvb2wsIGFpckxpbmVhclNjYW5T
cGlsbHNFdmVyeXRoaW5nLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCBh
aXJGb3JjZUJyaWdnc0FsbG9jYXRvciwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYo
Ym9vbCwgYWlyRm9yY2VJUkNBbGxvY2F0b3IsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAg
ICB2KGJvb2wsIGNvYWxlc2NlU3BpbGxTbG90cywgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgJ
KHJldmlzaW9uIDIxNDYxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lS
R2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQogCisjaW5jbHVkZSAiQjNDb21tb24uaCIKICNpbmNsdWRlICJCM0NvbXBpbGF0
aW9uLmgiCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCiAjaW5jbHVkZSAiVk0uaCIKQEAgLTQ4
LDcgKzQ5LDcgQEAgc3RydWN0IENvbXBpbGF0aW9uQ29udGV4dCB7CiAgICAgQ0NhbGxIZWxwZXJz
OjpDYWxsIGpzRW50cnlwb2ludFRvV2FzbUVudHJ5cG9pbnRDYWxsOwogfTsKIAotRXhwZWN0ZWQ8
c3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENv
bXBpbGUoVk0mLCBDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBj
b25zdCBTaWduYXR1cmUqLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBN
b2R1bGVJbmZvcm1hdGlvbiYsIGNvbnN0IFZlY3RvcjxTaWduYXR1cmVJbmRleD4mLCBNZW1vcnlN
b2RlLCB1bnNpZ25lZCBvcHRMZXZlbCA9IDEpOworRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPFdh
c21JbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoVk0mLCBDb21waWxh
dGlvbkNvbnRleHQmLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBTaWduYXR1cmUqLCBW
ZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYs
IGNvbnN0IFZlY3RvcjxTaWduYXR1cmVJbmRleD4mLCBNZW1vcnlNb2RlLCB1bnNpZ25lZCBvcHRM
ZXZlbCA9IEIzOjpkZWZhdWx0T3B0TGV2ZWwoKSk7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpX
YXNtCiAKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMTQ2MTgpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ2IEBACisyMDE3LTAzLTMwICBGaWxpcCBQaXpsbyAg
PGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgQWlyIHNob3VsZCBzdXBwb3J0IGxpbmVhciBz
Y2FuIGZvciBvcHRMZXZlbDwyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzAxNjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KyAgICAgICAgCisgICAgICAgIFRoaXMgY2hhbmdlIGludHJvZHVjZXMgYSBuZXcgbG93LWxhdGVu
Y3kgcmVnaXN0ZXIgYWxsb2NhdG9yLiBJdCBjYW4gYWxsb2NhdGUgcmVnaXN0ZXJzIHZlcnkKKyAg
ICAgICAgcXVpY2tseSBieSBkb2luZyBhIHJlbGF0aXZlbHkgcG9vciBqb2IuIEltcGxlbWVudGlu
ZyB0aGlzIGFsZ29yaXRobSByZXF1aXJlZCBiZWVmaW5nIHVwIHNvbWUgb2YKKyAgICAgICAgb3Vy
IGNvcmUgYWxnb3JpdGhtcy4KKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvRGVxdWUu
aDogTWFrZSBpdCBwb3NzaWJsZSB0byBkbyBzb21lIGJhc2ljIHByaW9yaXR5IHF1ZXVlaW5nIHdp
dGggdGhpcyBkYXRhIHN0cnVjdHVyZS4KKyAgICAgICAgKFdURjo6aW5saW5lQ2FwYWNpdHk+Ojpy
ZW1vdmVBbGxNYXRjaGluZyk6CisgICAgICAgIChXVEY6OmlubGluZUNhcGFjaXR5Pjo6YXBwZW5k
QW5kQnViYmxlKToKKyAgICAgICAgKFdURjo6aW5saW5lQ2FwYWNpdHk+Ojp0YWtlTGFzdCk6Cisg
ICAgICAgICogd3RmL0luZGV4S2V5VHlwZS5oOiBBZGRlZC4gVGhpcyBtYWtlcyBpdCBwb3NzaWJs
ZSB0byB1c2UgSW5kZXhNYXAgYW5kIEluZGV4U2V0IHdpdGggdmFsdWUgb3IgcG9pbnRlciB0eXBl
cy4gUHJldmlvdXNseSB0aGV5IGp1c3Qgd29ya2VkIHdpdGggcG9pbnRlciB0eXBlcy4KKyAgICAg
ICAgKFdURjo6SW5kZXhLZXlUeXBlOjppbmRleCk6CisgICAgICAgICogd3RmL0luZGV4TWFwLmg6
IEFkb3B0IEluZGV4S2V5VHlwZS4KKyAgICAgICAgKFdURjo6SW5kZXhNYXA6Om9wZXJhdG9yW10p
OgorICAgICAgICAoV1RGOjpJbmRleE1hcDo6YXBwZW5kKToKKyAgICAgICAgKiB3dGYvSW5kZXhT
ZXQuaDogQWRvcHQgSW5kZXhLZXlUeXBlLgorICAgICAgICAoV1RGOjpJbmRleFNldDo6YWRkKToK
KyAgICAgICAgKFdURjo6SW5kZXhTZXQ6OmFkZEFsbCk6CisgICAgICAgIChXVEY6OkluZGV4U2V0
OjpyZW1vdmUpOgorICAgICAgICAoV1RGOjpJbmRleFNldDo6Y29udGFpbnMpOgorICAgICAgICAo
V1RGOjpJbmRleFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAq
IHd0Zi9SYW5nZS5oOiBBZGRlZC4gVGhpcyB1c2VkIHRvIGJlIEIzOjpIZWFwUmFuZ2UuIFRoaXMg
Z2VuZXJhbGl6ZXMgdGhhdCBkYXRhIHN0cnVjdHVyZSB0byBhbnkga2luZCBvZiByYW5nZSBzdHVm
Zi4KKyAgICAgICAgKFdURjo6UmFuZ2U6OlJhbmdlKToKKyAgICAgICAgKFdURjo6UmFuZ2U6OnRv
cCk6CisgICAgICAgIChXVEY6OlJhbmdlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdURjo6UmFu
Z2U6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV1RGOjpSYW5nZTo6b3BlcmF0b3IgYm9vbCk6Cisg
ICAgICAgIChXVEY6OlJhbmdlOjpvcGVyYXRvcnwpOgorICAgICAgICAoV1RGOjpSYW5nZTo6b3Bl
cmF0b3J8PSk6CisgICAgICAgIChXVEY6OlJhbmdlOjpiZWdpbik6CisgICAgICAgIChXVEY6OlJh
bmdlOjplbmQpOgorICAgICAgICAoV1RGOjpSYW5nZTo6b3ZlcmxhcHMpOgorICAgICAgICAoV1RG
OjpSYW5nZTo6ZHVtcCk6CisgICAgICAgICogd3RmL1JhbmdlU2V0Lmg6CisgICAgICAgIChXVEY6
OlJhbmdlU2V0OjphZGQpOgorCiAyMDE3LTAzLTI1ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50
ZWFAZ21haWwuY29tPgogCiAgICAgICAgIFtKU0NdIE1vdmUgcGxhdGZvcm1UaHJlYWRTaWduYWwg
dG8gV1RGCkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDIxNDYxOCkKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDggQEAKIC8qIEJlZ2luIFBCWEJ1aWxkRmls
ZSBzZWN0aW9uICovCiAJCTBGMEQ4NUI0MTcyMzRDQzEwMDMzODIxMCAvKiBOb0xvY2suaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEQ4NUIzMTcyMzRD
QjEwMDMzODIxMCAvKiBOb0xvY2suaCAqLzsgfTsKIAkJMEYwRkNEREUxREQxNjdGOTAwQ0NBQjUz
IC8qIExvY2tBbGdvcml0aG0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMEZDREREMUREMTY3RjkwMENDQUI1MyAvKiBMb2NrQWxnb3JpdGhtLmggKi87
IH07CisJCTBGMkFDNTYxMUU4OUY3MEMwMDAxRUUzRiAvKiBSYW5nZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQUM1NjAxRTg5RjcwQzAwMDFFRTNG
IC8qIFJhbmdlLmggKi87IH07CisJCTBGMkFDNTYzMUU4QTAxNDkwMDAxRUUzRiAvKiBJbmRleEtl
eVR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MkFDNTYyMUU4QTAxNDkwMDAxRUUzRiAvKiBJbmRleEtleVR5cGUuaCAqLzsgfTsKIAkJMEYyQjY2
QTYxN0I2QjRGQjAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3VudGVkLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBNDE3QjZCNEY3MDBBN0FF
M0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCAqLzsgfTsKIAkJMEYyQjY2QTcxN0I2QjRGRDAw
QTdBRTNGIC8qIEZsaXBCeXRlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYyQjY2QTUxN0I2QjRGNzAwQTdBRTNGIC8qIEZsaXBCeXRlcy5oICovOyB9
OwogCQkwRjMwQkE5MDFFNzg3MDhFMDAyQ0E4NDcgLyogR2xvYmFsVmVyc2lvbi5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMwQkE4QTFFNzg3MDhF
MDAyQ0E4NDcgLyogR2xvYmFsVmVyc2lvbi5jcHAgKi87IH07CkBAIC00MDgsNiArNDEwLDggQEAK
IC8qIEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCQkwRjBEODVCMzE3MjM0Q0Ix
MDAzMzgyMTAgLyogTm9Mb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5vTG9jay5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjBGQ0RERDFERDE2N0Y5MDBDQ0FCNTMgLyogTG9ja0FsZ29y
aXRobS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2NrQWxnb3JpdGhtLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkFDNTYwMUU4OUY3MEMwMDAxRUUzRiAv
KiBSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSYW5nZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJBQzU2MjFFOEEwMTQ5MDAwMUVFM0YgLyogSW5k
ZXhLZXlUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZGV4S2V5VHlw
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCNjZBNDE3QjZCNEY3MDBBN0FF
M0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVmZXJyYWJsZVJl
ZkNvdW50ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQjY2QTUxN0I2QjRG
NzAwQTdBRTNGIC8qIEZsaXBCeXRlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGbGlwQnl0ZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzMDBCN0QxOEFCNDhCNDAwQTZENzJFIC8qIEhh
c2hNZXRob2QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGFzaE1ldGhvZC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMTAxOCwxMCArMTAyMiwxMSBAQAogCQkJCUE4QTQ3MkJBMTUxQTgyNUEw
MDQxMjNGRiAvKiBIYXNoVHJhaXRzLmggKi8sCiAJCQkJQThBNDcyQkIxNTFBODI1QTAwNDEyM0ZG
IC8qIEhleE51bWJlci5oICovLAogCQkJCUZFODkyNUFGMUQwMERBRUMwMDQ2OTA3RSAvKiBJbmRl
bnRlci5oICovLAotCQkJCTlDNjdDNTQyNTg5MzQ4RTI4NUI0OTY5OSAvKiBJbmRleGVkQ29udGFp
bmVySXRlcmF0b3IuaCAqLywKKwkJCQkwRjJBQzU2MjFFOEEwMTQ5MDAwMUVFM0YgLyogSW5kZXhL
ZXlUeXBlLmggKi8sCiAJCQkJNUI0MzM4M0E1RDBCNDYzQzk0MzNEOTMzIC8qIEluZGV4TWFwLmgg
Ki8sCiAJCQkJMzEzN0UxRDdEQkQ4NEFDMzhGQUU0RDM0IC8qIEluZGV4U2V0LmggKi8sCiAJCQkJ
MjY4NEQ0MzUxQzAwMEQ0MDAwODFENjYzIC8qIEluZGV4U3BhcnNlU2V0LmggKi8sCisJCQkJOUM2
N0M1NDI1ODkzNDhFMjg1QjQ5Njk5IC8qIEluZGV4ZWRDb250YWluZXJJdGVyYXRvci5oICovLAog
CQkJCUE4QTQ3MkJDMTUxQTgyNUEwMDQxMjNGRiAvKiBJbmxpbmVBU00uaCAqLywKIAkJCQlBNzBE
QTA4MjE3OTlGMDREMDA1MjlBOUIgLyogSW5zZXJ0aW9uLmggKi8sCiAJCQkJN0NERDdGRjcxODZE
MjkxRTAwNzQzM0NEIC8qIEl0ZXJhdG9yQWRhcHRvcnMuaCAqLywKQEAgLTExMDAsNiArMTEwNSw3
IEBACiAJCQkJQThBNDcyRkIxNTFBODI1QjAwNDEyM0ZGIC8qIFJhbmRvbU51bWJlci5jcHAgKi8s
CiAJCQkJQThBNDcyRkMxNTFBODI1QjAwNDEyM0ZGIC8qIFJhbmRvbU51bWJlci5oICovLAogCQkJ
CUE4QTQ3MkZEMTUxQTgyNUIwMDQxMjNGRiAvKiBSYW5kb21OdW1iZXJTZWVkLmggKi8sCisJCQkJ
MEYyQUM1NjAxRTg5RjcwQzAwMDFFRTNGIC8qIFJhbmdlLmggKi8sCiAJCQkJMEY3MjVDQUIxQzUw
NDYxNjAwQUQ5NDNBIC8qIFJhbmdlU2V0LmggKi8sCiAJCQkJMEY4NzEwNTkxNjY0M0YxOTAwOTBC
MEFEIC8qIFJhd1BvaW50ZXIuaCAqLywKIAkJCQkwRkRFODdGNjFERkQwN0NDMDA2NEMzOTAgLyog
UmVjdXJzaXZlTG9ja0FkYXB0ZXIuaCAqLywKQEAgLTE0ODUsNiArMTQ5MSw3IEBACiAJCQkJQzkx
NkI5NzVGMDJGNEY3RThCNEFCMTJEIC8qIEluZGV4TWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlD
OEIwRTFBMUUwMUE0ODZFQjk1RTBEMTEgLyogSW5kZXhTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTI2ODRENDM2MUMwMDBENDAwMDgxRDY2MyAvKiBJbmRleFNwYXJzZVNldC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEYyQUM1NjMxRThBMDE0OTAwMDFFRTNGIC8qIEluZGV4S2V5VHlwZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQThBNDczREMxNTFBODI1QjAwNDEyM0ZGIC8qIElubGluZUFTTS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTcwREEwODQxNzk5RjA0RDAwNTI5QTlCIC8qIEluc2VydGlvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMjYxNDdCMEExNUREQ0NEQzAwRERCOTA3IC8qIEludGVnZXJU
b1N0cmluZ0NvbnZlcnNpb24uaCBpbiBIZWFkZXJzICovLApAQCAtMTU4Niw2ICsxNTkzLDcgQEAK
IAkJCQk0MzBCNDc4OTFBQUFBQzFBMDAxMjIzREEgLyogU3RyaW5nQ29tbW9uLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBOEE0NzQzRTE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nQ29uY2F0ZW5hdGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTdDRDRDMjcwMUUyQzgyQjkwMDkyOTQ3MCAvKiBTdHJpbmdD
b25jYXRlbmF0ZU51bWJlcnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkFDNTYxMUU4OUY3MEMw
MDAxRUUzRiAvKiBSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0MkMxNTFBODI1QjAw
NDEyM0ZGIC8qIFN0cmluZ0V4dHJhcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0M0YxNTFB
ODI1QjAwNDEyM0ZGIC8qIFN0cmluZ0hhc2guaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDg3NDU0
MTdBMEJEQUUwMEZBMDRDQiAvKiBTdHJpbmdIYXNoRHVtcENvbnRleHQuaCBpbiBIZWFkZXJzICov
LApJbmRleDogU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIxNDYxOCkKKysrIFNvdXJjZS9X
VEYvd3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNiArMTAwLDcgQEAg
c2V0KFdURl9IRUFERVJTCiAgICAgUkFNU2l6ZS5oCiAgICAgUmFuZG9tTnVtYmVyLmgKICAgICBS
YW5kb21OdW1iZXJTZWVkLmgKKyAgICBSYW5nZS5oCiAgICAgUmFuZ2VTZXQuaAogICAgIFJhd1Bv
aW50ZXIuaAogICAgIFJlY3Vyc2l2ZUxvY2tBZGFwdGVyLmgKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L0RlcXVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRGVxdWUuaAkocmV2aXNpb24g
MjE0NjE4KQorKysgU291cmNlL1dURi93dGYvRGVxdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC04OSw2ICs4OSwx
OSBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVMYXN0KCk7CiAgICAgdm9pZCByZW1vdmUoaXRl
cmF0b3ImKTsKICAgICB2b2lkIHJlbW92ZShjb25zdF9pdGVyYXRvciYpOworICAgIAorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmM+IHZvaWQgcmVtb3ZlQWxsTWF0Y2hpbmcoY29uc3QgRnVuYyYp
OworICAgIAorICAgIC8vIFRoaXMgaXMgYSBwcmlvcml0eSBlbnF1ZXVlLiBUaGUgY2FsbGJhY2sg
aXMgZ2l2ZW4gYSB2YWx1ZSwgYW5kIGlmIGl0IHJldHVybnMgdHJ1ZSwgdGhlbiB0aGlzCisgICAg
Ly8gd2lsbCBwdXQgdGhlIGFwcGVuZGVkIHZhbHVlIGJlZm9yZSB0aGF0IHZhbHVlLiBJdCB3aWxs
IGtlZXAgYnViYmxpbmcgdW50aWwgdGhlIGNhbGxiYWNrIHJldHVybnMKKyAgICAvLyBmYWxzZSBv
ciB0aGUgdmFsdWUgZW5kcyB1cCBhdCB0aGUgaGVhZCBvZiB0aGUgcXVldWUuCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVSwgdHlwZW5hbWUgRnVuYz4KKyAgICB2b2lkIGFwcGVuZEFuZEJ1YmJsZShV
JiYsIGNvbnN0IEZ1bmMmKTsKKyAgICAKKyAgICAvLyBSZW1vdmUgYW5kIHJldHVybiB0aGUgbGFz
dCBlbGVtZW50IGZvciB3aGljaCB0aGUgY2FsbGJhY2sgcmV0dXJucyB0cnVlLiBSZXR1cm5zIGEg
bnVsbCB2ZXJzaW9uIG9mCisgICAgLy8gVCBpZiBpdCB0aGUgY2FsbGJhY2sgYWx3YXlzIHJldHVy
bnMgZmFsc2UuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICBUIHRha2VMYXN0KGNv
bnN0IEZ1bmMmKTsKIAogICAgIHZvaWQgY2xlYXIoKTsKIApAQCAtNTI0LDYgKzUzNyw1NSBAQCBp
bmxpbmUgdm9pZCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OnJlCiAgICAgY2hlY2tWYWxpZGl0
eSgpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgoraW5saW5lIHZvaWQgRGVxdWU8VCwgaW5saW5lQ2FwYWNp
dHk+OjpyZW1vdmVBbGxNYXRjaGluZyhjb25zdCBGdW5jJiBmdW5jKQoreworICAgIHNpemVfdCBj
b3VudCA9IHNpemUoKTsKKyAgICB3aGlsZSAoY291bnQtLSkgeworICAgICAgICBUIHZhbHVlID0g
dGFrZUZpcnN0KCk7CisgICAgICAgIGlmICghZnVuYyh2YWx1ZSkpCisgICAgICAgICAgICBhcHBl
bmQoV1RGTW92ZSh2YWx1ZSkpOworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6
ZV90IGlubGluZUNhcGFjaXR5PgordGVtcGxhdGU8dHlwZW5hbWUgVSwgdHlwZW5hbWUgRnVuYz4K
K2lubGluZSB2b2lkIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6YXBwZW5kQW5kQnViYmxlKFUm
JiB2YWx1ZSwgY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICBhcHBlbmQoV1RGTW92ZSh2YWx1ZSkp
OworICAgIGl0ZXJhdG9yIGJlZ2luID0gdGhpcy0+YmVnaW4oKTsKKyAgICBpdGVyYXRvciBpdGVy
ID0gZW5kKCk7CisgICAgLS1pdGVyOworICAgIHdoaWxlIChpdGVyICE9IGJlZ2luKSB7CisgICAg
ICAgIGl0ZXJhdG9yIHByZXYgPSBpdGVyOworICAgICAgICAtLXByZXY7CisgICAgICAgIGlmICgh
ZnVuYygqcHJldikpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHN0ZDo6c3dhcCgqcHJl
diwgKml0ZXIpOworICAgICAgICBpdGVyID0gcHJldjsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+
CitpbmxpbmUgVCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OnRha2VMYXN0KGNvbnN0IEZ1bmMm
IGZ1bmMpCit7CisgICAgdW5zaWduZWQgY291bnQgPSAwOworICAgIHVuc2lnbmVkIHNpemUgPSB0
aGlzLT5zaXplKCk7CisgICAgd2hpbGUgKGNvdW50IDwgc2l6ZSkgeworICAgICAgICBUIGNhbmRp
ZGF0ZSA9IHRha2VMYXN0KCk7CisgICAgICAgIGlmIChmdW5jKGNhbmRpZGF0ZSkpIHsKKyAgICAg
ICAgICAgIHdoaWxlIChjb3VudC0tKQorICAgICAgICAgICAgICAgIGFwcGVuZCh0YWtlRmlyc3Qo
KSk7CisgICAgICAgICAgICByZXR1cm4gY2FuZGlkYXRlOworICAgICAgICB9CisgICAgICAgIGNv
dW50Kys7CisgICAgICAgIHByZXBlbmQoV1RGTW92ZShjYW5kaWRhdGUpKTsKKyAgICB9CisgICAg
cmV0dXJuIFQoKTsKK30KKwogI2lmZGVmIE5ERUJVRwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6
ZV90IGlubGluZUNhcGFjaXR5PiBpbmxpbmUgdm9pZCBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxp
bmVDYXBhY2l0eT46OmNoZWNrVmFsaWRpdHkoKSBjb25zdCB7IH0KIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4gaW5saW5lIHZvaWQgRGVxdWVJdGVyYXRvckJhc2U8
VCwgaW5saW5lQ2FwYWNpdHk+OjpjaGVja1ZhbGlkaXR5KGNvbnN0IERlcXVlSXRlcmF0b3JCYXNl
PFQsIGlubGluZUNhcGFjaXR5PiYpIGNvbnN0IHsgfQpJbmRleDogU291cmNlL1dURi93dGYvSW5k
ZXhLZXlUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSW5kZXhLZXlUeXBlLmgJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvSW5kZXhLZXlUeXBlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+CitzdHJ1Y3QgSW5kZXhLZXlUeXBlIHsKKyAgICBzdGF0aWMgc2l6ZV90IGlu
ZGV4KGNvbnN0IFQmIGtleSkgeyByZXR1cm4ga2V5LmluZGV4KCk7IH0KK307CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+CitzdHJ1Y3QgSW5kZXhLZXlUeXBlPFQqPiB7CisgICAgc3RhdGljIHNpemVf
dCBpbmRleChUKiBrZXkpIHsgcmV0dXJuIGtleS0+aW5kZXgoKTsgfQorfTsKKworfSAvLyBuYW1l
c3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0luZGV4TWFwLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvSW5kZXhNYXAuaAkocmV2aXNpb24gMjE0NjE4KQorKysgU291cmNl
L1dURi93dGYvSW5kZXhNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAj
cHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgPHd0Zi9JbmRleEtleVR5cGUuaD4KICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtNzAsMTggKzcxLDI0IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIG1fdmVjdG9yW2luZGV4XTsKICAgICB9CiAgICAgCi0gICAgVmFs
dWUmIG9wZXJhdG9yW10oS2V5KiBrZXkpCisgICAgVmFsdWUmIG9wZXJhdG9yW10oY29uc3QgS2V5
JiBrZXkpCiAgICAgewotICAgICAgICByZXR1cm4gbV92ZWN0b3Jba2V5LT5pbmRleCgpXTsKKyAg
ICAgICAgcmV0dXJuIG1fdmVjdG9yW0luZGV4S2V5VHlwZTxLZXk+OjppbmRleChrZXkpXTsKICAg
ICB9CiAgICAgCi0gICAgY29uc3QgVmFsdWUmIG9wZXJhdG9yW10oS2V5KiBrZXkpIGNvbnN0Cisg
ICAgY29uc3QgVmFsdWUmIG9wZXJhdG9yW10oY29uc3QgS2V5JiBrZXkpIGNvbnN0CiAgICAgewot
ICAgICAgICByZXR1cm4gbV92ZWN0b3Jba2V5LT5pbmRleCgpXTsKKyAgICAgICAgcmV0dXJuIG1f
dmVjdG9yW0luZGV4S2V5VHlwZTxLZXk+OjppbmRleChrZXkpXTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBhcHBlbmQoY29uc3QgS2V5JiBrZXksIFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoSW5kZXhLZXlUeXBlPEtleT46OmluZGV4KGtleSkgPT0gbV92ZWN0b3Iu
c2l6ZSgpKTsKKyAgICAgICAgbV92ZWN0b3IuYXBwZW5kKHZhbHVlKTsKICAgICB9CiAKIHByaXZh
dGU6Ci0gICAgVmVjdG9yPFZhbHVlPiBtX3ZlY3RvcjsKKyAgICBWZWN0b3I8VmFsdWUsIDAsIFVu
c2FmZVZlY3Rvck92ZXJmbG93PiBtX3ZlY3RvcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpJ
bmRleDogU291cmNlL1dURi93dGYvSW5kZXhTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9JbmRleFNldC5oCShyZXZpc2lvbiAyMTQ2MTgpCisrKyBTb3VyY2UvV1RGL3d0Zi9JbmRl
eFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSA8d3Rm
L0JpdFZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKyNpbmNsdWRlIDx3
dGYvSW5kZXhLZXlUeXBlLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCkBAIC00MiwzMCArNDMsMzAg
QEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBib29sIGFkZChUKiB2YWx1ZSkKKyAgICBi
b29sIGFkZChjb25zdCBUJiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiAhbV9zZXQuc2V0
KHZhbHVlLT5pbmRleCgpKTsKKyAgICAgICAgcmV0dXJuICFtX3NldC5zZXQoSW5kZXhLZXlUeXBl
PFQ+OjppbmRleCh2YWx1ZSkpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJh
YmxlPgogICAgIGJvb2wgYWRkQWxsKGNvbnN0IEl0ZXJhYmxlJiBpdGVyYWJsZSkKICAgICB7CiAg
ICAgICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgIGZvciAoVCogdmFsdWUgOiBpdGVy
YWJsZSkKKyAgICAgICAgZm9yIChjb25zdCBUJiB2YWx1ZSA6IGl0ZXJhYmxlKQogICAgICAgICAg
ICAgcmVzdWx0IHw9IGFkZCh2YWx1ZSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQog
Ci0gICAgYm9vbCByZW1vdmUoVCogdmFsdWUpCisgICAgYm9vbCByZW1vdmUoY29uc3QgVCYgdmFs
dWUpCiAgICAgewotICAgICAgICByZXR1cm4gbV9zZXQuY2xlYXIodmFsdWUtPmluZGV4KCkpOwor
ICAgICAgICByZXR1cm4gbV9zZXQuY2xlYXIoSW5kZXhLZXlUeXBlPFQ+OjppbmRleCh2YWx1ZSkp
OwogICAgIH0KIAotICAgIGJvb2wgY29udGFpbnMoVCogdmFsdWUpIGNvbnN0CisgICAgYm9vbCBj
b250YWlucyhjb25zdCBUJiB2YWx1ZSkgY29uc3QKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBtX3NldC5nZXQodmFs
dWUtPmluZGV4KCkpOworICAgICAgICByZXR1cm4gbV9zZXQuZ2V0KEluZGV4S2V5VHlwZTxUPjo6
aW5kZXgodmFsdWUpKTsKICAgICB9CiAKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0CkBAIC0xMDAs
NyArMTAxLDcgQEAgcHVibGljOgogICAgICAgICAgICAgewogICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICBUKiBvcGVyYXRvciooKQorICAgICAgICAgICAgVCBvcGVyYXRvciooKQogICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBtX2NvbGxlY3Rpb24tPmF0KCptX2l0ZXIp
OwogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL1dURi93dGYvUmFuZ2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9SYW5nZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYv
d3RmL1JhbmdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVk
ZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBOb3RlIHRoYXQg
dGhlICdiZWdpbicgaXMgaW5jbHVzaXZlLCB3aGlsZSB0aGUgJ2VuZCcgaXMgZXhjbHVzaXZlLiBU
aGVzZSB0d28gcmFuZ2VzIGFyZSBub24tCisvLyBvdmVybGFwcGluZzoKKy8vCisvLyAgICAgcmFu
Z2VBID0gMC4uLjgKKy8vICAgICByYW5nZUIgPSA4Li4uMTYKKwordGVtcGxhdGU8dHlwZW5hbWUg
UGFzc2VkVHlwZT4KK2NsYXNzIFJhbmdlIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFBhc3NlZFR5
cGUgVHlwZTsKKyAgICAKKyAgICBSYW5nZSgpCisgICAgICAgIDogbV9iZWdpbigwKQorICAgICAg
ICAsIG1fZW5kKDApCisgICAgeworICAgIH0KKworICAgIGV4cGxpY2l0IFJhbmdlKFR5cGUgdmFs
dWUpCisgICAgICAgIDogbV9iZWdpbih2YWx1ZSkKKyAgICAgICAgLCBtX2VuZCh2YWx1ZSArIDEp
CisgICAgeworICAgICAgICBBU1NFUlQobV9lbmQgPj0gbV9iZWdpbik7CisgICAgfQorCisgICAg
UmFuZ2UoVHlwZSBiZWdpbiwgVHlwZSBlbmQpCisgICAgICAgIDogbV9iZWdpbihiZWdpbikKKyAg
ICAgICAgLCBtX2VuZChlbmQpCisgICAgeworICAgICAgICBBU1NFUlQobV9lbmQgPj0gbV9iZWdp
bik7CisgICAgICAgIGlmIChtX2JlZ2luID09IG1fZW5kKSB7CisgICAgICAgICAgICAvLyBDYW5v
bmljYWxpemUgZW1wdHkgcmFuZ2VzLgorICAgICAgICAgICAgbV9iZWdpbiA9IDA7CisgICAgICAg
ICAgICBtX2VuZCA9IDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgUmFuZ2UgdG9w
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBSYW5nZShzdGQ6Om51bWVyaWNfbGltaXRzPFR5cGU+
OjptaW4oKSwgc3RkOjpudW1lcmljX2xpbWl0czxUeXBlPjo6bWF4KCkpOworICAgIH0KKworICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBSYW5nZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV9iZWdpbiA9PSBvdGhlci5tX2JlZ2luCisgICAgICAgICAgICAmJiBtX2VuZCA9
PSBvdGhlci5tX2VuZDsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgUmFuZ2Um
IG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwor
ICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4g
bV9iZWdpbiAhPSBtX2VuZDsgfQorCisgICAgUmFuZ2Ugb3BlcmF0b3J8KGNvbnN0IFJhbmdlJiBv
dGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghKnRoaXMpCisgICAgICAgICAgICByZXR1
cm4gb3RoZXI7CisgICAgICAgIGlmICghb3RoZXIpCisgICAgICAgICAgICByZXR1cm4gKnRoaXM7
CisgICAgICAgIHJldHVybiBSYW5nZSgKKyAgICAgICAgICAgIHN0ZDo6bWluKG1fYmVnaW4sIG90
aGVyLm1fYmVnaW4pLAorICAgICAgICAgICAgc3RkOjptYXgobV9lbmQsIG90aGVyLm1fZW5kKSk7
CisgICAgfQorICAgIAorICAgIFJhbmdlJiBvcGVyYXRvcnw9KGNvbnN0IFJhbmdlJiBvdGhlcikK
KyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyA9ICp0aGlzIHwgb3RoZXI7CisgICAgfQorICAg
IAorICAgIFR5cGUgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2JlZ2luOyB9CisgICAgVHlwZSBl
bmQoKSBjb25zdCB7IHJldHVybiBtX2VuZDsgfQorCisgICAgYm9vbCBvdmVybGFwcyhjb25zdCBS
YW5nZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpyYW5nZXNPdmVy
bGFwKG1fYmVnaW4sIG1fZW5kLCBvdGhlci5tX2JlZ2luLCBvdGhlci5tX2VuZCk7CisgICAgfQor
CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBp
ZiAoKnRoaXMgPT0gUmFuZ2UoKSkgeworICAgICAgICAgICAgb3V0LnByaW50KCJCb3R0b20iKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoKnRoaXMgPT0gdG9w
KCkpIHsKKyAgICAgICAgICAgIG91dC5wcmludCgiVG9wIik7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1fYmVnaW4gPT0gbV9lbmQgKyAxKSB7CisgICAgICAg
ICAgICBvdXQucHJpbnQobV9iZWdpbik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgb3V0LnByaW50KG1fYmVnaW4sICIuLi4iLCBtX2VuZCk7CisgICAgfQorCitwcml2
YXRlOgorICAgIFR5cGUgbV9iZWdpbjsKKyAgICBUeXBlIG1fZW5kOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV1RGCisKK3VzaW5nIFdURjo6UmFuZ2U7CisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1Jh
bmdlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUmFuZ2VTZXQuaAkocmV2aXNp
b24gMjE0NjE4KQorKysgU291cmNlL1dURi93dGYvUmFuZ2VTZXQuaAkod29ya2luZyBjb3B5KQpA
QCAtNzcsNiArNzcsMTAgQEAgcHVibGljOgogICAgICAgICBtX2lzQ29tcGFjdCA9IGZhbHNlOwog
CiAgICAgICAgIC8vIFdlIGFwcGVuZCB3aXRob3V0IGNvbXBhY3Rpbmcgb25seSBpZiBkb2luZyBz
byBpcyBndWFyYW50ZWVkIG5vdCB0byByZXNpemUgdGhlIHZlY3Rvci4KKyAgICAgICAgLy8gRklY
TUU6IFRoaXMgaGV1cmlzdGljIGlzIGFsbW9zdCBjZXJ0YWlubHkgd3JvbmcsIGJlY2F1c2Ugd2Ug
ZG9uJ3QgY29udHJvbCB0aGUgY2FwYWNpdHkuIEkKKyAgICAgICAgLy8gdGhpbmsgdGhhdCB0aGlz
IG1lYW5zIHRoYXQgd2Ugd2lsbCBzb21ldGltZXMgYmUgcmFnZS1jb21wYWN0aW5nIHdoZW4gd2Ug
YXJlIGp1c3Qgc2h5IG9mIHRoZQorICAgICAgICAvLyBjYXBhY2l0eS4KKyAgICAgICAgLy8gT09Q
UzogbmVlZCBidWcgdXJsCiAgICAgICAgIGlmIChtX3Jhbmdlcy5zaXplKCkgKyAxIDwgbV9yYW5n
ZXMuY2FwYWNpdHkoKSkgewogICAgICAgICAgICAgbV9yYW5nZXMuYXBwZW5kKHJhbmdlKTsKICAg
ICAgICAgICAgIHJldHVybjsK
</data>
<flag name="review"
          id="327297"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>