<?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>153113</bug_id>
          
          <creation_ts>2016-01-14 18:09:52 -0800</creation_ts>
          <short_desc>FTL B3 should be just as fast as FTL LLVM on Octane/crypto</short_desc>
          <delta_ts>2016-01-19 11:29:30 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>150279</blocked>
    
    <blocked>153197</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1155651</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-14 18:09:52 -0800</bug_when>
    <thetext>Things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1155652</commentid>
    <comment_count>1</comment_count>
      <attachid>269023</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-14 18:19:25 -0800</bug_when>
    <thetext>Created attachment 269023
it&apos;s a start</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1155667</commentid>
    <comment_count>2</comment_count>
      <attachid>269028</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-14 19:52:50 -0800</bug_when>
    <thetext>Created attachment 269028
a bit more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1155679</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-14 21:18:49 -0800</bug_when>
    <thetext>Here&apos;s my current thinking on how to proceed.  I think I&apos;ll get rid of ForwardLiveness and use a much more deliberate approach:


Our state mapping tells us what is live at any given moment. We use a separate
liveness pass to collect the kill lists for all instructions. The kill lists tell us
about the ways that things die at an Inst. There are four ways:

- An early def could die above an Inst.
- An early use could kill above an Inst.
- A late def could die below an Inst.
- A late use could kill below an Inst.

Once we are armed with our state mapping and the kill lists, we can process the Inst
in the order of its execution and update the state mapping based on defs and kill
lists.

We start above the Inst with a state that tells us what is live before it. This
includes things that will die at the top. We can handle early uses and defs by giving
them registers that are not live. We know which registers become live because our
mapping tells us this. Then we can apply the early deaths. Then we process late uses
and defs, and then apply the late deaths.

This algorithm must proceed in the order of the Inst&apos;s execution. We can use the
notion of locking at each stage - early and then late - to indicate which registers
have already been purposed. All early uses will hold the lock while we are processing
the early part of the instruction, and then release it before we start processing the
late stuff. In between early and late, after we have unlocked things used early, we
can perform early deaths. All early defs will hold the lock early and then release it
after we process late things. As a special case, UseDef will also release the lock
late.

Things get weird with UseDef. Lucky for us, Insts will have a small number of UseDefs,
so the algorithm doesn&apos;t have to be efficient and we can be sure that if we handle
UseDefs early, then the greedy approach should just work. The locking strategy ensures
that we won&apos;t try to reuse the register we already picked. The only additional logic
for UseDef is that when we pick a register for it, which happens early, we look ahead
to make sure that we didn&apos;t already lock the register late. The only registers that we
could have already locked late are the ones that are clobbered late or defined late.

One of the beautiful things about this approach is that we can process the Inst
in-place. We won&apos;t edit the uses until we have accounted for them. We won&apos;t edit the
defs until we have accounted for them. So, we can compute forward liveness while also
editing the instruction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1155898</commentid>
    <comment_count>4</comment_count>
      <attachid>269090</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-15 13:05:22 -0800</bug_when>
    <thetext>Created attachment 269090
starting to make sense</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156121</commentid>
    <comment_count>5</comment_count>
      <attachid>269150</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-15 22:04:17 -0800</bug_when>
    <thetext>Created attachment 269150
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156217</commentid>
    <comment_count>6</comment_count>
      <attachid>269178</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-16 13:02:28 -0800</bug_when>
    <thetext>Created attachment 269178
lots more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156240</commentid>
    <comment_count>7</comment_count>
      <attachid>269182</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-16 16:40:36 -0800</bug_when>
    <thetext>Created attachment 269182
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156243</commentid>
    <comment_count>8</comment_count>
      <attachid>269183</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-16 17:25:55 -0800</bug_when>
    <thetext>Created attachment 269183
IRC appears to work

It&apos;s not saying much, but the current status of the patch is that IRC still appears to work.  I haven&apos;t enabled register scavenging yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156251</commentid>
    <comment_count>9</comment_count>
      <attachid>269184</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-16 19:38:12 -0800</bug_when>
    <thetext>Created attachment 269184
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156270</commentid>
    <comment_count>10</comment_count>
      <attachid>269187</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-16 23:55:16 -0800</bug_when>
    <thetext>Created attachment 269187
sort of getting it to work

I&apos;m no longer sure if this is a great idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156301</commentid>
    <comment_count>11</comment_count>
      <attachid>269190</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-17 11:35:58 -0800</bug_when>
    <thetext>Created attachment 269190
trying more things</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156308</commentid>
    <comment_count>12</comment_count>
      <attachid>269194</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-17 12:27:36 -0800</bug_when>
    <thetext>Created attachment 269194
things

This is a speed-up now that I&apos;ve taken a different approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156316</commentid>
    <comment_count>13</comment_count>
      <attachid>269196</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-17 13:08:45 -0800</bug_when>
    <thetext>Created attachment 269196
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156317</commentid>
    <comment_count>14</comment_count>
      <attachid>269197</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-17 13:09:22 -0800</bug_when>
    <thetext>Created attachment 269197
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156318</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-01-17 13:10:42 -0800</bug_when>
    <thetext>Attachment 269197 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/air/AirCustom.cpp:49:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirCustom.h:74:  The parameter name &quot;inst&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/air/AirValidate.cpp:88:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirIteratedRegisterCoalescing.cpp:1204:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLogRegisterPressure.cpp:60:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLogRegisterPressure.cpp:69:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirReportUsedRegisters.cpp:55:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirAllocateStack.cpp:178:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirAllocateStack.cpp:281:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3CheckSpecial.cpp:112:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirFixObviousSpills.cpp:117:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirFixObviousSpills.cpp:183:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirFixObviousSpills.cpp:234:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 13 in 40 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>1156325</commentid>
    <comment_count>16</comment_count>
      <attachid>269198</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-17 14:08:50 -0800</bug_when>
    <thetext>Created attachment 269198
did more things

We&apos;re now at parity with LLVM on Octane/crypto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156335</commentid>
    <comment_count>17</comment_count>
      <attachid>269201</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-17 15:01:24 -0800</bug_when>
    <thetext>Created attachment 269201
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156336</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-01-17 15:03:21 -0800</bug_when>
    <thetext>Attachment 269201 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/air/AirCustom.cpp:49:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirValidate.cpp:88:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirIteratedRegisterCoalescing.cpp:1204:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLogRegisterPressure.cpp:60:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLogRegisterPressure.cpp:69:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirReportUsedRegisters.cpp:55:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirCustom.h:74:  The parameter name &quot;inst&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/air/AirAllocateStack.cpp:178:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirAllocateStack.cpp:281:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3CheckSpecial.cpp:112:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirFixObviousSpills.cpp:117:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirFixObviousSpills.cpp:183:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirFixObviousSpills.cpp:234:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 13 in 42 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>1156343</commentid>
    <comment_count>19</comment_count>
      <attachid>269203</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-17 15:48:31 -0800</bug_when>
    <thetext>Created attachment 269203
performance</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156554</commentid>
    <comment_count>20</comment_count>
      <attachid>269201</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-01-18 23:18:25 -0800</bug_when>
    <thetext>Comment on attachment 269201
the patch

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

r=me with a couple comments

&gt; Source/JavaScriptCore/b3/air/AirAllocateStack.cpp:210
&gt; +            block-&gt;insts().removeAllMatching(
&gt; +                [&amp;] (const Inst&amp; inst) -&gt; bool {
&gt; +                    return !inst;
&gt; +                });

Could/should this be done after looping over the block?

&gt; Source/JavaScriptCore/b3/air/AirFixObviousSpills.cpp:202
&gt; +                case Arg::Width32:

Should this check for alias-&gt;mode != AllBits?

&gt; Source/JavaScriptCore/runtime/Options.h:346
&gt; +    v(bool, logAirRegisterPressure, false, nullptr) \

when do we use the &quot;log&quot; prefix versus the &quot;dump&quot; prefix?

&gt; Source/WTF/wtf/CheckedArithmetic.h:822
&gt; +    return Checked&lt;T, RecordOverflow&gt;(value) * checkedSum&lt;T&gt;(args...);

Shouldn&apos;t this be:
Checked&lt;T, RecordOverflow&gt;(value) * checkedProduct&lt;T&gt;(args...);
?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156632</commentid>
    <comment_count>21</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-19 10:34:15 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; Comment on attachment 269201 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=269201&amp;action=review
&gt; 
&gt; r=me with a couple comments
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/air/AirAllocateStack.cpp:210
&gt; &gt; +            block-&gt;insts().removeAllMatching(
&gt; &gt; +                [&amp;] (const Inst&amp; inst) -&gt; bool {
&gt; &gt; +                    return !inst;
&gt; &gt; +                });
&gt; 
&gt; Could/should this be done after looping over the block?

Wow, yeah.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/air/AirFixObviousSpills.cpp:202
&gt; &gt; +                case Arg::Width32:
&gt; 
&gt; Should this check for alias-&gt;mode != AllBits?

No.  The Width64 case has such a check because if you&apos;re observing all 64 bits (that&apos;s what Width64 means) then the alias better account for all bits (that&apos;s what AllBits means).  But if we only observe 32-bits (Width32) then any of the alias modes work.

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/Options.h:346
&gt; &gt; +    v(bool, logAirRegisterPressure, false, nullptr) \
&gt; 
&gt; when do we use the &quot;log&quot; prefix versus the &quot;dump&quot; prefix?

This felt like it was like logB3PhaseTimes and logGC.

&gt; 
&gt; &gt; Source/WTF/wtf/CheckedArithmetic.h:822
&gt; &gt; +    return Checked&lt;T, RecordOverflow&gt;(value) * checkedSum&lt;T&gt;(args...);
&gt; 
&gt; Shouldn&apos;t this be:
&gt; Checked&lt;T, RecordOverflow&gt;(value) * checkedProduct&lt;T&gt;(args...);
&gt; ?

Lol of course.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156659</commentid>
    <comment_count>22</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-19 11:29:30 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/195298</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269023</attachid>
            <date>2016-01-14 18:19:25 -0800</date>
            <delta_ts>2016-01-14 19:52:50 -0800</delta_ts>
            <desc>it&apos;s a start</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>32285</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCShy
ZXZpc2lvbiAxOTUwODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2lj
QmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogCiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CiAKK2NsYXNzIEJsb2NrSW5zZXJ0aW9u
U2V0OwogY2xhc3MgQ29kZTsKIGNsYXNzIEluc2VydGlvblNldDsKIApAQCAtMTI3LDYgKzEyOCw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAKIHBy
aXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEJsb2NrSW5zZXJ0aW9uU2V0OwogICAgIGZyaWVuZCBj
bGFzcyBDb2RlOwogICAgIGZyaWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7CiAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJsb2NrSW5zZXJ0aW9uU2V0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJsb2NrSW5zZXJ0aW9u
U2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
QmxvY2tJbnNlcnRpb25TZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkFpckJsb2NrSW5zZXJ0aW9uU2V0LmgiCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCisjaW5jbHVkZSAiQWlyQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkFpckluc3RJ
bmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0J1YmJsZVNvcnQuaD4KKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK0Jsb2NrSW5zZXJ0aW9uU2V0OjpCbG9ja0luc2VydGlvblNldChD
b2RlICZjb2RlKQorICAgIDogbV9jb2RlKGNvZGUpCit7Cit9CisKK0Jsb2NrSW5zZXJ0aW9uU2V0
Ojp+QmxvY2tJbnNlcnRpb25TZXQoKSB7IH0KKwordm9pZCBCbG9ja0luc2VydGlvblNldDo6aW5z
ZXJ0KEJsb2NrSW5zZXJ0aW9uJiYgaW5zZXJ0aW9uKQoreworICAgIG1faW5zZXJ0aW9ucy5hcHBl
bmQoV1RGTW92ZShpbnNlcnRpb24pKTsKK30KKworQmFzaWNCbG9jayogQmxvY2tJbnNlcnRpb25T
ZXQ6Omluc2VydCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIGZyZXF1ZW5jeSkKK3sKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4gYmxvY2sobmV3IEJhc2ljQmxvY2soVUlOVF9NQVgsIGZy
ZXF1ZW5jeSkpOworICAgIEJhc2ljQmxvY2sqIHJlc3VsdCA9IGJsb2NrLmdldCgpOworICAgIGlu
c2VydChCbG9ja0luc2VydGlvbihpbmRleCwgV1RGTW92ZShibG9jaykpKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitCYXNpY0Jsb2NrKiBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0QmVmb3Jl
KEJhc2ljQmxvY2sqIGJlZm9yZSwgZG91YmxlIGZyZXF1ZW5jeSkKK3sKKyAgICByZXR1cm4gaW5z
ZXJ0KGJlZm9yZS0+aW5kZXgoKSwgZnJlcXVlbmN5ID09IGZyZXF1ZW5jeSA/IGZyZXF1ZW5jeSA6
IGJlZm9yZS0+ZnJlcXVlbmN5KCkpOworfQorCitCYXNpY0Jsb2NrKiBCbG9ja0luc2VydGlvblNl
dDo6aW5zZXJ0QWZ0ZXIoQmFzaWNCbG9jayogYWZ0ZXIsIGRvdWJsZSBmcmVxdWVuY3kpCit7Cisg
ICAgcmV0dXJuIGluc2VydChhZnRlci0+aW5kZXgoKSArIDEsIGZyZXF1ZW5jeSA9PSBmcmVxdWVu
Y3kgPyBmcmVxdWVuY3kgOiBhZnRlci0+ZnJlcXVlbmN5KCkpOworfQorCitib29sIEJsb2NrSW5z
ZXJ0aW9uU2V0OjpleGVjdXRlKCkKK3sKKyAgICBpZiAobV9pbnNlcnRpb25zLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIC8vIFdlIGFsbG93IGluc2VydGlvbnMg
dG8gYmUgZ2l2ZW4gdG8gdXMgaW4gYW55IG9yZGVyLiBTbywgd2UgbmVlZCB0byBzb3J0IHRoZW0g
YmVmb3JlCisgICAgLy8gcnVubmluZyBXVEY6OmV4ZWN1dGVJbnNlcnRpb25zLiBXZSBzdHJvbmds
eSBwcmVmZXIgYSBzdGFibGUgc29ydCBhbmQgd2Ugd2FudCBpdCB0byBiZQorICAgIC8vIGZhc3Qs
IHNvIHdlIHVzZSBidWJibGUgc29ydC4KKyAgICBidWJibGVTb3J0KG1faW5zZXJ0aW9ucy5iZWdp
bigpLCBtX2luc2VydGlvbnMuZW5kKCkpOworCisgICAgZXhlY3V0ZUluc2VydGlvbnMobV9jb2Rl
Lm1fYmxvY2tzLCBtX2luc2VydGlvbnMpOworICAgIAorICAgIC8vIFBydW5lIG91dCBlbXB0eSBl
bnRyaWVzLiBUaGlzIGlzbid0IHN0cmljdGx5IG5lY2Vzc2FyeSBidXQgaXQncworICAgIC8vIGhl
YWx0aHkgdG8ga2VlcCB0aGUgYmxvY2sgbGlzdCBmcm9tIGdyb3dpbmcuCisgICAgbV9wcm9jLm1f
YmxvY2tzLnJlbW92ZUFsbE1hdGNoaW5nKAorICAgICAgICBbJl0gKHN0ZDo6dW5pcXVlX3B0cjxC
YXNpY0Jsb2NrPiYgYmxvY2tQdHIpIC0+IGJvb2wgeworICAgICAgICAgICAgcmV0dXJuICFibG9j
a1B0cjsKKyAgICAgICAgfSk7CisgICAgCisgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGJsb2Nr
cyBrbm93IHRoZWlyIG5ldyBpbmRpY2VzLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X3Byb2MubV9ibG9ja3Muc2l6ZSgpOyArK2kpCisgICAgICAgIG1fcHJvYy5tX2Jsb2Nrc1tpXS0+
bV9pbmRleCA9IGk7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja0luc2VydGlvblNldC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmxvY2tJbnNlcnRpb25TZXQuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmxvY2tJbnNlcnRp
b25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyQmxvY2tJbnNlcnRpb25T
ZXRfaAorI2RlZmluZSBBaXJCbG9ja0luc2VydGlvblNldF9oCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgPHd0Zi9JbnNlcnRpb24uaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBu
YW1lc3BhY2UgQWlyIHsKKworY2xhc3MgSW5zZXJ0aW9uU2V0OworCit0eXBlZGVmIFdURjo6SW5z
ZXJ0aW9uPHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPj4gQmxvY2tJbnNlcnRpb247CisKK2Ns
YXNzIEJsb2NrSW5zZXJ0aW9uU2V0IHsKK3B1YmxpYzoKKyAgICBCbG9ja0luc2VydGlvblNldChQ
cm9jZWR1cmUmKTsKKyAgICB+QmxvY2tJbnNlcnRpb25TZXQoKTsKKyAgICAKKyAgICB2b2lkIGlu
c2VydChCbG9ja0luc2VydGlvbiYmKTsKKworICAgIC8vIEluc2VydCBhIG5ldyBibG9jayBhdCBh
IGdpdmVuIGluZGV4LgorICAgIEJhc2ljQmxvY2sqIGluc2VydCh1bnNpZ25lZCBpbmRleCwgZG91
YmxlIGZyZXF1ZW5jeSA9IFBOYU4pOworCisgICAgLy8gSW5zZXJ0cyBhIG5ldyBibG9jayBiZWZv
cmUgdGhlIGdpdmVuIGJsb2NrLiBVc3VhbGx5IHlvdSB3aWxsIG5vdCBwYXNzIHRoZSBmcmVxdWVu
Y3kKKyAgICAvLyBhcmd1bWVudC4gUGFzc2luZyBQTmFOIGNhdXNlcyB1cyB0byBqdXN0IHVzZSB0
aGUgZnJlcXVlbmN5IG9mIHRoZSAnYmVmb3JlJyBibG9jay4gVGhhdCdzCisgICAgLy8gdXN1YWxs
eSB3aGF0IHlvdSB3YW50LgorICAgIEJhc2ljQmxvY2sqIGluc2VydEJlZm9yZShCYXNpY0Jsb2Nr
KiBiZWZvcmUsIGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKTsKKworICAgIC8vIEluc2VydHMgYSBu
ZXcgYmxvY2sgYWZ0ZXIgdGhlIGdpdmVuIGJsb2NrLgorICAgIEJhc2ljQmxvY2sqIGluc2VydEFm
dGVyKEJhc2ljQmxvY2sqIGFmdGVyLCBkb3VibGUgZnJlcXVlbmN5ID0gUE5hTik7CisKKyAgICBi
b29sIGV4ZWN1dGUoKTsKKworcHJpdmF0ZToKKyAgICBDb2RlJiBtX2NvZGU7CisgICAgVmVjdG9y
PEJsb2NrSW5zZXJ0aW9uLCA4PiBtX2luc2VydGlvbnM7Cit9OworCit9IH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8g
QWlyQmxvY2tJbnNlcnRpb25TZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckJyZWFrQ3JpdGljYWxFZGdlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJCcmVha0NyaXRpY2FsRWRnZXMuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCcmVha0NyaXRpY2FsRWRnZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWly
QnJlYWtDcml0aWNhbEVkZ2VzLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
QWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBicmVha0NyaXRpY2FsRWRn
ZXMoQ29kZSYgY29kZSkKK3sKKyAgICBCbG9ja0luc2VydGlvblNldCBpbnNlcnRpb25TZXQoY29k
ZSk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8
IGNvZGUubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IGNvZGVbYmxvY2tJbmRleF07CisgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICBpZiAoYmxvY2stPm51bVN1Y2Nlc3NvcnMoKSA8PSAxKQor
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2st
Pm51bVN1Y2Nlc3NvcnMoKTsgaS0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayomIHN1Y2Nl
c3NvciA9IGJsb2NrLT5zdWNjZXNzb3JCbG9jayhpKTsKKyAgICAgICAgICAgIGlmIChzdWNjZXNz
b3ItPnByZWRlY2Vzc29ycy5zaXplKCkgPD0gMSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICAgICAgQmFzaWNCbG9jayogcGFkID0gaW5zZXJpdG9uU2V0Lmluc2VydEJlZm9y
ZShzdWNjZXNzb3IsIHN1Y2Nlc3Nvci0+ZnJlcXVlbmN5KCkpOworICAgICAgICAgICAgcGFkLT5h
cHBlbmQoSnVtcCwgc3VjY2Vzc29yLT5hdCgwKS5vcmlnaW4pOworICAgICAgICAgICAgcGFkLT5z
dWNjZXNzb3JzKCkuYXBwZW5kKEZyZXF1ZW50ZWRCbG9jayhzdWNjZXNzb3IpKTsKKyAgICAgICAg
ICAgIHN1Y2Nlc3Nvci0+cmVwbGFjZVByZWRlY2Vzc29yKGJsb2NrLCBwYWQpOworICAgICAgICAg
ICAgc3VjY2Vzc29yID0gcGFkOworICAgICAgICB9CisgICAgfQorCisgICAgaW5zZXJ0aW9uU2V0
LmV4ZWN1dGUoKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJCcmVha0NyaXRpY2FsRWRnZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckJyZWFrQ3JpdGljYWxFZGdlcy5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCcmVha0NyaXRpY2FsRWRnZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBBaXJCcmVha0NyaXRpY2FsRWRnZXNfaAorI2RlZmluZSBB
aXJCcmVha0NyaXRpY2FsRWRnZXNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCit2
b2lkIGJyZWFrQ3JpdGljYWxFZGdlcyhDb2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJCcmVh
a0NyaXRpY2FsRWRnZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckZvcndhcmRMaXZlbmVzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyRm9yd2FyZExpdmVuZXNzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckZvcndhcmRMaXZlbmVzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBBaXJGb3J3YXJkTGl2ZW5lc3NfaAorI2RlZmluZSBBaXJGb3J3YXJkTGl2ZW5l
c3NfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckluc3RNYXAuaCIKKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBu
YW1lc3BhY2UgQWlyIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgTGl2ZW5lc3M+CitjbGFzcyBGb3J3
YXJkTGl2ZW5lc3MgeworcHVibGljOgorICAgIEZvcndhcmRMaXZlbmVzcyhDb2RlJiBjb2RlLCBM
aXZlbmVzcyYgbGl2ZW5lc3MpCisgICAgICAgIDogbV9jb2RlKGNvZGUpCisgICAgICAgICwgbV9s
aXZlbmVzcyhsaXZlbmVzcykKKyAgICAgICAgLCBtX2RlYXRocyhjb2RlKQorICAgIHsKKyAgICAg
ICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgICAgIExpdmVuZXNz
OjpMb2NhbENhbGMgbG9jYWxDYWxjKGxpdmVuZXNzLCBibG9jayk7CisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykgeworICAg
ICAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKKyAgICAgICAg
ICAgICAgICBEZWF0aHMmIGRlYXRocyA9IG1fZGVhdGhzLmF0KGJsb2NrLCBpbnN0SW5kZXgpOwor
ICAgICAgICAgICAgICAgIGxvY2FsQ2FsYy5leGVjdXRlUmF3KAorICAgICAgICAgICAgICAgICAg
ICBpbnN0SW5kZXgsCisgICAgICAgICAgICAgICAgICAgIFsmXSAodW5zaWduZWQgaW5kZXgsIGNv
bnN0IHR5cGVuYW1lIExpdmVuZXNzOjpUaGluZyYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGRlYXRocy5raWxscy5hcHBlbmQoaW5kZXgpOworICAgICAgICAgICAgICAgICAgICB9LAorICAg
ICAgICAgICAgICAgICAgICBbJl0gKHVuc2lnbmVkIGluZGV4LCBjb25zdCB0eXBlbmFtZSBMaXZl
bmVzczo6VGhpbmcmKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWF0aHMuZGVhZERlZnMu
YXBwZW5kKGluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBjbGFzcyBMb2NhbENhbGMgeworICAgIHB1YmxpYzoKKyAg
ICAgICAgTG9jYWxDYWxjKEZvcndhcmRMaXZlbmVzcyYgZm9yd2FyZCwgQmFzaWNCbG9jayogYmxv
Y2spCisgICAgICAgICAgICA6IG1fZm9yd2FyZChmb3J3YXJkKQorICAgICAgICAgICAgLCBtX2Js
b2NrKGJsb2NrKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiB3b3Jrc2V0ID0gZm9yd2Fy
ZC5tX2xpdmVuZXNzLndvcmtzZXQoKTsKKyAgICAgICAgICAgIHdvcmtzZXQuY2xlYXIoKTsKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggOiBmb3J3YXJkLm1fbGl2ZW5lc3MucmF3TGl2
ZUF0SGVhZChibG9jaykpCisgICAgICAgICAgICAgICAgd29ya3NldC5hZGQoaW5kZXgpOworICAg
ICAgICB9CisKKyAgICAgICAgdm9pZCBleGVjdXRlKHVuc2lnbmVkIGluc3RJbmRleCkKKyAgICAg
ICAgeworICAgICAgICAgICAgLy8gRmlyc3Qga2lsbCB0aGUgdGhpbmdzIHRoYXQgYXJlIHRoZSBm
aW5hbCB1c2VzIGF0IHRoaXMgcG9pbnQuCisgICAgICAgICAgICBhdXRvJiB3b3Jrc2V0ID0gbV9m
b3J3YXJkLm1fbGl2ZW5lc3Mud29ya3NldCgpOworICAgICAgICAgICAgRGVhdGhzJiBkZWF0aHMg
PSBtX2ZvcndhcmQubV9kZWF0aHMuYXQobV9ibG9jaywgaW5zdEluZGV4KTsKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaW5kZXggOiBkZWF0aHMua2lsbHMpCisgICAgICAgICAgICAgICAgd29y
a3NldC5yZW1vdmUoaW5kZXgpOworCisgICAgICAgICAgICAvLyBOb3cgYmlydGggdGhlIHRoaW5n
cyB0aGF0IGFyZSBkZWZpbmVkLgorICAgICAgICAgICAgaWYgKGluc3RJbmRleCArIDEgPCBtX2Js
b2NrLT5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICBJbnN0JiBuZXh0SW5zdCA9IG1fYmxvY2st
PmF0KGluc3RJbmRleCArIDEpOworICAgICAgICAgICAgICAgIG5leHRJbnN0LmZvckVhY2g8dHlw
ZW5hbWUgTGl2ZW5lc3M6OlRoaW5nPigKKyAgICAgICAgICAgICAgICAgICAgWyZdICh0eXBlbmFt
ZSBMaXZlbmVzczo6VGhpbmcmIHRoaW5nLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIHR5cGUs
IEFyZzo6V2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzRWFybHlE
ZWYocm9sZSkgJiYgTGl2ZW5lc3M6OmFjY2VwdHNUeXBlKHR5cGUpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBMaXZlbmVzczo6dmFsdWVUb0luZGV4KHRo
aW5nKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3Jrc2V0LmFkZChpbmRleCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpbnN0LmZvckVhY2g8dHlwZW5hbWUg
TGl2ZW5lc3M6OlRoaW5nPigKKyAgICAgICAgICAgICAgICBbJl0gKHR5cGVuYW1lIExpdmVuZXNz
OjpUaGluZyYgdGhpbmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgdHlwZSwgQXJnOjpXaWR0
aCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0xhdGVEZWYocm9sZSkgJiYgTGl2
ZW5lc3M6OmFjY2VwdHNUeXBlKHR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpbmRleCA9IExpdmVuZXNzOjp2YWx1ZVRvSW5kZXgodGhpbmcpOworICAgICAgICAgICAg
ICAgICAgICAgICAgd29ya3NldC5hZGQoaW5kZXgpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIC8vIE5vdyBtYWtlIHN1cmUgdGhhdCBE
T0EgdGhpbmdzIHJlYWxseSBhcmUgRE9BLgorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRl
eCA6IGRlYXRocy5kZWFkRGVmcykKKyAgICAgICAgICAgICAgICB3b3Jrc2V0LnJlbW92ZShpbmRl
eCk7CisgICAgICAgIH0KKworICAgICAgICBMaXZlbmVzczo6TG9jYWxDYWxjOjpJdGVyYWJsZSBs
aXZlKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIExpdmVuZXNzOjpMb2Nh
bENhbGM6Okl0ZXJhYmxlKG1fZm9yd2FyZC5tX2xpdmVuZXNzKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGJvb2wgaXNMaXZlKGNvbnN0IHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nJiB0aGluZykgY29u
c3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGxpdmUoKS5jb250YWlucyh0aGluZyk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgRm9yd2FyZExpdmVu
ZXNzJiBtX2ZvcndhcmQ7CisgICAgICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CisgICAgfTsKKyAg
ICAKK3ByaXZhdGU6CisgICAgc3RydWN0IERlYXRocyB7CisgICAgICAgIFZlY3Rvcjx1bnNpZ25l
ZCwgMT4ga2lsbHM7CisgICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gZGVhZERlZnM7CisgICAgfTsK
KyAgICAKKyAgICBDb2RlJiBtX2NvZGU7CisgICAgTGl2ZW5lc3MmIG1fbGl2ZW5lc3M7CisgICAg
SW5zdE1hcDxEZWF0aHM+IG1fZGVhdGhzOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckZvcndh
cmRMaXZlbmVzc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5z
dE1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5z
dE1hcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJ
bnN0TWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQWlySW5zdE1hcF9oCisjZGVm
aW5lIEFpckluc3RNYXBfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckJh
c2ljQmxvY2suaCIKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQjNJbmRleE1hcC5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBJbnN0TWFwIHsKK3B1YmxpYzoKKyAgICBJbnN0TWFw
KENvZGUmIGNvZGUpCisgICAgICAgIDogbV9tYXAoY29kZS5zaXplKCkpCisgICAgeworICAgICAg
ICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkKKyAgICAgICAgICAgIG1fbWFwW2Jsb2Nr
XS5yZXNpemUoYmxvY2stPnNpemUoKSk7CisgICAgfQorCisgICAgVCYgYXQoQmFzaWNCbG9jayog
YmxvY2ssIHVuc2lnbmVkIGluc3RJbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX21hcFti
bG9ja11baW5zdEluZGV4XTsKKyAgICB9CisKKyAgICBjb25zdCBUJiBhdChCYXNpY0Jsb2NrKiBi
bG9jaywgdW5zaWduZWQgaW5zdEluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGNv
bnN0X2Nhc3Q8SW5zdE1hcCo+KHRoaXMpLT5nZXQoYmxvY2ssIGluc3RJbmRleCk7CisgICAgfQor
ICAgIAorcHJpdmF0ZToKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBWZWN0b3I8VD4+IG1fbWFw
OworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckluc3RNYXBfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCShyZXZpc2lvbiAxOTUwODMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTkzLDkgKzkzLDExIEBAIHN0cnVjdCBSZWdMaXZlbmVzc0FkYXB0ZXIgewogfTsKIAogdGVt
cGxhdGU8dHlwZW5hbWUgQWRhcHRlcj4KLWNsYXNzIEFic3RyYWN0TGl2ZW5lc3MgOiBwcml2YXRl
IEFkYXB0ZXIgeworY2xhc3MgQWJzdHJhY3RMaXZlbmVzcyA6IHB1YmxpYyBBZGFwdGVyIHsKICAg
ICBzdHJ1Y3QgV29ya3NldDsKIHB1YmxpYzoKKyAgICB0eXBlZGVmIHR5cGVuYW1lIEFkYXB0ZXI6
OlRoaW5nIFRoaW5nOworICAgIAogICAgIEFic3RyYWN0TGl2ZW5lc3MoQ29kZSYgY29kZSkKICAg
ICAgICAgOiBBZGFwdGVyKGNvZGUpCiAgICAgICAgICwgbV93b3Jrc2V0KEFkYXB0ZXI6Om1heElu
ZGV4KGNvZGUpKQpAQCAtMjIyLDYgKzIyNCwxMSBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgIEl0
ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gSXRlcmF0b3IobV9saXZlbmVzcywgbV9saXZl
bmVzcy5tX3dvcmtzZXQuYmVnaW4oKSk7IH0KICAgICAgICAgICAgIEl0ZXJhdG9yIGVuZCgpIGNv
bnN0IHsgcmV0dXJuIEl0ZXJhdG9yKG1fbGl2ZW5lc3MsIG1fbGl2ZW5lc3MubV93b3Jrc2V0LmVu
ZCgpKTsgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBib29sIGNvbnRhaW5zKGNvbnN0IHR5
cGVuYW1lIEFkYXB0ZXI6OlRoaW5nJiB0aGluZykgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbV9saXZlbmVzcy5tX3dvcmtzZXQuY29udGFpbnMoQWRhcHRlcjo6
dmFsdWVUb0luZGV4KHRoaW5nKSk7CisgICAgICAgICAgICB9CiAKICAgICAgICAgcHJpdmF0ZToK
ICAgICAgICAgICAgIEFic3RyYWN0TGl2ZW5lc3MmIG1fbGl2ZW5lc3M7CkBAIC0yMzIsNyArMjM5
LDE3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBJdGVyYWJsZShtX2xpdmVuZXNzKTsK
ICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgZXhlY3V0ZSh1bnNpZ25lZCBpbnN0SW5kZXgpCisg
ICAgICAgIGJvb2wgaXNMaXZlKGNvbnN0IHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nJiB0aGluZykg
Y29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGxpdmUoKS5jb250YWlucyh0aGlu
Zyk7CisgICAgICAgIH0KKworICAgICAgICAvLyBDYWxscyB0aGUga2lsbCBjYWxsYmFjayB3aXRo
IHRoZSBraWxscy4gSXQgcGFzc2VzIGJvdGggdGhlIGluZGV4IGFuZCB0aGUgdmFsdWUuIFRoZSBv
dGhlcgorICAgICAgICAvLyBjYWxsYmFjayBpcyBmb3IgZGVhZCBkZWZzLgorICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBLaWxsQ2FsbGJhY2ssIHR5cGVuYW1lIERlYWREZWZDYWxsYmFjaz4KKyAg
ICAgICAgdm9pZCBleGVjdXRlUmF3KAorICAgICAgICAgICAgdW5zaWduZWQgaW5zdEluZGV4LAor
ICAgICAgICAgICAgY29uc3QgS2lsbENhbGxiYWNrJiBraWxsQ2FsbGJhY2ssIGNvbnN0IERlYWRE
ZWZDYWxsYmFjayYgZGVhZERlZkNhbGxiYWNrKQogICAgICAgICB7CiAgICAgICAgICAgICBJbnN0
JiBpbnN0ID0gbV9ibG9jay0+YXQoaW5zdEluZGV4KTsKICAgICAgICAgICAgIGF1dG8mIHdvcmtz
ZXQgPSBtX2xpdmVuZXNzLm1fd29ya3NldDsKQEAgLTI0MiwyMyArMjU5LDMyIEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICBJbnN0JiBuZXh0SW5zdCA9IG1fYmxvY2stPmF0KGluc3RJbmRleCAr
IDEpOwogICAgICAgICAgICAgICAgIG5leHRJbnN0LmZvckVhY2g8dHlwZW5hbWUgQWRhcHRlcjo6
VGhpbmc+KAogICAgICAgICAgICAgICAgICAgICBbJl0gKHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5n
JiB0aGluZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSB0eXBlLCBBcmc6OldpZHRoKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0Vhcmx5RGVmKHJvbGUpICYmIEFkYXB0
ZXI6OmFjY2VwdHNUeXBlKHR5cGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtz
ZXQucmVtb3ZlKEFkYXB0ZXI6OnZhbHVlVG9JbmRleCh0aGluZykpOworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKEFyZzo6aXNFYXJseURlZihyb2xlKSAmJiBBZGFwdGVyOjphY2NlcHRzVHlw
ZSh0eXBlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0g
QWRhcHRlcjo6dmFsdWVUb0luZGV4KHRoaW5nKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIXdvcmtzZXQucmVtb3ZlKGluZGV4KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGVhZERlZkNhbGxiYWNrKGluZGV4LCB0aGluZyk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgCiAgICAgICAgICAgICAvLyBUaGVuIGhhbmRsZSBkZWYncy4KICAgICAgICAgICAgIGluc3Qu
Zm9yRWFjaDx0eXBlbmFtZSBBZGFwdGVyOjpUaGluZz4oCiAgICAgICAgICAgICAgICAgWyZdICh0
eXBlbmFtZSBBZGFwdGVyOjpUaGluZyYgdGhpbmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUg
dHlwZSwgQXJnOjpXaWR0aCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0xhdGVE
ZWYocm9sZSkgJiYgQWRhcHRlcjo6YWNjZXB0c1R5cGUodHlwZSkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICB3b3Jrc2V0LnJlbW92ZShBZGFwdGVyOjp2YWx1ZVRvSW5kZXgodGhpbmcpKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNMYXRlRGVmKHJvbGUpICYmIEFkYXB0ZXI6OmFj
Y2VwdHNUeXBlKHR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRl
eCA9IEFkYXB0ZXI6OnZhbHVlVG9JbmRleCh0aGluZyk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIXdvcmtzZXQucmVtb3ZlKGluZGV4KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZWFkRGVmQ2FsbGJhY2soaW5kZXgsIHRoaW5nKTsKKyAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIH0pOwogCiAgICAgICAgICAgICAvLyBUaGVuIGhhbmRsZSB1c2Uncy4K
ICAgICAgICAgICAgIGluc3QuZm9yRWFjaDx0eXBlbmFtZSBBZGFwdGVyOjpUaGluZz4oCiAgICAg
ICAgICAgICAgICAgWyZdICh0eXBlbmFtZSBBZGFwdGVyOjpUaGluZyYgdGhpbmcsIEFyZzo6Um9s
ZSByb2xlLCBBcmc6OlR5cGUgdHlwZSwgQXJnOjpXaWR0aCkgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoQXJnOjppc0Vhcmx5VXNlKHJvbGUpICYmIEFkYXB0ZXI6OmFjY2VwdHNUeXBlKHR5cGUp
KQotICAgICAgICAgICAgICAgICAgICAgICAgd29ya3NldC5hZGQoQWRhcHRlcjo6dmFsdWVUb0lu
ZGV4KHRoaW5nKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzRWFybHlVc2Uocm9s
ZSkgJiYgQWRhcHRlcjo6YWNjZXB0c1R5cGUodHlwZSkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGluZGV4ID0gQWRhcHRlcjo6dmFsdWVUb0luZGV4KHRoaW5nKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh3b3Jrc2V0LmFkZChpbmRleCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAga2lsbENhbGxiYWNrKGluZGV4LCB0aGluZyk7CisgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICB9KTsKIAogICAgICAgICAgICAgLy8gQW5kIGZpbmFs
bHksIGhhbmRsZSB0aGUgbGF0ZSB1c2UncyBvZiB0aGUgcHJldmlvdXMgaW5zdHJ1Y3Rpb24uCkBA
IC0yNjYsMTcgKzI5MiwzMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgSW5zdCYgcHJldklu
c3QgPSBtX2Jsb2NrLT5hdChpbnN0SW5kZXggLSAxKTsKICAgICAgICAgICAgICAgICBwcmV2SW5z
dC5mb3JFYWNoPHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nPigKICAgICAgICAgICAgICAgICAgICAg
WyZdICh0eXBlbmFtZSBBZGFwdGVyOjpUaGluZyYgdGhpbmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6
OlR5cGUgdHlwZSwgQXJnOjpXaWR0aCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFy
Zzo6aXNMYXRlVXNlKHJvbGUpICYmIEFkYXB0ZXI6OmFjY2VwdHNUeXBlKHR5cGUpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHdvcmtzZXQuYWRkKEFkYXB0ZXI6OnZhbHVlVG9JbmRleCh0
aGluZykpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNMYXRlVXNlKHJvbGUp
ICYmIEFkYXB0ZXI6OmFjY2VwdHNUeXBlKHR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgaW5kZXggPSBBZGFwdGVyOjp2YWx1ZVRvSW5kZXgodGhpbmcpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3b3Jrc2V0LmFkZChpbmRleCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGtpbGxDYWxsYmFjayhpbmRleCwgdGhpbmcpOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogCisgICAgICAgIHZvaWQgZXhlY3V0ZSh1bnNpZ25lZCBpbnN0SW5k
ZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGV4ZWN1dGVSYXcoCisgICAgICAgICAgICAgICAg
aW5zdEluZGV4LAorICAgICAgICAgICAgICAgIFtdICh1bnNpZ25lZCwgY29uc3QgdHlwZW5hbWUg
QWRhcHRlcjo6VGhpbmcmKSB7IH0sCisgICAgICAgICAgICAgICAgW10gKHVuc2lnbmVkLCBjb25z
dCB0eXBlbmFtZSBBZGFwdGVyOjpUaGluZyYpIHsgfSk7CisgICAgICAgIH0KKwogICAgIHByaXZh
dGU6CiAgICAgICAgIEFic3RyYWN0TGl2ZW5lc3MmIG1fbGl2ZW5lc3M7CiAgICAgICAgIEJhc2lj
QmxvY2sqIG1fYmxvY2s7CiAgICAgfTsKIAorICAgIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHJh
d0xpdmVBdEhlYWQoQmFzaWNCbG9jayogYmxvY2spCisgICAgeworICAgICAgICByZXR1cm4gbV9s
aXZlQXRIZWFkW2Jsb2NrXTsKKyAgICB9CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVbmRlcmx5
aW5nSXRlcmFibGU+CiAgICAgY2xhc3MgSXRlcmFibGUgewogICAgIHB1YmxpYzoKQEAgLTMzMCw2
ICszNzIsMTEgQEAgcHVibGljOgogICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0
dXJuIGl0ZXJhdG9yKG1fbGl2ZW5lc3MsIG1faXRlcmFibGUuYmVnaW4oKSk7IH0KICAgICAgICAg
aXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9saXZlbmVzcywgbV9pdGVy
YWJsZS5lbmQoKSk7IH0KIAorICAgICAgICBib29sIGNvbnRhaW5zKGNvbnN0IHR5cGVuYW1lIEFk
YXB0ZXI6OlRoaW5nJiB0aGluZykgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IG1fbGl2ZW5lc3MubV93b3Jrc2V0LmNvbnRhaW5zKEFkYXB0ZXI6OnZhbHVlVG9JbmRleCh0aGlu
ZykpOworICAgICAgICB9CisKICAgICBwcml2YXRlOgogICAgICAgICBBYnN0cmFjdExpdmVuZXNz
JiBtX2xpdmVuZXNzOwogICAgICAgICBjb25zdCBVbmRlcmx5aW5nSXRlcmFibGUmIG1faXRlcmFi
bGU7CkBAIC0zNDUsNiArMzkyLDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gSXRlcmFibGU8
dHlwZW5hbWUgQWRhcHRlcjo6SW5kZXhTZXQ+KCp0aGlzLCBtX2xpdmVBdFRhaWxbYmxvY2tdKTsK
ICAgICB9CiAKKyAgICBJbmRleFNwYXJzZVNldDxVbnNhZmVWZWN0b3JPdmVyZmxvdz4mIHdvcmtz
ZXQoKSB7IHJldHVybiBtX3dvcmtzZXQ7IH0KKwogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3Mg
TG9jYWxDYWxjOwogICAgIGZyaWVuZCBzdHJ1Y3QgTG9jYWxDYWxjOjpJdGVyYWJsZTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU2NhdmVuZ2VSZWdpc3RlcnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU2NhdmVuZ2VSZWdp
c3RlcnMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJTY2F2ZW5nZVJlZ2lzdGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJBaXJTY2F2ZW5nZVJlZ2lzdGVycy5oIgorCisjaWYgRU5BQkxF
KEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJGb3J3YXJkTGl2
ZW5lc3MuaCIKKyNpbmNsdWRlICJBaXJMaXZlbmVzcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK25hbWVzcGFjZSB7CisKK3RlbXBsYXRlPEFy
Zzo6VHlwZSB0eXBlPgorY2xhc3MgU2NhdmVuZ2VSZWdpc3RlcnMgeworcHVibGljOgorICAgIFNj
YW52ZWdlUmVnaXN0ZXJzKENvZGUmIGNvZGUpCisgICAgICAgIDogbV9jb2RlKGNvZGUpCisgICAg
ICAgICwgbV9saXZlbmVzcyhjb2RlKQorICAgICAgICAsIG1fZm9yd2FyZExpdmVuZXNzKGNvZGUs
IG1fbGl2ZW5lc3MpCisgICAgeworICAgIH0KKworICAgIHZvaWQgcnVuKCkKKyAgICB7CisgICAg
fQorCitwcml2YXRlOgorICAgIENvZGUmIG1fY29kZTsKKyAgICBUbXBMaXZlbmVzczx0eXBlPiBt
X2xpdmVuZXNzOworICAgIEZvcndhcmRMaXZlbmVzczxUbXBMaXZlbmVzczx0eXBlPj4gbV9mb3J3
YXJkTGl2ZW5lc3M7Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9pZCBzY2F2
ZW5nZVJlZ2lzdGVycyhDb2RlJiBjb2RlKQoreworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShj
b2RlLCAic2NhdmVuZ2VSZWdpc3RlcnMiKTsKKworICAgIGJyZWFrQ3JpdGljYWxFZGdlcyhjb2Rl
KTsKKworICAgIHsKKyAgICAgICAgU2NhdmVuZ2VSZWdpc3RlcnM8QXJnOjpGUD4gc2NhdmVuZ2VS
ZWdpc3RlcnMoY29kZSk7CisgICAgICAgIHNjYXZlbmdlUmVnaXN0ZXJzLnJ1bigpOworICAgIH0K
KyAgICB7CisgICAgICAgIFNjYXZlbmdlUmVnaXN0ZXJzPEFyZzo6R1A+IHNjYXZlbmdlUmVnaXN0
ZXJzKGNvZGUpOworICAgICAgICBzY2F2ZW5nZVJlZ2lzdGVycy5ydW4oKTsKKyAgICB9Cit9CisK
K30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU2NhdmVuZ2VSZWdp
c3RlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNj
YXZlbmdlUmVnaXN0ZXJzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpclNjYXZlbmdlUmVnaXN0ZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgQWlyU2NhdmVuZ2VSZWdpc3RlcnNfaAorI2RlZmluZSBBaXJTY2F2ZW5nZVJlZ2lzdGVyc19o
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsg
bmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKKy8vIFRoaXMgYWxsb2NhdGVzIHRlbXBv
cmFyaWVzIHRvIHJlZ2lzdGVycyBvciBzdGFjayBsb2NhdGlvbnMgYmFzZWQgb24gZm9yd2FyZCBm
bG93LiBJdCB3aWxsIGhhcHBpbHkKKy8vIGNoYW5nZSB0aGUgbG9jYXRpb24gb2YgYSB0ZW1wb3Jh
cnkgaW4gY2FzZSB0aGUgcmVnaXN0ZXIgaXQgaGFkIHBpY2tlZCBiZWNvbWVzIHVuYXZhaWxhYmxl
IG9yIGluCisvLyBjYXNlIHdlIG5lZWQgdGhlIHZhbHVlIGFuZCBpdCdzIGN1cnJlbnRseSBvbiB0
aGUgc3RhY2suIEl0IGFsc28gcGVyZm9ybXMgbWF0ZXJpYWxpemF0aW9uIG9mCisvLyBjb25zdGFu
dHM6IGlmIGEgdGVtcG9yYXJ5J3MgdmFsdWUgaXMgYWx3YXlzIGEgY29uc3RhbnQgdGhlbiBpbnN0
ZWFkIG9mIHNwaWxsaW5nIHdlIHdpbGwgc2ltcGx5CisvLyByZW1hdGVyaWFsaXplLgorLy8KKy8v
IFRoaXMgcGhhc2UgaXMgbWVhbnQgdG8gcnVuIGFmdGVyIHRoZSBwcmltYXJ5IHJlZ2lzdGVyIGFs
bG9jYXRvci4gVGhlIHByaW1hcnkgcmVnaXN0ZXIgYWxsb2NhdG9yCisvLyBpcyBiZXN0IG9mZiBo
YW5kbGluZyBzcGlsbHMgYnkgc2ltcGx5IGxlYXZpbmcgc3BpbGxlZCBUbXBzIGFsb25lLiBUaGlz
IHBoYXNlIHdpbGwgZW1pdCBwcm9wZXIKKy8vIHNwaWxsIGNvZGUsIGFuZCBpdCB3aWxsIGRvIGl0
IG1vcmUgZWZmaWNpZW50bHkgdGhhbiBjbGFzc2ljYWwgc3BpbGxpbmcgYWxnb3JpdGhtcy4KK3Zv
aWQgc2NhdmVuZ2VSZWdpc3RlcnMoQ29kZSYpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
Mzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyU2NhdmVu
Z2VSZWdpc3RlcnNfaAorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9JbmRleFNwYXJzZVNldC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0luZGV4U3BhcnNlU2V0LmgJKHJldmlzaW9uIDE5
NTA4MykKKysrIFNvdXJjZS9XVEYvd3RmL0luZGV4U3BhcnNlU2V0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ3LDggKzQ3LDggQEAgY2xhc3MgSW5kZXhTcGFyc2VTZXQgewogcHVibGljOgogICAgIGV4
cGxpY2l0IEluZGV4U3BhcnNlU2V0KHVuc2lnbmVkIG1heFZhbHVlKTsKIAotICAgIHZvaWQgYWRk
KHVuc2lnbmVkKTsKLSAgICB2b2lkIHJlbW92ZSh1bnNpZ25lZCk7CisgICAgYm9vbCBhZGQodW5z
aWduZWQpOworICAgIGJvb2wgcmVtb3ZlKHVuc2lnbmVkKTsKICAgICB2b2lkIGNsZWFyKCk7CiAK
ICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3Q7CkBAIC03NCwyNiArNzQsMzAgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgogaW5saW5lIHZvaWQgSW5kZXhTcGFyc2VTZXQ8T3Zl
cmZsb3dIYW5kbGVyPjo6YWRkKHVuc2lnbmVkIHZhbHVlKQogewogICAgIGlmIChjb250YWlucyh2
YWx1ZSkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgdW5z
aWduZWQgbmV3UG9zaXRpb24gPSBtX3ZhbHVlcy5zaXplKCk7CiAgICAgbV92YWx1ZXMuYXBwZW5k
KHZhbHVlKTsKICAgICBtX21hcFt2YWx1ZV0gPSBuZXdQb3NpdGlvbjsKKyAgICByZXR1cm4gdHJ1
ZTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgotaW5saW5lIHZvaWQg
SW5kZXhTcGFyc2VTZXQ8T3ZlcmZsb3dIYW5kbGVyPjo6cmVtb3ZlKHVuc2lnbmVkIHZhbHVlKQor
aW5saW5lIGJvb2wgSW5kZXhTcGFyc2VTZXQ8T3ZlcmZsb3dIYW5kbGVyPjo6cmVtb3ZlKHVuc2ln
bmVkIHZhbHVlKQogewogICAgIHVuc2lnbmVkIHBvc2l0aW9uID0gbV9tYXBbdmFsdWVdOwogICAg
IGlmIChwb3NpdGlvbiA+PSBtX3ZhbHVlcy5zaXplKCkpCi0gICAgICAgIHJldHVybjsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKG1fdmFsdWVzW3Bvc2l0aW9uXSA9PSB2YWx1ZSkg
ewogICAgICAgICB1bnNpZ25lZCBsYXN0VmFsdWUgPSBtX3ZhbHVlcy5sYXN0KCk7CiAgICAgICAg
IG1fdmFsdWVzW3Bvc2l0aW9uXSA9IGxhc3RWYWx1ZTsKICAgICAgICAgbV9tYXBbbGFzdFZhbHVl
XSA9IHBvc2l0aW9uOwogICAgICAgICBtX3ZhbHVlcy5yZW1vdmVMYXN0KCk7CisgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269028</attachid>
            <date>2016-01-14 19:52:50 -0800</date>
            <delta_ts>2016-01-15 13:05:22 -0800</delta_ts>
            <desc>a bit more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>42448</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCShy
ZXZpc2lvbiAxOTUwODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2lj
QmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogCiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CiAKK2NsYXNzIEJsb2NrSW5zZXJ0aW9u
U2V0OwogY2xhc3MgQ29kZTsKIGNsYXNzIEluc2VydGlvblNldDsKIApAQCAtMTI3LDYgKzEyOCw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAKIHBy
aXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEJsb2NrSW5zZXJ0aW9uU2V0OwogICAgIGZyaWVuZCBj
bGFzcyBDb2RlOwogICAgIGZyaWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7CiAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJsb2NrSW5zZXJ0aW9uU2V0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJsb2NrSW5zZXJ0aW9u
U2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
QmxvY2tJbnNlcnRpb25TZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkFpckJsb2NrSW5zZXJ0aW9uU2V0LmgiCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCisjaW5jbHVkZSAiQWlyQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkFpckluc3RJ
bmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0J1YmJsZVNvcnQuaD4KKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK0Jsb2NrSW5zZXJ0aW9uU2V0OjpCbG9ja0luc2VydGlvblNldChD
b2RlICZjb2RlKQorICAgIDogbV9jb2RlKGNvZGUpCit7Cit9CisKK0Jsb2NrSW5zZXJ0aW9uU2V0
Ojp+QmxvY2tJbnNlcnRpb25TZXQoKSB7IH0KKwordm9pZCBCbG9ja0luc2VydGlvblNldDo6aW5z
ZXJ0KEJsb2NrSW5zZXJ0aW9uJiYgaW5zZXJ0aW9uKQoreworICAgIG1faW5zZXJ0aW9ucy5hcHBl
bmQoV1RGTW92ZShpbnNlcnRpb24pKTsKK30KKworQmFzaWNCbG9jayogQmxvY2tJbnNlcnRpb25T
ZXQ6Omluc2VydCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIGZyZXF1ZW5jeSkKK3sKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4gYmxvY2sobmV3IEJhc2ljQmxvY2soVUlOVF9NQVgsIGZy
ZXF1ZW5jeSkpOworICAgIEJhc2ljQmxvY2sqIHJlc3VsdCA9IGJsb2NrLmdldCgpOworICAgIGlu
c2VydChCbG9ja0luc2VydGlvbihpbmRleCwgV1RGTW92ZShibG9jaykpKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitCYXNpY0Jsb2NrKiBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0QmVmb3Jl
KEJhc2ljQmxvY2sqIGJlZm9yZSwgZG91YmxlIGZyZXF1ZW5jeSkKK3sKKyAgICByZXR1cm4gaW5z
ZXJ0KGJlZm9yZS0+aW5kZXgoKSwgZnJlcXVlbmN5ID09IGZyZXF1ZW5jeSA/IGZyZXF1ZW5jeSA6
IGJlZm9yZS0+ZnJlcXVlbmN5KCkpOworfQorCitCYXNpY0Jsb2NrKiBCbG9ja0luc2VydGlvblNl
dDo6aW5zZXJ0QWZ0ZXIoQmFzaWNCbG9jayogYWZ0ZXIsIGRvdWJsZSBmcmVxdWVuY3kpCit7Cisg
ICAgcmV0dXJuIGluc2VydChhZnRlci0+aW5kZXgoKSArIDEsIGZyZXF1ZW5jeSA9PSBmcmVxdWVu
Y3kgPyBmcmVxdWVuY3kgOiBhZnRlci0+ZnJlcXVlbmN5KCkpOworfQorCitib29sIEJsb2NrSW5z
ZXJ0aW9uU2V0OjpleGVjdXRlKCkKK3sKKyAgICBpZiAobV9pbnNlcnRpb25zLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIC8vIFdlIGFsbG93IGluc2VydGlvbnMg
dG8gYmUgZ2l2ZW4gdG8gdXMgaW4gYW55IG9yZGVyLiBTbywgd2UgbmVlZCB0byBzb3J0IHRoZW0g
YmVmb3JlCisgICAgLy8gcnVubmluZyBXVEY6OmV4ZWN1dGVJbnNlcnRpb25zLiBXZSBzdHJvbmds
eSBwcmVmZXIgYSBzdGFibGUgc29ydCBhbmQgd2Ugd2FudCBpdCB0byBiZQorICAgIC8vIGZhc3Qs
IHNvIHdlIHVzZSBidWJibGUgc29ydC4KKyAgICBidWJibGVTb3J0KG1faW5zZXJ0aW9ucy5iZWdp
bigpLCBtX2luc2VydGlvbnMuZW5kKCkpOworCisgICAgZXhlY3V0ZUluc2VydGlvbnMobV9jb2Rl
Lm1fYmxvY2tzLCBtX2luc2VydGlvbnMpOworICAgIAorICAgIC8vIFBydW5lIG91dCBlbXB0eSBl
bnRyaWVzLiBUaGlzIGlzbid0IHN0cmljdGx5IG5lY2Vzc2FyeSBidXQgaXQncworICAgIC8vIGhl
YWx0aHkgdG8ga2VlcCB0aGUgYmxvY2sgbGlzdCBmcm9tIGdyb3dpbmcuCisgICAgbV9wcm9jLm1f
YmxvY2tzLnJlbW92ZUFsbE1hdGNoaW5nKAorICAgICAgICBbJl0gKHN0ZDo6dW5pcXVlX3B0cjxC
YXNpY0Jsb2NrPiYgYmxvY2tQdHIpIC0+IGJvb2wgeworICAgICAgICAgICAgcmV0dXJuICFibG9j
a1B0cjsKKyAgICAgICAgfSk7CisgICAgCisgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGJsb2Nr
cyBrbm93IHRoZWlyIG5ldyBpbmRpY2VzLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X3Byb2MubV9ibG9ja3Muc2l6ZSgpOyArK2kpCisgICAgICAgIG1fcHJvYy5tX2Jsb2Nrc1tpXS0+
bV9pbmRleCA9IGk7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja0luc2VydGlvblNldC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmxvY2tJbnNlcnRpb25TZXQuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmxvY2tJbnNlcnRp
b25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyQmxvY2tJbnNlcnRpb25T
ZXRfaAorI2RlZmluZSBBaXJCbG9ja0luc2VydGlvblNldF9oCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgPHd0Zi9JbnNlcnRpb24uaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBu
YW1lc3BhY2UgQWlyIHsKKworY2xhc3MgSW5zZXJ0aW9uU2V0OworCit0eXBlZGVmIFdURjo6SW5z
ZXJ0aW9uPHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPj4gQmxvY2tJbnNlcnRpb247CisKK2Ns
YXNzIEJsb2NrSW5zZXJ0aW9uU2V0IHsKK3B1YmxpYzoKKyAgICBCbG9ja0luc2VydGlvblNldChQ
cm9jZWR1cmUmKTsKKyAgICB+QmxvY2tJbnNlcnRpb25TZXQoKTsKKyAgICAKKyAgICB2b2lkIGlu
c2VydChCbG9ja0luc2VydGlvbiYmKTsKKworICAgIC8vIEluc2VydCBhIG5ldyBibG9jayBhdCBh
IGdpdmVuIGluZGV4LgorICAgIEJhc2ljQmxvY2sqIGluc2VydCh1bnNpZ25lZCBpbmRleCwgZG91
YmxlIGZyZXF1ZW5jeSA9IFBOYU4pOworCisgICAgLy8gSW5zZXJ0cyBhIG5ldyBibG9jayBiZWZv
cmUgdGhlIGdpdmVuIGJsb2NrLiBVc3VhbGx5IHlvdSB3aWxsIG5vdCBwYXNzIHRoZSBmcmVxdWVu
Y3kKKyAgICAvLyBhcmd1bWVudC4gUGFzc2luZyBQTmFOIGNhdXNlcyB1cyB0byBqdXN0IHVzZSB0
aGUgZnJlcXVlbmN5IG9mIHRoZSAnYmVmb3JlJyBibG9jay4gVGhhdCdzCisgICAgLy8gdXN1YWxs
eSB3aGF0IHlvdSB3YW50LgorICAgIEJhc2ljQmxvY2sqIGluc2VydEJlZm9yZShCYXNpY0Jsb2Nr
KiBiZWZvcmUsIGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKTsKKworICAgIC8vIEluc2VydHMgYSBu
ZXcgYmxvY2sgYWZ0ZXIgdGhlIGdpdmVuIGJsb2NrLgorICAgIEJhc2ljQmxvY2sqIGluc2VydEFm
dGVyKEJhc2ljQmxvY2sqIGFmdGVyLCBkb3VibGUgZnJlcXVlbmN5ID0gUE5hTik7CisKKyAgICBi
b29sIGV4ZWN1dGUoKTsKKworcHJpdmF0ZToKKyAgICBDb2RlJiBtX2NvZGU7CisgICAgVmVjdG9y
PEJsb2NrSW5zZXJ0aW9uLCA4PiBtX2luc2VydGlvbnM7Cit9OworCit9IH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8g
QWlyQmxvY2tJbnNlcnRpb25TZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckJyZWFrQ3JpdGljYWxFZGdlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJCcmVha0NyaXRpY2FsRWRnZXMuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCcmVha0NyaXRpY2FsRWRnZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWly
QnJlYWtDcml0aWNhbEVkZ2VzLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
QWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBicmVha0NyaXRpY2FsRWRn
ZXMoQ29kZSYgY29kZSkKK3sKKyAgICBCbG9ja0luc2VydGlvblNldCBpbnNlcnRpb25TZXQoY29k
ZSk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8
IGNvZGUubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IGNvZGVbYmxvY2tJbmRleF07CisgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICBpZiAoYmxvY2stPm51bVN1Y2Nlc3NvcnMoKSA8PSAxKQor
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2st
Pm51bVN1Y2Nlc3NvcnMoKTsgaS0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayomIHN1Y2Nl
c3NvciA9IGJsb2NrLT5zdWNjZXNzb3JCbG9jayhpKTsKKyAgICAgICAgICAgIGlmIChzdWNjZXNz
b3ItPnByZWRlY2Vzc29ycy5zaXplKCkgPD0gMSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICAgICAgQmFzaWNCbG9jayogcGFkID0gaW5zZXJpdG9uU2V0Lmluc2VydEJlZm9y
ZShzdWNjZXNzb3IsIHN1Y2Nlc3Nvci0+ZnJlcXVlbmN5KCkpOworICAgICAgICAgICAgcGFkLT5h
cHBlbmQoSnVtcCwgc3VjY2Vzc29yLT5hdCgwKS5vcmlnaW4pOworICAgICAgICAgICAgcGFkLT5z
dWNjZXNzb3JzKCkuYXBwZW5kKEZyZXF1ZW50ZWRCbG9jayhzdWNjZXNzb3IpKTsKKyAgICAgICAg
ICAgIHN1Y2Nlc3Nvci0+cmVwbGFjZVByZWRlY2Vzc29yKGJsb2NrLCBwYWQpOworICAgICAgICAg
ICAgc3VjY2Vzc29yID0gcGFkOworICAgICAgICB9CisgICAgfQorCisgICAgaW5zZXJ0aW9uU2V0
LmV4ZWN1dGUoKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJCcmVha0NyaXRpY2FsRWRnZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckJyZWFrQ3JpdGljYWxFZGdlcy5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCcmVha0NyaXRpY2FsRWRnZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBBaXJCcmVha0NyaXRpY2FsRWRnZXNfaAorI2RlZmluZSBB
aXJCcmVha0NyaXRpY2FsRWRnZXNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCit2
b2lkIGJyZWFrQ3JpdGljYWxFZGdlcyhDb2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJCcmVh
a0NyaXRpY2FsRWRnZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckZvcndhcmRMaXZlbmVzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyRm9yd2FyZExpdmVuZXNzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckZvcndhcmRMaXZlbmVzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBBaXJGb3J3YXJkTGl2ZW5lc3NfaAorI2RlZmluZSBBaXJGb3J3YXJkTGl2ZW5l
c3NfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckluc3RNYXAuaCIKKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBu
YW1lc3BhY2UgQWlyIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgTGl2ZW5lc3M+CitjbGFzcyBGb3J3
YXJkTGl2ZW5lc3MgeworcHVibGljOgorICAgIEZvcndhcmRMaXZlbmVzcyhDb2RlJiBjb2RlLCBM
aXZlbmVzcyYgbGl2ZW5lc3MpCisgICAgICAgIDogbV9jb2RlKGNvZGUpCisgICAgICAgICwgbV9s
aXZlbmVzcyhsaXZlbmVzcykKKyAgICAgICAgLCBtX2RlYXRocyhjb2RlKQorICAgIHsKKyAgICAg
ICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgICAgIExpdmVuZXNz
OjpMb2NhbENhbGMgbG9jYWxDYWxjKGxpdmVuZXNzLCBibG9jayk7CisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykgeworICAg
ICAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKKyAgICAgICAg
ICAgICAgICBEZWF0aHMmIGRlYXRocyA9IG1fZGVhdGhzLmF0KGJsb2NrLCBpbnN0SW5kZXgpOwor
ICAgICAgICAgICAgICAgIGxvY2FsQ2FsYy5leGVjdXRlUmF3KAorICAgICAgICAgICAgICAgICAg
ICBpbnN0SW5kZXgsCisgICAgICAgICAgICAgICAgICAgIFsmXSAodW5zaWduZWQgaW5kZXgsIGNv
bnN0IHR5cGVuYW1lIExpdmVuZXNzOjpUaGluZyYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGRlYXRocy5raWxscy5hcHBlbmQoaW5kZXgpOworICAgICAgICAgICAgICAgICAgICB9LAorICAg
ICAgICAgICAgICAgICAgICBbJl0gKHVuc2lnbmVkIGluZGV4LCBjb25zdCB0eXBlbmFtZSBMaXZl
bmVzczo6VGhpbmcmKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWF0aHMuZGVhZERlZnMu
YXBwZW5kKGluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBjbGFzcyBMb2NhbENhbGMgeworICAgIHB1YmxpYzoKKyAg
ICAgICAgTG9jYWxDYWxjKEZvcndhcmRMaXZlbmVzcyYgZm9yd2FyZCwgQmFzaWNCbG9jayogYmxv
Y2spCisgICAgICAgICAgICA6IG1fZm9yd2FyZChmb3J3YXJkKQorICAgICAgICAgICAgLCBtX2Js
b2NrKGJsb2NrKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiB3b3Jrc2V0ID0gZm9yd2Fy
ZC5tX2xpdmVuZXNzLndvcmtzZXQoKTsKKyAgICAgICAgICAgIHdvcmtzZXQuY2xlYXIoKTsKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggOiBmb3J3YXJkLm1fbGl2ZW5lc3MucmF3TGl2
ZUF0SGVhZChibG9jaykpCisgICAgICAgICAgICAgICAgd29ya3NldC5hZGQoaW5kZXgpOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gTk9URTogVGhpcyB3b24ndCB1c2UgdGhlIHByZXZpb3VzIGlu
c3RydWN0aW9uLiBUaGVyZWZvcmUsIGl0J3MgYXBwcm9wcmlhdGUgZm9yIHBoYXNlcyB0aGF0Cisg
ICAgICAgIC8vIG1vZGlmeSB0aGUgSVIgYXMgdGhleSBnbywgc28gbG9uZyBhcyB0aGV5IGV4ZWN1
dGUgbGl2ZW5lc3MgYmVmb3JlIG1vZGlmeWluZyBpbnN0cnVjdGlvbnMKKyAgICAgICAgLy8gYXQg
aSA+PSBpbnN0SW5kZXguCisgICAgICAgIHZvaWQgZXhlY3V0ZSh1bnNpZ25lZCBpbnN0SW5kZXgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEZpcnN0IGtpbGwgdGhlIHRoaW5ncyB0aGF0IGFy
ZSB0aGUgZmluYWwgdXNlcyBhdCB0aGlzIHBvaW50LgorICAgICAgICAgICAgYXV0byYgd29ya3Nl
dCA9IG1fZm9yd2FyZC5tX2xpdmVuZXNzLndvcmtzZXQoKTsKKyAgICAgICAgICAgIERlYXRocyYg
ZGVhdGhzID0gbV9mb3J3YXJkLm1fZGVhdGhzLmF0KG1fYmxvY2ssIGluc3RJbmRleCk7CisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4IDogZGVhdGhzLmtpbGxzKQorICAgICAgICAgICAg
ICAgIHdvcmtzZXQucmVtb3ZlKGluZGV4KTsKKworICAgICAgICAgICAgLy8gTm93IGJpcnRoIHRo
ZSB0aGluZ3MgdGhhdCBhcmUgZGVmaW5lZC4KKyAgICAgICAgICAgIGlmIChpbnN0SW5kZXggKyAx
IDwgbV9ibG9jay0+c2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgSW5zdCYgbmV4dEluc3QgPSBt
X2Jsb2NrLT5hdChpbnN0SW5kZXggKyAxKTsKKyAgICAgICAgICAgICAgICBuZXh0SW5zdC5mb3JF
YWNoPHR5cGVuYW1lIExpdmVuZXNzOjpUaGluZz4oCisgICAgICAgICAgICAgICAgICAgIFsmXSAo
dHlwZW5hbWUgTGl2ZW5lc3M6OlRoaW5nJiB0aGluZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlw
ZSB0eXBlLCBBcmc6OldpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjpp
c0Vhcmx5RGVmKHJvbGUpICYmIExpdmVuZXNzOjphY2NlcHRzVHlwZSh0eXBlKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gTGl2ZW5lc3M6OnZhbHVlVG9J
bmRleCh0aGluZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya3NldC5hZGQoaW5k
ZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaW5zdC5mb3JFYWNoPHR5
cGVuYW1lIExpdmVuZXNzOjpUaGluZz4oCisgICAgICAgICAgICAgICAgWyZdICh0eXBlbmFtZSBM
aXZlbmVzczo6VGhpbmcmIHRoaW5nLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIHR5cGUsIEFy
Zzo6V2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNMYXRlRGVmKHJvbGUp
ICYmIExpdmVuZXNzOjphY2NlcHRzVHlwZSh0eXBlKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgaW5kZXggPSBMaXZlbmVzczo6dmFsdWVUb0luZGV4KHRoaW5nKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHdvcmtzZXQuYWRkKGluZGV4KTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAvLyBOb3cgbWFrZSBzdXJl
IHRoYXQgRE9BIHRoaW5ncyByZWFsbHkgYXJlIERPQS4KKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaW5kZXggOiBkZWF0aHMuZGVhZERlZnMpCisgICAgICAgICAgICAgICAgd29ya3NldC5yZW1v
dmUoaW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAgTGl2ZW5lc3M6OkxvY2FsQ2FsYzo6SXRl
cmFibGUgbGl2ZSgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBMaXZlbmVz
czo6TG9jYWxDYWxjOjpJdGVyYWJsZShtX2ZvcndhcmQubV9saXZlbmVzcyk7CisgICAgICAgIH0K
KworICAgICAgICBib29sIGlzTGl2ZShjb25zdCB0eXBlbmFtZSBBZGFwdGVyOjpUaGluZyYgdGhp
bmcpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBsaXZlKCkuY29udGFpbnMo
dGhpbmcpOworICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIEZvcndh
cmRMaXZlbmVzcyYgbV9mb3J3YXJkOworICAgICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOworICAg
IH07CisgICAgCitwcml2YXRlOgorICAgIHN0cnVjdCBEZWF0aHMgeworICAgICAgICBWZWN0b3I8
dW5zaWduZWQsIDE+IGtpbGxzOworICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IGRlYWREZWZzOwor
ICAgIH07CisgICAgCisgICAgQ29kZSYgbV9jb2RlOworICAgIExpdmVuZXNzJiBtX2xpdmVuZXNz
OworICAgIEluc3RNYXA8RGVhdGhzPiBtX2RlYXRoczsKK307CisKK30gfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBB
aXJGb3J3YXJkTGl2ZW5lc3NfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0Fpckluc3RNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0Fpckluc3RNYXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlySW5zdE1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEFpckluc3RNYXBf
aAorI2RlZmluZSBBaXJJbnN0TWFwX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRl
ICJBaXJCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkIzSW5k
ZXhNYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIg
eworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgSW5zdE1hcCB7CitwdWJsaWM6CisgICAg
SW5zdE1hcChDb2RlJiBjb2RlKQorICAgICAgICA6IG1fbWFwKGNvZGUuc2l6ZSgpKQorICAgIHsK
KyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpCisgICAgICAgICAgICBtX21h
cFtibG9ja10ucmVzaXplKGJsb2NrLT5zaXplKCkpOworICAgIH0KKworICAgIFQmIGF0KEJhc2lj
QmxvY2sqIGJsb2NrLCB1bnNpZ25lZCBpbnN0SW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4g
bV9tYXBbYmxvY2tdW2luc3RJbmRleF07CisgICAgfQorCisgICAgY29uc3QgVCYgYXQoQmFzaWNC
bG9jayogYmxvY2ssIHVuc2lnbmVkIGluc3RJbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBjb25zdF9jYXN0PEluc3RNYXAqPih0aGlzKS0+Z2V0KGJsb2NrLCBpbnN0SW5kZXgpOwor
ICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgVmVjdG9yPFQ+
PiBtX21hcDsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJJbnN0TWFwX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAkocmV2aXNpb24gMTk1MDgz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC05Myw5ICs5MywxMSBAQCBzdHJ1Y3QgUmVnTGl2ZW5lc3NBZGFwdGVyIHsKIH07
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0ZXI+Ci1jbGFzcyBBYnN0cmFjdExpdmVuZXNzIDog
cHJpdmF0ZSBBZGFwdGVyIHsKK2NsYXNzIEFic3RyYWN0TGl2ZW5lc3MgOiBwdWJsaWMgQWRhcHRl
ciB7CiAgICAgc3RydWN0IFdvcmtzZXQ7CiBwdWJsaWM6CisgICAgdHlwZWRlZiB0eXBlbmFtZSBB
ZGFwdGVyOjpUaGluZyBUaGluZzsKKyAgICAKICAgICBBYnN0cmFjdExpdmVuZXNzKENvZGUmIGNv
ZGUpCiAgICAgICAgIDogQWRhcHRlcihjb2RlKQogICAgICAgICAsIG1fd29ya3NldChBZGFwdGVy
OjptYXhJbmRleChjb2RlKSkKQEAgLTIyMiw2ICsyMjQsMTEgQEAgcHVibGljOgogCiAgICAgICAg
ICAgICBJdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIEl0ZXJhdG9yKG1fbGl2ZW5lc3Ms
IG1fbGl2ZW5lc3MubV93b3Jrc2V0LmJlZ2luKCkpOyB9CiAgICAgICAgICAgICBJdGVyYXRvciBl
bmQoKSBjb25zdCB7IHJldHVybiBJdGVyYXRvcihtX2xpdmVuZXNzLCBtX2xpdmVuZXNzLm1fd29y
a3NldC5lbmQoKSk7IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgYm9vbCBjb250YWlucyhj
b25zdCB0eXBlbmFtZSBBZGFwdGVyOjpUaGluZyYgdGhpbmcpIGNvbnN0CisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fbGl2ZW5lc3MubV93b3Jrc2V0LmNvbnRhaW5zKEFk
YXB0ZXI6OnZhbHVlVG9JbmRleCh0aGluZykpOworICAgICAgICAgICAgfQogCiAgICAgICAgIHBy
aXZhdGU6CiAgICAgICAgICAgICBBYnN0cmFjdExpdmVuZXNzJiBtX2xpdmVuZXNzOwpAQCAtMjMy
LDcgKzIzOSwxNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gSXRlcmFibGUobV9saXZl
bmVzcyk7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIGV4ZWN1dGUodW5zaWduZWQgaW5zdElu
ZGV4KQorICAgICAgICBib29sIGlzTGl2ZShjb25zdCB0eXBlbmFtZSBBZGFwdGVyOjpUaGluZyYg
dGhpbmcpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBsaXZlKCkuY29udGFp
bnModGhpbmcpOworICAgICAgICB9CisKKyAgICAgICAgLy8gQ2FsbHMgdGhlIGtpbGwgY2FsbGJh
Y2sgd2l0aCB0aGUga2lsbHMuIEl0IHBhc3NlcyBib3RoIHRoZSBpbmRleCBhbmQgdGhlIHZhbHVl
LiBUaGUgb3RoZXIKKyAgICAgICAgLy8gY2FsbGJhY2sgaXMgZm9yIGRlYWQgZGVmcy4KKyAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgS2lsbENhbGxiYWNrLCB0eXBlbmFtZSBEZWFkRGVmQ2FsbGJh
Y2s+CisgICAgICAgIHZvaWQgZXhlY3V0ZVJhdygKKyAgICAgICAgICAgIHVuc2lnbmVkIGluc3RJ
bmRleCwKKyAgICAgICAgICAgIGNvbnN0IEtpbGxDYWxsYmFjayYga2lsbENhbGxiYWNrLCBjb25z
dCBEZWFkRGVmQ2FsbGJhY2smIGRlYWREZWZDYWxsYmFjaykKICAgICAgICAgewogICAgICAgICAg
ICAgSW5zdCYgaW5zdCA9IG1fYmxvY2stPmF0KGluc3RJbmRleCk7CiAgICAgICAgICAgICBhdXRv
JiB3b3Jrc2V0ID0gbV9saXZlbmVzcy5tX3dvcmtzZXQ7CkBAIC0yNDIsMjMgKzI1OSwzMiBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgSW5zdCYgbmV4dEluc3QgPSBtX2Jsb2NrLT5hdChpbnN0
SW5kZXggKyAxKTsKICAgICAgICAgICAgICAgICBuZXh0SW5zdC5mb3JFYWNoPHR5cGVuYW1lIEFk
YXB0ZXI6OlRoaW5nPigKICAgICAgICAgICAgICAgICAgICAgWyZdICh0eXBlbmFtZSBBZGFwdGVy
OjpUaGluZyYgdGhpbmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgdHlwZSwgQXJnOjpXaWR0
aCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNFYXJseURlZihyb2xlKSAm
JiBBZGFwdGVyOjphY2NlcHRzVHlwZSh0eXBlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3b3Jrc2V0LnJlbW92ZShBZGFwdGVyOjp2YWx1ZVRvSW5kZXgodGhpbmcpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzRWFybHlEZWYocm9sZSkgJiYgQWRhcHRlcjo6YWNj
ZXB0c1R5cGUodHlwZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
bmRleCA9IEFkYXB0ZXI6OnZhbHVlVG9JbmRleCh0aGluZyk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCF3b3Jrc2V0LnJlbW92ZShpbmRleCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlYWREZWZDYWxsYmFjayhpbmRleCwgdGhpbmcpOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIAogICAgICAgICAgICAgLy8gVGhlbiBoYW5kbGUgZGVmJ3MuCiAgICAgICAgICAg
ICBpbnN0LmZvckVhY2g8dHlwZW5hbWUgQWRhcHRlcjo6VGhpbmc+KAogICAgICAgICAgICAgICAg
IFsmXSAodHlwZW5hbWUgQWRhcHRlcjo6VGhpbmcmIHRoaW5nLCBBcmc6OlJvbGUgcm9sZSwgQXJn
OjpUeXBlIHR5cGUsIEFyZzo6V2lkdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6
aXNMYXRlRGVmKHJvbGUpICYmIEFkYXB0ZXI6OmFjY2VwdHNUeXBlKHR5cGUpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgd29ya3NldC5yZW1vdmUoQWRhcHRlcjo6dmFsdWVUb0luZGV4KHRoaW5n
KSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzTGF0ZURlZihyb2xlKSAmJiBBZGFw
dGVyOjphY2NlcHRzVHlwZSh0eXBlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgaW5kZXggPSBBZGFwdGVyOjp2YWx1ZVRvSW5kZXgodGhpbmcpOworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCF3b3Jrc2V0LnJlbW92ZShpbmRleCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVhZERlZkNhbGxiYWNrKGluZGV4LCB0aGluZyk7CisgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICB9KTsKIAogICAgICAgICAgICAgLy8gVGhlbiBoYW5kbGUg
dXNlJ3MuCiAgICAgICAgICAgICBpbnN0LmZvckVhY2g8dHlwZW5hbWUgQWRhcHRlcjo6VGhpbmc+
KAogICAgICAgICAgICAgICAgIFsmXSAodHlwZW5hbWUgQWRhcHRlcjo6VGhpbmcmIHRoaW5nLCBB
cmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIHR5cGUsIEFyZzo6V2lkdGgpIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKEFyZzo6aXNFYXJseVVzZShyb2xlKSAmJiBBZGFwdGVyOjphY2NlcHRzVHlw
ZSh0eXBlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtzZXQuYWRkKEFkYXB0ZXI6OnZh
bHVlVG9JbmRleCh0aGluZykpOworICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0Vhcmx5
VXNlKHJvbGUpICYmIEFkYXB0ZXI6OmFjY2VwdHNUeXBlKHR5cGUpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IEFkYXB0ZXI6OnZhbHVlVG9JbmRleCh0aGluZyk7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAod29ya3NldC5hZGQoaW5kZXgpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGtpbGxDYWxsYmFjayhpbmRleCwgdGhpbmcpOworICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSk7CiAKICAgICAgICAgICAgIC8vIEFu
ZCBmaW5hbGx5LCBoYW5kbGUgdGhlIGxhdGUgdXNlJ3Mgb2YgdGhlIHByZXZpb3VzIGluc3RydWN0
aW9uLgpAQCAtMjY2LDE3ICsyOTIsMzMgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIEluc3Qm
IHByZXZJbnN0ID0gbV9ibG9jay0+YXQoaW5zdEluZGV4IC0gMSk7CiAgICAgICAgICAgICAgICAg
cHJldkluc3QuZm9yRWFjaDx0eXBlbmFtZSBBZGFwdGVyOjpUaGluZz4oCiAgICAgICAgICAgICAg
ICAgICAgIFsmXSAodHlwZW5hbWUgQWRhcHRlcjo6VGhpbmcmIHRoaW5nLCBBcmc6OlJvbGUgcm9s
ZSwgQXJnOjpUeXBlIHR5cGUsIEFyZzo6V2lkdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChBcmc6OmlzTGF0ZVVzZShyb2xlKSAmJiBBZGFwdGVyOjphY2NlcHRzVHlwZSh0eXBlKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3Jrc2V0LmFkZChBZGFwdGVyOjp2YWx1ZVRv
SW5kZXgodGhpbmcpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzTGF0ZVVz
ZShyb2xlKSAmJiBBZGFwdGVyOjphY2NlcHRzVHlwZSh0eXBlKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gQWRhcHRlcjo6dmFsdWVUb0luZGV4KHRoaW5n
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod29ya3NldC5hZGQoaW5kZXgpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBraWxsQ2FsbGJhY2soaW5kZXgsIHRoaW5n
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KIAorICAgICAgICB2b2lkIGV4ZWN1dGUodW5zaWduZWQg
aW5zdEluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICBleGVjdXRlUmF3KAorICAgICAgICAg
ICAgICAgIGluc3RJbmRleCwKKyAgICAgICAgICAgICAgICBbXSAodW5zaWduZWQsIGNvbnN0IHR5
cGVuYW1lIEFkYXB0ZXI6OlRoaW5nJikgeyB9LAorICAgICAgICAgICAgICAgIFtdICh1bnNpZ25l
ZCwgY29uc3QgdHlwZW5hbWUgQWRhcHRlcjo6VGhpbmcmKSB7IH0pOworICAgICAgICB9CisKICAg
ICBwcml2YXRlOgogICAgICAgICBBYnN0cmFjdExpdmVuZXNzJiBtX2xpdmVuZXNzOwogICAgICAg
ICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOwogICAgIH07CiAKKyAgICBjb25zdCBWZWN0b3I8dW5zaWdu
ZWQ+JiByYXdMaXZlQXRIZWFkKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fbGl2ZUF0SGVhZFtibG9ja107CisgICAgfQorCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VW5kZXJseWluZ0l0ZXJhYmxlPgogICAgIGNsYXNzIEl0ZXJhYmxlIHsKICAgICBwdWJsaWM6CkBA
IC0zMzAsNiArMzcyLDExIEBAIHB1YmxpYzoKICAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25z
dCB7IHJldHVybiBpdGVyYXRvcihtX2xpdmVuZXNzLCBtX2l0ZXJhYmxlLmJlZ2luKCkpOyB9CiAg
ICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKG1fbGl2ZW5lc3Ms
IG1faXRlcmFibGUuZW5kKCkpOyB9CiAKKyAgICAgICAgYm9vbCBjb250YWlucyhjb25zdCB0eXBl
bmFtZSBBZGFwdGVyOjpUaGluZyYgdGhpbmcpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBtX2xpdmVuZXNzLm1fd29ya3NldC5jb250YWlucyhBZGFwdGVyOjp2YWx1ZVRvSW5k
ZXgodGhpbmcpKTsKKyAgICAgICAgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgQWJzdHJhY3RM
aXZlbmVzcyYgbV9saXZlbmVzczsKICAgICAgICAgY29uc3QgVW5kZXJseWluZ0l0ZXJhYmxlJiBt
X2l0ZXJhYmxlOwpAQCAtMzQ1LDYgKzM5Miw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEl0
ZXJhYmxlPHR5cGVuYW1lIEFkYXB0ZXI6OkluZGV4U2V0PigqdGhpcywgbV9saXZlQXRUYWlsW2Js
b2NrXSk7CiAgICAgfQogCisgICAgSW5kZXhTcGFyc2VTZXQ8VW5zYWZlVmVjdG9yT3ZlcmZsb3c+
JiB3b3Jrc2V0KCkgeyByZXR1cm4gbV93b3Jrc2V0OyB9CisKIHByaXZhdGU6CiAgICAgZnJpZW5k
IGNsYXNzIExvY2FsQ2FsYzsKICAgICBmcmllbmQgc3RydWN0IExvY2FsQ2FsYzo6SXRlcmFibGU7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wdGltaXplQmxvY2tPcmRl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcHRp
bWl6ZUJsb2NrT3JkZXIuY3BwCShyZXZpc2lvbiAxOTUwODMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpck9wdGltaXplQmxvY2tPcmRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTczLDEwICs3Myw4IEBAIHByaXZhdGU6CiAKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQogCi12
b2lkIG9wdGltaXplQmxvY2tPcmRlcihDb2RlJiBjb2RlKQorVmVjdG9yPEJhc2ljQmxvY2sqPiBi
bG9ja3NJbk9wdGltaXplZE9yZGVyKENvZGUmIGNvZGUpCiB7Ci0gICAgUGhhc2VTY29wZSBwaGFz
ZVNjb3BlKGNvZGUsICJvcHRpbWl6ZUJsb2NrT3JkZXIiKTsKLQogICAgIFZlY3RvcjxCYXNpY0Js
b2NrKj4gYmxvY2tzSW5PcmRlcjsKIAogICAgIEJsb2NrV29ya2xpc3QgZmFzdFdvcmtsaXN0OwpA
QCAtMTEzLDYgKzExMSwxNSBAQCB2b2lkIG9wdGltaXplQmxvY2tPcmRlcihDb2RlJiBjb2RlKQog
ICAgIEFTU0VSVChmYXN0V29ya2xpc3QuaXNFbXB0eSgpKTsKICAgICBBU1NFUlQoc2xvd1dvcmts
aXN0LmlzRW1wdHkoKSk7CiAKKyAgICByZXR1cm4gYmxvY2tzSW5PcmRlcjsKK30KKwordm9pZCBv
cHRpbWl6ZUJsb2NrT3JkZXIoQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2Nv
cGUoY29kZSwgIm9wdGltaXplQmxvY2tPcmRlciIpOworCisgICAgVmVjdG9yPEJhc2ljQmxvY2sq
PiBibG9ja3NJbk9yZGVyID0gYmxvY2tzSW5PcHRpbWl6ZWRPcmRlcihjb2RlKTsKKyAgICAKICAg
ICAvLyBQbGFjZSBibG9ja3MgaW50byBDb2RlJ3MgYmxvY2sgbGlzdCBhY2NvcmRpbmcgdG8gdGhl
IG9yZGVyaW5nIGluIGJsb2Nrc0luT3JkZXIuIFdlIGRvIHRoaXMgYnkgbGVha2luZwogICAgIC8v
IGFsbCBvZiB0aGUgYmxvY2tzIGFuZCB0aGVuIHJlYWRvcHRpbmcgdGhlbS4KICAgICBmb3IgKGF1
dG8mIGVudHJ5IDogY29kZS5ibG9ja0xpc3QoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyT3B0aW1pemVCbG9ja09yZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcHRpbWl6ZUJsb2NrT3JkZXIuaAkocmV2aXNpb24gMTk1
MDgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcHRpbWl6ZUJsb2NrT3Jk
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsMTEgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7IG5hbWVzcGFjZQogCiBjbGFzcyBDb2RlOwogCisvLyBSZXR1cm5zIGEgbGlz
dCBvZiBibG9ja3Mgc29ydGVkIGFjY29yZGluZyB0byB3aGF0IHdvdWxkIGJlIHRoZSBjdXJyZW50
IG9wdGltYWwgb3JkZXIuIFRoaXMgc2hhcmVzCisvLyBzb21lIHByb3BlcnRpZXMgd2l0aCBhIHBy
ZS1vcmRlciB0cmF2ZXJzYWwuIEluIHBhcnRpY3VsYXIsIGVhY2ggYmxvY2sgd2lsbCBhcHBlYXIg
YWZ0ZXIgYXQgbGVhc3QKKy8vIG9uZSBvZiBpdHMgcHJlZGVjZXNzb3JzLgorVmVjdG9yPEJhc2lj
QmxvY2sqPiBibG9ja3NJbk9wdGltaXplZE9yZGVyKENvZGUmKTsKKwogLy8gUmVvcmRlcnMgdGhl
IGJhc2ljIGJsb2NrcyB0byBrZWVwIGhvdCBibG9ja3MgYXQgdGhlIHRvcCwgYW5kIG1heGltaXpl
IHRoZSBsaWtlbGlob29kIHRoYXQgYSBmcmVxdWVudGx5CiAvLyB0YWtlbiBlZGdlIGlzIGp1c3Qg
YSBmYWxsLXRocm91Z2guCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
U2NhdmVuZ2VSZWdpc3RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyU2NhdmVuZ2VSZWdpc3RlcnMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTY2F2ZW5nZVJlZ2lzdGVycy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwyNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyU2NhdmVuZ2VS
ZWdpc3RlcnMuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgi
CisjaW5jbHVkZSAiQWlyRm9yd2FyZExpdmVuZXNzLmgiCisjaW5jbHVkZSAiQWlyTGl2ZW5lc3Mu
aCIKKyNpbmNsdWRlICJBaXJPcHRpbWl6ZUJsb2NrT3JkZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCituYW1lc3BhY2UgeworCit0ZW1wbGF0
ZTxBcmc6OlR5cGUgdHlwZT4KK2NsYXNzIFNjYXZlbmdlUmVnaXN0ZXJzIHsKK3B1YmxpYzoKKyAg
ICBTY2FudmVnZVJlZ2lzdGVycyhDb2RlJiBjb2RlKQorICAgICAgICA6IG1fY29kZShjb2RlKQor
ICAgICAgICAsIG1fbGl2ZW5lc3MoY29kZSkKKyAgICAgICAgLCBtX2ZvcndhcmRMaXZlbmVzcyhj
b2RlLCBtX2xpdmVuZXNzKQorICAgICAgICAsIG1fdG1wV2lkdGgoY29kZSkKKyAgICAgICAgLCBt
X2luc2VydGlvblNldChjb2RlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHJ1bigpCisgICAg
eworICAgICAgICBpbml0aWFsaXplQmxvY2tSZWdTdGF0ZXMoKTsKKworICAgICAgICBmb3IgKEJh
c2ljQmxvY2sqIGJsb2NrIDogYmxvY2tzSW5PcHRpbWl6ZWRPcmRlcihtX2NvZGUpKQorICAgICAg
ICAgICAgcHJvY2Vzc0Jsb2NrKGJsb2NrKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBp
bml0aWFsaXplQmxvY2tSZWdTdGF0ZXMoKQorICAgIHsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2Nr
KiBibG9jayA6IG1fY29kZSkgeworICAgICAgICAgICAgU3RhdGUmIHN0YXRlID0gbV9hdEhlYWRb
YmxvY2tdOworICAgICAgICAgICAgZm9yIChUbXAgdG1wIDogbV9saXZlbmVzcy5saXZlQXRIZWFk
KGJsb2NrKSkgeworICAgICAgICAgICAgICAgIGlmICghdG1wLmlzUmVnKCkpCisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgVG1wSW5mbyB0bXBJbmZvOwor
ICAgICAgICAgICAgICAgIHRtcEluZm8ucmVnID0gdG1wLnJlZygpOworICAgICAgICAgICAgICAg
IHN0YXRlLm1hcHBpbmcuYWRkKHRtcCwgdG1wSW5mbyk7CisgICAgICAgICAgICAgICAgc3RhdGUu
cmV2ZXJzZU1hcHBpbmcuYWRkKHRtcC5yZWcoKSwgdG1wKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKworICAgIHZvaWQgcHJvY2Vzc0Jsb2NrKEJhc2ljQmxvY2sqIGJsb2NrKQor
ICAgIHsKKyAgICAgICAgU3RhdGUgc3RhdGUgPSBtX2F0SGVhZFtibG9ja107CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHN0YXRlLmlzU2V0dGxlZCk7CisKKyAgICAgICAgRm9yd2FyZExpdmVuZXNz
PFRtcExpdmVuZXNzPHR5cGU+Pjo6TG9jYWxDYWxjIGxvY2FsQ2FsYyhtX2ZvcndhcmRMaXZlbmVz
cywgYmxvY2spOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSAw
OyBpbnN0SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK2luc3RJbmRleCkgeworICAgICAgICAgICAg
SW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICAvLyBGb3IgZWFjaCBUbXAgdXNlLCB3ZSBjYW4gaGF2ZSBhbnkgb2YgdGhlIGZvbGxvd2lu
ZyBzY2VuYXJpb3M6CisgICAgICAgICAgICAvLyAKKyAgICAgICAgICAgIC8vIDEpIEl0IGFscmVh
ZHkgaGFzIGEgcmVnaXN0ZXIuCisgICAgICAgICAgICAvLyAyKSBJZiBpdCBkb2Vzbid0IGhhdmUg
YSByZWdpc3RlcjoKKyAgICAgICAgICAgIC8vICAgICBhKSBJdCdzIGEgdXNlIHRoYXQgbmVlZHMg
YSByZWdpc3Rlci4KKyAgICAgICAgICAgIC8vICAgICBiKSBJdCdzIGEgd2FybSB1c2UgdGhhdCBk
b2VzIG5vdCBraWxsLgorICAgICAgICAgICAgLy8gICAgIGMpIEl0J3MgYSB3YXJtIHVzZSB0aGF0
IGtpbGxzLgorICAgICAgICAgICAgLy8gICAgIGQpIEl0J3MgYSBjb2xkIHVzZS4KKyAgICAgICAg
ICAgIC8vCisgICAgICAgICAgICAvLyBGb3IgKDJhKSBhbmQgKDJiKSwgd2Ugd2FudCB0byBmaW5k
IGEgcmVnaXN0ZXIgdGhhdCBpc24ndCBhbHJlYWR5IGxvY2tlZCBkb3duIGJ5IHRoZQorICAgICAg
ICAgICAgLy8gaW5zdHJ1Y3Rpb24uIFdlIGhhdmUgdG8gcmVzcGVjdCB0aGUgaW50ZXJmZXJlbmNl
cyBiZXR3ZWVuIGVhcmx5IHVzZXMsIGxhdGUgdXNlcywgZWFybHkKKyAgICAgICAgICAgIC8vIGRl
ZnMsIGFuZCBlYXJseSBjbG9iYmVycy4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBX
ZSBtYXkgYWxzbyBoYXZlIGEgcmVnaXN0ZXIgdXNlLiBUaG9zZSB0YWtlIHByaW9yaXR5LiBXZSBm
aXJzdCBtYWtlIHN1cmUgdGhhdCB3ZSBkb24ndAorICAgICAgICAgICAgLy8gY2hhbmdlIHdoaWNo
IHJlZ2lzdGVyIGFuIGluc3RydWN0aW9uIHVzZXMgaWYgaXQgYWxyZWFkeSB1c2VzIGEgcmVnaXN0
ZXIuCisKKyAgICAgICAgICAgIC8vIEZvciBlYWNoIFRtcCBkZWYsIHdlIGNhbiBoYXZlIGFueSBv
ZiB0aGUgZm9sbG93aW5nIHNjZW5hcmlvczoKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAv
LyAxKSBJdCBhbHJlYWR5IGhhcyBhIHJlZ2lzdGVyLgorICAgICAgICAgICAgLy8gMikgSWYgaXQg
ZG9lc24ndCBoYXZlIGEgcmVnaXN0ZXI6CisgICAgICAgICAgICAvLyAgICAgYSkgSXQncyBhIGRl
ZiB0aGF0IG5lZWRzIGEgcmVnaXN0ZXIuCisgICAgICAgICAgICAvLyAgICAgYikgSXQncyBhIGRl
ZiB0aGF0IGRvZXMgbm90IG5lZWQgYSByZWdpc3Rlci4KKyAgICAgICAgICAgIC8vCisgICAgICAg
ICAgICAvLyBJZiB3ZSBoYXZlICgyYiksIHdlIHRyeSB0byBnaXZlIGl0IGEgcmVnaXN0ZXIgYnV0
IHdlIGRvbid0IGhhdmUgdG8uIFdlIGhhdmUgdG8gcmVzcGVjdAorICAgICAgICAgICAgLy8gdGhl
IGludGVyZmVyZW5jZXMgYmV0d2VlbiBsYXRlIHVzZXMsIGxhdGUgZGVmcywgYW5kIGxhdGUgY2xv
YmJlcnMuCisKKyAgICAgICAgICAgIC8vIFdlIGNhbiBoYXZlIGEgdXNlIG9mIGEgY29uc3RhbnQg
dG1wIGZyb20gYSBBcmc6OmFkZHIgb3IgTW92ZS4gV2hlbiB0aGlzIGhhcHBlbnMgd2UKKyAgICAg
ICAgICAgIC8vIHdhbnQgdG8gY2hlY2sgaWYgb3RoZXIgcmVnaXN0ZXJzIGhhdmUgYSBuZWFyYnkg
Y29uc3RhbnQsIGFuZCB0cnkgdG8gdXNlIHRoYXQgb25lCisgICAgICAgICAgICAvLyBpbnN0ZWFk
LgorCisgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGV4ZWN1dGUgdGhlIGxvY2FsIGNhbGN1bGF0
b3IgYmVmb3JlIG1ha2luZyBjaGFuZ2VzLgorICAgICAgICAgICAgbG9jYWxDYWxjLmV4ZWN1dGUo
aW5zdEluZGV4KTsKKworICAgICAgICAgICAgLy8gVGhlIGxhdGUgZGVmcyBhbmQgdXNlcyBvZiB0
aGUgcHJldmlvdXMgaW5zdHJ1Y3Rpb24gaGF2ZSBubyBpbXBhY3Qgb24gb3VyIGFiaWxpdHkgdG8K
KyAgICAgICAgICAgIC8vIHVzZSByZWdpc3RlcnMgZm9yIHRoaXMgaW5zdHJ1Y3Rpb24uIFRoZSBl
YXJseSBkZWZzIGFuZCBlYXJseSB1c2VzIG9mIHRoZSBuZXh0CisgICAgICAgICAgICAvLyBpbnN0
cnVjdGlvbiBoYXZlIG5vIGltcGFjdCBvbiBvdXIgYWJpbGl5IHRvIGRlZiByZWdpc3RlcnMgZm9y
IHRoaXMgaW5zdHJ1Y3Rpb24uCisKKyAgICAgICAgICAgIC8vIE1vdmUgaW5zdHJ1Y3Rpb25zIGdl
dCBzcGVjaWFsIHRyZWF0bWVudCBiZWNhdXNlIHRoZXkgaW5pdGlhbGl6ZSBhIHJlZ2lzdGVyIHRv
IGEKKyAgICAgICAgICAgIC8vIGNvbnN0YW50IGFuZCBzbyBkb24ndCByZXF1aXJlIGFueSByZWFs
IHNwaWxsaW5nLgorICAgICAgICAgICAgaWYgKGluc3Qub3Bjb2RlID09IE1vdmUpIHsKKyAgICAg
ICAgICAgICAgICAvLyBGSVhNRQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAvLyBUaGUgY29tbW9uIGNhc2UgaXMgdGhhdDoKKyAgICAgICAg
ICAgIC8vIC0gQWxsIHVzZXMgcmVmZXIgdG8gYSByZWdpc3RlciB0aGF0IGlzIGF0IGhvbWUgb3Ig
cmVmZXIgdG8gYSB0ZW1wb3JhcnkgdGhhdCBhbHJlYWR5CisgICAgICAgICAgICAvLyAgIGhhcyBh
IHJlZ2lzdGVyLgorICAgICAgICAgICAgLy8gLSBBbGwgZGVmcyByZWZlciB0byBhIHJlZ2lzdGVy
IHRoYXQgaXMgdW51c2VkIG9yIHRvIGEgdGVtcG9yYXJ5IHRoYXQgY2FuIGJlIHRyaXZpYWxseQor
ICAgICAgICAgICAgLy8gICBhbGxvY2F0ZWQuIFdlIGNhbiB0cml2aWFsbHkgYWxsb2NhdGUgaXQg
dG8gYSByZWdpc3RlciBpZiB0aGVyZSBpcyBhIHJlZ2lzdGVyIHRoYXQgaXMKKyAgICAgICAgICAg
IC8vICAgZGVhZCBhZnRlciB0aGUgaW5zdHJ1Y3Rpb24uCisgICAgICAgICAgICBib29sIG9rID0g
ZmFsc2U7CisgICAgICAgICAgICBJbnN0IGluc3RDb3B5ID0gaW5zdDsKKyAgICAgICAgICAgIGlu
c3QuZm9yRWFjaFRtcCgKKyAgICAgICAgICAgICAgICBbJl0gKFRtcCYgdG1wLCBBcmc6OlJvbGUg
cm9sZSwgQXJnOjpUeXBlIHR5cGUsIEFyZzo6V2lkdGggd2lkdGgpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHRtcC5pc1JlZygpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGl0
ZXIgPSBzdGF0ZS5yZXZlcnNlTWFwcGluZy5maW5kKHRtcC5yZWcoKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoQXJnOjppc1VzZShyb2xlKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChpdGVyICE9IHN0YXRlLnJldmVyc2VNYXBwaW5nLmVuZCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlci0+dmFsdWUgIT0gdG1wKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG9rID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6
OmlzRGVmKHJvbGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXIgIT0g
c3RhdGUucmV2ZXJzZU1hcHBpbmcuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGl0ZXItPnZhbHVlICE9IHRtcCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFRoaXMgcmVnaXN0ZXIgaXMgYXZhaWxhYmxlLiBVc2UgaXQgYW5kIHRlbGwgZXZlcnlv
bmUgdGhhdCB3ZSBoYXZlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRvbmUg
c28uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRtcEluZm8gaW5mbzsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5yZWcgPSB0bXAucmVnKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLm1hcHBpbmcuYWRkKHRtcCwgaW5mbyk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnJldmVyc2VNYXBwaW5nLmFkZCh0
bXAucmVnKCksIHRtcCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICAvLyBXZSBoYXZlIHRvIGJlIGNhcmVmdWwgYWJvdXQgVXNlRGVmIGhlcmUuIFRoYXQg
YmFzaWNhbGx5IG1lYW5zIHRoYXQgd2UgaGF2ZSB0bworICAgICAgICAgICAgICAgICAgICAvLyBw
aWNrIG9uZSByZWdpc3RlciB0aGF0IGRvZXNuJ3QgaW50ZXJmZXJlIHdpdGggZWl0aGVyIHVzZXMg
b3IgZGVmcy4gVGhhdCdzCisgICAgICAgICAgICAgICAgICAgIC8vIGFubm95aW5nLgorICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNVc2Uocm9sZSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpZiAob2spIHsKKyAgICAgICAgICAgICAgICAv
LyBUaGlzIGlzIHRoZSBjYXNlIHdlIGhvcGUgdG8gdGFrZS4gV2Ugd2VyZSBhYmxlIHRvIGZpeCB0
aGUgaW5zdHJ1Y3Rpb24gd2l0aG91dAorICAgICAgICAgICAgICAgIC8vIGluc2VydGluZyBhbnkg
c2h1ZmZsZXMuCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIFJldmVydCB0aGUgaW5zdHJ1Y3Rpb24uCisgICAgICAgICAgICBpbnN0ID0g
aW5zdENvcHk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBTdGFja1Nsb3QqIHNwaWxsU2xvdChU
bXAgdG1wKQorICAgIHsKKyAgICAgICAgU3RhY2tTbG90KiYgcmVzdWx0ID0gbV9zcGlsbFNsb3Rz
LmFkZCh0bXAsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgaWYgKCFyZXN1bHQp
CisgICAgICAgICAgICByZXN1bHQgPSBtX2NvZGUuYWRkU3RhY2tTbG90KEFyZzo6Ynl0ZXMobV90
bXBXaWR0aC53aWR0aCh0bXApKSwgU3RhY2tTbG90S2luZDo6QW5vbnltb3VzKTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RydWN0IFRtcEluZm8geworICAgICAg
ICBUbXBJbmZvKCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgZXhwbGljaXQgVG1w
SW5mbyhSZWcgcmVnKQorICAgICAgICAgICAgOiByZWcocmVnKQorICAgICAgICB7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIFJlZyByZWc7CisgICAgICAgIGJvb2wgaXNTcGlsbGVkIHsg
ZmFsc2UgfTsKKyAgICAgICAgYm9vbCBoYXNDb25zdGFudCB7IGZhbHNlIH07CisgICAgICAgIGlu
dDY0X3QgY29uc3RhbnQgeyAwIH07CisgICAgfTsKKworICAgIHN0cnVjdCBTdGF0ZSB7CisgICAg
ICAgIEhhc2hNYXA8VG1wLCBUbXBJbmZvPiBtYXBwaW5nOyAvLyBJZiB0aGUgb3JpZ2luYWwgcHJv
Z3JhbSBhc2tzIGZvciB0aGlzIHRtcCwgd2hlcmUgaXMgaXQ/CisgICAgICAgIEhhc2hNYXA8UmVn
LCBUbXA+IHJldmVyc2VNYXBwaW5nOyAvLyBXaGF0IHRtcCBkb2VzIHRoaXMgcmVnaXN0ZXIgaG9s
ZCByaWdodCBub3c/CisgICAgICAgIGJvb2wgaXNTZXR0bGVkIHsgZmFsc2UgfTsKKyAgICB9Owor
ICAgIAorICAgIENvZGUmIG1fY29kZTsKKyAgICBUbXBMaXZlbmVzczx0eXBlPiBtX2xpdmVuZXNz
OworICAgIEZvcndhcmRMaXZlbmVzczxUbXBMaXZlbmVzczx0eXBlPj4gbV9mb3J3YXJkTGl2ZW5l
c3M7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgU3RhdGU+IG1fYXRIZWFkOworICAgIFN0YXRl
IG1fc3RhdGU7CisgICAgVG1wV2lkdGggbV90bXBXaWR0aDsKKyAgICBIYXNoTWFwPFRtcCwgU3Rh
Y2tTbG90Kj4gbV9zcGlsbFNsb3RzOworICAgIEluc2VydGlvblNldCBtX2luc2VydGlvblNldDsK
K307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIHNjYXZlbmdlUmVnaXN0ZXJz
KENvZGUmIGNvZGUpCit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJzY2F2ZW5n
ZVJlZ2lzdGVycyIpOworCisgICAgYnJlYWtDcml0aWNhbEVkZ2VzKGNvZGUpOworCisgICAgewor
ICAgICAgICBTY2F2ZW5nZVJlZ2lzdGVyczxBcmc6OkZQPiBzY2F2ZW5nZVJlZ2lzdGVycyhjb2Rl
KTsKKyAgICAgICAgc2NhdmVuZ2VSZWdpc3RlcnMucnVuKCk7CisgICAgfQorICAgIHsKKyAgICAg
ICAgU2NhdmVuZ2VSZWdpc3RlcnM8QXJnOjpHUD4gc2NhdmVuZ2VSZWdpc3RlcnMoY29kZSk7Cisg
ICAgICAgIHNjYXZlbmdlUmVnaXN0ZXJzLnJ1bigpOworICAgIH0KK30KKworfSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTY2F2ZW5nZVJlZ2lzdGVycy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU2NhdmVuZ2VSZWdpc3Rl
cnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU2Nh
dmVuZ2VSZWdpc3RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBBaXJTY2F2ZW5n
ZVJlZ2lzdGVyc19oCisjZGVmaW5lIEFpclNjYXZlbmdlUmVnaXN0ZXJzX2gKKworI2lmIEVOQUJM
RShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWly
IHsKKworY2xhc3MgQ29kZTsKKworLy8gVGhpcyBhbGxvY2F0ZXMgdGVtcG9yYXJpZXMgdG8gcmVn
aXN0ZXJzIG9yIHN0YWNrIGxvY2F0aW9ucyBiYXNlZCBvbiBmb3J3YXJkIGZsb3cuIEl0IHdpbGwg
aGFwcGlseQorLy8gY2hhbmdlIHRoZSBsb2NhdGlvbiBvZiBhIHRlbXBvcmFyeSBpbiBjYXNlIHRo
ZSByZWdpc3RlciBpdCBoYWQgcGlja2VkIGJlY29tZXMgdW5hdmFpbGFibGUgb3IgaW4KKy8vIGNh
c2Ugd2UgbmVlZCB0aGUgdmFsdWUgYW5kIGl0J3MgY3VycmVudGx5IG9uIHRoZSBzdGFjay4gSXQg
YWxzbyBwZXJmb3JtcyBtYXRlcmlhbGl6YXRpb24gb2YKKy8vIGNvbnN0YW50czogaWYgYSB0ZW1w
b3JhcnkncyB2YWx1ZSBpcyBhbHdheXMgYSBjb25zdGFudCB0aGVuIGluc3RlYWQgb2Ygc3BpbGxp
bmcgd2Ugd2lsbCBzaW1wbHkKKy8vIHJlbWF0ZXJpYWxpemUuCisvLworLy8gVGhpcyBwaGFzZSBp
cyBtZWFudCB0byBydW4gYWZ0ZXIgdGhlIHByaW1hcnkgcmVnaXN0ZXIgYWxsb2NhdG9yLiBUaGUg
cHJpbWFyeSByZWdpc3RlciBhbGxvY2F0b3IKKy8vIGlzIGJlc3Qgb2ZmIGhhbmRsaW5nIHNwaWxs
cyBieSBzaW1wbHkgbGVhdmluZyBzcGlsbGVkIFRtcHMgYWxvbmUuIFRoaXMgcGhhc2Ugd2lsbCBl
bWl0IHByb3BlcgorLy8gc3BpbGwgY29kZSwgYW5kIGl0IHdpbGwgZG8gaXQgbW9yZSBlZmZpY2ll
bnRseSB0aGFuIGNsYXNzaWNhbCBzcGlsbGluZyBhbGdvcml0aG1zLgordm9pZCBzY2F2ZW5nZVJl
Z2lzdGVycyhDb2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJTY2F2ZW5nZVJlZ2lzdGVyc19o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVmFsaWRhdGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVmFsaWRhdGUuY3Bw
CShyZXZpc2lvbiAxOTUwODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZh
bGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsNiArODIsMTMgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgICAgICBWQUxJREFURShpc1Rlcm1pbmFsKGluc3Qub3Bjb2RlKSwgKCJBdCAi
LCBpbnN0LCAiIGluICIsICpibG9jaykpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICAgICAgVkFMSURBVEUoIWlzVGVybWluYWwoaW5zdC5vcGNvZGUpLCAoIkF0ICIsIGlu
c3QsICIgaW4gIiwgKmJsb2NrKSk7CisKKyAgICAgICAgICAgICAgICAvLyBmb3JFYWNoQXJnIG11
c3QgcmV0dXJuIEFyZyYncyB0aGF0IHBvaW50IGludG8gdGhlIGFyZ3MgYXJyYXkuCisgICAgICAg
ICAgICAgICAgaW5zdC5mb3JFYWNoQXJnKAorICAgICAgICAgICAgICAgICAgICBbJl0gKEFyZyYg
YXJnLCBBcmc6OlJvbGUsIEFyZzo6VHlwZSwgQXJnOjpXaWR0aCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgVkFMSURBVEUoJmFyZyA+PSBpbnN0LmFyZ3NbMF0sICgiQXQgIiwgYXJnLCAiIGlu
ICIsIGluc3QsICIgaW4gIiwgKmJsb2NrKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJ
REFURSgmYXJnIDw9IGluc3QuYXJncy5sYXN0KCksICgiQXQgIiwgYXJnLCAiIGluICIsIGluc3Qs
ICIgaW4gIiwgKmJsb2NrKSk7CisgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vz
c29yQmxvY2tzKCkpCiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsaWRCbG9ja3MuY29udGFp
bnMoc3VjY2Vzc29yKSwgKCJJbiAiLCAqYmxvY2spKTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0lu
ZGV4U3BhcnNlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSW5kZXhTcGFyc2VT
ZXQuaAkocmV2aXNpb24gMTk1MDgzKQorKysgU291cmNlL1dURi93dGYvSW5kZXhTcGFyc2VTZXQu
aAkod29ya2luZyBjb3B5KQpAQCAtNDcsOCArNDcsOCBAQCBjbGFzcyBJbmRleFNwYXJzZVNldCB7
CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgSW5kZXhTcGFyc2VTZXQodW5zaWduZWQgbWF4VmFsdWUp
OwogCi0gICAgdm9pZCBhZGQodW5zaWduZWQpOwotICAgIHZvaWQgcmVtb3ZlKHVuc2lnbmVkKTsK
KyAgICBib29sIGFkZCh1bnNpZ25lZCk7CisgICAgYm9vbCByZW1vdmUodW5zaWduZWQpOwogICAg
IHZvaWQgY2xlYXIoKTsKIAogICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdDsKQEAgLTc0LDI2ICs3
NCwzMCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CiBpbmxpbmUgdm9pZCBJ
bmRleFNwYXJzZVNldDxPdmVyZmxvd0hhbmRsZXI+OjphZGQodW5zaWduZWQgdmFsdWUpCiB7CiAg
ICAgaWYgKGNvbnRhaW5zKHZhbHVlKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICB1bnNpZ25lZCBuZXdQb3NpdGlvbiA9IG1fdmFsdWVzLnNpemUoKTsKICAg
ICBtX3ZhbHVlcy5hcHBlbmQodmFsdWUpOwogICAgIG1fbWFwW3ZhbHVlXSA9IG5ld1Bvc2l0aW9u
OworICAgIHJldHVybiB0cnVlOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPdmVyZmxvd0hhbmRs
ZXI+Ci1pbmxpbmUgdm9pZCBJbmRleFNwYXJzZVNldDxPdmVyZmxvd0hhbmRsZXI+OjpyZW1vdmUo
dW5zaWduZWQgdmFsdWUpCitpbmxpbmUgYm9vbCBJbmRleFNwYXJzZVNldDxPdmVyZmxvd0hhbmRs
ZXI+OjpyZW1vdmUodW5zaWduZWQgdmFsdWUpCiB7CiAgICAgdW5zaWduZWQgcG9zaXRpb24gPSBt
X21hcFt2YWx1ZV07CiAgICAgaWYgKHBvc2l0aW9uID49IG1fdmFsdWVzLnNpemUoKSkKLSAgICAg
ICAgcmV0dXJuOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAobV92YWx1ZXNbcG9z
aXRpb25dID09IHZhbHVlKSB7CiAgICAgICAgIHVuc2lnbmVkIGxhc3RWYWx1ZSA9IG1fdmFsdWVz
Lmxhc3QoKTsKICAgICAgICAgbV92YWx1ZXNbcG9zaXRpb25dID0gbGFzdFZhbHVlOwogICAgICAg
ICBtX21hcFtsYXN0VmFsdWVdID0gcG9zaXRpb247CiAgICAgICAgIG1fdmFsdWVzLnJlbW92ZUxh
c3QoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOwog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269090</attachid>
            <date>2016-01-15 13:05:22 -0800</date>
            <delta_ts>2016-01-15 22:04:17 -0800</delta_ts>
            <desc>starting to make sense</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>44889</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCShy
ZXZpc2lvbiAxOTUwODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2lj
QmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogCiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CiAKK2NsYXNzIEJsb2NrSW5zZXJ0aW9u
U2V0OwogY2xhc3MgQ29kZTsKIGNsYXNzIEluc2VydGlvblNldDsKIApAQCAtMTI3LDYgKzEyOCw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAKIHBy
aXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEJsb2NrSW5zZXJ0aW9uU2V0OwogICAgIGZyaWVuZCBj
bGFzcyBDb2RlOwogICAgIGZyaWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7CiAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJsb2NrSW5zZXJ0aW9uU2V0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJsb2NrSW5zZXJ0aW9u
U2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
QmxvY2tJbnNlcnRpb25TZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkFpckJsb2NrSW5zZXJ0aW9uU2V0LmgiCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCisjaW5jbHVkZSAiQWlyQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkFpckluc3RJ
bmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0J1YmJsZVNvcnQuaD4KKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK0Jsb2NrSW5zZXJ0aW9uU2V0OjpCbG9ja0luc2VydGlvblNldChD
b2RlICZjb2RlKQorICAgIDogbV9jb2RlKGNvZGUpCit7Cit9CisKK0Jsb2NrSW5zZXJ0aW9uU2V0
Ojp+QmxvY2tJbnNlcnRpb25TZXQoKSB7IH0KKwordm9pZCBCbG9ja0luc2VydGlvblNldDo6aW5z
ZXJ0KEJsb2NrSW5zZXJ0aW9uJiYgaW5zZXJ0aW9uKQoreworICAgIG1faW5zZXJ0aW9ucy5hcHBl
bmQoV1RGTW92ZShpbnNlcnRpb24pKTsKK30KKworQmFzaWNCbG9jayogQmxvY2tJbnNlcnRpb25T
ZXQ6Omluc2VydCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIGZyZXF1ZW5jeSkKK3sKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4gYmxvY2sobmV3IEJhc2ljQmxvY2soVUlOVF9NQVgsIGZy
ZXF1ZW5jeSkpOworICAgIEJhc2ljQmxvY2sqIHJlc3VsdCA9IGJsb2NrLmdldCgpOworICAgIGlu
c2VydChCbG9ja0luc2VydGlvbihpbmRleCwgV1RGTW92ZShibG9jaykpKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitCYXNpY0Jsb2NrKiBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0QmVmb3Jl
KEJhc2ljQmxvY2sqIGJlZm9yZSwgZG91YmxlIGZyZXF1ZW5jeSkKK3sKKyAgICByZXR1cm4gaW5z
ZXJ0KGJlZm9yZS0+aW5kZXgoKSwgZnJlcXVlbmN5ID09IGZyZXF1ZW5jeSA/IGZyZXF1ZW5jeSA6
IGJlZm9yZS0+ZnJlcXVlbmN5KCkpOworfQorCitCYXNpY0Jsb2NrKiBCbG9ja0luc2VydGlvblNl
dDo6aW5zZXJ0QWZ0ZXIoQmFzaWNCbG9jayogYWZ0ZXIsIGRvdWJsZSBmcmVxdWVuY3kpCit7Cisg
ICAgcmV0dXJuIGluc2VydChhZnRlci0+aW5kZXgoKSArIDEsIGZyZXF1ZW5jeSA9PSBmcmVxdWVu
Y3kgPyBmcmVxdWVuY3kgOiBhZnRlci0+ZnJlcXVlbmN5KCkpOworfQorCitib29sIEJsb2NrSW5z
ZXJ0aW9uU2V0OjpleGVjdXRlKCkKK3sKKyAgICBpZiAobV9pbnNlcnRpb25zLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIC8vIFdlIGFsbG93IGluc2VydGlvbnMg
dG8gYmUgZ2l2ZW4gdG8gdXMgaW4gYW55IG9yZGVyLiBTbywgd2UgbmVlZCB0byBzb3J0IHRoZW0g
YmVmb3JlCisgICAgLy8gcnVubmluZyBXVEY6OmV4ZWN1dGVJbnNlcnRpb25zLiBXZSBzdHJvbmds
eSBwcmVmZXIgYSBzdGFibGUgc29ydCBhbmQgd2Ugd2FudCBpdCB0byBiZQorICAgIC8vIGZhc3Qs
IHNvIHdlIHVzZSBidWJibGUgc29ydC4KKyAgICBidWJibGVTb3J0KG1faW5zZXJ0aW9ucy5iZWdp
bigpLCBtX2luc2VydGlvbnMuZW5kKCkpOworCisgICAgZXhlY3V0ZUluc2VydGlvbnMobV9jb2Rl
Lm1fYmxvY2tzLCBtX2luc2VydGlvbnMpOworICAgIAorICAgIC8vIFBydW5lIG91dCBlbXB0eSBl
bnRyaWVzLiBUaGlzIGlzbid0IHN0cmljdGx5IG5lY2Vzc2FyeSBidXQgaXQncworICAgIC8vIGhl
YWx0aHkgdG8ga2VlcCB0aGUgYmxvY2sgbGlzdCBmcm9tIGdyb3dpbmcuCisgICAgbV9wcm9jLm1f
YmxvY2tzLnJlbW92ZUFsbE1hdGNoaW5nKAorICAgICAgICBbJl0gKHN0ZDo6dW5pcXVlX3B0cjxC
YXNpY0Jsb2NrPiYgYmxvY2tQdHIpIC0+IGJvb2wgeworICAgICAgICAgICAgcmV0dXJuICFibG9j
a1B0cjsKKyAgICAgICAgfSk7CisgICAgCisgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGJsb2Nr
cyBrbm93IHRoZWlyIG5ldyBpbmRpY2VzLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X3Byb2MubV9ibG9ja3Muc2l6ZSgpOyArK2kpCisgICAgICAgIG1fcHJvYy5tX2Jsb2Nrc1tpXS0+
bV9pbmRleCA9IGk7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja0luc2VydGlvblNldC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmxvY2tJbnNlcnRpb25TZXQuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmxvY2tJbnNlcnRp
b25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyQmxvY2tJbnNlcnRpb25T
ZXRfaAorI2RlZmluZSBBaXJCbG9ja0luc2VydGlvblNldF9oCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgPHd0Zi9JbnNlcnRpb24uaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBu
YW1lc3BhY2UgQWlyIHsKKworY2xhc3MgSW5zZXJ0aW9uU2V0OworCit0eXBlZGVmIFdURjo6SW5z
ZXJ0aW9uPHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPj4gQmxvY2tJbnNlcnRpb247CisKK2Ns
YXNzIEJsb2NrSW5zZXJ0aW9uU2V0IHsKK3B1YmxpYzoKKyAgICBCbG9ja0luc2VydGlvblNldChQ
cm9jZWR1cmUmKTsKKyAgICB+QmxvY2tJbnNlcnRpb25TZXQoKTsKKyAgICAKKyAgICB2b2lkIGlu
c2VydChCbG9ja0luc2VydGlvbiYmKTsKKworICAgIC8vIEluc2VydCBhIG5ldyBibG9jayBhdCBh
IGdpdmVuIGluZGV4LgorICAgIEJhc2ljQmxvY2sqIGluc2VydCh1bnNpZ25lZCBpbmRleCwgZG91
YmxlIGZyZXF1ZW5jeSA9IFBOYU4pOworCisgICAgLy8gSW5zZXJ0cyBhIG5ldyBibG9jayBiZWZv
cmUgdGhlIGdpdmVuIGJsb2NrLiBVc3VhbGx5IHlvdSB3aWxsIG5vdCBwYXNzIHRoZSBmcmVxdWVu
Y3kKKyAgICAvLyBhcmd1bWVudC4gUGFzc2luZyBQTmFOIGNhdXNlcyB1cyB0byBqdXN0IHVzZSB0
aGUgZnJlcXVlbmN5IG9mIHRoZSAnYmVmb3JlJyBibG9jay4gVGhhdCdzCisgICAgLy8gdXN1YWxs
eSB3aGF0IHlvdSB3YW50LgorICAgIEJhc2ljQmxvY2sqIGluc2VydEJlZm9yZShCYXNpY0Jsb2Nr
KiBiZWZvcmUsIGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKTsKKworICAgIC8vIEluc2VydHMgYSBu
ZXcgYmxvY2sgYWZ0ZXIgdGhlIGdpdmVuIGJsb2NrLgorICAgIEJhc2ljQmxvY2sqIGluc2VydEFm
dGVyKEJhc2ljQmxvY2sqIGFmdGVyLCBkb3VibGUgZnJlcXVlbmN5ID0gUE5hTik7CisKKyAgICBi
b29sIGV4ZWN1dGUoKTsKKworcHJpdmF0ZToKKyAgICBDb2RlJiBtX2NvZGU7CisgICAgVmVjdG9y
PEJsb2NrSW5zZXJ0aW9uLCA4PiBtX2luc2VydGlvbnM7Cit9OworCit9IH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8g
QWlyQmxvY2tJbnNlcnRpb25TZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckJyZWFrQ3JpdGljYWxFZGdlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJCcmVha0NyaXRpY2FsRWRnZXMuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCcmVha0NyaXRpY2FsRWRnZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWly
QnJlYWtDcml0aWNhbEVkZ2VzLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
QWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBicmVha0NyaXRpY2FsRWRn
ZXMoQ29kZSYgY29kZSkKK3sKKyAgICBCbG9ja0luc2VydGlvblNldCBpbnNlcnRpb25TZXQoY29k
ZSk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8
IGNvZGUubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IGNvZGVbYmxvY2tJbmRleF07CisgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICBpZiAoYmxvY2stPm51bVN1Y2Nlc3NvcnMoKSA8PSAxKQor
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2st
Pm51bVN1Y2Nlc3NvcnMoKTsgaS0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayomIHN1Y2Nl
c3NvciA9IGJsb2NrLT5zdWNjZXNzb3JCbG9jayhpKTsKKyAgICAgICAgICAgIGlmIChzdWNjZXNz
b3ItPnByZWRlY2Vzc29ycy5zaXplKCkgPD0gMSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICAgICAgQmFzaWNCbG9jayogcGFkID0gaW5zZXJpdG9uU2V0Lmluc2VydEJlZm9y
ZShzdWNjZXNzb3IsIHN1Y2Nlc3Nvci0+ZnJlcXVlbmN5KCkpOworICAgICAgICAgICAgcGFkLT5h
cHBlbmQoSnVtcCwgc3VjY2Vzc29yLT5hdCgwKS5vcmlnaW4pOworICAgICAgICAgICAgcGFkLT5z
dWNjZXNzb3JzKCkuYXBwZW5kKEZyZXF1ZW50ZWRCbG9jayhzdWNjZXNzb3IpKTsKKyAgICAgICAg
ICAgIHN1Y2Nlc3Nvci0+cmVwbGFjZVByZWRlY2Vzc29yKGJsb2NrLCBwYWQpOworICAgICAgICAg
ICAgc3VjY2Vzc29yID0gcGFkOworICAgICAgICB9CisgICAgfQorCisgICAgaW5zZXJ0aW9uU2V0
LmV4ZWN1dGUoKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJCcmVha0NyaXRpY2FsRWRnZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckJyZWFrQ3JpdGljYWxFZGdlcy5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCcmVha0NyaXRpY2FsRWRnZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBBaXJCcmVha0NyaXRpY2FsRWRnZXNfaAorI2RlZmluZSBB
aXJCcmVha0NyaXRpY2FsRWRnZXNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCit2
b2lkIGJyZWFrQ3JpdGljYWxFZGdlcyhDb2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJCcmVh
a0NyaXRpY2FsRWRnZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckluc3RNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckluc3RNYXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlySW5zdE1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEFpckluc3RNYXBfaAor
I2RlZmluZSBBaXJJbnN0TWFwX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJB
aXJCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkIzSW5kZXhN
YXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgSW5zdE1hcCB7CitwdWJsaWM6CisgICAgSW5z
dE1hcChDb2RlJiBjb2RlKQorICAgICAgICA6IG1fbWFwKGNvZGUuc2l6ZSgpKQorICAgIHsKKyAg
ICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpCisgICAgICAgICAgICBtX21hcFti
bG9ja10ucmVzaXplKGJsb2NrLT5zaXplKCkpOworICAgIH0KKworICAgIFQmIGF0KEJhc2ljQmxv
Y2sqIGJsb2NrLCB1bnNpZ25lZCBpbnN0SW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gbV9t
YXBbYmxvY2tdW2luc3RJbmRleF07CisgICAgfQorCisgICAgY29uc3QgVCYgYXQoQmFzaWNCbG9j
ayogYmxvY2ssIHVuc2lnbmVkIGluc3RJbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBjb25zdF9jYXN0PEluc3RNYXAqPih0aGlzKS0+Z2V0KGJsb2NrLCBpbnN0SW5kZXgpOworICAg
IH0KKyAgICAKK3ByaXZhdGU6CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgVmVjdG9yPFQ+PiBt
X21hcDsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJJbnN0TWFwX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAkocmV2aXNpb24gMTk1MDgzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC05MiwxMCArOTIsMTkgQEAgc3RydWN0IFJlZ0xpdmVuZXNzQWRhcHRlciB7CiAgICAg
UmVnIGluZGV4VG9WYWx1ZSh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gUmVnOjpmcm9tSW5kZXgo
aW5kZXgpOyB9CiB9OwogCitlbnVtIGNsYXNzIEtpbGxNb2RlIDogaW50OF90IHsKKyAgICBET0FF
YXJseURlZkluTmV4dEluc3QsCisgICAgRE9BTGF0ZURlZiwKKyAgICBFYXJseVVzZUtpbGwsCisg
ICAgTGF0ZVVzZUluUHJldkluc3RLaWxsCit9OworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdGVy
PgotY2xhc3MgQWJzdHJhY3RMaXZlbmVzcyA6IHByaXZhdGUgQWRhcHRlciB7CitjbGFzcyBBYnN0
cmFjdExpdmVuZXNzIDogcHVibGljIEFkYXB0ZXIgewogICAgIHN0cnVjdCBXb3Jrc2V0OwogcHVi
bGljOgorICAgIHR5cGVkZWYgdHlwZW5hbWUgQWRhcHRlcjo6VGhpbmcgVGhpbmc7CisgICAgCiAg
ICAgQWJzdHJhY3RMaXZlbmVzcyhDb2RlJiBjb2RlKQogICAgICAgICA6IEFkYXB0ZXIoY29kZSkK
ICAgICAgICAgLCBtX3dvcmtzZXQoQWRhcHRlcjo6bWF4SW5kZXgoY29kZSkpCkBAIC0yMjIsNiAr
MjMxLDExIEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgSXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7
IHJldHVybiBJdGVyYXRvcihtX2xpdmVuZXNzLCBtX2xpdmVuZXNzLm1fd29ya3NldC5iZWdpbigp
KTsgfQogICAgICAgICAgICAgSXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gSXRlcmF0b3Io
bV9saXZlbmVzcywgbV9saXZlbmVzcy5tX3dvcmtzZXQuZW5kKCkpOyB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGJvb2wgY29udGFpbnMoY29uc3QgdHlwZW5hbWUgQWRhcHRlcjo6VGhpbmcm
IHRoaW5nKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2xp
dmVuZXNzLm1fd29ya3NldC5jb250YWlucyhBZGFwdGVyOjp2YWx1ZVRvSW5kZXgodGhpbmcpKTsK
KyAgICAgICAgICAgIH0KIAogICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgQWJzdHJhY3RM
aXZlbmVzcyYgbV9saXZlbmVzczsKQEAgLTIzMiw3ICsyNDYsMTYgQEAgcHVibGljOgogICAgICAg
ICAgICAgcmV0dXJuIEl0ZXJhYmxlKG1fbGl2ZW5lc3MpOwogICAgICAgICB9CiAKLSAgICAgICAg
dm9pZCBleGVjdXRlKHVuc2lnbmVkIGluc3RJbmRleCkKKyAgICAgICAgYm9vbCBpc0xpdmUoY29u
c3QgdHlwZW5hbWUgQWRhcHRlcjo6VGhpbmcmIHRoaW5nKSBjb25zdAorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gbGl2ZSgpLmNvbnRhaW5zKHRoaW5nKTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIENhbGxzIHRoZSBraWxsIGNhbGxiYWNrIHdpdGggdGhlIGtpbGxzIGFuZCBkZXNjcmlw
dGlvbnMgb2YgaG93IHRoZXkgZ290IGtpbGxlZC4gQWxzbworICAgICAgICAvLyBwYXNzZXMgdGhl
IGludGVybmFsIGluZGV4IG9mIHRoZSB0aGluZyBiZWluZyBraWxsZWQsIGlmIHlvdSB3YW50IHRv
IHVzZSBpbmRleC1iYXNlZAorICAgICAgICAvLyBsaXZlbmVzcy4KKyAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgS2lsbENhbGxiYWNrPgorICAgICAgICB2b2lkIGV4ZWN1dGUodW5zaWduZWQgaW5z
dEluZGV4LCBjb25zdCBLaWxsQ2FsbGJhY2smIGtpbGxDYWxsYmFjaykKICAgICAgICAgewogICAg
ICAgICAgICAgSW5zdCYgaW5zdCA9IG1fYmxvY2stPmF0KGluc3RJbmRleCk7CiAgICAgICAgICAg
ICBhdXRvJiB3b3Jrc2V0ID0gbV9saXZlbmVzcy5tX3dvcmtzZXQ7CkBAIC0yNDIsMjMgKzI2NSwz
MiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgSW5zdCYgbmV4dEluc3QgPSBtX2Jsb2NrLT5h
dChpbnN0SW5kZXggKyAxKTsKICAgICAgICAgICAgICAgICBuZXh0SW5zdC5mb3JFYWNoPHR5cGVu
YW1lIEFkYXB0ZXI6OlRoaW5nPigKICAgICAgICAgICAgICAgICAgICAgWyZdICh0eXBlbmFtZSBB
ZGFwdGVyOjpUaGluZyYgdGhpbmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgdHlwZSwgQXJn
OjpXaWR0aCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNFYXJseURlZihy
b2xlKSAmJiBBZGFwdGVyOjphY2NlcHRzVHlwZSh0eXBlKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3b3Jrc2V0LnJlbW92ZShBZGFwdGVyOjp2YWx1ZVRvSW5kZXgodGhpbmcpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzRWFybHlEZWYocm9sZSkgJiYgQWRhcHRl
cjo6YWNjZXB0c1R5cGUodHlwZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpbmRleCA9IEFkYXB0ZXI6OnZhbHVlVG9JbmRleCh0aGluZyk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCF3b3Jrc2V0LnJlbW92ZShpbmRleCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGtpbGxDYWxsYmFjayhpbmRleCwgdGhpbmcsIEtpbGxNb2RlOjpE
T0FFYXJseURlZkluTmV4dEluc3QpOworICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAg
ICAgLy8gVGhlbiBoYW5kbGUgZGVmJ3MuCiAgICAgICAgICAgICBpbnN0LmZvckVhY2g8dHlwZW5h
bWUgQWRhcHRlcjo6VGhpbmc+KAogICAgICAgICAgICAgICAgIFsmXSAodHlwZW5hbWUgQWRhcHRl
cjo6VGhpbmcmIHRoaW5nLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIHR5cGUsIEFyZzo6V2lk
dGgpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNMYXRlRGVmKHJvbGUpICYmIEFk
YXB0ZXI6OmFjY2VwdHNUeXBlKHR5cGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgd29ya3Nl
dC5yZW1vdmUoQWRhcHRlcjo6dmFsdWVUb0luZGV4KHRoaW5nKSk7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChBcmc6OmlzTGF0ZURlZihyb2xlKSAmJiBBZGFwdGVyOjphY2NlcHRzVHlwZSh0eXBl
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBBZGFwdGVyOjp2
YWx1ZVRvSW5kZXgodGhpbmcpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF3b3Jrc2V0
LnJlbW92ZShpbmRleCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAga2lsbENhbGxiYWNr
KGluZGV4LCB0aGluZywgS2lsbE1vZGU6OkRPQUxhdGVEZWYpOworICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgfSk7CiAKICAgICAgICAgICAgIC8vIFRoZW4gaGFuZGxlIHVz
ZSdzLgogICAgICAgICAgICAgaW5zdC5mb3JFYWNoPHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nPigK
ICAgICAgICAgICAgICAgICBbJl0gKHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nJiB0aGluZywgQXJn
OjpSb2xlIHJvbGUsIEFyZzo6VHlwZSB0eXBlLCBBcmc6OldpZHRoKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChBcmc6OmlzRWFybHlVc2Uocm9sZSkgJiYgQWRhcHRlcjo6YWNjZXB0c1R5cGUo
dHlwZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICB3b3Jrc2V0LmFkZChBZGFwdGVyOjp2YWx1
ZVRvSW5kZXgodGhpbmcpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNFYXJseVVz
ZShyb2xlKSAmJiBBZGFwdGVyOjphY2NlcHRzVHlwZSh0eXBlKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBBZGFwdGVyOjp2YWx1ZVRvSW5kZXgodGhpbmcpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdvcmtzZXQuYWRkKGluZGV4KSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBraWxsQ2FsbGJhY2soaW5kZXgsIHRoaW5nLCBLaWxsTW9kZTo6
RWFybHlVc2VLaWxsKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0p
OwogCiAgICAgICAgICAgICAvLyBBbmQgZmluYWxseSwgaGFuZGxlIHRoZSBsYXRlIHVzZSdzIG9m
IHRoZSBwcmV2aW91cyBpbnN0cnVjdGlvbi4KQEAgLTI2NiwxNyArMjk4LDMyIEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICBJbnN0JiBwcmV2SW5zdCA9IG1fYmxvY2stPmF0KGluc3RJbmRleCAt
IDEpOwogICAgICAgICAgICAgICAgIHByZXZJbnN0LmZvckVhY2g8dHlwZW5hbWUgQWRhcHRlcjo6
VGhpbmc+KAogICAgICAgICAgICAgICAgICAgICBbJl0gKHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5n
JiB0aGluZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSB0eXBlLCBBcmc6OldpZHRoKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0xhdGVVc2Uocm9sZSkgJiYgQWRhcHRl
cjo6YWNjZXB0c1R5cGUodHlwZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya3Nl
dC5hZGQoQWRhcHRlcjo6dmFsdWVUb0luZGV4KHRoaW5nKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoQXJnOjppc0xhdGVVc2Uocm9sZSkgJiYgQWRhcHRlcjo6YWNjZXB0c1R5cGUodHlw
ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IEFkYXB0
ZXI6OnZhbHVlVG9JbmRleCh0aGluZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHdvcmtzZXQuYWRkKGluZGV4KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2ls
bENhbGxiYWNrKGluZGV4LCB0aGluZywgS2lsbE1vZGU6OkxhdGVVc2VJblByZXZJbnN0S2lsbCk7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAKKyAgICAgICAgdm9pZCBleGVjdXRlKHVuc2lnbmVkIGlu
c3RJbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgZXhlY3V0ZSgKKyAgICAgICAgICAgICAg
ICBpbnN0SW5kZXgsCisgICAgICAgICAgICAgICAgW10gKHVuc2lnbmVkLCBjb25zdCB0eXBlbmFt
ZSBBZGFwdGVyOjpUaGluZyYsIEtpbGxNb2RlKSB7IH0pOworICAgICAgICB9CisKICAgICBwcml2
YXRlOgogICAgICAgICBBYnN0cmFjdExpdmVuZXNzJiBtX2xpdmVuZXNzOwogICAgICAgICBCYXNp
Y0Jsb2NrKiBtX2Jsb2NrOwogICAgIH07CiAKKyAgICBjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiBy
YXdMaXZlQXRIZWFkKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
bGl2ZUF0SGVhZFtibG9ja107CisgICAgfQorCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVW5kZXJs
eWluZ0l0ZXJhYmxlPgogICAgIGNsYXNzIEl0ZXJhYmxlIHsKICAgICBwdWJsaWM6CkBAIC0zMzAs
NiArMzc3LDExIEBAIHB1YmxpYzoKICAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJl
dHVybiBpdGVyYXRvcihtX2xpdmVuZXNzLCBtX2l0ZXJhYmxlLmJlZ2luKCkpOyB9CiAgICAgICAg
IGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKG1fbGl2ZW5lc3MsIG1faXRl
cmFibGUuZW5kKCkpOyB9CiAKKyAgICAgICAgYm9vbCBjb250YWlucyhjb25zdCB0eXBlbmFtZSBB
ZGFwdGVyOjpUaGluZyYgdGhpbmcpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBtX2xpdmVuZXNzLm1fd29ya3NldC5jb250YWlucyhBZGFwdGVyOjp2YWx1ZVRvSW5kZXgodGhp
bmcpKTsKKyAgICAgICAgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgQWJzdHJhY3RMaXZlbmVz
cyYgbV9saXZlbmVzczsKICAgICAgICAgY29uc3QgVW5kZXJseWluZ0l0ZXJhYmxlJiBtX2l0ZXJh
YmxlOwpAQCAtMzQ1LDYgKzM5Nyw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEl0ZXJhYmxl
PHR5cGVuYW1lIEFkYXB0ZXI6OkluZGV4U2V0PigqdGhpcywgbV9saXZlQXRUYWlsW2Jsb2NrXSk7
CiAgICAgfQogCisgICAgSW5kZXhTcGFyc2VTZXQ8VW5zYWZlVmVjdG9yT3ZlcmZsb3c+JiB3b3Jr
c2V0KCkgeyByZXR1cm4gbV93b3Jrc2V0OyB9CisKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNz
IExvY2FsQ2FsYzsKICAgICBmcmllbmQgc3RydWN0IExvY2FsQ2FsYzo6SXRlcmFibGU7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wdGltaXplQmxvY2tPcmRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcHRpbWl6ZUJs
b2NrT3JkZXIuY3BwCShyZXZpc2lvbiAxOTUwODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpck9wdGltaXplQmxvY2tPcmRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDEw
ICs3Myw4IEBAIHByaXZhdGU6CiAKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQogCi12b2lkIG9w
dGltaXplQmxvY2tPcmRlcihDb2RlJiBjb2RlKQorVmVjdG9yPEJhc2ljQmxvY2sqPiBibG9ja3NJ
bk9wdGltaXplZE9yZGVyKENvZGUmIGNvZGUpCiB7Ci0gICAgUGhhc2VTY29wZSBwaGFzZVNjb3Bl
KGNvZGUsICJvcHRpbWl6ZUJsb2NrT3JkZXIiKTsKLQogICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4g
YmxvY2tzSW5PcmRlcjsKIAogICAgIEJsb2NrV29ya2xpc3QgZmFzdFdvcmtsaXN0OwpAQCAtMTEz
LDYgKzExMSwxNSBAQCB2b2lkIG9wdGltaXplQmxvY2tPcmRlcihDb2RlJiBjb2RlKQogICAgIEFT
U0VSVChmYXN0V29ya2xpc3QuaXNFbXB0eSgpKTsKICAgICBBU1NFUlQoc2xvd1dvcmtsaXN0Lmlz
RW1wdHkoKSk7CiAKKyAgICByZXR1cm4gYmxvY2tzSW5PcmRlcjsKK30KKwordm9pZCBvcHRpbWl6
ZUJsb2NrT3JkZXIoQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29k
ZSwgIm9wdGltaXplQmxvY2tPcmRlciIpOworCisgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBibG9j
a3NJbk9yZGVyID0gYmxvY2tzSW5PcHRpbWl6ZWRPcmRlcihjb2RlKTsKKyAgICAKICAgICAvLyBQ
bGFjZSBibG9ja3MgaW50byBDb2RlJ3MgYmxvY2sgbGlzdCBhY2NvcmRpbmcgdG8gdGhlIG9yZGVy
aW5nIGluIGJsb2Nrc0luT3JkZXIuIFdlIGRvIHRoaXMgYnkgbGVha2luZwogICAgIC8vIGFsbCBv
ZiB0aGUgYmxvY2tzIGFuZCB0aGVuIHJlYWRvcHRpbmcgdGhlbS4KICAgICBmb3IgKGF1dG8mIGVu
dHJ5IDogY29kZS5ibG9ja0xpc3QoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyT3B0aW1pemVCbG9ja09yZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJPcHRpbWl6ZUJsb2NrT3JkZXIuaAkocmV2aXNpb24gMTk1MDgzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcHRpbWl6ZUJsb2NrT3JkZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsMTEgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7IG5hbWVzcGFjZQogCiBjbGFzcyBDb2RlOwogCisvLyBSZXR1cm5zIGEgbGlzdCBvZiBi
bG9ja3Mgc29ydGVkIGFjY29yZGluZyB0byB3aGF0IHdvdWxkIGJlIHRoZSBjdXJyZW50IG9wdGlt
YWwgb3JkZXIuIFRoaXMgc2hhcmVzCisvLyBzb21lIHByb3BlcnRpZXMgd2l0aCBhIHByZS1vcmRl
ciB0cmF2ZXJzYWwuIEluIHBhcnRpY3VsYXIsIGVhY2ggYmxvY2sgd2lsbCBhcHBlYXIgYWZ0ZXIg
YXQgbGVhc3QKKy8vIG9uZSBvZiBpdHMgcHJlZGVjZXNzb3JzLgorVmVjdG9yPEJhc2ljQmxvY2sq
PiBibG9ja3NJbk9wdGltaXplZE9yZGVyKENvZGUmKTsKKwogLy8gUmVvcmRlcnMgdGhlIGJhc2lj
IGJsb2NrcyB0byBrZWVwIGhvdCBibG9ja3MgYXQgdGhlIHRvcCwgYW5kIG1heGltaXplIHRoZSBs
aWtlbGlob29kIHRoYXQgYSBmcmVxdWVudGx5CiAvLyB0YWtlbiBlZGdlIGlzIGp1c3QgYSBmYWxs
LXRocm91Z2guCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU2NhdmVu
Z2VSZWdpc3RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyU2NhdmVuZ2VSZWdpc3RlcnMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJTY2F2ZW5nZVJlZ2lzdGVycy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwzNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyU2NhdmVuZ2VSZWdpc3Rl
cnMuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5j
bHVkZSAiQWlyRm9yd2FyZExpdmVuZXNzLmgiCisjaW5jbHVkZSAiQWlyTGl2ZW5lc3MuaCIKKyNp
bmNsdWRlICJBaXJPcHRpbWl6ZUJsb2NrT3JkZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCituYW1lc3BhY2UgeworCit0ZW1wbGF0ZTxBcmc6
OlR5cGUgdHlwZT4KK2NsYXNzIFNjYXZlbmdlUmVnaXN0ZXJzIHsKK3B1YmxpYzoKKyAgICBTY2Fu
dmVnZVJlZ2lzdGVycyhDb2RlJiBjb2RlKQorICAgICAgICA6IG1fY29kZShjb2RlKQorICAgICAg
ICAsIG1fbGl2ZW5lc3MoY29kZSkKKyAgICAgICAgLCBtX3RtcFdpZHRoKGNvZGUpCisgICAgICAg
ICwgbV9pbnNlcnRpb25TZXQoY29kZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBydW4oKQor
ICAgIHsKKyAgICAgICAgY29tcHV0ZURlYXRocygpOworICAgICAgICBpbml0aWFsaXplQmxvY2tS
ZWdTdGF0ZXMoKTsKKworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogYmxvY2tzSW5P
cHRpbWl6ZWRPcmRlcihtX2NvZGUpKQorICAgICAgICAgICAgcHJvY2Vzc0Jsb2NrKGJsb2NrKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBjb21wdXRlRGVhdGhzKCkKKyAgICB7CisgICAg
ICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgICAgICBMaXZlbmVz
czo6TG9jYWxDYWxjIGxvY2FsQ2FsYyhsaXZlbmVzcywgYmxvY2spOworICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTspIHsKKyAg
ICAgICAgICAgICAgICBsb2NhbENhbGMuZXhlY3V0ZSgKKyAgICAgICAgICAgICAgICAgICAgaW5z
dEluZGV4LAorICAgICAgICAgICAgICAgICAgICBbJl0gKHVuc2lnbmVkLCBUbXAgdG1wLCBLaWxs
TW9kZSBraWxsTW9kZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChraWxsTW9k
ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBLaWxsTW9kZTo6RE9BRWFybHlEZWZJ
bk5leHRJbnN0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGVhdGhzLmF0KGJsb2Nr
LCBpbnN0SW5kZXggKyAxKS5hcHBlbmQoRGVhdGgodG1wLCBFYXJseURlYXRoKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNl
IEtpbGxNb2RlOjpET0FMYXRlRGVmOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGVh
dGhzLmF0KGJsb2NrLCBpbnN0SW5kZXgpLmFwcGVuZChEZWF0aCh0bXAsIExhdGVEZWF0aCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSBLaWxsTW9kZTo6RWFybHlVc2VLaWxsOgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZGVhdGhzLmF0KGJsb2NrLCBpbnN0SW5kZXgpLmFwcGVuZChEZWF0aCh0bXAsIEVhcmx5
RGVhdGgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgS2lsbE1vZGU6OkxhdGVVc2VJblByZXZJbnN0S2lsbDoKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2RlYXRocy5hdChibG9jaywgaW5zdEluZGV4IC0gMSku
YXBwZW5kKERlYXRoKHRtcCwgTGF0ZURlYXRoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgaW5p
dGlhbGl6ZUJsb2NrUmVnU3RhdGVzKCkKKyAgICB7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayog
YmxvY2sgOiBtX2NvZGUpIHsKKyAgICAgICAgICAgIFN0YXRlJiBzdGF0ZSA9IG1fYXRIZWFkW2Js
b2NrXTsKKyAgICAgICAgICAgIGZvciAoVG1wIHRtcCA6IG1fbGl2ZW5lc3MubGl2ZUF0SGVhZChi
bG9jaykpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXRtcC5pc1JlZygpKQorICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIFRtcEluZm8gdG1wSW5mbzsKKyAg
ICAgICAgICAgICAgICB0bXBJbmZvLnJlZyA9IHRtcC5yZWcoKTsKKyAgICAgICAgICAgICAgICBz
dGF0ZS5tYXBwaW5nLmFkZCh0bXAsIHRtcEluZm8pOworICAgICAgICAgICAgICAgIHN0YXRlLnJl
dmVyc2VNYXBwaW5nLmFkZCh0bXAucmVnKCksIHRtcCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICB2b2lkIHByb2Nlc3NCbG9jayhCYXNpY0Jsb2NrKiBibG9jaykKKyAg
ICB7CisgICAgICAgIFN0YXRlIHN0YXRlID0gbV9hdEhlYWRbYmxvY2tdOworICAgICAgICBSRUxF
QVNFX0FTU0VSVChzdGF0ZS5pc1NldHRsZWQpOworCisgICAgICAgIEZvcndhcmRMaXZlbmVzczxU
bXBMaXZlbmVzczx0eXBlPj46OkxvY2FsQ2FsYyBsb2NhbENhbGMobV9mb3J3YXJkTGl2ZW5lc3Ms
IGJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gMDsg
aW5zdEluZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbnN0SW5kZXgpIHsKKyAgICAgICAgICAgIElu
c3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgLy8gRm9yIGVhY2ggVG1wIHVzZSwgd2UgY2FuIGhhdmUgYW55IG9mIHRoZSBmb2xsb3dpbmcg
c2NlbmFyaW9zOgorICAgICAgICAgICAgLy8gCisgICAgICAgICAgICAvLyAxKSBJdCBhbHJlYWR5
IGhhcyBhIHJlZ2lzdGVyLgorICAgICAgICAgICAgLy8gMikgSWYgaXQgZG9lc24ndCBoYXZlIGEg
cmVnaXN0ZXI6CisgICAgICAgICAgICAvLyAgICAgYSkgSXQncyBhIHVzZSB0aGF0IG5lZWRzIGEg
cmVnaXN0ZXIuCisgICAgICAgICAgICAvLyAgICAgYikgSXQncyBhIHdhcm0gdXNlIHRoYXQgZG9l
cyBub3Qga2lsbC4KKyAgICAgICAgICAgIC8vICAgICBjKSBJdCdzIGEgd2FybSB1c2UgdGhhdCBr
aWxscy4KKyAgICAgICAgICAgIC8vICAgICBkKSBJdCdzIGEgY29sZCB1c2UuCisgICAgICAgICAg
ICAvLworICAgICAgICAgICAgLy8gRm9yICgyYSkgYW5kICgyYiksIHdlIHdhbnQgdG8gZmluZCBh
IHJlZ2lzdGVyIHRoYXQgaXNuJ3QgYWxyZWFkeSBsb2NrZWQgZG93biBieSB0aGUKKyAgICAgICAg
ICAgIC8vIGluc3RydWN0aW9uLiBXZSBoYXZlIHRvIHJlc3BlY3QgdGhlIGludGVyZmVyZW5jZXMg
YmV0d2VlbiBlYXJseSB1c2VzLCBsYXRlIHVzZXMsIGVhcmx5CisgICAgICAgICAgICAvLyBkZWZz
LCBhbmQgZWFybHkgY2xvYmJlcnMuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gV2Ug
bWF5IGFsc28gaGF2ZSBhIHJlZ2lzdGVyIHVzZS4gVGhvc2UgdGFrZSBwcmlvcml0eS4gV2UgZmly
c3QgbWFrZSBzdXJlIHRoYXQgd2UgZG9uJ3QKKyAgICAgICAgICAgIC8vIGNoYW5nZSB3aGljaCBy
ZWdpc3RlciBhbiBpbnN0cnVjdGlvbiB1c2VzIGlmIGl0IGFscmVhZHkgdXNlcyBhIHJlZ2lzdGVy
LgorCisgICAgICAgICAgICAvLyBGb3IgZWFjaCBUbXAgZGVmLCB3ZSBjYW4gaGF2ZSBhbnkgb2Yg
dGhlIGZvbGxvd2luZyBzY2VuYXJpb3M6CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8g
MSkgSXQgYWxyZWFkeSBoYXMgYSByZWdpc3Rlci4KKyAgICAgICAgICAgIC8vIDIpIElmIGl0IGRv
ZXNuJ3QgaGF2ZSBhIHJlZ2lzdGVyOgorICAgICAgICAgICAgLy8gICAgIGEpIEl0J3MgYSBkZWYg
dGhhdCBuZWVkcyBhIHJlZ2lzdGVyLgorICAgICAgICAgICAgLy8gICAgIGIpIEl0J3MgYSBkZWYg
dGhhdCBkb2VzIG5vdCBuZWVkIGEgcmVnaXN0ZXIuCisgICAgICAgICAgICAvLworICAgICAgICAg
ICAgLy8gSWYgd2UgaGF2ZSAoMmIpLCB3ZSB0cnkgdG8gZ2l2ZSBpdCBhIHJlZ2lzdGVyIGJ1dCB3
ZSBkb24ndCBoYXZlIHRvLiBXZSBoYXZlIHRvIHJlc3BlY3QKKyAgICAgICAgICAgIC8vIHRoZSBp
bnRlcmZlcmVuY2VzIGJldHdlZW4gbGF0ZSB1c2VzLCBsYXRlIGRlZnMsIGFuZCBsYXRlIGNsb2Ji
ZXJzLgorCisgICAgICAgICAgICAvLyBXZSBjYW4gaGF2ZSBhIHVzZSBvZiBhIGNvbnN0YW50IHRt
cCBmcm9tIGEgQXJnOjphZGRyIG9yIE1vdmUuIFdoZW4gdGhpcyBoYXBwZW5zIHdlCisgICAgICAg
ICAgICAvLyB3YW50IHRvIGNoZWNrIGlmIG90aGVyIHJlZ2lzdGVycyBoYXZlIGEgbmVhcmJ5IGNv
bnN0YW50LCBhbmQgdHJ5IHRvIHVzZSB0aGF0IG9uZQorICAgICAgICAgICAgLy8gaW5zdGVhZC4K
KworICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBleGVjdXRlIHRoZSBsb2NhbCBjYWxjdWxhdG9y
IGJlZm9yZSBtYWtpbmcgY2hhbmdlcy4KKyAgICAgICAgICAgIGxvY2FsQ2FsYy5leGVjdXRlKGlu
c3RJbmRleCk7CisKKyAgICAgICAgICAgIC8vIFRoZSBsYXRlIGRlZnMgYW5kIHVzZXMgb2YgdGhl
IHByZXZpb3VzIGluc3RydWN0aW9uIGhhdmUgbm8gaW1wYWN0IG9uIG91ciBhYmlsaXR5IHRvCisg
ICAgICAgICAgICAvLyB1c2UgcmVnaXN0ZXJzIGZvciB0aGlzIGluc3RydWN0aW9uLiBUaGUgZWFy
bHkgZGVmcyBhbmQgZWFybHkgdXNlcyBvZiB0aGUgbmV4dAorICAgICAgICAgICAgLy8gaW5zdHJ1
Y3Rpb24gaGF2ZSBubyBpbXBhY3Qgb24gb3VyIGFiaWxpeSB0byBkZWYgcmVnaXN0ZXJzIGZvciB0
aGlzIGluc3RydWN0aW9uLgorCisgICAgICAgICAgICAvLyBNb3ZlIGluc3RydWN0aW9ucyBnZXQg
c3BlY2lhbCB0cmVhdG1lbnQgYmVjYXVzZSB0aGV5IGluaXRpYWxpemUgYSByZWdpc3RlciB0byBh
CisgICAgICAgICAgICAvLyBjb25zdGFudCBhbmQgc28gZG9uJ3QgcmVxdWlyZSBhbnkgcmVhbCBz
cGlsbGluZy4KKyAgICAgICAgICAgIGlmIChpbnN0Lm9wY29kZSA9PSBNb3ZlKSB7CisgICAgICAg
ICAgICAgICAgLy8gRklYTUUKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgLy8gT3VyIHN0YXRlIG1hcHBpbmcgdGVsbHMgdXMgd2hhdCBpcyBs
aXZlIGF0IGFueSBnaXZlbiBtb21lbnQuIFdlIHVzZSBhIHNlcGFyYXRlCisgICAgICAgICAgICAv
LyBsaXZlbmVzcyBwYXNzIHRvIGNvbGxlY3QgdGhlIGtpbGwgbGlzdHMgZm9yIGFsbCBpbnN0cnVj
dGlvbnMuIFRoZSBraWxsIGxpc3RzIHRlbGwgdXMKKyAgICAgICAgICAgIC8vIGFib3V0IHRoZSB3
YXlzIHRoYXQgdGhpbmdzIGRpZSBhdCBhbiBJbnN0LiBUaGVyZSBhcmUgZm91ciB3YXlzOgorICAg
ICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIC0gQW4gZWFybHkgZGVmIGNvdWxkIGRpZSBhYm92
ZSBhbiBJbnN0LgorICAgICAgICAgICAgLy8gLSBBbiBlYXJseSB1c2UgY291bGQga2lsbCBhYm92
ZSBhbiBJbnN0LgorICAgICAgICAgICAgLy8gLSBBIGxhdGUgZGVmIGNvdWxkIGRpZSBiZWxvdyBh
biBJbnN0LgorICAgICAgICAgICAgLy8gLSBBIGxhdGUgdXNlIGNvdWxkIGtpbGwgYmVsb3cgYW4g
SW5zdC4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBPbmNlIHdlIGFyZSBhcm1lZCB3
aXRoIG91ciBzdGF0ZSBtYXBwaW5nIGFuZCB0aGUga2lsbCBsaXN0cywgd2UgY2FuIHByb2Nlc3Mg
dGhlIEluc3QKKyAgICAgICAgICAgIC8vIGluIHRoZSBvcmRlciBvZiBpdHMgZXhlY3V0aW9uIGFu
ZCB1cGRhdGUgdGhlIHN0YXRlIG1hcHBpbmcgYmFzZWQgb24gZGVmcyBhbmQga2lsbAorICAgICAg
ICAgICAgLy8gbGlzdHMuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gV2Ugc3RhcnQg
YWJvdmUgdGhlIEluc3Qgd2l0aCBhIHN0YXRlIHRoYXQgdGVsbHMgdXMgd2hhdCBpcyBsaXZlIGJl
Zm9yZSBpdC4gVGhpcworICAgICAgICAgICAgLy8gaW5jbHVkZXMgdGhpbmdzIHRoYXQgd2lsbCBk
aWUgYXQgdGhlIHRvcC4gV2UgY2FuIGhhbmRsZSBlYXJseSB1c2VzIGFuZCBkZWZzIGJ5IGdpdmlu
ZworICAgICAgICAgICAgLy8gdGhlbSByZWdpc3RlcnMgdGhhdCBhcmUgbm90IGxpdmUuIFdlIGtu
b3cgd2hpY2ggcmVnaXN0ZXJzIGJlY29tZSBsaXZlIGJlY2F1c2Ugb3VyCisgICAgICAgICAgICAv
LyBtYXBwaW5nIHRlbGxzIHVzIHRoaXMuIFRoZW4gd2UgY2FuIGFwcGx5IHRoZSBlYXJseSBkZWF0
aHMuIFRoZW4gd2UgcHJvY2VzcyBsYXRlIHVzZXMKKyAgICAgICAgICAgIC8vIGFuZCBkZWZzLCBh
bmQgdGhlbiBhcHBseSB0aGUgbGF0ZSBkZWF0aHMuCisgICAgICAgICAgICAvLworICAgICAgICAg
ICAgLy8gVGhpcyBhbGdvcml0aG0gbXVzdCBwcm9jZWVkIGluIHRoZSBvcmRlciBvZiB0aGUgSW5z
dCdzIGV4ZWN1dGlvbi4gV2UgY2FuIHVzZSB0aGUKKyAgICAgICAgICAgIC8vIG5vdGlvbiBvZiBs
b2NraW5nIGF0IGVhY2ggc3RhZ2UgLSBlYXJseSBhbmQgdGhlbiBsYXRlIC0gdG8gaW5kaWNhdGUg
d2hpY2ggcmVnaXN0ZXJzCisgICAgICAgICAgICAvLyBoYXZlIGFscmVhZHkgYmVlbiBwdXJwb3Nl
ZC4gQWxsIGVhcmx5IHVzZXMgd2lsbCBob2xkIHRoZSBsb2NrIHdoaWxlIHdlIGFyZSBwcm9jZXNz
aW5nCisgICAgICAgICAgICAvLyB0aGUgZWFybHkgcGFydCBvZiB0aGUgaW5zdHJ1Y3Rpb24sIGFu
ZCB0aGVuIHJlbGVhc2UgaXQgYmVmb3JlIHdlIHN0YXJ0IHByb2Nlc3NpbmcgdGhlCisgICAgICAg
ICAgICAvLyBsYXRlIHN0dWZmLiBJbiBiZXR3ZWVuIGVhcmx5IGFuZCBsYXRlLCBhZnRlciB3ZSBo
YXZlIHVubG9ja2VkIHRoaW5ncyB1c2VkIGVhcmx5LCB3ZQorICAgICAgICAgICAgLy8gY2FuIHBl
cmZvcm0gZWFybHkgZGVhdGhzLiBBbGwgZWFybHkgZGVmcyB3aWxsIGhvbGQgdGhlIGxvY2sgZWFy
bHkgYW5kIHRoZW4gcmVsZWFzZSBpdAorICAgICAgICAgICAgLy8gYWZ0ZXIgd2UgcHJvY2VzcyBs
YXRlIHRoaW5ncy4gQXMgYSBzcGVjaWFsIGNhc2UsIFVzZURlZiB3aWxsIGFsc28gcmVsZWFzZSB0
aGUgbG9jaworICAgICAgICAgICAgLy8gbGF0ZS4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAg
ICAvLyBUaGluZ3MgZ2V0IHdlaXJkIHdpdGggVXNlRGVmLiBMdWNreSBmb3IgdXMsIEluc3RzIHdp
bGwgaGF2ZSBhIHNtYWxsIG51bWJlciBvZiBVc2VEZWZzLAorICAgICAgICAgICAgLy8gc28gdGhl
IGFsZ29yaXRobSBkb2Vzbid0IGhhdmUgdG8gYmUgZWZmaWNpZW50IGFuZCB3ZSBjYW4gYmUgc3Vy
ZSB0aGF0IGlmIHdlIGhhbmRsZQorICAgICAgICAgICAgLy8gVXNlRGVmcyBlYXJseSwgdGhlbiB0
aGUgZ3JlZWR5IGFwcHJvYWNoIHNob3VsZCBqdXN0IHdvcmsuIFRoZSBsb2NraW5nIHN0cmF0ZWd5
IGVuc3VyZXMKKyAgICAgICAgICAgIC8vIHRoYXQgd2Ugd29uJ3QgdHJ5IHRvIHJldXNlIHRoZSBy
ZWdpc3RlciB3ZSBhbHJlYWR5IHBpY2tlZC4gVGhlIG9ubHkgYWRkaXRpb25hbCBsb2dpYworICAg
ICAgICAgICAgLy8gZm9yIFVzZURlZiBpcyB0aGF0IHdoZW4gd2UgcGljayBhIHJlZ2lzdGVyIGZv
ciBpdCwgd2hpY2ggaGFwcGVucyBlYXJseSwgd2UgbG9vayBhaGVhZAorICAgICAgICAgICAgLy8g
dG8gbWFrZSBzdXJlIHRoYXQgd2UgZGlkbid0IGFscmVhZHkgbG9jayB0aGUgcmVnaXN0ZXIgbGF0
ZS4gVGhlIG9ubHkgcmVnaXN0ZXJzIHRoYXQgd2UKKyAgICAgICAgICAgIC8vIGNvdWxkIGhhdmUg
YWxyZWFkeSBsb2NrZWQgbGF0ZSBhcmUgdGhlIG9uZXMgdGhhdCBhcmUgY2xvYmJlcmVkIGxhdGUg
b3IgZGVmaW5lZCBsYXRlLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIE9uZSBvZiB0
aGUgYmVhdXRpZnVsIHRoaW5ncyBhYm91dCB0aGlzIGFwcHJvYWNoIGlzIHRoYXQgd2UgY2FuIHBy
b2Nlc3MgdGhlIEluc3QKKyAgICAgICAgICAgIC8vIGluLXBsYWNlLiBXZSB3b24ndCBlZGl0IHRo
ZSB1c2VzIHVudGlsIHdlIGhhdmUgYWNjb3VudGVkIGZvciB0aGVtLiBXZSB3b24ndCBlZGl0IHRo
ZQorICAgICAgICAgICAgLy8gZGVmcyB1bnRpbCB3ZSBoYXZlIGFjY291bnRlZCBmb3IgdGhlbS4g
U28sIHdlIGNhbiBjb21wdXRlIGZvcndhcmQgbGl2ZW5lc3Mgd2hpbGUgYWxzbworICAgICAgICAg
ICAgLy8gZWRpdGluZyB0aGUgaW5zdHJ1Y3Rpb24uCisKKyAgICAgICAgICAgIC8vIFdlIGNhbid0
IHRha2UgdGhlIGZhc3QgcGF0aCBmb3IgUGF0Y2gsIHNpbmNlIHRoYXQgY2xvYmJlcnMgcmVnaXN0
ZXJzLgorICAgICAgICAgICAgaWYgKGluc3Qub3Bjb2RlICE9IFBhdGNoKSB7CisgICAgICAgICAg
ICAgICAgLy8gVGhlIGNvbW1vbiBjYXNlIGlzIHRoYXQ6CisgICAgICAgICAgICAgICAgLy8gLSBB
bGwgdXNlcyByZWZlciB0byBhIHJlZ2lzdGVyIHRoYXQgaXMgYXQgaG9tZSBvciByZWZlciB0byBh
IHRlbXBvcmFyeSB0aGF0CisgICAgICAgICAgICAgICAgLy8gICBhbHJlYWR5IGhhcyBhIHJlZ2lz
dGVyLgorICAgICAgICAgICAgICAgIC8vIC0gQWxsIGRlZnMgcmVmZXIgdG8gYSByZWdpc3RlciB0
aGF0IGlzIHVudXNlZCBvciB0byBhIHRlbXBvcmFyeSB0aGF0IGNhbiBiZQorICAgICAgICAgICAg
ICAgIC8vICAgdHJpdmlhbGx5IGFsbG9jYXRlZC4gV2UgY2FuIHRyaXZpYWxseSBhbGxvY2F0ZSBp
dCB0byBhIHJlZ2lzdGVyIGlmIHRoZXJlIGlzIGEKKyAgICAgICAgICAgICAgICAvLyAgIHJlZ2lz
dGVyIHRoYXQgaXMgZGVhZCBhZnRlciB0aGUgaW5zdHJ1Y3Rpb24uIFdlIGJhaWwgb24gZmFuY3kg
dGhpbmdzIGxpa2UKKyAgICAgICAgICAgICAgICAvLyAgIEVhcmx5RGVmIGFuZCBTY3JhdGNoLgor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGJvb2wgb2sgPSB0cnVlOworICAgICAg
ICAgICAgICAgIEluc3QgaW5zdENvcHkgPSBpbnN0OworCisgICAgICAgICAgICAgICAgLy8gRmly
c3QgaGFuZGxlIGFsbCBvZiB0aGUgZWFybHkgdXNlcy4KKyAgICAgICAgICAgICAgICBpbnN0LmZv
ckVhY2hUbXAoCisgICAgICAgICAgICAgICAgICAgIFsmXSAoVG1wJiB0bXAsIEFyZzo6Um9sZSBy
b2xlLCBBcmc6OlR5cGUgdHlwZSwgQXJnOjpXaWR0aCB3aWR0aCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcCgKKyAgICAgICAgICAgICAgICAgICAgWyZdIChU
bXAmIHRtcCwgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSB0eXBlLCBBcmc6OldpZHRoIHdpZHRo
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBKdXN0IGNoZWNrIGlmIHRoZSByZWdpc3RlciBpcyBhdCBo
b21lIG9yIGNhbiBiZSB0cml2aWFsbHkgbWFkZSB0byBiZQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGF0IGhvbWUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXV0byBpdGVyID0gc3RhdGUucmV2ZXJzZU1hcHBpbmcuZmlu
ZCh0bXAucmVnKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzVXNl
KHJvbGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChpdGVyICE9
IHN0YXRlLnJldmVyc2VNYXBwaW5nLmVuZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGl0ZXItPnZhbHVlICE9IHRtcCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChB
cmc6OmlzRGVmKHJvbGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChp
dGVyICE9IHN0YXRlLnJldmVyc2VNYXBwaW5nLmVuZCgpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoaXRlci0+dmFsdWUgIT0gdG1wKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHJlZ2lzdGVyIGlzIGF2
YWlsYWJsZS4gVXNlIGl0IGFuZCB0ZWxsIGV2ZXJ5b25lIHRoYXQgd2UKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgZG9uZSBzby4KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFRtcEluZm8gaW5mbzsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGluZm8ucmVnID0gdG1wLnJlZygpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdGUubWFwcGluZy5hZGQodG1wLCBpbmZvKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnJldmVyc2VNYXBwaW5nLmFkZCh0bXAucmVn
KCksIHRtcCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gYmUgY2FyZWZ1bCBhYm91dCBVc2VE
ZWYgaGVyZS4gVGhhdCBiYXNpY2FsbHkgbWVhbnMgdGhhdCB3ZSBoYXZlCisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyB0byBwaWNrIG9uZSByZWdpc3RlciB0aGF0IGRvZXNuJ3QgaW50ZXJmZXJl
IHdpdGggZWl0aGVyIHVzZXMgb3IgZGVmcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRo
YXQncyBhbm5veWluZy4KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
ICAgICBzd2l0Y2ggKHJvbGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpV
c2U6CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6Q29sZFVzZToKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpMYXRlVXNlOgorICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSBBcmc6OkxhdGVDb2xkVXNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IEp1c3QgY2hlY2sgaWYgdGhlIHRlbXBvcmFyeSBpcyBhbHJlYWR5IGFsbG9jYXRlZCB0byBhIHJl
Z2lzdGVyLiBUaGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW1wbGllcyB0aGF0
IAorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9KTsKKwor
ICAgICAgICAgICAgICAgIGlmIChvaykgeworICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlz
IHRoZSBjYXNlIHdlIGhvcGUgdG8gdGFrZS4gV2Ugd2VyZSBhYmxlIHRvIGZpeCB0aGUgaW5zdHJ1
Y3Rpb24gd2l0aG91dAorICAgICAgICAgICAgICAgICAgICAvLyBpbnNlcnRpbmcgYW55IHNodWZm
bGVzLgorICAgICAgICAgICAgICAgICAgICBtX2ZvcndhcmRMaXZlbmVzcy5mb3JBbGxEZWF0aHMo
CisgICAgICAgICAgICAgICAgICAgICAgICBibG9jaywgaW5zdEluZGV4LAorICAgICAgICAgICAg
ICAgICAgICAgICAgWyZdIChUbXAgdG1wKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VG1wSW5mbyB0bXBJbmZvID0gc3RhdGUubWFwcGluZy50YWtlKHRtcCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHRtcEluZm8ucmVnKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0ZS5yZXZlcnNlTWFwcGluZy5yZW1vdmUodG1wSW5mby5yZWcpOworICAgICAg
ICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBSZXZl
cnQgdGhlIGluc3RydWN0aW9uIGFuZCB0cnkgdGhlIHNsb3cgcGF0aC4KKyAgICAgICAgICAgICAg
ICBpbnN0ID0gaW5zdENvcHk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIC8vIEZJWE1FOiBOb3cgZG8gdGhlIHNsb3cgdGhpbmcuIFRoaXMgbWVhbnMgcG9zc2libHkg
YnVpbGRpbmcgc29tZSBTaHVmZmxlcyBhbmQgZ2VuZXJhbGx5CisgICAgICAgICAgICAvLyBkb2lu
ZyBpbnRlbGxpZ2VudCB0aGluZ3MuCisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgU3RhY2tT
bG90KiBzcGlsbFNsb3QoVG1wIHRtcCkKKyAgICB7CisgICAgICAgIFN0YWNrU2xvdComIHJlc3Vs
dCA9IG1fc3BpbGxTbG90cy5hZGQodG1wLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CisgICAg
ICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgICAgICAvLyBGSVhNRTogd2lkdGgodG1wKSBtaWdo
dCBiZSB3cm9uZy4gWW91IGNvdWxkIGhhdmUgNjQtYml0IHN0b3JlcyB0byBhIHRlbXBvcmFyeSB0
aGF0CisgICAgICAgICAgICAvLyBvbmx5IGhhcyAzMi1iaXQgdXNlcy4gVGhlbiB3aWR0aCh0bXAp
IHdpbGwgYmUgV2lkdGgzMi4gQnV0IHRoYXQgbWVhbnMgdGhhdCB3ZSBjYW5ub3QKKyAgICAgICAg
ICAgIC8vIHVzZSB0aGUgc3BpbGwgc2xvdCBkaXJlY3RseSB3aGVuIHNwaWxsaW5nIGRlZidzLiBU
aGF0IG1pZ2h0IGJlIE9LLCB0aG91Z2gsIHNpbmNlIGl0CisgICAgICAgICAgICAvLyBhcHBlYXJz
IHRoYXQgd2UgcHJvYmFibHkgd29uJ3QgYmUgZG9pbmcgdGhhdC4KKyAgICAgICAgICAgIHJlc3Vs
dCA9IG1fY29kZS5hZGRTdGFja1Nsb3QoCisgICAgICAgICAgICAgICAgbV90bXBXaWR0aC53aWR0
aCh0bXApIDw9IFdpZHRoMzIgPyA0IDogOCwKKyAgICAgICAgICAgICAgICBTdGFja1Nsb3RLaW5k
OjpBbm9ueW1vdXMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
ICAgIAorICAgIHN0cnVjdCBUbXBJbmZvIHsKKyAgICAgICAgVG1wSW5mbygpCisgICAgICAgIHsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZXhwbGljaXQgVG1wSW5mbyhSZWcgcmVnKQor
ICAgICAgICAgICAgOiByZWcocmVnKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGludDY0X3QgY29uc3RhbnQgeyAwIH07CisgICAgICAgIFJlZyByZWc7CisgICAgICAg
IGJvb2wgaXNTcGlsbGVkIHsgZmFsc2UgfTsKKyAgICAgICAgYm9vbCBoYXNDb25zdGFudCB7IGZh
bHNlIH07CisgICAgICAgIGJvb2wgaXNMb2NrZWQgeyBmYWxzZSB9OworICAgIH07CisKKyAgICBz
dHJ1Y3QgU3RhdGUgeworICAgICAgICBIYXNoTWFwPFRtcCwgVG1wSW5mbz4gbWFwcGluZzsgLy8g
SWYgdGhlIG9yaWdpbmFsIHByb2dyYW0gYXNrcyBmb3IgdGhpcyB0bXAsIHdoZXJlIGlzIGl0Pwor
ICAgICAgICBIYXNoTWFwPFJlZywgVG1wPiByZXZlcnNlTWFwcGluZzsgLy8gV2hhdCB0bXAgZG9l
cyB0aGlzIHJlZ2lzdGVyIGhvbGQgcmlnaHQgbm93PworICAgICAgICBib29sIGlzU2V0dGxlZCB7
IGZhbHNlIH07CisgICAgfTsKKworICAgIGVudW0gRGVhdGhNb2RlIHsKKyAgICAgICAgRWFybHlE
ZWF0aCwKKyAgICAgICAgTGF0ZURlYXRoCisgICAgfTsKKworICAgIHN0cnVjdCBEZWF0aCB7Cisg
ICAgICAgIERlYXRoKCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgRGVhdGgoVG1w
IHRtcCwgRGVhdGhNb2RlIGRlYXRoTW9kZSkKKyAgICAgICAgICAgIDogdG1wKHRtcCkKKyAgICAg
ICAgICAgICwgZGVhdGhNb2RlKGRlYXRoTW9kZSkKKyAgICAgICAgeworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBUbXAgdG1wOworICAgICAgICBEZWF0aE1vZGUgZGVhdGhNb2RlIHsgRWFy
bHlEZWF0aCB9OworICAgIH07CisgICAgCisgICAgQ29kZSYgbV9jb2RlOworICAgIFRtcExpdmVu
ZXNzPHR5cGU+IG1fbGl2ZW5lc3M7CisgICAgSW5zdE1hcDxWZWN0b3I8RGVhdGg+PiBtX2RlYXRo
czsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBTdGF0ZT4gbV9hdEhlYWQ7CisgICAgU3RhdGUg
bV9zdGF0ZTsKKyAgICBUbXBXaWR0aCBtX3RtcFdpZHRoOworICAgIEhhc2hNYXA8VG1wLCBTdGFj
a1Nsb3QqPiBtX3NwaWxsU2xvdHM7CisgICAgSW5zZXJ0aW9uU2V0IG1faW5zZXJ0aW9uU2V0Owor
fTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgc2NhdmVuZ2VSZWdpc3RlcnMo
Q29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgInNjYXZlbmdl
UmVnaXN0ZXJzIik7CisKKyAgICBicmVha0NyaXRpY2FsRWRnZXMoY29kZSk7CisKKyAgICB7Cisg
ICAgICAgIFNjYXZlbmdlUmVnaXN0ZXJzPEFyZzo6RlA+IHNjYXZlbmdlUmVnaXN0ZXJzKGNvZGUp
OworICAgICAgICBzY2F2ZW5nZVJlZ2lzdGVycy5ydW4oKTsKKyAgICB9CisgICAgeworICAgICAg
ICBTY2F2ZW5nZVJlZ2lzdGVyczxBcmc6OkdQPiBzY2F2ZW5nZVJlZ2lzdGVycyhjb2RlKTsKKyAg
ICAgICAgc2NhdmVuZ2VSZWdpc3RlcnMucnVuKCk7CisgICAgfQorfQorCit9IH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNjYXZlbmdlUmVnaXN0ZXJzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTY2F2ZW5nZVJlZ2lzdGVy
cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTY2F2
ZW5nZVJlZ2lzdGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEFpclNjYXZlbmdl
UmVnaXN0ZXJzX2gKKyNkZWZpbmUgQWlyU2NhdmVuZ2VSZWdpc3RlcnNfaAorCisjaWYgRU5BQkxF
KEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIg
eworCitjbGFzcyBDb2RlOworCisvLyBUaGlzIGFsbG9jYXRlcyB0ZW1wb3JhcmllcyB0byByZWdp
c3RlcnMgb3Igc3RhY2sgbG9jYXRpb25zIGJhc2VkIG9uIGZvcndhcmQgZmxvdy4gSXQgd2lsbCBo
YXBwaWx5CisvLyBjaGFuZ2UgdGhlIGxvY2F0aW9uIG9mIGEgdGVtcG9yYXJ5IGluIGNhc2UgdGhl
IHJlZ2lzdGVyIGl0IGhhZCBwaWNrZWQgYmVjb21lcyB1bmF2YWlsYWJsZSBvciBpbgorLy8gY2Fz
ZSB3ZSBuZWVkIHRoZSB2YWx1ZSBhbmQgaXQncyBjdXJyZW50bHkgb24gdGhlIHN0YWNrLiBJdCBh
bHNvIHBlcmZvcm1zIG1hdGVyaWFsaXphdGlvbiBvZgorLy8gY29uc3RhbnRzOiBpZiBhIHRlbXBv
cmFyeSdzIHZhbHVlIGlzIGFsd2F5cyBhIGNvbnN0YW50IHRoZW4gaW5zdGVhZCBvZiBzcGlsbGlu
ZyB3ZSB3aWxsIHNpbXBseQorLy8gcmVtYXRlcmlhbGl6ZS4KKy8vCisvLyBUaGlzIHBoYXNlIGlz
IG1lYW50IHRvIHJ1biBhZnRlciB0aGUgcHJpbWFyeSByZWdpc3RlciBhbGxvY2F0b3IuIFRoZSBw
cmltYXJ5IHJlZ2lzdGVyIGFsbG9jYXRvcgorLy8gaXMgYmVzdCBvZmYgaGFuZGxpbmcgc3BpbGxz
IGJ5IHNpbXBseSBsZWF2aW5nIHNwaWxsZWQgVG1wcyBhbG9uZS4gVGhpcyBwaGFzZSB3aWxsIGVt
aXQgcHJvcGVyCisvLyBzcGlsbCBjb2RlLCBhbmQgaXQgd2lsbCBkbyBpdCBtb3JlIGVmZmljaWVu
dGx5IHRoYW4gY2xhc3NpY2FsIHNwaWxsaW5nIGFsZ29yaXRobXMuCit2b2lkIHNjYXZlbmdlUmVn
aXN0ZXJzKENvZGUmKTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpclNjYXZlbmdlUmVnaXN0ZXJzX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxF
dmVyeXRoaW5nLmNwcAkocmV2aXNpb24gMTk1MDgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsNyAr
MTMwLDYgQEAgdm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYgY29kZSkKICAgICAgICAgICAgICAg
ICAgICAgc3dpdGNoIChyb2xlKSB7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpVc2U6
CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpDb2xkVXNlOgotICAgICAgICAgICAgICAg
ICAgICBjYXNlIEFyZzo6RWFybHlEZWY6CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFJl
ZyByZWcgOiByZWdzSW5Qcmlvcml0eU9yZGVyKHR5cGUpKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFzZXRCZWZvcmUuZ2V0KHJlZykpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2V0QmVmb3JlLnNldChyZWcpOwpAQCAtMTU0LDYgKzE1Myw3IEBAIHZvaWQg
c3BpbGxFdmVyeXRoaW5nKENvZGUmIGNvZGUpCiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJn
OjpMYXRlVXNlOgogICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6TGF0ZUNvbGRVc2U6CiAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpTY3JhdGNoOgorICAgICAgICAgICAgICAgICAg
ICBjYXNlIEFyZzo6RWFybHlEZWY6CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFJlZyBy
ZWcgOiByZWdzSW5Qcmlvcml0eU9yZGVyKHR5cGUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFzZXRCZWZvcmUuZ2V0KHJlZykgJiYgIXNldEFmdGVyLmdldChyZWcpKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFmdGVyLnNldChyZWcpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJWYWxpZGF0ZS5jcHAJKHJldmlzaW9u
IDE5NTA4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVmFsaWRhdGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04Miw2ICs4MiwxMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgIFZBTElEQVRFKGlzVGVybWluYWwoaW5zdC5vcGNvZGUpLCAoIkF0ICIsIGluc3QsICIg
aW4gIiwgKmJsb2NrKSk7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAg
ICBWQUxJREFURSghaXNUZXJtaW5hbChpbnN0Lm9wY29kZSksICgiQXQgIiwgaW5zdCwgIiBpbiAi
LCAqYmxvY2spKTsKKworICAgICAgICAgICAgICAgIC8vIGZvckVhY2hBcmcgbXVzdCByZXR1cm4g
QXJnJidzIHRoYXQgcG9pbnQgaW50byB0aGUgYXJncyBhcnJheS4KKyAgICAgICAgICAgICAgICBp
bnN0LmZvckVhY2hBcmcoCisgICAgICAgICAgICAgICAgICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6
Um9sZSwgQXJnOjpUeXBlLCBBcmc6OldpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBW
QUxJREFURSgmYXJnID49IGluc3QuYXJnc1swXSwgKCJBdCAiLCBhcmcsICIgaW4gIiwgaW5zdCwg
IiBpbiAiLCAqYmxvY2spKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKCZhcmcg
PD0gaW5zdC5hcmdzLmxhc3QoKSwgKCJBdCAiLCBhcmcsICIgaW4gIiwgaW5zdCwgIiBpbiAiLCAq
YmxvY2spKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JCbG9ja3Mo
KSkKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWxpZEJsb2Nrcy5jb250YWlucyhzdWNjZXNz
b3IpLCAoIkluICIsICpibG9jaykpOwpJbmRleDogU291cmNlL1dURi93dGYvSW5kZXhTcGFyc2VT
ZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9JbmRleFNwYXJzZVNldC5oCShyZXZp
c2lvbiAxOTUwODMpCisrKyBTb3VyY2UvV1RGL3d0Zi9JbmRleFNwYXJzZVNldC5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Nyw4ICs0Nyw4IEBAIGNsYXNzIEluZGV4U3BhcnNlU2V0IHsKIHB1YmxpYzoK
ICAgICBleHBsaWNpdCBJbmRleFNwYXJzZVNldCh1bnNpZ25lZCBtYXhWYWx1ZSk7CiAKLSAgICB2
b2lkIGFkZCh1bnNpZ25lZCk7Ci0gICAgdm9pZCByZW1vdmUodW5zaWduZWQpOworICAgIGJvb2wg
YWRkKHVuc2lnbmVkKTsKKyAgICBib29sIHJlbW92ZSh1bnNpZ25lZCk7CiAgICAgdm9pZCBjbGVh
cigpOwogCiAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0OwpAQCAtNzQsMjYgKzc0LDMwIEBAIHRl
bXBsYXRlPHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KIGlubGluZSB2b2lkIEluZGV4U3BhcnNl
U2V0PE92ZXJmbG93SGFuZGxlcj46OmFkZCh1bnNpZ25lZCB2YWx1ZSkKIHsKICAgICBpZiAoY29u
dGFpbnModmFsdWUpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIHVuc2lnbmVkIG5ld1Bvc2l0aW9uID0gbV92YWx1ZXMuc2l6ZSgpOwogICAgIG1fdmFsdWVz
LmFwcGVuZCh2YWx1ZSk7CiAgICAgbV9tYXBbdmFsdWVdID0gbmV3UG9zaXRpb247CisgICAgcmV0
dXJuIHRydWU7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KLWlubGlu
ZSB2b2lkIEluZGV4U3BhcnNlU2V0PE92ZXJmbG93SGFuZGxlcj46OnJlbW92ZSh1bnNpZ25lZCB2
YWx1ZSkKK2lubGluZSBib29sIEluZGV4U3BhcnNlU2V0PE92ZXJmbG93SGFuZGxlcj46OnJlbW92
ZSh1bnNpZ25lZCB2YWx1ZSkKIHsKICAgICB1bnNpZ25lZCBwb3NpdGlvbiA9IG1fbWFwW3ZhbHVl
XTsKICAgICBpZiAocG9zaXRpb24gPj0gbV92YWx1ZXMuc2l6ZSgpKQotICAgICAgICByZXR1cm47
CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChtX3ZhbHVlc1twb3NpdGlvbl0gPT0g
dmFsdWUpIHsKICAgICAgICAgdW5zaWduZWQgbGFzdFZhbHVlID0gbV92YWx1ZXMubGFzdCgpOwog
ICAgICAgICBtX3ZhbHVlc1twb3NpdGlvbl0gPSBsYXN0VmFsdWU7CiAgICAgICAgIG1fbWFwW2xh
c3RWYWx1ZV0gPSBwb3NpdGlvbjsKICAgICAgICAgbV92YWx1ZXMucmVtb3ZlTGFzdCgpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269150</attachid>
            <date>2016-01-15 22:04:17 -0800</date>
            <delta_ts>2016-01-16 13:02:28 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>54077</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0
YWNrLmNwcAkocmV2aXNpb24gMTk1MDgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJBbGxvY2F0ZVN0YWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDYgKzE0Nyw4IEBA
IHZvaWQgYWxsb2NhdGVTdGFjayhDb2RlJiBjb2RlKQogICAgICAgICAgICAgaWYgKHZlcmJvc2Up
CiAgICAgICAgICAgICAgICAgZGF0YUxvZygiSW50ZXJmZXJpbmc6ICIsIFdURjo6cG9pbnRlckxp
c3REdW1wKGxvY2FsQ2FsYy5saXZlKCkpLCAiXG4iKTsKIAorICAgICAgICAgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBraWxsIGRlYWQgc3RvcmVzIGhlcmUuCisgICAgICAgICAgICAKICAgICAgICAg
ICAgIEluc3Q6OmZvckVhY2hEZWY8QXJnPigKICAgICAgICAgICAgICAgICBibG9jay0+Z2V0KGlu
c3RJbmRleCksIGJsb2NrLT5nZXQoaW5zdEluZGV4ICsgMSksCiAgICAgICAgICAgICAgICAgWyZd
IChBcmcmIGFyZywgQXJnOjpSb2xlLCBBcmc6OlR5cGUsIEFyZzo6V2lkdGgpIHsKQEAgLTE3Miw2
ICsxNzQsOSBAQCB2b2lkIGFsbG9jYXRlU3RhY2soQ29kZSYgY29kZSkKICAgICAgICAgaW50ZXJm
ZXJlKC0xKTsKICAgICB9CiAKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGZpeCBzcGlsbCBzbG90
IFpEZWYncyBoZXJlLiBUaGUgcmVnaXN0ZXIgYWxsb2NhdG9yIHNob3VsZCBub3QgZG8gaXQsIHNp
bmNlCisgICAgLy8gaW5zZXJ0aW5nIHRob3NlIE1vdmUzMidzIGJlZm9yZSB0aGlzIHBoYXNlIGJy
ZWFrcyB0aGUgQW5vbnltb3VzIHN0YWNrIHNsb3QgY29udHJhY3QuCisKICAgICBpZiAodmVyYm9z
ZSkgewogICAgICAgICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6IGNvZGUuc3RhY2tTbG90cygpKQog
ICAgICAgICAgICAgZGF0YUxvZygiSW50ZXJmZXJlbmNlIG9mICIsIHBvaW50ZXJEdW1wKHNsb3Qp
LCAiOiAiLCBwb2ludGVyTGlzdER1bXAoaW50ZXJmZXJlbmNlW3Nsb3RdKSwgIlxuIik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAkocmV2aXNp
b24gMTk1MDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2Nr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewogCitjbGFzcyBCbG9ja0luc2VydGlvblNldDsK
IGNsYXNzIENvZGU7CiBjbGFzcyBJbnNlcnRpb25TZXQ7CiAKQEAgLTEyNyw2ICsxMjgsNyBAQCBw
dWJsaWM6CiAgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogCiBwcml2YXRl
OgorICAgIGZyaWVuZCBjbGFzcyBCbG9ja0luc2VydGlvblNldDsKICAgICBmcmllbmQgY2xhc3Mg
Q29kZTsKICAgICBmcmllbmQgY2xhc3MgSW5zZXJ0aW9uU2V0OwogICAgIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja0luc2VydGlvblNldC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja0luc2VydGlvblNldC5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJsb2Nr
SW5zZXJ0aW9uU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJBaXJCbG9ja0luc2VydGlvblNldC5oIgorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworI2luY2x1ZGUgIkFpckJhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5l
cy5oIgorI2luY2x1ZGUgPHd0Zi9CdWJibGVTb3J0Lmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCitCbG9ja0luc2VydGlvblNldDo6QmxvY2tJbnNlcnRpb25TZXQoQ29kZSAm
Y29kZSkKKyAgICA6IG1fY29kZShjb2RlKQoreworfQorCitCbG9ja0luc2VydGlvblNldDo6fkJs
b2NrSW5zZXJ0aW9uU2V0KCkgeyB9CisKK3ZvaWQgQmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydChC
bG9ja0luc2VydGlvbiYmIGluc2VydGlvbikKK3sKKyAgICBtX2luc2VydGlvbnMuYXBwZW5kKFdU
Rk1vdmUoaW5zZXJ0aW9uKSk7Cit9CisKK0Jhc2ljQmxvY2sqIEJsb2NrSW5zZXJ0aW9uU2V0Ojpp
bnNlcnQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSBmcmVxdWVuY3kpCit7CisgICAgc3RkOjp1bmlx
dWVfcHRyPEJhc2ljQmxvY2s+IGJsb2NrKG5ldyBCYXNpY0Jsb2NrKFVJTlRfTUFYLCBmcmVxdWVu
Y3kpKTsKKyAgICBCYXNpY0Jsb2NrKiByZXN1bHQgPSBibG9jay5nZXQoKTsKKyAgICBpbnNlcnQo
QmxvY2tJbnNlcnRpb24oaW5kZXgsIFdURk1vdmUoYmxvY2spKSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworQmFzaWNCbG9jayogQmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydEJlZm9yZShCYXNp
Y0Jsb2NrKiBiZWZvcmUsIGRvdWJsZSBmcmVxdWVuY3kpCit7CisgICAgcmV0dXJuIGluc2VydChi
ZWZvcmUtPmluZGV4KCksIGZyZXF1ZW5jeSA9PSBmcmVxdWVuY3kgPyBmcmVxdWVuY3kgOiBiZWZv
cmUtPmZyZXF1ZW5jeSgpKTsKK30KKworQmFzaWNCbG9jayogQmxvY2tJbnNlcnRpb25TZXQ6Omlu
c2VydEFmdGVyKEJhc2ljQmxvY2sqIGFmdGVyLCBkb3VibGUgZnJlcXVlbmN5KQoreworICAgIHJl
dHVybiBpbnNlcnQoYWZ0ZXItPmluZGV4KCkgKyAxLCBmcmVxdWVuY3kgPT0gZnJlcXVlbmN5ID8g
ZnJlcXVlbmN5IDogYWZ0ZXItPmZyZXF1ZW5jeSgpKTsKK30KKworYm9vbCBCbG9ja0luc2VydGlv
blNldDo6ZXhlY3V0ZSgpCit7CisgICAgaWYgKG1faW5zZXJ0aW9ucy5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBXZSBhbGxvdyBpbnNlcnRpb25zIHRvIGJl
IGdpdmVuIHRvIHVzIGluIGFueSBvcmRlci4gU28sIHdlIG5lZWQgdG8gc29ydCB0aGVtIGJlZm9y
ZQorICAgIC8vIHJ1bm5pbmcgV1RGOjpleGVjdXRlSW5zZXJ0aW9ucy4gV2Ugc3Ryb25nbHkgcHJl
ZmVyIGEgc3RhYmxlIHNvcnQgYW5kIHdlIHdhbnQgaXQgdG8gYmUKKyAgICAvLyBmYXN0LCBzbyB3
ZSB1c2UgYnViYmxlIHNvcnQuCisgICAgYnViYmxlU29ydChtX2luc2VydGlvbnMuYmVnaW4oKSwg
bV9pbnNlcnRpb25zLmVuZCgpKTsKKworICAgIGV4ZWN1dGVJbnNlcnRpb25zKG1fY29kZS5tX2Js
b2NrcywgbV9pbnNlcnRpb25zKTsKKyAgICAKKyAgICAvLyBQcnVuZSBvdXQgZW1wdHkgZW50cmll
cy4gVGhpcyBpc24ndCBzdHJpY3RseSBuZWNlc3NhcnkgYnV0IGl0J3MKKyAgICAvLyBoZWFsdGh5
IHRvIGtlZXAgdGhlIGJsb2NrIGxpc3QgZnJvbSBncm93aW5nLgorICAgIG1fcHJvYy5tX2Jsb2Nr
cy5yZW1vdmVBbGxNYXRjaGluZygKKyAgICAgICAgWyZdIChzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNC
bG9jaz4mIGJsb2NrUHRyKSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiAhYmxvY2tQdHI7
CisgICAgICAgIH0pOworICAgIAorICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBibG9ja3Mga25v
dyB0aGVpciBuZXcgaW5kaWNlcy4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wcm9j
Lm1fYmxvY2tzLnNpemUoKTsgKytpKQorICAgICAgICBtX3Byb2MubV9ibG9ja3NbaV0tPm1faW5k
ZXggPSBpOworICAgIAorICAgIHJldHVybiB0cnVlOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQmxvY2tJbnNlcnRpb25TZXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJsb2NrSW5zZXJ0aW9uU2V0LmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJsb2NrSW5zZXJ0aW9uU2V0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckJsb2NrSW5zZXJ0aW9uU2V0X2gK
KyNkZWZpbmUgQWlyQmxvY2tJbnNlcnRpb25TZXRfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlIDx3dGYvSW5zZXJ0aW9uLmg+CisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNw
YWNlIEFpciB7CisKK2NsYXNzIEluc2VydGlvblNldDsKKwordHlwZWRlZiBXVEY6Okluc2VydGlv
bjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+IEJsb2NrSW5zZXJ0aW9uOworCitjbGFzcyBC
bG9ja0luc2VydGlvblNldCB7CitwdWJsaWM6CisgICAgQmxvY2tJbnNlcnRpb25TZXQoUHJvY2Vk
dXJlJik7CisgICAgfkJsb2NrSW5zZXJ0aW9uU2V0KCk7CisgICAgCisgICAgdm9pZCBpbnNlcnQo
QmxvY2tJbnNlcnRpb24mJik7CisKKyAgICAvLyBJbnNlcnQgYSBuZXcgYmxvY2sgYXQgYSBnaXZl
biBpbmRleC4KKyAgICBCYXNpY0Jsb2NrKiBpbnNlcnQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSBm
cmVxdWVuY3kgPSBQTmFOKTsKKworICAgIC8vIEluc2VydHMgYSBuZXcgYmxvY2sgYmVmb3JlIHRo
ZSBnaXZlbiBibG9jay4gVXN1YWxseSB5b3Ugd2lsbCBub3QgcGFzcyB0aGUgZnJlcXVlbmN5Cisg
ICAgLy8gYXJndW1lbnQuIFBhc3NpbmcgUE5hTiBjYXVzZXMgdXMgdG8ganVzdCB1c2UgdGhlIGZy
ZXF1ZW5jeSBvZiB0aGUgJ2JlZm9yZScgYmxvY2suIFRoYXQncworICAgIC8vIHVzdWFsbHkgd2hh
dCB5b3Ugd2FudC4KKyAgICBCYXNpY0Jsb2NrKiBpbnNlcnRCZWZvcmUoQmFzaWNCbG9jayogYmVm
b3JlLCBkb3VibGUgZnJlcXVlbmN5ID0gUE5hTik7CisKKyAgICAvLyBJbnNlcnRzIGEgbmV3IGJs
b2NrIGFmdGVyIHRoZSBnaXZlbiBibG9jay4KKyAgICBCYXNpY0Jsb2NrKiBpbnNlcnRBZnRlcihC
YXNpY0Jsb2NrKiBhZnRlciwgZG91YmxlIGZyZXF1ZW5jeSA9IFBOYU4pOworCisgICAgYm9vbCBl
eGVjdXRlKCk7CisKK3ByaXZhdGU6CisgICAgQ29kZSYgbV9jb2RlOworICAgIFZlY3RvcjxCbG9j
a0luc2VydGlvbiwgOD4gbV9pbnNlcnRpb25zOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckJs
b2NrSW5zZXJ0aW9uU2V0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJCcmVha0NyaXRpY2FsRWRnZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQnJlYWtDcml0aWNhbEVkZ2VzLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQnJlYWtDcml0aWNhbEVkZ2VzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckJyZWFr
Q3JpdGljYWxFZGdlcy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNv
ZGUuaCIKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgYnJlYWtDcml0aWNhbEVkZ2VzKENv
ZGUmIGNvZGUpCit7CisgICAgQmxvY2tJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KGNvZGUpOwor
ICAgIAorICAgIGZvciAodW5zaWduZWQgYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBjb2Rl
Lm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sg
PSBjb2RlW2Jsb2NrSW5kZXhdOworICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgaWYgKGJsb2NrLT5udW1TdWNjZXNzb3JzKCkgPD0gMSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5udW1T
dWNjZXNzb3JzKCk7IGktLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqJiBzdWNjZXNzb3Ig
PSBibG9jay0+c3VjY2Vzc29yQmxvY2soaSk7CisgICAgICAgICAgICBpZiAoc3VjY2Vzc29yLT5w
cmVkZWNlc3NvcnMuc2l6ZSgpIDw9IDEpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgICAgIEJhc2ljQmxvY2sqIHBhZCA9IGluc2VyaXRvblNldC5pbnNlcnRCZWZvcmUoc3Vj
Y2Vzc29yLCBzdWNjZXNzb3ItPmZyZXF1ZW5jeSgpKTsKKyAgICAgICAgICAgIHBhZC0+YXBwZW5k
KEp1bXAsIHN1Y2Nlc3Nvci0+YXQoMCkub3JpZ2luKTsKKyAgICAgICAgICAgIHBhZC0+c3VjY2Vz
c29ycygpLmFwcGVuZChGcmVxdWVudGVkQmxvY2soc3VjY2Vzc29yKSk7CisgICAgICAgICAgICBz
dWNjZXNzb3ItPnJlcGxhY2VQcmVkZWNlc3NvcihibG9jaywgcGFkKTsKKyAgICAgICAgICAgIHN1
Y2Nlc3NvciA9IHBhZDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGluc2VydGlvblNldC5leGVj
dXRlKCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
QnJlYWtDcml0aWNhbEVkZ2VzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJCcmVha0NyaXRpY2FsRWRnZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQnJlYWtDcml0aWNhbEVkZ2VzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgQWlyQnJlYWtDcml0aWNhbEVkZ2VzX2gKKyNkZWZpbmUgQWlyQnJl
YWtDcml0aWNhbEVkZ2VzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKwordm9pZCBi
cmVha0NyaXRpY2FsRWRnZXMoQ29kZSYpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6
QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyQnJlYWtDcml0
aWNhbEVkZ2VzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbWl0
U2h1ZmZsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
RW1pdFNodWZmbGUuaAkocmV2aXNpb24gMTk1MDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJFbWl0U2h1ZmZsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSwyMyBA
QCBwdWJsaWM6CiAgICAgewogICAgIH0KIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTaHVm
ZmxlUGFpciYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9zcmMgPT0gb3Ro
ZXIubV9zcmMKKyAgICAgICAgICAgICYmIG1fZHN0ID09IG90aGVyLm1fZHN0CisgICAgICAgICAg
ICAmJiBtX3dpZHRoID09IG90aGVyLm1fd2lkdGg7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IFNodWZmbGVQYWlyJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29s
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyAhPSBTaHVmZmxlUGFpcigpOwor
ICAgIH0KKwogICAgIGNvbnN0IEFyZyYgc3JjKCkgY29uc3QgeyByZXR1cm4gbV9zcmM7IH0KICAg
ICBjb25zdCBBcmcmIGRzdCgpIGNvbnN0IHsgcmV0dXJuIG1fZHN0OyB9CiAKQEAgLTY2LDYgKzgz
LDkgQEAgcHJpdmF0ZToKICAgICBBcmc6OldpZHRoIG1fd2lkdGggeyBBcmc6OldpZHRoOCB9Owog
fTsKIAorLy8gQ3JlYXRlcyBhIFNodWZmbGUgaW5zdHJ1Y3Rpb24uCitJbnN0IGNyZWF0ZVNodWZm
bGUoY29uc3QgVmVjdG9yPFNodWZmbGVQYWlyPiYpOworCiAvLyBQZXJmb3JtIGEgc2h1ZmZsZSBv
ZiBhIGdpdmVuIHR5cGUuIFRoZSBzY3JhdGNoIGFyZ3VtZW50IGlzIG1hbmRhdG9yeS4gWW91IHNo
b3VsZCBwYXNzIGl0IGFzCiAvLyBmb2xsb3dzOiBJZiB5b3Uga25vdyB0aGF0IHlvdSBoYXZlIHNj
cmF0Y2ggcmVnaXN0ZXJzIG9yIHRlbXBvcmFyaWVzIGF2YWlsYWJsZSAtIHRoYXQgaXMsIHRoZXkn
cmUKIC8vIHJlZ2lzdGVycyB0aGF0IGFyZSBub3QgbWVudGlvbmVkIGluIHRoZSBzaHVmZmxlLCBo
YXZlIHRoZSBzYW1lIHR5cGUgYXMgdGhlIHNodWZmbGUsIGFuZCBhcmUgbm90CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RNYXAuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RNYXAuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdE1hcC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIEFpckluc3RNYXBfaAorI2RlZmluZSBBaXJJbnN0TWFwX2gKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQWly
Q29kZS5oIgorI2luY2x1ZGUgIkIzSW5kZXhNYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3Mg
SW5zdE1hcCB7CitwdWJsaWM6CisgICAgSW5zdE1hcChDb2RlJiBjb2RlKQorICAgICAgICA6IG1f
bWFwKGNvZGUuc2l6ZSgpKQorICAgIHsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6
IGNvZGUpCisgICAgICAgICAgICBtX21hcFtibG9ja10ucmVzaXplKGJsb2NrLT5zaXplKCkpOwor
ICAgIH0KKworICAgIFQmIGF0KEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25lZCBpbnN0SW5kZXgp
CisgICAgeworICAgICAgICByZXR1cm4gbV9tYXBbYmxvY2tdW2luc3RJbmRleF07CisgICAgfQor
CisgICAgY29uc3QgVCYgYXQoQmFzaWNCbG9jayogYmxvY2ssIHVuc2lnbmVkIGluc3RJbmRleCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBjb25zdF9jYXN0PEluc3RNYXAqPih0aGlzKS0+
Z2V0KGJsb2NrLCBpbnN0SW5kZXgpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgSW5kZXhN
YXA8QmFzaWNCbG9jaywgVmVjdG9yPFQ+PiBtX21hcDsKK307CisKK30gfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBB
aXJJbnN0TWFwX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZl
bmVzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2
ZW5lc3MuaAkocmV2aXNpb24gMTk1MDgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJMaXZlbmVzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC05MiwxMCArOTIsMTkgQEAgc3RydWN0
IFJlZ0xpdmVuZXNzQWRhcHRlciB7CiAgICAgUmVnIGluZGV4VG9WYWx1ZSh1bnNpZ25lZCBpbmRl
eCkgeyByZXR1cm4gUmVnOjpmcm9tSW5kZXgoaW5kZXgpOyB9CiB9OwogCitlbnVtIGNsYXNzIEtp
bGxNb2RlIDogaW50OF90IHsKKyAgICBET0FFYXJseURlZkluTmV4dEluc3QsCisgICAgRE9BTGF0
ZURlZiwKKyAgICBFYXJseVVzZUtpbGwsCisgICAgTGF0ZVVzZUluUHJldkluc3RLaWxsCit9Owor
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdGVyPgotY2xhc3MgQWJzdHJhY3RMaXZlbmVzcyA6IHBy
aXZhdGUgQWRhcHRlciB7CitjbGFzcyBBYnN0cmFjdExpdmVuZXNzIDogcHVibGljIEFkYXB0ZXIg
ewogICAgIHN0cnVjdCBXb3Jrc2V0OwogcHVibGljOgorICAgIHR5cGVkZWYgdHlwZW5hbWUgQWRh
cHRlcjo6VGhpbmcgVGhpbmc7CisgICAgCiAgICAgQWJzdHJhY3RMaXZlbmVzcyhDb2RlJiBjb2Rl
KQogICAgICAgICA6IEFkYXB0ZXIoY29kZSkKICAgICAgICAgLCBtX3dvcmtzZXQoQWRhcHRlcjo6
bWF4SW5kZXgoY29kZSkpCkBAIC0yMjIsNiArMjMxLDExIEBAIHB1YmxpYzoKIAogICAgICAgICAg
ICAgSXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBJdGVyYXRvcihtX2xpdmVuZXNzLCBt
X2xpdmVuZXNzLm1fd29ya3NldC5iZWdpbigpKTsgfQogICAgICAgICAgICAgSXRlcmF0b3IgZW5k
KCkgY29uc3QgeyByZXR1cm4gSXRlcmF0b3IobV9saXZlbmVzcywgbV9saXZlbmVzcy5tX3dvcmtz
ZXQuZW5kKCkpOyB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJvb2wgY29udGFpbnMoY29u
c3QgdHlwZW5hbWUgQWRhcHRlcjo6VGhpbmcmIHRoaW5nKSBjb25zdAorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBtX2xpdmVuZXNzLm1fd29ya3NldC5jb250YWlucyhBZGFw
dGVyOjp2YWx1ZVRvSW5kZXgodGhpbmcpKTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICBwcml2
YXRlOgogICAgICAgICAgICAgQWJzdHJhY3RMaXZlbmVzcyYgbV9saXZlbmVzczsKQEAgLTIzMiw3
ICsyNDYsMTYgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIEl0ZXJhYmxlKG1fbGl2ZW5l
c3MpOwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBleGVjdXRlKHVuc2lnbmVkIGluc3RJbmRl
eCkKKyAgICAgICAgYm9vbCBpc0xpdmUoY29uc3QgdHlwZW5hbWUgQWRhcHRlcjo6VGhpbmcmIHRo
aW5nKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbGl2ZSgpLmNvbnRhaW5z
KHRoaW5nKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENhbGxzIHRoZSBraWxsIGNhbGxiYWNr
IHdpdGggdGhlIGtpbGxzIGFuZCBkZXNjcmlwdGlvbnMgb2YgaG93IHRoZXkgZ290IGtpbGxlZC4g
QWxzbworICAgICAgICAvLyBwYXNzZXMgdGhlIGludGVybmFsIGluZGV4IG9mIHRoZSB0aGluZyBi
ZWluZyBraWxsZWQsIGlmIHlvdSB3YW50IHRvIHVzZSBpbmRleC1iYXNlZAorICAgICAgICAvLyBs
aXZlbmVzcy4KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2lsbENhbGxiYWNrPgorICAgICAg
ICB2b2lkIGV4ZWN1dGUodW5zaWduZWQgaW5zdEluZGV4LCBjb25zdCBLaWxsQ2FsbGJhY2smIGtp
bGxDYWxsYmFjaykKICAgICAgICAgewogICAgICAgICAgICAgSW5zdCYgaW5zdCA9IG1fYmxvY2st
PmF0KGluc3RJbmRleCk7CiAgICAgICAgICAgICBhdXRvJiB3b3Jrc2V0ID0gbV9saXZlbmVzcy5t
X3dvcmtzZXQ7CkBAIC0yNDIsMjMgKzI2NSwzMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
SW5zdCYgbmV4dEluc3QgPSBtX2Jsb2NrLT5hdChpbnN0SW5kZXggKyAxKTsKICAgICAgICAgICAg
ICAgICBuZXh0SW5zdC5mb3JFYWNoPHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nPigKICAgICAgICAg
ICAgICAgICAgICAgWyZdICh0eXBlbmFtZSBBZGFwdGVyOjpUaGluZyYgdGhpbmcsIEFyZzo6Um9s
ZSByb2xlLCBBcmc6OlR5cGUgdHlwZSwgQXJnOjpXaWR0aCkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKEFyZzo6aXNFYXJseURlZihyb2xlKSAmJiBBZGFwdGVyOjphY2NlcHRzVHlwZSh0
eXBlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3Jrc2V0LnJlbW92ZShBZGFwdGVy
Ojp2YWx1ZVRvSW5kZXgodGhpbmcpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6
OmlzRWFybHlEZWYocm9sZSkgJiYgQWRhcHRlcjo6YWNjZXB0c1R5cGUodHlwZSkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IEFkYXB0ZXI6OnZhbHVlVG9J
bmRleCh0aGluZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF3b3Jrc2V0LnJl
bW92ZShpbmRleCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbGxDYWxsYmFj
ayhpbmRleCwgdGhpbmcsIEtpbGxNb2RlOjpET0FFYXJseURlZkluTmV4dEluc3QpOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gVGhlbiBoYW5kbGUgZGVmJ3MuCiAgICAg
ICAgICAgICBpbnN0LmZvckVhY2g8dHlwZW5hbWUgQWRhcHRlcjo6VGhpbmc+KAogICAgICAgICAg
ICAgICAgIFsmXSAodHlwZW5hbWUgQWRhcHRlcjo6VGhpbmcmIHRoaW5nLCBBcmc6OlJvbGUgcm9s
ZSwgQXJnOjpUeXBlIHR5cGUsIEFyZzo6V2lkdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KEFyZzo6aXNMYXRlRGVmKHJvbGUpICYmIEFkYXB0ZXI6OmFjY2VwdHNUeXBlKHR5cGUpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgd29ya3NldC5yZW1vdmUoQWRhcHRlcjo6dmFsdWVUb0luZGV4
KHRoaW5nKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzTGF0ZURlZihyb2xlKSAm
JiBBZGFwdGVyOjphY2NlcHRzVHlwZSh0eXBlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgaW5kZXggPSBBZGFwdGVyOjp2YWx1ZVRvSW5kZXgodGhpbmcpOworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCF3b3Jrc2V0LnJlbW92ZShpbmRleCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAga2lsbENhbGxiYWNrKGluZGV4LCB0aGluZywgS2lsbE1vZGU6OkRPQUxh
dGVEZWYpOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSk7CiAKICAg
ICAgICAgICAgIC8vIFRoZW4gaGFuZGxlIHVzZSdzLgogICAgICAgICAgICAgaW5zdC5mb3JFYWNo
PHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nPigKICAgICAgICAgICAgICAgICBbJl0gKHR5cGVuYW1l
IEFkYXB0ZXI6OlRoaW5nJiB0aGluZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSB0eXBlLCBB
cmc6OldpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzRWFybHlVc2Uocm9s
ZSkgJiYgQWRhcHRlcjo6YWNjZXB0c1R5cGUodHlwZSkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICB3b3Jrc2V0LmFkZChBZGFwdGVyOjp2YWx1ZVRvSW5kZXgodGhpbmcpKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKEFyZzo6aXNFYXJseVVzZShyb2xlKSAmJiBBZGFwdGVyOjphY2NlcHRzVHlw
ZSh0eXBlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBBZGFw
dGVyOjp2YWx1ZVRvSW5kZXgodGhpbmcpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdv
cmtzZXQuYWRkKGluZGV4KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBraWxsQ2FsbGJh
Y2soaW5kZXgsIHRoaW5nLCBLaWxsTW9kZTo6RWFybHlVc2VLaWxsKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIH0pOwogCiAgICAgICAgICAgICAvLyBBbmQgZmluYWxs
eSwgaGFuZGxlIHRoZSBsYXRlIHVzZSdzIG9mIHRoZSBwcmV2aW91cyBpbnN0cnVjdGlvbi4KQEAg
LTI2NiwxNyArMjk4LDMyIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBJbnN0JiBwcmV2SW5z
dCA9IG1fYmxvY2stPmF0KGluc3RJbmRleCAtIDEpOwogICAgICAgICAgICAgICAgIHByZXZJbnN0
LmZvckVhY2g8dHlwZW5hbWUgQWRhcHRlcjo6VGhpbmc+KAogICAgICAgICAgICAgICAgICAgICBb
Jl0gKHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nJiB0aGluZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6
VHlwZSB0eXBlLCBBcmc6OldpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJn
Ojppc0xhdGVVc2Uocm9sZSkgJiYgQWRhcHRlcjo6YWNjZXB0c1R5cGUodHlwZSkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd29ya3NldC5hZGQoQWRhcHRlcjo6dmFsdWVUb0luZGV4KHRo
aW5nKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0xhdGVVc2Uocm9sZSkg
JiYgQWRhcHRlcjo6YWNjZXB0c1R5cGUodHlwZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpbmRleCA9IEFkYXB0ZXI6OnZhbHVlVG9JbmRleCh0aGluZyk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdvcmtzZXQuYWRkKGluZGV4KSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAga2lsbENhbGxiYWNrKGluZGV4LCB0aGluZywgS2lsbE1v
ZGU6OkxhdGVVc2VJblByZXZJbnN0S2lsbCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKKyAgICAg
ICAgdm9pZCBleGVjdXRlKHVuc2lnbmVkIGluc3RJbmRleCkKKyAgICAgICAgeworICAgICAgICAg
ICAgZXhlY3V0ZSgKKyAgICAgICAgICAgICAgICBpbnN0SW5kZXgsCisgICAgICAgICAgICAgICAg
W10gKHVuc2lnbmVkLCBjb25zdCB0eXBlbmFtZSBBZGFwdGVyOjpUaGluZyYsIEtpbGxNb2RlKSB7
IH0pOworICAgICAgICB9CisKICAgICBwcml2YXRlOgogICAgICAgICBBYnN0cmFjdExpdmVuZXNz
JiBtX2xpdmVuZXNzOwogICAgICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOwogICAgIH07CiAKKyAg
ICBjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiByYXdMaXZlQXRIZWFkKEJhc2ljQmxvY2sqIGJsb2Nr
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbGl2ZUF0SGVhZFtibG9ja107CisgICAgfQorCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVW5kZXJseWluZ0l0ZXJhYmxlPgogICAgIGNsYXNzIEl0ZXJh
YmxlIHsKICAgICBwdWJsaWM6CkBAIC0zMzAsNiArMzc3LDExIEBAIHB1YmxpYzoKICAgICAgICAg
aXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihtX2xpdmVuZXNzLCBtX2l0
ZXJhYmxlLmJlZ2luKCkpOyB9CiAgICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJu
IGl0ZXJhdG9yKG1fbGl2ZW5lc3MsIG1faXRlcmFibGUuZW5kKCkpOyB9CiAKKyAgICAgICAgYm9v
bCBjb250YWlucyhjb25zdCB0eXBlbmFtZSBBZGFwdGVyOjpUaGluZyYgdGhpbmcpIGNvbnN0Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2xpdmVuZXNzLm1fd29ya3NldC5jb250YWlu
cyhBZGFwdGVyOjp2YWx1ZVRvSW5kZXgodGhpbmcpKTsKKyAgICAgICAgfQorCiAgICAgcHJpdmF0
ZToKICAgICAgICAgQWJzdHJhY3RMaXZlbmVzcyYgbV9saXZlbmVzczsKICAgICAgICAgY29uc3Qg
VW5kZXJseWluZ0l0ZXJhYmxlJiBtX2l0ZXJhYmxlOwpAQCAtMzQ1LDYgKzM5Nyw4IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIEl0ZXJhYmxlPHR5cGVuYW1lIEFkYXB0ZXI6OkluZGV4U2V0Pigq
dGhpcywgbV9saXZlQXRUYWlsW2Jsb2NrXSk7CiAgICAgfQogCisgICAgSW5kZXhTcGFyc2VTZXQ8
VW5zYWZlVmVjdG9yT3ZlcmZsb3c+JiB3b3Jrc2V0KCkgeyByZXR1cm4gbV93b3Jrc2V0OyB9CisK
IHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExvY2FsQ2FsYzsKICAgICBmcmllbmQgc3RydWN0
IExvY2FsQ2FsYzo6SXRlcmFibGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0Fpck9wdGltaXplQmxvY2tPcmRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJPcHRpbWl6ZUJsb2NrT3JkZXIuY3BwCShyZXZpc2lvbiAxOTUwODMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wdGltaXplQmxvY2tPcmRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDEwICs3Myw4IEBAIHByaXZhdGU6CiAKIH0gLy8gYW5v
bnltb3VzIG5hbWVzcGFjZQogCi12b2lkIG9wdGltaXplQmxvY2tPcmRlcihDb2RlJiBjb2RlKQor
VmVjdG9yPEJhc2ljQmxvY2sqPiBibG9ja3NJbk9wdGltaXplZE9yZGVyKENvZGUmIGNvZGUpCiB7
Ci0gICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJvcHRpbWl6ZUJsb2NrT3JkZXIiKTsK
LQogICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gYmxvY2tzSW5PcmRlcjsKIAogICAgIEJsb2NrV29y
a2xpc3QgZmFzdFdvcmtsaXN0OwpAQCAtMTEzLDYgKzExMSwxNSBAQCB2b2lkIG9wdGltaXplQmxv
Y2tPcmRlcihDb2RlJiBjb2RlKQogICAgIEFTU0VSVChmYXN0V29ya2xpc3QuaXNFbXB0eSgpKTsK
ICAgICBBU1NFUlQoc2xvd1dvcmtsaXN0LmlzRW1wdHkoKSk7CiAKKyAgICByZXR1cm4gYmxvY2tz
SW5PcmRlcjsKK30KKwordm9pZCBvcHRpbWl6ZUJsb2NrT3JkZXIoQ29kZSYgY29kZSkKK3sKKyAg
ICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgIm9wdGltaXplQmxvY2tPcmRlciIpOworCisg
ICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBibG9ja3NJbk9yZGVyID0gYmxvY2tzSW5PcHRpbWl6ZWRP
cmRlcihjb2RlKTsKKyAgICAKICAgICAvLyBQbGFjZSBibG9ja3MgaW50byBDb2RlJ3MgYmxvY2sg
bGlzdCBhY2NvcmRpbmcgdG8gdGhlIG9yZGVyaW5nIGluIGJsb2Nrc0luT3JkZXIuIFdlIGRvIHRo
aXMgYnkgbGVha2luZwogICAgIC8vIGFsbCBvZiB0aGUgYmxvY2tzIGFuZCB0aGVuIHJlYWRvcHRp
bmcgdGhlbS4KICAgICBmb3IgKGF1dG8mIGVudHJ5IDogY29kZS5ibG9ja0xpc3QoKSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3B0aW1pemVCbG9ja09yZGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcHRpbWl6ZUJsb2Nr
T3JkZXIuaAkocmV2aXNpb24gMTk1MDgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJPcHRpbWl6ZUJsb2NrT3JkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsMTEg
QEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZQogCiBjbGFzcyBDb2Rl
OwogCisvLyBSZXR1cm5zIGEgbGlzdCBvZiBibG9ja3Mgc29ydGVkIGFjY29yZGluZyB0byB3aGF0
IHdvdWxkIGJlIHRoZSBjdXJyZW50IG9wdGltYWwgb3JkZXIuIFRoaXMgc2hhcmVzCisvLyBzb21l
IHByb3BlcnRpZXMgd2l0aCBhIHByZS1vcmRlciB0cmF2ZXJzYWwuIEluIHBhcnRpY3VsYXIsIGVh
Y2ggYmxvY2sgd2lsbCBhcHBlYXIgYWZ0ZXIgYXQgbGVhc3QKKy8vIG9uZSBvZiBpdHMgcHJlZGVj
ZXNzb3JzLgorVmVjdG9yPEJhc2ljQmxvY2sqPiBibG9ja3NJbk9wdGltaXplZE9yZGVyKENvZGUm
KTsKKwogLy8gUmVvcmRlcnMgdGhlIGJhc2ljIGJsb2NrcyB0byBrZWVwIGhvdCBibG9ja3MgYXQg
dGhlIHRvcCwgYW5kIG1heGltaXplIHRoZSBsaWtlbGlob29kIHRoYXQgYSBmcmVxdWVudGx5CiAv
LyB0YWtlbiBlZGdlIGlzIGp1c3QgYSBmYWxsLXRocm91Z2guCiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyU2NhdmVuZ2VSZWdpc3RlcnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU2NhdmVuZ2VSZWdpc3RlcnMuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTY2F2ZW5nZVJl
Z2lzdGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MzYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQWlyU2NhdmVuZ2VSZWdpc3RlcnMuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisK
KyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlyRm9yd2FyZExpdmVuZXNzLmgiCisj
aW5jbHVkZSAiQWlyTGl2ZW5lc3MuaCIKKyNpbmNsdWRlICJBaXJPcHRpbWl6ZUJsb2NrT3JkZXIu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitu
YW1lc3BhY2UgeworCit0ZW1wbGF0ZTxBcmc6OlR5cGUgdHlwZT4KK2NsYXNzIFNjYXZlbmdlUmVn
aXN0ZXJzIHsKK3B1YmxpYzoKKyAgICBTY2FudmVnZVJlZ2lzdGVycyhDb2RlJiBjb2RlKQorICAg
ICAgICA6IG1fY29kZShjb2RlKQorICAgICAgICAsIG1fbGl2ZW5lc3MoY29kZSkKKyAgICAgICAg
LCBtX3RtcFdpZHRoKGNvZGUpCisgICAgICAgICwgbV9pbnNlcnRpb25TZXQoY29kZSkKKyAgICB7
CisgICAgfQorCisgICAgdm9pZCBydW4oKQorICAgIHsKKyAgICAgICAgVmVjdG9yPEJhc2ljQmxv
Y2sqPiBibG9ja3MgPSBibG9ja3NJbk9wdGltaXplZE9yZGVyKG1fY29kZSk7CisKKyAgICAgICAg
Zm9yICg7OykgeworICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogYmxvY2tzKSB7CisgICAgICAgICAgICAgICAgbV9ibG9j
ayA9IGJsb2NrOworICAgICAgICAgICAgICAgIHByb3BhZ2F0ZVZhbHVlc0luQmxvY2soKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghbV9jaGFuZ2VkKQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjb21wdXRlRGVhdGhzKCk7Cisg
ICAgICAgIGluaXRpYWxpemVCbG9ja1JlZ1N0YXRlcygpOworCisgICAgICAgIGZvciAoQmFzaWNC
bG9jayogYmxvY2sgOiBibG9ja3MpIHsKKyAgICAgICAgICAgIG1fYmxvY2sgPSBibG9jazsKKyAg
ICAgICAgICAgIHByb2Nlc3NCbG9jaygpOworICAgICAgICB9CisgICAgfQorCitwcml2YXRlOgor
ICAgIHZvaWQgcHJvcGFnYXRlVmFsdWVzSW5CbG9jaygpCisgICAgeworICAgICAgICBtX3N0YXRl
ID0gbV9hdEhlYWRbbV9ibG9ja107CisgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6ICptX2Jsb2Nr
KQorICAgICAgICAgICAgcHJvcGFnYXRlVmFsdWVzKGluc3QpOworCisgICAgICAgIGZvciAoQmFz
aWNCbG9jayogc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3NvckJsb2NrcygpKSB7CisgICAgICAg
ICAgICBTdGF0ZSYgYXRIZWFkID0gbV9hdEhlYWRbc3VjY2Vzc29yXTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgaWYgKCFhdEhlYWQudmlzaXRlZEJ5UHJvcGFnYXRpb24pIHsKKyAgICAgICAg
ICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogYXRIZWFkLm1hcHBpbmcpIHsKKyAgICAgICAgICAg
ICAgICAgICAgVG1wSW5mbyBpbmZvID0gZ2V0SW5mbyhlbnRyeS5rZXkpOworICAgICAgICAgICAg
ICAgICAgICBlbnRyeS52YWx1ZS5jb25zdGFudCA9IGluZm8uY29uc3RhbnQ7CisgICAgICAgICAg
ICAgICAgICAgIGVudHJ5LnZhbHVlLmhhc0NvbnN0YW50ID0gaW5mby5oYXNDb25zdGFudDsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYXRIZWFkLnZpc2l0ZWRCeVByb3BhZ2F0
aW9uID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKGF1dG8m
IGVudHJ5IDogYXRIZWFkLm1hcHBpbmcpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWVudHJ5LnZh
bHVlLmhhc0NvbnN0YW50KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICBUbXBJbmZvIGluZm8gPSBnZXRJbmZvKGVudHJ5LmtleSk7CisgICAgICAgICAgICAg
ICAgaWYgKCFpbmZvLmhhc0NvbnN0YW50IHx8IGluZm8uY29uc3RhbnQgIT0gZW50cnkudmFsdWUu
Y29uc3RhbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgZW50cnkudmFsdWUuaGFzQ29uc3RhbnQg
PSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9p
ZCBwcm9wYWdhdGVWYWx1ZXMoSW5zdCYgaW5zdCkKKyAgICB7CisgICAgICAgIGlmICh0eXBlID09
IEdQCisgICAgICAgICAgICAmJiBpbnN0Lm9wY29kZSA9PSBNb3ZlCisgICAgICAgICAgICAmJiBp
bnN0LmFyZ3NbMF0uaXNTb21lSW1tKCkKKyAgICAgICAgICAgICYmIGluc3QuYXJnc1sxXS5pc1Rt
cCgpKSB7CisgICAgICAgICAgICBUbXBJbmZvJiBpbmZvID0gZ2V0SW5mbyhpbnN0LmFyZ3NbMV0u
dG1wKCkpOworICAgICAgICAgICAgaW5mby5oYXNDb25zdGFudCA9IHRydWU7CisgICAgICAgICAg
ICBpbmZvLmNvbnN0YW50ID0gaW5zdC5hcmdzWzFdLnZhbHVlKCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBGSVhNRTogTmVlZCB0aGUgZXF1aXZhbGVudCBm
b3IgRlAuCisKKyAgICAgICAgSW5zdDo6Zm9yRWFjaERlZldpdGhFeHRyYUNsb2JiZXJlZFJlZ3M8
VG1wPigKKyAgICAgICAgICAgICZpbnN0LCAmaW5zdCwgLy8gR2V0IGJvdGggbGF0ZSBhbmQgZWFy
bHkgZGVmcyBmb3IgaW5zdC4KKyAgICAgICAgICAgIFsmXSAoVG1wJiB0bXAsIEFyZzo6Um9sZSwg
QXJnOjpUeXBlIHRtcFR5cGUsIEFyZzo6V2lkdGgpIHsKKyAgICAgICAgICAgICAgICBpZiAodG1w
VHlwZSAhPSB0eXBlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgZ2V0SW5mbyh0bXApLmhhc0NvbnN0YW50ID0gZmFsc2U7CisgICAgICAgICAgICB9KTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBjb21wdXRlRGVhdGhzKCkKKyAgICB7CisgICAgICAgIGZvciAo
QmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgICAgICBMaXZlbmVzczo6TG9jYWxD
YWxjIGxvY2FsQ2FsYyhsaXZlbmVzcywgYmxvY2spOworICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTspIHsKKyAgICAgICAgICAg
ICAgICBsb2NhbENhbGMuZXhlY3V0ZSgKKyAgICAgICAgICAgICAgICAgICAgaW5zdEluZGV4LAor
ICAgICAgICAgICAgICAgICAgICBbJl0gKHVuc2lnbmVkLCBUbXAgdG1wLCBLaWxsTW9kZSBraWxs
TW9kZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChraWxsTW9kZSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSBLaWxsTW9kZTo6RE9BRWFybHlEZWZJbk5leHRJbnN0
OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGVhdGhzLmF0KGJsb2NrLCBpbnN0SW5k
ZXggKyAxKS5hcHBlbmQoRGVhdGgodG1wLCBFYXJseURlYXRoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEtpbGxNb2Rl
OjpET0FMYXRlRGVmOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGVhdGhzLmF0KGJs
b2NrLCBpbnN0SW5kZXgpLmFwcGVuZChEZWF0aCh0bXAsIExhdGVEZWF0aCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBL
aWxsTW9kZTo6RWFybHlVc2VLaWxsOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGVh
dGhzLmF0KGJsb2NrLCBpbnN0SW5kZXgpLmFwcGVuZChEZWF0aCh0bXAsIEVhcmx5RGVhdGgpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgS2lsbE1vZGU6OkxhdGVVc2VJblByZXZJbnN0S2lsbDoKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX2RlYXRocy5hdChibG9jaywgaW5zdEluZGV4IC0gMSkuYXBwZW5kKERl
YXRoKHRtcCwgTGF0ZURlYXRoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgaW5pdGlhbGl6ZUJs
b2NrUmVnU3RhdGVzKCkKKyAgICB7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBt
X2NvZGUpIHsKKyAgICAgICAgICAgIFN0YXRlJiBzdGF0ZSA9IG1fYXRIZWFkW2Jsb2NrXTsKKyAg
ICAgICAgICAgIGZvciAoVG1wIHRtcCA6IG1fbGl2ZW5lc3MubGl2ZUF0SGVhZChibG9jaykpIHsK
KyAgICAgICAgICAgICAgICBpZiAoIXRtcC5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICAgICAgICAgIHN0YXRlLm1hcHBpbmcuYWRkKHRtcCwgVG1wSW5m
byhyZWcpKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5yZXZlcnNlTWFwcGluZ1t0bXAucmVnKCld
ID0gUmVnSW5mbyh0bXApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAg
dm9pZCBwcm9jZXNzQmxvY2soKQorICAgIHsKKyAgICAgICAgbV9zdGF0ZSA9IG1fYXRIZWFkW21f
YmxvY2tdOworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3N0YXRlLmlzU2V0dGxlZCk7CisKKyAg
ICAgICAgZm9yIChtX2luc3RJbmRleCA9IDA7IG1faW5zdEluZGV4IDwgYmxvY2stPnNpemUoKTsg
KyttX2luc3RJbmRleCkgeworICAgICAgICAgICAgSW5zdCYgaW5zdCA9IG1fYmxvY2stPmF0KG1f
aW5zdEluZGV4KTsKKyAgICAgICAgICAgIHByb2Nlc3NJbnN0KGluc3QpOworICAgICAgICAgICAg
cHJvcGFnYXRlVmFsdWVzKGluc3QpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBwcm9j
ZXNzSW5zdChJbnN0JiBpbnN0KQorICAgIHsKKyAgICAgICAgLy8gT3VyIHN0YXRlIG1hcHBpbmcg
dGVsbHMgdXMgd2hhdCBpcyBsaXZlIGF0IGFueSBnaXZlbiBtb21lbnQuIFdlIHVzZSBhIHNlcGFy
YXRlCisgICAgICAgIC8vIGxpdmVuZXNzIHBhc3MgdG8gY29sbGVjdCB0aGUga2lsbCBsaXN0cyBm
b3IgYWxsIGluc3RydWN0aW9ucy4gVGhlIGtpbGwgbGlzdHMgdGVsbCB1cworICAgICAgICAvLyBh
Ym91dCB0aGUgd2F5cyB0aGF0IHRoaW5ncyBkaWUgYXQgYW4gSW5zdC4gVGhlcmUgYXJlIGZvdXIg
d2F5czoKKyAgICAgICAgLy8gCisgICAgICAgIC8vIC0gQW4gZWFybHkgZGVmIGNvdWxkIGRpZSBh
Ym92ZSBhbiBJbnN0LgorICAgICAgICAvLyAtIEFuIGVhcmx5IHVzZSBjb3VsZCBraWxsIGFib3Zl
IGFuIEluc3QuCisgICAgICAgIC8vIC0gQSBsYXRlIGRlZiBjb3VsZCBkaWUgYmVsb3cgYW4gSW5z
dC4KKyAgICAgICAgLy8gLSBBIGxhdGUgdXNlIGNvdWxkIGtpbGwgYmVsb3cgYW4gSW5zdC4KKyAg
ICAgICAgLy8gCisgICAgICAgIC8vIE9uY2Ugd2UgYXJlIGFybWVkIHdpdGggb3VyIHN0YXRlIG1h
cHBpbmcgYW5kIHRoZSBraWxsIGxpc3RzLCB3ZSBjYW4gcHJvY2VzcyB0aGUgSW5zdAorICAgICAg
ICAvLyBpbiB0aGUgb3JkZXIgb2YgaXRzIGV4ZWN1dGlvbiBhbmQgdXBkYXRlIHRoZSBzdGF0ZSBt
YXBwaW5nIGJhc2VkIG9uIGRlZnMgYW5kIGtpbGwKKyAgICAgICAgLy8gbGlzdHMuCisgICAgICAg
IC8vIAorICAgICAgICAvLyBXZSBzdGFydCBhYm92ZSB0aGUgSW5zdCB3aXRoIGEgc3RhdGUgdGhh
dCB0ZWxscyB1cyB3aGF0IGlzIGxpdmUgYmVmb3JlIGl0LiBUaGlzCisgICAgICAgIC8vIGluY2x1
ZGVzIHRoaW5ncyB0aGF0IHdpbGwgZGllIGF0IHRoZSB0b3AuIFdlIGNhbiBoYW5kbGUgZWFybHkg
dXNlcyBhbmQgZGVmcyBieSBnaXZpbmcKKyAgICAgICAgLy8gdGhlbSByZWdpc3RlcnMgdGhhdCBh
cmUgbm90IGxpdmUuIFdlIGtub3cgd2hpY2ggcmVnaXN0ZXJzIGJlY29tZSBsaXZlIGJlY2F1c2Ug
b3VyCisgICAgICAgIC8vIG1hcHBpbmcgdGVsbHMgdXMgdGhpcy4gVGhlbiB3ZSBjYW4gYXBwbHkg
dGhlIGVhcmx5IGRlYXRocy4gVGhlbiB3ZSBwcm9jZXNzIGxhdGUgdXNlcworICAgICAgICAvLyBh
bmQgZGVmcywgYW5kIHRoZW4gYXBwbHkgdGhlIGxhdGUgZGVhdGhzLgorICAgICAgICAvLyAKKyAg
ICAgICAgLy8gVGhpcyBhbGdvcml0aG0gbXVzdCBwcm9jZWVkIGluIHRoZSBvcmRlciBvZiB0aGUg
SW5zdCdzIGV4ZWN1dGlvbi4gV2UgY2FuIHVzZSB0aGUKKyAgICAgICAgLy8gbm90aW9uIG9mIGxv
Y2tpbmcgYXQgZWFjaCBzdGFnZSAtIGVhcmx5IGFuZCB0aGVuIGxhdGUgLSB0byBpbmRpY2F0ZSB3
aGljaCByZWdpc3RlcnMKKyAgICAgICAgLy8gaGF2ZSBhbHJlYWR5IGJlZW4gcHVycG9zZWQuIEFs
bCBlYXJseSB1c2VzIHdpbGwgaG9sZCB0aGUgbG9jayB3aGlsZSB3ZSBhcmUgcHJvY2Vzc2luZwor
ICAgICAgICAvLyB0aGUgZWFybHkgcGFydCBvZiB0aGUgaW5zdHJ1Y3Rpb24sIGFuZCB0aGVuIHJl
bGVhc2UgaXQgYmVmb3JlIHdlIHN0YXJ0IHByb2Nlc3NpbmcgdGhlCisgICAgICAgIC8vIGxhdGUg
c3R1ZmYuIEluIGJldHdlZW4gZWFybHkgYW5kIGxhdGUsIGFmdGVyIHdlIGhhdmUgdW5sb2NrZWQg
dGhpbmdzIHVzZWQgZWFybHksIHdlCisgICAgICAgIC8vIGNhbiBwZXJmb3JtIGVhcmx5IGRlYXRo
cy4gQWxsIGVhcmx5IGRlZnMgd2lsbCBob2xkIHRoZSBsb2NrIGVhcmx5IGFuZCB0aGVuIHJlbGVh
c2UgaXQKKyAgICAgICAgLy8gYWZ0ZXIgd2UgcHJvY2VzcyBsYXRlIHRoaW5ncy4gQXMgYSBzcGVj
aWFsIGNhc2UsIFVzZURlZiB3aWxsIGFsc28gcmVsZWFzZSB0aGUgbG9jaworICAgICAgICAvLyBs
YXRlLgorICAgICAgICAvLyAKKyAgICAgICAgLy8gVGhpbmdzIGdldCB3ZWlyZCB3aXRoIFVzZURl
Zi4gTHVja3kgZm9yIHVzLCBJbnN0cyB3aWxsIGhhdmUgYSBzbWFsbCBudW1iZXIgb2YgVXNlRGVm
cywKKyAgICAgICAgLy8gc28gdGhlIGFsZ29yaXRobSBkb2Vzbid0IGhhdmUgdG8gYmUgZWZmaWNp
ZW50IGFuZCB3ZSBjYW4gYmUgc3VyZSB0aGF0IGlmIHdlIGhhbmRsZQorICAgICAgICAvLyBVc2VE
ZWZzIGVhcmx5LCB0aGVuIHRoZSBncmVlZHkgYXBwcm9hY2ggc2hvdWxkIGp1c3Qgd29yay4gVGhl
IGxvY2tpbmcgc3RyYXRlZ3kgZW5zdXJlcworICAgICAgICAvLyB0aGF0IHdlIHdvbid0IHRyeSB0
byByZXVzZSB0aGUgcmVnaXN0ZXIgd2UgYWxyZWFkeSBwaWNrZWQuIFRoZSBvbmx5IGFkZGl0aW9u
YWwgbG9naWMKKyAgICAgICAgLy8gZm9yIFVzZURlZiBpcyB0aGF0IHdoZW4gd2UgcGljayBhIHJl
Z2lzdGVyIGZvciBpdCwgd2hpY2ggaGFwcGVucyBlYXJseSwgd2UgbG9vayBhaGVhZAorICAgICAg
ICAvLyB0byBtYWtlIHN1cmUgdGhhdCB3ZSBkaWRuJ3QgYWxyZWFkeSBsb2NrIHRoZSByZWdpc3Rl
ciBsYXRlLiBUaGUgb25seSByZWdpc3RlcnMgdGhhdCB3ZQorICAgICAgICAvLyBjb3VsZCBoYXZl
IGFscmVhZHkgbG9ja2VkIGxhdGUgYXJlIHRoZSBvbmVzIHRoYXQgYXJlIGNsb2JiZXJlZCBsYXRl
IG9yIGRlZmluZWQgbGF0ZS4KKyAgICAgICAgLy8gCisgICAgICAgIC8vIE9uZSBvZiB0aGUgYmVh
dXRpZnVsIHRoaW5ncyBhYm91dCB0aGlzIGFwcHJvYWNoIGlzIHRoYXQgd2UgY2FuIHByb2Nlc3Mg
dGhlIEluc3QKKyAgICAgICAgLy8gaW4tcGxhY2UuIFdlIHdvbid0IGVkaXQgdGhlIHVzZXMgdW50
aWwgd2UgaGF2ZSBhY2NvdW50ZWQgZm9yIHRoZW0uIFdlIHdvbid0IGVkaXQgdGhlCisgICAgICAg
IC8vIGRlZnMgdW50aWwgd2UgaGF2ZSBhY2NvdW50ZWQgZm9yIHRoZW0uIFNvLCB3ZSBjYW4gY29t
cHV0ZSBmb3J3YXJkIGxpdmVuZXNzIHdoaWxlIGFsc28KKyAgICAgICAgLy8gZWRpdGluZyB0aGUg
aW5zdHJ1Y3Rpb24uCisKKyAgICAgICAgLy8gU3BpbGwgYW5kIGxvY2sgYWxsIGVhcmx5IGNsb2Ji
ZXJzLgorICAgICAgICBpZiAoaW5zdC5vcGNvZGUgPT0gUGF0Y2gpIHsKKyAgICAgICAgICAgIGlu
c3QuZXh0cmFFYXJseUNsb2JiZXJlZFJlZ3MoKS5mb3JFYWNoKAorICAgICAgICAgICAgICAgIFsm
XSAoUmVnIHJlZykgeworICAgICAgICAgICAgICAgICAgICBzcGlsbChyZWcpOworICAgICAgICAg
ICAgICAgICAgICBsb2NrKHJlZyk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBj
b21taXQoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlIGxvY2sg
YWxyZWFkeS1hbGxvY2F0ZWQgcmVnaXN0ZXJzLgorICAgICAgICBpbnN0LmZvckVhY2hUbXAoCisg
ICAgICAgICAgICBbJl0gKFRtcCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIHRtcFR5
cGUsIEFyZzo6V2lkdGgpIHsKKyAgICAgICAgICAgICAgICBpZiAodG1wVHlwZSAhPSB0eXBlKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgaWYgKCFBcmc6Omlz
RWFybHlVc2Uocm9sZSkgJiYgIUFyZzo6aXNFYXJseURlZihyb2xlKSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGlmICghdG1wLmlzUmVnKCkpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBsb2NrKHRtcC5yZWcoKSk7Cisg
ICAgICAgICAgICB9KTsKKworICAgICAgICAvLyBBbGxvY2F0ZSByZWdpc3RlcnMgdG8gdGhvc2Ug
dGhpbmdzIHRoYXQgZG9uJ3QgYWRtaXQgc3RhY2suCisgICAgICAgIGluc3QuZm9yRWFjaEFyZygK
KyAgICAgICAgICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgYXJn
VHlwZSwgQXJnOjpXaWR0aCkgeworICAgICAgICAgICAgICAgIGlmIChhcmdUeXBlICE9IHR5cGUp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBpZiAoIUFyZzo6
aXNFYXJseURlZihyb2xlKSAmJiAhQXJnOjppc0Vhcmx5VXNlKHJvbGUpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgICAgICBpZiAoYXJnLmlzVG1wKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHRtcC5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdC5hZG1pdHNTdGFjaygmYXJn
IC0gaW5zdC5hcmdzWzBdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICAgICAgYXJnID0gVG1wKGxvY2soZmlsbChhcmcudG1wKCksIHJvbGUpKSk7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICBhcmcuZm9yRWFjaFRtcCgKKyAgICAgICAgICAgICAgICAgICAgcm9sZSwgdHlwZSwg
d2lkdGgsCisgICAgICAgICAgICAgICAgICAgIFsmXSAoVG1wJiB0bXAsIEFyZzo6Um9sZSByb2xl
LCBBcmc6OlR5cGUsIEFyZzo6V2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9
IFRtcChsb2NrKGZpbGwodG1wLCByb2xlKSkpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgIH0pOworCisgICAgICAgIC8vIEFsbG9jYXRlIHJlZ2lzdGVycyB0byB0aG9zZSB0
aGluZ3MgdGhhdCBhZG1pdCBzdGFjayBidXQgYXJlIGEgd2FybSB1c2UuIEtlZXAgdGhpcyB1cCBz
bworICAgICAgICAvLyBsb25nIGFzIHdlIHN0aWxsIGhhdmUgcmVnaXN0ZXJzLgorICAgICAgICBp
bnN0LmZvckVhY2hBcmcoCisgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9s
ZSwgQXJnOjpUeXBlIGFyZ1R5cGUsIEFyZzo6V2lkdGggd2lkdGgpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoYXJnVHlwZSAhPSB0eXBlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgYm9vbCBpc1dhcm1BbmRFYXJseSA9CisgICAgICAgICAgICAgICAgICAgIChB
cmc6OmlzRWFybHlVc2Uocm9sZSkgJiYgQXJnOjppc1dhcm1Vc2Uocm9sZSkpCisgICAgICAgICAg
ICAgICAgICAgIHx8IEFyZzo6aXNFYXJseURlZihyb2xlKTsKKyAgICAgICAgICAgICAgICBpZiAo
IWlzV2FybUFuZEVhcmx5KQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgaWYgKCFhcmcuaXNUbXAoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgIGlmIChhcmcuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgICAgICAgICAgUmVnIHJlZyA9IGZpbGwoYXJnLnRtcCgpLCByb2xlKTsKKyAg
ICAgICAgICAgICAgICBpZiAoIXJlZykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgIGFyZyA9IFRtcChsb2NrKHJlZykpOworICAgICAgICAgICAgfSk7CisKKyAg
ICAgICAgLy8gRmlndXJlIG91dCB3aGF0IHRvIGRvIHdpdGggZXZlcnl0aGluZyBlbHNlLgorICAg
ICAgICBpbnN0LmZvckVhY2hBcmcoCisgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJv
bGUgcm9sZSwgQXJnOjpUeXBlIGFyZ1R5cGUsIEFyZzo6V2lkdGggd2lkdGgpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoYXJnVHlwZSAhPSB0eXBlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAgICAgaWYgKCFBcmc6OmlzRWFybHlVc2Uocm9sZSkgJiYgIUFyZzo6aXNF
YXJseURlZihyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV1dHJuOworICAgICAgICAgICAg
ICAgIGlmICghYXJnLmlzVG1wKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICBpZiAoYXJnLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICAgICAgICAgIFRtcEluZm8mIGluZm8gPSBnZXRJbmZvKGFyZy50bXAoKSk7Cisg
ICAgICAgICAgICAgICAgaWYgKGluZm8ucmVnKSB7CisgICAgICAgICAgICAgICAgICAgIGFyZyA9
IFRtcChsb2NrKGluZm8ucmVnKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHNsb3QgPSBzcGlsbFNs
b3QoYXJnLnRtcCgpKTsKKyAgICAgICAgICAgICAgICBlbnN1cmVXaWR0aChzbG90LCB3aWR0aCk7
CisgICAgICAgICAgICAgICAgYXJnID0gQXJnOjpzdGFjayhzbG90KTsKKyAgICAgICAgICAgIH0p
OworCisgICAgICAgIC8vIEZpbmlzaCB0aGUgc2h1ZmZsZS4KKyAgICAgICAgY29tbWl0KCk7Cisg
ICAgICAgIGVtaXRTaHVmZmxlKG1faW5zdEluZGV4KTsKKworICAgICAgICAvLyBVbmxvY2sgYWxs
IG9mIHRoZSBlYXJseSBjbG9iYmVyZWQgcmVnaXN0ZXJzLgorICAgICAgICBpZiAoaW5zdC5vcGNv
ZGUgPT0gUGF0Y2gpIHsKKyAgICAgICAgICAgIGluc3QuZXh0cmFFYXJseUNsb2JiZXJlZFJlZ3Mo
KS5mb3JFYWNoKAorICAgICAgICAgICAgICAgIFsmXSAoUmVnIHJlZykgeworICAgICAgICAgICAg
ICAgICAgICB1bmxvY2socmVnKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIFVubG9jayBhbGwgb2YgdGhlIGVhcmx5IHVzZXMgYW5kIGRlZnMuIE5vdGUgdGhh
dCBmb3IgVXNlRGVmIGFuZCBTY3JhdGNoLCB3ZSBqdXN0IHJlbG9jaworICAgICAgICAvLyB0aG9z
ZSBkb3duIGJlbG93LCB3aXRob3V0IGRvaW5nIGFueSBmaWxscy4gU28gdGhlIHVubG9ja2luZyBk
b2Vzbid0IGNvdW50IGZvciB0aG9zZS4KKyAgICAgICAgaW5zdC5mb3JFYWNoVG1wKAorICAgICAg
ICAgICAgWyZdIChUbXAmIHRtcCwgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSBhcmdUeXBlLCBB
cmc6OldpZHRoIHdpZHRoKSB7CisgICAgICAgICAgICAgICAgaWYgKGFyZ1R5cGUgIT0gdHlwZSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGlmICghQXJnOjpp
c0Vhcmx5VXNlKHJvbGUpICYmICFBcmc6OmlzRWFybHlEZWYocm9sZSkpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh0bXAuaXNSZWco
KSk7CisgICAgICAgICAgICAgICAgdW5sb2NrKHRtcC5yZWcoKSk7CisgICAgICAgICAgICB9KTsK
KworICAgICAgICAvLyAKKyAgICB9CisKKyAgICBUbXBJbmZvJiBnZXRJbmZvKFRtcCB0bXApCisg
ICAgeworICAgICAgICByZXR1cm4gbV9zdGF0ZS5tYXBwaW5nLmFkZCh0bXAsIFRtcEluZm8oKSku
aXRlcmF0b3ItPnZhbHVlOworICAgIH0KKworICAgIFJlZyBmaWxsKFRtcCB0bXAsIEFyZzo6Um9s
ZSByb2xlKQorICAgIHsKKyAgICAgICAgaWYgKHJvbGUgPT0gQXJnOjpVc2VEZWYpIHsKKyAgICAg
ICAgICAgIEluc3QmIGluc3QgPSBtX2Jsb2NrLT5hdChtX2luc3RJbmRleCk7CisgICAgICAgICAg
ICByZXR1cm4gZmlsbCgKKyAgICAgICAgICAgICAgICB0bXAsIHJvbGUsCisgICAgICAgICAgICAg
ICAgWyZdIChSZWcgY2FuZGlkYXRlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgLy8g
VXNlRGVmIHJlcXVpcmVzIHVzIHRvIGxvb2sgYWhlYWQgYW5kIHNlZSBpZiB0aGUgY2FuZGlkYXRl
IHJlZ2lzdGVyIGlzCisgICAgICAgICAgICAgICAgICAgIC8vIGFjY2VwdGFibGUgdG8gdGhlIGxh
dGUgZGVmcywgbGF0ZSB1c2VzLCBhbmQgbGF0ZSBjbG9iYmVycy4gQW4gZWFzeSB3YXkgdG8gZG8K
KyAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBqdXN0IHRvIHNlZSBpZiB0aGUgcmVnaXN0
ZXIgYXBwZWFycyBhbnl3aGVyZSBpbiB0aGUgYXJndW1lbnQgbGlzdC4KKyAgICAgICAgICAgICAg
ICAgICAgLy8gTm90ZSB0aGF0IHdlIGRvbid0IGhhdmUgdG8gY29uc2lkZXIgbm9uLVRtcCBBcmdz
LCBiZWNhdXNlIHRob3NlIHdvdWxkIGFsbCBoYXZlCisgICAgICAgICAgICAgICAgICAgIC8vIGVh
cmx5IHVzZXMuCisgICAgICAgICAgICAgICAgICAgIGZvciAoQXJnJiBhcmcgOiBpbnN0LmFyZ3Mp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmcuaXNSZWcoKSAmJiBhcmcucmVnKCkg
PT0gY2FuZGlkYXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIE9mIGNvdXJz
ZSwgdGhlcmUgaXMgdGhlIGFubm95aW5nIFBhdGNoIGluc3RydWN0aW9uIGFuZCBpdHMgY2xvYmJl
cmVkCisgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVycy4KKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGluc3Qub3Bjb2RlID09IFBhdGNoICYmIGluc3QuZXh0cmFDbG9iYmVyZWRSZWdzKCku
Z2V0KGNhbmRpZGF0ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBmaWxsKHRtcCwgcm9sZSwgW10gKFJl
ZykgLT4gYm9vbCB7IHJldHVybiB0cnVlOyB9KTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBSZWcgZmlsbChUbXAgdG1wLCBBcmc6OlJvbGUgcm9sZSwg
Y29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIFRtcEluZm8mIGluZm8gPSBn
ZXRJbmZvKHRtcCk7CisgICAgICAgIGlmIChpbmZvLnJlZykgeworICAgICAgICAgICAgaWYgKHRt
cC5pc1JlZygpKQorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRtcC5yZWcoKSA9PSBp
bmZvLnJlZyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBpbmZvLnJlZzsKKyAg
ICAgICAgfQorCisgICAgICAgIFJlZyByZWcgPSB0bXAucmVnKCk7CisgICAgICAgIGlmICghcmVn
KSB7CisgICAgICAgICAgICBmb3IgKFJlZyBjYW5kaWRhdGUgOiByZWdzSW5Qcmlvcml0eU9yZGVy
KHR5cGUpKSB7CisgICAgICAgICAgICAgICAgUmVnSW5mbyYgcmVnSW5mbyA9IG1fc3RhdGUucmV2
ZXJzZU1hcHBpbmdbY2FuZGlkYXRlXTsKKyAgICAgICAgICAgICAgICBpZiAocmVnSW5mby5pc0xv
Y2tlZCB8fCByZWdJbmZvLnRtcCB8fCAhZnVuY3RvcihjYW5kaWRhdGUpKQorICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICByZWcgPSBjYW5kaWRhdGU7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcmVn
KSB7CisgICAgICAgICAgICAgICAgLy8gTmVlZCB0byBzcGlsbCBzb21ldGhpbmcuIFNwaWxsIHRo
ZSByZWcgdGhhdCBob2xkcyB0aGUgdG1wIHRoYXQgaGFzIHRoZSBsZWFzdCB3YXJtCisgICAgICAg
ICAgICAgICAgLy8gdXNlcy4KKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBtaW5XYXJtVXNlcyA9
IFVJTlRfTUFYOworICAgICAgICAgICAgICAgIGZvciAoUmVnIGNhbmRpZGF0ZSA6IHJlZ3NJblBy
aW9yaXR5T3JkZXIodHlwZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgUmVnSW5mbyYgcmVnSW5m
byA9IG1fc3RhdGUucmV2ZXJzZU1hcHBpbmdbY2FuZGlkYXRlXTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHJlZ0luZm8uaXNMb2NrZWQgfHwgIWZ1bmN0b3IoY2FuZGlkYXRlKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBu
dW1XYXJtVXNlcyA9IG1fdXNlQ291bnRzW3JlZ0luZm8udG1wXS5udW1XYXJtVXNlczsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKG51bVdhcm1Vc2VzIDwgbWluV2FybVVzZXMpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJlZyA9IGNhbmRpZGF0ZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1pbldhcm1Vc2VzID0gbnVtV2FybVVzZXM7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIXJlZykKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIFJlZygpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
c3BpbGwocmVnKTsKKyAgICAgICAgaWYgKEFyZzo6aXNBbnlVc2Uocm9sZSkgJiYgcm9sZSAhPSBB
cmc6OlNjcmF0Y2gpIHsKKyAgICAgICAgICAgIFN0YWNrU2xvdCogc2xvdCA9IHNwaWxsU2xvdCh0
bXApOworICAgICAgICAgICAgaWYgKGluZm8uaXNDb25zdGFudCkgeworICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHR5cGUgPT0gQXJnOjpHUCk7CisgICAgICAgICAgICAgICAgYWRkKFNo
dWZmbGVQYWlyKEFyZzo6aW1tNjQoaW5mby5jb25zdGFudCksIFRtcChyZWcpLCB3aWR0aChzbG90
KSkpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgYWRkKFNodWZmbGVQYWly
KEFyZzo6c3RhY2soc2xvdCksIFRtcChyZWcpLCB3aWR0aChzbG90KSkpOworICAgICAgICB9Cisg
ICAgICAgIG1fc3RhdGUucmV2ZXJzZU1hcHBpbmdbcmVnXS50bXAgPSB0bXA7CisgICAgICAgIGlu
Zm8ucmVnID0gcmVnOworICAgICAgICByZXR1cm4gcmVnOworICAgIH0KKworICAgIHZvaWQgc3Bp
bGwoUmVnIHJlZykKKyAgICB7CisgICAgICAgIFJlZ0luZm8mIHJlZ0luZm8gPSBtX3N0YXRlLnJl
dmVyc2VNYXBwaW5nW3JlZ107CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFyZWdJbmZvLmlzTG9j
a2VkKTsKKyAgICAgICAgCisgICAgICAgIFRtcEluZm8mIHRtcEluZm8gPSBnZXRJbmZvKHJlZ0lu
Zm8udG1wKTsKKworICAgICAgICBTdGFja1Nsb3QqIHNsb3QgPSBzcGlsbFNsb3QodG1wKTsKKyAg
ICAgICAgYWRkKFNodWZmbGVQYWlyKFRtcChyZWcpLCBBcmc6OnN0YWNrKHNsb3QpLCB3aWR0aChz
bG90KSkpOworICAgICAgICByZWdJbmZvLnRtcCA9IFRtcCgpOworICAgICAgICB0bXBJbmZvLnJl
ZyA9IFJlZygpOworICAgIH0KKworICAgIFJlZyBsb2NrKFJlZyByZWcpCisgICAgeworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChyZWcpOworICAgICAgICBtX3N0YXRlLnJldmVyc2VNYXBwaW5nLmZp
bmQocmVnKS0+dmFsdWUuaXNMb2NrZWQgPSB0cnVlOworICAgICAgICByZXR1cm4gcmVnOworICAg
IH0KKworICAgIHZvaWQgdW5sb2NrKFJlZyByZWcpCisgICAgeworICAgICAgICBtX3N0YXRlLnJl
dmVyc2VNYXBwaW5nLmZpbmQocmVnKS0+dmFsdWUuaXNMb2NrZWQgPSBmYWxzZTsKKyAgICB9CisK
KyAgICB2b2lkIGFkZChjb25zdCBTaHVmZmxlUGFpciYgcGFpcikKKyAgICB7CisgICAgICAgIG1f
b3RoZXJQYWlycy5hcHBlbmQocGFpcik7CisgICAgfQorCisgICAgdm9pZCBjb21taXQoKQorICAg
IHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2VxdWVuY2VQb2ludDsgKytp
KSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBtX3NlcXVlbmNlUG9pbnQ7IGogPCBt
X3NodWZmbGVQYWlycy5zaXplKCk7ICsraikgeworICAgICAgICAgICAgICAgIGlmIChtX3NodWZm
bGVQYWlyc1tpXS5kc3QoKSA9PSBtX3NodWZmbGVQYWlyc1tqXS5kc3QoKSkKKyAgICAgICAgICAg
ICAgICAgICAgbV9zaHVmZmxlUGFpcnNbaV0gPSBTaHVmZmxlUGFpcigpOworICAgICAgICAgICAg
ICAgIGlmIChtX3NodWZmbGVQYWlyc1tpXS5kc3QoKSA9PSBtX3NodWZmbGVQYWlyc1tqXS5zcmMo
KSkgeworICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3NodWZmbGVQYWlyc1tp
XS53aWR0aCgpID09IG1fc2h1ZmZsZVBhaXJzW2pdLndpZHRoKCkpOworICAgICAgICAgICAgICAg
ICAgICBtX3NodWZmbGVQYWlyc1tqXSA9IFNodWZmbGVQYWlyKAorICAgICAgICAgICAgICAgICAg
ICAgICAgbV9zaHVmZmxlUGFpcnNbaV0uc3JjKCksIG1fc2h1ZmZsZVBhaXJzW2pdLmRzdCgpLCBt
X3NodWZmbGVQYWlyc1tqXS53aWR0aCgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgbV9zaHVmZmxlUGFpcnMucmVtb3ZlQWxsTWF0Y2hpbmco
CisgICAgICAgICAgICBbJl0gKGNvbnN0IFNodWZmbGVQYWlyJiBwYWlyKSAtPiBib29sIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gIXBhaXI7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgbV9z
ZXF1ZW5jZVBvaW50ID0gbV9zaHVmZmxlUGFpcnMuc2l6ZSgpOworICAgIH0KKworICAgIHZvaWQg
ZW1pdFNodWZmbGUodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBtX2luc2VydGlvblNl
dC5pbnNlcnQoaW5kZXgsIGNyZWF0ZVNodWZmbGUobV9zaHVmZmxlUGFpcnMpKTsKKyAgICAgICAg
bV9zaHVmZmxlUGFpcnMucmVzaXplKDApOworICAgICAgICBtX3NlcXVlbmNlUG9pbnQgPSAwOwor
ICAgIH0KKworICAgIEFyZzo6V2lkdGggd2lkdGgoU3BpbGxTbG90KiBzbG90KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEFyZzo6d2lkdGhGb3JCeXRlcyhzbG90LT5ieXRlcygpKTsKKyAgICB9CisK
KyAgICAvLyBXZSBtYXkgY2hvb3NlIHRvIGRvIGEgZnVsbHdpZHRoIGRlZiBvciB1c2Ugb24gYSBz
dWJ3aWR0aCBzcGlsbCBzbG90LiBXaGVuIHRoaXMgaGFwcGVucywgd2UKKyAgICAvLyBuZWVkIHRv
IGluY3JlYXNlIHRoZSB3aWR0aCBvZiB0aGUgc2xvdC4gTm90ZSB0aGF0IHdlIHJlbHkgb24gc3Bp
bGwgc2xvdHMgaGF2aW5nIFpEZWYKKyAgICAvLyBzZW1hbnRpY3MuCisgICAgdm9pZCBlbnN1cmVX
aWR0aChTcGlsbFNsb3QqIHNsb3QsIEFyZzo6V2lkdGggd2lkdGgpCisgICAgeworICAgICAgICBz
bG90LT5lbnN1cmVTaXplKEFyZzo6Ynl0ZXMod2lkdGgpKTsKKyAgICB9CisgICAgCisgICAgU3Rh
Y2tTbG90KiBzcGlsbFNsb3QoVG1wIHRtcCkKKyAgICB7CisgICAgICAgIFN0YWNrU2xvdComIHJl
c3VsdCA9IG1fc3BpbGxTbG90cy5hZGQodG1wLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7Cisg
ICAgICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgICAgICByZXN1bHQgPSBtX2NvZGUuYWRkU3Rh
Y2tTbG90KAorICAgICAgICAgICAgICAgIG1fdG1wV2lkdGgud2lkdGgodG1wKSA8PSBBcmc6Oldp
ZHRoMzIgPyA0IDogOCwKKyAgICAgICAgICAgICAgICBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXMp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0
cnVjdCBUbXBJbmZvIHsKKyAgICAgICAgVG1wSW5mbygpCisgICAgICAgIHsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgZXhwbGljaXQgVG1wSW5mbyhSZWcgcmVnKQorICAgICAgICAgICAg
OiByZWcocmVnKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGludDY0
X3QgY29uc3RhbnQgeyAwIH07CisgICAgICAgIFJlZyByZWc7CisgICAgICAgIGJvb2wgaGFzQ29u
c3RhbnQgeyBmYWxzZSB9OworICAgIH07CisKKyAgICBzdHJ1Y3QgUmVnSW5mbyB7CisgICAgICAg
IFJlZ0luZm8oKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBleHBsaWNpdCBSZWdJ
bmZvKFRtcCB0bXApCisgICAgICAgICAgICA6IHRtcCh0bXApCisgICAgICAgIHsKKyAgICAgICAg
fQorCisgICAgICAgIFRtcCB0bXA7CisgICAgICAgIGJvb2wgaXNMb2NrZWQgeyBmYWxzZSB9Owor
ICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGNsYXNzIFJlZ01hcCB7Cisg
ICAgcHVibGljOgorICAgICAgICBSZWdNYXAoKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0
Y2ggKHR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgQXJnOjpHUDoKKyAgICAgICAgICAgICAgICBt
X3ZlY3Rvci5yZXNpemUoVCgpLCBNYWNyb0Fzc2VtYmxlcjo6bnVtYmVyT2ZSZWdpc3RlcnMoKSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFyZzo6RlA6CisgICAg
ICAgICAgICAgICAgbV92ZWN0b3IucmVzaXplKFQoKSwgTWFjcm9Bc3NlbWJsZXI6Om51bWJlck9m
RlBSZWdpc3RlcnMoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBUJiBvcGVyYXRvcltdKFJlZyByZWcpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICAgICAgY2FzZSBBcmc6OkdQOgorICAg
ICAgICAgICAgICAgIHJldHVybiBtX3ZlY3RvcltNYWNyb0Fzc2VtYmxlcjo6cmVnaXN0ZXJJbmRl
eChyZWcuZ3ByKCkpXTsKKyAgICAgICAgICAgIGNhc2UgQXJnOjpGUDoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbV92ZWN0b3JbTWFjcm9Bc3NlbWJsZXI6OnJlZ2lzdGVySW5kZXgocmVnLmZwcigp
KV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgVmVjdG9yPFQ+IG1fdmVjdG9yOworICAgIH07CisKKyAgICBzdHJ1Y3QgU3RhdGUgewor
ICAgICAgICBIYXNoTWFwPFRtcCwgVG1wSW5mbz4gbWFwcGluZzsgLy8gSWYgdGhlIG9yaWdpbmFs
IHByb2dyYW0gYXNrcyBmb3IgdGhpcyB0bXAsIHdoZXJlIGlzIGl0PworICAgICAgICBSZWdNYXA8
UmVnSW5mbz4gcmV2ZXJzZU1hcHBpbmc7IC8vIFdoYXQgdG1wIGRvZXMgdGhpcyByZWdpc3RlciBo
b2xkIHJpZ2h0IG5vdz8KKyAgICAgICAgYm9vbCB2aXNpdGVkQnlQcm9wYWdhdGlvbiB7IGZhbHNl
IH07CisgICAgICAgIGJvb2wgaXNTZXR0bGVkIHsgZmFsc2UgfTsKKyAgICB9OworCisgICAgZW51
bSBEZWF0aE1vZGUgeworICAgICAgICBFYXJseURlYXRoLAorICAgICAgICBMYXRlRGVhdGgKKyAg
ICB9OworCisgICAgc3RydWN0IERlYXRoIHsKKyAgICAgICAgRGVhdGgoKQorICAgICAgICB7Cisg
ICAgICAgIH0KKworICAgICAgICBEZWF0aChUbXAgdG1wLCBEZWF0aE1vZGUgZGVhdGhNb2RlKQor
ICAgICAgICAgICAgOiB0bXAodG1wKQorICAgICAgICAgICAgLCBkZWF0aE1vZGUoZGVhdGhNb2Rl
KQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFRtcCB0bXA7CisgICAg
ICAgIERlYXRoTW9kZSBkZWF0aE1vZGUgeyBFYXJseURlYXRoIH07CisgICAgfTsKKyAgICAKKyAg
ICBDb2RlJiBtX2NvZGU7CisgICAgVG1wTGl2ZW5lc3M8dHlwZT4gbV9saXZlbmVzczsKKyAgICBJ
bnN0TWFwPFZlY3RvcjxEZWF0aD4+IG1fZGVhdGhzOworICAgIEluZGV4TWFwPEJhc2ljQmxvY2ss
IFN0YXRlPiBtX2F0SGVhZDsKKyAgICBTdGF0ZSBtX3N0YXRlOworICAgIFVzZUNvdW50cyBtX3Vz
ZUNvdW50czsKKyAgICBUbXBXaWR0aCBtX3RtcFdpZHRoOworICAgIEhhc2hNYXA8VG1wLCBTdGFj
a1Nsb3QqPiBtX3NwaWxsU2xvdHM7CisgICAgQmFzaWNCbG9jayogbV9ibG9jayB7IG51bGxwdHIg
fTsKKyAgICB1bnNpZ25lZCBtX2luc3RJbmRleCB7IDAgfTsKKyAgICBWZWN0b3I8U2h1ZmZsZVBh
aXI+IG1fc2h1ZmZsZVBhaXJzOworICAgIHVuc2lnbmVkIG1fc2VxdWVuY2VQb2ludCB7IDAgfTsg
Ly8gUGFpcnMgYWJvdmUgdGhpcyBpbmRleCBleGVjdXRlIGNvbmN1cnJlbnRseSB0byB1cy4gUGFp
cnMgYmVsb3cgdGhpcyBpbmRleCBhcmUgdGhvdWdodCBvZiBhcyBoYXZpbmcgZXhlY3V0ZWQgaW4g
dGhlIHBhc3QuCisgICAgSW5zZXJ0aW9uU2V0IG1faW5zZXJ0aW9uU2V0OworICAgIGJvb2wgbV9j
aGFuZ2VkIHsgZmFsc2UgfTsKK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lk
IHNjYXZlbmdlUmVnaXN0ZXJzKENvZGUmIGNvZGUpCit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNj
b3BlKGNvZGUsICJzY2F2ZW5nZVJlZ2lzdGVycyIpOworCisgICAgYnJlYWtDcml0aWNhbEVkZ2Vz
KGNvZGUpOworCisgICAgeworICAgICAgICBTY2F2ZW5nZVJlZ2lzdGVyczxBcmc6OkZQPiBzY2F2
ZW5nZVJlZ2lzdGVycyhjb2RlKTsKKyAgICAgICAgc2NhdmVuZ2VSZWdpc3RlcnMucnVuKCk7Cisg
ICAgfQorICAgIHsKKyAgICAgICAgU2NhdmVuZ2VSZWdpc3RlcnM8QXJnOjpHUD4gc2NhdmVuZ2VS
ZWdpc3RlcnMoY29kZSk7CisgICAgICAgIHNjYXZlbmdlUmVnaXN0ZXJzLnJ1bigpOworICAgIH0K
K30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTY2F2ZW5n
ZVJlZ2lzdGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyU2NhdmVuZ2VSZWdpc3RlcnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyU2NhdmVuZ2VSZWdpc3RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBBaXJTY2F2ZW5nZVJlZ2lzdGVyc19oCisjZGVmaW5lIEFpclNjYXZlbmdlUmVnaXN0
ZXJzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKworLy8gVGhpcyBhbGxvY2F0ZXMg
dGVtcG9yYXJpZXMgdG8gcmVnaXN0ZXJzIG9yIHN0YWNrIGxvY2F0aW9ucyBiYXNlZCBvbiBmb3J3
YXJkIGZsb3cuIEl0IHdpbGwgaGFwcGlseQorLy8gY2hhbmdlIHRoZSBsb2NhdGlvbiBvZiBhIHRl
bXBvcmFyeSBpbiBjYXNlIHRoZSByZWdpc3RlciBpdCBoYWQgcGlja2VkIGJlY29tZXMgdW5hdmFp
bGFibGUgb3IgaW4KKy8vIGNhc2Ugd2UgbmVlZCB0aGUgdmFsdWUgYW5kIGl0J3MgY3VycmVudGx5
IG9uIHRoZSBzdGFjay4gSXQgYWxzbyBwZXJmb3JtcyBtYXRlcmlhbGl6YXRpb24gb2YKKy8vIGNv
bnN0YW50czogaWYgYSB0ZW1wb3JhcnkncyB2YWx1ZSBpcyBhbHdheXMgYSBjb25zdGFudCB0aGVu
IGluc3RlYWQgb2Ygc3BpbGxpbmcgd2Ugd2lsbCBzaW1wbHkKKy8vIHJlbWF0ZXJpYWxpemUuCisv
LworLy8gVGhpcyBwaGFzZSBpcyBtZWFudCB0byBydW4gYWZ0ZXIgdGhlIHByaW1hcnkgcmVnaXN0
ZXIgYWxsb2NhdG9yLiBUaGUgcHJpbWFyeSByZWdpc3RlciBhbGxvY2F0b3IKKy8vIGlzIGJlc3Qg
b2ZmIGhhbmRsaW5nIHNwaWxscyBieSBzaW1wbHkgbGVhdmluZyBzcGlsbGVkIFRtcHMgYWxvbmUu
IFRoaXMgcGhhc2Ugd2lsbCBlbWl0IHByb3BlcgorLy8gc3BpbGwgY29kZSwgYW5kIGl0IHdpbGwg
ZG8gaXQgbW9yZSBlZmZpY2llbnRseSB0aGFuIGNsYXNzaWNhbCBzcGlsbGluZyBhbGdvcml0aG1z
Lgordm9pZCBzY2F2ZW5nZVJlZ2lzdGVycyhDb2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJT
Y2F2ZW5nZVJlZ2lzdGVyc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyU3BpbGxFdmVyeXRoaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAJKHJldmlzaW9uIDE5NTA4MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTMwLDcgKzEzMCw2IEBAIHZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUmIGNv
ZGUpCiAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocm9sZSkgewogICAgICAgICAgICAgICAg
ICAgICBjYXNlIEFyZzo6VXNlOgogICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6Q29sZFVz
ZToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkVhcmx5RGVmOgogICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogcmVnc0luUHJpb3JpdHlPcmRlcih0eXBlKSkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2V0QmVmb3JlLmdldChyZWcpKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEJlZm9yZS5zZXQocmVnKTsKQEAgLTE1
NCw2ICsxNTMsNyBAQCB2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJiBjb2RlKQogICAgICAgICAg
ICAgICAgICAgICBjYXNlIEFyZzo6TGF0ZVVzZToKICAgICAgICAgICAgICAgICAgICAgY2FzZSBB
cmc6OkxhdGVDb2xkVXNlOgogICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6U2NyYXRjaDoK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkVhcmx5RGVmOgogICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yIChSZWcgcmVnIDogcmVnc0luUHJpb3JpdHlPcmRlcih0eXBlKSkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2V0QmVmb3JlLmdldChyZWcpICYmICFzZXRB
ZnRlci5nZXQocmVnKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBZnRl
ci5zZXQocmVnKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tT
bG90LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFj
a1Nsb3QuaAkocmV2aXNpb24gMTk1MDgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJTdGFja1Nsb3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsMTIgQEAgcHVibGlj
OgogICAgIGJvb2wgaXNMb2NrZWQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQgPT0gU3RhY2tTbG90
S2luZDo6TG9ja2VkOyB9CiAgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2lu
ZGV4OyB9CiAKKyAgICB2b2lkIGVuc3VyZVNpemUodW5zaWduZWQgcmVxdWVzdGVkU2l6ZSkKKyAg
ICB7CisgICAgICAgIEFTU0VSVCghbV9vZmZzZXRGcm9tRlApOworICAgICAgICBtX2J5dGVTaXpl
ID0gc3RkOjptYXgobV9ieXRlU2l6ZSwgcmVxdWVzdGVkU2l6ZSk7CisgICAgfQorCiAgICAgdW5z
aWduZWQgYWxpZ25tZW50KCkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChieXRlU2l6ZSgpIDw9
IDEpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZhbGlkYXRlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZhbGlkYXRlLmNw
cAkocmV2aXNpb24gMTk1MDgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJW
YWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDYgKzgyLDEzIEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICAgICAgVkFMSURBVEUoaXNUZXJtaW5hbChpbnN0Lm9wY29kZSksICgiQXQg
IiwgaW5zdCwgIiBpbiAiLCAqYmxvY2spKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgICAgIFZBTElEQVRFKCFpc1Rlcm1pbmFsKGluc3Qub3Bjb2RlKSwgKCJBdCAiLCBp
bnN0LCAiIGluICIsICpibG9jaykpOworCisgICAgICAgICAgICAgICAgLy8gZm9yRWFjaEFyZyBt
dXN0IHJldHVybiBBcmcmJ3MgdGhhdCBwb2ludCBpbnRvIHRoZSBhcmdzIGFycmF5LgorICAgICAg
ICAgICAgICAgIGluc3QuZm9yRWFjaEFyZygKKyAgICAgICAgICAgICAgICAgICAgWyZdIChBcmcm
IGFyZywgQXJnOjpSb2xlLCBBcmc6OlR5cGUsIEFyZzo6V2lkdGgpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFZBTElEQVRFKCZhcmcgPj0gaW5zdC5hcmdzWzBdLCAoIkF0ICIsIGFyZywgIiBp
biAiLCBpbnN0LCAiIGluICIsICpibG9jaykpOworICAgICAgICAgICAgICAgICAgICAgICAgVkFM
SURBVEUoJmFyZyA8PSBpbnN0LmFyZ3MubGFzdCgpLCAoIkF0ICIsIGFyZywgIiBpbiAiLCBpbnN0
LCAiIGluICIsICpibG9jaykpOworICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nl
c3NvckJsb2NrcygpKQogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbGlkQmxvY2tzLmNvbnRh
aW5zKHN1Y2Nlc3NvciksICgiSW4gIiwgKmJsb2NrKSk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9J
bmRleFNwYXJzZVNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0luZGV4U3BhcnNl
U2V0LmgJKHJldmlzaW9uIDE5NTA4MykKKysrIFNvdXJjZS9XVEYvd3RmL0luZGV4U3BhcnNlU2V0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDggKzQ3LDggQEAgY2xhc3MgSW5kZXhTcGFyc2VTZXQg
ewogcHVibGljOgogICAgIGV4cGxpY2l0IEluZGV4U3BhcnNlU2V0KHVuc2lnbmVkIG1heFZhbHVl
KTsKIAotICAgIHZvaWQgYWRkKHVuc2lnbmVkKTsKLSAgICB2b2lkIHJlbW92ZSh1bnNpZ25lZCk7
CisgICAgYm9vbCBhZGQodW5zaWduZWQpOworICAgIGJvb2wgcmVtb3ZlKHVuc2lnbmVkKTsKICAg
ICB2b2lkIGNsZWFyKCk7CiAKICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3Q7CkBAIC03NCwyNiAr
NzQsMzAgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgogaW5saW5lIHZvaWQg
SW5kZXhTcGFyc2VTZXQ8T3ZlcmZsb3dIYW5kbGVyPjo6YWRkKHVuc2lnbmVkIHZhbHVlKQogewog
ICAgIGlmIChjb250YWlucyh2YWx1ZSkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgdW5zaWduZWQgbmV3UG9zaXRpb24gPSBtX3ZhbHVlcy5zaXplKCk7CiAg
ICAgbV92YWx1ZXMuYXBwZW5kKHZhbHVlKTsKICAgICBtX21hcFt2YWx1ZV0gPSBuZXdQb3NpdGlv
bjsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3ZlcmZsb3dIYW5k
bGVyPgotaW5saW5lIHZvaWQgSW5kZXhTcGFyc2VTZXQ8T3ZlcmZsb3dIYW5kbGVyPjo6cmVtb3Zl
KHVuc2lnbmVkIHZhbHVlKQoraW5saW5lIGJvb2wgSW5kZXhTcGFyc2VTZXQ8T3ZlcmZsb3dIYW5k
bGVyPjo6cmVtb3ZlKHVuc2lnbmVkIHZhbHVlKQogewogICAgIHVuc2lnbmVkIHBvc2l0aW9uID0g
bV9tYXBbdmFsdWVdOwogICAgIGlmIChwb3NpdGlvbiA+PSBtX3ZhbHVlcy5zaXplKCkpCi0gICAg
ICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKG1fdmFsdWVzW3Bv
c2l0aW9uXSA9PSB2YWx1ZSkgewogICAgICAgICB1bnNpZ25lZCBsYXN0VmFsdWUgPSBtX3ZhbHVl
cy5sYXN0KCk7CiAgICAgICAgIG1fdmFsdWVzW3Bvc2l0aW9uXSA9IGxhc3RWYWx1ZTsKICAgICAg
ICAgbV9tYXBbbGFzdFZhbHVlXSA9IHBvc2l0aW9uOwogICAgICAgICBtX3ZhbHVlcy5yZW1vdmVM
YXN0KCk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKworICAgIHJldHVybiBmYWxzZTsK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269178</attachid>
            <date>2016-01-16 13:02:28 -0800</date>
            <delta_ts>2016-01-16 16:40:36 -0800</delta_ts>
            <desc>lots more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>73179</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0
YWNrLmNwcAkocmV2aXNpb24gMTk1MDgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJBbGxvY2F0ZVN0YWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDggKzE2Niw0NyBA
QCB2b2lkIGFsbG9jYXRlU3RhY2soQ29kZSYgY29kZSkKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
bnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTspIHsKICAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIkFuYWx5emluZzogIiwgYmxvY2st
PmF0KGluc3RJbmRleCksICJcbiIpOworCisgICAgICAgICAgICAvLyBLaWxsIGRlYWQgc3RvcmVz
LiBGb3Igc2ltcGxpY2l0eSB3ZSBzYXkgdGhhdCBhIHN0b3JlIGlzIGtpbGxhYmxlIGlmIGl0IGhh
cyBvbmx5IGxhdGUKKyAgICAgICAgICAgIC8vIGRlZnMgYW5kIHRob3NlIGxhdGUgZGVmcyBhcmUg
dG8gdGhpbmdzIHRoYXQgYXJlIGRlYWQgcmlnaHQgbm93LiBXZSBvbmx5IGRvIHRoYXQKKyAgICAg
ICAgICAgIC8vIGJlY2F1c2UgdGhhdCdzIHRoZSBvbmx5IGtpbmQgb2YgZGVhZCBzdGFjayBzdG9y
ZSB3ZSB3aWxsIHNlZSBoZXJlLgorICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChp
bnN0SW5kZXgpOworICAgICAgICAgICAgaWYgKCFpbnN0Lmhhc05vbkFyZ0VmZmVjdHMoKSkgewor
ICAgICAgICAgICAgICAgIGJvb2wgb2sgPSB0cnVlOworICAgICAgICAgICAgICAgIGluc3QuZm9y
RWFjaEFyZygKKyAgICAgICAgICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJv
bGUsIEFyZzo6VHlwZSB0eXBlLCBBcmc6OldpZHRoIHdpZHRoKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoQXJnOjppc0Vhcmx5RGVmKHJvbGUpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IUFyZzo6aXNMYXRlRGVmKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlzU3RhY2soKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG9rID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgU3RhY2tTbG90KiBzbG90ID0gYXJnLnN0YWNrU2xvdCgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHNsb3QtPmtpbmQoKSAhPSBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXMp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvayA9IGZhbHNlOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2FsQ2FsYy5pc0xpdmUoc2xvdCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvayA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICAgICAgaWYgKG9rKQorICAgICAgICAgICAgICAgICAgICBp
bnN0ID0gSW5zdCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAgICBp
bnRlcmZlcmUoaW5zdEluZGV4KTsKICAgICAgICAgICAgIGxvY2FsQ2FsYy5leGVjdXRlKGluc3RJ
bmRleCk7CisKKyAgICAgICAgICAgIGJsb2NrLT5pbnN0cygpLnJlbW92ZUFsbE1hdGNoaW5nKAor
ICAgICAgICAgICAgICAgIFsmXSAoY29uc3QgSW5zdCYgaW5zdCkgLT4gYm9vbCB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiAhaW5zdDsKKyAgICAgICAgICAgICAgICB9KTsKICAgICAgICAg
fQogICAgICAgICBpbnRlcmZlcmUoLTEpOwogICAgIH0KQEAgLTIzMiwzMyArMjcxLDQyIEBAIHZv
aWQgYWxsb2NhdGVTdGFjayhDb2RlJiBjb2RlKQogICAgIC8vIFdlIHdvdWxkIGhhdmUgdG8gc2Nh
dmVuZ2UgZm9yIHRlbXBvcmFyaWVzIGlmIHRoaXMgaGFwcGVuZWQuIEZvcnR1bmF0ZWx5LCB0aGlz
IGNhc2Ugd2lsbCBiZQogICAgIC8vIGV4dHJlbWVseSByYXJlIHNvIHdlIGNhbiBkbyBjcmF6eSB0
aGluZ3Mgd2hlbiBpdCBhcmlzZXMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1MjUzMAotICAgIAorCisgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNl
dChjb2RlKTsKICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgewogICAgICAgICBm
b3IgKEluc3QmIGluc3QgOiAqYmxvY2spIHsKICAgICAgICAgICAgIGluc3QuZm9yRWFjaEFyZygK
LSAgICAgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUsIEFyZzo6VHlwZSwgQXJn
OjpXaWR0aCB3aWR0aCkKLSAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgWyZdIChB
cmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSwgQXJnOjpXaWR0aCB3aWR0aCkgewor
ICAgICAgICAgICAgICAgICAgICBhdXRvIHN0YWNrQWRkciA9IFsmXSAoaW50MzJfdCBvZmZzZXQp
IC0+IEFyZyB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQXJnOjpzdGFja0FkZHIo
b2Zmc2V0LCBjb2RlLmZyYW1lU2l6ZSgpLCB3aWR0aCk7CisgICAgICAgICAgICAgICAgICAgIH07
CisgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGFyZy5r
aW5kKCkpIHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OlN0YWNrOiB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBhcmcgPSBBcmc6OmFkZHIoCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhcmcub2Zmc2V0KCkgKyBhcmcuc3RhY2tTbG90KCktPm9mZnNldEZyb21GUCgp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlzVmFsaWRGb3JtKHdpZHRoKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IEFyZzo6YWRkcigKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVG1wKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJS
ZWdpc3RlciksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZy5vZmZzZXQoKSAr
IGNvZGUuZnJhbWVTaXplKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBz
bG90ID0gYXJnLnN0YWNrU2xvdCgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6
aXNaRGVmKHJvbGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2xvdC0+a2luZCgp
ID09IFN0YWNrU2xvdEtpbmQ6OkFub255bW91cworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICYmIHNsb3QtPmJ5dGVTaXplKCkgPiBBcmc6OmJ5dGVzKHdpZHRoKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIEN1cnJlbnRseSB3ZSBvbmx5IGhhbmRsZSB0aGlzIHNpbXBsZSBj
YXNlIGJlY2F1c2UgaXQncyB0aGUgb25seSBvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyB0aGF0IGFyaXNlczogWkRlZidzIGFyZSBvbmx5IDMyLWJpdCByaWdodCBub3cuIFNvLCB3
aGVuIHdlIGhpdCB0aGVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzc2VydGlv
bnMgaXQgbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIGltcGxlbWVudCB0aG9zZSBvdGhlciBraW5kcyBv
ZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHplcm8gZmlsbHMuCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvdC0+Ynl0ZVNpemUoKSA9PSA4KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh3aWR0aCA9PSBBcmc6
OldpZHRoMzIpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgcmVseSBvbiB0
aGUgZmFjdCB0aGF0IHRoZXJlIG11c3QgYmUgc29tZSB3YXkgdG8gbW92ZSB6ZXJvIHRvIGEKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtZW1vcnkgbG9jYXRpb24gd2l0aG91dCBmaXJz
dCBidXJuaW5nIGEgcmVnaXN0ZXIuIE9uIEFSTSwgd2Ugd291bGQgZG8KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyB0aGlzIHVzaW5nIHpyLgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGlzVmFsaWRGb3JtKE1vdmUzMiwgQXJnOjpJbW0sIEFyZzo6QWRk
cikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RJbmRleCArIDEsIE1vdmUzMiwgaW5z
dC5vcmlnaW4sIEFyZzo6aW1tKDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGFja0FkZHIoYXJnLm9mZnNldCgpICsgNCArIHNsb3QtPm9mZnNldEZyb21GUCgpKSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBzdGFj
a0FkZHIoYXJnLm9mZnNldCgpICsgc2xvdC0+b2Zmc2V0RnJvbUZQKCkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBBcmc6OkNhbGxBcmc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBB
cmc6OmFkZHIoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVG1wKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcub2Zmc2V0KCkg
LSBjb2RlLmZyYW1lU2l6ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlz
VmFsaWRGb3JtKHdpZHRoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IEFy
Zzo6YWRkcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG1wKE1hY3JvQXNzZW1i
bGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFyZy5vZmZzZXQoKSArIGNvZGUuZnJhbWVTaXplKCkpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gc3RhY2tBZGRyKGFyZy5vZmZz
ZXQoKSAtIGNvZGUuZnJhbWVTaXplKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKQEAgLTI2Niw2ICszMTQsNyBAQCB2b2lkIGFsbG9jYXRlU3RhY2soQ29kZSYgY29kZSkK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICApOwogICAgICAgICB9CisgICAgICAgIGlu
c2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJBcmcuaAkocmV2aXNpb24gMTk1MDg0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDYgKzEyNiw3
IEBAIHB1YmxpYzoKICAgICAgICAgLy8gZGVwZW5kaW5nIG9uIHRoZSBraW5kIG9mIHRoZSBhcmd1
bWVudDoKICAgICAgICAgLy8KICAgICAgICAgLy8gRm9yIHJlZ2lzdGVyOiB0aGUgdXBwZXIgYml0
cyBhcmUgemVyby1maWxsZWQuCisgICAgICAgIC8vIEZvciBhbm9ueW1vdXMgc3RhY2sgc2xvdDog
dGhlIHVwcGVyIGJpdHMgYXJlIHplcm8tZmlsbGVkLgogICAgICAgICAvLyBGb3IgYWRkcmVzczog
dGhlIHVwcGVyIGJpdHMgYXJlIG5vdCB0b3VjaGVkIChpLmUuIHdlIGRvIGEgMzItYml0IHN0b3Jl
IGluIG91ciBleGFtcGxlKS4KICAgICAgICAgLy8gRm9yIHRtcDogZWl0aGVyIHRoZSB1cHBlciBi
aXRzIGFyZSBub3QgdG91Y2hlZCBvciB0aGV5IGFyZSB6ZXJvLWZpbGxlZCwgYW5kIHdlIHdvbid0
IGtub3cKICAgICAgICAgLy8gd2hpY2ggdW50aWwgd2UgbG93ZXIgdGhlIHRtcCB0byBlaXRoZXIg
YSBTdGFja1Nsb3Qgb3IgYSBSZWcuCkBAIC01MTMsNiArNTE0LDE0IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKKyAgICBzdGF0aWMgQXJnIHN0YWNrQWRkcihpbnQz
Ml90IG9mZnNldEZyb21GUCwgdW5zaWduZWQgZnJhbWVTaXplLCBXaWR0aCB3aWR0aCkKKyAgICB7
CisgICAgICAgIEFyZyByZXN1bHQgPSBBcmc6OmFkZHIoVG1wKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyKSwgb2Zmc2V0RnJvbUZQKTsKKyAgICAgICAgaWYgKCFyZXN1bHQuaXNWYWxpZEZvcm0o
d2lkdGgpKQorICAgICAgICAgICAgcmVzdWx0ID0gQXJnOjphZGRyKFRtcChNYWNyb0Fzc2VtYmxl
cjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpLCBvZmZzZXRGcm9tRlAgKyBmcmFtZVNpemUpOworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwogICAgIC8vIElmIHlvdSBkb24ndCBwYXNzIGEg
V2lkdGgsIHRoaXMgb3B0aW1pc3RpY2FsbHkgYXNzdW1lcyB0aGF0IHlvdSdyZSB1c2luZyB0aGUg
cmlnaHQgd2lkdGguCiAgICAgc3RhdGljIGJvb2wgaXNWYWxpZFNjYWxlKHVuc2lnbmVkIHNjYWxl
LCBPcHRpb25hbDxXaWR0aD4gd2lkdGggPSBOdWxsb3B0KQogICAgIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCShyZXZpc2lvbiAxOTUwODQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsgbmFtZXNwYWNlIEFpciB7CiAKK2NsYXNzIEJsb2NrSW5zZXJ0aW9uU2V0OwogY2xhc3MgQ29k
ZTsKIGNsYXNzIEluc2VydGlvblNldDsKIApAQCAtMTI3LDYgKzEyOCw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAKIHByaXZhdGU6CisgICAgZnJp
ZW5kIGNsYXNzIEJsb2NrSW5zZXJ0aW9uU2V0OwogICAgIGZyaWVuZCBjbGFzcyBDb2RlOwogICAg
IGZyaWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckJsb2NrSW5zZXJ0aW9uU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJsb2NrSW5zZXJ0aW9uU2V0LmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmxvY2tJbnNlcnRpb25T
ZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkFpckJsb2NrSW5zZXJ0aW9uU2V0LmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5j
bHVkZSAiQWlyQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisjaW5j
bHVkZSA8d3RmL0J1YmJsZVNvcnQuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CisKK0Jsb2NrSW5zZXJ0aW9uU2V0OjpCbG9ja0luc2VydGlvblNldChDb2RlICZjb2RlKQorICAg
IDogbV9jb2RlKGNvZGUpCit7Cit9CisKK0Jsb2NrSW5zZXJ0aW9uU2V0Ojp+QmxvY2tJbnNlcnRp
b25TZXQoKSB7IH0KKwordm9pZCBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KEJsb2NrSW5zZXJ0
aW9uJiYgaW5zZXJ0aW9uKQoreworICAgIG1faW5zZXJ0aW9ucy5hcHBlbmQoV1RGTW92ZShpbnNl
cnRpb24pKTsKK30KKworQmFzaWNCbG9jayogQmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydCh1bnNp
Z25lZCBpbmRleCwgZG91YmxlIGZyZXF1ZW5jeSkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFz
aWNCbG9jaz4gYmxvY2sobmV3IEJhc2ljQmxvY2soVUlOVF9NQVgsIGZyZXF1ZW5jeSkpOworICAg
IEJhc2ljQmxvY2sqIHJlc3VsdCA9IGJsb2NrLmdldCgpOworICAgIGluc2VydChCbG9ja0luc2Vy
dGlvbihpbmRleCwgV1RGTW92ZShibG9jaykpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitC
YXNpY0Jsb2NrKiBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0QmVmb3JlKEJhc2ljQmxvY2sqIGJl
Zm9yZSwgZG91YmxlIGZyZXF1ZW5jeSkKK3sKKyAgICByZXR1cm4gaW5zZXJ0KGJlZm9yZS0+aW5k
ZXgoKSwgZnJlcXVlbmN5ID09IGZyZXF1ZW5jeSA/IGZyZXF1ZW5jeSA6IGJlZm9yZS0+ZnJlcXVl
bmN5KCkpOworfQorCitCYXNpY0Jsb2NrKiBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0QWZ0ZXIo
QmFzaWNCbG9jayogYWZ0ZXIsIGRvdWJsZSBmcmVxdWVuY3kpCit7CisgICAgcmV0dXJuIGluc2Vy
dChhZnRlci0+aW5kZXgoKSArIDEsIGZyZXF1ZW5jeSA9PSBmcmVxdWVuY3kgPyBmcmVxdWVuY3kg
OiBhZnRlci0+ZnJlcXVlbmN5KCkpOworfQorCitib29sIEJsb2NrSW5zZXJ0aW9uU2V0OjpleGVj
dXRlKCkKK3sKKyAgICBpZiAobV9pbnNlcnRpb25zLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIAorICAgIC8vIFdlIGFsbG93IGluc2VydGlvbnMgdG8gYmUgZ2l2ZW4gdG8g
dXMgaW4gYW55IG9yZGVyLiBTbywgd2UgbmVlZCB0byBzb3J0IHRoZW0gYmVmb3JlCisgICAgLy8g
cnVubmluZyBXVEY6OmV4ZWN1dGVJbnNlcnRpb25zLiBXZSBzdHJvbmdseSBwcmVmZXIgYSBzdGFi
bGUgc29ydCBhbmQgd2Ugd2FudCBpdCB0byBiZQorICAgIC8vIGZhc3QsIHNvIHdlIHVzZSBidWJi
bGUgc29ydC4KKyAgICBidWJibGVTb3J0KG1faW5zZXJ0aW9ucy5iZWdpbigpLCBtX2luc2VydGlv
bnMuZW5kKCkpOworCisgICAgZXhlY3V0ZUluc2VydGlvbnMobV9jb2RlLm1fYmxvY2tzLCBtX2lu
c2VydGlvbnMpOworICAgIAorICAgIC8vIFBydW5lIG91dCBlbXB0eSBlbnRyaWVzLiBUaGlzIGlz
bid0IHN0cmljdGx5IG5lY2Vzc2FyeSBidXQgaXQncworICAgIC8vIGhlYWx0aHkgdG8ga2VlcCB0
aGUgYmxvY2sgbGlzdCBmcm9tIGdyb3dpbmcuCisgICAgbV9wcm9jLm1fYmxvY2tzLnJlbW92ZUFs
bE1hdGNoaW5nKAorICAgICAgICBbJl0gKHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPiYgYmxv
Y2tQdHIpIC0+IGJvb2wgeworICAgICAgICAgICAgcmV0dXJuICFibG9ja1B0cjsKKyAgICAgICAg
fSk7CisgICAgCisgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGJsb2NrcyBrbm93IHRoZWlyIG5l
dyBpbmRpY2VzLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Byb2MubV9ibG9ja3Mu
c2l6ZSgpOyArK2kpCisgICAgICAgIG1fcHJvYy5tX2Jsb2Nrc1tpXS0+bV9pbmRleCA9IGk7Cisg
ICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJCbG9ja0luc2VydGlvblNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQmxvY2tJbnNlcnRpb25TZXQuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmxvY2tJbnNlcnRpb25TZXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyQmxvY2tJbnNlcnRpb25TZXRfaAorI2RlZmluZSBB
aXJCbG9ja0luc2VydGlvblNldF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
QWlyQ29kZS5oIgorI2luY2x1ZGUgPHd0Zi9JbnNlcnRpb24uaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsK
KworY2xhc3MgSW5zZXJ0aW9uU2V0OworCit0eXBlZGVmIFdURjo6SW5zZXJ0aW9uPHN0ZDo6dW5p
cXVlX3B0cjxCYXNpY0Jsb2NrPj4gQmxvY2tJbnNlcnRpb247CisKK2NsYXNzIEJsb2NrSW5zZXJ0
aW9uU2V0IHsKK3B1YmxpYzoKKyAgICBCbG9ja0luc2VydGlvblNldChQcm9jZWR1cmUmKTsKKyAg
ICB+QmxvY2tJbnNlcnRpb25TZXQoKTsKKyAgICAKKyAgICB2b2lkIGluc2VydChCbG9ja0luc2Vy
dGlvbiYmKTsKKworICAgIC8vIEluc2VydCBhIG5ldyBibG9jayBhdCBhIGdpdmVuIGluZGV4Lgor
ICAgIEJhc2ljQmxvY2sqIGluc2VydCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIGZyZXF1ZW5jeSA9
IFBOYU4pOworCisgICAgLy8gSW5zZXJ0cyBhIG5ldyBibG9jayBiZWZvcmUgdGhlIGdpdmVuIGJs
b2NrLiBVc3VhbGx5IHlvdSB3aWxsIG5vdCBwYXNzIHRoZSBmcmVxdWVuY3kKKyAgICAvLyBhcmd1
bWVudC4gUGFzc2luZyBQTmFOIGNhdXNlcyB1cyB0byBqdXN0IHVzZSB0aGUgZnJlcXVlbmN5IG9m
IHRoZSAnYmVmb3JlJyBibG9jay4gVGhhdCdzCisgICAgLy8gdXN1YWxseSB3aGF0IHlvdSB3YW50
LgorICAgIEJhc2ljQmxvY2sqIGluc2VydEJlZm9yZShCYXNpY0Jsb2NrKiBiZWZvcmUsIGRvdWJs
ZSBmcmVxdWVuY3kgPSBQTmFOKTsKKworICAgIC8vIEluc2VydHMgYSBuZXcgYmxvY2sgYWZ0ZXIg
dGhlIGdpdmVuIGJsb2NrLgorICAgIEJhc2ljQmxvY2sqIGluc2VydEFmdGVyKEJhc2ljQmxvY2sq
IGFmdGVyLCBkb3VibGUgZnJlcXVlbmN5ID0gUE5hTik7CisKKyAgICBib29sIGV4ZWN1dGUoKTsK
KworcHJpdmF0ZToKKyAgICBDb2RlJiBtX2NvZGU7CisgICAgVmVjdG9yPEJsb2NrSW5zZXJ0aW9u
LCA4PiBtX2luc2VydGlvbnM7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWly
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyQmxvY2tJbnNlcnRp
b25TZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJyZWFrQ3Jp
dGljYWxFZGdlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJCcmVha0NyaXRpY2FsRWRnZXMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJCcmVha0NyaXRpY2FsRWRnZXMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyQnJlYWtDcml0aWNhbEVk
Z2VzLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2lu
Y2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBicmVha0NyaXRpY2FsRWRnZXMoQ29kZSYgY29kZSkK
K3sKKyAgICBCbG9ja0luc2VydGlvblNldCBpbnNlcnRpb25TZXQoY29kZSk7CisgICAgCisgICAg
Zm9yICh1bnNpZ25lZCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IGNvZGUubnVtQmxvY2tz
KCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGNvZGVbYmxv
Y2tJbmRleF07CisgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICBpZiAoYmxvY2stPm51bVN1Y2Nlc3NvcnMoKSA8PSAxKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMo
KTsgaS0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayomIHN1Y2Nlc3NvciA9IGJsb2NrLT5z
dWNjZXNzb3JCbG9jayhpKTsKKyAgICAgICAgICAgIGlmIChzdWNjZXNzb3ItPnByZWRlY2Vzc29y
cy5zaXplKCkgPD0gMSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAg
QmFzaWNCbG9jayogcGFkID0gaW5zZXJpdG9uU2V0Lmluc2VydEJlZm9yZShzdWNjZXNzb3IsIHN1
Y2Nlc3Nvci0+ZnJlcXVlbmN5KCkpOworICAgICAgICAgICAgcGFkLT5hcHBlbmQoSnVtcCwgc3Vj
Y2Vzc29yLT5hdCgwKS5vcmlnaW4pOworICAgICAgICAgICAgcGFkLT5zdWNjZXNzb3JzKCkuYXBw
ZW5kKEZyZXF1ZW50ZWRCbG9jayhzdWNjZXNzb3IpKTsKKyAgICAgICAgICAgIHN1Y2Nlc3Nvci0+
cmVwbGFjZVByZWRlY2Vzc29yKGJsb2NrLCBwYWQpOworICAgICAgICAgICAgc3VjY2Vzc29yID0g
cGFkOworICAgICAgICB9CisgICAgfQorCisgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoKTsKK30K
KworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCcmVha0NyaXRp
Y2FsRWRnZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckJyZWFrQ3JpdGljYWxFZGdlcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJCcmVha0NyaXRpY2FsRWRnZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBBaXJCcmVha0NyaXRpY2FsRWRnZXNfaAorI2RlZmluZSBBaXJCcmVha0NyaXRpY2Fs
RWRnZXNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCit2b2lkIGJyZWFrQ3JpdGlj
YWxFZGdlcyhDb2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJCcmVha0NyaXRpY2FsRWRnZXNf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckVtaXRTaHVmZmxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbWl0U2h1ZmZs
ZS5oCShyZXZpc2lvbiAxOTUwODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckVtaXRTaHVmZmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDIzIEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgfQogCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNodWZmbGVQYWlyJiBv
dGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3NyYyA9PSBvdGhlci5tX3NyYwor
ICAgICAgICAgICAgJiYgbV9kc3QgPT0gb3RoZXIubV9kc3QKKyAgICAgICAgICAgICYmIG1fd2lk
dGggPT0gb3RoZXIubV93aWR0aDsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
U2h1ZmZsZVBhaXImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMg
PT0gb3RoZXIpOworICAgIH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzICE9IFNodWZmbGVQYWlyKCk7CisgICAgfQorCiAg
ICAgY29uc3QgQXJnJiBzcmMoKSBjb25zdCB7IHJldHVybiBtX3NyYzsgfQogICAgIGNvbnN0IEFy
ZyYgZHN0KCkgY29uc3QgeyByZXR1cm4gbV9kc3Q7IH0KIApAQCAtNjYsNiArODMsOSBAQCBwcml2
YXRlOgogICAgIEFyZzo6V2lkdGggbV93aWR0aCB7IEFyZzo6V2lkdGg4IH07CiB9OwogCisvLyBD
cmVhdGVzIGEgU2h1ZmZsZSBpbnN0cnVjdGlvbi4KK0luc3QgY3JlYXRlU2h1ZmZsZShjb25zdCBW
ZWN0b3I8U2h1ZmZsZVBhaXI+Jik7CisKIC8vIFBlcmZvcm0gYSBzaHVmZmxlIG9mIGEgZ2l2ZW4g
dHlwZS4gVGhlIHNjcmF0Y2ggYXJndW1lbnQgaXMgbWFuZGF0b3J5LiBZb3Ugc2hvdWxkIHBhc3Mg
aXQgYXMKIC8vIGZvbGxvd3M6IElmIHlvdSBrbm93IHRoYXQgeW91IGhhdmUgc2NyYXRjaCByZWdp
c3RlcnMgb3IgdGVtcG9yYXJpZXMgYXZhaWxhYmxlIC0gdGhhdCBpcywgdGhleSdyZQogLy8gcmVn
aXN0ZXJzIHRoYXQgYXJlIG5vdCBtZW50aW9uZWQgaW4gdGhlIHNodWZmbGUsIGhhdmUgdGhlIHNh
bWUgdHlwZSBhcyB0aGUgc2h1ZmZsZSwgYW5kIGFyZSBub3QKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyRml4U3BpbGxTbG90WkRlZi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4U3BpbGxTbG90WkRlZi5oCShyZXZpc2lvbiAx
OTUwODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeFNwaWxsU2xvdFpE
ZWYuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgQWlyRml4U3BpbGxTbG90WkRlZl9o
Ci0jZGVmaW5lIEFpckZpeFNwaWxsU2xvdFpEZWZfaAotCi0jaW5jbHVkZSAiQWlyQ29kZS5oIgot
I2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgotI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgi
Ci0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgSXNTcGlsbFNsb3Q+Ci12b2lkIGZpeFNwaWxsU2xvdFpEZWYoQ29kZSYg
Y29kZSwgY29uc3QgSXNTcGlsbFNsb3QmIGlzU3BpbGxTbG90KQotewotICAgIC8vIFdlIGNvdWxk
IGhhdmUgaW50cm9kdWNlZCBaRGVmJ3MgdG8gU3RhY2tTbG90cyB0aGF0IGFyZSB3aWRlciB0aGFu
IHRoZSBkZWYuIEluIHRoYXQgY2FzZSwgd2UKLSAgICAvLyBuZWVkIHRvIGVtaXQgY29kZSB0byB6
ZXJvLWZpbGwgdGhlIHRvcCBiaXRzIG9mIHRoZSBTdGFja1Nsb3QuCi0gICAgSW5zZXJ0aW9uU2V0
IGluc2VydGlvblNldChjb2RlKTsKLSAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkg
ewotICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IDA7IGluc3RJbmRleCA8IGJsb2Nr
LT5zaXplKCk7ICsraW5zdEluZGV4KSB7Ci0gICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2st
PmF0KGluc3RJbmRleCk7Ci0KLSAgICAgICAgICAgIGluc3QuZm9yRWFjaEFyZygKLSAgICAgICAg
ICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlLCBBcmc6Oldp
ZHRoIHdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghQXJnOjppc1pEZWYocm9sZSkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICghYXJnLmlzU3RhY2soKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKCFpc1NwaWxsU2xvdChhcmcuc3RhY2tTbG90KCkpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICBpZiAoYXJnLnN0
YWNrU2xvdCgpLT5ieXRlU2l6ZSgpID09IEFyZzo6Ynl0ZXMod2lkdGgpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIEN1cnJlbnRseSB3
ZSBvbmx5IGhhbmRsZSB0aGlzIHNpbXBsZSBjYXNlIGJlY2F1c2UgaXQncyB0aGUgb25seSBvbmUg
dGhhdAotICAgICAgICAgICAgICAgICAgICAvLyBhcmlzZXM6IFpEZWYncyBhcmUgb25seSAzMi1i
aXQgcmlnaHQgbm93LiBTbywgd2hlbiB3ZSBoaXQgdGhlc2UKLSAgICAgICAgICAgICAgICAgICAg
Ly8gYXNzZXJ0aW9ucyBpdCBtZWFucyB0aGF0IHdlIG5lZWQgdG8gaW1wbGVtZW50IHRob3NlIG90
aGVyIGtpbmRzIG9mIHplcm8KLSAgICAgICAgICAgICAgICAgICAgLy8gZmlsbHMuCi0gICAgICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFyZy5zdGFja1Nsb3QoKS0+Ynl0ZVNpemUoKSA9
PSA4KTsKLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQod2lkdGggPT0gQXJnOjpX
aWR0aDMyKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBXZSByZWx5IG9uIHRoZSBmYWN0IHRo
YXQgdGhlcmUgbXVzdCBiZSBzb21lIHdheSB0byBtb3ZlIHplcm8gdG8gYSBtZW1vcnkKLSAgICAg
ICAgICAgICAgICAgICAgLy8gbG9jYXRpb24gd2l0aG91dCBmaXJzdCBidXJuaW5nIGEgcmVnaXN0
ZXIuIE9uIEFSTSwgd2Ugd291bGQgZG8gdGhpcyB1c2luZwotICAgICAgICAgICAgICAgICAgICAv
LyB6ci4KLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNWYWxpZEZvcm0oTW92
ZTMyLCBBcmc6OkltbSwgQXJnOjpTdGFjaykpOwotICAgICAgICAgICAgICAgICAgICBpbnNlcnRp
b25TZXQuaW5zZXJ0KAotICAgICAgICAgICAgICAgICAgICAgICAgaW5zdEluZGV4ICsgMSwgTW92
ZTMyLCBpbnN0Lm9yaWdpbiwgQXJnOjppbW0oMCksIGFyZy53aXRoT2Zmc2V0KDQpKTsKLSAgICAg
ICAgICAgICAgICB9KTsKLSAgICAgICAgfQotICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShi
bG9jayk7Ci0gICAgfQotfQotCi19IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCi0KLSNl
bmRpZiAvLyBBaXJGaXhTcGlsbFNsb3RaRGVmX2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJJbnN0TWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJJbnN0TWFwLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpckluc3RNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBB
aXJJbnN0TWFwX2gKKyNkZWZpbmUgQWlySW5zdE1hcF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CisjaW5jbHVkZSAiQWlyQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNs
dWRlICJCM0luZGV4TWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1l
c3BhY2UgQWlyIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIEluc3RNYXAgeworcHVi
bGljOgorICAgIEluc3RNYXAoQ29kZSYgY29kZSkKKyAgICAgICAgOiBtX21hcChjb2RlLnNpemUo
KSkKKyAgICB7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKQorICAgICAg
ICAgICAgbV9tYXBbYmxvY2tdLnJlc2l6ZShibG9jay0+c2l6ZSgpKTsKKyAgICB9CisKKyAgICBU
JiBhdChCYXNpY0Jsb2NrKiBibG9jaywgdW5zaWduZWQgaW5zdEluZGV4KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fbWFwW2Jsb2NrXVtpbnN0SW5kZXhdOworICAgIH0KKworICAgIGNvbnN0IFQm
IGF0KEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25lZCBpbnN0SW5kZXgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxJbnN0TWFwKj4odGhpcyktPmdldChibG9jaywgaW5z
dEluZGV4KTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIEluZGV4TWFwPEJhc2ljQmxvY2ss
IFZlY3RvcjxUPj4gbV9tYXA7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWly
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlySW5zdE1hcF9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySXRlcmF0ZWRSZWdpc3RlckNv
YWxlc2NpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuY3BwCShyZXZpc2lvbiAxOTUwODMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5n
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAogI2lmIEVOQUJMRShCM19KSVQp
CiAKICNpbmNsdWRlICJBaXJDb2RlLmgiCi0jaW5jbHVkZSAiQWlyRml4U3BpbGxTbG90WkRlZi5o
IgogI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgogI2luY2x1ZGUgIkFpckluc3RJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQWlyTGl2ZW5lc3MuaCIKQEAgLTExMjQsMTEgKzExMjMsMTEgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAvLyBjb21wbGV0ZSByZWdpc3RlciBhbGxvY2F0aW9uLiBT
bywgd2UgcmVjb3JkIHRoaXMgYmVmb3JlIHN0YXJ0aW5nLgogICAgICAgICAgICAgICAgIGJvb2wg
bWF5QmVDb2FsZXNjYWJsZSA9IGFsbG9jYXRvci5tYXlCZUNvYWxlc2NhYmxlKGluc3QpOwogCi0g
ICAgICAgICAgICAgICAgLy8gT24gWDg2XzY0LCBNb3ZlMzIgaXMgY2hlYXBlciBpZiB3ZSBrbm93
IHRoYXQgaXQncyBlcXVpdmFsZW50IHRvIGEgTW92ZS4gSXQncworICAgICAgICAgICAgICAgIC8v
IE1vdmUzMiBpcyBjaGVhcGVyIGlmIHdlIGtub3cgdGhhdCBpdCdzIGVxdWl2YWxlbnQgdG8gYSBN
b3ZlLiBJdCdzCiAgICAgICAgICAgICAgICAgLy8gZXF1aXZhbGVudCBpZiB0aGUgZGVzdGluYXRp
b24ncyBoaWdoIGJpdHMgYXJlIG5vdCBvYnNlcnZhYmxlIG9yIGlmIHRoZSBzb3VyY2UncyBoaWdo
CiAgICAgICAgICAgICAgICAgLy8gYml0cyBhcmUgYWxsIHplcm8uIE5vdGUgdGhhdCB3ZSBkb24n
dCBoYXZlIHRoZSBvcHBvc2l0ZSBvcHRpbWl6YXRpb24gZm9yIG90aGVyCiAgICAgICAgICAgICAg
ICAgLy8gYXJjaGl0ZWN0dXJlcywgd2hpY2ggbWF5IHByZWZlciBNb3ZlIG92ZXIgTW92ZTMyLCBi
ZWNhdXNlIE1vdmUgaXMgY2Fub25pY2FsIGFscmVhZHkuCi0gICAgICAgICAgICAgICAgaWYgKHR5
cGUgPT0gQXJnOjpHUCAmJiBvcHRpbWl6ZUZvclg4Nl82NCgpICYmIGluc3Qub3Bjb2RlID09IE1v
dmUKKyAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBBcmc6OkdQICYmIGluc3Qub3Bjb2RlID09
IE1vdmUKICAgICAgICAgICAgICAgICAgICAgJiYgaW5zdC5hcmdzWzBdLmlzVG1wKCkgJiYgaW5z
dC5hcmdzWzFdLmlzVG1wKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKG1fdG1wV2lkdGgu
dXNlV2lkdGgoaW5zdC5hcmdzWzFdLnRtcCgpKSA8PSBBcmc6OldpZHRoMzIKICAgICAgICAgICAg
ICAgICAgICAgICAgIHx8IG1fdG1wV2lkdGguZGVmV2lkdGgoaW5zdC5hcmdzWzBdLnRtcCgpKSA8
PSBBcmc6OldpZHRoMzIpCkBAIC0xMjAyLDE2ICsxMjAxLDE5IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgLy8gVHJ5IHRvIHJlcGxhY2UgdGhlIHJlZ2lz
dGVyIHVzZSBieSBtZW1vcnkgdXNlIHdoZW4gcG9zc2libGUuCi0gICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGluc3QuYXJncy5zaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgICAgICAgICBBcmcmIGFyZyA9IGluc3QuYXJnc1tpXTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKGFyZy5pc1RtcCgpICYmIGFyZy50eXBlKCkgPT0gdHlwZSAmJiAhYXJnLmlzUmVnKCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gc3RhY2tTbG90RW50cnkgPSBzdGFja1Nsb3Rz
LmZpbmQoYXJnLnRtcCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFja1Nsb3RF
bnRyeSAhPSBzdGFja1Nsb3RzLmVuZCgpICYmIGluc3QuYWRtaXRzU3RhY2soaSkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBBcmc6OnN0YWNrKHN0YWNrU2xvdEVudHJ5LT52
YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkU3BpbGwgPSB0cnVlOworICAg
ICAgICAgICAgICAgIGluc3QuZm9yRWFjaEFyZygKKyAgICAgICAgICAgICAgICAgICAgWyZdIChB
cmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSBhcmdUeXBlLCBBcmc6OldpZHRoIHdp
ZHRoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJnLmlzVG1wKCkgJiYgYXJnVHlw
ZSA9PSB0eXBlICYmICFhcmcuaXNSZWcoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGF1dG8gc3RhY2tTbG90RW50cnkgPSBzdGFja1Nsb3RzLmZpbmQoYXJnLnRtcCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2tTbG90RW50cnkgIT0gc3RhY2tTbG90cy5l
bmQoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBpbnN0LmFkbWl0c1N0YWNr
KCZhcmcgLSBpbnN0LmFyZ3NbMF0pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghZm9yY2VNb3ZlMzJJZkRpZFNwaWxsKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhY2tTbG90RW50cnktPnZhbHVlLT5lbnN1cmVTaXplKEFyZzo6Ynl0ZXMod2lk
dGgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gQXJnOjpzdGFjayhz
dGFja1Nsb3RFbnRyeS0+dmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
aWRTcGlsbCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICB9KTsKIAogICAgICAgICAgICAgICAgIGlmIChkaWRTcGls
bCAmJiBmb3JjZU1vdmUzMklmRGlkU3BpbGwpCiAgICAgICAgICAgICAgICAgICAgIGluc3Qub3Bj
b2RlID0gTW92ZTMyOwpAQCAtMTI2MiwxMiArMTI2NCw2IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgfSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLQotICAgICAgICBmaXhTcGlsbFNs
b3RaRGVmKAotICAgICAgICAgICAgbV9jb2RlLAotICAgICAgICAgICAgWyZdIChTdGFja1Nsb3Qq
IHN0YWNrU2xvdCkgLT4gYm9vbCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHN0YWNrU2xvdC0+
aW5kZXgoKSA+PSBuZXdTdGFja1Nsb3RUaHJlc2hvbGQ7Ci0gICAgICAgICAgICB9KTsKICAgICB9
CiAKICAgICBDb2RlJiBtX2NvZGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckxpdmVuZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJMaXZlbmVzcy5oCShyZXZpc2lvbiAxOTUwODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckxpdmVuZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTkyLDEwICs5MiwxOSBA
QCBzdHJ1Y3QgUmVnTGl2ZW5lc3NBZGFwdGVyIHsKICAgICBSZWcgaW5kZXhUb1ZhbHVlKHVuc2ln
bmVkIGluZGV4KSB7IHJldHVybiBSZWc6OmZyb21JbmRleChpbmRleCk7IH0KIH07CiAKK2VudW0g
Y2xhc3MgS2lsbE1vZGUgOiBpbnQ4X3QgeworICAgIERPQUVhcmx5RGVmSW5OZXh0SW5zdCwKKyAg
ICBET0FMYXRlRGVmLAorICAgIEVhcmx5VXNlS2lsbCwKKyAgICBMYXRlVXNlSW5QcmV2SW5zdEtp
bGwKK307CisKIHRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0ZXI+Ci1jbGFzcyBBYnN0cmFjdExpdmVu
ZXNzIDogcHJpdmF0ZSBBZGFwdGVyIHsKK2NsYXNzIEFic3RyYWN0TGl2ZW5lc3MgOiBwdWJsaWMg
QWRhcHRlciB7CiAgICAgc3RydWN0IFdvcmtzZXQ7CiBwdWJsaWM6CisgICAgdHlwZWRlZiB0eXBl
bmFtZSBBZGFwdGVyOjpUaGluZyBUaGluZzsKKyAgICAKICAgICBBYnN0cmFjdExpdmVuZXNzKENv
ZGUmIGNvZGUpCiAgICAgICAgIDogQWRhcHRlcihjb2RlKQogICAgICAgICAsIG1fd29ya3NldChB
ZGFwdGVyOjptYXhJbmRleChjb2RlKSkKQEAgLTIyMiw2ICsyMzEsMTEgQEAgcHVibGljOgogCiAg
ICAgICAgICAgICBJdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIEl0ZXJhdG9yKG1fbGl2
ZW5lc3MsIG1fbGl2ZW5lc3MubV93b3Jrc2V0LmJlZ2luKCkpOyB9CiAgICAgICAgICAgICBJdGVy
YXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBJdGVyYXRvcihtX2xpdmVuZXNzLCBtX2xpdmVuZXNz
Lm1fd29ya3NldC5lbmQoKSk7IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgYm9vbCBjb250
YWlucyhjb25zdCB0eXBlbmFtZSBBZGFwdGVyOjpUaGluZyYgdGhpbmcpIGNvbnN0CisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fbGl2ZW5lc3MubV93b3Jrc2V0LmNvbnRh
aW5zKEFkYXB0ZXI6OnZhbHVlVG9JbmRleCh0aGluZykpOworICAgICAgICAgICAgfQogCiAgICAg
ICAgIHByaXZhdGU6CiAgICAgICAgICAgICBBYnN0cmFjdExpdmVuZXNzJiBtX2xpdmVuZXNzOwpA
QCAtMjMyLDcgKzI0NiwxNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gSXRlcmFibGUo
bV9saXZlbmVzcyk7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIGV4ZWN1dGUodW5zaWduZWQg
aW5zdEluZGV4KQorICAgICAgICBib29sIGlzTGl2ZShjb25zdCB0eXBlbmFtZSBBZGFwdGVyOjpU
aGluZyYgdGhpbmcpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBsaXZlKCku
Y29udGFpbnModGhpbmcpOworICAgICAgICB9CisKKyAgICAgICAgLy8gQ2FsbHMgdGhlIGtpbGwg
Y2FsbGJhY2sgd2l0aCB0aGUga2lsbHMgYW5kIGRlc2NyaXB0aW9ucyBvZiBob3cgdGhleSBnb3Qg
a2lsbGVkLiBBbHNvCisgICAgICAgIC8vIHBhc3NlcyB0aGUgaW50ZXJuYWwgaW5kZXggb2YgdGhl
IHRoaW5nIGJlaW5nIGtpbGxlZCwgaWYgeW91IHdhbnQgdG8gdXNlIGluZGV4LWJhc2VkCisgICAg
ICAgIC8vIGxpdmVuZXNzLgorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLaWxsQ2FsbGJhY2s+
CisgICAgICAgIHZvaWQgZXhlY3V0ZSh1bnNpZ25lZCBpbnN0SW5kZXgsIGNvbnN0IEtpbGxDYWxs
YmFjayYga2lsbENhbGxiYWNrKQogICAgICAgICB7CiAgICAgICAgICAgICBJbnN0JiBpbnN0ID0g
bV9ibG9jay0+YXQoaW5zdEluZGV4KTsKICAgICAgICAgICAgIGF1dG8mIHdvcmtzZXQgPSBtX2xp
dmVuZXNzLm1fd29ya3NldDsKQEAgLTI0MiwyMyArMjY1LDMyIEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICBJbnN0JiBuZXh0SW5zdCA9IG1fYmxvY2stPmF0KGluc3RJbmRleCArIDEpOwogICAg
ICAgICAgICAgICAgIG5leHRJbnN0LmZvckVhY2g8dHlwZW5hbWUgQWRhcHRlcjo6VGhpbmc+KAog
ICAgICAgICAgICAgICAgICAgICBbJl0gKHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nJiB0aGluZywg
QXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSB0eXBlLCBBcmc6OldpZHRoKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoQXJnOjppc0Vhcmx5RGVmKHJvbGUpICYmIEFkYXB0ZXI6OmFjY2Vw
dHNUeXBlKHR5cGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtzZXQucmVtb3Zl
KEFkYXB0ZXI6OnZhbHVlVG9JbmRleCh0aGluZykpOworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKEFyZzo6aXNFYXJseURlZihyb2xlKSAmJiBBZGFwdGVyOjphY2NlcHRzVHlwZSh0eXBlKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gQWRhcHRlcjo6
dmFsdWVUb0luZGV4KHRoaW5nKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXdv
cmtzZXQucmVtb3ZlKGluZGV4KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2ls
bENhbGxiYWNrKGluZGV4LCB0aGluZywgS2lsbE1vZGU6OkRPQUVhcmx5RGVmSW5OZXh0SW5zdCk7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBUaGVuIGhhbmRsZSBkZWYn
cy4KICAgICAgICAgICAgIGluc3QuZm9yRWFjaDx0eXBlbmFtZSBBZGFwdGVyOjpUaGluZz4oCiAg
ICAgICAgICAgICAgICAgWyZdICh0eXBlbmFtZSBBZGFwdGVyOjpUaGluZyYgdGhpbmcsIEFyZzo6
Um9sZSByb2xlLCBBcmc6OlR5cGUgdHlwZSwgQXJnOjpXaWR0aCkgewotICAgICAgICAgICAgICAg
ICAgICBpZiAoQXJnOjppc0xhdGVEZWYocm9sZSkgJiYgQWRhcHRlcjo6YWNjZXB0c1R5cGUodHlw
ZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICB3b3Jrc2V0LnJlbW92ZShBZGFwdGVyOjp2YWx1
ZVRvSW5kZXgodGhpbmcpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNMYXRlRGVm
KHJvbGUpICYmIEFkYXB0ZXI6OmFjY2VwdHNUeXBlKHR5cGUpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpbmRleCA9IEFkYXB0ZXI6OnZhbHVlVG9JbmRleCh0aGluZyk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXdvcmtzZXQucmVtb3ZlKGluZGV4KSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBraWxsQ2FsbGJhY2soaW5kZXgsIHRoaW5nLCBLaWxsTW9k
ZTo6RE9BTGF0ZURlZik7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9
KTsKIAogICAgICAgICAgICAgLy8gVGhlbiBoYW5kbGUgdXNlJ3MuCiAgICAgICAgICAgICBpbnN0
LmZvckVhY2g8dHlwZW5hbWUgQWRhcHRlcjo6VGhpbmc+KAogICAgICAgICAgICAgICAgIFsmXSAo
dHlwZW5hbWUgQWRhcHRlcjo6VGhpbmcmIHRoaW5nLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBl
IHR5cGUsIEFyZzo6V2lkdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNFYXJs
eVVzZShyb2xlKSAmJiBBZGFwdGVyOjphY2NlcHRzVHlwZSh0eXBlKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHdvcmtzZXQuYWRkKEFkYXB0ZXI6OnZhbHVlVG9JbmRleCh0aGluZykpOworICAg
ICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0Vhcmx5VXNlKHJvbGUpICYmIEFkYXB0ZXI6OmFj
Y2VwdHNUeXBlKHR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRl
eCA9IEFkYXB0ZXI6OnZhbHVlVG9JbmRleCh0aGluZyk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAod29ya3NldC5hZGQoaW5kZXgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtp
bGxDYWxsYmFjayhpbmRleCwgdGhpbmcsIEtpbGxNb2RlOjpFYXJseVVzZUtpbGwpOworICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSk7CiAKICAgICAgICAgICAgIC8vIEFu
ZCBmaW5hbGx5LCBoYW5kbGUgdGhlIGxhdGUgdXNlJ3Mgb2YgdGhlIHByZXZpb3VzIGluc3RydWN0
aW9uLgpAQCAtMjY2LDE3ICsyOTgsMzIgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIEluc3Qm
IHByZXZJbnN0ID0gbV9ibG9jay0+YXQoaW5zdEluZGV4IC0gMSk7CiAgICAgICAgICAgICAgICAg
cHJldkluc3QuZm9yRWFjaDx0eXBlbmFtZSBBZGFwdGVyOjpUaGluZz4oCiAgICAgICAgICAgICAg
ICAgICAgIFsmXSAodHlwZW5hbWUgQWRhcHRlcjo6VGhpbmcmIHRoaW5nLCBBcmc6OlJvbGUgcm9s
ZSwgQXJnOjpUeXBlIHR5cGUsIEFyZzo6V2lkdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChBcmc6OmlzTGF0ZVVzZShyb2xlKSAmJiBBZGFwdGVyOjphY2NlcHRzVHlwZSh0eXBlKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3Jrc2V0LmFkZChBZGFwdGVyOjp2YWx1ZVRv
SW5kZXgodGhpbmcpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzTGF0ZVVz
ZShyb2xlKSAmJiBBZGFwdGVyOjphY2NlcHRzVHlwZSh0eXBlKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gQWRhcHRlcjo6dmFsdWVUb0luZGV4KHRoaW5n
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod29ya3NldC5hZGQoaW5kZXgpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBraWxsQ2FsbGJhY2soaW5kZXgsIHRoaW5n
LCBLaWxsTW9kZTo6TGF0ZVVzZUluUHJldkluc3RLaWxsKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
IAorICAgICAgICB2b2lkIGV4ZWN1dGUodW5zaWduZWQgaW5zdEluZGV4KQorICAgICAgICB7Cisg
ICAgICAgICAgICBleGVjdXRlKAorICAgICAgICAgICAgICAgIGluc3RJbmRleCwKKyAgICAgICAg
ICAgICAgICBbXSAodW5zaWduZWQsIGNvbnN0IHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nJiwgS2ls
bE1vZGUpIHsgfSk7CisgICAgICAgIH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIEFic3RyYWN0
TGl2ZW5lc3MmIG1fbGl2ZW5lc3M7CiAgICAgICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CiAgICAg
fTsKIAorICAgIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHJhd0xpdmVBdEhlYWQoQmFzaWNCbG9j
ayogYmxvY2spCisgICAgeworICAgICAgICByZXR1cm4gbV9saXZlQXRIZWFkW2Jsb2NrXTsKKyAg
ICB9CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVbmRlcmx5aW5nSXRlcmFibGU+CiAgICAgY2xh
c3MgSXRlcmFibGUgewogICAgIHB1YmxpYzoKQEAgLTMzMCw2ICszNzcsMTEgQEAgcHVibGljOgog
ICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKG1fbGl2ZW5l
c3MsIG1faXRlcmFibGUuYmVnaW4oKSk7IH0KICAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3Qg
eyByZXR1cm4gaXRlcmF0b3IobV9saXZlbmVzcywgbV9pdGVyYWJsZS5lbmQoKSk7IH0KIAorICAg
ICAgICBib29sIGNvbnRhaW5zKGNvbnN0IHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nJiB0aGluZykg
Y29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fbGl2ZW5lc3MubV93b3Jrc2V0
LmNvbnRhaW5zKEFkYXB0ZXI6OnZhbHVlVG9JbmRleCh0aGluZykpOworICAgICAgICB9CisKICAg
ICBwcml2YXRlOgogICAgICAgICBBYnN0cmFjdExpdmVuZXNzJiBtX2xpdmVuZXNzOwogICAgICAg
ICBjb25zdCBVbmRlcmx5aW5nSXRlcmFibGUmIG1faXRlcmFibGU7CkBAIC0zNDUsNiArMzk3LDgg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gSXRlcmFibGU8dHlwZW5hbWUgQWRhcHRlcjo6SW5k
ZXhTZXQ+KCp0aGlzLCBtX2xpdmVBdFRhaWxbYmxvY2tdKTsKICAgICB9CiAKKyAgICBJbmRleFNw
YXJzZVNldDxVbnNhZmVWZWN0b3JPdmVyZmxvdz4mIHdvcmtzZXQoKSB7IHJldHVybiBtX3dvcmtz
ZXQ7IH0KKwogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTG9jYWxDYWxjOwogICAgIGZyaWVu
ZCBzdHJ1Y3QgTG9jYWxDYWxjOjpJdGVyYWJsZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyT3B0aW1pemVCbG9ja09yZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wdGltaXplQmxvY2tPcmRlci5jcHAJKHJldmlzaW9u
IDE5NTA4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3B0aW1pemVCbG9j
a09yZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsMTAgKzczLDggQEAgcHJpdmF0ZToKIAog
fSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKLXZvaWQgb3B0aW1pemVCbG9ja09yZGVyKENvZGUm
IGNvZGUpCitWZWN0b3I8QmFzaWNCbG9jayo+IGJsb2Nrc0luT3B0aW1pemVkT3JkZXIoQ29kZSYg
Y29kZSkKIHsKLSAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgIm9wdGltaXplQmxvY2tP
cmRlciIpOwotCiAgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBibG9ja3NJbk9yZGVyOwogCiAgICAg
QmxvY2tXb3JrbGlzdCBmYXN0V29ya2xpc3Q7CkBAIC0xMTMsNiArMTExLDE1IEBAIHZvaWQgb3B0
aW1pemVCbG9ja09yZGVyKENvZGUmIGNvZGUpCiAgICAgQVNTRVJUKGZhc3RXb3JrbGlzdC5pc0Vt
cHR5KCkpOwogICAgIEFTU0VSVChzbG93V29ya2xpc3QuaXNFbXB0eSgpKTsKIAorICAgIHJldHVy
biBibG9ja3NJbk9yZGVyOworfQorCit2b2lkIG9wdGltaXplQmxvY2tPcmRlcihDb2RlJiBjb2Rl
KQoreworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAib3B0aW1pemVCbG9ja09yZGVy
Iik7CisKKyAgICBWZWN0b3I8QmFzaWNCbG9jayo+IGJsb2Nrc0luT3JkZXIgPSBibG9ja3NJbk9w
dGltaXplZE9yZGVyKGNvZGUpOworICAgIAogICAgIC8vIFBsYWNlIGJsb2NrcyBpbnRvIENvZGUn
cyBibG9jayBsaXN0IGFjY29yZGluZyB0byB0aGUgb3JkZXJpbmcgaW4gYmxvY2tzSW5PcmRlci4g
V2UgZG8gdGhpcyBieSBsZWFraW5nCiAgICAgLy8gYWxsIG9mIHRoZSBibG9ja3MgYW5kIHRoZW4g
cmVhZG9wdGluZyB0aGVtLgogICAgIGZvciAoYXV0byYgZW50cnkgOiBjb2RlLmJsb2NrTGlzdCgp
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcHRpbWl6ZUJsb2NrT3Jk
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wdGlt
aXplQmxvY2tPcmRlci5oCShyZXZpc2lvbiAxOTUwODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0Fpck9wdGltaXplQmxvY2tPcmRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2
ICszMiwxMSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlCiAKIGNs
YXNzIENvZGU7CiAKKy8vIFJldHVybnMgYSBsaXN0IG9mIGJsb2NrcyBzb3J0ZWQgYWNjb3JkaW5n
IHRvIHdoYXQgd291bGQgYmUgdGhlIGN1cnJlbnQgb3B0aW1hbCBvcmRlci4gVGhpcyBzaGFyZXMK
Ky8vIHNvbWUgcHJvcGVydGllcyB3aXRoIGEgcHJlLW9yZGVyIHRyYXZlcnNhbC4gSW4gcGFydGlj
dWxhciwgZWFjaCBibG9jayB3aWxsIGFwcGVhciBhZnRlciBhdCBsZWFzdAorLy8gb25lIG9mIGl0
cyBwcmVkZWNlc3NvcnMuCitWZWN0b3I8QmFzaWNCbG9jayo+IGJsb2Nrc0luT3B0aW1pemVkT3Jk
ZXIoQ29kZSYpOworCiAvLyBSZW9yZGVycyB0aGUgYmFzaWMgYmxvY2tzIHRvIGtlZXAgaG90IGJs
b2NrcyBhdCB0aGUgdG9wLCBhbmQgbWF4aW1pemUgdGhlIGxpa2VsaWhvb2QgdGhhdCBhIGZyZXF1
ZW50bHkKIC8vIHRha2VuIGVkZ2UgaXMganVzdCBhIGZhbGwtdGhyb3VnaC4KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTY2F2ZW5nZVJlZ2lzdGVycy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTY2F2ZW5nZVJlZ2lzdGVy
cy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNj
YXZlbmdlUmVnaXN0ZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgwOCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJBaXJTY2F2ZW5nZVJlZ2lzdGVycy5oIgorCisjaWYgRU5BQkxFKEIz
X0pJVCkKKworI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJGb3J3YXJkTGl2ZW5l
c3MuaCIKKyNpbmNsdWRlICJBaXJMaXZlbmVzcy5oIgorI2luY2x1ZGUgIkFpck9wdGltaXplQmxv
Y2tPcmRlci5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFp
ciB7CisKK25hbWVzcGFjZSB7CisKK3RlbXBsYXRlPEFyZzo6VHlwZSB0eXBlPgorY2xhc3MgU2Nh
dmVuZ2VSZWdpc3RlcnMgeworcHVibGljOgorICAgIFNjYW52ZWdlUmVnaXN0ZXJzKENvZGUmIGNv
ZGUpCisgICAgICAgIDogbV9jb2RlKGNvZGUpCisgICAgICAgICwgbV9saXZlbmVzcyhjb2RlKQor
ICAgICAgICAsIG1fdG1wV2lkdGgoY29kZSkKKyAgICAgICAgLCBtX2luc2VydGlvblNldChjb2Rl
KQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHJ1bigpCisgICAgeworICAgICAgICBWZWN0b3I8
QmFzaWNCbG9jayo+IGJsb2NrcyA9IGJsb2Nrc0luT3B0aW1pemVkT3JkZXIobV9jb2RlKTsKKwor
ICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKKyAgICAg
ICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBibG9ja3MpIHsKKyAgICAgICAgICAgICAg
ICBtX2Jsb2NrID0gYmxvY2s7CisgICAgICAgICAgICAgICAgcHJvcGFnYXRlVmFsdWVzSW5CbG9j
aygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFtX2NoYW5nZWQpCisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGNvbXB1dGVEZWF0
aHMoKTsKKyAgICAgICAgaW5pdGlhbGl6ZUJsb2NrUmVnU3RhdGVzKCk7CisKKyAgICAgICAgZm9y
IChCYXNpY0Jsb2NrKiBibG9jayA6IGJsb2NrcykgeworICAgICAgICAgICAgbV9ibG9jayA9IGJs
b2NrOworICAgICAgICAgICAgcHJvY2Vzc0Jsb2NrKCk7CisgICAgICAgIH0KKyAgICB9CisKK3By
aXZhdGU6CisgICAgdm9pZCBwcm9wYWdhdGVWYWx1ZXNJbkJsb2NrKCkKKyAgICB7CisgICAgICAg
IG1fc3RhdGUgPSBtX2F0SGVhZFttX2Jsb2NrXTsKKyAgICAgICAgZm9yIChJbnN0JiBpbnN0IDog
Km1fYmxvY2spCisgICAgICAgICAgICBwcm9wYWdhdGVWYWx1ZXMoaW5zdCk7CisKKyAgICAgICAg
Zm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29yQmxvY2tzKCkpIHsK
KyAgICAgICAgICAgIFN0YXRlJiBhdEhlYWQgPSBtX2F0SGVhZFtzdWNjZXNzb3JdOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAoIWF0SGVhZC52aXNpdGVkQnlQcm9wYWdhdGlvbikgewor
ICAgICAgICAgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBhdEhlYWQubWFwcGluZykgeworICAg
ICAgICAgICAgICAgICAgICBUbXBJbmZvJiBzcmNJbmZvID0gZ2V0SW5mbyhlbnRyeS5rZXkpOwor
ICAgICAgICAgICAgICAgICAgICBUbXBJbmZvJiBkc3RJbmZvID0gZW50cnkudmFsdWU7CisgICAg
ICAgICAgICAgICAgICAgIGRzdEluZm8uY29uc3RhbnQgPSBzcmNJbmZvLmNvbnN0YW50OworICAg
ICAgICAgICAgICAgICAgICBkc3RJbmZvLmhhc0NvbnN0YW50ID0gc3JjSW5mby5oYXNDb25zdGFu
dDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYXRIZWFkLnZpc2l0ZWRCeVBy
b3BhZ2F0aW9uID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3Ig
KGF1dG8mIGVudHJ5IDogYXRIZWFkLm1hcHBpbmcpIHsKKyAgICAgICAgICAgICAgICBUbXBJbmZv
JiBkc3RJbmZvID0gZW50cnkudmFsdWU7CisgICAgICAgICAgICAgICAgaWYgKCFkc3RJbmZvLmhh
c0NvbnN0YW50KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICBUbXBJbmZvJiBzcmNJbmZvID0gZ2V0SW5mbyhlbnRyeS5rZXkpOworICAgICAgICAgICAgICAg
IGlmICghc3JjSW5mby5oYXNDb25zdGFudCB8fCBzcmNJbmZvLmNvbnN0YW50ICE9IGRzdEluZm8u
Y29uc3RhbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgZHN0SW5mby5oYXNDb25zdGFudCA9IGZh
bHNlOworICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIHBy
b3BhZ2F0ZVZhbHVlcyhJbnN0JiBpbnN0KQorICAgIHsKKyAgICAgICAgaWYgKHR5cGUgPT0gR1AK
KyAgICAgICAgICAgICYmIGluc3Qub3Bjb2RlID09IE1vdmUKKyAgICAgICAgICAgICYmIGluc3Qu
YXJnc1swXS5pc1NvbWVJbW0oKQorICAgICAgICAgICAgJiYgaW5zdC5hcmdzWzFdLmlzVG1wKCkp
IHsKKyAgICAgICAgICAgIFRtcEluZm8mIGluZm8gPSBnZXRJbmZvKGluc3QuYXJnc1sxXS50bXAo
KSk7CisgICAgICAgICAgICBpbmZvLmhhc0NvbnN0YW50ID0gdHJ1ZTsKKyAgICAgICAgICAgIGlu
Zm8uY29uc3RhbnQgPSBpbnN0LmFyZ3NbMV0udmFsdWUoKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBOZWVkIHRoZSBlcXVpdmFsZW50IGZvciBG
UC4KKworICAgICAgICBJbnN0Ojpmb3JFYWNoRGVmV2l0aEV4dHJhQ2xvYmJlcmVkUmVnczxUbXA+
KAorICAgICAgICAgICAgJmluc3QsICZpbnN0LCAvLyBHZXQgYm90aCBsYXRlIGFuZCBlYXJseSBk
ZWZzIGZvciBpbnN0LgorICAgICAgICAgICAgWyZdIChUbXAmIHRtcCwgQXJnOjpSb2xlLCBBcmc6
OlR5cGUgdG1wVHlwZSwgQXJnOjpXaWR0aCkgeworICAgICAgICAgICAgICAgIGlmICh0bXBUeXBl
ICE9IHR5cGUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBn
ZXRJbmZvKHRtcCkuaGFzQ29uc3RhbnQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0pOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGNvbXB1dGVEZWF0aHMoKQorICAgIHsKKyAgICAgICAgZm9yIChCYXNp
Y0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgICAgIExpdmVuZXNzOjpMb2NhbENhbGMg
bG9jYWxDYWxjKGxpdmVuZXNzLCBibG9jayk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
c3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykgeworICAgICAgICAgICAgICAg
IGxvY2FsQ2FsYy5leGVjdXRlKAorICAgICAgICAgICAgICAgICAgICBpbnN0SW5kZXgsCisgICAg
ICAgICAgICAgICAgICAgIFsmXSAodW5zaWduZWQsIFRtcCB0bXAsIEtpbGxNb2RlIGtpbGxNb2Rl
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGtpbGxNb2RlKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIEtpbGxNb2RlOjpET0FFYXJseURlZkluTmV4dEluc3Q6Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9kZWF0aHMuYXQoYmxvY2ssIGluc3RJbmRleCAr
IDEpLmFwcGVuZChEZWF0aCh0bXAsIEVhcmx5RGVhdGgpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgS2lsbE1vZGU6OkRP
QUxhdGVEZWY6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9kZWF0aHMuYXQoYmxvY2ss
IGluc3RJbmRleCkuYXBwZW5kKERlYXRoKHRtcCwgTGF0ZURlYXRoKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEtpbGxN
b2RlOjpFYXJseVVzZUtpbGw6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9kZWF0aHMu
YXQoYmxvY2ssIGluc3RJbmRleCkuYXBwZW5kKERlYXRoKHRtcCwgRWFybHlEZWF0aCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSBLaWxsTW9kZTo6TGF0ZVVzZUluUHJldkluc3RLaWxsOgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZGVhdGhzLmF0KGJsb2NrLCBpbnN0SW5kZXggLSAxKS5hcHBlbmQoRGVhdGgo
dG1wLCBMYXRlRGVhdGgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBpbml0aWFsaXplQmxvY2tS
ZWdTdGF0ZXMoKQorICAgIHsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fY29k
ZSkgeworICAgICAgICAgICAgU3RhdGUmIHN0YXRlID0gbV9hdEhlYWRbYmxvY2tdOworICAgICAg
ICAgICAgZm9yIChUbXAgdG1wIDogbV9saXZlbmVzcy5saXZlQXRIZWFkKGJsb2NrKSkgeworICAg
ICAgICAgICAgICAgIGlmICghdG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgICAgICAgICAgc3RhdGUubWFwcGluZy5hZGQodG1wLCBUbXBJbmZvKHJl
ZykpOworICAgICAgICAgICAgICAgIHN0YXRlLnJldmVyc2VNYXBwaW5nW3RtcC5yZWcoKV0gPSBS
ZWdJbmZvKHRtcCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lk
IHByb2Nlc3NCbG9jaygpCisgICAgeworICAgICAgICBtX3N0YXRlID0gbV9hdEhlYWRbbV9ibG9j
a107CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fc3RhdGUuaXNTZXR0bGVkKTsKKworICAgICAg
ICBmb3IgKG1faW5zdEluZGV4ID0gMDsgbV9pbnN0SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK21f
aW5zdEluZGV4KSB7CisgICAgICAgICAgICBJbnN0JiBpbnN0ID0gbV9ibG9jay0+YXQobV9pbnN0
SW5kZXgpOworICAgICAgICAgICAgcHJvY2Vzc0luc3QoaW5zdCk7CisgICAgICAgICAgICBwcm9w
YWdhdGVWYWx1ZXMoaW5zdCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9ibG9jay0+bnVt
U3VjY2Vzc29ycygpID4gMSkgeworICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNz
b3IgOiBtX2Jsb2NrLT5zdWNjZXNzb3JCbG9ja3MoKSkKKyAgICAgICAgICAgICAgICBib290Qmxv
Y2soc3VjY2Vzc29yKTsKKyAgICAgICAgfSBlbHNlIGlmIChtX2Jsb2NrLT5udW1TdWNjZXNzb3Jz
KCkgPT0gMSkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yID0gbV9ibG9jay0+
c3VjY2Vzc29yQmxvY2soMCk7CisgICAgICAgICAgICBpZiAobV9hdEhlYWRbc3VjY2Vzc29yXS5p
c1NldHRsZWQpCisgICAgICAgICAgICAgICAgY29uZm9ybVRvKHN1Y2Nlc3Nvcik7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgYm9vdEJsb2NrKHN1Y2Nlc3Nvcik7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUobV9ibG9jayk7Cisg
ICAgfQorCisgICAgdm9pZCBwcm9jZXNzSW5zdChJbnN0JiBpbnN0KQorICAgIHsKKyAgICAgICAg
Ly8gT3VyIHN0YXRlIG1hcHBpbmcgdGVsbHMgdXMgd2hhdCBpcyBsaXZlIGF0IGFueSBnaXZlbiBt
b21lbnQuIFdlIHVzZSBhIHNlcGFyYXRlCisgICAgICAgIC8vIGxpdmVuZXNzIHBhc3MgdG8gY29s
bGVjdCB0aGUga2lsbCBsaXN0cyBmb3IgYWxsIGluc3RydWN0aW9ucy4gVGhlIGtpbGwgbGlzdHMg
dGVsbCB1cworICAgICAgICAvLyBhYm91dCB0aGUgd2F5cyB0aGF0IHRoaW5ncyBkaWUgYXQgYW4g
SW5zdC4gVGhlcmUgYXJlIGZvdXIgd2F5czoKKyAgICAgICAgLy8gCisgICAgICAgIC8vIC0gQW4g
ZWFybHkgZGVmIGNvdWxkIGRpZSBhYm92ZSBhbiBJbnN0LgorICAgICAgICAvLyAtIEFuIGVhcmx5
IHVzZSBjb3VsZCBraWxsIGFib3ZlIGFuIEluc3QuCisgICAgICAgIC8vIC0gQSBsYXRlIGRlZiBj
b3VsZCBkaWUgYmVsb3cgYW4gSW5zdC4KKyAgICAgICAgLy8gLSBBIGxhdGUgdXNlIGNvdWxkIGtp
bGwgYmVsb3cgYW4gSW5zdC4KKyAgICAgICAgLy8gCisgICAgICAgIC8vIE9uY2Ugd2UgYXJlIGFy
bWVkIHdpdGggb3VyIHN0YXRlIG1hcHBpbmcgYW5kIHRoZSBraWxsIGxpc3RzLCB3ZSBjYW4gcHJv
Y2VzcyB0aGUgSW5zdAorICAgICAgICAvLyBpbiB0aGUgb3JkZXIgb2YgaXRzIGV4ZWN1dGlvbiBh
bmQgdXBkYXRlIHRoZSBzdGF0ZSBtYXBwaW5nIGJhc2VkIG9uIGRlZnMgYW5kIGtpbGwKKyAgICAg
ICAgLy8gbGlzdHMuCisgICAgICAgIC8vIAorICAgICAgICAvLyBXZSBzdGFydCBhYm92ZSB0aGUg
SW5zdCB3aXRoIGEgc3RhdGUgdGhhdCB0ZWxscyB1cyB3aGF0IGlzIGxpdmUgYmVmb3JlIGl0LiBU
aGlzCisgICAgICAgIC8vIGluY2x1ZGVzIHRoaW5ncyB0aGF0IHdpbGwgZGllIGF0IHRoZSB0b3Au
IFdlIGNhbiBoYW5kbGUgZWFybHkgdXNlcyBhbmQgZGVmcyBieSBnaXZpbmcKKyAgICAgICAgLy8g
dGhlbSByZWdpc3RlcnMgdGhhdCBhcmUgbm90IGxpdmUuIFdlIGtub3cgd2hpY2ggcmVnaXN0ZXJz
IGJlY29tZSBsaXZlIGJlY2F1c2Ugb3VyCisgICAgICAgIC8vIG1hcHBpbmcgdGVsbHMgdXMgdGhp
cy4gVGhlbiB3ZSBjYW4gYXBwbHkgdGhlIGVhcmx5IGRlYXRocy4gVGhlbiB3ZSBwcm9jZXNzIGxh
dGUgdXNlcworICAgICAgICAvLyBhbmQgZGVmcywgYW5kIHRoZW4gYXBwbHkgdGhlIGxhdGUgZGVh
dGhzLgorICAgICAgICAvLyAKKyAgICAgICAgLy8gVGhpcyBhbGdvcml0aG0gbXVzdCBwcm9jZWVk
IGluIHRoZSBvcmRlciBvZiB0aGUgSW5zdCdzIGV4ZWN1dGlvbi4gV2UgY2FuIHVzZSB0aGUKKyAg
ICAgICAgLy8gbm90aW9uIG9mIGxvY2tpbmcgYXQgZWFjaCBzdGFnZSAtIGVhcmx5IGFuZCB0aGVu
IGxhdGUgLSB0byBpbmRpY2F0ZSB3aGljaCByZWdpc3RlcnMKKyAgICAgICAgLy8gaGF2ZSBhbHJl
YWR5IGJlZW4gcHVycG9zZWQuIEFsbCBlYXJseSB1c2VzIHdpbGwgaG9sZCB0aGUgbG9jayB3aGls
ZSB3ZSBhcmUgcHJvY2Vzc2luZworICAgICAgICAvLyB0aGUgZWFybHkgcGFydCBvZiB0aGUgaW5z
dHJ1Y3Rpb24sIGFuZCB0aGVuIHJlbGVhc2UgaXQgYmVmb3JlIHdlIHN0YXJ0IHByb2Nlc3Npbmcg
dGhlCisgICAgICAgIC8vIGxhdGUgc3R1ZmYuIEluIGJldHdlZW4gZWFybHkgYW5kIGxhdGUsIGFm
dGVyIHdlIGhhdmUgdW5sb2NrZWQgdGhpbmdzIHVzZWQgZWFybHksIHdlCisgICAgICAgIC8vIGNh
biBwZXJmb3JtIGVhcmx5IGRlYXRocy4gQWxsIGVhcmx5IGRlZnMgd2lsbCBob2xkIHRoZSBsb2Nr
IGVhcmx5IGFuZCB0aGVuIHJlbGVhc2UgaXQKKyAgICAgICAgLy8gYWZ0ZXIgd2UgcHJvY2VzcyBs
YXRlIHRoaW5ncy4gQXMgYSBzcGVjaWFsIGNhc2UsIFVzZURlZiB3aWxsIGFsc28gcmVsZWFzZSB0
aGUgbG9jaworICAgICAgICAvLyBsYXRlLgorICAgICAgICAvLyAKKyAgICAgICAgLy8gVGhpbmdz
IGdldCB3ZWlyZCB3aXRoIFVzZURlZi4gTHVja3kgZm9yIHVzLCBJbnN0cyB3aWxsIGhhdmUgYSBz
bWFsbCBudW1iZXIgb2YgVXNlRGVmcywKKyAgICAgICAgLy8gc28gdGhlIGFsZ29yaXRobSBkb2Vz
bid0IGhhdmUgdG8gYmUgZWZmaWNpZW50IGFuZCB3ZSBjYW4gYmUgc3VyZSB0aGF0IGlmIHdlIGhh
bmRsZQorICAgICAgICAvLyBVc2VEZWZzIGVhcmx5LCB0aGVuIHRoZSBncmVlZHkgYXBwcm9hY2gg
c2hvdWxkIGp1c3Qgd29yay4gVGhlIGxvY2tpbmcgc3RyYXRlZ3kgZW5zdXJlcworICAgICAgICAv
LyB0aGF0IHdlIHdvbid0IHRyeSB0byByZXVzZSB0aGUgcmVnaXN0ZXIgd2UgYWxyZWFkeSBwaWNr
ZWQuIFRoZSBvbmx5IGFkZGl0aW9uYWwgbG9naWMKKyAgICAgICAgLy8gZm9yIFVzZURlZiBpcyB0
aGF0IHdoZW4gd2UgcGljayBhIHJlZ2lzdGVyIGZvciBpdCwgd2hpY2ggaGFwcGVucyBlYXJseSwg
d2UgbG9vayBhaGVhZAorICAgICAgICAvLyB0byBtYWtlIHN1cmUgdGhhdCB3ZSBkaWRuJ3QgYWxy
ZWFkeSBsb2NrIHRoZSByZWdpc3RlciBsYXRlLiBUaGUgb25seSByZWdpc3RlcnMgdGhhdCB3ZQor
ICAgICAgICAvLyBjb3VsZCBoYXZlIGFscmVhZHkgbG9ja2VkIGxhdGUgYXJlIHRoZSBvbmVzIHRo
YXQgYXJlIGNsb2JiZXJlZCBsYXRlIG9yIGRlZmluZWQgbGF0ZS4KKyAgICAgICAgLy8gCisgICAg
ICAgIC8vIE9uZSBvZiB0aGUgYmVhdXRpZnVsIHRoaW5ncyBhYm91dCB0aGlzIGFwcHJvYWNoIGlz
IHRoYXQgd2UgY2FuIHByb2Nlc3MgdGhlIEluc3QKKyAgICAgICAgLy8gaW4tcGxhY2UuIFdlIHdv
bid0IGVkaXQgdGhlIHVzZXMgdW50aWwgd2UgaGF2ZSBhY2NvdW50ZWQgZm9yIHRoZW0uIFdlIHdv
bid0IGVkaXQgdGhlCisgICAgICAgIC8vIGRlZnMgdW50aWwgd2UgaGF2ZSBhY2NvdW50ZWQgZm9y
IHRoZW0uIFNvLCB3ZSBjYW4gY29tcHV0ZSBmb3J3YXJkIGxpdmVuZXNzIHdoaWxlIGFsc28KKyAg
ICAgICAgLy8gZWRpdGluZyB0aGUgaW5zdHJ1Y3Rpb24uCisKKyAgICAgICAgLy8gU3BpbGwgYW5k
IGxvY2sgYWxsIGVhcmx5IGNsb2JiZXJzLiBTcGlsbCBhbGwgbGF0ZSBjbG9iYmVycywgYnV0IGRv
bid0IGxvY2sgdGhvc2UgeWV0LgorICAgICAgICBpZiAoaW5zdC5vcGNvZGUgPT0gUGF0Y2gpIHsK
KyAgICAgICAgICAgIGluc3QuZXh0cmFFYXJseUNsb2JiZXJlZFJlZ3MoKS5mb3JFYWNoKAorICAg
ICAgICAgICAgICAgIFsmXSAoUmVnIHJlZykgeworICAgICAgICAgICAgICAgICAgICBzcGlsbChy
ZWcpOworICAgICAgICAgICAgICAgICAgICBsb2NrKHJlZyk7CisgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgIH0KKworICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSBsb2NrIGFscmVhZHkt
YWxsb2NhdGVkIHJlZ2lzdGVycyB0aGF0IGFyZSBsaXZlIGVhcmx5LiBUaGlzIGluY2x1ZGVzIGFs
bAorICAgICAgICAvLyBlYXJseSB1c2VzLCBlYXJseSBkZWZzLCBhbmQgbGF0ZSB1c2VzLgorICAg
ICAgICBpbnN0LmZvckVhY2hUbXAoCisgICAgICAgICAgICBbJl0gKFRtcCYgdG1wLCBBcmc6OlJv
bGUgcm9sZSwgQXJnOjpUeXBlIHRtcFR5cGUsIEFyZzo6V2lkdGgpIHsKKyAgICAgICAgICAgICAg
ICBpZiAodG1wVHlwZSAhPSB0eXBlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgaWYgKCF0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgIGlmICghQXJnOjppc0Vhcmx5RGVmKHJvbGUpICYmICFBcmc6Omlz
QW55VXNlKHJvbGUpICYmIHJvbGUgIT0gQXJnOjpVc2VBZGRyKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbG9jayhmaWxsKHRt
cCwgcm9sZSkpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgLy8gQWxsb2NhdGUgcmVnaXN0
ZXJzIHRvIHRob3NlIHRoaW5ncyB0aGF0IGRvbid0IGFkbWl0IHN0YWNrLgorICAgICAgICBpbnN0
LmZvckVhY2hBcmcoCisgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwg
QXJnOjpUeXBlIGFyZ1R5cGUsIEFyZzo6V2lkdGgpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXJn
VHlwZSAhPSB0eXBlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgaWYgKCFBcmc6OmlzRWFybHlEZWYocm9sZSkgJiYgIUFyZzo6aXNBbnlVc2Uocm9sZSkgJiYg
cm9sZSAhPSBBcmc6OlVzZUFkZHIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICAgICAgICAgIGlmIChhcmcuaXNUbXAoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAo
dG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgICAgIGlmIChpbnN0LmFkbWl0c1N0YWNrKCZhcmcgLSBpbnN0LmFyZ3NbMF0pKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICBhcmcgPSBU
bXAobG9jayhmaWxsKGFyZy50bXAoKSwgcm9sZSkpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGFyZy5mb3JFYWNoVG1w
KAorICAgICAgICAgICAgICAgICAgICByb2xlLCB0eXBlLCB3aWR0aCwKKyAgICAgICAgICAgICAg
ICAgICAgWyZdIChUbXAmIHRtcCwgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSwgQXJnOjpXaWR0
aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gVG1wKGxvY2soZmlsbCh0bXAsIHJv
bGUpKSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisKKyAgICAg
ICAgLy8gQWxsb2NhdGUgcmVnaXN0ZXJzIHRvIHRob3NlIHRoaW5ncyB0aGF0IGFkbWl0IHN0YWNr
IGJ1dCBhcmUgbm90IGNvbGQuIEtlZXAgdGhpcyB1cCBzbworICAgICAgICAvLyBsb25nIGFzIHdl
IHN0aWxsIGhhdmUgcmVnaXN0ZXJzLgorICAgICAgICBpbnN0LmZvckVhY2hBcmcoCisgICAgICAg
ICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIGFyZ1R5cGUsIEFy
Zzo6V2lkdGggd2lkdGgpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXJnVHlwZSAhPSB0eXBlKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgaWYgKCFBcmc6Omlz
QW55VXNlKHJvbGUpICYmICFBcmc6OmlzRWFybHlEZWYocm9sZSkpCisgICAgICAgICAgICAgICAg
ICAgIHJldXRybjsKKyAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0NvbGRVc2Uocm9sZSkpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBpZiAoIWFyZy5pc1Rt
cCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgaWYgKGFy
Zy5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgICAg
ICBSZWcgcmVnID0gZmlsbChhcmcudG1wKCksIHJvbGUsIERvbnRTcGlsbCk7CisgICAgICAgICAg
ICAgICAgaWYgKCFyZWcpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICBhcmcgPSBUbXAobG9jayhyZWcpKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgIC8v
IEZpZ3VyZSBvdXQgd2hhdCB0byBkbyB3aXRoIGV2ZXJ5dGhpbmcgZWxzZS4KKyAgICAgICAgaW5z
dC5mb3JFYWNoQXJnKAorICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUs
IEFyZzo6VHlwZSBhcmdUeXBlLCBBcmc6OldpZHRoIHdpZHRoKSB7CisgICAgICAgICAgICAgICAg
aWYgKGFyZ1R5cGUgIT0gdHlwZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgIGlmICghQXJnOjppc0FueVVzZShyb2xlKSAmJiAhQXJnOjppc0Vhcmx5RGVmKHJv
bGUpKQorICAgICAgICAgICAgICAgICAgICByZXV0cm47CisgICAgICAgICAgICAgICAgaWYgKCFh
cmcuaXNUbXAoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
IGlmIChhcmcuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
ICAgICAgICAgVG1wSW5mbyYgaW5mbyA9IGdldEluZm8oYXJnLnRtcCgpKTsKKyAgICAgICAgICAg
ICAgICBpZiAoaW5mby5yZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgYXJnID0gVG1wKGxvY2so
aW5mby5yZWcpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc2xvdCA9IHNwaWxsU2xvdChhcmcudG1w
KCkpOworICAgICAgICAgICAgICAgIGVuc3VyZVdpZHRoKHNsb3QsIHdpZHRoKTsKKyAgICAgICAg
ICAgICAgICBhcmcgPSBBcmc6OnN0YWNrKHNsb3QpOworICAgICAgICAgICAgfSk7CisKKyAgICAg
ICAgLy8gVW5sb2NrIGFsbCBvZiB0aGUgZWFybHkgY2xvYmJlcmVkIHJlZ2lzdGVycy4KKyAgICAg
ICAgaWYgKGluc3Qub3Bjb2RlID09IFBhdGNoKSB7CisgICAgICAgICAgICBpbnN0LmV4dHJhRWFy
bHlDbG9iYmVyZWRSZWdzKCkuZm9yRWFjaCgKKyAgICAgICAgICAgICAgICBbJl0gKFJlZyByZWcp
IHsKKyAgICAgICAgICAgICAgICAgICAgdW5sb2NrKHJlZyk7CisgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgIH0KKworICAgICAgICAvLyBVbmxvY2sgYWxsIG9mIHRoZSBlYXJseSB1c2VzLiBU
aGlzIHBlcm1pdHMgdGhvc2UgcmVnaXN0ZXJzIHRvIGJlIHVzZWQgZm9yIG90aGVyIHRoaW5ncy4K
KyAgICAgICAgLy8gSXQgZXZlbiBtZWFucyB0aGF0IHdlIG1pZ2h0IHNwaWxsIHRoZSB1c2VkIHJl
Z2lzdGVyIGluIHRoZSBzaHVmZmxlIGR1ZSB0byBhIGxhdGUgZGVmIHRoYXQKKyAgICAgICAgLy8g
Y291bGQgdXNlIHRoYXQgcmVnaXN0ZXIuCisgICAgICAgIGluc3QuZm9yRWFjaFRtcCgKKyAgICAg
ICAgICAgIFsmXSAoVG1wJiB0bXAsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgYXJnVHlwZSwg
QXJnOjpXaWR0aCkgeworICAgICAgICAgICAgICAgIGlmIChhcmdUeXBlICE9IHR5cGUpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBpZiAoIUFyZzo6aXNFYXJs
eVVzZShyb2xlKSAmJiByb2xlICE9IEFyZzo6VXNlQWRkcikKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRtcC5pc1JlZygpKTsKKyAg
ICAgICAgICAgICAgICB1bmxvY2sodG1wLnJlZygpKTsKKyAgICAgICAgICAgIH0pOworCisgICAg
ICAgIC8vIEFwcGx5IGFsbCBvZiB0aGUgZWFybHkgZGVhdGhzLgorICAgICAgICBmb3IgKERlYXRo
JiBkZWF0aCA6IG1fZGVhdGhzLmF0KG1fYmxvY2ssIG1faW5zdEluZGV4KSkgeworICAgICAgICAg
ICAgaWYgKGRlYXRoLmRlYXRoTW9kZSA9PSBFYXJseURlYXRoKQorICAgICAgICAgICAgICAgIGtp
bGwoZGVhdGgudG1wKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIExvY2sgYWxsIG9mIHRoZSBs
YXRlIGNsb2JiZXJlZCByZWdpc3RlcnMuCisgICAgICAgIGlmIChpbnN0Lm9wY29kZSA9PSBQYXRj
aCkgeworICAgICAgICAgICAgaW5zdC5leHRyYUNsb2JiZXJlZFJlZ3MoKS5mb3JFYWNoKAorICAg
ICAgICAgICAgICAgIFsmXSAoUmVnIHJlZykgeworICAgICAgICAgICAgICAgICAgICBzcGlsbChy
ZWcpOworICAgICAgICAgICAgICAgICAgICBsb2NrKHJlZyk7CisgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgIH0KKworICAgICAgICAvLyBGaWxsIGFuZCBsb2NrIGFsbCBvZiB0aGUgbGF0ZSBk
ZWZzLgorICAgICAgICBpbnN0LmZvckVhY2hBcmcoCisgICAgICAgICAgICBbJl0gKEFyZyYgYXJn
LCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIGFyZ1R5cGUsIEFyZzo6V2lkdGgpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoYXJnVHlwZSAhPSB0eXBlKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgaWYgKCFBcmc6OmlzTGF0ZURlZihyb2xlKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGlmICghYXJnLmlzUmVnKCkpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBsb2NrKGZpbGwoYXJn
LnRtcCgpKSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAvLyBBc3NpZ24gcmVnaXN0ZXJz
IHRvIHRob3NlIGxhdGUgZGVmcyB0aGF0IGRvbid0IGFkbWl0IHN0YWNrLgorICAgICAgICBpbnN0
LmZvckVhY2hBcmcoCisgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwg
QXJnOjpUeXBlIGFyZ1R5cGUsIEFyZzo6V2lkdGgpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXJn
VHlwZSAhPSB0eXBlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgaWYgKCFBcmc6OmlzTGF0ZURlZihyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgIGlmICghYXJnLmlzVG1wKCkpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBpZiAoaW5zdC5hZG1pdHNTdGFjaygmYXJn
IC0gaW5zdC5hcmdzWzBdKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICAgIGFyZyA9IFRtcChsb2NrKGZpbGwoYXJnLnRtcCgpLCByb2xlKSkpOworICAgICAgICAg
ICAgfSk7CisKKyAgICAgICAgLy8gRGVhbCB3aXRoIGV2ZXJ5b25lIGVsc2UuCisgICAgICAgIGlu
c3QuZm9yRWFjaEFyZygKKyAgICAgICAgICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSByb2xl
LCBBcmc6OlR5cGUgYXJnVHlwZSwgQXJnOjpXaWR0aCkgeworICAgICAgICAgICAgICAgIGlmIChh
cmdUeXBlICE9IHR5cGUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICBpZiAoIUFyZzo6aXNMYXRlRGVmKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgaWYgKCFhcmcuaXNUbXAoKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGlmIChhcmcuaXNSZWcoKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAgICAgUmVnIHJlZyA9IGZpbGwoYXJnLnRt
cCgpLCByb2xlLCBEb250U3BpbGwpOworICAgICAgICAgICAgICAgIGlmIChyZWcpIHsKKyAgICAg
ICAgICAgICAgICAgICAgYXJnID0gVG1wKHJlZyk7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
U3RhY2tTbG90KiBzbG90ID0gc3BpbGxTbG90KGFyZy50bXAoKSk7CisgICAgICAgICAgICAgICAg
ZW5zdXJlV2lkdGgod2lkdGgpOworICAgICAgICAgICAgICAgIGFyZyA9IEFyZzo6c3RhY2soc2xv
dCk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAvLyBBcHBseSB0aGUgbGF0ZSBkZWF0aHMu
CisgICAgICAgIGZvciAoRGVhdGgmIGRlYXRoIDogbV9kZWF0aHMuYXQobV9ibG9jaywgbV9pbnN0
SW5kZXgpKSB7CisgICAgICAgICAgICBpZiAoZGVhdGguZGVhdGhNb2RlID09IExhdGVEZWF0aCkK
KyAgICAgICAgICAgICAgICBraWxsKGRlYXRoLnRtcCk7CisgICAgICAgIH0KKworICAgICAgICBl
bWl0U2h1ZmZsZShtX2luc3RJbmRleCk7CisgICAgICAgIHVubG9ja0FsbCgpOworICAgIH0KKwor
ICAgIHZvaWQgYm9vdEJsb2NrKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHsKKyAgICAgICAgU3Rh
dGUmIGRzdFN0YXRlID0gbV9hdEhlYWRbYmxvY2tdOworCisgICAgICAgIGZvciAoYXV0byYgZW50
cnkgOiBkc3RTdGF0ZS5tYXBwaW5nKSB7CisgICAgICAgICAgICBUbXBJbmZvJiBzcmNJbmZvID0g
Z2V0SW5mbyhlbnRyeS5rZXkpOworICAgICAgICAgICAgVG1wSW5mbyYgZHN0SW5mbyA9IGVudHJ5
LnZhbHVlOworICAgICAgICAgICAgZHN0SW5mby5yZWcgPSBzcmNJbmZvLnJlZzsKKyAgICAgICAg
ICAgIGRzdEluZm8uaGFzU3BpbGwgPSBzcmNJbmZvLmhhc1NwaWxsOworICAgICAgICAgICAgaWYg
KHNyY0luZm8ucmVnKQorICAgICAgICAgICAgICAgIGRzdFN0YXRlLnJldmVyc2VNYXBwaW5nW3Ny
Y0luZm8ucmVnXSA9IGVudHJ5LmtleTsKKyAgICAgICAgfQorCisgICAgICAgIGRzdFN0YXRlLmlz
U2V0dGxlZCA9IHRydWU7CisgICAgfQorCisgICAgdm9pZCBjb25mb3JtVG8oQmFzaWNCbG9jayog
YmxvY2spCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2Jsb2NrLT5sYXN0KCkub3Bj
b2RlID09IEp1bXApOworICAgICAgICAKKyAgICAgICAgU3RhdGUmIGRzdFN0YXRlID0gbV9hdEhl
YWRbYmxvY2tdOworICAgICAgICBSRUxFQVNFX0FTU0VSVChkc3RTdGF0ZS5pc1NldHRsZWQpOwor
CisgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBkc3RTdGF0ZS5tYXBwaW5nKSB7CisgICAgICAg
ICAgICBUbXBJbmZvJiBzcmNJbmZvID0gZ2V0SW5mbyhlbnRyeS5rZXkpOworICAgICAgICAgICAg
VG1wSW5mbyYgZHN0SW5mbyA9IGVudHJ5LnZhbHVlOworCisgICAgICAgICAgICBpZiAoZHN0SW5m
by5yZWcgJiYgZHN0SW5mby5yZWcgIT0gc3JjSW5mby5yZWcpIHsKKyAgICAgICAgICAgICAgICBT
aHVmZmxlUGFpciBwYWlyOworICAgICAgICAgICAgICAgIGlmIChzcmNJbmZvLnJlZykgeworICAg
ICAgICAgICAgICAgICAgICBwYWlyID0gU2h1ZmZsZVBhaXIoCisgICAgICAgICAgICAgICAgICAg
ICAgICBUbXAoc3JjSW5mby5yZWcpLCBUbXAoZHN0SW5mby5yZWcpLCBtX3RtcFdpZHRoLndpZHRo
KGVudHJ5LmtleSkpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3JjSW5mby5oYXNDb25z
dGFudCkgeworICAgICAgICAgICAgICAgICAgICBwYWlyID0gU2h1ZmZsZVBhaXIoCisgICAgICAg
ICAgICAgICAgICAgICAgICBBcmc6OmltbTY0KHNyY0luZm8uY29uc3RhbnQpLCBUbXAoZHN0SW5m
by5yZWcpLCBtX3RtcFdpZHRoLndpZHRoKGVudHJ5LmtleSkpOworICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNyY0luZm8uaGFzU3Bp
bGwpOworICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHNsb3QgPSBzcGlsbFNsb3QoZW50
cnkua2V5KTsKKyAgICAgICAgICAgICAgICAgICAgcGFpciA9IFNodWZmbGVQYWlyKEFyZzo6c3Rh
Y2soc2xvdCksIFRtcChkc3RJbmZvLnJlZyksIHdpZHRoKHNsb3QpKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgbV9zaHVmZmxlUGFpcnMuYXBwZW5kKHBhaXIpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoZHN0SW5mby5oYXNTcGlsbCAmJiAhc3JjSW5mby5o
YXNTcGlsbCkgeworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNyY0luZm8ucmVnKTsK
KyAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHNsb3QgPSBzcGlsbFNsb3QoZW50cnkua2V5KTsK
KyAgICAgICAgICAgICAgICBtX3NodWZmbGVQYWlycy5hcHBlbmQoVG1wKHNyY0luZm8ucmVnKSwg
QXJnOjpzdGFjayhzbG90KSwgd2lkdGgoc2xvdCkpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgZW1pdFNodWZmbGUobV9ibG9jay0+c2l6ZSgpIC0gMSk7CisgICAgfQorCisg
ICAgVG1wSW5mbyYgZ2V0SW5mbyhUbXAgdG1wKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc3Rh
dGUubWFwcGluZy5hZGQodG1wLCBUbXBJbmZvKCkpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICB9CisK
KyAgICBlbnVtIEZpbGxFZmZvcnQgeworICAgICAgICBNdXN0RmlsbCwKKyAgICAgICAgRG9udFNw
aWxsCisgICAgfTsKKworICAgIFJlZyBmaWxsKFRtcCB0bXAsIEFyZzo6Um9sZSByb2xlLCBGaWxs
RWZmb3J0IGZpbGxFZmZvcnQgPSBNdXN0RmlsbCkKKyAgICB7CisgICAgICAgIGlmIChyb2xlID09
IEFyZzo6VXNlRGVmIHx8IEFyZzo6aXNFYXJseURlZihyb2xlKSkgeworICAgICAgICAgICAgSW5z
dCYgaW5zdCA9IG1fYmxvY2stPmF0KG1faW5zdEluZGV4KTsKKyAgICAgICAgICAgIHJldHVybiBm
aWxsKAorICAgICAgICAgICAgICAgIHRtcCwgcm9sZSwgZmlsbEVmZm9ydCwKKyAgICAgICAgICAg
ICAgICBbJl0gKFJlZyBjYW5kaWRhdGUpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICAv
LyBVc2VEZWYgYW5kIGVhcmx5IERlZiByZXF1aXJlcyB1cyB0byBsb29rIGFoZWFkIGFuZCBzZWUg
aWYgdGhlIGNhbmRpZGF0ZQorICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciBpcyBhY2Nl
cHRhYmxlIHRvIHRoZSBsYXRlIGRlZnMsIGxhdGUgdXNlcywgYW5kIGxhdGUgY2xvYmJlcnMuIEFu
IGVhc3kKKyAgICAgICAgICAgICAgICAgICAgLy8gd2F5IHRvIGRvIHRoaXMgaXMganVzdCB0byBz
ZWUgaWYgdGhlIHJlZ2lzdGVyIGFwcGVhcnMgYW55d2hlcmUgaW4gdGhlIGFyZ3VtZW50CisgICAg
ICAgICAgICAgICAgICAgIC8vIGxpc3QuIE5vdGUgdGhhdCB3ZSBkb24ndCBoYXZlIHRvIGNvbnNp
ZGVyIG5vbi1UbXAgQXJncywgYmVjYXVzZSB0aG9zZSB3b3VsZAorICAgICAgICAgICAgICAgICAg
ICAvLyBhbGwgaGF2ZSBlYXJseSB1c2VzLgorICAgICAgICAgICAgICAgICAgICBmb3IgKEFyZyYg
YXJnIDogaW5zdC5hcmdzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJnLmlzUmVn
KCkgJiYgYXJnLnJlZygpID09IGNhbmRpZGF0ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICAvLyBPZiBjb3Vyc2UsIHRoZXJlIGlzIHRoZSBhbm5veWluZyBQYXRjaCBpbnN0cnVjdGlv
biBhbmQgaXRzIGNsb2JiZXJlZAorICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlcnMuCisg
ICAgICAgICAgICAgICAgICAgIGlmIChpbnN0Lm9wY29kZSA9PSBQYXRjaCAmJiBpbnN0LmV4dHJh
Q2xvYmJlcmVkUmVncygpLmdldChjYW5kaWRhdGUpKQorICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZpbGwodG1wLCByb2xl
LCBmaWxsRWZmb3J0LCBbXSAoUmVnKSAtPiBib29sIHsgcmV0dXJuIHRydWU7IH0pOworICAgIH0K
KyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIFJlZyBmaWxsKFRtcCB0
bXAsIEFyZzo6Um9sZSByb2xlLCBGaWxsRWZmb3J0IGZpbGxFZmZvcnQsIGNvbnN0IEZ1bmN0b3Im
IGZ1bmN0b3IpCisgICAgeworICAgICAgICBUbXBJbmZvJiBpbmZvID0gZ2V0SW5mbyh0bXApOwor
CisgICAgICAgIGlmIChBcmc6OmlzQW55RGVmKHJvbGUpKSB7CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVCghaW5mby5oYXNTcGlsbCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghaW5m
by5oYXNDb25zdGFudCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghaW5mby5yZWcpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoaW5mby5yZWcpIHsKKyAgICAgICAgICAg
IGlmICh0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh0bXAucmVn
KCkgPT0gaW5mby5yZWcpOworICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gaW5mby5y
ZWc7CisgICAgICAgIH0KKworICAgICAgICBSZWcgcmVnID0gdG1wLnJlZygpOworICAgICAgICBp
ZiAoIXJlZykgeworICAgICAgICAgICAgZm9yIChSZWcgY2FuZGlkYXRlIDogcmVnc0luUHJpb3Jp
dHlPcmRlcih0eXBlKSkgeworICAgICAgICAgICAgICAgIFJlZ0luZm8mIHJlZ0luZm8gPSBtX3N0
YXRlLnJldmVyc2VNYXBwaW5nW2NhbmRpZGF0ZV07CisgICAgICAgICAgICAgICAgaWYgKHJlZ0lu
Zm8uaXNMb2NrZWQgfHwgcmVnSW5mby50bXAgfHwgIWZ1bmN0b3IoY2FuZGlkYXRlKSkKKyAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgcmVnID0gY2FuZGlkYXRl
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoIXJlZykgeworICAgICAgICAgICAgICAgIGlmIChmaWxsRWZmb3J0ID09IERvbnRTcGlsbCkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlZygpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIC8vIE5lZWQgdG8gc3BpbGwgc29tZXRoaW5nLiBTcGlsbCB0aGUgcmVnIHRo
YXQgaG9sZHMgdGhlIHRtcCB0aGF0IGhhcyB0aGUgbGVhc3Qgd2FybQorICAgICAgICAgICAgICAg
IC8vIHVzZXMuCisgICAgICAgICAgICAgICAgdW5zaWduZWQgbWluV2FybVVzZXMgPSBVSU5UX01B
WDsKKyAgICAgICAgICAgICAgICBmb3IgKFJlZyBjYW5kaWRhdGUgOiByZWdzSW5Qcmlvcml0eU9y
ZGVyKHR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgIFJlZ0luZm8mIHJlZ0luZm8gPSBtX3N0
YXRlLnJldmVyc2VNYXBwaW5nW2NhbmRpZGF0ZV07CisgICAgICAgICAgICAgICAgICAgIGlmIChy
ZWdJbmZvLmlzTG9ja2VkIHx8ICFmdW5jdG9yKGNhbmRpZGF0ZSkpCisgICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtV2FybVVz
ZXMgPSBtX3VzZUNvdW50c1tyZWdJbmZvLnRtcF0ubnVtV2FybVVzZXM7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChudW1XYXJtVXNlcyA8IG1pbldhcm1Vc2VzKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICByZWcgPSBjYW5kaWRhdGU7CisgICAgICAgICAgICAgICAgICAgICAgICBtaW5XYXJt
VXNlcyA9IG51bVdhcm1Vc2VzOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCFyZWcpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBSZWcoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHNwaWxsKHJl
Zyk7CisgICAgICAgIGlmIChBcmc6OmlzQW55VXNlKHJvbGUpICYmIHJvbGUgIT0gQXJnOjpTY3Jh
dGNoKSB7CisgICAgICAgICAgICBTdGFja1Nsb3QqIHNsb3QgPSBzcGlsbFNsb3QodG1wKTsKKyAg
ICAgICAgICAgIGlmIChpbmZvLmhhc0NvbnN0YW50KSB7CisgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQodHlwZSA9PSBBcmc6OkdQKTsKKyAgICAgICAgICAgICAgICBhZGRNb3ZlKFNodWZm
bGVQYWlyKEFyZzo6aW1tNjQoaW5mby5jb25zdGFudCksIFRtcChyZWcpLCB3aWR0aChzbG90KSkp
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChp
bmZvLmhhc1NwaWxsKTsKKyAgICAgICAgICAgICAgICBhZGRNb3ZlKFNodWZmbGVQYWlyKEFyZzo6
c3RhY2soc2xvdCksIFRtcChyZWcpLCB3aWR0aChzbG90KSkpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIG1fc3RhdGUucmV2ZXJzZU1hcHBpbmdbcmVnXS50bXAgPSB0bXA7Cisg
ICAgICAgIGluZm8ucmVnID0gcmVnOworICAgICAgICByZXR1cm4gcmVnOworICAgIH0KKworICAg
IHZvaWQgc3BpbGwoUmVnIHJlZykKKyAgICB7CisgICAgICAgIFJlZ0luZm8mIHJlZ0luZm8gPSBt
X3N0YXRlLnJldmVyc2VNYXBwaW5nW3JlZ107CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFyZWdJ
bmZvLmlzTG9ja2VkKTsKKyAgICAgICAgaWYgKCFyZWdJbmZvLnRtcCkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgCisgICAgICAgIFRtcEluZm8mIHRtcEluZm8gPSBnZXRJbmZvKHJlZ0lu
Zm8udG1wKTsKKworICAgICAgICBTdGFja1Nsb3QqIHNsb3QgPSBzcGlsbFNsb3QodG1wKTsKKyAg
ICAgICAgaWYgKCF0bXBJbmZvLmhhc1NwaWxsKSB7CisgICAgICAgICAgICBhZGRNb3ZlKFNodWZm
bGVQYWlyKFRtcChyZWcpLCBBcmc6OnN0YWNrKHNsb3QpLCB3aWR0aChzbG90KSkpOworICAgICAg
ICAgICAgdG1wSW5mby5oYXNTcGlsbCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmVnSW5m
by50bXAgPSBUbXAoKTsKKyAgICAgICAgdG1wSW5mby5yZWcgPSBSZWcoKTsKKyAgICB9CisKKyAg
ICB2b2lkIGtpbGwoVG1wIHRtcCkKKyAgICB7CisgICAgICAgIFRtcEluZm8mIHRtcEluZm8gPSBn
ZXRJbmZvKHRtcCk7CisgICAgICAgIHRtcEluZm8uaGFzQ29uc3RhbnQgPSBmYWxzZTsKKyAgICAg
ICAgdG1wSW5mby5oYXNTcGlsbCA9IGZhbHNlOworICAgICAgICAKKyAgICAgICAgaWYgKCF0bXBJ
bmZvLnJlZykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIFJlZ0luZm8m
IHJlZ0luZm8gPSBtX3N0YXRlLnJldmVyc2VNYXBwaW5nW3RtcEluZm8ucmVnXTsKKyAgICAgICAg
dG1wSW5mby5yZWcgPSBSZWcoKTsKKyAgICAgICAgcmVnSW5mby50bXAgPSBUbXAoKTsKKyAgICB9
CisKKyAgICBSZWcgbG9jayhSZWcgcmVnKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
cmVnKTsKKyAgICAgICAgYm9vbCYgaXNMb2NrZWQgPSBtX3N0YXRlLnJldmVyc2VNYXBwaW5nW3Jl
Z10uaXNMb2NrZWQ7CisgICAgICAgIGlmICghaXNMb2NrZWQpIHsKKyAgICAgICAgICAgIGlzTG9j
a2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIG1fbG9ja2VkLmFwcGVuZChyZWcpOworICAgICAgICB9
CisgICAgICAgIHJldHVybiByZWc7CisgICAgfQorCisgICAgdm9pZCB1bmxvY2tBbGwoKQorICAg
IHsKKyAgICAgICAgZm9yIChSZWcgcmVnIDogbV9sb2NrZWQpCisgICAgICAgICAgICBtX3N0YXRl
LnJldmVyc2VNYXBwaW5nW3JlZ10uaXNMb2NrZWQgPSBmYWxzZTsKKyAgICAgICAgbV9sb2NrZWQu
cmVzaXplKDApOworICAgIH0KKworICAgIHZvaWQgYWRkTW92ZShjb25zdCBTaHVmZmxlUGFpciYg
cGFpcikKKyAgICB7CisgICAgICAgIG1fc2h1ZmZsZVBhaXJzLnJlbW92ZUFsbE1hdGNoaW5nKAor
ICAgICAgICAgICAgWyZdIChjb25zdCBTaHVmZmxlUGFpciYgb3RoZXJQYWlyKSB7CisgICAgICAg
ICAgICAgICAgaWYgKG90aGVyUGFpci5kc3QoKSA9PSBwYWlyLmRzdCgpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9KTsKKyAgICAgICAgZm9yIChTaHVmZmxlUGFp
ciYgb3RoZXJQYWlyIDogbV9zaHVmZmxlUGFpcnMpIHsKKyAgICAgICAgICAgIGlmIChvdGhlclBh
aXIuZHN0KCkgPT0gcGFpci5zcmMoKSkgeworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KG90aGVyUGFpci53aWR0aCgpID09IHBhaXIud2lkdGgoKSk7CisgICAgICAgICAgICAgICAgbV9z
aHVmZmxlUGFpcnMuYXBwZW5kKFNodWZmbGVQYWlyKG90aGVyUGFpci5zcmMoKSwgcGFpci5kc3Qo
KSwgcGFpci53aWR0aCgpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIG1fc2h1ZmZsZVBhaXJzLmFwcGVuZChwYWlyKTsKKyAgICB9
CisKKyAgICB2b2lkIGVtaXRTaHVmZmxlKHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAg
bV9pbnNlcnRpb25TZXQuaW5zZXJ0KGluZGV4LCBjcmVhdGVTaHVmZmxlKG1fc2h1ZmZsZVBhaXJz
KSk7CisgICAgICAgIG1fc2h1ZmZsZVBhaXJzLnJlc2l6ZSgwKTsKKyAgICB9CisKKyAgICBBcmc6
OldpZHRoIHdpZHRoKFNwaWxsU2xvdCogc2xvdCkKKyAgICB7CisgICAgICAgIHJldHVybiBBcmc6
OndpZHRoRm9yQnl0ZXMoc2xvdC0+Ynl0ZXMoKSk7CisgICAgfQorCisgICAgLy8gV2UgbWF5IGNo
b29zZSB0byBkbyBhIGZ1bGx3aWR0aCBkZWYgb3IgdXNlIG9uIGEgc3Vid2lkdGggc3BpbGwgc2xv
dC4gV2hlbiB0aGlzIGhhcHBlbnMsIHdlCisgICAgLy8gbmVlZCB0byBpbmNyZWFzZSB0aGUgd2lk
dGggb2YgdGhlIHNsb3QuIE5vdGUgdGhhdCB3ZSByZWx5IG9uIHNwaWxsIHNsb3RzIGhhdmluZyBa
RGVmCisgICAgLy8gc2VtYW50aWNzLgorICAgIHZvaWQgZW5zdXJlV2lkdGgoU3BpbGxTbG90KiBz
bG90LCBBcmc6OldpZHRoIHdpZHRoKQorICAgIHsKKyAgICAgICAgc2xvdC0+ZW5zdXJlU2l6ZShB
cmc6OmJ5dGVzKHdpZHRoKSk7CisgICAgfQorICAgIAorICAgIFN0YWNrU2xvdCogc3BpbGxTbG90
KFRtcCB0bXApCisgICAgeworICAgICAgICBTdGFja1Nsb3QqJiByZXN1bHQgPSBtX3NwaWxsU2xv
dHMuYWRkKHRtcCwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOworICAgICAgICBpZiAoIXJlc3Vs
dCkgeworICAgICAgICAgICAgcmVzdWx0ID0gbV9jb2RlLmFkZFN0YWNrU2xvdCgKKyAgICAgICAg
ICAgICAgICBtX3RtcFdpZHRoLndpZHRoKHRtcCkgPD0gQXJnOjpXaWR0aDMyID8gNCA6IDgsCisg
ICAgICAgICAgICAgICAgU3RhY2tTbG90S2luZDo6QW5vbnltb3VzKTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdHJ1Y3QgVG1wSW5mbyB7Cisg
ICAgICAgIFRtcEluZm8oKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGV4cGxpY2l0IFRtcEluZm8oUmVnIHJlZykKKyAgICAgICAgICAgIDogcmVnKHJlZykKKyAgICAg
ICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpbnQ2NF90IGNvbnN0YW50IHsgMCB9
OworICAgICAgICBSZWcgcmVnOworICAgICAgICBib29sIGhhc0NvbnN0YW50IHsgZmFsc2UgfTsK
KyAgICAgICAgYm9vbCBoYXNTcGlsbCB7IGZhbHNlIH07CisgICAgfTsKKworICAgIHN0cnVjdCBS
ZWdJbmZvIHsKKyAgICAgICAgUmVnSW5mbygpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAg
ICAgIGV4cGxpY2l0IFJlZ0luZm8oVG1wIHRtcCkKKyAgICAgICAgICAgIDogdG1wKHRtcCkKKyAg
ICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgVG1wIHRtcDsKKyAgICAgICAgYm9vbCBpc0xv
Y2tlZCB7IGZhbHNlIH07CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAg
Y2xhc3MgUmVnTWFwIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFJlZ01hcCgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICAgICAgY2FzZSBBcmc6OkdQOgor
ICAgICAgICAgICAgICAgIG1fdmVjdG9yLnJlc2l6ZShUKCksIE1hY3JvQXNzZW1ibGVyOjpudW1i
ZXJPZlJlZ2lzdGVycygpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgQXJnOjpGUDoKKyAgICAgICAgICAgICAgICBtX3ZlY3Rvci5yZXNpemUoVCgpLCBNYWNyb0Fz
c2VtYmxlcjo6bnVtYmVyT2ZGUFJlZ2lzdGVycygpKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIFQmIG9wZXJhdG9yW10oUmVnIHJl
ZykKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgICAgICBj
YXNlIEFyZzo6R1A6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fdmVjdG9yW01hY3JvQXNzZW1i
bGVyOjpyZWdpc3RlckluZGV4KHJlZy5ncHIoKSldOworICAgICAgICAgICAgY2FzZSBBcmc6OkZQ
OgorICAgICAgICAgICAgICAgIHJldHVybiBtX3ZlY3RvcltNYWNyb0Fzc2VtYmxlcjo6cmVnaXN0
ZXJJbmRleChyZWcuZnByKCkpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAK
KyAgICBwcml2YXRlOgorICAgICAgICBWZWN0b3I8VD4gbV92ZWN0b3I7CisgICAgfTsKKworICAg
IHN0cnVjdCBTdGF0ZSB7CisgICAgICAgIEhhc2hNYXA8VG1wLCBUbXBJbmZvPiBtYXBwaW5nOyAv
LyBJZiB0aGUgb3JpZ2luYWwgcHJvZ3JhbSBhc2tzIGZvciB0aGlzIHRtcCwgd2hlcmUgaXMgaXQ/
CisgICAgICAgIFJlZ01hcDxSZWdJbmZvPiByZXZlcnNlTWFwcGluZzsgLy8gV2hhdCB0bXAgZG9l
cyB0aGlzIHJlZ2lzdGVyIGhvbGQgcmlnaHQgbm93PworICAgICAgICBib29sIHZpc2l0ZWRCeVBy
b3BhZ2F0aW9uIHsgZmFsc2UgfTsKKyAgICAgICAgYm9vbCBpc1NldHRsZWQgeyBmYWxzZSB9Owor
ICAgIH07CisKKyAgICBlbnVtIERlYXRoTW9kZSB7CisgICAgICAgIEVhcmx5RGVhdGgsCisgICAg
ICAgIExhdGVEZWF0aAorICAgIH07CisKKyAgICBzdHJ1Y3QgRGVhdGggeworICAgICAgICBEZWF0
aCgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIERlYXRoKFRtcCB0bXAsIERlYXRo
TW9kZSBkZWF0aE1vZGUpCisgICAgICAgICAgICA6IHRtcCh0bXApCisgICAgICAgICAgICAsIGRl
YXRoTW9kZShkZWF0aE1vZGUpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgVG1wIHRtcDsKKyAgICAgICAgRGVhdGhNb2RlIGRlYXRoTW9kZSB7IEVhcmx5RGVhdGggfTsK
KyAgICB9OworICAgIAorICAgIENvZGUmIG1fY29kZTsKKyAgICBUbXBMaXZlbmVzczx0eXBlPiBt
X2xpdmVuZXNzOworICAgIEluc3RNYXA8VmVjdG9yPERlYXRoPj4gbV9kZWF0aHM7CisgICAgSW5k
ZXhNYXA8QmFzaWNCbG9jaywgU3RhdGU+IG1fYXRIZWFkOworICAgIFN0YXRlIG1fc3RhdGU7Cisg
ICAgVmVjdG9yPFJlZz4gbV9sb2NrZWQ7CisgICAgVXNlQ291bnRzIG1fdXNlQ291bnRzOworICAg
IFRtcFdpZHRoIG1fdG1wV2lkdGg7CisgICAgSGFzaE1hcDxUbXAsIFN0YWNrU2xvdCo+IG1fc3Bp
bGxTbG90czsKKyAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrIHsgbnVsbHB0ciB9OworICAgIHVuc2ln
bmVkIG1faW5zdEluZGV4IHsgMCB9OworICAgIFZlY3RvcjxTaHVmZmxlUGFpcj4gbV9zaHVmZmxl
UGFpcnM7CisgICAgSW5zZXJ0aW9uU2V0IG1faW5zZXJ0aW9uU2V0OworICAgIGJvb2wgbV9jaGFu
Z2VkIHsgZmFsc2UgfTsKK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIHNj
YXZlbmdlUmVnaXN0ZXJzKENvZGUmIGNvZGUpCit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3Bl
KGNvZGUsICJzY2F2ZW5nZVJlZ2lzdGVycyIpOworCisgICAgYnJlYWtDcml0aWNhbEVkZ2VzKGNv
ZGUpOworCisgICAgeworICAgICAgICBTY2F2ZW5nZVJlZ2lzdGVyczxBcmc6OkZQPiBzY2F2ZW5n
ZVJlZ2lzdGVycyhjb2RlKTsKKyAgICAgICAgc2NhdmVuZ2VSZWdpc3RlcnMucnVuKCk7CisgICAg
fQorICAgIHsKKyAgICAgICAgU2NhdmVuZ2VSZWdpc3RlcnM8QXJnOjpHUD4gc2NhdmVuZ2VSZWdp
c3RlcnMoY29kZSk7CisgICAgICAgIHNjYXZlbmdlUmVnaXN0ZXJzLnJ1bigpOworICAgIH0KK30K
KworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTY2F2ZW5nZVJl
Z2lzdGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
U2NhdmVuZ2VSZWdpc3RlcnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyU2NhdmVuZ2VSZWdpc3RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBBaXJTY2F2ZW5nZVJlZ2lzdGVyc19oCisjZGVmaW5lIEFpclNjYXZlbmdlUmVnaXN0ZXJz
X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKworLy8gVGhpcyBhbGxvY2F0ZXMgdGVt
cG9yYXJpZXMgdG8gcmVnaXN0ZXJzIG9yIHN0YWNrIGxvY2F0aW9ucyBiYXNlZCBvbiBmb3J3YXJk
IGZsb3cuIEl0IHdpbGwgaGFwcGlseQorLy8gY2hhbmdlIHRoZSBsb2NhdGlvbiBvZiBhIHRlbXBv
cmFyeSBpbiBjYXNlIHRoZSByZWdpc3RlciBpdCBoYWQgcGlja2VkIGJlY29tZXMgdW5hdmFpbGFi
bGUgb3IgaW4KKy8vIGNhc2Ugd2UgbmVlZCB0aGUgdmFsdWUgYW5kIGl0J3MgY3VycmVudGx5IG9u
IHRoZSBzdGFjay4gSXQgYWxzbyBwZXJmb3JtcyBtYXRlcmlhbGl6YXRpb24gb2YKKy8vIGNvbnN0
YW50czogaWYgYSB0ZW1wb3JhcnkncyB2YWx1ZSBpcyBhbHdheXMgYSBjb25zdGFudCB0aGVuIGlu
c3RlYWQgb2Ygc3BpbGxpbmcgd2Ugd2lsbCBzaW1wbHkKKy8vIHJlbWF0ZXJpYWxpemUuCisvLwor
Ly8gVGhpcyBwaGFzZSBpcyBtZWFudCB0byBydW4gYWZ0ZXIgdGhlIHByaW1hcnkgcmVnaXN0ZXIg
YWxsb2NhdG9yLiBUaGUgcHJpbWFyeSByZWdpc3RlciBhbGxvY2F0b3IKKy8vIGlzIGJlc3Qgb2Zm
IGhhbmRsaW5nIHNwaWxscyBieSBzaW1wbHkgbGVhdmluZyBzcGlsbGVkIFRtcHMgYWxvbmUuIFRo
aXMgcGhhc2Ugd2lsbCBlbWl0IHByb3BlcgorLy8gc3BpbGwgY29kZSwgYW5kIGl0IHdpbGwgZG8g
aXQgbW9yZSBlZmZpY2llbnRseSB0aGFuIGNsYXNzaWNhbCBzcGlsbGluZyBhbGdvcml0aG1zLgor
dm9pZCBzY2F2ZW5nZVJlZ2lzdGVycyhDb2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJTY2F2
ZW5nZVJlZ2lzdGVyc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
U3BpbGxFdmVyeXRoaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAJKHJldmlzaW9uIDE5NTA4MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjksNyArMjksNiBAQAogI2lmIEVOQUJMRShCM19KSVQpCiAKICNpbmNsdWRlICJB
aXJDb2RlLmgiCi0jaW5jbHVkZSAiQWlyRml4U3BpbGxTbG90WkRlZi5oIgogI2luY2x1ZGUgIkFp
ckluc2VydGlvblNldC5oIgogI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
QWlyTGl2ZW5lc3MuaCIKQEAgLTEzMCw3ICsxMjksNiBAQCB2b2lkIHNwaWxsRXZlcnl0aGluZyhD
b2RlJiBjb2RlKQogICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJvbGUpIHsKICAgICAgICAg
ICAgICAgICAgICAgY2FzZSBBcmc6OlVzZToKICAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6
OkNvbGRVc2U6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpFYXJseURlZjoKICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IHJlZ3NJblByaW9yaXR5T3JkZXIodHlw
ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNldEJlZm9yZS5nZXQocmVn
KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRCZWZvcmUuc2V0KHJlZyk7
CkBAIC0xNTQsNiArMTUyLDcgQEAgdm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYgY29kZSkKICAg
ICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkxhdGVVc2U6CiAgICAgICAgICAgICAgICAgICAg
IGNhc2UgQXJnOjpMYXRlQ29sZFVzZToKICAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OlNj
cmF0Y2g6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpFYXJseURlZjoKICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IHJlZ3NJblByaW9yaXR5T3JkZXIodHlwZSkp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNldEJlZm9yZS5nZXQocmVnKSAm
JiAhc2V0QWZ0ZXIuZ2V0KHJlZykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2V0QWZ0ZXIuc2V0KHJlZyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clN0YWNrU2xvdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyU3RhY2tTbG90LmgJKHJldmlzaW9uIDE5NTA4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyU3RhY2tTbG90LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDEyIEBA
IHB1YmxpYzoKICAgICBib29sIGlzTG9ja2VkKCkgY29uc3QgeyByZXR1cm4gbV9raW5kID09IFN0
YWNrU2xvdEtpbmQ6OkxvY2tlZDsgfQogICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1
cm4gbV9pbmRleDsgfQogCisgICAgdm9pZCBlbnN1cmVTaXplKHVuc2lnbmVkIHJlcXVlc3RlZFNp
emUpCisgICAgeworICAgICAgICBBU1NFUlQoIW1fb2Zmc2V0RnJvbUZQKTsKKyAgICAgICAgbV9i
eXRlU2l6ZSA9IHN0ZDo6bWF4KG1fYnl0ZVNpemUsIHJlcXVlc3RlZFNpemUpOworICAgIH0KKwog
ICAgIHVuc2lnbmVkIGFsaWdubWVudCgpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoYnl0ZVNp
emUoKSA8PSAxKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJWYWxpZGF0
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJWYWxp
ZGF0ZS5jcHAJKHJldmlzaW9uIDE5NTA4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw2ICs4MiwxMyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKGlzVGVybWluYWwoaW5zdC5vcGNvZGUp
LCAoIkF0ICIsIGluc3QsICIgaW4gIiwgKmJsb2NrKSk7CiAgICAgICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgICAgICBWQUxJREFURSghaXNUZXJtaW5hbChpbnN0Lm9wY29kZSksICgi
QXQgIiwgaW5zdCwgIiBpbiAiLCAqYmxvY2spKTsKKworICAgICAgICAgICAgICAgIC8vIGZvckVh
Y2hBcmcgbXVzdCByZXR1cm4gQXJnJidzIHRoYXQgcG9pbnQgaW50byB0aGUgYXJncyBhcnJheS4K
KyAgICAgICAgICAgICAgICBpbnN0LmZvckVhY2hBcmcoCisgICAgICAgICAgICAgICAgICAgIFsm
XSAoQXJnJiBhcmcsIEFyZzo6Um9sZSwgQXJnOjpUeXBlLCBBcmc6OldpZHRoKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBWQUxJREFURSgmYXJnID49IGluc3QuYXJnc1swXSwgKCJBdCAiLCBh
cmcsICIgaW4gIiwgaW5zdCwgIiBpbiAiLCAqYmxvY2spKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFZBTElEQVRFKCZhcmcgPD0gaW5zdC5hcmdzLmxhc3QoKSwgKCJBdCAiLCBhcmcsICIgaW4g
IiwgaW5zdCwgIiBpbiAiLCAqYmxvY2spKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2Nr
LT5zdWNjZXNzb3JCbG9ja3MoKSkKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWxpZEJsb2Nr
cy5jb250YWlucyhzdWNjZXNzb3IpLCAoIkluICIsICpibG9jaykpOwpJbmRleDogU291cmNlL1dU
Ri93dGYvSW5kZXhTcGFyc2VTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9JbmRl
eFNwYXJzZVNldC5oCShyZXZpc2lvbiAxOTUwODMpCisrKyBTb3VyY2UvV1RGL3d0Zi9JbmRleFNw
YXJzZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw4ICs0Nyw4IEBAIGNsYXNzIEluZGV4U3Bh
cnNlU2V0IHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBJbmRleFNwYXJzZVNldCh1bnNpZ25lZCBt
YXhWYWx1ZSk7CiAKLSAgICB2b2lkIGFkZCh1bnNpZ25lZCk7Ci0gICAgdm9pZCByZW1vdmUodW5z
aWduZWQpOworICAgIGJvb2wgYWRkKHVuc2lnbmVkKTsKKyAgICBib29sIHJlbW92ZSh1bnNpZ25l
ZCk7CiAgICAgdm9pZCBjbGVhcigpOwogCiAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0OwpAQCAt
NzQsMjYgKzc0LDMwIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KIGlubGlu
ZSB2b2lkIEluZGV4U3BhcnNlU2V0PE92ZXJmbG93SGFuZGxlcj46OmFkZCh1bnNpZ25lZCB2YWx1
ZSkKIHsKICAgICBpZiAoY29udGFpbnModmFsdWUpKQotICAgICAgICByZXR1cm47CisgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIHVuc2lnbmVkIG5ld1Bvc2l0aW9uID0gbV92YWx1ZXMuc2l6
ZSgpOwogICAgIG1fdmFsdWVzLmFwcGVuZCh2YWx1ZSk7CiAgICAgbV9tYXBbdmFsdWVdID0gbmV3
UG9zaXRpb247CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE92ZXJm
bG93SGFuZGxlcj4KLWlubGluZSB2b2lkIEluZGV4U3BhcnNlU2V0PE92ZXJmbG93SGFuZGxlcj46
OnJlbW92ZSh1bnNpZ25lZCB2YWx1ZSkKK2lubGluZSBib29sIEluZGV4U3BhcnNlU2V0PE92ZXJm
bG93SGFuZGxlcj46OnJlbW92ZSh1bnNpZ25lZCB2YWx1ZSkKIHsKICAgICB1bnNpZ25lZCBwb3Np
dGlvbiA9IG1fbWFwW3ZhbHVlXTsKICAgICBpZiAocG9zaXRpb24gPj0gbV92YWx1ZXMuc2l6ZSgp
KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChtX3Zh
bHVlc1twb3NpdGlvbl0gPT0gdmFsdWUpIHsKICAgICAgICAgdW5zaWduZWQgbGFzdFZhbHVlID0g
bV92YWx1ZXMubGFzdCgpOwogICAgICAgICBtX3ZhbHVlc1twb3NpdGlvbl0gPSBsYXN0VmFsdWU7
CiAgICAgICAgIG1fbWFwW2xhc3RWYWx1ZV0gPSBwb3NpdGlvbjsKICAgICAgICAgbV92YWx1ZXMu
cmVtb3ZlTGFzdCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CisKKyAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269182</attachid>
            <date>2016-01-16 16:40:36 -0800</date>
            <delta_ts>2016-01-16 17:25:55 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>88301</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTUxNzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzc5LDcgKzM3OSw2IEBACiAJCTBGNDkzQUZBMTZEMENB
RDMwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ5M0FGODE2RDBDQUQxMDA4NDUwOEIgLyogU291cmNl
UHJvdmlkZXIuY3BwICovOyB9OwogCQkwRjRCOTREQzE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRB
cnJheUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNEI5NERCMTdCOUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNEM5MTY2MUMy
OUY0RjIwMDQzNDFBNiAvKiBCM09yaWdpbkR1bXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEM5MTY1MUMyOUY0RjIwMDQzNDFBNiAvKiBCM09yaWdp
bkR1bXAuaCAqLzsgfTsKLQkJMEY0QzkxNjgxQzJCM0Q2ODAwNDM0MUE2IC8qIEFpckZpeFNwaWxs
U2xvdFpEZWYuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNEM5MTY3MUMyQjNENjgwMDQzNDFBNiAvKiBBaXJGaXhTcGlsbFNsb3RaRGVmLmggKi87IH07
CiAJCTBGNEYyOURGMThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVz
dGltYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjRGMjlERDE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291
bnRFc3RpbWF0aW9uUGhhc2UuY3BwICovOyB9OwogCQkwRjRGMjlFMDE4QjZBRDFDMDA1N0JDMTUg
LyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEYyOURFMThCNkFEMUMwMDU3QkMx
NSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oICovOyB9OwogCQkw
RjUwQUYzQzE5M0U4QjM5MDA2NzRFRTggLyogREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjUwQUYzQjE5M0U4
QjM5MDA2NzRFRTggLyogREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmggKi87IH07CkBAIC03MjQs
NiArNzIzLDEyIEBACiAJCTBGRTIyOEVFMTQzNkFCMkMwMDE5NkM0OCAvKiBPcHRpb25zLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTIyOEVBMTQz
NkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmNwcCAqLzsgfTsKIAkJMEZFMjU0RjYxQUJEREQyMjAw
QTdDNkQyIC8qIERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFMjU0RjQxQUJEREQyMjAwQTdDNkQyIC8q
IERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwICovOyB9OwogCQkwRkUyNTRGNzFBQkRERDIy
MDBBN0M2RDIgLyogREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFMjU0RjUxQUJEREQyMjAwQTdDNkQyIC8q
IERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuaCAqLzsgfTsKKwkJMEZFMzRDMTExQzRCMTA5NjAw
MDNBNTEyIC8qIEFpckJsb2NrSW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTM0QzBCMUM0QjEwOTYwMDAzQTUxMiAvKiBBaXJC
bG9ja0luc2VydGlvblNldC5jcHAgKi87IH07CisJCTBGRTM0QzEyMUM0QjEwOTYwMDAzQTUxMiAv
KiBBaXJCbG9ja0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFMzRDMEMxQzRCMTA5NjAwMDNBNTEyIC8qIEFpckJsb2NrSW5zZXJ0
aW9uU2V0LmggKi87IH07CisJCTBGRTM0QzEzMUM0QjEwOTYwMDAzQTUxMiAvKiBBaXJCcmVha0Ny
aXRpY2FsRWRnZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFMzRDMEQxQzRCMTA5NjAwMDNBNTEyIC8qIEFpckJyZWFrQ3JpdGljYWxFZGdlcy5j
cHAgKi87IH07CisJCTBGRTM0QzE0MUM0QjEwOTYwMDAzQTUxMiAvKiBBaXJCcmVha0NyaXRpY2Fs
RWRnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RTM0QzBFMUM0QjEwOTYwMDAzQTUxMiAvKiBBaXJCcmVha0NyaXRpY2FsRWRnZXMuaCAqLzsgfTsK
KwkJMEZFMzRDMTUxQzRCMTA5NjAwMDNBNTEyIC8qIEFpclNjYXZlbmdlUmVnaXN0ZXJzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTM0QzBGMUM0
QjEwOTYwMDAzQTUxMiAvKiBBaXJTY2F2ZW5nZVJlZ2lzdGVycy5jcHAgKi87IH07CisJCTBGRTM0
QzE2MUM0QjEwOTYwMDAzQTUxMiAvKiBBaXJTY2F2ZW5nZVJlZ2lzdGVycy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFMzRDMTAxQzRCMTA5NjAwMDNB
NTEyIC8qIEFpclNjYXZlbmdlUmVnaXN0ZXJzLmggKi87IH07CiAJCTBGRTcyMTFEMTkzQjlDNTkw
MDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTcyMTFCMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0
aW9uLmNwcCAqLzsgfTsKIAkJMEZFNzIxMUUxOTNCOUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTcy
MTFDMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmggKi87IH07CiAJCTBGRTgzNDE3
MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU4MzQxNTFBNkVGOTdC
MDBEMDQ4NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwICovOyB9OwpAQCAtMjU0
Miw3ICsyNTQ3LDYgQEAKIAkJMEY0OTNBRjgxNkQwQ0FEMTAwODQ1MDhCIC8qIFNvdXJjZVByb3Zp
ZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvdXJjZVByb3Zp
ZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0Qjk0REIxN0I5RjA3NTAw
REQwM0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFR5cGVkQXJyYXlJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGNEM5MTY1MUMyOUY0RjIwMDQzNDFBNiAvKiBCM09yaWdpbkR1bXAuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gQjNPcmlnaW5EdW1wLmg7IHBhdGggPSBiMy9CM09yaWdpbkR1
bXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY0QzkxNjcxQzJCM0Q2ODAwNDM0
MUE2IC8qIEFpckZpeFNwaWxsU2xvdFpEZWYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQWlyRml4U3BpbGxTbG90WkRlZi5oOyBwYXRoID0gYjMvYWlyL0FpckZpeFNwaWxsU2xv
dFpEZWYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0RjI5REQxOEI2QUQxQzAw
NTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50
RXN0aW1hdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdTdGF0aWNFeGVjdXRpb25Db3VudEVz
dGltYXRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEYyOURF
MThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFz
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTdGF0aWNFeGVjdXRpb25D
b3VudEVzdGltYXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR1N0YXRpY0V4ZWN1dGlvbkNvdW50
RXN0aW1hdGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTBBRjNC
MTkzRThCMzkwMDY3NEVFOCAvKiBERkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmg7IHBhdGgg
PSBkZmcvREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0yOTAwLDYgKzI5MDQsMTIgQEAKIAkJMEZFMjI4RUIxNDM2QUIyMzAwMTk2QzQ4IC8q
IE9wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3B0aW9ucy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkUyNTRGNDFBQkRERDIyMDBBN0M2RDIgLyog
REZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdW
YXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZFMjU0RjUxQUJEREQyMjAwQTdDNkQyIC8qIERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFz
ZS5oOyBwYXRoID0gZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFMzRDMEIxQzRCMTA5NjAwMDNBNTEyIC8qIEFpckJsb2NrSW5z
ZXJ0aW9uU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckJs
b2NrSW5zZXJ0aW9uU2V0LmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJCbG9ja0luc2VydGlvblNldC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTM0QzBDMUM0QjEwOTYwMDAzQTUx
MiAvKiBBaXJCbG9ja0luc2VydGlvblNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBBaXJCbG9ja0luc2VydGlvblNldC5oOyBwYXRoID0gYjMvYWlyL0FpckJsb2NrSW5zZXJ0
aW9uU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTM0QzBEMUM0QjEwOTYw
MDAzQTUxMiAvKiBBaXJCcmVha0NyaXRpY2FsRWRnZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gQWlyQnJlYWtDcml0aWNhbEVkZ2VzLmNwcDsgcGF0aCA9IGIzL2Fp
ci9BaXJCcmVha0NyaXRpY2FsRWRnZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkUzNEMwRTFDNEIxMDk2MDAwM0E1MTIgLyogQWlyQnJlYWtDcml0aWNhbEVkZ2VzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckJyZWFrQ3JpdGljYWxFZGdlcy5oOyBw
YXRoID0gYjMvYWlyL0FpckJyZWFrQ3JpdGljYWxFZGdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkUzNEMwRjFDNEIxMDk2MDAwM0E1MTIgLyogQWlyU2NhdmVuZ2VSZWdpc3Rl
cnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyU2NhdmVuZ2VS
ZWdpc3RlcnMuY3BwOyBwYXRoID0gYjMvYWlyL0FpclNjYXZlbmdlUmVnaXN0ZXJzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFMzRDMTAxQzRCMTA5NjAwMDNBNTEyIC8qIEFp
clNjYXZlbmdlUmVnaXN0ZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFp
clNjYXZlbmdlUmVnaXN0ZXJzLmg7IHBhdGggPSBiMy9haXIvQWlyU2NhdmVuZ2VSZWdpc3RlcnMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFNzIxMUIxOTNCOUM1OTAwMzFGNkVE
IC8qIERGR1RyYW5zaXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gREZHVHJhbnNpdGlvbi5jcHA7IHBhdGggPSBkZmcvREZHVHJhbnNpdGlvbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTcyMTFDMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdU
cmFuc2l0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1RyYW5zaXRp
b24uaDsgcGF0aCA9IGRmZy9ERkdUcmFuc2l0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRTgzNDE1MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9ycGhpY0NhbGxTdHViUm91
dGluZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQb2x5bW9ycGhp
Y0NhbGxTdHViUm91dGluZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00ODQ2
LDcgKzQ4NTYsMTEgQEAKIAkJCQkwRkVDODU0QjFCREFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmgg
Ki8sCiAJCQkJMEZFQzg1NEMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suY3BwICov
LAogCQkJCTBGRUM4NTREMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmggKi8sCisJ
CQkJMEZFMzRDMEIxQzRCMTA5NjAwMDNBNTEyIC8qIEFpckJsb2NrSW5zZXJ0aW9uU2V0LmNwcCAq
LywKKwkJCQkwRkUzNEMwQzFDNEIxMDk2MDAwM0E1MTIgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQu
aCAqLywKIAkJCQkwRkIzODc4QjFCRkJDNDREMDBFM0FCMUUgLyogQWlyQmxvY2tXb3JrbGlzdC5o
ICovLAorCQkJCTBGRTM0QzBEMUM0QjEwOTYwMDAzQTUxMiAvKiBBaXJCcmVha0NyaXRpY2FsRWRn
ZXMuY3BwICovLAorCQkJCTBGRTM0QzBFMUM0QjEwOTYwMDAzQTUxMiAvKiBBaXJCcmVha0NyaXRp
Y2FsRWRnZXMuaCAqLywKIAkJCQkwRjYxODMyMDFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxp
bmdDb252ZW50aW9uLmNwcCAqLywKIAkJCQkwRjYxODMyMTFDNDVCRjA3MDA3MjQ1MEIgLyogQWly
Q0NhbGxpbmdDb252ZW50aW9uLmggKi8sCiAJCQkJMEZFQzg1NEUxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckNDYWxsU3BlY2lhbC5jcHAgKi8sCkBAIC00ODYxLDcgKzQ4NzUsNiBAQAogCQkJCTBGNjE4
MzI0MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJFbWl0U2h1ZmZsZS5oICovLAogCQkJCTI2MkQ4NUI0
MUMwRDY1MEYwMDZBQ0I2MSAvKiBBaXJGaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMuY3BwICovLAog
CQkJCTI2MkQ4NUI1MUMwRDY1MEYwMDZBQ0I2MSAvKiBBaXJGaXhQYXJ0aWFsUmVnaXN0ZXJTdGFs
bHMuaCAqLywKLQkJCQkwRjRDOTE2NzFDMkIzRDY4MDA0MzQxQTYgLyogQWlyRml4U3BpbGxTbG90
WkRlZi5oICovLAogCQkJCTBGRUM4NTUyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVxdWVudGVk
QmxvY2suaCAqLywKIAkJCQkwRkVDODU1MzFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGUu
Y3BwICovLAogCQkJCTBGRUM4NTU0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5oICov
LApAQCAtNDg5MCw2ICs0OTAzLDggQEAKIAkJCQkwRkVDODU2MTFCREFDREM3MDA4MEZGNzQgLyog
QWlyUmVnaXN0ZXJQcmlvcml0eS5oICovLAogCQkJCTBGNDU3MDNBMUJFNDVGMEEwMDYyQTYyOSAv
KiBBaXJSZXBvcnRVc2VkUmVnaXN0ZXJzLmNwcCAqLywKIAkJCQkwRjQ1NzAzQjFCRTQ1RjBBMDA2
MkE2MjkgLyogQWlyUmVwb3J0VXNlZFJlZ2lzdGVycy5oICovLAorCQkJCTBGRTM0QzBGMUM0QjEw
OTYwMDAzQTUxMiAvKiBBaXJTY2F2ZW5nZVJlZ2lzdGVycy5jcHAgKi8sCisJCQkJMEZFMzRDMTAx
QzRCMTA5NjAwMDNBNTEyIC8qIEFpclNjYXZlbmdlUmVnaXN0ZXJzLmggKi8sCiAJCQkJMEYzMzhE
RkIxQkVENTEyNzAwMTNDODhGIC8qIEFpclNpbXBsaWZ5Q0ZHLmNwcCAqLywKIAkJCQkwRjMzOERG
QzFCRUQ1MTI3MDAxM0M4OEYgLyogQWlyU2ltcGxpZnlDRkcuaCAqLywKIAkJCQkwRkVDODU2MjFC
REFDREM3MDA4MEZGNzQgLyogQWlyU3BlY2lhbC5jcHAgKi8sCkBAIC02OTY0LDYgKzY5NzksNyBA
QAogCQkJCTBGRUM4NTc0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRUM4NTc2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjM3MzA5MzFDMEQ2N0VFMDAwNTJCRkEgLyogQWlyVXNlQ291bnRz
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkUzNEMxNDFDNEIxMDk2MDAwM0E1MTIgLyogQWlyQnJl
YWtDcml0aWNhbEVkZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ1NzAzOTFCRTQ0QzkxMDA2
MkE2MjkgLyogQWlyRWxpbWluYXRlRGVhZENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTc5Q0ZD
NkYwMUMzM0IxMDAwMEM3NjhFQSAvKiBMTEludFBDUmFuZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk3OUQ1Q0Q1QjFDMTEwNkE5MDBDRUNBMDcgLyogU2FtcGxpbmdQcm9maWxlci5oIGluIEhlYWRl
cnMgKi8sCkBAIC03MzI2LDcgKzczNDIsNiBAQAogCQkJCURDMDAwMzkzMTlEOEJFNkYwMDAyM0VC
MCAvKiBERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkJF
MEY3NTE2QzFEQjBCMDA4MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkZGQzk1RTE0RUY5MEI3MDBDNzI1MzIgLyogREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGNEM5MTY4MUMyQjNENjgw
MDQzNDFBNiAvKiBBaXJGaXhTcGlsbFNsb3RaRGVmLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjNF
MDFBQjE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmluZy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYyQjlDRUQxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1Byb21vdGVkSGVhcExvY2F0
aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZDOTIxNjFCOTRGQjNFMDA3MURENjYgLyogREZH
UHJvcGVydHlUeXBlS2V5LmggaW4gSGVhZGVycyAqLywKQEAgLTgwMjksNiArODA0NCw3IEBACiAJ
CQkJNzA1QjQxQjIxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbFByb3RvdHlwZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTk2QjczMjgxQkRBMDhFRjAwMzMxQjg0IC8qIFN5bWJvbFByb3RvdHlwZS5s
dXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDZCMEUxNkY1Q0QwMEIzNDQ2MCAvKiBTeW1i
b2xUYWJsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFMzRDMTYxQzRCMTA5NjAwMDNBNTEyIC8q
IEFpclNjYXZlbmdlUmVnaXN0ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzg0QTI2NDExRDE2
NjIyMDA1Nzc2QUMgLyogU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzBFQ0E2
MDgxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovLAog
CQkJCTcwRUNBNjA5MUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmggaW4g
SGVhZGVycyAqLywKQEAgLTgwNDYsNiArODA2Miw3IEBACiAJCQkJMEYzMzhFMTMxQkYwMjc2QzAw
MTNDODhGIC8qIEIzT3BhcXVlQnlwcm9kdWN0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY3
MDgxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlDb250cm9sbGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjRCOTREQzE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRBcnJheUlubGluZXMuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGRTM0QzEyMUM0QjEwOTYwMDAzQTUxMiAvKiBBaXJCbG9ja0lu
c2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY3MDkxN0I2QjVBQjAwQTdBRTNG
IC8qIFR5cGVkQXJyYXlzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjcwQjE3QjZCNUFCMDBB
N0FFM0YgLyogVHlwZWRBcnJheVR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkQ0REVBMTk4
MzJEQUMwMDdENEIxOSAvKiBUeXBlTG9jYXRpb24uaCBpbiBIZWFkZXJzICovLApAQCAtODcyOSw2
ICs4NzQ2LDcgQEAKIAkJCQkwRkVDODUyMTFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNvZGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQzg1MjMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3JpZ2lu
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUM4NTI1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Bh
dGNocG9pbnRTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTM0QzE1MUM0QjEwOTYw
MDAzQTUxMiAvKiBBaXJTY2F2ZW5nZVJlZ2lzdGVycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkVDODUyNzFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZFQzg1MjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkVDODUyQjFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1
cmUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04ODk1LDYgKzg5MTMsNyBAQAogCQkJCTBGNTg3NEVE
MTk0RkVCMTIwMEFBQjJDMSAvKiBERkdNYXlFeGl0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
MTcyNUZGMUI0ODcxOUEwMEFDM0E1NSAvKiBERkdNaW5pZmllZEdyYXBoLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMkJEQzREMTUyMjgxODYwMENEODkxMCAvKiBERkdNaW5pZmllZE5vZGUuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEZFMzRDMTMxQzRCMTA5NjAwMDNBNTEyIC8qIEFpckJyZWFr
Q3JpdGljYWxFZGdlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjhGMTQzNTFBREYwOTAxMDBF
RDc5MkMgLyogREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkYyQ0Q1QjFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTczNzgxMEQxNzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxM
b29wcy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTkwMzUsNiArOTA1NCw3IEBACiAJCQkJMEYyMzVC
RTExNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFRodW5rcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjZCMUNDNTE4NjJDNDc4MDA4NDVEOTcgLyogRlRMVW53aW5kSW5mby5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjVBNjI4MzE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5nZS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkwRkUzNEMxMTFDNEIxMDk2MDAwM0E1MTIgLyogQWlyQmxvY2tJbnNl
cnRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkE4MzYzODkxOEQ3RDBGRTAwMDBFQkND
IC8qIEZ1bGxHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5
Q0IxMDdFQzM3NjAwNDI3QTQ4IC8qIEZ1bmN0aW9uQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZGMEYxOUYxNkI3MkExNzAwNURGOTVCIC8qIEZ1bmN0aW9uRXhlY3V0YWJsZUR1
bXAuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckFsbG9jYXRlU3RhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoQjNfSklUKQogCiAjaW5jbHVkZSAiQWly
Q29kZS5oIgorI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgogI2luY2x1ZGUgIkFpckluc3RJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiQWlyTGl2ZW5lc3MuaCIKICNpbmNsdWRlICJBaXJQaGFzZVNj
b3BlLmgiCkBAIC0xNjYsOCArMTY3LDQ3IEBAIHZvaWQgYWxsb2NhdGVTdGFjayhDb2RlJiBjb2Rl
KQogICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJ
bmRleC0tOykgewogICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgZGF0
YUxvZygiQW5hbHl6aW5nOiAiLCBibG9jay0+YXQoaW5zdEluZGV4KSwgIlxuIik7CisKKyAgICAg
ICAgICAgIC8vIEtpbGwgZGVhZCBzdG9yZXMuIEZvciBzaW1wbGljaXR5IHdlIHNheSB0aGF0IGEg
c3RvcmUgaXMga2lsbGFibGUgaWYgaXQgaGFzIG9ubHkgbGF0ZQorICAgICAgICAgICAgLy8gZGVm
cyBhbmQgdGhvc2UgbGF0ZSBkZWZzIGFyZSB0byB0aGluZ3MgdGhhdCBhcmUgZGVhZCByaWdodCBu
b3cuIFdlIG9ubHkgZG8gdGhhdAorICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGF0J3MgdGhlIG9u
bHkga2luZCBvZiBkZWFkIHN0YWNrIHN0b3JlIHdlIHdpbGwgc2VlIGhlcmUuCisgICAgICAgICAg
ICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7CisgICAgICAgICAgICBpZiAoIWlu
c3QuaGFzTm9uQXJnRWZmZWN0cygpKSB7CisgICAgICAgICAgICAgICAgYm9vbCBvayA9IHRydWU7
CisgICAgICAgICAgICAgICAgaW5zdC5mb3JFYWNoQXJnKAorICAgICAgICAgICAgICAgICAgICBb
Jl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlLCBBcmc6OldpZHRoKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0Vhcmx5RGVmKHJvbGUpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIUFyZzo6aXNMYXRlRGVmKHJvbGUpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlzU3Rh
Y2soKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9rID0gZmFsc2U7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzbG90ID0gYXJnLnN0YWNrU2xvdCgp
OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNsb3QtPmtpbmQoKSAhPSBTdGFja1Nsb3RL
aW5kOjpBbm9ueW1vdXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvayA9IGZhbHNl
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2FsQ2FsYy5pc0xpdmUo
c2xvdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvayA9IGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgaWYgKG9rKQorICAgICAg
ICAgICAgICAgICAgICBpbnN0ID0gSW5zdCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
CiAgICAgICAgICAgICBpbnRlcmZlcmUoaW5zdEluZGV4KTsKICAgICAgICAgICAgIGxvY2FsQ2Fs
Yy5leGVjdXRlKGluc3RJbmRleCk7CisKKyAgICAgICAgICAgIGJsb2NrLT5pbnN0cygpLnJlbW92
ZUFsbE1hdGNoaW5nKAorICAgICAgICAgICAgICAgIFsmXSAoY29uc3QgSW5zdCYgaW5zdCkgLT4g
Ym9vbCB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAhaW5zdDsKKyAgICAgICAgICAgICAg
ICB9KTsKICAgICAgICAgfQogICAgICAgICBpbnRlcmZlcmUoLTEpOwogICAgIH0KQEAgLTIzMiwz
MyArMjcyLDQzIEBAIHZvaWQgYWxsb2NhdGVTdGFjayhDb2RlJiBjb2RlKQogICAgIC8vIFdlIHdv
dWxkIGhhdmUgdG8gc2NhdmVuZ2UgZm9yIHRlbXBvcmFyaWVzIGlmIHRoaXMgaGFwcGVuZWQuIEZv
cnR1bmF0ZWx5LCB0aGlzIGNhc2Ugd2lsbCBiZQogICAgIC8vIGV4dHJlbWVseSByYXJlIHNvIHdl
IGNhbiBkbyBjcmF6eSB0aGluZ3Mgd2hlbiBpdCBhcmlzZXMuCiAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjUzMAotICAgIAorCisgICAgSW5zZXJ0aW9u
U2V0IGluc2VydGlvblNldChjb2RlKTsKICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29k
ZSkgewotICAgICAgICBmb3IgKEluc3QmIGluc3QgOiAqYmxvY2spIHsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpbnN0SW5kZXggPSAwOyBpbnN0SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK2luc3RJ
bmRleCkgeworICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOwog
ICAgICAgICAgICAgaW5zdC5mb3JFYWNoQXJnKAotICAgICAgICAgICAgICAgIFsmXSAoQXJnJiBh
cmcsIEFyZzo6Um9sZSwgQXJnOjpUeXBlLCBBcmc6OldpZHRoIHdpZHRoKQotICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJn
OjpUeXBlLCBBcmc6OldpZHRoIHdpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gc3Rh
Y2tBZGRyID0gWyZdIChpbnQzMl90IG9mZnNldCkgLT4gQXJnIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBBcmc6OnN0YWNrQWRkcihvZmZzZXQsIGNvZGUuZnJhbWVTaXplKCksIHdp
ZHRoKTsKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgICAgIHN3aXRjaCAoYXJnLmtpbmQoKSkgewogICAgICAgICAgICAgICAgICAg
ICBjYXNlIEFyZzo6U3RhY2s6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IEFyZzo6
YWRkcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUbXAoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZy5vZmZzZXQoKSArIGFy
Zy5zdGFja1Nsb3QoKS0+b2Zmc2V0RnJvbUZQKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCFhcmcuaXNWYWxpZEZvcm0od2lkdGgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYXJnID0gQXJnOjphZGRyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUbXAo
TWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYXJnLm9mZnNldCgpICsgY29kZS5mcmFtZVNpemUoKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHNsb3QgPSBhcmcuc3RhY2tTbG90KCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc1pEZWYocm9sZSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmJiBzbG90LT5raW5kKCkgPT0gU3RhY2tTbG90S2luZDo6QW5vbnltb3Vz
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2xvdC0+Ynl0ZVNpemUoKSA+IEFyZzo6
Ynl0ZXMod2lkdGgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ3VycmVudGx5
IHdlIG9ubHkgaGFuZGxlIHRoaXMgc2ltcGxlIGNhc2UgYmVjYXVzZSBpdCdzIHRoZSBvbmx5IG9u
ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgYXJpc2VzOiBaRGVmJ3MgYXJl
IG9ubHkgMzItYml0IHJpZ2h0IG5vdy4gU28sIHdoZW4gd2UgaGl0IHRoZXNlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gYXNzZXJ0aW9ucyBpdCBtZWFucyB0aGF0IHdlIG5lZWQgdG8g
aW1wbGVtZW50IHRob3NlIG90aGVyIGtpbmRzIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gemVybyBmaWxscy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChzbG90LT5ieXRlU2l6ZSgpID09IDgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHdpZHRoID09IEFyZzo6V2lkdGgzMik7CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBXZSByZWx5IG9uIHRoZSBmYWN0IHRoYXQgdGhlcmUgbXVzdCBiZSBz
b21lIHdheSB0byBtb3ZlIHplcm8gdG8gYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IG1lbW9yeSBsb2NhdGlvbiB3aXRob3V0IGZpcnN0IGJ1cm5pbmcgYSByZWdpc3Rlci4gT24gQVJN
LCB3ZSB3b3VsZCBkbworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgdXNpbmcg
enIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNWYWxpZEZv
cm0oTW92ZTMyLCBBcmc6OkltbSwgQXJnOjpBZGRyKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5zdEluZGV4ICsgMSwgTW92ZTMyLCBpbnN0Lm9yaWdpbiwgQXJnOjppbW0oMCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrQWRkcihhcmcub2Zmc2V0KCkgKyA0ICsg
c2xvdC0+b2Zmc2V0RnJvbUZQKCkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIGFyZyA9IHN0YWNrQWRkcihhcmcub2Zmc2V0KCkgKyBzbG90LT5v
ZmZzZXRGcm9tRlAoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6Q2FsbEFyZzoKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IEFyZzo6YWRkcigKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFyZy5vZmZzZXQoKSAtIGNvZGUuZnJhbWVTaXplKCkpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFhcmcuaXNWYWxpZEZvcm0od2lkdGgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXJnID0gQXJnOjphZGRyKAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBUbXAoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnLm9mZnNldCgpICsgY29kZS5mcmFt
ZVNpemUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICBhcmcgPSBzdGFja0FkZHIoYXJnLm9mZnNldCgpIC0gY29kZS5mcmFtZVNpemUoKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjY2LDYgKzMxNiw3IEBAIHZv
aWQgYWxsb2NhdGVTdGFjayhDb2RlJiBjb2RlKQogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICk7CiAgICAgICAgIH0KKyAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOwog
ICAgIH0KIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCShyZXZp
c2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjYsNiArMTI2LDcgQEAgcHVibGljOgogICAgICAgICAvLyBkZXBl
bmRpbmcgb24gdGhlIGtpbmQgb2YgdGhlIGFyZ3VtZW50OgogICAgICAgICAvLwogICAgICAgICAv
LyBGb3IgcmVnaXN0ZXI6IHRoZSB1cHBlciBiaXRzIGFyZSB6ZXJvLWZpbGxlZC4KKyAgICAgICAg
Ly8gRm9yIGFub255bW91cyBzdGFjayBzbG90OiB0aGUgdXBwZXIgYml0cyBhcmUgemVyby1maWxs
ZWQuCiAgICAgICAgIC8vIEZvciBhZGRyZXNzOiB0aGUgdXBwZXIgYml0cyBhcmUgbm90IHRvdWNo
ZWQgKGkuZS4gd2UgZG8gYSAzMi1iaXQgc3RvcmUgaW4gb3VyIGV4YW1wbGUpLgogICAgICAgICAv
LyBGb3IgdG1wOiBlaXRoZXIgdGhlIHVwcGVyIGJpdHMgYXJlIG5vdCB0b3VjaGVkIG9yIHRoZXkg
YXJlIHplcm8tZmlsbGVkLCBhbmQgd2Ugd29uJ3Qga25vdwogICAgICAgICAvLyB3aGljaCB1bnRp
bCB3ZSBsb3dlciB0aGUgdG1wIHRvIGVpdGhlciBhIFN0YWNrU2xvdCBvciBhIFJlZy4KQEAgLTUx
Myw2ICs1MTQsMTcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAor
ICAgIHN0YXRpYyBBcmcgc3RhY2tBZGRyKGludDMyX3Qgb2Zmc2V0RnJvbUZQLCB1bnNpZ25lZCBm
cmFtZVNpemUsIFdpZHRoIHdpZHRoKQorICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdCA9IEFyZzo6
YWRkcihBaXI6OlRtcChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciksIG9mZnNldEZyb21GUCk7
CisgICAgICAgIGlmICghcmVzdWx0LmlzVmFsaWRGb3JtKHdpZHRoKSkgeworICAgICAgICAgICAg
cmVzdWx0ID0gQXJnOjphZGRyKAorICAgICAgICAgICAgICAgIEFpcjo6VG1wKE1hY3JvQXNzZW1i
bGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciksCisgICAgICAgICAgICAgICAgb2Zmc2V0RnJvbUZQ
ICsgZnJhbWVTaXplKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KwogICAgIC8vIElmIHlvdSBkb24ndCBwYXNzIGEgV2lkdGgsIHRoaXMgb3B0aW1pc3RpY2FsbHkg
YXNzdW1lcyB0aGF0IHlvdSdyZSB1c2luZyB0aGUgcmlnaHQgd2lkdGguCiAgICAgc3RhdGljIGJv
b2wgaXNWYWxpZFNjYWxlKHVuc2lnbmVkIHNjYWxlLCBPcHRpb25hbDxXaWR0aD4gd2lkdGggPSBO
dWxsb3B0KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFz
aWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
QmFzaWNCbG9jay5oCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckJhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAog
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CiAKK2NsYXNz
IEJsb2NrSW5zZXJ0aW9uU2V0OwogY2xhc3MgQ29kZTsKIGNsYXNzIEluc2VydGlvblNldDsKIApA
QCAtMTI3LDYgKzEyOCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CiAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEJsb2NrSW5zZXJ0aW9uU2V0
OwogICAgIGZyaWVuZCBjbGFzcyBDb2RlOwogICAgIGZyaWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7
CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJsb2NrSW5zZXJ0
aW9uU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckJsb2NrSW5zZXJ0aW9uU2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckJsb2NrSW5zZXJ0aW9uU2V0Lmgi
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQmFzaWNCbG9jay5oIgorI2lu
Y2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0J1YmJsZVNvcnQuaD4KKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0Jsb2NrSW5zZXJ0aW9uU2V0OjpCbG9j
a0luc2VydGlvblNldChDb2RlICZjb2RlKQorICAgIDogbV9jb2RlKGNvZGUpCit7Cit9CisKK0Js
b2NrSW5zZXJ0aW9uU2V0Ojp+QmxvY2tJbnNlcnRpb25TZXQoKSB7IH0KKwordm9pZCBCbG9ja0lu
c2VydGlvblNldDo6aW5zZXJ0KEJsb2NrSW5zZXJ0aW9uJiYgaW5zZXJ0aW9uKQoreworICAgIG1f
aW5zZXJ0aW9ucy5hcHBlbmQoV1RGTW92ZShpbnNlcnRpb24pKTsKK30KKworQmFzaWNCbG9jayog
QmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIGZyZXF1ZW5j
eSkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4gYmxvY2sobmV3IEJhc2ljQmxv
Y2soVUlOVF9NQVgsIGZyZXF1ZW5jeSkpOworICAgIEJhc2ljQmxvY2sqIHJlc3VsdCA9IGJsb2Nr
LmdldCgpOworICAgIGluc2VydChCbG9ja0luc2VydGlvbihpbmRleCwgV1RGTW92ZShibG9jaykp
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitCYXNpY0Jsb2NrKiBCbG9ja0luc2VydGlvblNl
dDo6aW5zZXJ0QmVmb3JlKEJhc2ljQmxvY2sqIGJlZm9yZSwgZG91YmxlIGZyZXF1ZW5jeSkKK3sK
KyAgICByZXR1cm4gaW5zZXJ0KGJlZm9yZS0+aW5kZXgoKSwgZnJlcXVlbmN5ID09IGZyZXF1ZW5j
eSA/IGZyZXF1ZW5jeSA6IGJlZm9yZS0+ZnJlcXVlbmN5KCkpOworfQorCitCYXNpY0Jsb2NrKiBC
bG9ja0luc2VydGlvblNldDo6aW5zZXJ0QWZ0ZXIoQmFzaWNCbG9jayogYWZ0ZXIsIGRvdWJsZSBm
cmVxdWVuY3kpCit7CisgICAgcmV0dXJuIGluc2VydChhZnRlci0+aW5kZXgoKSArIDEsIGZyZXF1
ZW5jeSA9PSBmcmVxdWVuY3kgPyBmcmVxdWVuY3kgOiBhZnRlci0+ZnJlcXVlbmN5KCkpOworfQor
Citib29sIEJsb2NrSW5zZXJ0aW9uU2V0OjpleGVjdXRlKCkKK3sKKyAgICBpZiAobV9pbnNlcnRp
b25zLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIC8vIFdlIGFs
bG93IGluc2VydGlvbnMgdG8gYmUgZ2l2ZW4gdG8gdXMgaW4gYW55IG9yZGVyLiBTbywgd2UgbmVl
ZCB0byBzb3J0IHRoZW0gYmVmb3JlCisgICAgLy8gcnVubmluZyBXVEY6OmV4ZWN1dGVJbnNlcnRp
b25zLiBXZSBzdHJvbmdseSBwcmVmZXIgYSBzdGFibGUgc29ydCBhbmQgd2Ugd2FudCBpdCB0byBi
ZQorICAgIC8vIGZhc3QsIHNvIHdlIHVzZSBidWJibGUgc29ydC4KKyAgICBidWJibGVTb3J0KG1f
aW5zZXJ0aW9ucy5iZWdpbigpLCBtX2luc2VydGlvbnMuZW5kKCkpOworCisgICAgZXhlY3V0ZUlu
c2VydGlvbnMobV9jb2RlLm1fYmxvY2tzLCBtX2luc2VydGlvbnMpOworICAgIAorICAgIC8vIFBy
dW5lIG91dCBlbXB0eSBlbnRyaWVzLiBUaGlzIGlzbid0IHN0cmljdGx5IG5lY2Vzc2FyeSBidXQg
aXQncworICAgIC8vIGhlYWx0aHkgdG8ga2VlcCB0aGUgYmxvY2sgbGlzdCBmcm9tIGdyb3dpbmcu
CisgICAgbV9wcm9jLm1fYmxvY2tzLnJlbW92ZUFsbE1hdGNoaW5nKAorICAgICAgICBbJl0gKHN0
ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPiYgYmxvY2tQdHIpIC0+IGJvb2wgeworICAgICAgICAg
ICAgcmV0dXJuICFibG9ja1B0cjsKKyAgICAgICAgfSk7CisgICAgCisgICAgLy8gTWFrZSBzdXJl
IHRoYXQgdGhlIGJsb2NrcyBrbm93IHRoZWlyIG5ldyBpbmRpY2VzLgorICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX3Byb2MubV9ibG9ja3Muc2l6ZSgpOyArK2kpCisgICAgICAgIG1fcHJv
Yy5tX2Jsb2Nrc1tpXS0+bV9pbmRleCA9IGk7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja0luc2VydGlvblNldC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmxvY2tJbnNl
cnRpb25TZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyQmxvY2tJbnNlcnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWly
QmxvY2tJbnNlcnRpb25TZXRfaAorI2RlZmluZSBBaXJCbG9ja0luc2VydGlvblNldF9oCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgPHd0Zi9J
bnNlcnRpb24uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgSW5zZXJ0aW9uU2V0OworCit0
eXBlZGVmIFdURjo6SW5zZXJ0aW9uPHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPj4gQmxvY2tJ
bnNlcnRpb247CisKK2NsYXNzIEJsb2NrSW5zZXJ0aW9uU2V0IHsKK3B1YmxpYzoKKyAgICBCbG9j
a0luc2VydGlvblNldChDb2RlJik7CisgICAgfkJsb2NrSW5zZXJ0aW9uU2V0KCk7CisgICAgCisg
ICAgdm9pZCBpbnNlcnQoQmxvY2tJbnNlcnRpb24mJik7CisKKyAgICAvLyBJbnNlcnQgYSBuZXcg
YmxvY2sgYXQgYSBnaXZlbiBpbmRleC4KKyAgICBCYXNpY0Jsb2NrKiBpbnNlcnQodW5zaWduZWQg
aW5kZXgsIGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKTsKKworICAgIC8vIEluc2VydHMgYSBuZXcg
YmxvY2sgYmVmb3JlIHRoZSBnaXZlbiBibG9jay4gVXN1YWxseSB5b3Ugd2lsbCBub3QgcGFzcyB0
aGUgZnJlcXVlbmN5CisgICAgLy8gYXJndW1lbnQuIFBhc3NpbmcgUE5hTiBjYXVzZXMgdXMgdG8g
anVzdCB1c2UgdGhlIGZyZXF1ZW5jeSBvZiB0aGUgJ2JlZm9yZScgYmxvY2suIFRoYXQncworICAg
IC8vIHVzdWFsbHkgd2hhdCB5b3Ugd2FudC4KKyAgICBCYXNpY0Jsb2NrKiBpbnNlcnRCZWZvcmUo
QmFzaWNCbG9jayogYmVmb3JlLCBkb3VibGUgZnJlcXVlbmN5ID0gUE5hTik7CisKKyAgICAvLyBJ
bnNlcnRzIGEgbmV3IGJsb2NrIGFmdGVyIHRoZSBnaXZlbiBibG9jay4KKyAgICBCYXNpY0Jsb2Nr
KiBpbnNlcnRBZnRlcihCYXNpY0Jsb2NrKiBhZnRlciwgZG91YmxlIGZyZXF1ZW5jeSA9IFBOYU4p
OworCisgICAgYm9vbCBleGVjdXRlKCk7CisKK3ByaXZhdGU6CisgICAgQ29kZSYgbV9jb2RlOwor
ICAgIFZlY3RvcjxCbG9ja0luc2VydGlvbiwgOD4gbV9pbnNlcnRpb25zOworfTsKKworfSB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwor
I2VuZGlmIC8vIEFpckJsb2NrSW5zZXJ0aW9uU2V0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJCcmVha0NyaXRpY2FsRWRnZXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQnJlYWtDcml0aWNhbEVkZ2VzLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQnJlYWtDcml0aWNh
bEVkZ2VzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkFpckJyZWFrQ3JpdGljYWxFZGdlcy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIkFpckJsb2NrSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQWlyQ29kZS5oIgor
I2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBicmVha0NyaXRpY2FsRWRnZXMoQ29kZSYgY29k
ZSkKK3sKKyAgICBCbG9ja0luc2VydGlvblNldCBpbnNlcnRpb25TZXQoY29kZSk7CisgICAgCisg
ICAgZm9yICh1bnNpZ25lZCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IGNvZGUuc2l6ZSgp
OyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBjb2RlW2Jsb2Nr
SW5kZXhdOworICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgaWYgKGJsb2NrLT5udW1TdWNjZXNzb3JzKCkgPD0gMSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7
IGktLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqJiBzdWNjZXNzb3IgPSBibG9jay0+c3Vj
Y2Vzc29yQmxvY2soaSk7CisgICAgICAgICAgICBpZiAoc3VjY2Vzc29yLT5wcmVkZWNlc3NvcnMo
KS5zaXplKCkgPD0gMSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAg
QmFzaWNCbG9jayogcGFkID0gaW5zZXJ0aW9uU2V0Lmluc2VydEJlZm9yZShzdWNjZXNzb3IsIHN1
Y2Nlc3Nvci0+ZnJlcXVlbmN5KCkpOworICAgICAgICAgICAgcGFkLT5hcHBlbmQoSnVtcCwgc3Vj
Y2Vzc29yLT5hdCgwKS5vcmlnaW4pOworICAgICAgICAgICAgcGFkLT5zdWNjZXNzb3JzKCkuYXBw
ZW5kKEZyZXF1ZW50ZWRCbG9jayhzdWNjZXNzb3IpKTsKKyAgICAgICAgICAgIHN1Y2Nlc3Nvci0+
cmVwbGFjZVByZWRlY2Vzc29yKGJsb2NrLCBwYWQpOworICAgICAgICAgICAgc3VjY2Vzc29yID0g
cGFkOworICAgICAgICB9CisgICAgfQorCisgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoKTsKK30K
KworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCcmVha0NyaXRp
Y2FsRWRnZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckJyZWFrQ3JpdGljYWxFZGdlcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJCcmVha0NyaXRpY2FsRWRnZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBBaXJCcmVha0NyaXRpY2FsRWRnZXNfaAorI2RlZmluZSBBaXJCcmVha0NyaXRpY2Fs
RWRnZXNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCit2b2lkIGJyZWFrQ3JpdGlj
YWxFZGdlcyhDb2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJCcmVha0NyaXRpY2FsRWRnZXNf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckVtaXRTaHVmZmxlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckVtaXRTaHVm
ZmxlLmNwcAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJFbWl0U2h1ZmZsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDYgKzcwLDE0IEBAIHZv
aWQgU2h1ZmZsZVBhaXI6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkKICAgICBvdXQucHJpbnQod2lk
dGgoKSwgIjoiLCBzcmMoKSwgIj0+IiwgZHN0KCkpOwogfQogCitJbnN0IGNyZWF0ZVNodWZmbGUo
VmFsdWUqIG9yaWdpbiwgY29uc3QgVmVjdG9yPFNodWZmbGVQYWlyPiYgcGFpcnMpCit7CisgICAg
SW5zdCByZXN1bHQoU2h1ZmZsZSwgb3JpZ2luKTsKKyAgICBmb3IgKGNvbnN0IFNodWZmbGVQYWly
JiBwYWlyIDogcGFpcnMpCisgICAgICAgIHJlc3VsdC5hcHBlbmQocGFpci5zcmMoKSwgcGFpci5k
c3QoKSwgQXJnOjp3aWR0aEFyZyhwYWlyLndpZHRoKCkpKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCiBWZWN0b3I8SW5zdD4gZW1pdFNodWZmbGUoCiAgICAgVmVjdG9yPFNodWZmbGVQYWlyPiBw
YWlycywgc3RkOjphcnJheTxBcmcsIDI+IHNjcmF0Y2hlcywgQXJnOjpUeXBlIHR5cGUsIFZhbHVl
KiBvcmlnaW4pCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckVtaXRT
aHVmZmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJF
bWl0U2h1ZmZsZS5oCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckVtaXRTaHVmZmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDkgQEAg
cHJpdmF0ZToKICAgICBBcmc6OldpZHRoIG1fd2lkdGggeyBBcmc6OldpZHRoOCB9OwogfTsKIAor
Ly8gQ3JlYXRlIGEgU2h1ZmZsZSBpbnN0cnVjdGlvbi4KK0luc3QgY3JlYXRlU2h1ZmZsZShWYWx1
ZSogb3JpZ2luLCBjb25zdCBWZWN0b3I8U2h1ZmZsZVBhaXI+Jik7CisKIC8vIFBlcmZvcm0gYSBz
aHVmZmxlIG9mIGEgZ2l2ZW4gdHlwZS4gVGhlIHNjcmF0Y2ggYXJndW1lbnQgaXMgbWFuZGF0b3J5
LiBZb3Ugc2hvdWxkIHBhc3MgaXQgYXMKIC8vIGZvbGxvd3M6IElmIHlvdSBrbm93IHRoYXQgeW91
IGhhdmUgc2NyYXRjaCByZWdpc3RlcnMgb3IgdGVtcG9yYXJpZXMgYXZhaWxhYmxlIC0gdGhhdCBp
cywgdGhleSdyZQogLy8gcmVnaXN0ZXJzIHRoYXQgYXJlIG5vdCBtZW50aW9uZWQgaW4gdGhlIHNo
dWZmbGUsIGhhdmUgdGhlIHNhbWUgdHlwZSBhcyB0aGUgc2h1ZmZsZSwgYW5kIGFyZSBub3QKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4U3BpbGxTbG90WkRlZi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4U3BpbGxTbG90
WkRlZi5oCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckZpeFNwaWxsU2xvdFpEZWYuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3OCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgQWly
Rml4U3BpbGxTbG90WkRlZl9oCi0jZGVmaW5lIEFpckZpeFNwaWxsU2xvdFpEZWZfaAotCi0jaW5j
bHVkZSAiQWlyQ29kZS5oIgotI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgotI2luY2x1ZGUg
IkFpckluc3RJbmxpbmVzLmgiCi0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1l
c3BhY2UgQWlyIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgSXNTcGlsbFNsb3Q+Ci12b2lkIGZpeFNw
aWxsU2xvdFpEZWYoQ29kZSYgY29kZSwgY29uc3QgSXNTcGlsbFNsb3QmIGlzU3BpbGxTbG90KQot
ewotICAgIC8vIFdlIGNvdWxkIGhhdmUgaW50cm9kdWNlZCBaRGVmJ3MgdG8gU3RhY2tTbG90cyB0
aGF0IGFyZSB3aWRlciB0aGFuIHRoZSBkZWYuIEluIHRoYXQgY2FzZSwgd2UKLSAgICAvLyBuZWVk
IHRvIGVtaXQgY29kZSB0byB6ZXJvLWZpbGwgdGhlIHRvcCBiaXRzIG9mIHRoZSBTdGFja1Nsb3Qu
Ci0gICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChjb2RlKTsKLSAgICBmb3IgKEJhc2ljQmxv
Y2sqIGJsb2NrIDogY29kZSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IDA7
IGluc3RJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsraW5zdEluZGV4KSB7Ci0gICAgICAgICAgICBJ
bnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7Ci0KLSAgICAgICAgICAgIGluc3QuZm9y
RWFjaEFyZygKLSAgICAgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwg
QXJnOjpUeXBlLCBBcmc6OldpZHRoIHdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgh
QXJnOjppc1pEZWYocm9sZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICghYXJnLmlzU3RhY2soKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1NwaWxsU2xvdChhcmcuc3Rh
Y2tTbG90KCkpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
ICAgICAgICBpZiAoYXJnLnN0YWNrU2xvdCgpLT5ieXRlU2l6ZSgpID09IEFyZzo6Ynl0ZXMod2lk
dGgpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICAgICAg
ICAgIC8vIEN1cnJlbnRseSB3ZSBvbmx5IGhhbmRsZSB0aGlzIHNpbXBsZSBjYXNlIGJlY2F1c2Ug
aXQncyB0aGUgb25seSBvbmUgdGhhdAotICAgICAgICAgICAgICAgICAgICAvLyBhcmlzZXM6IFpE
ZWYncyBhcmUgb25seSAzMi1iaXQgcmlnaHQgbm93LiBTbywgd2hlbiB3ZSBoaXQgdGhlc2UKLSAg
ICAgICAgICAgICAgICAgICAgLy8gYXNzZXJ0aW9ucyBpdCBtZWFucyB0aGF0IHdlIG5lZWQgdG8g
aW1wbGVtZW50IHRob3NlIG90aGVyIGtpbmRzIG9mIHplcm8KLSAgICAgICAgICAgICAgICAgICAg
Ly8gZmlsbHMuCi0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFyZy5zdGFja1Ns
b3QoKS0+Ynl0ZVNpemUoKSA9PSA4KTsKLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQod2lkdGggPT0gQXJnOjpXaWR0aDMyKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBXZSBy
ZWx5IG9uIHRoZSBmYWN0IHRoYXQgdGhlcmUgbXVzdCBiZSBzb21lIHdheSB0byBtb3ZlIHplcm8g
dG8gYSBtZW1vcnkKLSAgICAgICAgICAgICAgICAgICAgLy8gbG9jYXRpb24gd2l0aG91dCBmaXJz
dCBidXJuaW5nIGEgcmVnaXN0ZXIuIE9uIEFSTSwgd2Ugd291bGQgZG8gdGhpcyB1c2luZwotICAg
ICAgICAgICAgICAgICAgICAvLyB6ci4KLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoaXNWYWxpZEZvcm0oTW92ZTMyLCBBcmc6OkltbSwgQXJnOjpTdGFjaykpOwotICAgICAgICAg
ICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KAotICAgICAgICAgICAgICAgICAgICAgICAg
aW5zdEluZGV4ICsgMSwgTW92ZTMyLCBpbnN0Lm9yaWdpbiwgQXJnOjppbW0oMCksIGFyZy53aXRo
T2Zmc2V0KDQpKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgfQotICAgICAgICBpbnNl
cnRpb25TZXQuZXhlY3V0ZShibG9jayk7Ci0gICAgfQotfQotCi19IH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMzo6QWlyCi0KLSNlbmRpZiAvLyBBaXJGaXhTcGlsbFNsb3RaRGVmX2gKLQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgJKHJldmlzaW9uIDE5NTE3NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNjIsNiArMTYyLDcgQEAgcHVibGljOgogICAgIC8vCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBp
cyBhdXRvLWdlbmVyYXRlZCBieSBvcGNvZGVfZ2VuZXJhdG9yLnJiLgogICAgIGJvb2wgYWRtaXRz
U3RhY2sodW5zaWduZWQgYXJnSW5kZXgpOworICAgIGJvb2wgYWRtaXRzU3RhY2soQXJnJik7CiAK
ICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBpbnN0cnVjdGlvbiBjYW4gaGF2ZSBhbnkgZWZm
ZWN0cyBvdGhlciB0aGFuIGNvbnRyb2wgZmxvdyBvciBhcmd1bWVudHMuCiAgICAgYm9vbCBoYXNO
b25BcmdOb25Db250cm9sRWZmZWN0cygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJJbnN0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlySW5zdElubGluZXMuaAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTgsNiArMTU4LDExIEBAIGlubGluZSB2b2lkIEluc3Q6OnJlcG9ydFVzZWRSZWdpc3RlcnMoY28K
ICAgICBhcmdzWzBdLnNwZWNpYWwoKS0+cmVwb3J0VXNlZFJlZ2lzdGVycygqdGhpcywgdXNlZFJl
Z2lzdGVycyk7CiB9CiAKK2lubGluZSBib29sIEluc3Q6OmFkbWl0c1N0YWNrKEFyZyYgYXJnKQor
eworICAgIHJldHVybiBhZG1pdHNTdGFjaygmYXJnIC0gJmFyZ3NbMF0pOworfQorCiBpbmxpbmUg
Ym9vbCBpc1NoaWZ0VmFsaWQoY29uc3QgSW5zdCYgaW5zdCkKIHsKICNpZiBDUFUoWDg2KSB8fCBD
UFUoWDg2XzY0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0TWFw
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0TWFw
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RN
YXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBBaXJJbnN0TWFwX2gKKyNkZWZpbmUg
QWlySW5zdE1hcF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQmFzaWNC
bG9jay5oIgorI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJCM0luZGV4TWFwLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4KK2NsYXNzIEluc3RNYXAgeworcHVibGljOgorICAgIEluc3RNYXAoQ29k
ZSYgY29kZSkKKyAgICAgICAgOiBtX21hcChjb2RlLnNpemUoKSkKKyAgICB7CisgICAgICAgIGZv
ciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKQorICAgICAgICAgICAgbV9tYXBbYmxvY2tdLnJl
c2l6ZShibG9jay0+c2l6ZSgpKTsKKyAgICB9CisKKyAgICBUJiBhdChCYXNpY0Jsb2NrKiBibG9j
aywgdW5zaWduZWQgaW5zdEluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWFwW2Jsb2Nr
XVtpbnN0SW5kZXhdOworICAgIH0KKworICAgIGNvbnN0IFQmIGF0KEJhc2ljQmxvY2sqIGJsb2Nr
LCB1bnNpZ25lZCBpbnN0SW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gY29uc3Rf
Y2FzdDxJbnN0TWFwKj4odGhpcyktPmdldChibG9jaywgaW5zdEluZGV4KTsKKyAgICB9CisgICAg
Citwcml2YXRlOgorICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIFZlY3RvcjxUPj4gbV9tYXA7Cit9
OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQorCisjZW5kaWYgLy8gQWlySW5zdE1hcF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySXRlcmF0ZWRSZWdpc3RlckNv
YWxlc2NpbmcuY3BwCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjksNyArMjksNiBAQAogI2lmIEVOQUJMRShCM19KSVQpCiAKICNpbmNsdWRlICJBaXJDb2Rl
LmgiCi0jaW5jbHVkZSAiQWlyRml4U3BpbGxTbG90WkRlZi5oIgogI2luY2x1ZGUgIkFpckluc2Vy
dGlvblNldC5oIgogI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQWlyTGl2
ZW5lc3MuaCIKQEAgLTExMjQsMTEgKzExMjMsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAvLyBjb21wbGV0ZSByZWdpc3RlciBhbGxvY2F0aW9uLiBTbywgd2UgcmVjb3JkIHRoaXMgYmVm
b3JlIHN0YXJ0aW5nLgogICAgICAgICAgICAgICAgIGJvb2wgbWF5QmVDb2FsZXNjYWJsZSA9IGFs
bG9jYXRvci5tYXlCZUNvYWxlc2NhYmxlKGluc3QpOwogCi0gICAgICAgICAgICAgICAgLy8gT24g
WDg2XzY0LCBNb3ZlMzIgaXMgY2hlYXBlciBpZiB3ZSBrbm93IHRoYXQgaXQncyBlcXVpdmFsZW50
IHRvIGEgTW92ZS4gSXQncworICAgICAgICAgICAgICAgIC8vIE1vdmUzMiBpcyBjaGVhcGVyIGlm
IHdlIGtub3cgdGhhdCBpdCdzIGVxdWl2YWxlbnQgdG8gYSBNb3ZlLiBJdCdzCiAgICAgICAgICAg
ICAgICAgLy8gZXF1aXZhbGVudCBpZiB0aGUgZGVzdGluYXRpb24ncyBoaWdoIGJpdHMgYXJlIG5v
dCBvYnNlcnZhYmxlIG9yIGlmIHRoZSBzb3VyY2UncyBoaWdoCiAgICAgICAgICAgICAgICAgLy8g
Yml0cyBhcmUgYWxsIHplcm8uIE5vdGUgdGhhdCB3ZSBkb24ndCBoYXZlIHRoZSBvcHBvc2l0ZSBv
cHRpbWl6YXRpb24gZm9yIG90aGVyCiAgICAgICAgICAgICAgICAgLy8gYXJjaGl0ZWN0dXJlcywg
d2hpY2ggbWF5IHByZWZlciBNb3ZlIG92ZXIgTW92ZTMyLCBiZWNhdXNlIE1vdmUgaXMgY2Fub25p
Y2FsIGFscmVhZHkuCi0gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gQXJnOjpHUCAmJiBvcHRp
bWl6ZUZvclg4Nl82NCgpICYmIGluc3Qub3Bjb2RlID09IE1vdmUKKyAgICAgICAgICAgICAgICBp
ZiAodHlwZSA9PSBBcmc6OkdQICYmIGluc3Qub3Bjb2RlID09IE1vdmUKICAgICAgICAgICAgICAg
ICAgICAgJiYgaW5zdC5hcmdzWzBdLmlzVG1wKCkgJiYgaW5zdC5hcmdzWzFdLmlzVG1wKCkpIHsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKG1fdG1wV2lkdGgudXNlV2lkdGgoaW5zdC5hcmdzWzFd
LnRtcCgpKSA8PSBBcmc6OldpZHRoMzIKICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1fdG1w
V2lkdGguZGVmV2lkdGgoaW5zdC5hcmdzWzBdLnRtcCgpKSA8PSBBcmc6OldpZHRoMzIpCkBAIC0x
MjAyLDE2ICsxMjAxLDE5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICAgICAgLy8gVHJ5IHRvIHJlcGxhY2UgdGhlIHJlZ2lzdGVyIHVzZSBieSBtZW1vcnkgdXNl
IHdoZW4gcG9zc2libGUuCi0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGluc3QuYXJncy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgICAgICBBcmcmIGFyZyA9
IGluc3QuYXJnc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFyZy5pc1RtcCgpICYmIGFy
Zy50eXBlKCkgPT0gdHlwZSAmJiAhYXJnLmlzUmVnKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGF1dG8gc3RhY2tTbG90RW50cnkgPSBzdGFja1Nsb3RzLmZpbmQoYXJnLnRtcCgpKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFja1Nsb3RFbnRyeSAhPSBzdGFja1Nsb3RzLmVu
ZCgpICYmIGluc3QuYWRtaXRzU3RhY2soaSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhcmcgPSBBcmc6OnN0YWNrKHN0YWNrU2xvdEVudHJ5LT52YWx1ZSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGlkU3BpbGwgPSB0cnVlOworICAgICAgICAgICAgICAgIGluc3QuZm9y
RWFjaEFyZygKKyAgICAgICAgICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJv
bGUsIEFyZzo6VHlwZSBhcmdUeXBlLCBBcmc6OldpZHRoIHdpZHRoKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoYXJnLmlzVG1wKCkgJiYgYXJnVHlwZSA9PSB0eXBlICYmICFhcmcuaXNS
ZWcoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gc3RhY2tTbG90RW50cnkg
PSBzdGFja1Nsb3RzLmZpbmQoYXJnLnRtcCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoc3RhY2tTbG90RW50cnkgIT0gc3RhY2tTbG90cy5lbmQoKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmJiBpbnN0LmFkbWl0c1N0YWNrKGFyZykpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhY2tTbG90RW50cnktPnZhbHVlLT5lbnN1cmVTaXplKAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2VNb3ZlMzJJZkRpZFNwaWxs
ID8gNCA6IEFyZzo6Ynl0ZXMod2lkdGgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYXJnID0gQXJnOjpzdGFjayhzdGFja1Nsb3RFbnRyeS0+dmFsdWUpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkaWRTcGlsbCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9KTsKIAogICAgICAg
ICAgICAgICAgIGlmIChkaWRTcGlsbCAmJiBmb3JjZU1vdmUzMklmRGlkU3BpbGwpCiAgICAgICAg
ICAgICAgICAgICAgIGluc3Qub3Bjb2RlID0gTW92ZTMyOwpAQCAtMTI2MiwxMiArMTI2NCw2IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
LQotICAgICAgICBmaXhTcGlsbFNsb3RaRGVmKAotICAgICAgICAgICAgbV9jb2RlLAotICAgICAg
ICAgICAgWyZdIChTdGFja1Nsb3QqIHN0YWNrU2xvdCkgLT4gYm9vbCB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHN0YWNrU2xvdC0+aW5kZXgoKSA+PSBuZXdTdGFja1Nsb3RUaHJlc2hvbGQ7Ci0g
ICAgICAgICAgICB9KTsKICAgICB9CiAKICAgICBDb2RlJiBtX2NvZGU7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCShyZXZpc2lvbiAxOTUxNzYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTkyLDEwICs5MiwxOSBAQCBzdHJ1Y3QgUmVnTGl2ZW5lc3NBZGFwdGVyIHsKICAgICBS
ZWcgaW5kZXhUb1ZhbHVlKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBSZWc6OmZyb21JbmRleChp
bmRleCk7IH0KIH07CiAKK2VudW0gY2xhc3MgS2lsbE1vZGUgOiBpbnQ4X3QgeworICAgIERPQUVh
cmx5RGVmSW5OZXh0SW5zdCwKKyAgICBET0FMYXRlRGVmLAorICAgIEVhcmx5VXNlS2lsbCwKKyAg
ICBMYXRlVXNlSW5QcmV2SW5zdEtpbGwKK307CisKIHRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0ZXI+
Ci1jbGFzcyBBYnN0cmFjdExpdmVuZXNzIDogcHJpdmF0ZSBBZGFwdGVyIHsKK2NsYXNzIEFic3Ry
YWN0TGl2ZW5lc3MgOiBwdWJsaWMgQWRhcHRlciB7CiAgICAgc3RydWN0IFdvcmtzZXQ7CiBwdWJs
aWM6CisgICAgdHlwZWRlZiB0eXBlbmFtZSBBZGFwdGVyOjpUaGluZyBUaGluZzsKKyAgICAKICAg
ICBBYnN0cmFjdExpdmVuZXNzKENvZGUmIGNvZGUpCiAgICAgICAgIDogQWRhcHRlcihjb2RlKQog
ICAgICAgICAsIG1fd29ya3NldChBZGFwdGVyOjptYXhJbmRleChjb2RlKSkKQEAgLTIyMiw2ICsy
MzEsMTEgQEAgcHVibGljOgogCiAgICAgICAgICAgICBJdGVyYXRvciBiZWdpbigpIGNvbnN0IHsg
cmV0dXJuIEl0ZXJhdG9yKG1fbGl2ZW5lc3MsIG1fbGl2ZW5lc3MubV93b3Jrc2V0LmJlZ2luKCkp
OyB9CiAgICAgICAgICAgICBJdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBJdGVyYXRvciht
X2xpdmVuZXNzLCBtX2xpdmVuZXNzLm1fd29ya3NldC5lbmQoKSk7IH0KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgYm9vbCBjb250YWlucyhjb25zdCB0eXBlbmFtZSBBZGFwdGVyOjpUaGluZyYg
dGhpbmcpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fbGl2
ZW5lc3MubV93b3Jrc2V0LmNvbnRhaW5zKEFkYXB0ZXI6OnZhbHVlVG9JbmRleCh0aGluZykpOwor
ICAgICAgICAgICAgfQogCiAgICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICBBYnN0cmFjdExp
dmVuZXNzJiBtX2xpdmVuZXNzOwpAQCAtMjMyLDcgKzI0NiwxNiBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm4gSXRlcmFibGUobV9saXZlbmVzcyk7CiAgICAgICAgIH0KIAotICAgICAgICB2
b2lkIGV4ZWN1dGUodW5zaWduZWQgaW5zdEluZGV4KQorICAgICAgICBib29sIGlzTGl2ZShjb25z
dCB0eXBlbmFtZSBBZGFwdGVyOjpUaGluZyYgdGhpbmcpIGNvbnN0CisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBsaXZlKCkuY29udGFpbnModGhpbmcpOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gQ2FsbHMgdGhlIGtpbGwgY2FsbGJhY2sgd2l0aCB0aGUga2lsbHMgYW5kIGRlc2NyaXB0
aW9ucyBvZiBob3cgdGhleSBnb3Qga2lsbGVkLiBBbHNvCisgICAgICAgIC8vIHBhc3NlcyB0aGUg
aW50ZXJuYWwgaW5kZXggb2YgdGhlIHRoaW5nIGJlaW5nIGtpbGxlZCwgaWYgeW91IHdhbnQgdG8g
dXNlIGluZGV4LWJhc2VkCisgICAgICAgIC8vIGxpdmVuZXNzLgorICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBLaWxsQ2FsbGJhY2s+CisgICAgICAgIHZvaWQgZXhlY3V0ZSh1bnNpZ25lZCBpbnN0
SW5kZXgsIGNvbnN0IEtpbGxDYWxsYmFjayYga2lsbENhbGxiYWNrKQogICAgICAgICB7CiAgICAg
ICAgICAgICBJbnN0JiBpbnN0ID0gbV9ibG9jay0+YXQoaW5zdEluZGV4KTsKICAgICAgICAgICAg
IGF1dG8mIHdvcmtzZXQgPSBtX2xpdmVuZXNzLm1fd29ya3NldDsKQEAgLTI0MiwyMyArMjY1LDMy
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBJbnN0JiBuZXh0SW5zdCA9IG1fYmxvY2stPmF0
KGluc3RJbmRleCArIDEpOwogICAgICAgICAgICAgICAgIG5leHRJbnN0LmZvckVhY2g8dHlwZW5h
bWUgQWRhcHRlcjo6VGhpbmc+KAogICAgICAgICAgICAgICAgICAgICBbJl0gKHR5cGVuYW1lIEFk
YXB0ZXI6OlRoaW5nJiB0aGluZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSB0eXBlLCBBcmc6
OldpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0Vhcmx5RGVmKHJv
bGUpICYmIEFkYXB0ZXI6OmFjY2VwdHNUeXBlKHR5cGUpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdvcmtzZXQucmVtb3ZlKEFkYXB0ZXI6OnZhbHVlVG9JbmRleCh0aGluZykpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNFYXJseURlZihyb2xlKSAmJiBBZGFwdGVy
OjphY2NlcHRzVHlwZSh0eXBlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGluZGV4ID0gQWRhcHRlcjo6dmFsdWVUb0luZGV4KHRoaW5nKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIXdvcmtzZXQucmVtb3ZlKGluZGV4KSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAga2lsbENhbGxiYWNrKGluZGV4LCB0aGluZywgS2lsbE1vZGU6OkRP
QUVhcmx5RGVmSW5OZXh0SW5zdCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAg
ICAvLyBUaGVuIGhhbmRsZSBkZWYncy4KICAgICAgICAgICAgIGluc3QuZm9yRWFjaDx0eXBlbmFt
ZSBBZGFwdGVyOjpUaGluZz4oCiAgICAgICAgICAgICAgICAgWyZdICh0eXBlbmFtZSBBZGFwdGVy
OjpUaGluZyYgdGhpbmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgdHlwZSwgQXJnOjpXaWR0
aCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0xhdGVEZWYocm9sZSkgJiYgQWRh
cHRlcjo6YWNjZXB0c1R5cGUodHlwZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICB3b3Jrc2V0
LnJlbW92ZShBZGFwdGVyOjp2YWx1ZVRvSW5kZXgodGhpbmcpKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKEFyZzo6aXNMYXRlRGVmKHJvbGUpICYmIEFkYXB0ZXI6OmFjY2VwdHNUeXBlKHR5cGUp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IEFkYXB0ZXI6OnZh
bHVlVG9JbmRleCh0aGluZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXdvcmtzZXQu
cmVtb3ZlKGluZGV4KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBraWxsQ2FsbGJhY2so
aW5kZXgsIHRoaW5nLCBLaWxsTW9kZTo6RE9BTGF0ZURlZik7CisgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICB9KTsKIAogICAgICAgICAgICAgLy8gVGhlbiBoYW5kbGUgdXNl
J3MuCiAgICAgICAgICAgICBpbnN0LmZvckVhY2g8dHlwZW5hbWUgQWRhcHRlcjo6VGhpbmc+KAog
ICAgICAgICAgICAgICAgIFsmXSAodHlwZW5hbWUgQWRhcHRlcjo6VGhpbmcmIHRoaW5nLCBBcmc6
OlJvbGUgcm9sZSwgQXJnOjpUeXBlIHR5cGUsIEFyZzo6V2lkdGgpIHsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKEFyZzo6aXNFYXJseVVzZShyb2xlKSAmJiBBZGFwdGVyOjphY2NlcHRzVHlwZSh0
eXBlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtzZXQuYWRkKEFkYXB0ZXI6OnZhbHVl
VG9JbmRleCh0aGluZykpOworICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0Vhcmx5VXNl
KHJvbGUpICYmIEFkYXB0ZXI6OmFjY2VwdHNUeXBlKHR5cGUpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpbmRleCA9IEFkYXB0ZXI6OnZhbHVlVG9JbmRleCh0aGluZyk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAod29ya3NldC5hZGQoaW5kZXgpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGtpbGxDYWxsYmFjayhpbmRleCwgdGhpbmcsIEtpbGxNb2RlOjpF
YXJseVVzZUtpbGwpOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSk7
CiAKICAgICAgICAgICAgIC8vIEFuZCBmaW5hbGx5LCBoYW5kbGUgdGhlIGxhdGUgdXNlJ3Mgb2Yg
dGhlIHByZXZpb3VzIGluc3RydWN0aW9uLgpAQCAtMjY2LDE3ICsyOTgsMzIgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgIEluc3QmIHByZXZJbnN0ID0gbV9ibG9jay0+YXQoaW5zdEluZGV4IC0g
MSk7CiAgICAgICAgICAgICAgICAgcHJldkluc3QuZm9yRWFjaDx0eXBlbmFtZSBBZGFwdGVyOjpU
aGluZz4oCiAgICAgICAgICAgICAgICAgICAgIFsmXSAodHlwZW5hbWUgQWRhcHRlcjo6VGhpbmcm
IHRoaW5nLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIHR5cGUsIEFyZzo6V2lkdGgpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzTGF0ZVVzZShyb2xlKSAmJiBBZGFwdGVy
OjphY2NlcHRzVHlwZSh0eXBlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3Jrc2V0
LmFkZChBZGFwdGVyOjp2YWx1ZVRvSW5kZXgodGhpbmcpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChBcmc6OmlzTGF0ZVVzZShyb2xlKSAmJiBBZGFwdGVyOjphY2NlcHRzVHlwZSh0eXBl
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gQWRhcHRl
cjo6dmFsdWVUb0luZGV4KHRoaW5nKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
d29ya3NldC5hZGQoaW5kZXgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBraWxs
Q2FsbGJhY2soaW5kZXgsIHRoaW5nLCBLaWxsTW9kZTo6TGF0ZVVzZUluUHJldkluc3RLaWxsKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KIAorICAgICAgICB2b2lkIGV4ZWN1dGUodW5zaWduZWQgaW5z
dEluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICBleGVjdXRlKAorICAgICAgICAgICAgICAg
IGluc3RJbmRleCwKKyAgICAgICAgICAgICAgICBbXSAodW5zaWduZWQsIGNvbnN0IHR5cGVuYW1l
IEFkYXB0ZXI6OlRoaW5nJiwgS2lsbE1vZGUpIHsgfSk7CisgICAgICAgIH0KKwogICAgIHByaXZh
dGU6CiAgICAgICAgIEFic3RyYWN0TGl2ZW5lc3MmIG1fbGl2ZW5lc3M7CiAgICAgICAgIEJhc2lj
QmxvY2sqIG1fYmxvY2s7CiAgICAgfTsKIAorICAgIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHJh
d0xpdmVBdEhlYWQoQmFzaWNCbG9jayogYmxvY2spCisgICAgeworICAgICAgICByZXR1cm4gbV9s
aXZlQXRIZWFkW2Jsb2NrXTsKKyAgICB9CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVbmRlcmx5
aW5nSXRlcmFibGU+CiAgICAgY2xhc3MgSXRlcmFibGUgewogICAgIHB1YmxpYzoKQEAgLTMzMCw2
ICszNzcsMTEgQEAgcHVibGljOgogICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0
dXJuIGl0ZXJhdG9yKG1fbGl2ZW5lc3MsIG1faXRlcmFibGUuYmVnaW4oKSk7IH0KICAgICAgICAg
aXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9saXZlbmVzcywgbV9pdGVy
YWJsZS5lbmQoKSk7IH0KIAorICAgICAgICBib29sIGNvbnRhaW5zKGNvbnN0IHR5cGVuYW1lIEFk
YXB0ZXI6OlRoaW5nJiB0aGluZykgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IG1fbGl2ZW5lc3MubV93b3Jrc2V0LmNvbnRhaW5zKEFkYXB0ZXI6OnZhbHVlVG9JbmRleCh0aGlu
ZykpOworICAgICAgICB9CisKICAgICBwcml2YXRlOgogICAgICAgICBBYnN0cmFjdExpdmVuZXNz
JiBtX2xpdmVuZXNzOwogICAgICAgICBjb25zdCBVbmRlcmx5aW5nSXRlcmFibGUmIG1faXRlcmFi
bGU7CkBAIC0zNDUsNiArMzk3LDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gSXRlcmFibGU8
dHlwZW5hbWUgQWRhcHRlcjo6SW5kZXhTZXQ+KCp0aGlzLCBtX2xpdmVBdFRhaWxbYmxvY2tdKTsK
ICAgICB9CiAKKyAgICBJbmRleFNwYXJzZVNldDxVbnNhZmVWZWN0b3JPdmVyZmxvdz4mIHdvcmtz
ZXQoKSB7IHJldHVybiBtX3dvcmtzZXQ7IH0KKwogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3Mg
TG9jYWxDYWxjOwogICAgIGZyaWVuZCBzdHJ1Y3QgTG9jYWxDYWxjOjpJdGVyYWJsZTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3B0aW1pemVCbG9ja09yZGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wdGltaXplQmxv
Y2tPcmRlci5jcHAJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyT3B0aW1pemVCbG9ja09yZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MywxMCArNzMs
OCBAQCBwcml2YXRlOgogCiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UKIAotdm9pZCBvcHRpbWl6
ZUJsb2NrT3JkZXIoQ29kZSYgY29kZSkKK1ZlY3RvcjxCYXNpY0Jsb2NrKj4gYmxvY2tzSW5PcHRp
bWl6ZWRPcmRlcihDb2RlJiBjb2RlKQogewotICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2Rl
LCAib3B0aW1pemVCbG9ja09yZGVyIik7Ci0KICAgICBWZWN0b3I8QmFzaWNCbG9jayo+IGJsb2Nr
c0luT3JkZXI7CiAKICAgICBCbG9ja1dvcmtsaXN0IGZhc3RXb3JrbGlzdDsKQEAgLTExMyw2ICsx
MTEsMTUgQEAgdm9pZCBvcHRpbWl6ZUJsb2NrT3JkZXIoQ29kZSYgY29kZSkKICAgICBBU1NFUlQo
ZmFzdFdvcmtsaXN0LmlzRW1wdHkoKSk7CiAgICAgQVNTRVJUKHNsb3dXb3JrbGlzdC5pc0VtcHR5
KCkpOwogCisgICAgcmV0dXJuIGJsb2Nrc0luT3JkZXI7Cit9CisKK3ZvaWQgb3B0aW1pemVCbG9j
a09yZGVyKENvZGUmIGNvZGUpCit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJv
cHRpbWl6ZUJsb2NrT3JkZXIiKTsKKworICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gYmxvY2tzSW5P
cmRlciA9IGJsb2Nrc0luT3B0aW1pemVkT3JkZXIoY29kZSk7CisgICAgCiAgICAgLy8gUGxhY2Ug
YmxvY2tzIGludG8gQ29kZSdzIGJsb2NrIGxpc3QgYWNjb3JkaW5nIHRvIHRoZSBvcmRlcmluZyBp
biBibG9ja3NJbk9yZGVyLiBXZSBkbyB0aGlzIGJ5IGxlYWtpbmcKICAgICAvLyBhbGwgb2YgdGhl
IGJsb2NrcyBhbmQgdGhlbiByZWFkb3B0aW5nIHRoZW0uCiAgICAgZm9yIChhdXRvJiBlbnRyeSA6
IGNvZGUuYmxvY2tMaXN0KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ck9wdGltaXplQmxvY2tPcmRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyT3B0aW1pemVCbG9ja09yZGVyLmgJKHJldmlzaW9uIDE5NTE3NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3B0aW1pemVCbG9ja09yZGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjgsMTAgKzI4LDE4IEBACiAKICNpZiBFTkFCTEUoQjNfSklUKQogCisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNw
YWNlIEFpciB7CiAKK2NsYXNzIEJhc2ljQmxvY2s7CiBjbGFzcyBDb2RlOwogCisvLyBSZXR1cm5z
IGEgbGlzdCBvZiBibG9ja3Mgc29ydGVkIGFjY29yZGluZyB0byB3aGF0IHdvdWxkIGJlIHRoZSBj
dXJyZW50IG9wdGltYWwgb3JkZXIuIFRoaXMgc2hhcmVzCisvLyBzb21lIHByb3BlcnRpZXMgd2l0
aCBhIHByZS1vcmRlciB0cmF2ZXJzYWwuIEluIHBhcnRpY3VsYXIsIGVhY2ggYmxvY2sgd2lsbCBh
cHBlYXIgYWZ0ZXIgYXQgbGVhc3QKKy8vIG9uZSBvZiBpdHMgcHJlZGVjZXNzb3JzLgorVmVjdG9y
PEJhc2ljQmxvY2sqPiBibG9ja3NJbk9wdGltaXplZE9yZGVyKENvZGUmKTsKKwogLy8gUmVvcmRl
cnMgdGhlIGJhc2ljIGJsb2NrcyB0byBrZWVwIGhvdCBibG9ja3MgYXQgdGhlIHRvcCwgYW5kIG1h
eGltaXplIHRoZSBsaWtlbGlob29kIHRoYXQgYSBmcmVxdWVudGx5CiAvLyB0YWtlbiBlZGdlIGlz
IGp1c3QgYSBmYWxsLXRocm91Z2guCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyU2NhdmVuZ2VSZWdpc3RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyU2NhdmVuZ2VSZWdpc3RlcnMuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTY2F2ZW5nZVJlZ2lzdGVycy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw4MjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyU2Nh
dmVuZ2VSZWdpc3RlcnMuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJC
cmVha0NyaXRpY2FsRWRnZXMuaCIKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWly
RW1pdFNodWZmbGUuaCIKKyNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJB
aXJJbnN0SW5saW5lcy5oIgorI2luY2x1ZGUgIkFpckluc3RNYXAuaCIKKyNpbmNsdWRlICJBaXJM
aXZlbmVzcy5oIgorI2luY2x1ZGUgIkFpck9wdGltaXplQmxvY2tPcmRlci5oIgorI2luY2x1ZGUg
IkFpclBoYXNlU2NvcGUuaCIKKyNpbmNsdWRlICJBaXJSZWdpc3RlclByaW9yaXR5LmgiCisjaW5j
bHVkZSAiQWlyVG1wV2lkdGguaCIKKyNpbmNsdWRlICJBaXJVc2VDb3VudHMuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCituYW1lc3BhY2Ugewor
Cit0ZW1wbGF0ZTxBcmc6OlR5cGUgdHlwZT4KK2NsYXNzIFNjYXZlbmdlUmVnaXN0ZXJzIHsKK3B1
YmxpYzoKKyAgICBTY2F2ZW5nZVJlZ2lzdGVycyhDb2RlJiBjb2RlKQorICAgICAgICA6IG1fY29k
ZShjb2RlKQorICAgICAgICAsIG1fbGl2ZW5lc3MoY29kZSkKKyAgICAgICAgLCBtX2RlYXRocyhj
b2RlKQorICAgICAgICAsIG1fdXNlQ291bnRzKGNvZGUpCisgICAgICAgICwgbV90bXBXaWR0aChj
b2RlKQorICAgICAgICAsIG1faW5zZXJ0aW9uU2V0KGNvZGUpCisgICAgeworICAgIH0KKworICAg
IHZvaWQgcnVuKCkKKyAgICB7CisgICAgICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gYmxvY2tzID0g
YmxvY2tzSW5PcHRpbWl6ZWRPcmRlcihtX2NvZGUpOworCisgICAgICAgIGZvciAoOzspIHsKKyAg
ICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2Nr
KiBibG9jayA6IGJsb2NrcykgeworICAgICAgICAgICAgICAgIG1fYmxvY2sgPSBibG9jazsKKyAg
ICAgICAgICAgICAgICBwcm9wYWdhdGVWYWx1ZXNJbkJsb2NrKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoIW1fY2hhbmdlZCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgY29tcHV0ZURlYXRocygpOworICAgICAgICBpbml0aWFs
aXplQmxvY2tSZWdTdGF0ZXMoKTsKKworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDog
YmxvY2tzKSB7CisgICAgICAgICAgICBtX2Jsb2NrID0gYmxvY2s7CisgICAgICAgICAgICBwcm9j
ZXNzQmxvY2soKTsKKyAgICAgICAgfQorICAgIH0KKworcHJpdmF0ZToKKyAgICBzdHJ1Y3QgVG1w
SW5mbyB7CisgICAgICAgIFRtcEluZm8oKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGV4cGxpY2l0IFRtcEluZm8oUmVnIHJlZykKKyAgICAgICAgICAgIDogcmVnKHJl
ZykKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpbnQ2NF90IGNvbnN0
YW50IHsgMCB9OworICAgICAgICBSZWcgcmVnOworICAgICAgICBib29sIGhhc0NvbnN0YW50IHsg
ZmFsc2UgfTsKKyAgICAgICAgYm9vbCBoYXNTcGlsbCB7IGZhbHNlIH07CisgICAgfTsKKworICAg
IHN0cnVjdCBSZWdJbmZvIHsKKyAgICAgICAgUmVnSW5mbygpCisgICAgICAgIHsKKyAgICAgICAg
fQorCisgICAgICAgIGV4cGxpY2l0IFJlZ0luZm8oVG1wIHRtcCkKKyAgICAgICAgICAgIDogdG1w
KHRtcCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgVG1wIHRtcDsKKyAgICAgICAg
Ym9vbCBpc0xvY2tlZCB7IGZhbHNlIH07CisgICAgfTsKKworICAgIHZvaWQgcHJvcGFnYXRlVmFs
dWVzSW5CbG9jaygpCisgICAgeworICAgICAgICBtX3N0YXRlID0gbV9hdEhlYWRbbV9ibG9ja107
CisgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6ICptX2Jsb2NrKQorICAgICAgICAgICAgcHJvcGFn
YXRlVmFsdWVzKGluc3QpOworCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDog
bV9ibG9jay0+c3VjY2Vzc29yQmxvY2tzKCkpIHsKKyAgICAgICAgICAgIFN0YXRlJiBhdEhlYWQg
PSBtX2F0SGVhZFtzdWNjZXNzb3JdOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIWF0
SGVhZC52aXNpdGVkQnlQcm9wYWdhdGlvbikgeworICAgICAgICAgICAgICAgIGZvciAoYXV0byYg
ZW50cnkgOiBhdEhlYWQubWFwcGluZykgeworICAgICAgICAgICAgICAgICAgICBUbXBJbmZvJiBz
cmNJbmZvID0gZ2V0SW5mbyhlbnRyeS5rZXkpOworICAgICAgICAgICAgICAgICAgICBUbXBJbmZv
JiBkc3RJbmZvID0gZW50cnkudmFsdWU7CisgICAgICAgICAgICAgICAgICAgIGRzdEluZm8uY29u
c3RhbnQgPSBzcmNJbmZvLmNvbnN0YW50OworICAgICAgICAgICAgICAgICAgICBkc3RJbmZvLmhh
c0NvbnN0YW50ID0gc3JjSW5mby5oYXNDb25zdGFudDsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgYXRIZWFkLnZpc2l0ZWRCeVByb3BhZ2F0aW9uID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogYXRIZWFkLm1hcHBp
bmcpIHsKKyAgICAgICAgICAgICAgICBUbXBJbmZvJiBkc3RJbmZvID0gZW50cnkudmFsdWU7Cisg
ICAgICAgICAgICAgICAgaWYgKCFkc3RJbmZvLmhhc0NvbnN0YW50KQorICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBUbXBJbmZvJiBzcmNJbmZvID0gZ2V0SW5m
byhlbnRyeS5rZXkpOworICAgICAgICAgICAgICAgIGlmICghc3JjSW5mby5oYXNDb25zdGFudCB8
fCBzcmNJbmZvLmNvbnN0YW50ICE9IGRzdEluZm8uY29uc3RhbnQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgZHN0SW5mby5oYXNDb25zdGFudCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBt
X2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIHByb3BhZ2F0ZVZhbHVlcyhJbnN0JiBpbnN0KQor
ICAgIHsKKyAgICAgICAgaWYgKHR5cGUgPT0gQXJnOjpHUAorICAgICAgICAgICAgJiYgaW5zdC5v
cGNvZGUgPT0gTW92ZQorICAgICAgICAgICAgJiYgaW5zdC5hcmdzWzBdLmlzU29tZUltbSgpCisg
ICAgICAgICAgICAmJiBpbnN0LmFyZ3NbMV0uaXNUbXAoKSkgeworICAgICAgICAgICAgVG1wSW5m
byYgaW5mbyA9IGdldEluZm8oaW5zdC5hcmdzWzFdLnRtcCgpKTsKKyAgICAgICAgICAgIGluZm8u
aGFzQ29uc3RhbnQgPSB0cnVlOworICAgICAgICAgICAgaW5mby5jb25zdGFudCA9IGluc3QuYXJn
c1sxXS52YWx1ZSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gRklYTUU6IE5lZWQgdGhlIGVxdWl2YWxlbnQgZm9yIEZQLgorCisgICAgICAgIEluc3Q6OmZv
ckVhY2hEZWZXaXRoRXh0cmFDbG9iYmVyZWRSZWdzPFRtcD4oCisgICAgICAgICAgICAmaW5zdCwg
Jmluc3QsIC8vIEdldCBib3RoIGxhdGUgYW5kIGVhcmx5IGRlZnMgZm9yIGluc3QuCisgICAgICAg
ICAgICBbJl0gKFRtcCB0bXAsIEFyZzo6Um9sZSwgQXJnOjpUeXBlIHRtcFR5cGUsIEFyZzo6V2lk
dGgpIHsKKyAgICAgICAgICAgICAgICBpZiAodG1wVHlwZSAhPSB0eXBlKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgZ2V0SW5mbyh0bXApLmhhc0NvbnN0YW50
ID0gZmFsc2U7CisgICAgICAgICAgICB9KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21wdXRl
RGVhdGhzKCkKKyAgICB7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUp
IHsKKyAgICAgICAgICAgIHR5cGVuYW1lIFRtcExpdmVuZXNzPHR5cGU+OjpMb2NhbENhbGMgbG9j
YWxDYWxjKG1fbGl2ZW5lc3MsIGJsb2NrKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5z
dEluZGV4ID0gYmxvY2stPnNpemUoKTsgaW5zdEluZGV4LS07KSB7CisgICAgICAgICAgICAgICAg
bG9jYWxDYWxjLmV4ZWN1dGUoCisgICAgICAgICAgICAgICAgICAgIGluc3RJbmRleCwKKyAgICAg
ICAgICAgICAgICAgICAgWyZdICh1bnNpZ25lZCwgVG1wIHRtcCwgS2lsbE1vZGUga2lsbE1vZGUp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoa2lsbE1vZGUpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgS2lsbE1vZGU6OkRPQUVhcmx5RGVmSW5OZXh0SW5zdDoKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2RlYXRocy5hdChibG9jaywgaW5zdEluZGV4ICsg
MSkuYXBwZW5kKERlYXRoKHRtcCwgRWFybHlEZWF0aCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBLaWxsTW9kZTo6RE9B
TGF0ZURlZjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2RlYXRocy5hdChibG9jaywg
aW5zdEluZGV4KS5hcHBlbmQoRGVhdGgodG1wLCBMYXRlRGVhdGgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgS2lsbE1v
ZGU6OkVhcmx5VXNlS2lsbDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2RlYXRocy5h
dChibG9jaywgaW5zdEluZGV4KS5hcHBlbmQoRGVhdGgodG1wLCBFYXJseURlYXRoKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlIEtpbGxNb2RlOjpMYXRlVXNlSW5QcmV2SW5zdEtpbGw6CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9kZWF0aHMuYXQoYmxvY2ssIGluc3RJbmRleCAtIDEpLmFwcGVuZChEZWF0aCh0
bXAsIExhdGVEZWF0aCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGluaXRpYWxpemVCbG9ja1Jl
Z1N0YXRlcygpCisgICAgeworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gbV9jb2RlWzBdOwor
ICAgICAgICAKKyAgICAgICAgU3RhdGUmIHN0YXRlID0gbV9hdEhlYWRbcm9vdF07CisgICAgICAg
IGZvciAoVG1wIHRtcCA6IG1fbGl2ZW5lc3MubGl2ZUF0SGVhZChyb290KSkgeworICAgICAgICAg
ICAgaWYgKCF0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgc3RhdGUubWFwcGluZy5hZGQodG1wLCBUbXBJbmZvKHRtcC5yZWco
KSkpOworICAgICAgICAgICAgc3RhdGUucmV2ZXJzZU1hcHBpbmdbdG1wLnJlZygpXSA9IFJlZ0lu
Zm8odG1wKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgcHJvY2Vzc0Jsb2NrKCkKKyAg
ICB7CisgICAgICAgIG1fc3RhdGUgPSBtX2F0SGVhZFttX2Jsb2NrXTsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQobV9zdGF0ZS5pc1NldHRsZWQpOworCisgICAgICAgIGZvciAobV9pbnN0SW5kZXgg
PSAwOyBtX2luc3RJbmRleCA8IG1fYmxvY2stPnNpemUoKTsgKyttX2luc3RJbmRleCkgeworICAg
ICAgICAgICAgSW5zdCYgaW5zdCA9IG1fYmxvY2stPmF0KG1faW5zdEluZGV4KTsKKyAgICAgICAg
ICAgIHByb2Nlc3NJbnN0KGluc3QpOworICAgICAgICAgICAgcHJvcGFnYXRlVmFsdWVzKGluc3Qp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fYmxvY2stPm51bVN1Y2Nlc3NvcnMoKSA+IDEp
IHsKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDogbV9ibG9jay0+c3Vj
Y2Vzc29yQmxvY2tzKCkpCisgICAgICAgICAgICAgICAgYm9vdEJsb2NrKHN1Y2Nlc3Nvcik7Cisg
ICAgICAgIH0gZWxzZSBpZiAobV9ibG9jay0+bnVtU3VjY2Vzc29ycygpID09IDEpIHsKKyAgICAg
ICAgICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA9IG1fYmxvY2stPnN1Y2Nlc3NvckJsb2NrKDAp
OworICAgICAgICAgICAgaWYgKG1fYXRIZWFkW3N1Y2Nlc3Nvcl0uaXNTZXR0bGVkKQorICAgICAg
ICAgICAgICAgIGNvbmZvcm1UbyhzdWNjZXNzb3IpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIGJvb3RCbG9jayhzdWNjZXNzb3IpOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKG1fYmxvY2spOworICAgIH0KKworICAgIHZvaWQg
cHJvY2Vzc0luc3QoSW5zdCYgaW5zdCkKKyAgICB7CisgICAgICAgIC8vIE91ciBzdGF0ZSBtYXBw
aW5nIHRlbGxzIHVzIHdoYXQgaXMgbGl2ZSBhdCBhbnkgZ2l2ZW4gbW9tZW50LiBXZSB1c2UgYSBz
ZXBhcmF0ZQorICAgICAgICAvLyBsaXZlbmVzcyBwYXNzIHRvIGNvbGxlY3QgdGhlIGtpbGwgbGlz
dHMgZm9yIGFsbCBpbnN0cnVjdGlvbnMuIFRoZSBraWxsIGxpc3RzIHRlbGwgdXMKKyAgICAgICAg
Ly8gYWJvdXQgdGhlIHdheXMgdGhhdCB0aGluZ3MgZGllIGF0IGFuIEluc3QuIFRoZXJlIGFyZSBm
b3VyIHdheXM6CisgICAgICAgIC8vIAorICAgICAgICAvLyAtIEFuIGVhcmx5IGRlZiBjb3VsZCBk
aWUgYWJvdmUgYW4gSW5zdC4KKyAgICAgICAgLy8gLSBBbiBlYXJseSB1c2UgY291bGQga2lsbCBh
Ym92ZSBhbiBJbnN0LgorICAgICAgICAvLyAtIEEgbGF0ZSBkZWYgY291bGQgZGllIGJlbG93IGFu
IEluc3QuCisgICAgICAgIC8vIC0gQSBsYXRlIHVzZSBjb3VsZCBraWxsIGJlbG93IGFuIEluc3Qu
CisgICAgICAgIC8vIAorICAgICAgICAvLyBPbmNlIHdlIGFyZSBhcm1lZCB3aXRoIG91ciBzdGF0
ZSBtYXBwaW5nIGFuZCB0aGUga2lsbCBsaXN0cywgd2UgY2FuIHByb2Nlc3MgdGhlIEluc3QKKyAg
ICAgICAgLy8gaW4gdGhlIG9yZGVyIG9mIGl0cyBleGVjdXRpb24gYW5kIHVwZGF0ZSB0aGUgc3Rh
dGUgbWFwcGluZyBiYXNlZCBvbiBkZWZzIGFuZCBraWxsCisgICAgICAgIC8vIGxpc3RzLgorICAg
ICAgICAvLyAKKyAgICAgICAgLy8gV2Ugc3RhcnQgYWJvdmUgdGhlIEluc3Qgd2l0aCBhIHN0YXRl
IHRoYXQgdGVsbHMgdXMgd2hhdCBpcyBsaXZlIGJlZm9yZSBpdC4gVGhpcworICAgICAgICAvLyBp
bmNsdWRlcyB0aGluZ3MgdGhhdCB3aWxsIGRpZSBhdCB0aGUgdG9wLiBXZSBjYW4gaGFuZGxlIGVh
cmx5IHVzZXMgYW5kIGRlZnMgYnkgZ2l2aW5nCisgICAgICAgIC8vIHRoZW0gcmVnaXN0ZXJzIHRo
YXQgYXJlIG5vdCBsaXZlLiBXZSBrbm93IHdoaWNoIHJlZ2lzdGVycyBiZWNvbWUgbGl2ZSBiZWNh
dXNlIG91cgorICAgICAgICAvLyBtYXBwaW5nIHRlbGxzIHVzIHRoaXMuIFRoZW4gd2UgY2FuIGFw
cGx5IHRoZSBlYXJseSBkZWF0aHMuIFRoZW4gd2UgcHJvY2VzcyBsYXRlIHVzZXMKKyAgICAgICAg
Ly8gYW5kIGRlZnMsIGFuZCB0aGVuIGFwcGx5IHRoZSBsYXRlIGRlYXRocy4KKyAgICAgICAgLy8g
CisgICAgICAgIC8vIFRoaXMgYWxnb3JpdGhtIG11c3QgcHJvY2VlZCBpbiB0aGUgb3JkZXIgb2Yg
dGhlIEluc3QncyBleGVjdXRpb24uIFdlIGNhbiB1c2UgdGhlCisgICAgICAgIC8vIG5vdGlvbiBv
ZiBsb2NraW5nIGF0IGVhY2ggc3RhZ2UgLSBlYXJseSBhbmQgdGhlbiBsYXRlIC0gdG8gaW5kaWNh
dGUgd2hpY2ggcmVnaXN0ZXJzCisgICAgICAgIC8vIGhhdmUgYWxyZWFkeSBiZWVuIHB1cnBvc2Vk
LiBBbGwgZWFybHkgdXNlcyB3aWxsIGhvbGQgdGhlIGxvY2sgd2hpbGUgd2UgYXJlIHByb2Nlc3Np
bmcKKyAgICAgICAgLy8gdGhlIGVhcmx5IHBhcnQgb2YgdGhlIGluc3RydWN0aW9uLCBhbmQgdGhl
biByZWxlYXNlIGl0IGJlZm9yZSB3ZSBzdGFydCBwcm9jZXNzaW5nIHRoZQorICAgICAgICAvLyBs
YXRlIHN0dWZmLiBJbiBiZXR3ZWVuIGVhcmx5IGFuZCBsYXRlLCBhZnRlciB3ZSBoYXZlIHVubG9j
a2VkIHRoaW5ncyB1c2VkIGVhcmx5LCB3ZQorICAgICAgICAvLyBjYW4gcGVyZm9ybSBlYXJseSBk
ZWF0aHMuIEFsbCBlYXJseSBkZWZzIHdpbGwgaG9sZCB0aGUgbG9jayBlYXJseSBhbmQgdGhlbiBy
ZWxlYXNlIGl0CisgICAgICAgIC8vIGFmdGVyIHdlIHByb2Nlc3MgbGF0ZSB0aGluZ3MuIEFzIGEg
c3BlY2lhbCBjYXNlLCBVc2VEZWYgd2lsbCBhbHNvIHJlbGVhc2UgdGhlIGxvY2sKKyAgICAgICAg
Ly8gbGF0ZS4KKyAgICAgICAgLy8gCisgICAgICAgIC8vIFRoaW5ncyBnZXQgd2VpcmQgd2l0aCBV
c2VEZWYuIEx1Y2t5IGZvciB1cywgSW5zdHMgd2lsbCBoYXZlIGEgc21hbGwgbnVtYmVyIG9mIFVz
ZURlZnMsCisgICAgICAgIC8vIHNvIHRoZSBhbGdvcml0aG0gZG9lc24ndCBoYXZlIHRvIGJlIGVm
ZmljaWVudCBhbmQgd2UgY2FuIGJlIHN1cmUgdGhhdCBpZiB3ZSBoYW5kbGUKKyAgICAgICAgLy8g
VXNlRGVmcyBlYXJseSwgdGhlbiB0aGUgZ3JlZWR5IGFwcHJvYWNoIHNob3VsZCBqdXN0IHdvcmsu
IFRoZSBsb2NraW5nIHN0cmF0ZWd5IGVuc3VyZXMKKyAgICAgICAgLy8gdGhhdCB3ZSB3b24ndCB0
cnkgdG8gcmV1c2UgdGhlIHJlZ2lzdGVyIHdlIGFscmVhZHkgcGlja2VkLiBUaGUgb25seSBhZGRp
dGlvbmFsIGxvZ2ljCisgICAgICAgIC8vIGZvciBVc2VEZWYgaXMgdGhhdCB3aGVuIHdlIHBpY2sg
YSByZWdpc3RlciBmb3IgaXQsIHdoaWNoIGhhcHBlbnMgZWFybHksIHdlIGxvb2sgYWhlYWQKKyAg
ICAgICAgLy8gdG8gbWFrZSBzdXJlIHRoYXQgd2UgZGlkbid0IGFscmVhZHkgbG9jayB0aGUgcmVn
aXN0ZXIgbGF0ZS4gVGhlIG9ubHkgcmVnaXN0ZXJzIHRoYXQgd2UKKyAgICAgICAgLy8gY291bGQg
aGF2ZSBhbHJlYWR5IGxvY2tlZCBsYXRlIGFyZSB0aGUgb25lcyB0aGF0IGFyZSBjbG9iYmVyZWQg
bGF0ZSBvciBkZWZpbmVkIGxhdGUuCisgICAgICAgIC8vIAorICAgICAgICAvLyBPbmUgb2YgdGhl
IGJlYXV0aWZ1bCB0aGluZ3MgYWJvdXQgdGhpcyBhcHByb2FjaCBpcyB0aGF0IHdlIGNhbiBwcm9j
ZXNzIHRoZSBJbnN0CisgICAgICAgIC8vIGluLXBsYWNlLiBXZSB3b24ndCBlZGl0IHRoZSB1c2Vz
IHVudGlsIHdlIGhhdmUgYWNjb3VudGVkIGZvciB0aGVtLiBXZSB3b24ndCBlZGl0IHRoZQorICAg
ICAgICAvLyBkZWZzIHVudGlsIHdlIGhhdmUgYWNjb3VudGVkIGZvciB0aGVtLiBTbywgd2UgY2Fu
IGNvbXB1dGUgZm9yd2FyZCBsaXZlbmVzcyB3aGlsZSBhbHNvCisgICAgICAgIC8vIGVkaXRpbmcg
dGhlIGluc3RydWN0aW9uLgorCisgICAgICAgIC8vIFNwaWxsIGFuZCBsb2NrIGFsbCBlYXJseSBj
bG9iYmVycy4gU3BpbGwgYWxsIGxhdGUgY2xvYmJlcnMsIGJ1dCBkb24ndCBsb2NrIHRob3NlIHll
dC4KKyAgICAgICAgaWYgKGluc3Qub3Bjb2RlID09IFBhdGNoKSB7CisgICAgICAgICAgICBpbnN0
LmV4dHJhRWFybHlDbG9iYmVyZWRSZWdzKCkuZm9yRWFjaCgKKyAgICAgICAgICAgICAgICBbJl0g
KFJlZyByZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgc3BpbGwocmVnKTsKKyAgICAgICAgICAg
ICAgICAgICAgbG9jayhyZWcpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgd2UgbG9jayBhbHJlYWR5LWFsbG9jYXRlZCByZWdpc3Rl
cnMgdGhhdCBhcmUgbGl2ZSBlYXJseS4gVGhpcyBpbmNsdWRlcyBhbGwKKyAgICAgICAgLy8gZWFy
bHkgdXNlcywgZWFybHkgZGVmcywgYW5kIGxhdGUgdXNlcy4KKyAgICAgICAgaW5zdC5mb3JFYWNo
VG1wKAorICAgICAgICAgICAgWyZdIChUbXAmIHRtcCwgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlw
ZSB0bXBUeXBlLCBBcmc6OldpZHRoKSB7CisgICAgICAgICAgICAgICAgaWYgKHRtcFR5cGUgIT0g
dHlwZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGlmICgh
dG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICBpZiAoIUFyZzo6aXNFYXJseURlZihyb2xlKSAmJiAhQXJnOjppc0FueVVzZShyb2xlKSAmJiBy
b2xlICE9IEFyZzo6VXNlQWRkcikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGxvY2soZmlsbCh0bXAsIHJvbGUpKTsKKyAgICAg
ICAgICAgIH0pOworCisgICAgICAgIC8vIEFsbG9jYXRlIHJlZ2lzdGVycyB0byB0aG9zZSB0aGlu
Z3MgdGhhdCBkb24ndCBhZG1pdCBzdGFjay4KKyAgICAgICAgaW5zdC5mb3JFYWNoQXJnKAorICAg
ICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSBhcmdUeXBl
LCBBcmc6OldpZHRoIHdpZHRoKSB7CisgICAgICAgICAgICAgICAgaWYgKGFyZ1R5cGUgIT0gdHlw
ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGlmICghQXJn
Ojppc0Vhcmx5RGVmKHJvbGUpICYmICFBcmc6OmlzQW55VXNlKHJvbGUpICYmIHJvbGUgIT0gQXJn
OjpVc2VBZGRyKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgICAg
ICBpZiAoYXJnLmlzVG1wKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFyZy5pc1JlZygp
KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICBp
ZiAoaW5zdC5hZG1pdHNTdGFjayhhcmcpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgICAgICBhcmcgPSBUbXAobG9jayhmaWxsKGFyZy50bXAoKSwgcm9s
ZSkpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIGFyZy5mb3JFYWNoVG1wKAorICAgICAgICAgICAgICAgICAgICByb2xl
LCB0eXBlLCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgWyZdIChUbXAmIHRtcCwgQXJnOjpS
b2xlIHJvbGUsIEFyZzo6VHlwZSwgQXJnOjpXaWR0aCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgdG1wID0gVG1wKGxvY2soZmlsbCh0bXAsIHJvbGUpKSk7CisgICAgICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgLy8gQWxsb2NhdGUgcmVnaXN0ZXJzIHRv
IHRob3NlIHRoaW5ncyB0aGF0IGFkbWl0IHN0YWNrIGJ1dCBhcmUgbm90IGNvbGQuIEtlZXAgdGhp
cyB1cCBzbworICAgICAgICAvLyBsb25nIGFzIHdlIHN0aWxsIGhhdmUgcmVnaXN0ZXJzLgorICAg
ICAgICBpbnN0LmZvckVhY2hBcmcoCisgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJv
bGUgcm9sZSwgQXJnOjpUeXBlIGFyZ1R5cGUsIEFyZzo6V2lkdGgpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoYXJnVHlwZSAhPSB0eXBlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgaWYgKCFBcmc6OmlzQW55VXNlKHJvbGUpICYmICFBcmc6OmlzRWFybHlEZWYo
cm9sZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBpZiAo
QXJnOjppc0NvbGRVc2Uocm9sZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICBpZiAoIWFyZy5pc1RtcCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAgICAgaWYgKGFyZy5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgICAgICAgICBSZWcgcmVnID0gZmlsbChhcmcudG1wKCksIHJvbGUs
IERvbnRTcGlsbCk7CisgICAgICAgICAgICAgICAgaWYgKCFyZWcpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBhcmcgPSBUbXAobG9jayhyZWcpKTsKKyAgICAg
ICAgICAgIH0pOworCisgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hhdCB0byBkbyB3aXRoIGV2ZXJ5
dGhpbmcgZWxzZS4KKyAgICAgICAgaW5zdC5mb3JFYWNoQXJnKAorICAgICAgICAgICAgWyZdIChB
cmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSBhcmdUeXBlLCBBcmc6OldpZHRoIHdp
ZHRoKSB7CisgICAgICAgICAgICAgICAgaWYgKGFyZ1R5cGUgIT0gdHlwZSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGlmICghQXJnOjppc0FueVVzZShyb2xl
KSAmJiAhQXJnOjppc0Vhcmx5RGVmKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAgICAgaWYgKCFhcmcuaXNUbXAoKSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgICAgIGlmIChhcmcuaXNSZWcoKSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAgICAgVG1wSW5mbyYgaW5mbyA9IGdldEluZm8o
YXJnLnRtcCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoaW5mby5yZWcpIHsKKyAgICAgICAgICAg
ICAgICAgICAgYXJnID0gVG1wKGxvY2soaW5mby5yZWcpKTsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIFN0YWNrU2xvdCog
c2xvdCA9IHNwaWxsU2xvdChhcmcudG1wKCkpOworICAgICAgICAgICAgICAgIGVuc3VyZVdpZHRo
KHNsb3QsIHdpZHRoKTsKKyAgICAgICAgICAgICAgICBhcmcgPSBBcmc6OnN0YWNrKHNsb3QpOwor
ICAgICAgICAgICAgfSk7CisKKyAgICAgICAgLy8gVW5sb2NrIGFsbCBvZiB0aGUgZWFybHkgY2xv
YmJlcmVkIHJlZ2lzdGVycy4KKyAgICAgICAgaWYgKGluc3Qub3Bjb2RlID09IFBhdGNoKSB7Cisg
ICAgICAgICAgICBpbnN0LmV4dHJhRWFybHlDbG9iYmVyZWRSZWdzKCkuZm9yRWFjaCgKKyAgICAg
ICAgICAgICAgICBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgdW5sb2NrKHJl
Zyk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBVbmxvY2sg
YWxsIG9mIHRoZSBlYXJseSB1c2VzLiBUaGlzIHBlcm1pdHMgdGhvc2UgcmVnaXN0ZXJzIHRvIGJl
IHVzZWQgZm9yIG90aGVyIHRoaW5ncy4KKyAgICAgICAgLy8gSXQgZXZlbiBtZWFucyB0aGF0IHdl
IG1pZ2h0IHNwaWxsIHRoZSB1c2VkIHJlZ2lzdGVyIGluIHRoZSBzaHVmZmxlIGR1ZSB0byBhIGxh
dGUgZGVmIHRoYXQKKyAgICAgICAgLy8gY291bGQgdXNlIHRoYXQgcmVnaXN0ZXIuCisgICAgICAg
IGluc3QuZm9yRWFjaFRtcCgKKyAgICAgICAgICAgIFsmXSAoVG1wJiB0bXAsIEFyZzo6Um9sZSBy
b2xlLCBBcmc6OlR5cGUgYXJnVHlwZSwgQXJnOjpXaWR0aCkgeworICAgICAgICAgICAgICAgIGlm
IChhcmdUeXBlICE9IHR5cGUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICBpZiAoIUFyZzo6aXNFYXJseVVzZShyb2xlKSAmJiByb2xlICE9IEFyZzo6VXNlQWRk
cikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHRtcC5pc1JlZygpKTsKKyAgICAgICAgICAgICAgICB1bmxvY2sodG1wLnJlZygpKTsK
KyAgICAgICAgICAgIH0pOworCisgICAgICAgIC8vIEFwcGx5IGFsbCBvZiB0aGUgZWFybHkgZGVh
dGhzLgorICAgICAgICBmb3IgKERlYXRoJiBkZWF0aCA6IG1fZGVhdGhzLmF0KG1fYmxvY2ssIG1f
aW5zdEluZGV4KSkgeworICAgICAgICAgICAgaWYgKGRlYXRoLmRlYXRoTW9kZSA9PSBFYXJseURl
YXRoKQorICAgICAgICAgICAgICAgIGtpbGwoZGVhdGgudG1wKTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIExvY2sgYWxsIG9mIHRoZSBsYXRlIGNsb2JiZXJlZCByZWdpc3RlcnMuCisgICAgICAg
IGlmIChpbnN0Lm9wY29kZSA9PSBQYXRjaCkgeworICAgICAgICAgICAgaW5zdC5leHRyYUNsb2Ji
ZXJlZFJlZ3MoKS5mb3JFYWNoKAorICAgICAgICAgICAgICAgIFsmXSAoUmVnIHJlZykgeworICAg
ICAgICAgICAgICAgICAgICBzcGlsbChyZWcpOworICAgICAgICAgICAgICAgICAgICBsb2NrKHJl
Zyk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBGaWxsIGFu
ZCBsb2NrIGFsbCBvZiB0aGUgbGF0ZSBkZWZzLgorICAgICAgICBpbnN0LmZvckVhY2hBcmcoCisg
ICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIGFyZ1R5
cGUsIEFyZzo6V2lkdGgpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXJnVHlwZSAhPSB0eXBlKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgaWYgKCFBcmc6Omlz
TGF0ZURlZihyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgIGlmICghYXJnLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICBsb2NrKGZpbGwoYXJnLnRtcCgpLCByb2xlKSk7CisgICAgICAgICAgICB9KTsK
KworICAgICAgICAvLyBBc3NpZ24gcmVnaXN0ZXJzIHRvIHRob3NlIGxhdGUgZGVmcyB0aGF0IGRv
bid0IGFkbWl0IHN0YWNrLgorICAgICAgICBpbnN0LmZvckVhY2hBcmcoCisgICAgICAgICAgICBb
Jl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIGFyZ1R5cGUsIEFyZzo6V2lk
dGgpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXJnVHlwZSAhPSB0eXBlKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgaWYgKCFBcmc6OmlzTGF0ZURlZihyb2xl
KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGlmICghYXJn
LmlzVG1wKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBp
ZiAoYXJnLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICBpZiAoaW5zdC5hZG1pdHNTdGFjayhhcmcpKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgYXJnID0gVG1wKGxvY2soZmlsbChhcmcudG1wKCksIHJvbGUp
KSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAvLyBEZWFsIHdpdGggZXZlcnlvbmUgZWxz
ZS4KKyAgICAgICAgaW5zdC5mb3JFYWNoQXJnKAorICAgICAgICAgICAgWyZdIChBcmcmIGFyZywg
QXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSBhcmdUeXBlLCBBcmc6OldpZHRoIHdpZHRoKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGFyZ1R5cGUgIT0gdHlwZSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgICAgIGlmICghQXJnOjppc0xhdGVEZWYocm9sZSkpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBpZiAoIWFyZy5pc1RtcCgp
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgaWYgKGFyZy5p
c1JlZygpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgICAgICBS
ZWcgcmVnID0gZmlsbChhcmcudG1wKCksIHJvbGUsIERvbnRTcGlsbCk7CisgICAgICAgICAgICAg
ICAgaWYgKHJlZykgeworICAgICAgICAgICAgICAgICAgICBhcmcgPSBUbXAocmVnKTsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHNsb3QgPSBzcGlsbFNsb3QoYXJnLnRtcCgp
KTsKKyAgICAgICAgICAgICAgICBlbnN1cmVXaWR0aChzbG90LCB3aWR0aCk7CisgICAgICAgICAg
ICAgICAgYXJnID0gQXJnOjpzdGFjayhzbG90KTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAg
IC8vIEFwcGx5IHRoZSBsYXRlIGRlYXRocy4KKyAgICAgICAgZm9yIChEZWF0aCYgZGVhdGggOiBt
X2RlYXRocy5hdChtX2Jsb2NrLCBtX2luc3RJbmRleCkpIHsKKyAgICAgICAgICAgIGlmIChkZWF0
aC5kZWF0aE1vZGUgPT0gTGF0ZURlYXRoKQorICAgICAgICAgICAgICAgIGtpbGwoZGVhdGgudG1w
KTsKKyAgICAgICAgfQorCisgICAgICAgIGVtaXRTaHVmZmxlKG1faW5zdEluZGV4KTsKKyAgICAg
ICAgdW5sb2NrQWxsKCk7CisgICAgfQorCisgICAgdm9pZCBib290QmxvY2soQmFzaWNCbG9jayog
YmxvY2spCisgICAgeworICAgICAgICBTdGF0ZSYgZHN0U3RhdGUgPSBtX2F0SGVhZFtibG9ja107
CisKKyAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IGRzdFN0YXRlLm1hcHBpbmcpIHsKKyAgICAg
ICAgICAgIFRtcEluZm8mIHNyY0luZm8gPSBnZXRJbmZvKGVudHJ5LmtleSk7CisgICAgICAgICAg
ICBUbXBJbmZvJiBkc3RJbmZvID0gZW50cnkudmFsdWU7CisgICAgICAgICAgICBkc3RJbmZvLnJl
ZyA9IHNyY0luZm8ucmVnOworICAgICAgICAgICAgZHN0SW5mby5oYXNTcGlsbCA9IHNyY0luZm8u
aGFzU3BpbGw7CisgICAgICAgICAgICBpZiAoc3JjSW5mby5yZWcpCisgICAgICAgICAgICAgICAg
ZHN0U3RhdGUucmV2ZXJzZU1hcHBpbmdbc3JjSW5mby5yZWddLnRtcCA9IGVudHJ5LmtleTsKKyAg
ICAgICAgfQorCisgICAgICAgIGRzdFN0YXRlLmlzU2V0dGxlZCA9IHRydWU7CisgICAgfQorCisg
ICAgdm9pZCBjb25mb3JtVG8oQmFzaWNCbG9jayogYmxvY2spCisgICAgeworICAgICAgICBSRUxF
QVNFX0FTU0VSVChtX2Jsb2NrLT5sYXN0KCkub3Bjb2RlID09IEp1bXApOworICAgICAgICAKKyAg
ICAgICAgU3RhdGUmIGRzdFN0YXRlID0gbV9hdEhlYWRbYmxvY2tdOworICAgICAgICBSRUxFQVNF
X0FTU0VSVChkc3RTdGF0ZS5pc1NldHRsZWQpOworCisgICAgICAgIGZvciAoYXV0byYgZW50cnkg
OiBkc3RTdGF0ZS5tYXBwaW5nKSB7CisgICAgICAgICAgICBUbXBJbmZvJiBzcmNJbmZvID0gZ2V0
SW5mbyhlbnRyeS5rZXkpOworICAgICAgICAgICAgVG1wSW5mbyYgZHN0SW5mbyA9IGVudHJ5LnZh
bHVlOworCisgICAgICAgICAgICBpZiAoZHN0SW5mby5yZWcgJiYgZHN0SW5mby5yZWcgIT0gc3Jj
SW5mby5yZWcpIHsKKyAgICAgICAgICAgICAgICBTaHVmZmxlUGFpciBwYWlyOworICAgICAgICAg
ICAgICAgIGlmIChzcmNJbmZvLnJlZykgeworICAgICAgICAgICAgICAgICAgICBwYWlyID0gU2h1
ZmZsZVBhaXIoCisgICAgICAgICAgICAgICAgICAgICAgICBUbXAoc3JjSW5mby5yZWcpLCBUbXAo
ZHN0SW5mby5yZWcpLCBtX3RtcFdpZHRoLndpZHRoKGVudHJ5LmtleSkpOworICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoc3JjSW5mby5oYXNDb25zdGFudCkgeworICAgICAgICAgICAgICAgICAg
ICBwYWlyID0gU2h1ZmZsZVBhaXIoCisgICAgICAgICAgICAgICAgICAgICAgICBBcmc6OmltbTY0
KHNyY0luZm8uY29uc3RhbnQpLCBUbXAoZHN0SW5mby5yZWcpLCBtX3RtcFdpZHRoLndpZHRoKGVu
dHJ5LmtleSkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHNyY0luZm8uaGFzU3BpbGwpOworICAgICAgICAgICAgICAgICAgICBT
dGFja1Nsb3QqIHNsb3QgPSBzcGlsbFNsb3QoZW50cnkua2V5KTsKKyAgICAgICAgICAgICAgICAg
ICAgcGFpciA9IFNodWZmbGVQYWlyKEFyZzo6c3RhY2soc2xvdCksIFRtcChkc3RJbmZvLnJlZyks
IHdpZHRoKHNsb3QpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbV9zaHVm
ZmxlUGFpcnMuYXBwZW5kKHBhaXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
ZHN0SW5mby5oYXNTcGlsbCAmJiAhc3JjSW5mby5oYXNTcGlsbCkgeworICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHNyY0luZm8ucmVnKTsKKyAgICAgICAgICAgICAgICBTdGFja1Nsb3Qq
IHNsb3QgPSBzcGlsbFNsb3QoZW50cnkua2V5KTsKKyAgICAgICAgICAgICAgICBtX3NodWZmbGVQ
YWlycy5hcHBlbmQoU2h1ZmZsZVBhaXIoVG1wKHNyY0luZm8ucmVnKSwgQXJnOjpzdGFjayhzbG90
KSwgd2lkdGgoc2xvdCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGVt
aXRTaHVmZmxlKG1fYmxvY2stPnNpemUoKSAtIDEpOworICAgIH0KKworICAgIFRtcEluZm8mIGdl
dEluZm8oVG1wIHRtcCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3N0YXRlLm1hcHBpbmcuYWRk
KHRtcCwgVG1wSW5mbygpKS5pdGVyYXRvci0+dmFsdWU7CisgICAgfQorCisgICAgZW51bSBGaWxs
RWZmb3J0IHsKKyAgICAgICAgTXVzdEZpbGwsCisgICAgICAgIERvbnRTcGlsbAorICAgIH07CisK
KyAgICBSZWcgZmlsbChUbXAgdG1wLCBBcmc6OlJvbGUgcm9sZSwgRmlsbEVmZm9ydCBmaWxsRWZm
b3J0ID0gTXVzdEZpbGwpCisgICAgeworICAgICAgICBpZiAocm9sZSA9PSBBcmc6OlVzZURlZiB8
fCBBcmc6OmlzRWFybHlEZWYocm9sZSkpIHsKKyAgICAgICAgICAgIEluc3QmIGluc3QgPSBtX2Js
b2NrLT5hdChtX2luc3RJbmRleCk7CisgICAgICAgICAgICByZXR1cm4gZmlsbCgKKyAgICAgICAg
ICAgICAgICB0bXAsIHJvbGUsIGZpbGxFZmZvcnQsCisgICAgICAgICAgICAgICAgWyZdIChSZWcg
Y2FuZGlkYXRlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVXNlRGVmIGFuZCBl
YXJseSBEZWYgcmVxdWlyZXMgdXMgdG8gbG9vayBhaGVhZCBhbmQgc2VlIGlmIHRoZSBjYW5kaWRh
dGUKKyAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgaXMgYWNjZXB0YWJsZSB0byB0aGUg
bGF0ZSBkZWZzLCBsYXRlIHVzZXMsIGFuZCBsYXRlIGNsb2JiZXJzLiBBbiBlYXN5CisgICAgICAg
ICAgICAgICAgICAgIC8vIHdheSB0byBkbyB0aGlzIGlzIGp1c3QgdG8gc2VlIGlmIHRoZSByZWdp
c3RlciBhcHBlYXJzIGFueXdoZXJlIGluIHRoZSBhcmd1bWVudAorICAgICAgICAgICAgICAgICAg
ICAvLyBsaXN0LiBOb3RlIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBjb25zaWRlciBub24tVG1wIEFy
Z3MsIGJlY2F1c2UgdGhvc2Ugd291bGQKKyAgICAgICAgICAgICAgICAgICAgLy8gYWxsIGhhdmUg
ZWFybHkgdXNlcy4KKyAgICAgICAgICAgICAgICAgICAgZm9yIChBcmcmIGFyZyA6IGluc3QuYXJn
cykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZy5pc1JlZygpICYmIGFyZy5yZWco
KSA9PSBjYW5kaWRhdGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gT2YgY291
cnNlLCB0aGVyZSBpcyB0aGUgYW5ub3lpbmcgUGF0Y2ggaW5zdHJ1Y3Rpb24gYW5kIGl0cyBjbG9i
YmVyZWQKKyAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXJzLgorICAgICAgICAgICAgICAg
ICAgICBpZiAoaW5zdC5vcGNvZGUgPT0gUGF0Y2ggJiYgaW5zdC5leHRyYUNsb2JiZXJlZFJlZ3Mo
KS5nZXQoY2FuZGlkYXRlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmaWxsKHRtcCwgcm9sZSwgZmlsbEVmZm9ydCwg
W10gKFJlZykgLT4gYm9vbCB7IHJldHVybiB0cnVlOyB9KTsKKyAgICB9CisgICAgCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBSZWcgZmlsbChUbXAgdG1wLCBBcmc6OlJvbGUg
cm9sZSwgRmlsbEVmZm9ydCBmaWxsRWZmb3J0LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAg
IHsKKyAgICAgICAgVG1wSW5mbyYgaW5mbyA9IGdldEluZm8odG1wKTsKKworICAgICAgICBpZiAo
QXJnOjppc0FueURlZihyb2xlKSkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWluZm8u
aGFzU3BpbGwpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWluZm8uaGFzQ29uc3RhbnQp
OworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWluZm8ucmVnKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgaWYgKGluZm8ucmVnKSB7CisgICAgICAgICAgICBpZiAodG1wLmlzUmVn
KCkpCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQodG1wLnJlZygpID09IGluZm8ucmVn
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIGluZm8ucmVnOworICAgICAgICB9
CisKKyAgICAgICAgUmVnIHJlZyA9IHRtcC5yZWcoKTsKKyAgICAgICAgaWYgKCFyZWcpIHsKKyAg
ICAgICAgICAgIGZvciAoUmVnIGNhbmRpZGF0ZSA6IHJlZ3NJblByaW9yaXR5T3JkZXIodHlwZSkp
IHsKKyAgICAgICAgICAgICAgICBSZWdJbmZvJiByZWdJbmZvID0gbV9zdGF0ZS5yZXZlcnNlTWFw
cGluZ1tjYW5kaWRhdGVdOworICAgICAgICAgICAgICAgIGlmIChyZWdJbmZvLmlzTG9ja2VkIHx8
IHJlZ0luZm8udG1wIHx8ICFmdW5jdG9yKGNhbmRpZGF0ZSkpCisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIHJlZyA9IGNhbmRpZGF0ZTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFyZWcpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoZmlsbEVmZm9ydCA9PSBEb250U3BpbGwpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBSZWcoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAv
LyBOZWVkIHRvIHNwaWxsIHNvbWV0aGluZy4gU3BpbGwgdGhlIHJlZyB0aGF0IGhvbGRzIHRoZSB0
bXAgdGhhdCBoYXMgdGhlIGxlYXN0IHdhcm0KKyAgICAgICAgICAgICAgICAvLyB1c2VzLgorICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIG1pbldhcm1Vc2VzID0gVUlOVF9NQVg7CisgICAgICAgICAg
ICAgICAgZm9yIChSZWcgY2FuZGlkYXRlIDogcmVnc0luUHJpb3JpdHlPcmRlcih0eXBlKSkgewor
ICAgICAgICAgICAgICAgICAgICBSZWdJbmZvJiByZWdJbmZvID0gbV9zdGF0ZS5yZXZlcnNlTWFw
cGluZ1tjYW5kaWRhdGVdOworICAgICAgICAgICAgICAgICAgICBpZiAocmVnSW5mby5pc0xvY2tl
ZCB8fCAhZnVuY3RvcihjYW5kaWRhdGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bVdhcm1Vc2VzID0gbV91c2VDb3Vu
dHNbcmVnSW5mby50bXBdLm51bVdhcm1Vc2VzOworICAgICAgICAgICAgICAgICAgICBpZiAobnVt
V2FybVVzZXMgPCBtaW5XYXJtVXNlcykgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVnID0g
Y2FuZGlkYXRlOworICAgICAgICAgICAgICAgICAgICAgICAgbWluV2FybVVzZXMgPSBudW1XYXJt
VXNlczsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIGlmICghcmVnKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVnKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBzcGlsbChyZWcpOworICAgICAgICBp
ZiAoQXJnOjppc0FueVVzZShyb2xlKSAmJiByb2xlICE9IEFyZzo6U2NyYXRjaCkgeworICAgICAg
ICAgICAgU3RhY2tTbG90KiBzbG90ID0gc3BpbGxTbG90KHRtcCk7CisgICAgICAgICAgICBpZiAo
aW5mby5oYXNDb25zdGFudCkgeworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHR5cGUg
PT0gQXJnOjpHUCk7CisgICAgICAgICAgICAgICAgYWRkTW92ZShTaHVmZmxlUGFpcihBcmc6Omlt
bTY0KGluZm8uY29uc3RhbnQpLCBUbXAocmVnKSwgd2lkdGgoc2xvdCkpKTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5mby5oYXNTcGlsbCk7
CisgICAgICAgICAgICAgICAgYWRkTW92ZShTaHVmZmxlUGFpcihBcmc6OnN0YWNrKHNsb3QpLCBU
bXAocmVnKSwgd2lkdGgoc2xvdCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICBtX3N0YXRlLnJldmVyc2VNYXBwaW5nW3JlZ10udG1wID0gdG1wOworICAgICAgICBpbmZvLnJl
ZyA9IHJlZzsKKyAgICAgICAgcmV0dXJuIHJlZzsKKyAgICB9CisKKyAgICB2b2lkIHNwaWxsKFJl
ZyByZWcpCisgICAgeworICAgICAgICBSZWdJbmZvJiByZWdJbmZvID0gbV9zdGF0ZS5yZXZlcnNl
TWFwcGluZ1tyZWddOworICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVnSW5mby5pc0xvY2tlZCk7
CisgICAgICAgIGlmICghcmVnSW5mby50bXApCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IAorICAgICAgICBUbXBJbmZvJiB0bXBJbmZvID0gZ2V0SW5mbyhyZWdJbmZvLnRtcCk7CisKKyAg
ICAgICAgaWYgKCF0bXBJbmZvLmhhc1NwaWxsKSB7CisgICAgICAgICAgICBTdGFja1Nsb3QqIHNs
b3QgPSBzcGlsbFNsb3QocmVnSW5mby50bXApOworICAgICAgICAgICAgYWRkTW92ZShTaHVmZmxl
UGFpcihUbXAocmVnKSwgQXJnOjpzdGFjayhzbG90KSwgd2lkdGgoc2xvdCkpKTsKKyAgICAgICAg
ICAgIHRtcEluZm8uaGFzU3BpbGwgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIHJlZ0luZm8u
dG1wID0gVG1wKCk7CisgICAgICAgIHRtcEluZm8ucmVnID0gUmVnKCk7CisgICAgfQorCisgICAg
dm9pZCBraWxsKFRtcCB0bXApCisgICAgeworICAgICAgICBUbXBJbmZvJiB0bXBJbmZvID0gZ2V0
SW5mbyh0bXApOworICAgICAgICB0bXBJbmZvLmhhc0NvbnN0YW50ID0gZmFsc2U7CisgICAgICAg
IHRtcEluZm8uaGFzU3BpbGwgPSBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGlmICghdG1wSW5m
by5yZWcpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBSZWdJbmZvJiBy
ZWdJbmZvID0gbV9zdGF0ZS5yZXZlcnNlTWFwcGluZ1t0bXBJbmZvLnJlZ107CisgICAgICAgIHRt
cEluZm8ucmVnID0gUmVnKCk7CisgICAgICAgIHJlZ0luZm8udG1wID0gVG1wKCk7CisgICAgfQor
CisgICAgUmVnIGxvY2soUmVnIHJlZykKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJl
Zyk7CisgICAgICAgIGJvb2wmIGlzTG9ja2VkID0gbV9zdGF0ZS5yZXZlcnNlTWFwcGluZ1tyZWdd
LmlzTG9ja2VkOworICAgICAgICBpZiAoIWlzTG9ja2VkKSB7CisgICAgICAgICAgICBpc0xvY2tl
ZCA9IHRydWU7CisgICAgICAgICAgICBtX2xvY2tlZC5hcHBlbmQocmVnKTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gcmVnOworICAgIH0KKworICAgIHZvaWQgdW5sb2NrKFJlZyByZWcpCisg
ICAgeworICAgICAgICBtX3N0YXRlLnJldmVyc2VNYXBwaW5nW3JlZ10uaXNMb2NrZWQgPSBmYWxz
ZTsKKyAgICB9CisKKyAgICB2b2lkIHVubG9ja0FsbCgpCisgICAgeworICAgICAgICBmb3IgKFJl
ZyByZWcgOiBtX2xvY2tlZCkKKyAgICAgICAgICAgIHVubG9jayhyZWcpOworICAgICAgICBtX2xv
Y2tlZC5yZXNpemUoMCk7CisgICAgfQorCisgICAgdm9pZCBhZGRNb3ZlKGNvbnN0IFNodWZmbGVQ
YWlyJiBwYWlyKQorICAgIHsKKyAgICAgICAgbV9zaHVmZmxlUGFpcnMucmVtb3ZlQWxsTWF0Y2hp
bmcoCisgICAgICAgICAgICBbJl0gKGNvbnN0IFNodWZmbGVQYWlyJiBvdGhlclBhaXIpIC0+IGJv
b2wgeworICAgICAgICAgICAgICAgIHJldHVybiBvdGhlclBhaXIuZHN0KCkgPT0gcGFpci5kc3Qo
KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICBmb3IgKFNodWZmbGVQYWlyJiBvdGhlclBhaXIg
OiBtX3NodWZmbGVQYWlycykgeworICAgICAgICAgICAgaWYgKG90aGVyUGFpci5kc3QoKSA9PSBw
YWlyLnNyYygpKSB7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQob3RoZXJQYWlyLndp
ZHRoKCkgPT0gcGFpci53aWR0aCgpKTsKKyAgICAgICAgICAgICAgICBtX3NodWZmbGVQYWlycy5h
cHBlbmQoU2h1ZmZsZVBhaXIob3RoZXJQYWlyLnNyYygpLCBwYWlyLmRzdCgpLCBwYWlyLndpZHRo
KCkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgbV9zaHVmZmxlUGFpcnMuYXBwZW5kKHBhaXIpOworICAgIH0KKworICAgIHZvaWQg
ZW1pdFNodWZmbGUodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBtX2luc2VydGlvblNl
dC5pbnNlcnQoaW5kZXgsIGNyZWF0ZVNodWZmbGUobV9ibG9jay0+YXQobV9pbnN0SW5kZXgpLm9y
aWdpbiwgbV9zaHVmZmxlUGFpcnMpKTsKKyAgICAgICAgbV9zaHVmZmxlUGFpcnMucmVzaXplKDAp
OworICAgIH0KKworICAgIEFyZzo6V2lkdGggd2lkdGgoU3RhY2tTbG90KiBzbG90KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEFyZzo6d2lkdGhGb3JCeXRlcyhzbG90LT5ieXRlU2l6ZSgpKTsKKyAg
ICB9CisKKyAgICAvLyBXZSBtYXkgY2hvb3NlIHRvIGRvIGEgZnVsbHdpZHRoIGRlZiBvciB1c2Ug
b24gYSBzdWJ3aWR0aCBzcGlsbCBzbG90LiBXaGVuIHRoaXMgaGFwcGVucywgd2UKKyAgICAvLyBu
ZWVkIHRvIGluY3JlYXNlIHRoZSB3aWR0aCBvZiB0aGUgc2xvdC4gTm90ZSB0aGF0IHdlIHJlbHkg
b24gc3BpbGwgc2xvdHMgaGF2aW5nIFpEZWYKKyAgICAvLyBzZW1hbnRpY3MuCisgICAgdm9pZCBl
bnN1cmVXaWR0aChTdGFja1Nsb3QqIHNsb3QsIEFyZzo6V2lkdGggd2lkdGgpCisgICAgeworICAg
ICAgICBzbG90LT5lbnN1cmVTaXplKEFyZzo6Ynl0ZXMod2lkdGgpKTsKKyAgICB9CisgICAgCisg
ICAgU3RhY2tTbG90KiBzcGlsbFNsb3QoVG1wIHRtcCkKKyAgICB7CisgICAgICAgIFN0YWNrU2xv
dComIHJlc3VsdCA9IG1fc3BpbGxTbG90cy5hZGQodG1wLCBudWxscHRyKS5pdGVyYXRvci0+dmFs
dWU7CisgICAgICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgICAgICByZXN1bHQgPSBtX2NvZGUu
YWRkU3RhY2tTbG90KAorICAgICAgICAgICAgICAgIG1fdG1wV2lkdGgud2lkdGgodG1wKSA8PSBB
cmc6OldpZHRoMzIgPyA0IDogOCwKKyAgICAgICAgICAgICAgICBTdGFja1Nsb3RLaW5kOjpBbm9u
eW1vdXMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgY2xhc3MgUmVnTWFwIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIFJlZ01hcCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZSkg
eworICAgICAgICAgICAgY2FzZSBBcmc6OkdQOgorICAgICAgICAgICAgICAgIG1fdmVjdG9yLmZp
bGwoVCgpLCBNYWNyb0Fzc2VtYmxlcjo6bnVtYmVyT2ZSZWdpc3RlcnMoKSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFyZzo6RlA6CisgICAgICAgICAgICAgICAg
bV92ZWN0b3IuZmlsbChUKCksIE1hY3JvQXNzZW1ibGVyOjpudW1iZXJPZkZQUmVnaXN0ZXJzKCkp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgVCYgb3BlcmF0b3JbXShSZWcgcmVnKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0
Y2ggKHR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgQXJnOjpHUDoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbV92ZWN0b3JbTWFjcm9Bc3NlbWJsZXI6OnJlZ2lzdGVySW5kZXgocmVnLmdwcigpKV07
CisgICAgICAgICAgICBjYXNlIEFyZzo6RlA6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fdmVj
dG9yW01hY3JvQXNzZW1ibGVyOjpyZWdpc3RlckluZGV4KHJlZy5mcHIoKSldOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIFZlY3RvcjxU
PiBtX3ZlY3RvcjsKKyAgICB9OworCisgICAgc3RydWN0IFN0YXRlIHsKKyAgICAgICAgSGFzaE1h
cDxUbXAsIFRtcEluZm8+IG1hcHBpbmc7IC8vIElmIHRoZSBvcmlnaW5hbCBwcm9ncmFtIGFza3Mg
Zm9yIHRoaXMgdG1wLCB3aGVyZSBpcyBpdD8KKyAgICAgICAgUmVnTWFwPFJlZ0luZm8+IHJldmVy
c2VNYXBwaW5nOyAvLyBXaGF0IHRtcCBkb2VzIHRoaXMgcmVnaXN0ZXIgaG9sZCByaWdodCBub3c/
CisgICAgICAgIGJvb2wgdmlzaXRlZEJ5UHJvcGFnYXRpb24geyBmYWxzZSB9OworICAgICAgICBi
b29sIGlzU2V0dGxlZCB7IGZhbHNlIH07CisgICAgfTsKKworICAgIGVudW0gRGVhdGhNb2RlIHsK
KyAgICAgICAgRWFybHlEZWF0aCwKKyAgICAgICAgTGF0ZURlYXRoCisgICAgfTsKKworICAgIHN0
cnVjdCBEZWF0aCB7CisgICAgICAgIERlYXRoKCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAg
ICAgICAgRGVhdGgoVG1wIHRtcCwgRGVhdGhNb2RlIGRlYXRoTW9kZSkKKyAgICAgICAgICAgIDog
dG1wKHRtcCkKKyAgICAgICAgICAgICwgZGVhdGhNb2RlKGRlYXRoTW9kZSkKKyAgICAgICAgewor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBUbXAgdG1wOworICAgICAgICBEZWF0aE1vZGUg
ZGVhdGhNb2RlIHsgRWFybHlEZWF0aCB9OworICAgIH07CisgICAgCisgICAgQ29kZSYgbV9jb2Rl
OworICAgIFRtcExpdmVuZXNzPHR5cGU+IG1fbGl2ZW5lc3M7CisgICAgSW5zdE1hcDxWZWN0b3I8
RGVhdGg+PiBtX2RlYXRoczsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBTdGF0ZT4gbV9hdEhl
YWQ7CisgICAgU3RhdGUgbV9zdGF0ZTsKKyAgICBWZWN0b3I8UmVnPiBtX2xvY2tlZDsKKyAgICBV
c2VDb3VudHM8VG1wPiBtX3VzZUNvdW50czsKKyAgICBUbXBXaWR0aCBtX3RtcFdpZHRoOworICAg
IEhhc2hNYXA8VG1wLCBTdGFja1Nsb3QqPiBtX3NwaWxsU2xvdHM7CisgICAgQmFzaWNCbG9jayog
bV9ibG9jayB7IG51bGxwdHIgfTsKKyAgICB1bnNpZ25lZCBtX2luc3RJbmRleCB7IDAgfTsKKyAg
ICBWZWN0b3I8U2h1ZmZsZVBhaXI+IG1fc2h1ZmZsZVBhaXJzOworICAgIEluc2VydGlvblNldCBt
X2luc2VydGlvblNldDsKKyAgICBib29sIG1fY2hhbmdlZCB7IGZhbHNlIH07Cit9OworCit9IC8v
IGFub255bW91cyBuYW1lc3BhY2UKKwordm9pZCBzY2F2ZW5nZVJlZ2lzdGVycyhDb2RlJiBjb2Rl
KQoreworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAic2NhdmVuZ2VSZWdpc3RlcnMi
KTsKKworICAgIGJyZWFrQ3JpdGljYWxFZGdlcyhjb2RlKTsKKworICAgIHsKKyAgICAgICAgU2Nh
dmVuZ2VSZWdpc3RlcnM8QXJnOjpGUD4gc2NhdmVuZ2VSZWdpc3RlcnMoY29kZSk7CisgICAgICAg
IHNjYXZlbmdlUmVnaXN0ZXJzLnJ1bigpOworICAgIH0KKyAgICB7CisgICAgICAgIFNjYXZlbmdl
UmVnaXN0ZXJzPEFyZzo6R1A+IHNjYXZlbmdlUmVnaXN0ZXJzKGNvZGUpOworICAgICAgICBzY2F2
ZW5nZVJlZ2lzdGVycy5ydW4oKTsKKyAgICB9Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyU2NhdmVuZ2VSZWdpc3RlcnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNjYXZlbmdlUmVnaXN0ZXJzLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNjYXZlbmdlUmVnaXN0
ZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQWlyU2NhdmVuZ2VSZWdpc3RlcnNf
aAorI2RlZmluZSBBaXJTY2F2ZW5nZVJlZ2lzdGVyc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNz
IENvZGU7CisKKy8vIFRoaXMgYWxsb2NhdGVzIHRlbXBvcmFyaWVzIHRvIHJlZ2lzdGVycyBvciBz
dGFjayBsb2NhdGlvbnMgYmFzZWQgb24gZm9yd2FyZCBmbG93LiBJdCB3aWxsIGhhcHBpbHkKKy8v
IGNoYW5nZSB0aGUgbG9jYXRpb24gb2YgYSB0ZW1wb3JhcnkgaW4gY2FzZSB0aGUgcmVnaXN0ZXIg
aXQgaGFkIHBpY2tlZCBiZWNvbWVzIHVuYXZhaWxhYmxlIG9yIGluCisvLyBjYXNlIHdlIG5lZWQg
dGhlIHZhbHVlIGFuZCBpdCdzIGN1cnJlbnRseSBvbiB0aGUgc3RhY2suIEl0IGFsc28gcGVyZm9y
bXMgbWF0ZXJpYWxpemF0aW9uIG9mCisvLyBjb25zdGFudHM6IGlmIGEgdGVtcG9yYXJ5J3MgdmFs
dWUgaXMgYWx3YXlzIGEgY29uc3RhbnQgdGhlbiBpbnN0ZWFkIG9mIHNwaWxsaW5nIHdlIHdpbGwg
c2ltcGx5CisvLyByZW1hdGVyaWFsaXplLgorLy8KKy8vIFRoaXMgcGhhc2UgaXMgbWVhbnQgdG8g
cnVuIGFmdGVyIHRoZSBwcmltYXJ5IHJlZ2lzdGVyIGFsbG9jYXRvci4gVGhlIHByaW1hcnkgcmVn
aXN0ZXIgYWxsb2NhdG9yCisvLyBpcyBiZXN0IG9mZiBoYW5kbGluZyBzcGlsbHMgYnkgc2ltcGx5
IGxlYXZpbmcgc3BpbGxlZCBUbXBzIGFsb25lLiBUaGlzIHBoYXNlIHdpbGwgZW1pdCBwcm9wZXIK
Ky8vIHNwaWxsIGNvZGUsIGFuZCBpdCB3aWxsIGRvIGl0IG1vcmUgZWZmaWNpZW50bHkgdGhhbiBj
bGFzc2ljYWwgc3BpbGxpbmcgYWxnb3JpdGhtcy4KK3ZvaWQgc2NhdmVuZ2VSZWdpc3RlcnMoQ29k
ZSYpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyU2NhdmVuZ2VSZWdpc3RlcnNfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcu
Y3BwCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clNwaWxsRXZlcnl0aGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYgQEAKICNp
ZiBFTkFCTEUoQjNfSklUKQogCiAjaW5jbHVkZSAiQWlyQ29kZS5oIgotI2luY2x1ZGUgIkFpckZp
eFNwaWxsU2xvdFpEZWYuaCIKICNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIKICNpbmNsdWRl
ICJBaXJJbnN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgiCkBAIC04NCw3ICs4
Myw2IEBAIHZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUmIGNvZGUpCiAKICAgICAvLyBBbGxvY2F0
ZSBhIHN0YWNrIHNsb3QgZm9yIGVhY2ggdG1wLgogICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBhbGxT
dGFja1Nsb3RzW0FyZzo6bnVtVHlwZXNdOwotICAgIHVuc2lnbmVkIG5ld1N0YWNrU2xvdFRocmVz
aG9sZCA9IGNvZGUuc3RhY2tTbG90cygpLnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIHR5cGVJ
bmRleCA9IDA7IHR5cGVJbmRleCA8IEFyZzo6bnVtVHlwZXM7ICsrdHlwZUluZGV4KSB7CiAgICAg
ICAgIFZlY3RvcjxTdGFja1Nsb3QqPiYgc3RhY2tTbG90cyA9IGFsbFN0YWNrU2xvdHNbdHlwZUlu
ZGV4XTsKICAgICAgICAgQXJnOjpUeXBlIHR5cGUgPSBzdGF0aWNfY2FzdDxBcmc6OlR5cGU+KHR5
cGVJbmRleCk7CkBAIC0xMzAsNyArMTI4LDYgQEAgdm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYg
Y29kZSkKICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChyb2xlKSB7CiAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgQXJnOjpVc2U6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpDb2xk
VXNlOgotICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6RWFybHlEZWY6CiAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiByZWdzSW5Qcmlvcml0eU9yZGVyKHR5cGUpKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZXRCZWZvcmUuZ2V0KHJlZykpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QmVmb3JlLnNldChyZWcpOwpAQCAt
MTU0LDYgKzE1MSw3IEBAIHZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUmIGNvZGUpCiAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgQXJnOjpMYXRlVXNlOgogICAgICAgICAgICAgICAgICAgICBjYXNl
IEFyZzo6TGF0ZUNvbGRVc2U6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpTY3JhdGNo
OgorICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6RWFybHlEZWY6CiAgICAgICAgICAgICAg
ICAgICAgICAgICBmb3IgKFJlZyByZWcgOiByZWdzSW5Qcmlvcml0eU9yZGVyKHR5cGUpKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZXRCZWZvcmUuZ2V0KHJlZykgJiYgIXNl
dEFmdGVyLmdldChyZWcpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFm
dGVyLnNldChyZWcpOwpAQCAtMTgyLDEyICsxODAsNiBAQCB2b2lkIHNwaWxsRXZlcnl0aGluZyhD
b2RlJiBjb2RlKQogICAgICAgICB9CiAgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKGJsb2Nr
KTsKICAgICB9Ci0KLSAgICBmaXhTcGlsbFNsb3RaRGVmKAotICAgICAgICBjb2RlLAotICAgICAg
ICBbJl0gKFN0YWNrU2xvdCogc3RhY2tTbG90KSAtPiBib29sIHsKLSAgICAgICAgICAgIHJldHVy
biBzdGFja1Nsb3QtPmluZGV4KCkgPj0gbmV3U3RhY2tTbG90VGhyZXNob2xkOwotICAgICAgICB9
KTsKIH0KIAogfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdC5oCShyZXZpc2lvbiAxOTUxNzYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00OCw2ICs0OCwxMiBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0xvY2tlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fa2luZCA9PSBTdGFja1Nsb3RLaW5kOjpMb2NrZWQ7IH0KICAgICB1bnNpZ25l
ZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KIAorICAgIHZvaWQgZW5zdXJlU2l6
ZSh1bnNpZ25lZCByZXF1ZXN0ZWRTaXplKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX29mZnNl
dEZyb21GUCk7CisgICAgICAgIG1fYnl0ZVNpemUgPSBzdGQ6Om1heChtX2J5dGVTaXplLCByZXF1
ZXN0ZWRTaXplKTsKKyAgICB9CisKICAgICB1bnNpZ25lZCBhbGlnbm1lbnQoKSBjb25zdAogICAg
IHsKICAgICAgICAgaWYgKGJ5dGVTaXplKCkgPD0gMSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODIsNiArODIsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBWQUxJREFURShp
c1Rlcm1pbmFsKGluc3Qub3Bjb2RlKSwgKCJBdCAiLCBpbnN0LCAiIGluICIsICpibG9jaykpOwog
ICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoIWlzVGVy
bWluYWwoaW5zdC5vcGNvZGUpLCAoIkF0ICIsIGluc3QsICIgaW4gIiwgKmJsb2NrKSk7CisKKyAg
ICAgICAgICAgICAgICAvLyBmb3JFYWNoQXJnIG11c3QgcmV0dXJuIEFyZyYncyB0aGF0IHBvaW50
IGludG8gdGhlIGFyZ3MgYXJyYXkuCisgICAgICAgICAgICAgICAgaW5zdC5mb3JFYWNoQXJnKAor
ICAgICAgICAgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUsIEFyZzo6VHlwZSwg
QXJnOjpXaWR0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoJmFyZyA+PSAm
aW5zdC5hcmdzWzBdLCAoIkF0ICIsIGFyZywgIiBpbiAiLCBpbnN0LCAiIGluICIsICpibG9jaykp
OworICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoJmFyZyA8PSAmaW5zdC5hcmdzLmxh
c3QoKSwgKCJBdCAiLCBhcmcsICIgaW4gIiwgaW5zdCwgIiBpbiAiLCAqYmxvY2spKTsKKyAgICAg
ICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3IgKEJhc2lj
QmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JCbG9ja3MoKSkKICAgICAgICAgICAg
ICAgICBWQUxJREFURSh2YWxpZEJsb2Nrcy5jb250YWlucyhzdWNjZXNzb3IpLCAoIkluICIsICpi
bG9jaykpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269183</attachid>
            <date>2016-01-16 17:25:55 -0800</date>
            <delta_ts>2016-01-16 19:38:12 -0800</delta_ts>
            <desc>IRC appears to work</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>93380</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTUxNzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzc5LDcgKzM3OSw2IEBACiAJCTBGNDkzQUZBMTZEMENB
RDMwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ5M0FGODE2RDBDQUQxMDA4NDUwOEIgLyogU291cmNl
UHJvdmlkZXIuY3BwICovOyB9OwogCQkwRjRCOTREQzE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRB
cnJheUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNEI5NERCMTdCOUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNEM5MTY2MUMy
OUY0RjIwMDQzNDFBNiAvKiBCM09yaWdpbkR1bXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEM5MTY1MUMyOUY0RjIwMDQzNDFBNiAvKiBCM09yaWdp
bkR1bXAuaCAqLzsgfTsKLQkJMEY0QzkxNjgxQzJCM0Q2ODAwNDM0MUE2IC8qIEFpckZpeFNwaWxs
U2xvdFpEZWYuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNEM5MTY3MUMyQjNENjgwMDQzNDFBNiAvKiBBaXJGaXhTcGlsbFNsb3RaRGVmLmggKi87IH07
CiAJCTBGNEYyOURGMThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVz
dGltYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjRGMjlERDE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291
bnRFc3RpbWF0aW9uUGhhc2UuY3BwICovOyB9OwogCQkwRjRGMjlFMDE4QjZBRDFDMDA1N0JDMTUg
LyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEYyOURFMThCNkFEMUMwMDU3QkMx
NSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oICovOyB9OwogCQkw
RjUwQUYzQzE5M0U4QjM5MDA2NzRFRTggLyogREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjUwQUYzQjE5M0U4
QjM5MDA2NzRFRTggLyogREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmggKi87IH07CkBAIC03MjQs
NiArNzIzLDEyIEBACiAJCTBGRTIyOEVFMTQzNkFCMkMwMDE5NkM0OCAvKiBPcHRpb25zLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTIyOEVBMTQz
NkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmNwcCAqLzsgfTsKIAkJMEZFMjU0RjYxQUJEREQyMjAw
QTdDNkQyIC8qIERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFMjU0RjQxQUJEREQyMjAwQTdDNkQyIC8q
IERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwICovOyB9OwogCQkwRkUyNTRGNzFBQkRERDIy
MDBBN0M2RDIgLyogREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFMjU0RjUxQUJEREQyMjAwQTdDNkQyIC8q
IERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuaCAqLzsgfTsKKwkJMEZFMzRDMTExQzRCMTA5NjAw
MDNBNTEyIC8qIEFpckJsb2NrSW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTM0QzBCMUM0QjEwOTYwMDAzQTUxMiAvKiBBaXJC
bG9ja0luc2VydGlvblNldC5jcHAgKi87IH07CisJCTBGRTM0QzEyMUM0QjEwOTYwMDAzQTUxMiAv
KiBBaXJCbG9ja0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFMzRDMEMxQzRCMTA5NjAwMDNBNTEyIC8qIEFpckJsb2NrSW5zZXJ0
aW9uU2V0LmggKi87IH07CisJCTBGRTM0QzEzMUM0QjEwOTYwMDAzQTUxMiAvKiBBaXJCcmVha0Ny
aXRpY2FsRWRnZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFMzRDMEQxQzRCMTA5NjAwMDNBNTEyIC8qIEFpckJyZWFrQ3JpdGljYWxFZGdlcy5j
cHAgKi87IH07CisJCTBGRTM0QzE0MUM0QjEwOTYwMDAzQTUxMiAvKiBBaXJCcmVha0NyaXRpY2Fs
RWRnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RTM0QzBFMUM0QjEwOTYwMDAzQTUxMiAvKiBBaXJCcmVha0NyaXRpY2FsRWRnZXMuaCAqLzsgfTsK
KwkJMEZFMzRDMTUxQzRCMTA5NjAwMDNBNTEyIC8qIEFpclNjYXZlbmdlUmVnaXN0ZXJzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTM0QzBGMUM0
QjEwOTYwMDAzQTUxMiAvKiBBaXJTY2F2ZW5nZVJlZ2lzdGVycy5jcHAgKi87IH07CisJCTBGRTM0
QzE2MUM0QjEwOTYwMDAzQTUxMiAvKiBBaXJTY2F2ZW5nZVJlZ2lzdGVycy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFMzRDMTAxQzRCMTA5NjAwMDNB
NTEyIC8qIEFpclNjYXZlbmdlUmVnaXN0ZXJzLmggKi87IH07CiAJCTBGRTcyMTFEMTkzQjlDNTkw
MDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTcyMTFCMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0
aW9uLmNwcCAqLzsgfTsKIAkJMEZFNzIxMUUxOTNCOUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTcy
MTFDMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmggKi87IH07CiAJCTBGRTgzNDE3
MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU4MzQxNTFBNkVGOTdC
MDBEMDQ4NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwICovOyB9OwpAQCAtMjU0
Miw3ICsyNTQ3LDYgQEAKIAkJMEY0OTNBRjgxNkQwQ0FEMTAwODQ1MDhCIC8qIFNvdXJjZVByb3Zp
ZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvdXJjZVByb3Zp
ZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0Qjk0REIxN0I5RjA3NTAw
REQwM0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFR5cGVkQXJyYXlJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGNEM5MTY1MUMyOUY0RjIwMDQzNDFBNiAvKiBCM09yaWdpbkR1bXAuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gQjNPcmlnaW5EdW1wLmg7IHBhdGggPSBiMy9CM09yaWdpbkR1
bXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY0QzkxNjcxQzJCM0Q2ODAwNDM0
MUE2IC8qIEFpckZpeFNwaWxsU2xvdFpEZWYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQWlyRml4U3BpbGxTbG90WkRlZi5oOyBwYXRoID0gYjMvYWlyL0FpckZpeFNwaWxsU2xv
dFpEZWYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0RjI5REQxOEI2QUQxQzAw
NTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50
RXN0aW1hdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdTdGF0aWNFeGVjdXRpb25Db3VudEVz
dGltYXRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEYyOURF
MThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFz
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTdGF0aWNFeGVjdXRpb25D
b3VudEVzdGltYXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR1N0YXRpY0V4ZWN1dGlvbkNvdW50
RXN0aW1hdGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTBBRjNC
MTkzRThCMzkwMDY3NEVFOCAvKiBERkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmg7IHBhdGgg
PSBkZmcvREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0yOTAwLDYgKzI5MDQsMTIgQEAKIAkJMEZFMjI4RUIxNDM2QUIyMzAwMTk2QzQ4IC8q
IE9wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3B0aW9ucy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkUyNTRGNDFBQkRERDIyMDBBN0M2RDIgLyog
REZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdW
YXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZFMjU0RjUxQUJEREQyMjAwQTdDNkQyIC8qIERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFz
ZS5oOyBwYXRoID0gZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFMzRDMEIxQzRCMTA5NjAwMDNBNTEyIC8qIEFpckJsb2NrSW5z
ZXJ0aW9uU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckJs
b2NrSW5zZXJ0aW9uU2V0LmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJCbG9ja0luc2VydGlvblNldC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTM0QzBDMUM0QjEwOTYwMDAzQTUx
MiAvKiBBaXJCbG9ja0luc2VydGlvblNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBBaXJCbG9ja0luc2VydGlvblNldC5oOyBwYXRoID0gYjMvYWlyL0FpckJsb2NrSW5zZXJ0
aW9uU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTM0QzBEMUM0QjEwOTYw
MDAzQTUxMiAvKiBBaXJCcmVha0NyaXRpY2FsRWRnZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gQWlyQnJlYWtDcml0aWNhbEVkZ2VzLmNwcDsgcGF0aCA9IGIzL2Fp
ci9BaXJCcmVha0NyaXRpY2FsRWRnZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkUzNEMwRTFDNEIxMDk2MDAwM0E1MTIgLyogQWlyQnJlYWtDcml0aWNhbEVkZ2VzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckJyZWFrQ3JpdGljYWxFZGdlcy5oOyBw
YXRoID0gYjMvYWlyL0FpckJyZWFrQ3JpdGljYWxFZGdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkUzNEMwRjFDNEIxMDk2MDAwM0E1MTIgLyogQWlyU2NhdmVuZ2VSZWdpc3Rl
cnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyU2NhdmVuZ2VS
ZWdpc3RlcnMuY3BwOyBwYXRoID0gYjMvYWlyL0FpclNjYXZlbmdlUmVnaXN0ZXJzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFMzRDMTAxQzRCMTA5NjAwMDNBNTEyIC8qIEFp
clNjYXZlbmdlUmVnaXN0ZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFp
clNjYXZlbmdlUmVnaXN0ZXJzLmg7IHBhdGggPSBiMy9haXIvQWlyU2NhdmVuZ2VSZWdpc3RlcnMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFNzIxMUIxOTNCOUM1OTAwMzFGNkVE
IC8qIERGR1RyYW5zaXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gREZHVHJhbnNpdGlvbi5jcHA7IHBhdGggPSBkZmcvREZHVHJhbnNpdGlvbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTcyMTFDMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdU
cmFuc2l0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1RyYW5zaXRp
b24uaDsgcGF0aCA9IGRmZy9ERkdUcmFuc2l0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRTgzNDE1MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9ycGhpY0NhbGxTdHViUm91
dGluZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQb2x5bW9ycGhp
Y0NhbGxTdHViUm91dGluZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00ODQ2
LDcgKzQ4NTYsMTEgQEAKIAkJCQkwRkVDODU0QjFCREFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmgg
Ki8sCiAJCQkJMEZFQzg1NEMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suY3BwICov
LAogCQkJCTBGRUM4NTREMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmggKi8sCisJ
CQkJMEZFMzRDMEIxQzRCMTA5NjAwMDNBNTEyIC8qIEFpckJsb2NrSW5zZXJ0aW9uU2V0LmNwcCAq
LywKKwkJCQkwRkUzNEMwQzFDNEIxMDk2MDAwM0E1MTIgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQu
aCAqLywKIAkJCQkwRkIzODc4QjFCRkJDNDREMDBFM0FCMUUgLyogQWlyQmxvY2tXb3JrbGlzdC5o
ICovLAorCQkJCTBGRTM0QzBEMUM0QjEwOTYwMDAzQTUxMiAvKiBBaXJCcmVha0NyaXRpY2FsRWRn
ZXMuY3BwICovLAorCQkJCTBGRTM0QzBFMUM0QjEwOTYwMDAzQTUxMiAvKiBBaXJCcmVha0NyaXRp
Y2FsRWRnZXMuaCAqLywKIAkJCQkwRjYxODMyMDFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxp
bmdDb252ZW50aW9uLmNwcCAqLywKIAkJCQkwRjYxODMyMTFDNDVCRjA3MDA3MjQ1MEIgLyogQWly
Q0NhbGxpbmdDb252ZW50aW9uLmggKi8sCiAJCQkJMEZFQzg1NEUxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckNDYWxsU3BlY2lhbC5jcHAgKi8sCkBAIC00ODYxLDcgKzQ4NzUsNiBAQAogCQkJCTBGNjE4
MzI0MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJFbWl0U2h1ZmZsZS5oICovLAogCQkJCTI2MkQ4NUI0
MUMwRDY1MEYwMDZBQ0I2MSAvKiBBaXJGaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMuY3BwICovLAog
CQkJCTI2MkQ4NUI1MUMwRDY1MEYwMDZBQ0I2MSAvKiBBaXJGaXhQYXJ0aWFsUmVnaXN0ZXJTdGFs
bHMuaCAqLywKLQkJCQkwRjRDOTE2NzFDMkIzRDY4MDA0MzQxQTYgLyogQWlyRml4U3BpbGxTbG90
WkRlZi5oICovLAogCQkJCTBGRUM4NTUyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVxdWVudGVk
QmxvY2suaCAqLywKIAkJCQkwRkVDODU1MzFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGUu
Y3BwICovLAogCQkJCTBGRUM4NTU0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5oICov
LApAQCAtNDg5MCw2ICs0OTAzLDggQEAKIAkJCQkwRkVDODU2MTFCREFDREM3MDA4MEZGNzQgLyog
QWlyUmVnaXN0ZXJQcmlvcml0eS5oICovLAogCQkJCTBGNDU3MDNBMUJFNDVGMEEwMDYyQTYyOSAv
KiBBaXJSZXBvcnRVc2VkUmVnaXN0ZXJzLmNwcCAqLywKIAkJCQkwRjQ1NzAzQjFCRTQ1RjBBMDA2
MkE2MjkgLyogQWlyUmVwb3J0VXNlZFJlZ2lzdGVycy5oICovLAorCQkJCTBGRTM0QzBGMUM0QjEw
OTYwMDAzQTUxMiAvKiBBaXJTY2F2ZW5nZVJlZ2lzdGVycy5jcHAgKi8sCisJCQkJMEZFMzRDMTAx
QzRCMTA5NjAwMDNBNTEyIC8qIEFpclNjYXZlbmdlUmVnaXN0ZXJzLmggKi8sCiAJCQkJMEYzMzhE
RkIxQkVENTEyNzAwMTNDODhGIC8qIEFpclNpbXBsaWZ5Q0ZHLmNwcCAqLywKIAkJCQkwRjMzOERG
QzFCRUQ1MTI3MDAxM0M4OEYgLyogQWlyU2ltcGxpZnlDRkcuaCAqLywKIAkJCQkwRkVDODU2MjFC
REFDREM3MDA4MEZGNzQgLyogQWlyU3BlY2lhbC5jcHAgKi8sCkBAIC02OTY0LDYgKzY5NzksNyBA
QAogCQkJCTBGRUM4NTc0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRUM4NTc2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjM3MzA5MzFDMEQ2N0VFMDAwNTJCRkEgLyogQWlyVXNlQ291bnRz
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkUzNEMxNDFDNEIxMDk2MDAwM0E1MTIgLyogQWlyQnJl
YWtDcml0aWNhbEVkZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ1NzAzOTFCRTQ0QzkxMDA2
MkE2MjkgLyogQWlyRWxpbWluYXRlRGVhZENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTc5Q0ZD
NkYwMUMzM0IxMDAwMEM3NjhFQSAvKiBMTEludFBDUmFuZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk3OUQ1Q0Q1QjFDMTEwNkE5MDBDRUNBMDcgLyogU2FtcGxpbmdQcm9maWxlci5oIGluIEhlYWRl
cnMgKi8sCkBAIC03MzI2LDcgKzczNDIsNiBAQAogCQkJCURDMDAwMzkzMTlEOEJFNkYwMDAyM0VC
MCAvKiBERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkJF
MEY3NTE2QzFEQjBCMDA4MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkZGQzk1RTE0RUY5MEI3MDBDNzI1MzIgLyogREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGNEM5MTY4MUMyQjNENjgw
MDQzNDFBNiAvKiBBaXJGaXhTcGlsbFNsb3RaRGVmLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjNF
MDFBQjE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmluZy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYyQjlDRUQxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1Byb21vdGVkSGVhcExvY2F0
aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZDOTIxNjFCOTRGQjNFMDA3MURENjYgLyogREZH
UHJvcGVydHlUeXBlS2V5LmggaW4gSGVhZGVycyAqLywKQEAgLTgwMjksNiArODA0NCw3IEBACiAJ
CQkJNzA1QjQxQjIxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbFByb3RvdHlwZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTk2QjczMjgxQkRBMDhFRjAwMzMxQjg0IC8qIFN5bWJvbFByb3RvdHlwZS5s
dXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDZCMEUxNkY1Q0QwMEIzNDQ2MCAvKiBTeW1i
b2xUYWJsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFMzRDMTYxQzRCMTA5NjAwMDNBNTEyIC8q
IEFpclNjYXZlbmdlUmVnaXN0ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzg0QTI2NDExRDE2
NjIyMDA1Nzc2QUMgLyogU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzBFQ0E2
MDgxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovLAog
CQkJCTcwRUNBNjA5MUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmggaW4g
SGVhZGVycyAqLywKQEAgLTgwNDYsNiArODA2Miw3IEBACiAJCQkJMEYzMzhFMTMxQkYwMjc2QzAw
MTNDODhGIC8qIEIzT3BhcXVlQnlwcm9kdWN0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY3
MDgxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlDb250cm9sbGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjRCOTREQzE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRBcnJheUlubGluZXMuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGRTM0QzEyMUM0QjEwOTYwMDAzQTUxMiAvKiBBaXJCbG9ja0lu
c2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY3MDkxN0I2QjVBQjAwQTdBRTNG
IC8qIFR5cGVkQXJyYXlzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjcwQjE3QjZCNUFCMDBB
N0FFM0YgLyogVHlwZWRBcnJheVR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkQ0REVBMTk4
MzJEQUMwMDdENEIxOSAvKiBUeXBlTG9jYXRpb24uaCBpbiBIZWFkZXJzICovLApAQCAtODcyOSw2
ICs4NzQ2LDcgQEAKIAkJCQkwRkVDODUyMTFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNvZGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQzg1MjMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3JpZ2lu
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUM4NTI1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Bh
dGNocG9pbnRTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTM0QzE1MUM0QjEwOTYw
MDAzQTUxMiAvKiBBaXJTY2F2ZW5nZVJlZ2lzdGVycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkVDODUyNzFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZFQzg1MjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkVDODUyQjFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1
cmUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04ODk1LDYgKzg5MTMsNyBAQAogCQkJCTBGNTg3NEVE
MTk0RkVCMTIwMEFBQjJDMSAvKiBERkdNYXlFeGl0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
MTcyNUZGMUI0ODcxOUEwMEFDM0E1NSAvKiBERkdNaW5pZmllZEdyYXBoLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMkJEQzREMTUyMjgxODYwMENEODkxMCAvKiBERkdNaW5pZmllZE5vZGUuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEZFMzRDMTMxQzRCMTA5NjAwMDNBNTEyIC8qIEFpckJyZWFr
Q3JpdGljYWxFZGdlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjhGMTQzNTFBREYwOTAxMDBF
RDc5MkMgLyogREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkYyQ0Q1QjFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTczNzgxMEQxNzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxM
b29wcy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTkwMzUsNiArOTA1NCw3IEBACiAJCQkJMEYyMzVC
RTExNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFRodW5rcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjZCMUNDNTE4NjJDNDc4MDA4NDVEOTcgLyogRlRMVW53aW5kSW5mby5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjVBNjI4MzE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5nZS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkwRkUzNEMxMTFDNEIxMDk2MDAwM0E1MTIgLyogQWlyQmxvY2tJbnNl
cnRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkE4MzYzODkxOEQ3RDBGRTAwMDBFQkND
IC8qIEZ1bGxHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5
Q0IxMDdFQzM3NjAwNDI3QTQ4IC8qIEZ1bmN0aW9uQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZGMEYxOUYxNkI3MkExNzAwNURGOTVCIC8qIEZ1bmN0aW9uRXhlY3V0YWJsZUR1
bXAuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
aGVja1NwZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NoZWNrU3BlY2lhbC5jcHAJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSwxOSArMTA1
LDE0IEBAIEluc3QgQ2hlY2tTcGVjaWFsOjpoaWRkZW5CcmFuY2goY29uc3QgSW4KICAgICByZXR1
cm4gaGlkZGVuQnJhbmNoOwogfQogCi12b2lkIENoZWNrU3BlY2lhbDo6Y29tbWl0SGlkZGVuQnJh
bmNoKEluc3QmIG9yaWdpbmFsLCBJbnN0JiBoaWRkZW5CcmFuY2gpCi17Ci0gICAgQVNTRVJUKGhp
ZGRlbkJyYW5jaC5hcmdzLnNpemUoKSA9PSBtX251bUNoZWNrQXJncyk7Ci0gICAgQVNTRVJUKGhp
ZGRlbkJyYW5jaC5vcGNvZGUgPSBtX2NoZWNrT3Bjb2RlKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9udW1DaGVja0FyZ3M7ICsraSkKLSAgICAgICAgb3JpZ2luYWwuYXJnc1tpICsg
MV0gPSBoaWRkZW5CcmFuY2guYXJnc1tpXTsKLX0KLQogdm9pZCBDaGVja1NwZWNpYWw6OmZvckVh
Y2hBcmcoSW5zdCYgaW5zdCwgY29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFj
az4mIGNhbGxiYWNrKQogewogICAgIEluc3QgaGlkZGVuID0gaGlkZGVuQnJhbmNoKGluc3QpOwot
ICAgIGhpZGRlbi5mb3JFYWNoQXJnKGNhbGxiYWNrKTsKLSAgICBjb21taXRIaWRkZW5CcmFuY2go
aW5zdCwgaGlkZGVuKTsKKyAgICBoaWRkZW4uZm9yRWFjaEFyZygKKyAgICAgICAgWyZdIChBcmcm
IGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSB0eXBlLCBBcmc6OldpZHRoIHdpZHRoKSB7
CisgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9ICZhcmcgLSAmaGlkZGVuLmFyZ3NbMF07Cisg
ICAgICAgICAgICBjYWxsYmFjayhpbnN0LmFyZ3NbMSArIGluZGV4XSwgcm9sZSwgdHlwZSwgd2lk
dGgpOworICAgICAgICB9KTsKICAgICBmb3JFYWNoQXJnSW1wbChudW1CM0FyZ3MoaW5zdCksIG1f
bnVtQ2hlY2tBcmdzICsgMSwgaW5zdCwgbV9zdGFja21hcFJvbGUsIGNhbGxiYWNrKTsKIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmgJKHJldmlzaW9u
IDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjMsOSArMTIzLDYgQEAgcHJvdGVjdGVkOgogICAgIC8vIENvbnN0
cnVjdHMgYW5kIHJldHVybnMgdGhlIEluc3QgcmVwcmVzZW50aW5nIHRoZSBicmFuY2ggdGhhdCB0
aGlzIHdpbGwgdXNlLgogICAgIEFpcjo6SW5zdCBoaWRkZW5CcmFuY2goY29uc3QgQWlyOjpJbnN0
JikgY29uc3Q7CiAKLSAgICAvLyBJZiB3ZSBlZGl0ZWQgdGhlIGhpZGRlbiBicmFuY2gsIHRoaXMg
aW5zdGFsbHMgdGhlIGVkaXRzIGludG8gdGhlIGdpdmVuIGluc3QuCi0gICAgdm9pZCBjb21taXRI
aWRkZW5CcmFuY2goQWlyOjpJbnN0JiBvcmlnaW5hbCwgQWlyOjpJbnN0JiBoaWRkZW5CcmFuY2gp
OwotCiAgICAgdm9pZCBmb3JFYWNoQXJnKEFpcjo6SW5zdCYsIGNvbnN0IFNjb3BlZExhbWJkYTxB
aXI6Okluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mKSBvdmVycmlkZTsKICAgICBib29sIGlzVmFsaWQo
QWlyOjpJbnN0Jikgb3ZlcnJpZGU7CiAgICAgYm9vbCBhZG1pdHNTdGFjayhBaXI6Okluc3QmLCB1
bnNpZ25lZCBhcmdJbmRleCkgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAJKHJldmlzaW9uIDE5NTE3NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoQjNfSklUKQogCiAjaW5jbHVk
ZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgogI2luY2x1ZGUgIkFp
ckluc3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQWlyTGl2ZW5lc3MuaCIKICNpbmNsdWRlICJBaXJQ
aGFzZVNjb3BlLmgiCkBAIC0xNjYsOCArMTY3LDQ3IEBAIHZvaWQgYWxsb2NhdGVTdGFjayhDb2Rl
JiBjb2RlKQogICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7
IGluc3RJbmRleC0tOykgewogICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiQW5hbHl6aW5nOiAiLCBibG9jay0+YXQoaW5zdEluZGV4KSwgIlxuIik7CisK
KyAgICAgICAgICAgIC8vIEtpbGwgZGVhZCBzdG9yZXMuIEZvciBzaW1wbGljaXR5IHdlIHNheSB0
aGF0IGEgc3RvcmUgaXMga2lsbGFibGUgaWYgaXQgaGFzIG9ubHkgbGF0ZQorICAgICAgICAgICAg
Ly8gZGVmcyBhbmQgdGhvc2UgbGF0ZSBkZWZzIGFyZSB0byB0aGluZ3MgdGhhdCBhcmUgZGVhZCBy
aWdodCBub3cuIFdlIG9ubHkgZG8gdGhhdAorICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGF0J3Mg
dGhlIG9ubHkga2luZCBvZiBkZWFkIHN0YWNrIHN0b3JlIHdlIHdpbGwgc2VlIGhlcmUuCisgICAg
ICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7CisgICAgICAgICAgICBp
ZiAoZmFsc2UgJiYgIWluc3QuaGFzTm9uQXJnRWZmZWN0cygpKSB7CisgICAgICAgICAgICAgICAg
Ym9vbCBvayA9IHRydWU7CisgICAgICAgICAgICAgICAgaW5zdC5mb3JFYWNoQXJnKAorICAgICAg
ICAgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlLCBB
cmc6OldpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0Vhcmx5RGVm
KHJvbGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFyZzo6aXNMYXRlRGVmKHJvbGUpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghYXJnLmlzU3RhY2soKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9rID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzbG90ID0g
YXJnLnN0YWNrU2xvdCgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNsb3QtPmtpbmQo
KSAhPSBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvayA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxv
Y2FsQ2FsYy5pc0xpdmUoc2xvdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvayA9
IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAg
aWYgKG9rKQorICAgICAgICAgICAgICAgICAgICBpbnN0ID0gSW5zdCgpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCiAgICAgICAgICAgICBpbnRlcmZlcmUoaW5zdEluZGV4KTsKICAgICAg
ICAgICAgIGxvY2FsQ2FsYy5leGVjdXRlKGluc3RJbmRleCk7CisKKyAgICAgICAgICAgIGJsb2Nr
LT5pbnN0cygpLnJlbW92ZUFsbE1hdGNoaW5nKAorICAgICAgICAgICAgICAgIFsmXSAoY29uc3Qg
SW5zdCYgaW5zdCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAhaW5zdDsK
KyAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgfQogICAgICAgICBpbnRlcmZlcmUoLTEpOwog
ICAgIH0KQEAgLTIzMiwzMyArMjcyLDQzIEBAIHZvaWQgYWxsb2NhdGVTdGFjayhDb2RlJiBjb2Rl
KQogICAgIC8vIFdlIHdvdWxkIGhhdmUgdG8gc2NhdmVuZ2UgZm9yIHRlbXBvcmFyaWVzIGlmIHRo
aXMgaGFwcGVuZWQuIEZvcnR1bmF0ZWx5LCB0aGlzIGNhc2Ugd2lsbCBiZQogICAgIC8vIGV4dHJl
bWVseSByYXJlIHNvIHdlIGNhbiBkbyBjcmF6eSB0aGluZ3Mgd2hlbiBpdCBhcmlzZXMuCiAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjUzMAotICAgIAor
CisgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChjb2RlKTsKICAgICBmb3IgKEJhc2ljQmxv
Y2sqIGJsb2NrIDogY29kZSkgewotICAgICAgICBmb3IgKEluc3QmIGluc3QgOiAqYmxvY2spIHsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSAwOyBpbnN0SW5kZXggPCBibG9jay0+
c2l6ZSgpOyArK2luc3RJbmRleCkgeworICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5h
dChpbnN0SW5kZXgpOwogICAgICAgICAgICAgaW5zdC5mb3JFYWNoQXJnKAotICAgICAgICAgICAg
ICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSwgQXJnOjpUeXBlLCBBcmc6OldpZHRoIHdpZHRo
KQotICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6
OlJvbGUgcm9sZSwgQXJnOjpUeXBlLCBBcmc6OldpZHRoIHdpZHRoKSB7CisgICAgICAgICAgICAg
ICAgICAgIGF1dG8gc3RhY2tBZGRyID0gWyZdIChpbnQzMl90IG9mZnNldCkgLT4gQXJnIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBcmc6OnN0YWNrQWRkcihvZmZzZXQsIGNvZGUu
ZnJhbWVTaXplKCksIHdpZHRoKTsKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYXJnLmtpbmQoKSkgewogICAg
ICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6U3RhY2s6IHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGFyZyA9IEFyZzo6YWRkcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUbXAoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFy
Zy5vZmZzZXQoKSArIGFyZy5zdGFja1Nsb3QoKS0+b2Zmc2V0RnJvbUZQKCkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFhcmcuaXNWYWxpZEZvcm0od2lkdGgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXJnID0gQXJnOjphZGRyKAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBUbXAoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnLm9mZnNldCgpICsgY29kZS5mcmFtZVNp
emUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHNsb3QgPSBhcmcuc3Rh
Y2tTbG90KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc1pEZWYocm9sZSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBzbG90LT5raW5kKCkgPT0gU3RhY2tTbG90
S2luZDo6QW5vbnltb3VzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2xvdC0+Ynl0
ZVNpemUoKSA+IEFyZzo6Ynl0ZXMod2lkdGgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gQ3VycmVudGx5IHdlIG9ubHkgaGFuZGxlIHRoaXMgc2ltcGxlIGNhc2UgYmVjYXVzZSBp
dCdzIHRoZSBvbmx5IG9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgYXJp
c2VzOiBaRGVmJ3MgYXJlIG9ubHkgMzItYml0IHJpZ2h0IG5vdy4gU28sIHdoZW4gd2UgaGl0IHRo
ZXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXNzZXJ0aW9ucyBpdCBtZWFucyB0
aGF0IHdlIG5lZWQgdG8gaW1wbGVtZW50IHRob3NlIG90aGVyIGtpbmRzIG9mCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gemVybyBmaWxscy4KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChzbG90LT5ieXRlU2l6ZSgpID09IDgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHdpZHRoID09IEFyZzo6V2lkdGgzMik7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSByZWx5IG9uIHRoZSBmYWN0IHRoYXQg
dGhlcmUgbXVzdCBiZSBzb21lIHdheSB0byBtb3ZlIHplcm8gdG8gYQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIG1lbW9yeSBsb2NhdGlvbiB3aXRob3V0IGZpcnN0IGJ1cm5pbmcgYSBy
ZWdpc3Rlci4gT24gQVJNLCB3ZSB3b3VsZCBkbworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHRoaXMgdXNpbmcgenIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoaXNWYWxpZEZvcm0oTW92ZTMyLCBBcmc6OkltbSwgQXJnOjpBZGRyKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW5zdEluZGV4ICsgMSwgTW92ZTMyLCBpbnN0Lm9yaWdpbiwgQXJn
OjppbW0oMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrQWRkcihhcmcu
b2Zmc2V0KCkgKyA0ICsgc2xvdC0+b2Zmc2V0RnJvbUZQKCkpKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IHN0YWNrQWRkcihhcmcub2Zm
c2V0KCkgKyBzbG90LT5vZmZzZXRGcm9tRlAoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBjYXNlIEFy
Zzo6Q2FsbEFyZzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IEFyZzo6YWRkcigKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZy5vZmZzZXQoKSAtIGNvZGUuZnJhbWVT
aXplKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmcuaXNWYWxpZEZvcm0od2lk
dGgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gQXJnOjphZGRyKAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUbXAoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9p
bnRlclJlZ2lzdGVyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnLm9mZnNl
dCgpICsgY29kZS5mcmFtZVNpemUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICBhcmcgPSBzdGFja0FkZHIoYXJnLm9mZnNldCgpIC0gY29kZS5m
cmFtZVNpemUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjY2
LDYgKzMxNiw3IEBAIHZvaWQgYWxsb2NhdGVTdGFjayhDb2RlJiBjb2RlKQogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICk7CiAgICAgICAgIH0KKyAgICAgICAgaW5zZXJ0aW9uU2V0LmV4
ZWN1dGUoYmxvY2spOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJBcmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckFyZy5oCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckFyZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNiArMTI2LDcgQEAgcHVibGljOgog
ICAgICAgICAvLyBkZXBlbmRpbmcgb24gdGhlIGtpbmQgb2YgdGhlIGFyZ3VtZW50OgogICAgICAg
ICAvLwogICAgICAgICAvLyBGb3IgcmVnaXN0ZXI6IHRoZSB1cHBlciBiaXRzIGFyZSB6ZXJvLWZp
bGxlZC4KKyAgICAgICAgLy8gRm9yIGFub255bW91cyBzdGFjayBzbG90OiB0aGUgdXBwZXIgYml0
cyBhcmUgemVyby1maWxsZWQuCiAgICAgICAgIC8vIEZvciBhZGRyZXNzOiB0aGUgdXBwZXIgYml0
cyBhcmUgbm90IHRvdWNoZWQgKGkuZS4gd2UgZG8gYSAzMi1iaXQgc3RvcmUgaW4gb3VyIGV4YW1w
bGUpLgogICAgICAgICAvLyBGb3IgdG1wOiBlaXRoZXIgdGhlIHVwcGVyIGJpdHMgYXJlIG5vdCB0
b3VjaGVkIG9yIHRoZXkgYXJlIHplcm8tZmlsbGVkLCBhbmQgd2Ugd29uJ3Qga25vdwogICAgICAg
ICAvLyB3aGljaCB1bnRpbCB3ZSBsb3dlciB0aGUgdG1wIHRvIGVpdGhlciBhIFN0YWNrU2xvdCBv
ciBhIFJlZy4KQEAgLTUxMyw2ICs1MTQsMTcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIH0KIAorICAgIHN0YXRpYyBBcmcgc3RhY2tBZGRyKGludDMyX3Qgb2Zmc2V0RnJv
bUZQLCB1bnNpZ25lZCBmcmFtZVNpemUsIFdpZHRoIHdpZHRoKQorICAgIHsKKyAgICAgICAgQXJn
IHJlc3VsdCA9IEFyZzo6YWRkcihBaXI6OlRtcChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciks
IG9mZnNldEZyb21GUCk7CisgICAgICAgIGlmICghcmVzdWx0LmlzVmFsaWRGb3JtKHdpZHRoKSkg
eworICAgICAgICAgICAgcmVzdWx0ID0gQXJnOjphZGRyKAorICAgICAgICAgICAgICAgIEFpcjo6
VG1wKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciksCisgICAgICAgICAgICAg
ICAgb2Zmc2V0RnJvbUZQICsgZnJhbWVTaXplKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKwogICAgIC8vIElmIHlvdSBkb24ndCBwYXNzIGEgV2lkdGgsIHRoaXMg
b3B0aW1pc3RpY2FsbHkgYXNzdW1lcyB0aGF0IHlvdSdyZSB1c2luZyB0aGUgcmlnaHQgd2lkdGgu
CiAgICAgc3RhdGljIGJvb2wgaXNWYWxpZFNjYWxlKHVuc2lnbmVkIHNjYWxlLCBPcHRpb25hbDxX
aWR0aD4gd2lkdGggPSBOdWxsb3B0KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAt
MzYsNiArMzYsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNl
IEFpciB7CiAKK2NsYXNzIEJsb2NrSW5zZXJ0aW9uU2V0OwogY2xhc3MgQ29kZTsKIGNsYXNzIElu
c2VydGlvblNldDsKIApAQCAtMTI3LDYgKzEyOCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRlZXBE
dW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEJs
b2NrSW5zZXJ0aW9uU2V0OwogICAgIGZyaWVuZCBjbGFzcyBDb2RlOwogICAgIGZyaWVuZCBjbGFz
cyBJbnNlcnRpb25TZXQ7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckJsb2NrSW5zZXJ0aW9uU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckJsb2NrSW5zZXJ0aW9uU2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckJsb2Nr
SW5zZXJ0aW9uU2V0LmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQmFz
aWNCbG9jay5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0J1
YmJsZVNvcnQuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBB
aXIgeworCitCbG9ja0luc2VydGlvblNldDo6QmxvY2tJbnNlcnRpb25TZXQoQ29kZSAmY29kZSkK
KyAgICA6IG1fY29kZShjb2RlKQoreworfQorCitCbG9ja0luc2VydGlvblNldDo6fkJsb2NrSW5z
ZXJ0aW9uU2V0KCkgeyB9CisKK3ZvaWQgQmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydChCbG9ja0lu
c2VydGlvbiYmIGluc2VydGlvbikKK3sKKyAgICBtX2luc2VydGlvbnMuYXBwZW5kKFdURk1vdmUo
aW5zZXJ0aW9uKSk7Cit9CisKK0Jhc2ljQmxvY2sqIEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnQo
dW5zaWduZWQgaW5kZXgsIGRvdWJsZSBmcmVxdWVuY3kpCit7CisgICAgc3RkOjp1bmlxdWVfcHRy
PEJhc2ljQmxvY2s+IGJsb2NrKG5ldyBCYXNpY0Jsb2NrKFVJTlRfTUFYLCBmcmVxdWVuY3kpKTsK
KyAgICBCYXNpY0Jsb2NrKiByZXN1bHQgPSBibG9jay5nZXQoKTsKKyAgICBpbnNlcnQoQmxvY2tJ
bnNlcnRpb24oaW5kZXgsIFdURk1vdmUoYmxvY2spKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworQmFzaWNCbG9jayogQmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydEJlZm9yZShCYXNpY0Jsb2Nr
KiBiZWZvcmUsIGRvdWJsZSBmcmVxdWVuY3kpCit7CisgICAgcmV0dXJuIGluc2VydChiZWZvcmUt
PmluZGV4KCksIGZyZXF1ZW5jeSA9PSBmcmVxdWVuY3kgPyBmcmVxdWVuY3kgOiBiZWZvcmUtPmZy
ZXF1ZW5jeSgpKTsKK30KKworQmFzaWNCbG9jayogQmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydEFm
dGVyKEJhc2ljQmxvY2sqIGFmdGVyLCBkb3VibGUgZnJlcXVlbmN5KQoreworICAgIHJldHVybiBp
bnNlcnQoYWZ0ZXItPmluZGV4KCkgKyAxLCBmcmVxdWVuY3kgPT0gZnJlcXVlbmN5ID8gZnJlcXVl
bmN5IDogYWZ0ZXItPmZyZXF1ZW5jeSgpKTsKK30KKworYm9vbCBCbG9ja0luc2VydGlvblNldDo6
ZXhlY3V0ZSgpCit7CisgICAgaWYgKG1faW5zZXJ0aW9ucy5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBXZSBhbGxvdyBpbnNlcnRpb25zIHRvIGJlIGdpdmVu
IHRvIHVzIGluIGFueSBvcmRlci4gU28sIHdlIG5lZWQgdG8gc29ydCB0aGVtIGJlZm9yZQorICAg
IC8vIHJ1bm5pbmcgV1RGOjpleGVjdXRlSW5zZXJ0aW9ucy4gV2Ugc3Ryb25nbHkgcHJlZmVyIGEg
c3RhYmxlIHNvcnQgYW5kIHdlIHdhbnQgaXQgdG8gYmUKKyAgICAvLyBmYXN0LCBzbyB3ZSB1c2Ug
YnViYmxlIHNvcnQuCisgICAgYnViYmxlU29ydChtX2luc2VydGlvbnMuYmVnaW4oKSwgbV9pbnNl
cnRpb25zLmVuZCgpKTsKKworICAgIGV4ZWN1dGVJbnNlcnRpb25zKG1fY29kZS5tX2Jsb2Nrcywg
bV9pbnNlcnRpb25zKTsKKyAgICAKKyAgICAvLyBQcnVuZSBvdXQgZW1wdHkgZW50cmllcy4gVGhp
cyBpc24ndCBzdHJpY3RseSBuZWNlc3NhcnkgYnV0IGl0J3MKKyAgICAvLyBoZWFsdGh5IHRvIGtl
ZXAgdGhlIGJsb2NrIGxpc3QgZnJvbSBncm93aW5nLgorICAgIG1fY29kZS5tX2Jsb2Nrcy5yZW1v
dmVBbGxNYXRjaGluZygKKyAgICAgICAgWyZdIChzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4m
IGJsb2NrUHRyKSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiAhYmxvY2tQdHI7CisgICAg
ICAgIH0pOworICAgIAorICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBibG9ja3Mga25vdyB0aGVp
ciBuZXcgaW5kaWNlcy4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jb2RlLm1fYmxv
Y2tzLnNpemUoKTsgKytpKQorICAgICAgICBtX2NvZGUubV9ibG9ja3NbaV0tPm1faW5kZXggPSBp
OworICAgIAorICAgIHJldHVybiB0cnVlOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
Mzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckJsb2NrSW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja0luc2VydGlvblNldC5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja0luc2VydGlvblNl
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJCbG9ja0luc2VydGlvblNldF9o
CisjZGVmaW5lIEFpckJsb2NrSW5zZXJ0aW9uU2V0X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisK
KyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSA8d3RmL0luc2VydGlvbi5oPgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVz
cGFjZSBBaXIgeworCitjbGFzcyBJbnNlcnRpb25TZXQ7CisKK3R5cGVkZWYgV1RGOjpJbnNlcnRp
b248c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiBCbG9ja0luc2VydGlvbjsKKworY2xhc3Mg
QmxvY2tJbnNlcnRpb25TZXQgeworcHVibGljOgorICAgIEJsb2NrSW5zZXJ0aW9uU2V0KENvZGUm
KTsKKyAgICB+QmxvY2tJbnNlcnRpb25TZXQoKTsKKyAgICAKKyAgICB2b2lkIGluc2VydChCbG9j
a0luc2VydGlvbiYmKTsKKworICAgIC8vIEluc2VydCBhIG5ldyBibG9jayBhdCBhIGdpdmVuIGlu
ZGV4LgorICAgIEJhc2ljQmxvY2sqIGluc2VydCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIGZyZXF1
ZW5jeSA9IFBOYU4pOworCisgICAgLy8gSW5zZXJ0cyBhIG5ldyBibG9jayBiZWZvcmUgdGhlIGdp
dmVuIGJsb2NrLiBVc3VhbGx5IHlvdSB3aWxsIG5vdCBwYXNzIHRoZSBmcmVxdWVuY3kKKyAgICAv
LyBhcmd1bWVudC4gUGFzc2luZyBQTmFOIGNhdXNlcyB1cyB0byBqdXN0IHVzZSB0aGUgZnJlcXVl
bmN5IG9mIHRoZSAnYmVmb3JlJyBibG9jay4gVGhhdCdzCisgICAgLy8gdXN1YWxseSB3aGF0IHlv
dSB3YW50LgorICAgIEJhc2ljQmxvY2sqIGluc2VydEJlZm9yZShCYXNpY0Jsb2NrKiBiZWZvcmUs
IGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKTsKKworICAgIC8vIEluc2VydHMgYSBuZXcgYmxvY2sg
YWZ0ZXIgdGhlIGdpdmVuIGJsb2NrLgorICAgIEJhc2ljQmxvY2sqIGluc2VydEFmdGVyKEJhc2lj
QmxvY2sqIGFmdGVyLCBkb3VibGUgZnJlcXVlbmN5ID0gUE5hTik7CisKKyAgICBib29sIGV4ZWN1
dGUoKTsKKworcHJpdmF0ZToKKyAgICBDb2RlJiBtX2NvZGU7CisgICAgVmVjdG9yPEJsb2NrSW5z
ZXJ0aW9uLCA4PiBtX2luc2VydGlvbnM7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
Mzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyQmxvY2tJ
bnNlcnRpb25TZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJy
ZWFrQ3JpdGljYWxFZGdlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJCcmVha0NyaXRpY2FsRWRnZXMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCcmVha0NyaXRpY2FsRWRnZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyQnJlYWtDcml0
aWNhbEVkZ2VzLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQmxvY2tJ
bnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlySW5zdElu
bGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIg
eworCit2b2lkIGJyZWFrQ3JpdGljYWxFZGdlcyhDb2RlJiBjb2RlKQoreworICAgIEJsb2NrSW5z
ZXJ0aW9uU2V0IGluc2VydGlvblNldChjb2RlKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGJs
b2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgY29kZS5zaXplKCk7ICsrYmxvY2tJbmRleCkgewor
ICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGNvZGVbYmxvY2tJbmRleF07CisgICAgICAgIGlm
ICghYmxvY2spCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoYmxvY2stPm51
bVN1Y2Nlc3NvcnMoKSA8PSAxKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgaS0tOykgeworICAgICAgICAg
ICAgQmFzaWNCbG9jayomIHN1Y2Nlc3NvciA9IGJsb2NrLT5zdWNjZXNzb3JCbG9jayhpKTsKKyAg
ICAgICAgICAgIGlmIChzdWNjZXNzb3ItPnByZWRlY2Vzc29ycygpLnNpemUoKSA8PSAxKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBwYWQgPSBp
bnNlcnRpb25TZXQuaW5zZXJ0QmVmb3JlKHN1Y2Nlc3Nvciwgc3VjY2Vzc29yLT5mcmVxdWVuY3ko
KSk7CisgICAgICAgICAgICBwYWQtPmFwcGVuZChKdW1wLCBzdWNjZXNzb3ItPmF0KDApLm9yaWdp
bik7CisgICAgICAgICAgICBwYWQtPnN1Y2Nlc3NvcnMoKS5hcHBlbmQoRnJlcXVlbnRlZEJsb2Nr
KHN1Y2Nlc3NvcikpOworICAgICAgICAgICAgc3VjY2Vzc29yLT5yZXBsYWNlUHJlZGVjZXNzb3Io
YmxvY2ssIHBhZCk7CisgICAgICAgICAgICBzdWNjZXNzb3IgPSBwYWQ7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZSgpOworfQorCit9IH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJyZWFrQ3JpdGljYWxFZGdlcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQnJlYWtDcml0aWNhbEVkZ2Vz
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJyZWFr
Q3JpdGljYWxFZGdlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEFpckJyZWFrQ3Jp
dGljYWxFZGdlc19oCisjZGVmaW5lIEFpckJyZWFrQ3JpdGljYWxFZGdlc19oCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFp
ciB7CisKK2NsYXNzIENvZGU7CisKK3ZvaWQgYnJlYWtDcml0aWNhbEVkZ2VzKENvZGUmKTsKKwor
fSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKworI2VuZGlmIC8vIEFpckJyZWFrQ3JpdGljYWxFZGdlc19oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiAr
NDYsNyBAQCBjbGFzcyBQcm9jZWR1cmU7CiAKIG5hbWVzcGFjZSBBaXIgewogCitjbGFzcyBCbG9j
a0luc2VydGlvblNldDsKIGNsYXNzIENDYWxsU3BlY2lhbDsKIAogLy8gVGhpcyBpcyBhbiBJUiB0
aGF0IGlzIHZlcnkgY2xvc2UgdG8gdGhlIGJhcmUgbWV0YWwuIEl0IHJlcXVpcmVzIGFib3V0IDQw
eCBtb3JlIGJ5dGVzIHRoYW4gdGhlCkBAIC0zMjQsNiArMzI1LDcgQEAgcHVibGljOgogCiBwcml2
YXRlOgogICAgIGZyaWVuZCBjbGFzcyA6OkpTQzo6QjM6OlByb2NlZHVyZTsKKyAgICBmcmllbmQg
Y2xhc3MgQmxvY2tJbnNlcnRpb25TZXQ7CiAgICAgCiAgICAgQ29kZShQcm9jZWR1cmUmKTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbWl0U2h1ZmZsZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbWl0U2h1ZmZsZS5j
cHAJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
RW1pdFNodWZmbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCwxNCBAQCB2b2lkIFNo
dWZmbGVQYWlyOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiAgICAgb3V0LnByaW50KHdpZHRoKCks
ICI6Iiwgc3JjKCksICI9PiIsIGRzdCgpKTsKIH0KIAorSW5zdCBjcmVhdGVTaHVmZmxlKFZhbHVl
KiBvcmlnaW4sIGNvbnN0IFZlY3RvcjxTaHVmZmxlUGFpcj4mIHBhaXJzKQoreworICAgIEluc3Qg
cmVzdWx0KFNodWZmbGUsIG9yaWdpbik7CisgICAgZm9yIChjb25zdCBTaHVmZmxlUGFpciYgcGFp
ciA6IHBhaXJzKQorICAgICAgICByZXN1bHQuYXBwZW5kKHBhaXIuc3JjKCksIHBhaXIuZHN0KCks
IEFyZzo6d2lkdGhBcmcocGFpci53aWR0aCgpKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwog
VmVjdG9yPEluc3Q+IGVtaXRTaHVmZmxlKAogICAgIFZlY3RvcjxTaHVmZmxlUGFpcj4gcGFpcnMs
IHN0ZDo6YXJyYXk8QXJnLCAyPiBzY3JhdGNoZXMsIEFyZzo6VHlwZSB0eXBlLCBWYWx1ZSogb3Jp
Z2luKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbWl0U2h1ZmZs
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNo
dWZmbGUuaAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJFbWl0U2h1ZmZsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2Niw5IEBAIHByaXZh
dGU6CiAgICAgQXJnOjpXaWR0aCBtX3dpZHRoIHsgQXJnOjpXaWR0aDggfTsKIH07CiAKKy8vIENy
ZWF0ZSBhIFNodWZmbGUgaW5zdHJ1Y3Rpb24uCitJbnN0IGNyZWF0ZVNodWZmbGUoVmFsdWUqIG9y
aWdpbiwgY29uc3QgVmVjdG9yPFNodWZmbGVQYWlyPiYpOworCiAvLyBQZXJmb3JtIGEgc2h1ZmZs
ZSBvZiBhIGdpdmVuIHR5cGUuIFRoZSBzY3JhdGNoIGFyZ3VtZW50IGlzIG1hbmRhdG9yeS4gWW91
IHNob3VsZCBwYXNzIGl0IGFzCiAvLyBmb2xsb3dzOiBJZiB5b3Uga25vdyB0aGF0IHlvdSBoYXZl
IHNjcmF0Y2ggcmVnaXN0ZXJzIG9yIHRlbXBvcmFyaWVzIGF2YWlsYWJsZSAtIHRoYXQgaXMsIHRo
ZXkncmUKIC8vIHJlZ2lzdGVycyB0aGF0IGFyZSBub3QgbWVudGlvbmVkIGluIHRoZSBzaHVmZmxl
LCBoYXZlIHRoZSBzYW1lIHR5cGUgYXMgdGhlIHNodWZmbGUsIGFuZCBhcmUgbm90CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeFNwaWxsU2xvdFpEZWYuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeFNwaWxsU2xvdFpEZWYu
aAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJG
aXhTcGlsbFNsb3RaRGVmLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzggKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEFpckZpeFNw
aWxsU2xvdFpEZWZfaAotI2RlZmluZSBBaXJGaXhTcGlsbFNsb3RaRGVmX2gKLQotI2luY2x1ZGUg
IkFpckNvZGUuaCIKLSNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIKLSNpbmNsdWRlICJBaXJJ
bnN0SW5saW5lcy5oIgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNl
IEFpciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIElzU3BpbGxTbG90Pgotdm9pZCBmaXhTcGlsbFNs
b3RaRGVmKENvZGUmIGNvZGUsIGNvbnN0IElzU3BpbGxTbG90JiBpc1NwaWxsU2xvdCkKLXsKLSAg
ICAvLyBXZSBjb3VsZCBoYXZlIGludHJvZHVjZWQgWkRlZidzIHRvIFN0YWNrU2xvdHMgdGhhdCBh
cmUgd2lkZXIgdGhhbiB0aGUgZGVmLiBJbiB0aGF0IGNhc2UsIHdlCi0gICAgLy8gbmVlZCB0byBl
bWl0IGNvZGUgdG8gemVyby1maWxsIHRoZSB0b3AgYml0cyBvZiB0aGUgU3RhY2tTbG90LgotICAg
IEluc2VydGlvblNldCBpbnNlcnRpb25TZXQoY29kZSk7Ci0gICAgZm9yIChCYXNpY0Jsb2NrKiBi
bG9jayA6IGNvZGUpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSAwOyBpbnN0
SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK2luc3RJbmRleCkgewotICAgICAgICAgICAgSW5zdCYg
aW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOwotCi0gICAgICAgICAgICBpbnN0LmZvckVhY2hB
cmcoCi0gICAgICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6
VHlwZSwgQXJnOjpXaWR0aCB3aWR0aCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIUFyZzo6
aXNaRGVmKHJvbGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoIWFyZy5pc1N0YWNrKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaXNTcGlsbFNsb3QoYXJnLnN0YWNrU2xv
dCgpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGFyZy5zdGFja1Nsb3QoKS0+Ynl0ZVNpemUoKSA9PSBBcmc6OmJ5dGVzKHdpZHRoKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAgICAgICAv
LyBDdXJyZW50bHkgd2Ugb25seSBoYW5kbGUgdGhpcyBzaW1wbGUgY2FzZSBiZWNhdXNlIGl0J3Mg
dGhlIG9ubHkgb25lIHRoYXQKLSAgICAgICAgICAgICAgICAgICAgLy8gYXJpc2VzOiBaRGVmJ3Mg
YXJlIG9ubHkgMzItYml0IHJpZ2h0IG5vdy4gU28sIHdoZW4gd2UgaGl0IHRoZXNlCi0gICAgICAg
ICAgICAgICAgICAgIC8vIGFzc2VydGlvbnMgaXQgbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIGltcGxl
bWVudCB0aG9zZSBvdGhlciBraW5kcyBvZiB6ZXJvCi0gICAgICAgICAgICAgICAgICAgIC8vIGZp
bGxzLgotICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChhcmcuc3RhY2tTbG90KCkt
PmJ5dGVTaXplKCkgPT0gOCk7Ci0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHdp
ZHRoID09IEFyZzo6V2lkdGgzMik7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gV2UgcmVseSBv
biB0aGUgZmFjdCB0aGF0IHRoZXJlIG11c3QgYmUgc29tZSB3YXkgdG8gbW92ZSB6ZXJvIHRvIGEg
bWVtb3J5Ci0gICAgICAgICAgICAgICAgICAgIC8vIGxvY2F0aW9uIHdpdGhvdXQgZmlyc3QgYnVy
bmluZyBhIHJlZ2lzdGVyLiBPbiBBUk0sIHdlIHdvdWxkIGRvIHRoaXMgdXNpbmcKLSAgICAgICAg
ICAgICAgICAgICAgLy8genIuCi0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlz
VmFsaWRGb3JtKE1vdmUzMiwgQXJnOjpJbW0sIEFyZzo6U3RhY2spKTsKLSAgICAgICAgICAgICAg
ICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgKLSAgICAgICAgICAgICAgICAgICAgICAgIGluc3RJ
bmRleCArIDEsIE1vdmUzMiwgaW5zdC5vcmlnaW4sIEFyZzo6aW1tKDApLCBhcmcud2l0aE9mZnNl
dCg0KSk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLSAgICAgICAgaW5zZXJ0aW9u
U2V0LmV4ZWN1dGUoYmxvY2spOwotICAgIH0KLX0KLQotfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjM6OkFpcgotCi0jZW5kaWYgLy8gQWlyRml4U3BpbGxTbG90WkRlZl9oCi0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTYy
LDYgKzE2Miw3IEBAIHB1YmxpYzoKICAgICAvLwogICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgYXV0
by1nZW5lcmF0ZWQgYnkgb3Bjb2RlX2dlbmVyYXRvci5yYi4KICAgICBib29sIGFkbWl0c1N0YWNr
KHVuc2lnbmVkIGFyZ0luZGV4KTsKKyAgICBib29sIGFkbWl0c1N0YWNrKEFyZyYpOwogCiAgICAg
Ly8gUmV0dXJucyB0cnVlIGlmIHRoaXMgaW5zdHJ1Y3Rpb24gY2FuIGhhdmUgYW55IGVmZmVjdHMg
b3RoZXIgdGhhbiBjb250cm9sIGZsb3cgb3IgYXJndW1lbnRzLgogICAgIGJvb2wgaGFzTm9uQXJn
Tm9uQ29udHJvbEVmZmVjdHMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlySW5zdElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpckluc3RJbmxpbmVzLmgJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlySW5zdElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTU4LDYg
KzE1OCwxMSBAQCBpbmxpbmUgdm9pZCBJbnN0OjpyZXBvcnRVc2VkUmVnaXN0ZXJzKGNvCiAgICAg
YXJnc1swXS5zcGVjaWFsKCktPnJlcG9ydFVzZWRSZWdpc3RlcnMoKnRoaXMsIHVzZWRSZWdpc3Rl
cnMpOwogfQogCitpbmxpbmUgYm9vbCBJbnN0OjphZG1pdHNTdGFjayhBcmcmIGFyZykKK3sKKyAg
ICByZXR1cm4gYWRtaXRzU3RhY2soJmFyZyAtICZhcmdzWzBdKTsKK30KKwogaW5saW5lIGJvb2wg
aXNTaGlmdFZhbGlkKGNvbnN0IEluc3QmIGluc3QpCiB7CiAjaWYgQ1BVKFg4NikgfHwgQ1BVKFg4
Nl82NCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdE1hcC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdE1hcC5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0TWFwLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQWlySW5zdE1hcF9oCisjZGVmaW5lIEFpcklu
c3RNYXBfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckJhc2ljQmxvY2su
aCIKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQjNJbmRleE1hcC5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+CitjbGFzcyBJbnN0TWFwIHsKK3B1YmxpYzoKKyAgICBJbnN0TWFwKENvZGUmIGNv
ZGUpCisgICAgICAgIDogbV9tYXAoY29kZS5zaXplKCkpCisgICAgeworICAgICAgICBmb3IgKEJh
c2ljQmxvY2sqIGJsb2NrIDogY29kZSkKKyAgICAgICAgICAgIG1fbWFwW2Jsb2NrXS5yZXNpemUo
YmxvY2stPnNpemUoKSk7CisgICAgfQorCisgICAgVCYgYXQoQmFzaWNCbG9jayogYmxvY2ssIHVu
c2lnbmVkIGluc3RJbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX21hcFtibG9ja11baW5z
dEluZGV4XTsKKyAgICB9CisKKyAgICBjb25zdCBUJiBhdChCYXNpY0Jsb2NrKiBibG9jaywgdW5z
aWduZWQgaW5zdEluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8
SW5zdE1hcCo+KHRoaXMpLT5nZXQoYmxvY2ssIGluc3RJbmRleCk7CisgICAgfQorICAgIAorcHJp
dmF0ZToKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBWZWN0b3I8VD4+IG1fbWFwOworfTsKKwor
fSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKworI2VuZGlmIC8vIEFpckluc3RNYXBfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNj
aW5nLmNwcAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDcgKzI5LDYgQEAKICNpZiBFTkFCTEUoQjNfSklUKQogCiAjaW5jbHVkZSAiQWlyQ29kZS5oIgot
I2luY2x1ZGUgIkFpckZpeFNwaWxsU2xvdFpEZWYuaCIKICNpbmNsdWRlICJBaXJJbnNlcnRpb25T
ZXQuaCIKICNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkFpckxpdmVuZXNz
LmgiCkBAIC0xMTI0LDExICsxMTIzLDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgLy8g
Y29tcGxldGUgcmVnaXN0ZXIgYWxsb2NhdGlvbi4gU28sIHdlIHJlY29yZCB0aGlzIGJlZm9yZSBz
dGFydGluZy4KICAgICAgICAgICAgICAgICBib29sIG1heUJlQ29hbGVzY2FibGUgPSBhbGxvY2F0
b3IubWF5QmVDb2FsZXNjYWJsZShpbnN0KTsKIAotICAgICAgICAgICAgICAgIC8vIE9uIFg4Nl82
NCwgTW92ZTMyIGlzIGNoZWFwZXIgaWYgd2Uga25vdyB0aGF0IGl0J3MgZXF1aXZhbGVudCB0byBh
IE1vdmUuIEl0J3MKKyAgICAgICAgICAgICAgICAvLyBNb3ZlMzIgaXMgY2hlYXBlciBpZiB3ZSBr
bm93IHRoYXQgaXQncyBlcXVpdmFsZW50IHRvIGEgTW92ZS4gSXQncwogICAgICAgICAgICAgICAg
IC8vIGVxdWl2YWxlbnQgaWYgdGhlIGRlc3RpbmF0aW9uJ3MgaGlnaCBiaXRzIGFyZSBub3Qgb2Jz
ZXJ2YWJsZSBvciBpZiB0aGUgc291cmNlJ3MgaGlnaAogICAgICAgICAgICAgICAgIC8vIGJpdHMg
YXJlIGFsbCB6ZXJvLiBOb3RlIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0aGUgb3Bwb3NpdGUgb3B0aW1p
emF0aW9uIGZvciBvdGhlcgogICAgICAgICAgICAgICAgIC8vIGFyY2hpdGVjdHVyZXMsIHdoaWNo
IG1heSBwcmVmZXIgTW92ZSBvdmVyIE1vdmUzMiwgYmVjYXVzZSBNb3ZlIGlzIGNhbm9uaWNhbCBh
bHJlYWR5LgotICAgICAgICAgICAgICAgIGlmICh0eXBlID09IEFyZzo6R1AgJiYgb3B0aW1pemVG
b3JYODZfNjQoKSAmJiBpbnN0Lm9wY29kZSA9PSBNb3ZlCisgICAgICAgICAgICAgICAgaWYgKHR5
cGUgPT0gQXJnOjpHUCAmJiBpbnN0Lm9wY29kZSA9PSBNb3ZlCiAgICAgICAgICAgICAgICAgICAg
ICYmIGluc3QuYXJnc1swXS5pc1RtcCgpICYmIGluc3QuYXJnc1sxXS5pc1RtcCgpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIGlmIChtX3RtcFdpZHRoLnVzZVdpZHRoKGluc3QuYXJnc1sxXS50bXAo
KSkgPD0gQXJnOjpXaWR0aDMyCiAgICAgICAgICAgICAgICAgICAgICAgICB8fCBtX3RtcFdpZHRo
LmRlZldpZHRoKGluc3QuYXJnc1swXS50bXAoKSkgPD0gQXJnOjpXaWR0aDMyKQpAQCAtMTE2OCw3
ICsxMTY3LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFkZFNwaWxsQW5kRmlsbChjb25zdCBDb2xv
cmluZ0FsbG9jYXRvcjx0eXBlPiYgYWxsb2NhdG9yLCBIYXNoU2V0PHVuc2lnbmVkPiYgdW5zcGls
bGFibGVUbXBzKQogICAgIHsKICAgICAgICAgSGFzaE1hcDxUbXAsIFN0YWNrU2xvdCo+IHN0YWNr
U2xvdHM7Ci0gICAgICAgIHVuc2lnbmVkIG5ld1N0YWNrU2xvdFRocmVzaG9sZCA9IG1fY29kZS5z
dGFja1Nsb3RzKCkuc2l6ZSgpOwogICAgICAgICBmb3IgKFRtcCB0bXAgOiBhbGxvY2F0b3Iuc3Bp
bGxlZFRtcHMoKSkgewogICAgICAgICAgICAgLy8gQWxsIHRoZSBzcGlsbGVkIHZhbHVlcyBiZWNv
bWUgdW5zcGlsbGFibGUuCiAgICAgICAgICAgICB1bnNwaWxsYWJsZVRtcHMuYWRkKEFic29sdXRl
VG1wTWFwcGVyPHR5cGU+OjphYnNvbHV0ZUluZGV4KHRtcCkpOwpAQCAtMTIwMiwxNiArMTIwMCwx
OSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIC8vIFRy
eSB0byByZXBsYWNlIHRoZSByZWdpc3RlciB1c2UgYnkgbWVtb3J5IHVzZSB3aGVuIHBvc3NpYmxl
LgotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnN0LmFyZ3Muc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgQXJnJiBhcmcgPSBpbnN0LmFyZ3NbaV07
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhcmcuaXNUbXAoKSAmJiBhcmcudHlwZSgpID09IHR5
cGUgJiYgIWFyZy5pc1JlZygpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHN0YWNr
U2xvdEVudHJ5ID0gc3RhY2tTbG90cy5maW5kKGFyZy50bXAoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoc3RhY2tTbG90RW50cnkgIT0gc3RhY2tTbG90cy5lbmQoKSAmJiBpbnN0LmFk
bWl0c1N0YWNrKGkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gQXJnOjpz
dGFjayhzdGFja1Nsb3RFbnRyeS0+dmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRpZFNwaWxsID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpbnN0LmZvckVhY2hBcmcoCisgICAg
ICAgICAgICAgICAgICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSwgQXJnOjpUeXBlIGFyZ1R5
cGUsIEFyZzo6V2lkdGggd2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmcu
aXNUbXAoKSAmJiBhcmdUeXBlID09IHR5cGUgJiYgIWFyZy5pc1JlZygpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXV0byBzdGFja1Nsb3RFbnRyeSA9IHN0YWNrU2xvdHMuZmluZChh
cmcudG1wKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFja1Nsb3RFbnRy
eSAhPSBzdGFja1Nsb3RzLmVuZCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYm
IGluc3QuYWRtaXRzU3RhY2soYXJnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGFja1Nsb3RFbnRyeS0+dmFsdWUtPmVuc3VyZVNpemUoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmb3JjZU1vdmUzMklmRGlkU3BpbGwgPyA0IDogQXJnOjpieXRlcyh3
aWR0aCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBBcmc6OnN0YWNr
KHN0YWNrU2xvdEVudHJ5LT52YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRpZFNwaWxsID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIH0pOwogCiAgICAgICAgICAgICAgICAgaWYgKGRpZFNw
aWxsICYmIGZvcmNlTW92ZTMySWZEaWRTcGlsbCkKICAgICAgICAgICAgICAgICAgICAgaW5zdC5v
cGNvZGUgPSBNb3ZlMzI7CkBAIC0xMjYyLDEyICsxMjYzLDYgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICB9KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotCi0gICAgICAgIGZpeFNwaWxs
U2xvdFpEZWYoCi0gICAgICAgICAgICBtX2NvZGUsCi0gICAgICAgICAgICBbJl0gKFN0YWNrU2xv
dCogc3RhY2tTbG90KSAtPiBib29sIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RhY2tTbG90
LT5pbmRleCgpID49IG5ld1N0YWNrU2xvdFRocmVzaG9sZDsKLSAgICAgICAgICAgIH0pOwogICAg
IH0KIAogICAgIENvZGUmIG1fY29kZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyTGl2ZW5lc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckxpdmVuZXNzLmgJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAkod29ya2luZyBjb3B5KQpAQCAtOTIsMTAgKzkyLDE5
IEBAIHN0cnVjdCBSZWdMaXZlbmVzc0FkYXB0ZXIgewogICAgIFJlZyBpbmRleFRvVmFsdWUodW5z
aWduZWQgaW5kZXgpIHsgcmV0dXJuIFJlZzo6ZnJvbUluZGV4KGluZGV4KTsgfQogfTsKIAorZW51
bSBjbGFzcyBLaWxsTW9kZSA6IGludDhfdCB7CisgICAgRE9BRWFybHlEZWZJbk5leHRJbnN0LAor
ICAgIERPQUxhdGVEZWYsCisgICAgRWFybHlVc2VLaWxsLAorICAgIExhdGVVc2VJblByZXZJbnN0
S2lsbAorfTsKKwogdGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRlcj4KLWNsYXNzIEFic3RyYWN0TGl2
ZW5lc3MgOiBwcml2YXRlIEFkYXB0ZXIgeworY2xhc3MgQWJzdHJhY3RMaXZlbmVzcyA6IHB1Ymxp
YyBBZGFwdGVyIHsKICAgICBzdHJ1Y3QgV29ya3NldDsKIHB1YmxpYzoKKyAgICB0eXBlZGVmIHR5
cGVuYW1lIEFkYXB0ZXI6OlRoaW5nIFRoaW5nOworICAgIAogICAgIEFic3RyYWN0TGl2ZW5lc3Mo
Q29kZSYgY29kZSkKICAgICAgICAgOiBBZGFwdGVyKGNvZGUpCiAgICAgICAgICwgbV93b3Jrc2V0
KEFkYXB0ZXI6Om1heEluZGV4KGNvZGUpKQpAQCAtMjIyLDYgKzIzMSwxMSBAQCBwdWJsaWM6CiAK
ICAgICAgICAgICAgIEl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gSXRlcmF0b3IobV9s
aXZlbmVzcywgbV9saXZlbmVzcy5tX3dvcmtzZXQuYmVnaW4oKSk7IH0KICAgICAgICAgICAgIEl0
ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIEl0ZXJhdG9yKG1fbGl2ZW5lc3MsIG1fbGl2ZW5l
c3MubV93b3Jrc2V0LmVuZCgpKTsgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBib29sIGNv
bnRhaW5zKGNvbnN0IHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nJiB0aGluZykgY29uc3QKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9saXZlbmVzcy5tX3dvcmtzZXQuY29u
dGFpbnMoQWRhcHRlcjo6dmFsdWVUb0luZGV4KHRoaW5nKSk7CisgICAgICAgICAgICB9CiAKICAg
ICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgIEFic3RyYWN0TGl2ZW5lc3MmIG1fbGl2ZW5lc3M7
CkBAIC0yMzIsNyArMjQ2LDE2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBJdGVyYWJs
ZShtX2xpdmVuZXNzKTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgZXhlY3V0ZSh1bnNpZ25l
ZCBpbnN0SW5kZXgpCisgICAgICAgIGJvb2wgaXNMaXZlKGNvbnN0IHR5cGVuYW1lIEFkYXB0ZXI6
OlRoaW5nJiB0aGluZykgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGxpdmUo
KS5jb250YWlucyh0aGluZyk7CisgICAgICAgIH0KKworICAgICAgICAvLyBDYWxscyB0aGUga2ls
bCBjYWxsYmFjayB3aXRoIHRoZSBraWxscyBhbmQgZGVzY3JpcHRpb25zIG9mIGhvdyB0aGV5IGdv
dCBraWxsZWQuIEFsc28KKyAgICAgICAgLy8gcGFzc2VzIHRoZSBpbnRlcm5hbCBpbmRleCBvZiB0
aGUgdGhpbmcgYmVpbmcga2lsbGVkLCBpZiB5b3Ugd2FudCB0byB1c2UgaW5kZXgtYmFzZWQKKyAg
ICAgICAgLy8gbGl2ZW5lc3MuCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtpbGxDYWxsYmFj
az4KKyAgICAgICAgdm9pZCBleGVjdXRlKHVuc2lnbmVkIGluc3RJbmRleCwgY29uc3QgS2lsbENh
bGxiYWNrJiBraWxsQ2FsbGJhY2spCiAgICAgICAgIHsKICAgICAgICAgICAgIEluc3QmIGluc3Qg
PSBtX2Jsb2NrLT5hdChpbnN0SW5kZXgpOwogICAgICAgICAgICAgYXV0byYgd29ya3NldCA9IG1f
bGl2ZW5lc3MubV93b3Jrc2V0OwpAQCAtMjQyLDIzICsyNjUsMzIgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgIEluc3QmIG5leHRJbnN0ID0gbV9ibG9jay0+YXQoaW5zdEluZGV4ICsgMSk7CiAg
ICAgICAgICAgICAgICAgbmV4dEluc3QuZm9yRWFjaDx0eXBlbmFtZSBBZGFwdGVyOjpUaGluZz4o
CiAgICAgICAgICAgICAgICAgICAgIFsmXSAodHlwZW5hbWUgQWRhcHRlcjo6VGhpbmcmIHRoaW5n
LCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIHR5cGUsIEFyZzo6V2lkdGgpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzRWFybHlEZWYocm9sZSkgJiYgQWRhcHRlcjo6YWNj
ZXB0c1R5cGUodHlwZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya3NldC5yZW1v
dmUoQWRhcHRlcjo6dmFsdWVUb0luZGV4KHRoaW5nKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoQXJnOjppc0Vhcmx5RGVmKHJvbGUpICYmIEFkYXB0ZXI6OmFjY2VwdHNUeXBlKHR5cGUp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBBZGFwdGVy
Ojp2YWx1ZVRvSW5kZXgodGhpbmcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
d29ya3NldC5yZW1vdmUoaW5kZXgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBr
aWxsQ2FsbGJhY2soaW5kZXgsIHRoaW5nLCBLaWxsTW9kZTo6RE9BRWFybHlEZWZJbk5leHRJbnN0
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIFRoZW4gaGFuZGxlIGRl
ZidzLgogICAgICAgICAgICAgaW5zdC5mb3JFYWNoPHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nPigK
ICAgICAgICAgICAgICAgICBbJl0gKHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nJiB0aGluZywgQXJn
OjpSb2xlIHJvbGUsIEFyZzo6VHlwZSB0eXBlLCBBcmc6OldpZHRoKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChBcmc6OmlzTGF0ZURlZihyb2xlKSAmJiBBZGFwdGVyOjphY2NlcHRzVHlwZSh0
eXBlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtzZXQucmVtb3ZlKEFkYXB0ZXI6OnZh
bHVlVG9JbmRleCh0aGluZykpOworICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0xhdGVE
ZWYocm9sZSkgJiYgQWRhcHRlcjo6YWNjZXB0c1R5cGUodHlwZSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gQWRhcHRlcjo6dmFsdWVUb0luZGV4KHRoaW5nKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghd29ya3NldC5yZW1vdmUoaW5kZXgpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGtpbGxDYWxsYmFjayhpbmRleCwgdGhpbmcsIEtpbGxN
b2RlOjpET0FMYXRlRGVmKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IH0pOwogCiAgICAgICAgICAgICAvLyBUaGVuIGhhbmRsZSB1c2Uncy4KICAgICAgICAgICAgIGlu
c3QuZm9yRWFjaDx0eXBlbmFtZSBBZGFwdGVyOjpUaGluZz4oCiAgICAgICAgICAgICAgICAgWyZd
ICh0eXBlbmFtZSBBZGFwdGVyOjpUaGluZyYgdGhpbmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5
cGUgdHlwZSwgQXJnOjpXaWR0aCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0Vh
cmx5VXNlKHJvbGUpICYmIEFkYXB0ZXI6OmFjY2VwdHNUeXBlKHR5cGUpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgd29ya3NldC5hZGQoQWRhcHRlcjo6dmFsdWVUb0luZGV4KHRoaW5nKSk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzRWFybHlVc2Uocm9sZSkgJiYgQWRhcHRlcjo6
YWNjZXB0c1R5cGUodHlwZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu
ZGV4ID0gQWRhcHRlcjo6dmFsdWVUb0luZGV4KHRoaW5nKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh3b3Jrc2V0LmFkZChpbmRleCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
a2lsbENhbGxiYWNrKGluZGV4LCB0aGluZywgS2lsbE1vZGU6OkVhcmx5VXNlS2lsbCk7CisgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9KTsKIAogICAgICAgICAgICAgLy8g
QW5kIGZpbmFsbHksIGhhbmRsZSB0aGUgbGF0ZSB1c2UncyBvZiB0aGUgcHJldmlvdXMgaW5zdHJ1
Y3Rpb24uCkBAIC0yNjYsMTcgKzI5OCwzMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgSW5z
dCYgcHJldkluc3QgPSBtX2Jsb2NrLT5hdChpbnN0SW5kZXggLSAxKTsKICAgICAgICAgICAgICAg
ICBwcmV2SW5zdC5mb3JFYWNoPHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nPigKICAgICAgICAgICAg
ICAgICAgICAgWyZdICh0eXBlbmFtZSBBZGFwdGVyOjpUaGluZyYgdGhpbmcsIEFyZzo6Um9sZSBy
b2xlLCBBcmc6OlR5cGUgdHlwZSwgQXJnOjpXaWR0aCkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKEFyZzo6aXNMYXRlVXNlKHJvbGUpICYmIEFkYXB0ZXI6OmFjY2VwdHNUeXBlKHR5cGUp
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtzZXQuYWRkKEFkYXB0ZXI6OnZhbHVl
VG9JbmRleCh0aGluZykpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNMYXRl
VXNlKHJvbGUpICYmIEFkYXB0ZXI6OmFjY2VwdHNUeXBlKHR5cGUpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBBZGFwdGVyOjp2YWx1ZVRvSW5kZXgodGhp
bmcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3b3Jrc2V0LmFkZChpbmRleCkp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbGxDYWxsYmFjayhpbmRleCwgdGhp
bmcsIEtpbGxNb2RlOjpMYXRlVXNlSW5QcmV2SW5zdEtpbGwpOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogCisgICAgICAgIHZvaWQgZXhlY3V0ZSh1bnNpZ25lZCBpbnN0SW5kZXgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGV4ZWN1dGUoCisgICAgICAgICAgICAgICAgaW5zdEluZGV4LAorICAgICAg
ICAgICAgICAgIFtdICh1bnNpZ25lZCwgY29uc3QgdHlwZW5hbWUgQWRhcHRlcjo6VGhpbmcmLCBL
aWxsTW9kZSkgeyB9KTsKKyAgICAgICAgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgQWJzdHJh
Y3RMaXZlbmVzcyYgbV9saXZlbmVzczsKICAgICAgICAgQmFzaWNCbG9jayogbV9ibG9jazsKICAg
ICB9OwogCisgICAgY29uc3QgVmVjdG9yPHVuc2lnbmVkPiYgcmF3TGl2ZUF0SGVhZChCYXNpY0Js
b2NrKiBibG9jaykKKyAgICB7CisgICAgICAgIHJldHVybiBtX2xpdmVBdEhlYWRbYmxvY2tdOwor
ICAgIH0KKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFVuZGVybHlpbmdJdGVyYWJsZT4KICAgICBj
bGFzcyBJdGVyYWJsZSB7CiAgICAgcHVibGljOgpAQCAtMzMwLDYgKzM3NywxMSBAQCBwdWJsaWM6
CiAgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9saXZl
bmVzcywgbV9pdGVyYWJsZS5iZWdpbigpKTsgfQogICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25z
dCB7IHJldHVybiBpdGVyYXRvcihtX2xpdmVuZXNzLCBtX2l0ZXJhYmxlLmVuZCgpKTsgfQogCisg
ICAgICAgIGJvb2wgY29udGFpbnMoY29uc3QgdHlwZW5hbWUgQWRhcHRlcjo6VGhpbmcmIHRoaW5n
KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9saXZlbmVzcy5tX3dvcmtz
ZXQuY29udGFpbnMoQWRhcHRlcjo6dmFsdWVUb0luZGV4KHRoaW5nKSk7CisgICAgICAgIH0KKwog
ICAgIHByaXZhdGU6CiAgICAgICAgIEFic3RyYWN0TGl2ZW5lc3MmIG1fbGl2ZW5lc3M7CiAgICAg
ICAgIGNvbnN0IFVuZGVybHlpbmdJdGVyYWJsZSYgbV9pdGVyYWJsZTsKQEAgLTM0NSw2ICszOTcs
OCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBJdGVyYWJsZTx0eXBlbmFtZSBBZGFwdGVyOjpJ
bmRleFNldD4oKnRoaXMsIG1fbGl2ZUF0VGFpbFtibG9ja10pOwogICAgIH0KIAorICAgIEluZGV4
U3BhcnNlU2V0PFVuc2FmZVZlY3Rvck92ZXJmbG93PiYgd29ya3NldCgpIHsgcmV0dXJuIG1fd29y
a3NldDsgfQorCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMb2NhbENhbGM7CiAgICAgZnJp
ZW5kIHN0cnVjdCBMb2NhbENhbGM6Okl0ZXJhYmxlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJPcHRpbWl6ZUJsb2NrT3JkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3B0aW1pemVCbG9ja09yZGVyLmNwcAkocmV2aXNp
b24gMTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcHRpbWl6ZUJs
b2NrT3JkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTczLDEwICs3Myw4IEBAIHByaXZhdGU6CiAKIH0g
Ly8gYW5vbnltb3VzIG5hbWVzcGFjZQogCi12b2lkIG9wdGltaXplQmxvY2tPcmRlcihDb2RlJiBj
b2RlKQorVmVjdG9yPEJhc2ljQmxvY2sqPiBibG9ja3NJbk9wdGltaXplZE9yZGVyKENvZGUmIGNv
ZGUpCiB7Ci0gICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJvcHRpbWl6ZUJsb2NrT3Jk
ZXIiKTsKLQogICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gYmxvY2tzSW5PcmRlcjsKIAogICAgIEJs
b2NrV29ya2xpc3QgZmFzdFdvcmtsaXN0OwpAQCAtMTEzLDYgKzExMSwxNSBAQCB2b2lkIG9wdGlt
aXplQmxvY2tPcmRlcihDb2RlJiBjb2RlKQogICAgIEFTU0VSVChmYXN0V29ya2xpc3QuaXNFbXB0
eSgpKTsKICAgICBBU1NFUlQoc2xvd1dvcmtsaXN0LmlzRW1wdHkoKSk7CiAKKyAgICByZXR1cm4g
YmxvY2tzSW5PcmRlcjsKK30KKwordm9pZCBvcHRpbWl6ZUJsb2NrT3JkZXIoQ29kZSYgY29kZSkK
K3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgIm9wdGltaXplQmxvY2tPcmRlciIp
OworCisgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBibG9ja3NJbk9yZGVyID0gYmxvY2tzSW5PcHRp
bWl6ZWRPcmRlcihjb2RlKTsKKyAgICAKICAgICAvLyBQbGFjZSBibG9ja3MgaW50byBDb2RlJ3Mg
YmxvY2sgbGlzdCBhY2NvcmRpbmcgdG8gdGhlIG9yZGVyaW5nIGluIGJsb2Nrc0luT3JkZXIuIFdl
IGRvIHRoaXMgYnkgbGVha2luZwogICAgIC8vIGFsbCBvZiB0aGUgYmxvY2tzIGFuZCB0aGVuIHJl
YWRvcHRpbmcgdGhlbS4KICAgICBmb3IgKGF1dG8mIGVudHJ5IDogY29kZS5ibG9ja0xpc3QoKSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3B0aW1pemVCbG9ja09yZGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcHRpbWl6
ZUJsb2NrT3JkZXIuaAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJPcHRpbWl6ZUJsb2NrT3JkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCwxMCArMjgs
MTggQEAKIAogI2lmIEVOQUJMRShCM19KSVQpCiAKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKIAorY2xhc3Mg
QmFzaWNCbG9jazsKIGNsYXNzIENvZGU7CiAKKy8vIFJldHVybnMgYSBsaXN0IG9mIGJsb2NrcyBz
b3J0ZWQgYWNjb3JkaW5nIHRvIHdoYXQgd291bGQgYmUgdGhlIGN1cnJlbnQgb3B0aW1hbCBvcmRl
ci4gVGhpcyBzaGFyZXMKKy8vIHNvbWUgcHJvcGVydGllcyB3aXRoIGEgcHJlLW9yZGVyIHRyYXZl
cnNhbC4gSW4gcGFydGljdWxhciwgZWFjaCBibG9jayB3aWxsIGFwcGVhciBhZnRlciBhdCBsZWFz
dAorLy8gb25lIG9mIGl0cyBwcmVkZWNlc3NvcnMuCitWZWN0b3I8QmFzaWNCbG9jayo+IGJsb2Nr
c0luT3B0aW1pemVkT3JkZXIoQ29kZSYpOworCiAvLyBSZW9yZGVycyB0aGUgYmFzaWMgYmxvY2tz
IHRvIGtlZXAgaG90IGJsb2NrcyBhdCB0aGUgdG9wLCBhbmQgbWF4aW1pemUgdGhlIGxpa2VsaWhv
b2QgdGhhdCBhIGZyZXF1ZW50bHkKIC8vIHRha2VuIGVkZ2UgaXMganVzdCBhIGZhbGwtdGhyb3Vn
aC4KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTY2F2ZW5nZVJlZ2lz
dGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJT
Y2F2ZW5nZVJlZ2lzdGVycy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclNjYXZlbmdlUmVnaXN0ZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDgyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJTY2F2ZW5nZVJlZ2lzdGVycy5oIgor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckJyZWFrQ3JpdGljYWxFZGdlcy5o
IgorI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJFbWl0U2h1ZmZsZS5oIgorI2lu
Y2x1ZGUgIkFpckluc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisj
aW5jbHVkZSAiQWlySW5zdE1hcC5oIgorI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgiCisjaW5jbHVk
ZSAiQWlyT3B0aW1pemVCbG9ja09yZGVyLmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgor
I2luY2x1ZGUgIkFpclJlZ2lzdGVyUHJpb3JpdHkuaCIKKyNpbmNsdWRlICJBaXJUbXBXaWR0aC5o
IgorI2luY2x1ZGUgIkFpclVzZUNvdW50cy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK25hbWVzcGFjZSB7CisKK3RlbXBsYXRlPEFyZzo6VHlw
ZSB0eXBlPgorY2xhc3MgU2NhdmVuZ2VSZWdpc3RlcnMgeworcHVibGljOgorICAgIFNjYXZlbmdl
UmVnaXN0ZXJzKENvZGUmIGNvZGUpCisgICAgICAgIDogbV9jb2RlKGNvZGUpCisgICAgICAgICwg
bV9saXZlbmVzcyhjb2RlKQorICAgICAgICAsIG1fZGVhdGhzKGNvZGUpCisgICAgICAgICwgbV91
c2VDb3VudHMoY29kZSkKKyAgICAgICAgLCBtX3RtcFdpZHRoKGNvZGUpCisgICAgICAgICwgbV9p
bnNlcnRpb25TZXQoY29kZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBydW4oKQorICAgIHsK
KyAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBibG9ja3MgPSBibG9ja3NJbk9wdGltaXplZE9y
ZGVyKG1fY29kZSk7CisKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgbV9jaGFuZ2Vk
ID0gZmFsc2U7CisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogYmxvY2tzKSB7
CisgICAgICAgICAgICAgICAgbV9ibG9jayA9IGJsb2NrOworICAgICAgICAgICAgICAgIHByb3Bh
Z2F0ZVZhbHVlc0luQmxvY2soKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghbV9j
aGFuZ2VkKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBjb21wdXRlRGVhdGhzKCk7CisgICAgICAgIGluaXRpYWxpemVCbG9ja1JlZ1N0YXRlcygp
OworCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBibG9ja3MpIHsKKyAgICAgICAg
ICAgIG1fYmxvY2sgPSBibG9jazsKKyAgICAgICAgICAgIHByb2Nlc3NCbG9jaygpOworICAgICAg
ICB9CisgICAgfQorCitwcml2YXRlOgorICAgIHN0cnVjdCBUbXBJbmZvIHsKKyAgICAgICAgVG1w
SW5mbygpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZXhwbGljaXQg
VG1wSW5mbyhSZWcgcmVnKQorICAgICAgICAgICAgOiByZWcocmVnKQorICAgICAgICB7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGludDY0X3QgY29uc3RhbnQgeyAwIH07CisgICAgICAg
IFJlZyByZWc7CisgICAgICAgIGJvb2wgaGFzQ29uc3RhbnQgeyBmYWxzZSB9OworICAgICAgICBi
b29sIGhhc1NwaWxsIHsgZmFsc2UgfTsKKyAgICB9OworCisgICAgc3RydWN0IFJlZ0luZm8gewor
ICAgICAgICBSZWdJbmZvKCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgZXhwbGlj
aXQgUmVnSW5mbyhUbXAgdG1wKQorICAgICAgICAgICAgOiB0bXAodG1wKQorICAgICAgICB7Cisg
ICAgICAgIH0KKworICAgICAgICBUbXAgdG1wOworICAgICAgICBib29sIGlzTG9ja2VkIHsgZmFs
c2UgfTsKKyAgICB9OworCisgICAgdm9pZCBwcm9wYWdhdGVWYWx1ZXNJbkJsb2NrKCkKKyAgICB7
CisgICAgICAgIG1fc3RhdGUgPSBtX2F0SGVhZFttX2Jsb2NrXTsKKyAgICAgICAgZm9yIChJbnN0
JiBpbnN0IDogKm1fYmxvY2spCisgICAgICAgICAgICBwcm9wYWdhdGVWYWx1ZXMoaW5zdCk7CisK
KyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgOiBtX2Jsb2NrLT5zdWNjZXNzb3JC
bG9ja3MoKSkgeworICAgICAgICAgICAgU3RhdGUmIGF0SGVhZCA9IG1fYXRIZWFkW3N1Y2Nlc3Nv
cl07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghYXRIZWFkLnZpc2l0ZWRCeVByb3Bh
Z2F0aW9uKSB7CisgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IGF0SGVhZC5tYXBw
aW5nKSB7CisgICAgICAgICAgICAgICAgICAgIFRtcEluZm8mIHNyY0luZm8gPSBnZXRJbmZvKGVu
dHJ5LmtleSk7CisgICAgICAgICAgICAgICAgICAgIFRtcEluZm8mIGRzdEluZm8gPSBlbnRyeS52
YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgZHN0SW5mby5jb25zdGFudCA9IHNyY0luZm8uY29u
c3RhbnQ7CisgICAgICAgICAgICAgICAgICAgIGRzdEluZm8uaGFzQ29uc3RhbnQgPSBzcmNJbmZv
Lmhhc0NvbnN0YW50OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhdEhlYWQu
dmlzaXRlZEJ5UHJvcGFnYXRpb24gPSB0cnVlOworICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9
IHRydWU7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBhdEhlYWQubWFwcGluZykgeworICAgICAgICAgICAg
ICAgIFRtcEluZm8mIGRzdEluZm8gPSBlbnRyeS52YWx1ZTsKKyAgICAgICAgICAgICAgICBpZiAo
IWRzdEluZm8uaGFzQ29uc3RhbnQpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgIFRtcEluZm8mIHNyY0luZm8gPSBnZXRJbmZvKGVudHJ5LmtleSk7CisgICAg
ICAgICAgICAgICAgaWYgKCFzcmNJbmZvLmhhc0NvbnN0YW50IHx8IHNyY0luZm8uY29uc3RhbnQg
IT0gZHN0SW5mby5jb25zdGFudCkgeworICAgICAgICAgICAgICAgICAgICBkc3RJbmZvLmhhc0Nv
bnN0YW50ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAor
ICAgIHZvaWQgcHJvcGFnYXRlVmFsdWVzKEluc3QmIGluc3QpCisgICAgeworICAgICAgICBpZiAo
dHlwZSA9PSBBcmc6OkdQCisgICAgICAgICAgICAmJiBpbnN0Lm9wY29kZSA9PSBNb3ZlCisgICAg
ICAgICAgICAmJiBpbnN0LmFyZ3NbMF0uaXNTb21lSW1tKCkKKyAgICAgICAgICAgICYmIGluc3Qu
YXJnc1sxXS5pc1RtcCgpKSB7CisgICAgICAgICAgICBUbXBJbmZvJiBpbmZvID0gZ2V0SW5mbyhp
bnN0LmFyZ3NbMV0udG1wKCkpOworICAgICAgICAgICAgaW5mby5oYXNDb25zdGFudCA9IHRydWU7
CisgICAgICAgICAgICBpbmZvLmNvbnN0YW50ID0gaW5zdC5hcmdzWzFdLnZhbHVlKCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBGSVhNRTogTmVlZCB0aGUg
ZXF1aXZhbGVudCBmb3IgRlAuCisKKyAgICAgICAgSW5zdDo6Zm9yRWFjaERlZldpdGhFeHRyYUNs
b2JiZXJlZFJlZ3M8VG1wPigKKyAgICAgICAgICAgICZpbnN0LCAmaW5zdCwgLy8gR2V0IGJvdGgg
bGF0ZSBhbmQgZWFybHkgZGVmcyBmb3IgaW5zdC4KKyAgICAgICAgICAgIFsmXSAoVG1wIHRtcCwg
QXJnOjpSb2xlLCBBcmc6OlR5cGUgdG1wVHlwZSwgQXJnOjpXaWR0aCkgeworICAgICAgICAgICAg
ICAgIGlmICh0bXBUeXBlICE9IHR5cGUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICBnZXRJbmZvKHRtcCkuaGFzQ29uc3RhbnQgPSBmYWxzZTsKKyAgICAgICAg
ICAgIH0pOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXB1dGVEZWF0aHMoKQorICAgIHsKKyAg
ICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fY29kZSkgeworICAgICAgICAgICAgdHlw
ZW5hbWUgVG1wTGl2ZW5lc3M8dHlwZT46OkxvY2FsQ2FsYyBsb2NhbENhbGMobV9saXZlbmVzcywg
YmxvY2spOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSBibG9jay0+c2l6
ZSgpOyBpbnN0SW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICBsb2NhbENhbGMuZXhlY3V0ZSgK
KyAgICAgICAgICAgICAgICAgICAgaW5zdEluZGV4LAorICAgICAgICAgICAgICAgICAgICBbJl0g
KHVuc2lnbmVkLCBUbXAgdG1wLCBLaWxsTW9kZSBraWxsTW9kZSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgc3dpdGNoIChraWxsTW9kZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBLaWxsTW9kZTo6RE9BRWFybHlEZWZJbk5leHRJbnN0OgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZGVhdGhzLmF0KGJsb2NrLCBpbnN0SW5kZXggKyAxKS5hcHBlbmQoRGVhdGgodG1w
LCBFYXJseURlYXRoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlIEtpbGxNb2RlOjpET0FMYXRlRGVmOgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fZGVhdGhzLmF0KGJsb2NrLCBpbnN0SW5kZXgpLmFwcGVuZChE
ZWF0aCh0bXAsIExhdGVEZWF0aCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBLaWxsTW9kZTo6RWFybHlVc2VLaWxsOgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGVhdGhzLmF0KGJsb2NrLCBpbnN0SW5kZXgp
LmFwcGVuZChEZWF0aCh0bXAsIEVhcmx5RGVhdGgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgS2lsbE1vZGU6OkxhdGVV
c2VJblByZXZJbnN0S2lsbDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2RlYXRocy5h
dChibG9jaywgaW5zdEluZGV4IC0gMSkuYXBwZW5kKERlYXRoKHRtcCwgTGF0ZURlYXRoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIHZvaWQgaW5pdGlhbGl6ZUJsb2NrUmVnU3RhdGVzKCkKKyAgICB7Cisg
ICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBtX2NvZGVbMF07CisgICAgICAgIAorICAgICAgICBT
dGF0ZSYgc3RhdGUgPSBtX2F0SGVhZFtyb290XTsKKyAgICAgICAgZm9yIChUbXAgdG1wIDogbV9s
aXZlbmVzcy5saXZlQXRIZWFkKHJvb3QpKSB7CisgICAgICAgICAgICBpZiAoIXRtcC5pc1JlZygp
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBz
dGF0ZS5tYXBwaW5nLmFkZCh0bXAsIFRtcEluZm8odG1wLnJlZygpKSk7CisgICAgICAgICAgICBz
dGF0ZS5yZXZlcnNlTWFwcGluZ1t0bXAucmVnKCldID0gUmVnSW5mbyh0bXApOworICAgICAgICB9
CisgICAgfQorCisgICAgdm9pZCBwcm9jZXNzQmxvY2soKQorICAgIHsKKyAgICAgICAgbV9zdGF0
ZSA9IG1fYXRIZWFkW21fYmxvY2tdOworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3N0YXRlLmlz
U2V0dGxlZCk7CisKKyAgICAgICAgZm9yIChtX2luc3RJbmRleCA9IDA7IG1faW5zdEluZGV4IDwg
bV9ibG9jay0+c2l6ZSgpOyArK21faW5zdEluZGV4KSB7CisgICAgICAgICAgICBJbnN0JiBpbnN0
ID0gbV9ibG9jay0+YXQobV9pbnN0SW5kZXgpOworICAgICAgICAgICAgcHJvY2Vzc0luc3QoaW5z
dCk7CisgICAgICAgICAgICBwcm9wYWdhdGVWYWx1ZXMoaW5zdCk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAobV9ibG9jay0+bnVtU3VjY2Vzc29ycygpID4gMSkgeworICAgICAgICAgICAgZm9y
IChCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgOiBtX2Jsb2NrLT5zdWNjZXNzb3JCbG9ja3MoKSkKKyAg
ICAgICAgICAgICAgICBib290QmxvY2soc3VjY2Vzc29yKTsKKyAgICAgICAgfSBlbHNlIGlmICht
X2Jsb2NrLT5udW1TdWNjZXNzb3JzKCkgPT0gMSkgeworICAgICAgICAgICAgQmFzaWNCbG9jayog
c3VjY2Vzc29yID0gbV9ibG9jay0+c3VjY2Vzc29yQmxvY2soMCk7CisgICAgICAgICAgICBpZiAo
bV9hdEhlYWRbc3VjY2Vzc29yXS5pc1NldHRsZWQpCisgICAgICAgICAgICAgICAgY29uZm9ybVRv
KHN1Y2Nlc3Nvcik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYm9vdEJsb2Nr
KHN1Y2Nlc3Nvcik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1faW5zZXJ0aW9uU2V0
LmV4ZWN1dGUobV9ibG9jayk7CisgICAgfQorCisgICAgdm9pZCBwcm9jZXNzSW5zdChJbnN0JiBp
bnN0KQorICAgIHsKKyAgICAgICAgLy8gT3VyIHN0YXRlIG1hcHBpbmcgdGVsbHMgdXMgd2hhdCBp
cyBsaXZlIGF0IGFueSBnaXZlbiBtb21lbnQuIFdlIHVzZSBhIHNlcGFyYXRlCisgICAgICAgIC8v
IGxpdmVuZXNzIHBhc3MgdG8gY29sbGVjdCB0aGUga2lsbCBsaXN0cyBmb3IgYWxsIGluc3RydWN0
aW9ucy4gVGhlIGtpbGwgbGlzdHMgdGVsbCB1cworICAgICAgICAvLyBhYm91dCB0aGUgd2F5cyB0
aGF0IHRoaW5ncyBkaWUgYXQgYW4gSW5zdC4gVGhlcmUgYXJlIGZvdXIgd2F5czoKKyAgICAgICAg
Ly8gCisgICAgICAgIC8vIC0gQW4gZWFybHkgZGVmIGNvdWxkIGRpZSBhYm92ZSBhbiBJbnN0Lgor
ICAgICAgICAvLyAtIEFuIGVhcmx5IHVzZSBjb3VsZCBraWxsIGFib3ZlIGFuIEluc3QuCisgICAg
ICAgIC8vIC0gQSBsYXRlIGRlZiBjb3VsZCBkaWUgYmVsb3cgYW4gSW5zdC4KKyAgICAgICAgLy8g
LSBBIGxhdGUgdXNlIGNvdWxkIGtpbGwgYmVsb3cgYW4gSW5zdC4KKyAgICAgICAgLy8gCisgICAg
ICAgIC8vIE9uY2Ugd2UgYXJlIGFybWVkIHdpdGggb3VyIHN0YXRlIG1hcHBpbmcgYW5kIHRoZSBr
aWxsIGxpc3RzLCB3ZSBjYW4gcHJvY2VzcyB0aGUgSW5zdAorICAgICAgICAvLyBpbiB0aGUgb3Jk
ZXIgb2YgaXRzIGV4ZWN1dGlvbiBhbmQgdXBkYXRlIHRoZSBzdGF0ZSBtYXBwaW5nIGJhc2VkIG9u
IGRlZnMgYW5kIGtpbGwKKyAgICAgICAgLy8gbGlzdHMuCisgICAgICAgIC8vIAorICAgICAgICAv
LyBXZSBzdGFydCBhYm92ZSB0aGUgSW5zdCB3aXRoIGEgc3RhdGUgdGhhdCB0ZWxscyB1cyB3aGF0
IGlzIGxpdmUgYmVmb3JlIGl0LiBUaGlzCisgICAgICAgIC8vIGluY2x1ZGVzIHRoaW5ncyB0aGF0
IHdpbGwgZGllIGF0IHRoZSB0b3AuIFdlIGNhbiBoYW5kbGUgZWFybHkgdXNlcyBhbmQgZGVmcyBi
eSBnaXZpbmcKKyAgICAgICAgLy8gdGhlbSByZWdpc3RlcnMgdGhhdCBhcmUgbm90IGxpdmUuIFdl
IGtub3cgd2hpY2ggcmVnaXN0ZXJzIGJlY29tZSBsaXZlIGJlY2F1c2Ugb3VyCisgICAgICAgIC8v
IG1hcHBpbmcgdGVsbHMgdXMgdGhpcy4gVGhlbiB3ZSBjYW4gYXBwbHkgdGhlIGVhcmx5IGRlYXRo
cy4gVGhlbiB3ZSBwcm9jZXNzIGxhdGUgdXNlcworICAgICAgICAvLyBhbmQgZGVmcywgYW5kIHRo
ZW4gYXBwbHkgdGhlIGxhdGUgZGVhdGhzLgorICAgICAgICAvLyAKKyAgICAgICAgLy8gVGhpcyBh
bGdvcml0aG0gbXVzdCBwcm9jZWVkIGluIHRoZSBvcmRlciBvZiB0aGUgSW5zdCdzIGV4ZWN1dGlv
bi4gV2UgY2FuIHVzZSB0aGUKKyAgICAgICAgLy8gbm90aW9uIG9mIGxvY2tpbmcgYXQgZWFjaCBz
dGFnZSAtIGVhcmx5IGFuZCB0aGVuIGxhdGUgLSB0byBpbmRpY2F0ZSB3aGljaCByZWdpc3RlcnMK
KyAgICAgICAgLy8gaGF2ZSBhbHJlYWR5IGJlZW4gcHVycG9zZWQuIEFsbCBlYXJseSB1c2VzIHdp
bGwgaG9sZCB0aGUgbG9jayB3aGlsZSB3ZSBhcmUgcHJvY2Vzc2luZworICAgICAgICAvLyB0aGUg
ZWFybHkgcGFydCBvZiB0aGUgaW5zdHJ1Y3Rpb24sIGFuZCB0aGVuIHJlbGVhc2UgaXQgYmVmb3Jl
IHdlIHN0YXJ0IHByb2Nlc3NpbmcgdGhlCisgICAgICAgIC8vIGxhdGUgc3R1ZmYuIEluIGJldHdl
ZW4gZWFybHkgYW5kIGxhdGUsIGFmdGVyIHdlIGhhdmUgdW5sb2NrZWQgdGhpbmdzIHVzZWQgZWFy
bHksIHdlCisgICAgICAgIC8vIGNhbiBwZXJmb3JtIGVhcmx5IGRlYXRocy4gQWxsIGVhcmx5IGRl
ZnMgd2lsbCBob2xkIHRoZSBsb2NrIGVhcmx5IGFuZCB0aGVuIHJlbGVhc2UgaXQKKyAgICAgICAg
Ly8gYWZ0ZXIgd2UgcHJvY2VzcyBsYXRlIHRoaW5ncy4gQXMgYSBzcGVjaWFsIGNhc2UsIFVzZURl
ZiB3aWxsIGFsc28gcmVsZWFzZSB0aGUgbG9jaworICAgICAgICAvLyBsYXRlLgorICAgICAgICAv
LyAKKyAgICAgICAgLy8gVGhpbmdzIGdldCB3ZWlyZCB3aXRoIFVzZURlZi4gTHVja3kgZm9yIHVz
LCBJbnN0cyB3aWxsIGhhdmUgYSBzbWFsbCBudW1iZXIgb2YgVXNlRGVmcywKKyAgICAgICAgLy8g
c28gdGhlIGFsZ29yaXRobSBkb2Vzbid0IGhhdmUgdG8gYmUgZWZmaWNpZW50IGFuZCB3ZSBjYW4g
YmUgc3VyZSB0aGF0IGlmIHdlIGhhbmRsZQorICAgICAgICAvLyBVc2VEZWZzIGVhcmx5LCB0aGVu
IHRoZSBncmVlZHkgYXBwcm9hY2ggc2hvdWxkIGp1c3Qgd29yay4gVGhlIGxvY2tpbmcgc3RyYXRl
Z3kgZW5zdXJlcworICAgICAgICAvLyB0aGF0IHdlIHdvbid0IHRyeSB0byByZXVzZSB0aGUgcmVn
aXN0ZXIgd2UgYWxyZWFkeSBwaWNrZWQuIFRoZSBvbmx5IGFkZGl0aW9uYWwgbG9naWMKKyAgICAg
ICAgLy8gZm9yIFVzZURlZiBpcyB0aGF0IHdoZW4gd2UgcGljayBhIHJlZ2lzdGVyIGZvciBpdCwg
d2hpY2ggaGFwcGVucyBlYXJseSwgd2UgbG9vayBhaGVhZAorICAgICAgICAvLyB0byBtYWtlIHN1
cmUgdGhhdCB3ZSBkaWRuJ3QgYWxyZWFkeSBsb2NrIHRoZSByZWdpc3RlciBsYXRlLiBUaGUgb25s
eSByZWdpc3RlcnMgdGhhdCB3ZQorICAgICAgICAvLyBjb3VsZCBoYXZlIGFscmVhZHkgbG9ja2Vk
IGxhdGUgYXJlIHRoZSBvbmVzIHRoYXQgYXJlIGNsb2JiZXJlZCBsYXRlIG9yIGRlZmluZWQgbGF0
ZS4KKyAgICAgICAgLy8gCisgICAgICAgIC8vIE9uZSBvZiB0aGUgYmVhdXRpZnVsIHRoaW5ncyBh
Ym91dCB0aGlzIGFwcHJvYWNoIGlzIHRoYXQgd2UgY2FuIHByb2Nlc3MgdGhlIEluc3QKKyAgICAg
ICAgLy8gaW4tcGxhY2UuIFdlIHdvbid0IGVkaXQgdGhlIHVzZXMgdW50aWwgd2UgaGF2ZSBhY2Nv
dW50ZWQgZm9yIHRoZW0uIFdlIHdvbid0IGVkaXQgdGhlCisgICAgICAgIC8vIGRlZnMgdW50aWwg
d2UgaGF2ZSBhY2NvdW50ZWQgZm9yIHRoZW0uIFNvLCB3ZSBjYW4gY29tcHV0ZSBmb3J3YXJkIGxp
dmVuZXNzIHdoaWxlIGFsc28KKyAgICAgICAgLy8gZWRpdGluZyB0aGUgaW5zdHJ1Y3Rpb24uCisK
KyAgICAgICAgLy8gU3BpbGwgYW5kIGxvY2sgYWxsIGVhcmx5IGNsb2JiZXJzLiBTcGlsbCBhbGwg
bGF0ZSBjbG9iYmVycywgYnV0IGRvbid0IGxvY2sgdGhvc2UgeWV0LgorICAgICAgICBpZiAoaW5z
dC5vcGNvZGUgPT0gUGF0Y2gpIHsKKyAgICAgICAgICAgIGluc3QuZXh0cmFFYXJseUNsb2JiZXJl
ZFJlZ3MoKS5mb3JFYWNoKAorICAgICAgICAgICAgICAgIFsmXSAoUmVnIHJlZykgeworICAgICAg
ICAgICAgICAgICAgICBzcGlsbChyZWcpOworICAgICAgICAgICAgICAgICAgICBsb2NrKHJlZyk7
CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBNYWtlIHN1cmUg
dGhhdCB3ZSBsb2NrIGFscmVhZHktYWxsb2NhdGVkIHJlZ2lzdGVycyB0aGF0IGFyZSBsaXZlIGVh
cmx5LiBUaGlzIGluY2x1ZGVzIGFsbAorICAgICAgICAvLyBlYXJseSB1c2VzLCBlYXJseSBkZWZz
LCBhbmQgbGF0ZSB1c2VzLgorICAgICAgICBpbnN0LmZvckVhY2hUbXAoCisgICAgICAgICAgICBb
Jl0gKFRtcCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIHRtcFR5cGUsIEFyZzo6V2lk
dGgpIHsKKyAgICAgICAgICAgICAgICBpZiAodG1wVHlwZSAhPSB0eXBlKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgaWYgKCF0bXAuaXNSZWcoKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGlmICghQXJnOjppc0Vhcmx5
RGVmKHJvbGUpICYmICFBcmc6OmlzQW55VXNlKHJvbGUpICYmIHJvbGUgIT0gQXJnOjpVc2VBZGRy
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgbG9jayhmaWxsKHRtcCwgcm9sZSkpOworICAgICAgICAgICAgfSk7CisKKyAgICAg
ICAgLy8gQWxsb2NhdGUgcmVnaXN0ZXJzIHRvIHRob3NlIHRoaW5ncyB0aGF0IGRvbid0IGFkbWl0
IHN0YWNrLgorICAgICAgICBpbnN0LmZvckVhY2hBcmcoCisgICAgICAgICAgICBbJl0gKEFyZyYg
YXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIGFyZ1R5cGUsIEFyZzo6V2lkdGggd2lkdGgp
IHsKKyAgICAgICAgICAgICAgICBpZiAoYXJnVHlwZSAhPSB0eXBlKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgaWYgKCFBcmc6OmlzRWFybHlEZWYocm9sZSkg
JiYgIUFyZzo6aXNBbnlVc2Uocm9sZSkgJiYgcm9sZSAhPSBBcmc6OlVzZUFkZHIpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgICAgIGlmIChhcmcuaXNUbXAoKSkg
eworICAgICAgICAgICAgICAgICAgICBpZiAoYXJnLmlzUmVnKCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0LmFkbWl0c1N0YWNr
KGFyZykpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
ICAgIGFyZyA9IFRtcChsb2NrKGZpbGwoYXJnLnRtcCgpLCByb2xlKSkpOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYXJn
LmZvckVhY2hUbXAoCisgICAgICAgICAgICAgICAgICAgIHJvbGUsIHR5cGUsIHdpZHRoLAorICAg
ICAgICAgICAgICAgICAgICBbJl0gKFRtcCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBl
LCBBcmc6OldpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSBUbXAobG9jayhm
aWxsKHRtcCwgcm9sZSkpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9
KTsKKworICAgICAgICAvLyBBbGxvY2F0ZSByZWdpc3RlcnMgdG8gdGhvc2UgdGhpbmdzIHRoYXQg
YWRtaXQgc3RhY2sgYnV0IGFyZSBub3QgY29sZC4gS2VlcCB0aGlzIHVwIHNvCisgICAgICAgIC8v
IGxvbmcgYXMgd2Ugc3RpbGwgaGF2ZSByZWdpc3RlcnMuCisgICAgICAgIGluc3QuZm9yRWFjaEFy
ZygKKyAgICAgICAgICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUg
YXJnVHlwZSwgQXJnOjpXaWR0aCkgeworICAgICAgICAgICAgICAgIGlmIChhcmdUeXBlICE9IHR5
cGUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBpZiAoIUFy
Zzo6aXNBbnlVc2Uocm9sZSkgJiYgIUFyZzo6aXNFYXJseURlZihyb2xlKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzQ29sZFVzZShyb2xl
KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGlmICghYXJn
LmlzVG1wKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBp
ZiAoYXJnLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAg
ICAgICAgIFJlZyByZWcgPSBmaWxsKGFyZy50bXAoKSwgcm9sZSwgRG9udFNwaWxsKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIXJlZykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgIGFyZyA9IFRtcChsb2NrKHJlZykpOworICAgICAgICAgICAgfSk7CisKKyAgICAg
ICAgLy8gRmlndXJlIG91dCB3aGF0IHRvIGRvIHdpdGggZXZlcnl0aGluZyBlbHNlLgorICAgICAg
ICBpbnN0LmZvckVhY2hBcmcoCisgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUg
cm9sZSwgQXJnOjpUeXBlIGFyZ1R5cGUsIEFyZzo6V2lkdGggd2lkdGgpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoYXJnVHlwZSAhPSB0eXBlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgaWYgKCFBcmc6OmlzQW55VXNlKHJvbGUpICYmICFBcmc6OmlzRWFybHlE
ZWYocm9sZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBp
ZiAoIWFyZy5pc1RtcCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgaWYgKGFyZy5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgICAgICAgICBUbXBJbmZvJiBpbmZvID0gZ2V0SW5mbyhhcmcudG1wKCkpOworICAgICAg
ICAgICAgICAgIGlmIChpbmZvLnJlZykgeworICAgICAgICAgICAgICAgICAgICBhcmcgPSBUbXAo
bG9jayhpbmZvLnJlZykpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzbG90ID0gc3BpbGxTbG90KGFy
Zy50bXAoKSk7CisgICAgICAgICAgICAgICAgZW5zdXJlV2lkdGgoc2xvdCwgd2lkdGgpOworICAg
ICAgICAgICAgICAgIGFyZyA9IEFyZzo6c3RhY2soc2xvdCk7CisgICAgICAgICAgICB9KTsKKwor
ICAgICAgICAvLyBVbmxvY2sgYWxsIG9mIHRoZSBlYXJseSBjbG9iYmVyZWQgcmVnaXN0ZXJzLgor
ICAgICAgICBpZiAoaW5zdC5vcGNvZGUgPT0gUGF0Y2gpIHsKKyAgICAgICAgICAgIGluc3QuZXh0
cmFFYXJseUNsb2JiZXJlZFJlZ3MoKS5mb3JFYWNoKAorICAgICAgICAgICAgICAgIFsmXSAoUmVn
IHJlZykgeworICAgICAgICAgICAgICAgICAgICB1bmxvY2socmVnKTsKKyAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFVubG9jayBhbGwgb2YgdGhlIGVhcmx5IHVz
ZXMuIFRoaXMgcGVybWl0cyB0aG9zZSByZWdpc3RlcnMgdG8gYmUgdXNlZCBmb3Igb3RoZXIgdGhp
bmdzLgorICAgICAgICAvLyBJdCBldmVuIG1lYW5zIHRoYXQgd2UgbWlnaHQgc3BpbGwgdGhlIHVz
ZWQgcmVnaXN0ZXIgaW4gdGhlIHNodWZmbGUgZHVlIHRvIGEgbGF0ZSBkZWYgdGhhdAorICAgICAg
ICAvLyBjb3VsZCB1c2UgdGhhdCByZWdpc3Rlci4KKyAgICAgICAgaW5zdC5mb3JFYWNoVG1wKAor
ICAgICAgICAgICAgWyZdIChUbXAmIHRtcCwgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSBhcmdU
eXBlLCBBcmc6OldpZHRoKSB7CisgICAgICAgICAgICAgICAgaWYgKGFyZ1R5cGUgIT0gdHlwZSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGlmICghQXJnOjpp
c0Vhcmx5VXNlKHJvbGUpICYmIHJvbGUgIT0gQXJnOjpVc2VBZGRyKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQodG1wLmlzUmVnKCkp
OworICAgICAgICAgICAgICAgIHVubG9jayh0bXAucmVnKCkpOworICAgICAgICAgICAgfSk7CisK
KyAgICAgICAgLy8gQXBwbHkgYWxsIG9mIHRoZSBlYXJseSBkZWF0aHMuCisgICAgICAgIGZvciAo
RGVhdGgmIGRlYXRoIDogbV9kZWF0aHMuYXQobV9ibG9jaywgbV9pbnN0SW5kZXgpKSB7CisgICAg
ICAgICAgICBpZiAoZGVhdGguZGVhdGhNb2RlID09IEVhcmx5RGVhdGgpCisgICAgICAgICAgICAg
ICAga2lsbChkZWF0aC50bXApOworICAgICAgICB9CisKKyAgICAgICAgLy8gTG9jayBhbGwgb2Yg
dGhlIGxhdGUgY2xvYmJlcmVkIHJlZ2lzdGVycy4KKyAgICAgICAgaWYgKGluc3Qub3Bjb2RlID09
IFBhdGNoKSB7CisgICAgICAgICAgICBpbnN0LmV4dHJhQ2xvYmJlcmVkUmVncygpLmZvckVhY2go
CisgICAgICAgICAgICAgICAgWyZdIChSZWcgcmVnKSB7CisgICAgICAgICAgICAgICAgICAgIHNw
aWxsKHJlZyk7CisgICAgICAgICAgICAgICAgICAgIGxvY2socmVnKTsKKyAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZpbGwgYW5kIGxvY2sgYWxsIG9mIHRoZSBs
YXRlIGRlZnMuCisgICAgICAgIGluc3QuZm9yRWFjaEFyZygKKyAgICAgICAgICAgIFsmXSAoQXJn
JiBhcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgYXJnVHlwZSwgQXJnOjpXaWR0aCkgewor
ICAgICAgICAgICAgICAgIGlmIChhcmdUeXBlICE9IHR5cGUpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgICBpZiAoIUFyZzo6aXNMYXRlRGVmKHJvbGUpKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgaWYgKCFhcmcuaXNSZWco
KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGxvY2soZmls
bChhcmcudG1wKCksIHJvbGUpKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgIC8vIEFzc2ln
biByZWdpc3RlcnMgdG8gdGhvc2UgbGF0ZSBkZWZzIHRoYXQgZG9uJ3QgYWRtaXQgc3RhY2suCisg
ICAgICAgIGluc3QuZm9yRWFjaEFyZygKKyAgICAgICAgICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6
Um9sZSByb2xlLCBBcmc6OlR5cGUgYXJnVHlwZSwgQXJnOjpXaWR0aCkgeworICAgICAgICAgICAg
ICAgIGlmIChhcmdUeXBlICE9IHR5cGUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICBpZiAoIUFyZzo6aXNMYXRlRGVmKHJvbGUpKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgaWYgKCFhcmcuaXNUbXAoKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGlmIChhcmcuaXNSZWcoKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGlmIChpbnN0LmFkbWl0
c1N0YWNrKGFyZykpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICBhcmcgPSBUbXAobG9jayhmaWxsKGFyZy50bXAoKSwgcm9sZSkpKTsKKyAgICAgICAgICAgIH0p
OworCisgICAgICAgIC8vIERlYWwgd2l0aCBldmVyeW9uZSBlbHNlLgorICAgICAgICBpbnN0LmZv
ckVhY2hBcmcoCisgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJn
OjpUeXBlIGFyZ1R5cGUsIEFyZzo6V2lkdGggd2lkdGgpIHsKKyAgICAgICAgICAgICAgICBpZiAo
YXJnVHlwZSAhPSB0eXBlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgaWYgKCFBcmc6OmlzTGF0ZURlZihyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgIGlmICghYXJnLmlzVG1wKCkpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBpZiAoYXJnLmlzUmVnKCkpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgICAgIFJlZyByZWcgPSBmaWxsKGFyZy50
bXAoKSwgcm9sZSwgRG9udFNwaWxsKTsKKyAgICAgICAgICAgICAgICBpZiAocmVnKSB7CisgICAg
ICAgICAgICAgICAgICAgIGFyZyA9IFRtcChyZWcpOworICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IFN0YWNrU2xvdCogc2xvdCA9IHNwaWxsU2xvdChhcmcudG1wKCkpOworICAgICAgICAgICAgICAg
IGVuc3VyZVdpZHRoKHNsb3QsIHdpZHRoKTsKKyAgICAgICAgICAgICAgICBhcmcgPSBBcmc6OnN0
YWNrKHNsb3QpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgLy8gQXBwbHkgdGhlIGxhdGUg
ZGVhdGhzLgorICAgICAgICBmb3IgKERlYXRoJiBkZWF0aCA6IG1fZGVhdGhzLmF0KG1fYmxvY2ss
IG1faW5zdEluZGV4KSkgeworICAgICAgICAgICAgaWYgKGRlYXRoLmRlYXRoTW9kZSA9PSBMYXRl
RGVhdGgpCisgICAgICAgICAgICAgICAga2lsbChkZWF0aC50bXApOworICAgICAgICB9CisKKyAg
ICAgICAgZW1pdFNodWZmbGUobV9pbnN0SW5kZXgpOworICAgICAgICB1bmxvY2tBbGwoKTsKKyAg
ICB9CisKKyAgICB2b2lkIGJvb3RCbG9jayhCYXNpY0Jsb2NrKiBibG9jaykKKyAgICB7CisgICAg
ICAgIFN0YXRlJiBkc3RTdGF0ZSA9IG1fYXRIZWFkW2Jsb2NrXTsKKworICAgICAgICBmb3IgKGF1
dG8mIGVudHJ5IDogZHN0U3RhdGUubWFwcGluZykgeworICAgICAgICAgICAgVG1wSW5mbyYgc3Jj
SW5mbyA9IGdldEluZm8oZW50cnkua2V5KTsKKyAgICAgICAgICAgIFRtcEluZm8mIGRzdEluZm8g
PSBlbnRyeS52YWx1ZTsKKyAgICAgICAgICAgIGRzdEluZm8ucmVnID0gc3JjSW5mby5yZWc7Cisg
ICAgICAgICAgICBkc3RJbmZvLmhhc1NwaWxsID0gc3JjSW5mby5oYXNTcGlsbDsKKyAgICAgICAg
ICAgIGlmIChzcmNJbmZvLnJlZykKKyAgICAgICAgICAgICAgICBkc3RTdGF0ZS5yZXZlcnNlTWFw
cGluZ1tzcmNJbmZvLnJlZ10udG1wID0gZW50cnkua2V5OworICAgICAgICB9CisKKyAgICAgICAg
ZHN0U3RhdGUuaXNTZXR0bGVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICB2b2lkIGNvbmZvcm1UbyhC
YXNpY0Jsb2NrKiBibG9jaykKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fYmxvY2st
Pmxhc3QoKS5vcGNvZGUgPT0gSnVtcCk7CisgICAgICAgIAorICAgICAgICBTdGF0ZSYgZHN0U3Rh
dGUgPSBtX2F0SGVhZFtibG9ja107CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGRzdFN0YXRlLmlz
U2V0dGxlZCk7CisKKyAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IGRzdFN0YXRlLm1hcHBpbmcp
IHsKKyAgICAgICAgICAgIFRtcEluZm8mIHNyY0luZm8gPSBnZXRJbmZvKGVudHJ5LmtleSk7Cisg
ICAgICAgICAgICBUbXBJbmZvJiBkc3RJbmZvID0gZW50cnkudmFsdWU7CisKKyAgICAgICAgICAg
IGlmIChkc3RJbmZvLnJlZyAmJiBkc3RJbmZvLnJlZyAhPSBzcmNJbmZvLnJlZykgeworICAgICAg
ICAgICAgICAgIFNodWZmbGVQYWlyIHBhaXI7CisgICAgICAgICAgICAgICAgaWYgKHNyY0luZm8u
cmVnKSB7CisgICAgICAgICAgICAgICAgICAgIHBhaXIgPSBTaHVmZmxlUGFpcigKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFRtcChzcmNJbmZvLnJlZyksIFRtcChkc3RJbmZvLnJlZyksIG1fdG1w
V2lkdGgud2lkdGgoZW50cnkua2V5KSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzcmNJ
bmZvLmhhc0NvbnN0YW50KSB7CisgICAgICAgICAgICAgICAgICAgIHBhaXIgPSBTaHVmZmxlUGFp
cigKKyAgICAgICAgICAgICAgICAgICAgICAgIEFyZzo6aW1tNjQoc3JjSW5mby5jb25zdGFudCks
IFRtcChkc3RJbmZvLnJlZyksIG1fdG1wV2lkdGgud2lkdGgoZW50cnkua2V5KSk7CisgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3Jj
SW5mby5oYXNTcGlsbCk7CisgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc2xvdCA9IHNw
aWxsU2xvdChlbnRyeS5rZXkpOworICAgICAgICAgICAgICAgICAgICBwYWlyID0gU2h1ZmZsZVBh
aXIoQXJnOjpzdGFjayhzbG90KSwgVG1wKGRzdEluZm8ucmVnKSwgd2lkdGgoc2xvdCkpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX3NodWZmbGVQYWlycy5hcHBlbmQocGFp
cik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChkc3RJbmZvLmhhc1NwaWxsICYm
ICFzcmNJbmZvLmhhc1NwaWxsKSB7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3Jj
SW5mby5yZWcpOworICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc2xvdCA9IHNwaWxsU2xvdChl
bnRyeS5rZXkpOworICAgICAgICAgICAgICAgIG1fc2h1ZmZsZVBhaXJzLmFwcGVuZChTaHVmZmxl
UGFpcihUbXAoc3JjSW5mby5yZWcpLCBBcmc6OnN0YWNrKHNsb3QpLCB3aWR0aChzbG90KSkpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZW1pdFNodWZmbGUobV9ibG9jay0+
c2l6ZSgpIC0gMSk7CisgICAgfQorCisgICAgVG1wSW5mbyYgZ2V0SW5mbyhUbXAgdG1wKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fc3RhdGUubWFwcGluZy5hZGQodG1wLCBUbXBJbmZvKCkpLml0
ZXJhdG9yLT52YWx1ZTsKKyAgICB9CisKKyAgICBlbnVtIEZpbGxFZmZvcnQgeworICAgICAgICBN
dXN0RmlsbCwKKyAgICAgICAgRG9udFNwaWxsCisgICAgfTsKKworICAgIFJlZyBmaWxsKFRtcCB0
bXAsIEFyZzo6Um9sZSByb2xlLCBGaWxsRWZmb3J0IGZpbGxFZmZvcnQgPSBNdXN0RmlsbCkKKyAg
ICB7CisgICAgICAgIGlmIChyb2xlID09IEFyZzo6VXNlRGVmIHx8IEFyZzo6aXNFYXJseURlZihy
b2xlKSkgeworICAgICAgICAgICAgSW5zdCYgaW5zdCA9IG1fYmxvY2stPmF0KG1faW5zdEluZGV4
KTsKKyAgICAgICAgICAgIHJldHVybiBmaWxsKAorICAgICAgICAgICAgICAgIHRtcCwgcm9sZSwg
ZmlsbEVmZm9ydCwKKyAgICAgICAgICAgICAgICBbJl0gKFJlZyBjYW5kaWRhdGUpIC0+IGJvb2wg
eworICAgICAgICAgICAgICAgICAgICAvLyBVc2VEZWYgYW5kIGVhcmx5IERlZiByZXF1aXJlcyB1
cyB0byBsb29rIGFoZWFkIGFuZCBzZWUgaWYgdGhlIGNhbmRpZGF0ZQorICAgICAgICAgICAgICAg
ICAgICAvLyByZWdpc3RlciBpcyBhY2NlcHRhYmxlIHRvIHRoZSBsYXRlIGRlZnMsIGxhdGUgdXNl
cywgYW5kIGxhdGUgY2xvYmJlcnMuIEFuIGVhc3kKKyAgICAgICAgICAgICAgICAgICAgLy8gd2F5
IHRvIGRvIHRoaXMgaXMganVzdCB0byBzZWUgaWYgdGhlIHJlZ2lzdGVyIGFwcGVhcnMgYW55d2hl
cmUgaW4gdGhlIGFyZ3VtZW50CisgICAgICAgICAgICAgICAgICAgIC8vIGxpc3QuIE5vdGUgdGhh
dCB3ZSBkb24ndCBoYXZlIHRvIGNvbnNpZGVyIG5vbi1UbXAgQXJncywgYmVjYXVzZSB0aG9zZSB3
b3VsZAorICAgICAgICAgICAgICAgICAgICAvLyBhbGwgaGF2ZSBlYXJseSB1c2VzLgorICAgICAg
ICAgICAgICAgICAgICBmb3IgKEFyZyYgYXJnIDogaW5zdC5hcmdzKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoYXJnLmlzUmVnKCkgJiYgYXJnLnJlZygpID09IGNhbmRpZGF0ZSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyBPZiBjb3Vyc2UsIHRoZXJlIGlzIHRoZSBh
bm5veWluZyBQYXRjaCBpbnN0cnVjdGlvbiBhbmQgaXRzIGNsb2JiZXJlZAorICAgICAgICAgICAg
ICAgICAgICAvLyByZWdpc3RlcnMuCisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0Lm9wY29k
ZSA9PSBQYXRjaCAmJiBpbnN0LmV4dHJhQ2xvYmJlcmVkUmVncygpLmdldChjYW5kaWRhdGUpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIGZpbGwodG1wLCByb2xlLCBmaWxsRWZmb3J0LCBbXSAoUmVnKSAtPiBib29sIHsg
cmV0dXJuIHRydWU7IH0pOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPgorICAgIFJlZyBmaWxsKFRtcCB0bXAsIEFyZzo6Um9sZSByb2xlLCBGaWxsRWZmb3J0IGZp
bGxFZmZvcnQsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBUbXBJbmZv
JiBpbmZvID0gZ2V0SW5mbyh0bXApOworCisgICAgICAgIGlmIChBcmc6OmlzQW55RGVmKHJvbGUp
KSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghaW5mby5oYXNTcGlsbCk7CisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVCghaW5mby5oYXNDb25zdGFudCk7CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVCghaW5mby5yZWcpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAo
aW5mby5yZWcpIHsKKyAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVCh0bXAucmVnKCkgPT0gaW5mby5yZWcpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICByZXR1cm4gaW5mby5yZWc7CisgICAgICAgIH0KKworICAgICAgICBSZWcgcmVn
ID0gdG1wLnJlZygpOworICAgICAgICBpZiAoIXJlZykgeworICAgICAgICAgICAgZm9yIChSZWcg
Y2FuZGlkYXRlIDogcmVnc0luUHJpb3JpdHlPcmRlcih0eXBlKSkgeworICAgICAgICAgICAgICAg
IFJlZ0luZm8mIHJlZ0luZm8gPSBtX3N0YXRlLnJldmVyc2VNYXBwaW5nW2NhbmRpZGF0ZV07Cisg
ICAgICAgICAgICAgICAgaWYgKHJlZ0luZm8uaXNMb2NrZWQgfHwgcmVnSW5mby50bXAgfHwgIWZ1
bmN0b3IoY2FuZGlkYXRlKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAgICAgcmVnID0gY2FuZGlkYXRlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXJlZykgeworICAgICAgICAgICAgICAgIGlmIChm
aWxsRWZmb3J0ID09IERvbnRTcGlsbCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlZygp
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIE5lZWQgdG8gc3BpbGwgc29t
ZXRoaW5nLiBTcGlsbCB0aGUgcmVnIHRoYXQgaG9sZHMgdGhlIHRtcCB0aGF0IGhhcyB0aGUgbGVh
c3Qgd2FybQorICAgICAgICAgICAgICAgIC8vIHVzZXMuCisgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgbWluV2FybVVzZXMgPSBVSU5UX01BWDsKKyAgICAgICAgICAgICAgICBmb3IgKFJlZyBjYW5k
aWRhdGUgOiByZWdzSW5Qcmlvcml0eU9yZGVyKHR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAg
IFJlZ0luZm8mIHJlZ0luZm8gPSBtX3N0YXRlLnJldmVyc2VNYXBwaW5nW2NhbmRpZGF0ZV07Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChyZWdJbmZvLmlzTG9ja2VkIHx8ICFmdW5jdG9yKGNhbmRp
ZGF0ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgbnVtV2FybVVzZXMgPSBtX3VzZUNvdW50c1tyZWdJbmZvLnRtcF0ubnVt
V2FybVVzZXM7CisgICAgICAgICAgICAgICAgICAgIGlmIChudW1XYXJtVXNlcyA8IG1pbldhcm1V
c2VzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZWcgPSBjYW5kaWRhdGU7CisgICAgICAg
ICAgICAgICAgICAgICAgICBtaW5XYXJtVXNlcyA9IG51bVdhcm1Vc2VzOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCFyZWcp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWcoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIHNwaWxsKHJlZyk7CisgICAgICAgIGlmIChBcmc6OmlzQW55VXNlKHJv
bGUpICYmIHJvbGUgIT0gQXJnOjpTY3JhdGNoKSB7CisgICAgICAgICAgICBTdGFja1Nsb3QqIHNs
b3QgPSBzcGlsbFNsb3QodG1wKTsKKyAgICAgICAgICAgIGlmIChpbmZvLmhhc0NvbnN0YW50KSB7
CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQodHlwZSA9PSBBcmc6OkdQKTsKKyAgICAg
ICAgICAgICAgICBhZGRNb3ZlKFNodWZmbGVQYWlyKEFyZzo6aW1tNjQoaW5mby5jb25zdGFudCks
IFRtcChyZWcpLCB3aWR0aChzbG90KSkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChpbmZvLmhhc1NwaWxsKTsKKyAgICAgICAgICAgICAgICBh
ZGRNb3ZlKFNodWZmbGVQYWlyKEFyZzo6c3RhY2soc2xvdCksIFRtcChyZWcpLCB3aWR0aChzbG90
KSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1fc3RhdGUucmV2ZXJzZU1h
cHBpbmdbcmVnXS50bXAgPSB0bXA7CisgICAgICAgIGluZm8ucmVnID0gcmVnOworICAgICAgICBy
ZXR1cm4gcmVnOworICAgIH0KKworICAgIHZvaWQgc3BpbGwoUmVnIHJlZykKKyAgICB7CisgICAg
ICAgIFJlZ0luZm8mIHJlZ0luZm8gPSBtX3N0YXRlLnJldmVyc2VNYXBwaW5nW3JlZ107CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKCFyZWdJbmZvLmlzTG9ja2VkKTsKKyAgICAgICAgaWYgKCFyZWdJ
bmZvLnRtcCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIFRtcEluZm8m
IHRtcEluZm8gPSBnZXRJbmZvKHJlZ0luZm8udG1wKTsKKworICAgICAgICBpZiAoIXRtcEluZm8u
aGFzU3BpbGwpIHsKKyAgICAgICAgICAgIFN0YWNrU2xvdCogc2xvdCA9IHNwaWxsU2xvdChyZWdJ
bmZvLnRtcCk7CisgICAgICAgICAgICBhZGRNb3ZlKFNodWZmbGVQYWlyKFRtcChyZWcpLCBBcmc6
OnN0YWNrKHNsb3QpLCB3aWR0aChzbG90KSkpOworICAgICAgICAgICAgdG1wSW5mby5oYXNTcGls
bCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmVnSW5mby50bXAgPSBUbXAoKTsKKyAgICAg
ICAgdG1wSW5mby5yZWcgPSBSZWcoKTsKKyAgICB9CisKKyAgICB2b2lkIGtpbGwoVG1wIHRtcCkK
KyAgICB7CisgICAgICAgIFRtcEluZm8mIHRtcEluZm8gPSBnZXRJbmZvKHRtcCk7CisgICAgICAg
IHRtcEluZm8uaGFzQ29uc3RhbnQgPSBmYWxzZTsKKyAgICAgICAgdG1wSW5mby5oYXNTcGlsbCA9
IGZhbHNlOworICAgICAgICAKKyAgICAgICAgaWYgKCF0bXBJbmZvLnJlZykKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgCisgICAgICAgIFJlZ0luZm8mIHJlZ0luZm8gPSBtX3N0YXRlLnJl
dmVyc2VNYXBwaW5nW3RtcEluZm8ucmVnXTsKKyAgICAgICAgdG1wSW5mby5yZWcgPSBSZWcoKTsK
KyAgICAgICAgcmVnSW5mby50bXAgPSBUbXAoKTsKKyAgICB9CisKKyAgICBSZWcgbG9jayhSZWcg
cmVnKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVnKTsKKyAgICAgICAgYm9vbCYg
aXNMb2NrZWQgPSBtX3N0YXRlLnJldmVyc2VNYXBwaW5nW3JlZ10uaXNMb2NrZWQ7CisgICAgICAg
IGlmICghaXNMb2NrZWQpIHsKKyAgICAgICAgICAgIGlzTG9ja2VkID0gdHJ1ZTsKKyAgICAgICAg
ICAgIG1fbG9ja2VkLmFwcGVuZChyZWcpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZWc7
CisgICAgfQorCisgICAgdm9pZCB1bmxvY2soUmVnIHJlZykKKyAgICB7CisgICAgICAgIG1fc3Rh
dGUucmV2ZXJzZU1hcHBpbmdbcmVnXS5pc0xvY2tlZCA9IGZhbHNlOworICAgIH0KKworICAgIHZv
aWQgdW5sb2NrQWxsKCkKKyAgICB7CisgICAgICAgIGZvciAoUmVnIHJlZyA6IG1fbG9ja2VkKQor
ICAgICAgICAgICAgdW5sb2NrKHJlZyk7CisgICAgICAgIG1fbG9ja2VkLnJlc2l6ZSgwKTsKKyAg
ICB9CisKKyAgICB2b2lkIGFkZE1vdmUoY29uc3QgU2h1ZmZsZVBhaXImIHBhaXIpCisgICAgewor
ICAgICAgICBtX3NodWZmbGVQYWlycy5yZW1vdmVBbGxNYXRjaGluZygKKyAgICAgICAgICAgIFsm
XSAoY29uc3QgU2h1ZmZsZVBhaXImIG90aGVyUGFpcikgLT4gYm9vbCB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIG90aGVyUGFpci5kc3QoKSA9PSBwYWlyLmRzdCgpOworICAgICAgICAgICAgfSk7
CisgICAgICAgIGZvciAoU2h1ZmZsZVBhaXImIG90aGVyUGFpciA6IG1fc2h1ZmZsZVBhaXJzKSB7
CisgICAgICAgICAgICBpZiAob3RoZXJQYWlyLmRzdCgpID09IHBhaXIuc3JjKCkpIHsKKyAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChvdGhlclBhaXIud2lkdGgoKSA9PSBwYWlyLndpZHRo
KCkpOworICAgICAgICAgICAgICAgIG1fc2h1ZmZsZVBhaXJzLmFwcGVuZChTaHVmZmxlUGFpcihv
dGhlclBhaXIuc3JjKCksIHBhaXIuZHN0KCksIHBhaXIud2lkdGgoKSkpOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBtX3NodWZmbGVQ
YWlycy5hcHBlbmQocGFpcik7CisgICAgfQorCisgICAgdm9pZCBlbWl0U2h1ZmZsZSh1bnNpZ25l
ZCBpbmRleCkKKyAgICB7CisgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydChpbmRleCwgY3Jl
YXRlU2h1ZmZsZShtX2Jsb2NrLT5hdChtX2luc3RJbmRleCkub3JpZ2luLCBtX3NodWZmbGVQYWly
cykpOworICAgICAgICBtX3NodWZmbGVQYWlycy5yZXNpemUoMCk7CisgICAgfQorCisgICAgQXJn
OjpXaWR0aCB3aWR0aChTdGFja1Nsb3QqIHNsb3QpCisgICAgeworICAgICAgICByZXR1cm4gQXJn
Ojp3aWR0aEZvckJ5dGVzKHNsb3QtPmJ5dGVTaXplKCkpOworICAgIH0KKworICAgIC8vIFdlIG1h
eSBjaG9vc2UgdG8gZG8gYSBmdWxsd2lkdGggZGVmIG9yIHVzZSBvbiBhIHN1YndpZHRoIHNwaWxs
IHNsb3QuIFdoZW4gdGhpcyBoYXBwZW5zLCB3ZQorICAgIC8vIG5lZWQgdG8gaW5jcmVhc2UgdGhl
IHdpZHRoIG9mIHRoZSBzbG90LiBOb3RlIHRoYXQgd2UgcmVseSBvbiBzcGlsbCBzbG90cyBoYXZp
bmcgWkRlZgorICAgIC8vIHNlbWFudGljcy4KKyAgICB2b2lkIGVuc3VyZVdpZHRoKFN0YWNrU2xv
dCogc2xvdCwgQXJnOjpXaWR0aCB3aWR0aCkKKyAgICB7CisgICAgICAgIHNsb3QtPmVuc3VyZVNp
emUoQXJnOjpieXRlcyh3aWR0aCkpOworICAgIH0KKyAgICAKKyAgICBTdGFja1Nsb3QqIHNwaWxs
U2xvdChUbXAgdG1wKQorICAgIHsKKyAgICAgICAgU3RhY2tTbG90KiYgcmVzdWx0ID0gbV9zcGls
bFNsb3RzLmFkZCh0bXAsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgaWYgKCFy
ZXN1bHQpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG1fY29kZS5hZGRTdGFja1Nsb3QoCisgICAg
ICAgICAgICAgICAgbV90bXBXaWR0aC53aWR0aCh0bXApIDw9IEFyZzo6V2lkdGgzMiA/IDQgOiA4
LAorICAgICAgICAgICAgICAgIFN0YWNrU2xvdEtpbmQ6OkFub255bW91cyk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KKyAgICBjbGFzcyBSZWdNYXAgeworICAgIHB1YmxpYzoKKyAgICAgICAgUmVnTWFwKCkK
KyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgICAgICBjYXNl
IEFyZzo6R1A6CisgICAgICAgICAgICAgICAgbV92ZWN0b3IuZmlsbChUKCksIE1hY3JvQXNzZW1i
bGVyOjpudW1iZXJPZlJlZ2lzdGVycygpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgQXJnOjpGUDoKKyAgICAgICAgICAgICAgICBtX3ZlY3Rvci5maWxsKFQoKSwg
TWFjcm9Bc3NlbWJsZXI6Om51bWJlck9mRlBSZWdpc3RlcnMoKSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBUJiBvcGVyYXRvcltd
KFJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAg
ICAgICAgY2FzZSBBcmc6OkdQOgorICAgICAgICAgICAgICAgIHJldHVybiBtX3ZlY3RvcltNYWNy
b0Fzc2VtYmxlcjo6cmVnaXN0ZXJJbmRleChyZWcuZ3ByKCkpXTsKKyAgICAgICAgICAgIGNhc2Ug
QXJnOjpGUDoKKyAgICAgICAgICAgICAgICByZXR1cm4gbV92ZWN0b3JbTWFjcm9Bc3NlbWJsZXI6
OnJlZ2lzdGVySW5kZXgocmVnLmZwcigpKV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgVmVjdG9yPFQ+IG1fdmVjdG9yOworICAgIH07
CisKKyAgICBzdHJ1Y3QgU3RhdGUgeworICAgICAgICBIYXNoTWFwPFRtcCwgVG1wSW5mbz4gbWFw
cGluZzsgLy8gSWYgdGhlIG9yaWdpbmFsIHByb2dyYW0gYXNrcyBmb3IgdGhpcyB0bXAsIHdoZXJl
IGlzIGl0PworICAgICAgICBSZWdNYXA8UmVnSW5mbz4gcmV2ZXJzZU1hcHBpbmc7IC8vIFdoYXQg
dG1wIGRvZXMgdGhpcyByZWdpc3RlciBob2xkIHJpZ2h0IG5vdz8KKyAgICAgICAgYm9vbCB2aXNp
dGVkQnlQcm9wYWdhdGlvbiB7IGZhbHNlIH07CisgICAgICAgIGJvb2wgaXNTZXR0bGVkIHsgZmFs
c2UgfTsKKyAgICB9OworCisgICAgZW51bSBEZWF0aE1vZGUgeworICAgICAgICBFYXJseURlYXRo
LAorICAgICAgICBMYXRlRGVhdGgKKyAgICB9OworCisgICAgc3RydWN0IERlYXRoIHsKKyAgICAg
ICAgRGVhdGgoKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBEZWF0aChUbXAgdG1w
LCBEZWF0aE1vZGUgZGVhdGhNb2RlKQorICAgICAgICAgICAgOiB0bXAodG1wKQorICAgICAgICAg
ICAgLCBkZWF0aE1vZGUoZGVhdGhNb2RlKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIFRtcCB0bXA7CisgICAgICAgIERlYXRoTW9kZSBkZWF0aE1vZGUgeyBFYXJseURl
YXRoIH07CisgICAgfTsKKyAgICAKKyAgICBDb2RlJiBtX2NvZGU7CisgICAgVG1wTGl2ZW5lc3M8
dHlwZT4gbV9saXZlbmVzczsKKyAgICBJbnN0TWFwPFZlY3RvcjxEZWF0aD4+IG1fZGVhdGhzOwor
ICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIFN0YXRlPiBtX2F0SGVhZDsKKyAgICBTdGF0ZSBtX3N0
YXRlOworICAgIFZlY3RvcjxSZWc+IG1fbG9ja2VkOworICAgIFVzZUNvdW50czxUbXA+IG1fdXNl
Q291bnRzOworICAgIFRtcFdpZHRoIG1fdG1wV2lkdGg7CisgICAgSGFzaE1hcDxUbXAsIFN0YWNr
U2xvdCo+IG1fc3BpbGxTbG90czsKKyAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrIHsgbnVsbHB0ciB9
OworICAgIHVuc2lnbmVkIG1faW5zdEluZGV4IHsgMCB9OworICAgIFZlY3RvcjxTaHVmZmxlUGFp
cj4gbV9zaHVmZmxlUGFpcnM7CisgICAgSW5zZXJ0aW9uU2V0IG1faW5zZXJ0aW9uU2V0OworICAg
IGJvb2wgbV9jaGFuZ2VkIHsgZmFsc2UgfTsKK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFj
ZQorCit2b2lkIHNjYXZlbmdlUmVnaXN0ZXJzKENvZGUmIGNvZGUpCit7CisgICAgUGhhc2VTY29w
ZSBwaGFzZVNjb3BlKGNvZGUsICJzY2F2ZW5nZVJlZ2lzdGVycyIpOworCisgICAgYnJlYWtDcml0
aWNhbEVkZ2VzKGNvZGUpOworCisgICAgeworICAgICAgICBTY2F2ZW5nZVJlZ2lzdGVyczxBcmc6
OkZQPiBzY2F2ZW5nZVJlZ2lzdGVycyhjb2RlKTsKKyAgICAgICAgc2NhdmVuZ2VSZWdpc3RlcnMu
cnVuKCk7CisgICAgfQorICAgIHsKKyAgICAgICAgU2NhdmVuZ2VSZWdpc3RlcnM8QXJnOjpHUD4g
c2NhdmVuZ2VSZWdpc3RlcnMoY29kZSk7CisgICAgICAgIHNjYXZlbmdlUmVnaXN0ZXJzLnJ1bigp
OworICAgIH0KK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJTY2F2ZW5nZVJlZ2lzdGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyU2NhdmVuZ2VSZWdpc3RlcnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU2NhdmVuZ2VSZWdpc3RlcnMuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBBaXJTY2F2ZW5nZVJlZ2lzdGVyc19oCisjZGVmaW5lIEFpclNjYXZl
bmdlUmVnaXN0ZXJzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKworLy8gVGhpcyBh
bGxvY2F0ZXMgdGVtcG9yYXJpZXMgdG8gcmVnaXN0ZXJzIG9yIHN0YWNrIGxvY2F0aW9ucyBiYXNl
ZCBvbiBmb3J3YXJkIGZsb3cuIEl0IHdpbGwgaGFwcGlseQorLy8gY2hhbmdlIHRoZSBsb2NhdGlv
biBvZiBhIHRlbXBvcmFyeSBpbiBjYXNlIHRoZSByZWdpc3RlciBpdCBoYWQgcGlja2VkIGJlY29t
ZXMgdW5hdmFpbGFibGUgb3IgaW4KKy8vIGNhc2Ugd2UgbmVlZCB0aGUgdmFsdWUgYW5kIGl0J3Mg
Y3VycmVudGx5IG9uIHRoZSBzdGFjay4gSXQgYWxzbyBwZXJmb3JtcyBtYXRlcmlhbGl6YXRpb24g
b2YKKy8vIGNvbnN0YW50czogaWYgYSB0ZW1wb3JhcnkncyB2YWx1ZSBpcyBhbHdheXMgYSBjb25z
dGFudCB0aGVuIGluc3RlYWQgb2Ygc3BpbGxpbmcgd2Ugd2lsbCBzaW1wbHkKKy8vIHJlbWF0ZXJp
YWxpemUuCisvLworLy8gVGhpcyBwaGFzZSBpcyBtZWFudCB0byBydW4gYWZ0ZXIgdGhlIHByaW1h
cnkgcmVnaXN0ZXIgYWxsb2NhdG9yLiBUaGUgcHJpbWFyeSByZWdpc3RlciBhbGxvY2F0b3IKKy8v
IGlzIGJlc3Qgb2ZmIGhhbmRsaW5nIHNwaWxscyBieSBzaW1wbHkgbGVhdmluZyBzcGlsbGVkIFRt
cHMgYWxvbmUuIFRoaXMgcGhhc2Ugd2lsbCBlbWl0IHByb3BlcgorLy8gc3BpbGwgY29kZSwgYW5k
IGl0IHdpbGwgZG8gaXQgbW9yZSBlZmZpY2llbnRseSB0aGFuIGNsYXNzaWNhbCBzcGlsbGluZyBh
bGdvcml0aG1zLgordm9pZCBzY2F2ZW5nZVJlZ2lzdGVycyhDb2RlJik7CisKK30gfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRp
ZiAvLyBBaXJTY2F2ZW5nZVJlZ2lzdGVyc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAJKHJldmlzaW9uIDE5NTE3
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAogI2lmIEVOQUJMRShCM19KSVQpCiAK
ICNpbmNsdWRlICJBaXJDb2RlLmgiCi0jaW5jbHVkZSAiQWlyRml4U3BpbGxTbG90WkRlZi5oIgog
I2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgogI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiQWlyTGl2ZW5lc3MuaCIKQEAgLTg0LDcgKzgzLDYgQEAgdm9pZCBzcGlsbEV2
ZXJ5dGhpbmcoQ29kZSYgY29kZSkKIAogICAgIC8vIEFsbG9jYXRlIGEgc3RhY2sgc2xvdCBmb3Ig
ZWFjaCB0bXAuCiAgICAgVmVjdG9yPFN0YWNrU2xvdCo+IGFsbFN0YWNrU2xvdHNbQXJnOjpudW1U
eXBlc107Ci0gICAgdW5zaWduZWQgbmV3U3RhY2tTbG90VGhyZXNob2xkID0gY29kZS5zdGFja1Ns
b3RzKCkuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgdHlwZUluZGV4ID0gMDsgdHlwZUluZGV4
IDwgQXJnOjpudW1UeXBlczsgKyt0eXBlSW5kZXgpIHsKICAgICAgICAgVmVjdG9yPFN0YWNrU2xv
dCo+JiBzdGFja1Nsb3RzID0gYWxsU3RhY2tTbG90c1t0eXBlSW5kZXhdOwogICAgICAgICBBcmc6
OlR5cGUgdHlwZSA9IHN0YXRpY19jYXN0PEFyZzo6VHlwZT4odHlwZUluZGV4KTsKQEAgLTEzMCw3
ICsxMjgsNiBAQCB2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJiBjb2RlKQogICAgICAgICAgICAg
ICAgICAgICBzd2l0Y2ggKHJvbGUpIHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OlVz
ZToKICAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkNvbGRVc2U6Ci0gICAgICAgICAgICAg
ICAgICAgIGNhc2UgQXJnOjpFYXJseURlZjoKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAo
UmVnIHJlZyA6IHJlZ3NJblByaW9yaXR5T3JkZXIodHlwZSkpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIXNldEJlZm9yZS5nZXQocmVnKSkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZXRCZWZvcmUuc2V0KHJlZyk7CkBAIC0xNTQsNiArMTUxLDcgQEAgdm9p
ZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYgY29kZSkKICAgICAgICAgICAgICAgICAgICAgY2FzZSBB
cmc6OkxhdGVVc2U6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpMYXRlQ29sZFVzZToK
ICAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OlNjcmF0Y2g6CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgQXJnOjpFYXJseURlZjoKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoUmVn
IHJlZyA6IHJlZ3NJblByaW9yaXR5T3JkZXIodHlwZSkpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIXNldEJlZm9yZS5nZXQocmVnKSAmJiAhc2V0QWZ0ZXIuZ2V0KHJlZykpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QWZ0ZXIuc2V0KHJlZyk7CkBAIC0x
ODIsMTIgKzE4MCw2IEBAIHZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUmIGNvZGUpCiAgICAgICAg
IH0KICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOwogICAgIH0KLQotICAgIGZp
eFNwaWxsU2xvdFpEZWYoCi0gICAgICAgIGNvZGUsCi0gICAgICAgIFsmXSAoU3RhY2tTbG90KiBz
dGFja1Nsb3QpIC0+IGJvb2wgewotICAgICAgICAgICAgcmV0dXJuIHN0YWNrU2xvdC0+aW5kZXgo
KSA+PSBuZXdTdGFja1Nsb3RUaHJlc2hvbGQ7Ci0gICAgICAgIH0pOwogfQogCiB9IH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMzo6QWlyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpclN0YWNrU2xvdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyU3RhY2tTbG90LmgJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDEy
IEBAIHB1YmxpYzoKICAgICBib29sIGlzTG9ja2VkKCkgY29uc3QgeyByZXR1cm4gbV9raW5kID09
IFN0YWNrU2xvdEtpbmQ6OkxvY2tlZDsgfQogICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyBy
ZXR1cm4gbV9pbmRleDsgfQogCisgICAgdm9pZCBlbnN1cmVTaXplKHVuc2lnbmVkIHJlcXVlc3Rl
ZFNpemUpCisgICAgeworICAgICAgICBBU1NFUlQoIW1fb2Zmc2V0RnJvbUZQKTsKKyAgICAgICAg
bV9ieXRlU2l6ZSA9IHN0ZDo6bWF4KG1fYnl0ZVNpemUsIHJlcXVlc3RlZFNpemUpOworICAgIH0K
KwogICAgIHVuc2lnbmVkIGFsaWdubWVudCgpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoYnl0
ZVNpemUoKSA8PSAxKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJWYWxp
ZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJW
YWxpZGF0ZS5jcHAJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw2ICs4MiwxMyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKGlzVGVybWluYWwoaW5zdC5vcGNv
ZGUpLCAoIkF0ICIsIGluc3QsICIgaW4gIiwgKmJsb2NrKSk7CiAgICAgICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgICAgICBWQUxJREFURSghaXNUZXJtaW5hbChpbnN0Lm9wY29kZSks
ICgiQXQgIiwgaW5zdCwgIiBpbiAiLCAqYmxvY2spKTsKKworICAgICAgICAgICAgICAgIC8vIGZv
ckVhY2hBcmcgbXVzdCByZXR1cm4gQXJnJidzIHRoYXQgcG9pbnQgaW50byB0aGUgYXJncyBhcnJh
eS4KKyAgICAgICAgICAgICAgICBpbnN0LmZvckVhY2hBcmcoCisgICAgICAgICAgICAgICAgICAg
IFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSwgQXJnOjpUeXBlLCBBcmc6OldpZHRoKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgmYXJnID49ICZpbnN0LmFyZ3NbMF0sICgiQXQg
IiwgYXJnLCAiIGluICIsIGluc3QsICIgaW4gIiwgKmJsb2NrKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBWQUxJREFURSgmYXJnIDw9ICZpbnN0LmFyZ3MubGFzdCgpLCAoIkF0ICIsIGFyZywg
IiBpbiAiLCBpbnN0LCAiIGluICIsICpibG9jaykpOworICAgICAgICAgICAgICAgICAgICB9KTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDog
YmxvY2stPnN1Y2Nlc3NvckJsb2NrcygpKQogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbGlk
QmxvY2tzLmNvbnRhaW5zKHN1Y2Nlc3NvciksICgiSW4gIiwgKmJsb2NrKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcg
KzM4LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogLy8gV2UgYXJlIGluIHRo
ZSBtaWRkbGUgb2YgYW4gZXhwZXJpbWVudGFsIHRyYW5zaXRpb24gZnJvbSBMTFZNIHRvIEIzIGFz
IHRoZSBiYWNrZW5kIGZvciB0aGUgRlRMLiBXZSBkb24ndAogLy8geWV0IGtub3cgaG93IGl0IHdp
bGwgdHVybiBvdXQuIEZvciBub3csIHRoaXMgZmxhZyB3aWxsIGNvbnRyb2wgd2hldGhlciBGVEwg
dXNlcyBCMy4gUmVtZW1iZXIgdG8gc2V0IHRoaXMKIC8vIHRvIDAgYmVmb3JlIGNvbW1pdHRpbmch
Ci0jZGVmaW5lIEZUTF9VU0VTX0IzIDAKKyNkZWZpbmUgRlRMX1VTRVNfQjMgMQogCiBzdHJ1Y3Qg
Tm9kZTsKIApJbmRleDogU291cmNlL1dURi93dGYvSW5kZXhTcGFyc2VTZXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9JbmRleFNwYXJzZVNldC5oCShyZXZpc2lvbiAxOTUxNzYpCisr
KyBTb3VyY2UvV1RGL3d0Zi9JbmRleFNwYXJzZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw4
ICs0Nyw4IEBAIGNsYXNzIEluZGV4U3BhcnNlU2V0IHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBJ
bmRleFNwYXJzZVNldCh1bnNpZ25lZCBtYXhWYWx1ZSk7CiAKLSAgICB2b2lkIGFkZCh1bnNpZ25l
ZCk7Ci0gICAgdm9pZCByZW1vdmUodW5zaWduZWQpOworICAgIGJvb2wgYWRkKHVuc2lnbmVkKTsK
KyAgICBib29sIHJlbW92ZSh1bnNpZ25lZCk7CiAgICAgdm9pZCBjbGVhcigpOwogCiAgICAgdW5z
aWduZWQgc2l6ZSgpIGNvbnN0OwpAQCAtNzEsMjkgKzcxLDMzIEBAIGlubGluZSBJbmRleFNwYXJz
ZVNldDxPdmVyZmxvd0hhbmRsZXI+OjoKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3ZlcmZsb3dI
YW5kbGVyPgotaW5saW5lIHZvaWQgSW5kZXhTcGFyc2VTZXQ8T3ZlcmZsb3dIYW5kbGVyPjo6YWRk
KHVuc2lnbmVkIHZhbHVlKQoraW5saW5lIGJvb2wgSW5kZXhTcGFyc2VTZXQ8T3ZlcmZsb3dIYW5k
bGVyPjo6YWRkKHVuc2lnbmVkIHZhbHVlKQogewogICAgIGlmIChjb250YWlucyh2YWx1ZSkpCi0g
ICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgdW5zaWduZWQgbmV3
UG9zaXRpb24gPSBtX3ZhbHVlcy5zaXplKCk7CiAgICAgbV92YWx1ZXMuYXBwZW5kKHZhbHVlKTsK
ICAgICBtX21hcFt2YWx1ZV0gPSBuZXdQb3NpdGlvbjsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgotaW5saW5lIHZvaWQgSW5kZXhTcGFy
c2VTZXQ8T3ZlcmZsb3dIYW5kbGVyPjo6cmVtb3ZlKHVuc2lnbmVkIHZhbHVlKQoraW5saW5lIGJv
b2wgSW5kZXhTcGFyc2VTZXQ8T3ZlcmZsb3dIYW5kbGVyPjo6cmVtb3ZlKHVuc2lnbmVkIHZhbHVl
KQogewogICAgIHVuc2lnbmVkIHBvc2l0aW9uID0gbV9tYXBbdmFsdWVdOwogICAgIGlmIChwb3Np
dGlvbiA+PSBtX3ZhbHVlcy5zaXplKCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgaWYgKG1fdmFsdWVzW3Bvc2l0aW9uXSA9PSB2YWx1ZSkgewogICAgICAg
ICB1bnNpZ25lZCBsYXN0VmFsdWUgPSBtX3ZhbHVlcy5sYXN0KCk7CiAgICAgICAgIG1fdmFsdWVz
W3Bvc2l0aW9uXSA9IGxhc3RWYWx1ZTsKICAgICAgICAgbV9tYXBbbGFzdFZhbHVlXSA9IHBvc2l0
aW9uOwogICAgICAgICBtX3ZhbHVlcy5yZW1vdmVMYXN0KCk7CisgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3Zl
cmZsb3dIYW5kbGVyPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269184</attachid>
            <date>2016-01-16 19:38:12 -0800</date>
            <delta_ts>2016-01-16 23:55:16 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>112486</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTUxNzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzc5LDcgKzM3OSw2IEBACiAJCTBGNDkzQUZBMTZEMENB
RDMwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ5M0FGODE2RDBDQUQxMDA4NDUwOEIgLyogU291cmNl
UHJvdmlkZXIuY3BwICovOyB9OwogCQkwRjRCOTREQzE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRB
cnJheUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNEI5NERCMTdCOUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNEM5MTY2MUMy
OUY0RjIwMDQzNDFBNiAvKiBCM09yaWdpbkR1bXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEM5MTY1MUMyOUY0RjIwMDQzNDFBNiAvKiBCM09yaWdp
bkR1bXAuaCAqLzsgfTsKLQkJMEY0QzkxNjgxQzJCM0Q2ODAwNDM0MUE2IC8qIEFpckZpeFNwaWxs
U2xvdFpEZWYuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNEM5MTY3MUMyQjNENjgwMDQzNDFBNiAvKiBBaXJGaXhTcGlsbFNsb3RaRGVmLmggKi87IH07
CiAJCTBGNEYyOURGMThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVz
dGltYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjRGMjlERDE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291
bnRFc3RpbWF0aW9uUGhhc2UuY3BwICovOyB9OwogCQkwRjRGMjlFMDE4QjZBRDFDMDA1N0JDMTUg
LyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEYyOURFMThCNkFEMUMwMDU3QkMx
NSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oICovOyB9OwogCQkw
RjUwQUYzQzE5M0U4QjM5MDA2NzRFRTggLyogREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjUwQUYzQjE5M0U4
QjM5MDA2NzRFRTggLyogREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmggKi87IH07CkBAIC03MjQs
NiArNzIzLDE0IEBACiAJCTBGRTIyOEVFMTQzNkFCMkMwMDE5NkM0OCAvKiBPcHRpb25zLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTIyOEVBMTQz
NkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmNwcCAqLzsgfTsKIAkJMEZFMjU0RjYxQUJEREQyMjAw
QTdDNkQyIC8qIERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFMjU0RjQxQUJEREQyMjAwQTdDNkQyIC8q
IERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwICovOyB9OwogCQkwRkUyNTRGNzFBQkRERDIy
MDBBN0M2RDIgLyogREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFMjU0RjUxQUJEREQyMjAwQTdDNkQyIC8q
IERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuaCAqLzsgfTsKKwkJMEZFMzRDMTExQzRCMTA5NjAw
MDNBNTEyIC8qIEFpckJsb2NrSW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTM0QzBCMUM0QjEwOTYwMDAzQTUxMiAvKiBBaXJC
bG9ja0luc2VydGlvblNldC5jcHAgKi87IH07CisJCTBGRTM0QzEyMUM0QjEwOTYwMDAzQTUxMiAv
KiBBaXJCbG9ja0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFMzRDMEMxQzRCMTA5NjAwMDNBNTEyIC8qIEFpckJsb2NrSW5zZXJ0
aW9uU2V0LmggKi87IH07CisJCTBGRTM0QzEzMUM0QjEwOTYwMDAzQTUxMiAvKiBBaXJCcmVha0Ny
aXRpY2FsRWRnZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFMzRDMEQxQzRCMTA5NjAwMDNBNTEyIC8qIEFpckJyZWFrQ3JpdGljYWxFZGdlcy5j
cHAgKi87IH07CisJCTBGRTM0QzE0MUM0QjEwOTYwMDAzQTUxMiAvKiBBaXJCcmVha0NyaXRpY2Fs
RWRnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RTM0QzBFMUM0QjEwOTYwMDAzQTUxMiAvKiBBaXJCcmVha0NyaXRpY2FsRWRnZXMuaCAqLzsgfTsK
KwkJMEZFMzRDMTUxQzRCMTA5NjAwMDNBNTEyIC8qIEFpclNjYXZlbmdlUmVnaXN0ZXJzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTM0QzBGMUM0
QjEwOTYwMDAzQTUxMiAvKiBBaXJTY2F2ZW5nZVJlZ2lzdGVycy5jcHAgKi87IH07CisJCTBGRTM0
QzE2MUM0QjEwOTYwMDAzQTUxMiAvKiBBaXJTY2F2ZW5nZVJlZ2lzdGVycy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFMzRDMTAxQzRCMTA5NjAwMDNB
NTEyIC8qIEFpclNjYXZlbmdlUmVnaXN0ZXJzLmggKi87IH07CisJCTBGRTM0QzE5MUM0QjM5QUUw
MDAzQTUxMiAvKiBBaXJMb2dSZWdpc3RlclByZXNzdXJlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTM0QzE3MUM0QjM5QUUwMDAzQTUxMiAvKiBB
aXJMb2dSZWdpc3RlclByZXNzdXJlLmNwcCAqLzsgfTsKKwkJMEZFMzRDMUExQzRCMzlBRTAwMDNB
NTEyIC8qIEFpckxvZ1JlZ2lzdGVyUHJlc3N1cmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTM0QzE4MUM0QjM5QUUwMDAzQTUxMiAvKiBBaXJMb2dS
ZWdpc3RlclByZXNzdXJlLmggKi87IH07CiAJCTBGRTcyMTFEMTkzQjlDNTkwMDMxRjZFRCAvKiBE
RkdUcmFuc2l0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRTcyMTFCMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmNwcCAqLzsg
fTsKIAkJMEZFNzIxMUUxOTNCOUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTcyMTFDMTkzQjlDNTkw
MDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmggKi87IH07CiAJCTBGRTgzNDE3MUE2RUY5N0IwMEQw
NDg0NyAvKiBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU4MzQxNTFBNkVGOTdCMDBEMDQ4NDcgLyog
UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwICovOyB9OwpAQCAtMjU0Miw3ICsyNTQ5LDYg
QEAKIAkJMEY0OTNBRjgxNkQwQ0FEMTAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvdXJjZVByb3ZpZGVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0Qjk0REIxN0I5RjA3NTAwREQwM0E0IC8qIFR5
cGVkQXJyYXlJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVk
QXJyYXlJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEM5MTY1MUMy
OUY0RjIwMDQzNDFBNiAvKiBCM09yaWdpbkR1bXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gQjNPcmlnaW5EdW1wLmg7IHBhdGggPSBiMy9CM09yaWdpbkR1bXAuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY0QzkxNjcxQzJCM0Q2ODAwNDM0MUE2IC8qIEFpckZp
eFNwaWxsU2xvdFpEZWYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyRml4
U3BpbGxTbG90WkRlZi5oOyBwYXRoID0gYjMvYWlyL0FpckZpeFNwaWxsU2xvdFpEZWYuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0RjI5REQxOEI2QUQxQzAwNTdCQzE1IC8qIERG
R1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBo
YXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFz
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEYyOURFMThCNkFEMUMwMDU3
QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRp
b25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBo
YXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTBBRjNCMTkzRThCMzkwMDY3
NEVFOCAvKiBERkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmg7IHBhdGggPSBkZmcvREZHU3Ry
dWN0dXJlQ2xvYmJlclN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yOTAw
LDYgKzI5MDYsMTQgQEAKIAkJMEZFMjI4RUIxNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkUyNTRGNDFBQkRERDIyMDBBN0M2RDIgLyogREZHVmFyYXJnc0Zv
cndhcmRpbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBE
RkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdWYXJhcmdzRm9yd2Fy
ZGluZ1BoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFMjU0RjUxQUJE
REQyMjAwQTdDNkQyIC8qIERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5oOyBwYXRoID0g
ZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFMzRDMEIxQzRCMTA5NjAwMDNBNTEyIC8qIEFpckJsb2NrSW5zZXJ0aW9uU2V0LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckJsb2NrSW5zZXJ0aW9u
U2V0LmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJCbG9ja0luc2VydGlvblNldC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTM0QzBDMUM0QjEwOTYwMDAzQTUxMiAvKiBBaXJCbG9j
a0luc2VydGlvblNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJCbG9j
a0luc2VydGlvblNldC5oOyBwYXRoID0gYjMvYWlyL0FpckJsb2NrSW5zZXJ0aW9uU2V0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTM0QzBEMUM0QjEwOTYwMDAzQTUxMiAvKiBB
aXJCcmVha0NyaXRpY2FsRWRnZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gQWlyQnJlYWtDcml0aWNhbEVkZ2VzLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJCcmVha0Ny
aXRpY2FsRWRnZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkUzNEMwRTFD
NEIxMDk2MDAwM0E1MTIgLyogQWlyQnJlYWtDcml0aWNhbEVkZ2VzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEFpckJyZWFrQ3JpdGljYWxFZGdlcy5oOyBwYXRoID0gYjMvYWly
L0FpckJyZWFrQ3JpdGljYWxFZGdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkUzNEMwRjFDNEIxMDk2MDAwM0E1MTIgLyogQWlyU2NhdmVuZ2VSZWdpc3RlcnMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyU2NhdmVuZ2VSZWdpc3RlcnMuY3Bw
OyBwYXRoID0gYjMvYWlyL0FpclNjYXZlbmdlUmVnaXN0ZXJzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFMzRDMTAxQzRCMTA5NjAwMDNBNTEyIC8qIEFpclNjYXZlbmdlUmVn
aXN0ZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclNjYXZlbmdlUmVn
aXN0ZXJzLmg7IHBhdGggPSBiMy9haXIvQWlyU2NhdmVuZ2VSZWdpc3RlcnMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFMzRDMTcxQzRCMzlBRTAwMDNBNTEyIC8qIEFpckxvZ1Jl
Z2lzdGVyUHJlc3N1cmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
QWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5jcHA7IHBhdGggPSBiMy9haXIvQWlyTG9nUmVnaXN0ZXJQ
cmVzc3VyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTM0QzE4MUM0QjM5
QUUwMDAzQTUxMiAvKiBBaXJMb2dSZWdpc3RlclByZXNzdXJlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEFpckxvZ1JlZ2lzdGVyUHJlc3N1cmUuaDsgcGF0aCA9IGIzL2Fpci9B
aXJMb2dSZWdpc3RlclByZXNzdXJlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
RTcyMTFCMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1RyYW5zaXRpb24uY3BwOyBwYXRoID0gZGZnL0RG
R1RyYW5zaXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkU3MjExQzE5
M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNpdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdUcmFuc2l0aW9uLmg7IHBhdGggPSBkZmcvREZHVHJhbnNpdGlvbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkU4MzQxNTFBNkVGOTdCMDBEMDQ4NDcgLyog
UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNDg0Niw3ICs0ODYwLDExIEBACiAJCQkJMEZFQzg1NEIxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckFyZy5oICovLAogCQkJCTBGRUM4NTRDMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJCYXNpY0Jsb2NrLmNwcCAqLywKIAkJCQkwRkVDODU0RDFCREFDREM3MDA4MEZGNzQgLyog
QWlyQmFzaWNCbG9jay5oICovLAorCQkJCTBGRTM0QzBCMUM0QjEwOTYwMDAzQTUxMiAvKiBBaXJC
bG9ja0luc2VydGlvblNldC5jcHAgKi8sCisJCQkJMEZFMzRDMEMxQzRCMTA5NjAwMDNBNTEyIC8q
IEFpckJsb2NrSW5zZXJ0aW9uU2V0LmggKi8sCiAJCQkJMEZCMzg3OEIxQkZCQzQ0RDAwRTNBQjFF
IC8qIEFpckJsb2NrV29ya2xpc3QuaCAqLywKKwkJCQkwRkUzNEMwRDFDNEIxMDk2MDAwM0E1MTIg
LyogQWlyQnJlYWtDcml0aWNhbEVkZ2VzLmNwcCAqLywKKwkJCQkwRkUzNEMwRTFDNEIxMDk2MDAw
M0E1MTIgLyogQWlyQnJlYWtDcml0aWNhbEVkZ2VzLmggKi8sCiAJCQkJMEY2MTgzMjAxQzQ1QkYw
NzAwNzI0NTBCIC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5jcHAgKi8sCiAJCQkJMEY2MTgzMjEx
QzQ1QkYwNzAwNzI0NTBCIC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5oICovLAogCQkJCTBGRUM4
NTRFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuY3BwICovLApAQCAtNDg2MSw3
ICs0ODc5LDYgQEAKIAkJCQkwRjYxODMyNDFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyRW1pdFNodWZm
bGUuaCAqLywKIAkJCQkyNjJEODVCNDFDMEQ2NTBGMDA2QUNCNjEgLyogQWlyRml4UGFydGlhbFJl
Z2lzdGVyU3RhbGxzLmNwcCAqLywKIAkJCQkyNjJEODVCNTFDMEQ2NTBGMDA2QUNCNjEgLyogQWly
Rml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmggKi8sCi0JCQkJMEY0QzkxNjcxQzJCM0Q2ODAwNDM0
MUE2IC8qIEFpckZpeFNwaWxsU2xvdFpEZWYuaCAqLywKIAkJCQkwRkVDODU1MjFCREFDREM3MDA4
MEZGNzQgLyogQWlyRnJlcXVlbnRlZEJsb2NrLmggKi8sCiAJCQkJMEZFQzg1NTMxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckdlbmVyYXRlLmNwcCAqLywKIAkJCQkwRkVDODU1NDFCREFDREM3MDA4MEZG
NzQgLyogQWlyR2VuZXJhdGUuaCAqLywKQEAgLTQ4NzcsNiArNDg5NCw4IEBACiAJCQkJMjY3MThC
QTIxQkU5OUY3ODAwNTIwMTdCIC8qIEFpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcCAq
LywKIAkJCQkyNjcxOEJBMzFCRTk5Rjc4MDA1MjAxN0IgLyogQWlySXRlcmF0ZWRSZWdpc3RlckNv
YWxlc2NpbmcuaCAqLywKIAkJCQkyNjg0RDQzNzFDMDAxNjFDMDA4MUQ2NjMgLyogQWlyTGl2ZW5l
c3MuaCAqLywKKwkJCQkwRkUzNEMxNzFDNEIzOUFFMDAwM0E1MTIgLyogQWlyTG9nUmVnaXN0ZXJQ
cmVzc3VyZS5jcHAgKi8sCisJCQkJMEZFMzRDMTgxQzRCMzlBRTAwMDNBNTEyIC8qIEFpckxvZ1Jl
Z2lzdGVyUHJlc3N1cmUuaCAqLywKIAkJCQkwRjYxODMyNTFDNDVCRjA3MDA3MjQ1MEIgLyogQWly
TG93ZXJBZnRlclJlZ0FsbG9jLmNwcCAqLywKIAkJCQkwRjYxODMyNjFDNDVCRjA3MDA3MjQ1MEIg
LyogQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmggKi8sCiAJCQkJMEY2MTgzMjcxQzQ1QkYwNzAwNzI0
NTBCIC8qIEFpckxvd2VyTWFjcm9zLmNwcCAqLywKQEAgLTQ4OTAsNiArNDkwOSw4IEBACiAJCQkJ
MEZFQzg1NjExQkRBQ0RDNzAwODBGRjc0IC8qIEFpclJlZ2lzdGVyUHJpb3JpdHkuaCAqLywKIAkJ
CQkwRjQ1NzAzQTFCRTQ1RjBBMDA2MkE2MjkgLyogQWlyUmVwb3J0VXNlZFJlZ2lzdGVycy5jcHAg
Ki8sCiAJCQkJMEY0NTcwM0IxQkU0NUYwQTAwNjJBNjI5IC8qIEFpclJlcG9ydFVzZWRSZWdpc3Rl
cnMuaCAqLywKKwkJCQkwRkUzNEMwRjFDNEIxMDk2MDAwM0E1MTIgLyogQWlyU2NhdmVuZ2VSZWdp
c3RlcnMuY3BwICovLAorCQkJCTBGRTM0QzEwMUM0QjEwOTYwMDAzQTUxMiAvKiBBaXJTY2F2ZW5n
ZVJlZ2lzdGVycy5oICovLAogCQkJCTBGMzM4REZCMUJFRDUxMjcwMDEzQzg4RiAvKiBBaXJTaW1w
bGlmeUNGRy5jcHAgKi8sCiAJCQkJMEYzMzhERkMxQkVENTEyNzAwMTNDODhGIC8qIEFpclNpbXBs
aWZ5Q0ZHLmggKi8sCiAJCQkJMEZFQzg1NjIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwZWNpYWwu
Y3BwICovLApAQCAtNjk2NCw2ICs2OTg1LDcgQEAKIAkJCQkwRkVDODU3NDFCREFDREM3MDA4MEZG
NzQgLyogQWlyQ0NhbGxTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODU3NjFCREFD
REM3MDA4MEZGNzQgLyogQWlyQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzNzMwOTMxQzBE
NjdFRTAwMDUyQkZBIC8qIEFpclVzZUNvdW50cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFMzRD
MTQxQzRCMTA5NjAwMDNBNTEyIC8qIEFpckJyZWFrQ3JpdGljYWxFZGdlcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY0NTcwMzkxQkU0NEM5MTAwNjJBNjI5IC8qIEFpckVsaW1pbmF0ZURlYWRDb2Rl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk3OUNGQzZGMDFDMzNCMTAwMDBDNzY4RUEgLyogTExJbnRQ
Q1Jhbmdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzlENUNENUIxQzExMDZBOTAwQ0VDQTA3IC8q
IFNhbXBsaW5nUHJvZmlsZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNzMyNiw3ICs3MzQ4LDYgQEAK
IAkJCQlEQzAwMDM5MzE5RDhCRTZGMDAwMjNFQjAgLyogREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCRTBGNzUxNkMxREIwQjAwODJDNUU4IC8qIERGR1By
ZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGRkM5NUUxNEVG
OTBCNzAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmggaW4gSGVhZGVy
cyAqLywKLQkJCQkwRjRDOTE2ODFDMkIzRDY4MDA0MzQxQTYgLyogQWlyRml4U3BpbGxTbG90WkRl
Zi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzRTAxQUIxOUQzNTNBNTAwRjYxQjdGIC8qIERGR1By
ZVBvc3ROdW1iZXJpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI5Q0VEMTlEMEJBN0QwMEIx
RDFCNSAvKiBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZG
QzkyMTYxQjk0RkIzRTAwNzFERDY2IC8qIERGR1Byb3BlcnR5VHlwZUtleS5oIGluIEhlYWRlcnMg
Ki8sCkBAIC03MzU3LDYgKzczNzgsNyBAQAogCQkJCTcwQjc5MTk5MUMwMjRBMjkwMDI0ODFFMiAv
KiBHZW5lcmF0b3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzA5N0EyMTQ2QjI4
Q0MwMENGMjQ0MiAvKiBERkdUaHVua3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDhBMzI4MTdE
NTFGNTcwMENBMkM0MCAvKiBERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkUzNEMxQTFDNEIzOUFFMDAwM0E1MTIgLyogQWlyTG9nUmVnaXN0ZXJQcmVz
c3VyZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEOEEzMkExN0Q1MUY1NzAwQ0EyQzQwIC8qIERG
R1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkQ4QTMyQzE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29t
cGlsYXRpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUzQTA2QjQxQzEwQ0I5MzAw
MzkwRkREIC8qIEpJVEJpdFhvckdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCkBAIC04MDI5LDYg
KzgwNTEsNyBAQAogCQkJCTcwNUI0MUIyMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2xQcm90b3R5
cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5NkI3MzI4MUJEQTA4RUYwMDMzMUI4NCAvKiBTeW1i
b2xQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2QjBFMTZGNUNEMDBC
MzQ0NjAgLyogU3ltYm9sVGFibGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRTM0QzE2MUM0QjEw
OTYwMDAzQTUxMiAvKiBBaXJTY2F2ZW5nZVJlZ2lzdGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTc4NEEyNjQxMUQxNjYyMjAwNTc3NkFDIC8qIFN5bnRheENoZWNrZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTcwRUNBNjA4MUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5LmggaW4g
SGVhZGVycyAqLywKIAkJCQk3MEVDQTYwOTFBRkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdp
c3RyeUtleS5oIGluIEhlYWRlcnMgKi8sCkBAIC04MDQ2LDYgKzgwNjksNyBAQAogCQkJCTBGMzM4
RTEzMUJGMDI3NkMwMDEzQzg4RiAvKiBCM09wYXF1ZUJ5cHJvZHVjdHMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMkI2NzA4MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0Qjk0REMxN0I5RjA3NTAwREQwM0E0IC8qIFR5cGVkQXJy
YXlJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkUzNEMxMjFDNEIxMDk2MDAwM0E1MTIg
LyogQWlyQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NzA5MTdC
NkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY3
MEIxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjJENERFQTE5ODMyREFDMDA3RDRCMTkgLyogVHlwZUxvY2F0aW9uLmggaW4gSGVhZGVycyAq
LywKQEAgLTg3MjksNiArODc1Myw3IEBACiAJCQkJMEZFQzg1MjExQkRBQ0RBQzAwODBGRjc0IC8q
IEIzT3Bjb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUM4NTIzMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM09yaWdpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVDODUyNTFCREFDREFDMDA4
MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkUz
NEMxNTFDNEIxMDk2MDAwM0E1MTIgLyogQWlyU2NhdmVuZ2VSZWdpc3RlcnMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZFQzg1MjcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFZhbHVl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUM4NTI5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Bo
YXNlU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQzg1MkIxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzUHJvY2VkdXJlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtODg5NSw2ICs4OTIwLDcgQEAK
IAkJCQkwRjU4NzRFRDE5NEZFQjEyMDBBQUIyQzEgLyogREZHTWF5RXhpdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjE3MjVGRjFCNDg3MTlBMDBBQzNBNTUgLyogREZHTWluaWZpZWRHcmFwaC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCREM0RDE1MjI4MTg2MDBDRDg5MTAgLyogREZHTWlu
aWZpZWROb2RlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTM0QzEzMUM0QjEwOTYwMDAzQTUx
MiAvKiBBaXJCcmVha0NyaXRpY2FsRWRnZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4RjE0
MzUxQURGMDkwMTAwRUQ3OTJDIC8qIERGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZGMkNENUIxQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZz
ZXREYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3Mzc4MTBEMTc5OUVBMkUwMDgxNzUzMyAv
KiBERkdOYXR1cmFsTG9vcHMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05MDM1LDYgKzkwNjEsNyBA
QAogCQkJCTBGMjM1QkUxMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExUaHVua3MuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY2QjFDQzUxODYyQzQ3ODAwODQ1RDk3IC8qIEZUTFVud2luZEluZm8uY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1QTYyODMxODhDOThENDAwNzJDOURGIC8qIEZUTFZhbHVl
UmFuZ2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFMzRDMTExQzRCMTA5NjAwMDNBNTEyIC8q
IEFpckJsb2NrSW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJBODM2Mzg5MThE
N0QwRkUwMDAwRUJDQyAvKiBGdWxsR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTE0N0YzOUNCMTA3RUMzNzYwMDQyN0E0OCAvKiBGdW5jdGlvbkNvbnN0cnVjdG9yLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjBGMTlGMTZCNzJBMTcwMDVERjk1QiAvKiBGdW5jdGlv
bkV4ZWN1dGFibGVEdW1wLmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTA5MSw2ICs5MTE4LDcgQEAK
IAkJCQlBNTkzQ0Y4MjE4NDAzNzcxMDBCRkNFMjcgLyogSW5zcGVjdG9yVmFsdWVzLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTE0N0YzOUNGMTA3RUMzNzYwMDQyN0E0OCAvKiBJbnRlcm5hbEZ1bmN0
aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjlEN0Q0MEVEMjEyODIwMEI4OTYxOSAvKiBJ
bnRlcnByZXRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkUzNEMxOTFDNEIzOUFFMDAwM0E1
MTIgLyogQWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMUI5
RTIzOTFCNEUwRDY3MDBCQzdGRUQgLyogSW50bENvbGxhdG9yLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUExQjlFMjNCMUI0RTBENjcwMEJDN0ZFRCAvKiBJbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBMUI5RTIzRDFCNEUwRDY3MDBCQzdGRUQgLyogSW50bENv
bGxhdG9yUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuY3BwCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDUsMTkgKzEwNSwxNCBAQCBJbnN0IENoZWNrU3BlY2lhbDo6aGlkZGVuQnJhbmNoKGNvbnN0
IEluCiAgICAgcmV0dXJuIGhpZGRlbkJyYW5jaDsKIH0KIAotdm9pZCBDaGVja1NwZWNpYWw6OmNv
bW1pdEhpZGRlbkJyYW5jaChJbnN0JiBvcmlnaW5hbCwgSW5zdCYgaGlkZGVuQnJhbmNoKQotewot
ICAgIEFTU0VSVChoaWRkZW5CcmFuY2guYXJncy5zaXplKCkgPT0gbV9udW1DaGVja0FyZ3MpOwot
ICAgIEFTU0VSVChoaWRkZW5CcmFuY2gub3Bjb2RlID0gbV9jaGVja09wY29kZSk7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbnVtQ2hlY2tBcmdzOyArK2kpCi0gICAgICAgIG9yaWdp
bmFsLmFyZ3NbaSArIDFdID0gaGlkZGVuQnJhbmNoLmFyZ3NbaV07Ci19Ci0KIHZvaWQgQ2hlY2tT
cGVjaWFsOjpmb3JFYWNoQXJnKEluc3QmIGluc3QsIGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0OjpF
YWNoQXJnQ2FsbGJhY2s+JiBjYWxsYmFjaykKIHsKICAgICBJbnN0IGhpZGRlbiA9IGhpZGRlbkJy
YW5jaChpbnN0KTsKLSAgICBoaWRkZW4uZm9yRWFjaEFyZyhjYWxsYmFjayk7Ci0gICAgY29tbWl0
SGlkZGVuQnJhbmNoKGluc3QsIGhpZGRlbik7CisgICAgaGlkZGVuLmZvckVhY2hBcmcoCisgICAg
ICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgdHlwZSwgQXJnOjpX
aWR0aCB3aWR0aCkgeworICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSAmYXJnIC0gJmhpZGRl
bi5hcmdzWzBdOworICAgICAgICAgICAgY2FsbGJhY2soaW5zdC5hcmdzWzEgKyBpbmRleF0sIHJv
bGUsIHR5cGUsIHdpZHRoKTsKKyAgICAgICAgfSk7CiAgICAgZm9yRWFjaEFyZ0ltcGwobnVtQjNB
cmdzKGluc3QpLCBtX251bUNoZWNrQXJncyArIDEsIGluc3QsIG1fc3RhY2ttYXBSb2xlLCBjYWxs
YmFjayk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lh
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lh
bC5oCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVj
a1NwZWNpYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDkgKzEyMyw2IEBAIHByb3RlY3RlZDoK
ICAgICAvLyBDb25zdHJ1Y3RzIGFuZCByZXR1cm5zIHRoZSBJbnN0IHJlcHJlc2VudGluZyB0aGUg
YnJhbmNoIHRoYXQgdGhpcyB3aWxsIHVzZS4KICAgICBBaXI6Okluc3QgaGlkZGVuQnJhbmNoKGNv
bnN0IEFpcjo6SW5zdCYpIGNvbnN0OwogCi0gICAgLy8gSWYgd2UgZWRpdGVkIHRoZSBoaWRkZW4g
YnJhbmNoLCB0aGlzIGluc3RhbGxzIHRoZSBlZGl0cyBpbnRvIHRoZSBnaXZlbiBpbnN0LgotICAg
IHZvaWQgY29tbWl0SGlkZGVuQnJhbmNoKEFpcjo6SW5zdCYgb3JpZ2luYWwsIEFpcjo6SW5zdCYg
aGlkZGVuQnJhbmNoKTsKLQogICAgIHZvaWQgZm9yRWFjaEFyZyhBaXI6Okluc3QmLCBjb25zdCBT
Y29wZWRMYW1iZGE8QWlyOjpJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+Jikgb3ZlcnJpZGU7CiAgICAg
Ym9vbCBpc1ZhbGlkKEFpcjo6SW5zdCYpIG92ZXJyaWRlOwogICAgIGJvb2wgYWRtaXRzU3RhY2so
QWlyOjpJbnN0JiwgdW5zaWduZWQgYXJnSW5kZXgpIG92ZXJyaWRlOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwCShyZXZpc2lv
biAxOTUxNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3Rh
Y2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKEIzX0pJ
VCkKIAogI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIK
ICNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgiCiAj
aW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgpAQCAtMTY2LDggKzE2Nyw0NyBAQCB2b2lkIGFsbG9j
YXRlU3RhY2soQ29kZSYgY29kZSkKICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSBi
bG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTspIHsKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQog
ICAgICAgICAgICAgICAgIGRhdGFMb2coIkFuYWx5emluZzogIiwgYmxvY2stPmF0KGluc3RJbmRl
eCksICJcbiIpOworCisgICAgICAgICAgICAvLyBLaWxsIGRlYWQgc3RvcmVzLiBGb3Igc2ltcGxp
Y2l0eSB3ZSBzYXkgdGhhdCBhIHN0b3JlIGlzIGtpbGxhYmxlIGlmIGl0IGhhcyBvbmx5IGxhdGUK
KyAgICAgICAgICAgIC8vIGRlZnMgYW5kIHRob3NlIGxhdGUgZGVmcyBhcmUgdG8gdGhpbmdzIHRo
YXQgYXJlIGRlYWQgcmlnaHQgbm93LiBXZSBvbmx5IGRvIHRoYXQKKyAgICAgICAgICAgIC8vIGJl
Y2F1c2UgdGhhdCdzIHRoZSBvbmx5IGtpbmQgb2YgZGVhZCBzdGFjayBzdG9yZSB3ZSB3aWxsIHNl
ZSBoZXJlLgorICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOwor
ICAgICAgICAgICAgaWYgKGZhbHNlICYmICFpbnN0Lmhhc05vbkFyZ0VmZmVjdHMoKSkgeworICAg
ICAgICAgICAgICAgIGJvb2wgb2sgPSB0cnVlOworICAgICAgICAgICAgICAgIGluc3QuZm9yRWFj
aEFyZygKKyAgICAgICAgICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUs
IEFyZzo6VHlwZSwgQXJnOjpXaWR0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFy
Zzo6aXNFYXJseURlZihyb2xlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9rID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcmc6OmlzTGF0ZURl
Zihyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIWFyZy5pc1N0YWNrKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvayA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNr
U2xvdCogc2xvdCA9IGFyZy5zdGFja1Nsb3QoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChzbG90LT5raW5kKCkgIT0gU3RhY2tTbG90S2luZDo6QW5vbnltb3VzKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChsb2NhbENhbGMuaXNMaXZlKHNsb3QpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgICAgIGlmIChvaykKKyAgICAgICAgICAgICAgICAgICAgaW5zdCA9IEluc3QoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICAgICAgaW50ZXJmZXJlKGluc3RJ
bmRleCk7CiAgICAgICAgICAgICBsb2NhbENhbGMuZXhlY3V0ZShpbnN0SW5kZXgpOworCisgICAg
ICAgICAgICBibG9jay0+aW5zdHMoKS5yZW1vdmVBbGxNYXRjaGluZygKKyAgICAgICAgICAgICAg
ICBbJl0gKGNvbnN0IEluc3QmIGluc3QpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gIWluc3Q7CisgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KICAgICAgICAgaW50
ZXJmZXJlKC0xKTsKICAgICB9CkBAIC0yMzIsMzMgKzI3Miw0MyBAQCB2b2lkIGFsbG9jYXRlU3Rh
Y2soQ29kZSYgY29kZSkKICAgICAvLyBXZSB3b3VsZCBoYXZlIHRvIHNjYXZlbmdlIGZvciB0ZW1w
b3JhcmllcyBpZiB0aGlzIGhhcHBlbmVkLiBGb3J0dW5hdGVseSwgdGhpcyBjYXNlIHdpbGwgYmUK
ICAgICAvLyBleHRyZW1lbHkgcmFyZSBzbyB3ZSBjYW4gZG8gY3JhenkgdGhpbmdzIHdoZW4gaXQg
YXJpc2VzLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NTI1MzAKLSAgICAKKworICAgIEluc2VydGlvblNldCBpbnNlcnRpb25TZXQoY29kZSk7CiAgICAg
Zm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKLSAgICAgICAgZm9yIChJbnN0JiBpbnN0
IDogKmJsb2NrKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gMDsgaW5zdElu
ZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbnN0SW5kZXgpIHsKKyAgICAgICAgICAgIEluc3QmIGlu
c3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKICAgICAgICAgICAgIGluc3QuZm9yRWFjaEFyZygK
LSAgICAgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUsIEFyZzo6VHlwZSwgQXJn
OjpXaWR0aCB3aWR0aCkKLSAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgWyZdIChB
cmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSwgQXJnOjpXaWR0aCB3aWR0aCkgewor
ICAgICAgICAgICAgICAgICAgICBhdXRvIHN0YWNrQWRkciA9IFsmXSAoaW50MzJfdCBvZmZzZXQp
IC0+IEFyZyB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQXJnOjpzdGFja0FkZHIo
b2Zmc2V0LCBjb2RlLmZyYW1lU2l6ZSgpLCB3aWR0aCk7CisgICAgICAgICAgICAgICAgICAgIH07
CisgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGFyZy5r
aW5kKCkpIHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OlN0YWNrOiB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBhcmcgPSBBcmc6OmFkZHIoCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhcmcub2Zmc2V0KCkgKyBhcmcuc3RhY2tTbG90KCktPm9mZnNldEZyb21GUCgp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlzVmFsaWRGb3JtKHdpZHRoKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IEFyZzo6YWRkcigKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVG1wKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJS
ZWdpc3RlciksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZy5vZmZzZXQoKSAr
IGNvZGUuZnJhbWVTaXplKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBz
bG90ID0gYXJnLnN0YWNrU2xvdCgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6
aXNaRGVmKHJvbGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2xvdC0+a2luZCgp
ID09IFN0YWNrU2xvdEtpbmQ6OkFub255bW91cworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICYmIHNsb3QtPmJ5dGVTaXplKCkgPiBBcmc6OmJ5dGVzKHdpZHRoKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIEN1cnJlbnRseSB3ZSBvbmx5IGhhbmRsZSB0aGlzIHNpbXBsZSBj
YXNlIGJlY2F1c2UgaXQncyB0aGUgb25seSBvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyB0aGF0IGFyaXNlczogWkRlZidzIGFyZSBvbmx5IDMyLWJpdCByaWdodCBub3cuIFNvLCB3
aGVuIHdlIGhpdCB0aGVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzc2VydGlv
bnMgaXQgbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIGltcGxlbWVudCB0aG9zZSBvdGhlciBraW5kcyBv
ZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHplcm8gZmlsbHMuCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvdC0+Ynl0ZVNpemUoKSA9PSA4KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh3aWR0aCA9PSBBcmc6
OldpZHRoMzIpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgcmVseSBvbiB0
aGUgZmFjdCB0aGF0IHRoZXJlIG11c3QgYmUgc29tZSB3YXkgdG8gbW92ZSB6ZXJvIHRvIGEKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtZW1vcnkgbG9jYXRpb24gd2l0aG91dCBmaXJz
dCBidXJuaW5nIGEgcmVnaXN0ZXIuIE9uIEFSTSwgd2Ugd291bGQgZG8KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyB0aGlzIHVzaW5nIHpyLgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGlzVmFsaWRGb3JtKE1vdmUzMiwgQXJnOjpJbW0sIEFyZzo6QWRk
cikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RJbmRleCArIDEsIE1vdmUzMiwgaW5z
dC5vcmlnaW4sIEFyZzo6aW1tKDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGFja0FkZHIoYXJnLm9mZnNldCgpICsgNCArIHNsb3QtPm9mZnNldEZyb21GUCgpKSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBzdGFj
a0FkZHIoYXJnLm9mZnNldCgpICsgc2xvdC0+b2Zmc2V0RnJvbUZQKCkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBBcmc6OkNhbGxBcmc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBB
cmc6OmFkZHIoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVG1wKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcub2Zmc2V0KCkg
LSBjb2RlLmZyYW1lU2l6ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlz
VmFsaWRGb3JtKHdpZHRoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IEFy
Zzo6YWRkcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG1wKE1hY3JvQXNzZW1i
bGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFyZy5vZmZzZXQoKSArIGNvZGUuZnJhbWVTaXplKCkpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gc3RhY2tBZGRyKGFyZy5vZmZz
ZXQoKSAtIGNvZGUuZnJhbWVTaXplKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKQEAgLTI2Niw2ICszMTYsNyBAQCB2b2lkIGFsbG9jYXRlU3RhY2soQ29kZSYgY29kZSkK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICApOwogICAgICAgICB9CisgICAgICAgIGlu
c2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJBcmcuaAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDYgKzEyNiw3
IEBAIHB1YmxpYzoKICAgICAgICAgLy8gZGVwZW5kaW5nIG9uIHRoZSBraW5kIG9mIHRoZSBhcmd1
bWVudDoKICAgICAgICAgLy8KICAgICAgICAgLy8gRm9yIHJlZ2lzdGVyOiB0aGUgdXBwZXIgYml0
cyBhcmUgemVyby1maWxsZWQuCisgICAgICAgIC8vIEZvciBhbm9ueW1vdXMgc3RhY2sgc2xvdDog
dGhlIHVwcGVyIGJpdHMgYXJlIHplcm8tZmlsbGVkLgogICAgICAgICAvLyBGb3IgYWRkcmVzczog
dGhlIHVwcGVyIGJpdHMgYXJlIG5vdCB0b3VjaGVkIChpLmUuIHdlIGRvIGEgMzItYml0IHN0b3Jl
IGluIG91ciBleGFtcGxlKS4KICAgICAgICAgLy8gRm9yIHRtcDogZWl0aGVyIHRoZSB1cHBlciBi
aXRzIGFyZSBub3QgdG91Y2hlZCBvciB0aGV5IGFyZSB6ZXJvLWZpbGxlZCwgYW5kIHdlIHdvbid0
IGtub3cKICAgICAgICAgLy8gd2hpY2ggdW50aWwgd2UgbG93ZXIgdGhlIHRtcCB0byBlaXRoZXIg
YSBTdGFja1Nsb3Qgb3IgYSBSZWcuCkBAIC01MTMsNiArNTE0LDE3IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKKyAgICBzdGF0aWMgQXJnIHN0YWNrQWRkcihpbnQz
Ml90IG9mZnNldEZyb21GUCwgdW5zaWduZWQgZnJhbWVTaXplLCBXaWR0aCB3aWR0aCkKKyAgICB7
CisgICAgICAgIEFyZyByZXN1bHQgPSBBcmc6OmFkZHIoQWlyOjpUbXAoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIpLCBvZmZzZXRGcm9tRlApOworICAgICAgICBpZiAoIXJlc3VsdC5pc1ZhbGlk
Rm9ybSh3aWR0aCkpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IEFyZzo6YWRkcigKKyAgICAgICAg
ICAgICAgICBBaXI6OlRtcChNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpLAor
ICAgICAgICAgICAgICAgIG9mZnNldEZyb21GUCArIGZyYW1lU2l6ZSk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKICAgICAvLyBJZiB5b3UgZG9uJ3QgcGFzcyBh
IFdpZHRoLCB0aGlzIG9wdGltaXN0aWNhbGx5IGFzc3VtZXMgdGhhdCB5b3UncmUgdXNpbmcgdGhl
IHJpZ2h0IHdpZHRoLgogICAgIHN0YXRpYyBib29sIGlzVmFsaWRTY2FsZSh1bnNpZ25lZCBzY2Fs
ZSwgT3B0aW9uYWw8V2lkdGg+IHdpZHRoID0gTnVsbG9wdCkKICAgICB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5jcHAJKHJldmlzaW9uIDE5
NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU3LDExICs1NywyMSBAQCB2b2lkIEJhc2ljQmxvY2s6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgCiAKIHZvaWQgQmFzaWNCbG9jazo6ZGVlcER1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKIHsKKyAgICBkdW1wSGVhZGVyKG91dCk7CisgICAgZm9yIChjb25zdCBJ
bnN0JiBpbnN0IDogKnRoaXMpCisgICAgICAgIG91dC5wcmludCgiICAgICIsIGluc3QsICJcbiIp
OworICAgIGR1bXBGb290ZXIob3V0KTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpkdW1wSGVhZGVy
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CiAgICAgb3V0LnByaW50KCJCQiIsICp0aGlzLCAi
OiA7IGZyZXF1ZW5jeSA9ICIsIG1fZnJlcXVlbmN5LCAiXG4iKTsKICAgICBpZiAocHJlZGVjZXNz
b3JzKCkuc2l6ZSgpKQogICAgICAgICBvdXQucHJpbnQoIiAgUHJlZGVjZXNzb3JzOiAiLCBwb2lu
dGVyTGlzdER1bXAocHJlZGVjZXNzb3JzKCkpLCAiXG4iKTsKLSAgICBmb3IgKGNvbnN0IEluc3Qm
IGluc3QgOiAqdGhpcykKLSAgICAgICAgb3V0LnByaW50KCIgICAgIiwgaW5zdCwgIlxuIik7Cit9
CisKK3ZvaWQgQmFzaWNCbG9jazo6ZHVtcEZvb3RlcihQcmludFN0cmVhbSYgb3V0KSBjb25zdAor
ewogICAgIGlmIChzdWNjZXNzb3JzKCkuc2l6ZSgpKQogICAgICAgICBvdXQucHJpbnQoIiAgU3Vj
Y2Vzc29yczogIiwgbGlzdER1bXAoc3VjY2Vzc29ycygpKSwgIlxuIik7CiB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAkocmV2aXNpb24gMTk1
MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7IG5hbWVzcGFjZSBBaXIgewogCitjbGFzcyBCbG9ja0luc2VydGlvblNldDsKIGNsYXNz
IENvZGU7CiBjbGFzcyBJbnNlcnRpb25TZXQ7CiAKQEAgLTEyNiw3ICsxMjcsMTEgQEAgcHVibGlj
OgogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIHZvaWQgZGVlcER1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdDsKIAorICAgIHZvaWQgZHVtcEhlYWRlcihQcmludFN0cmVhbSYp
IGNvbnN0OworICAgIHZvaWQgZHVtcEZvb3RlcihQcmludFN0cmVhbSYpIGNvbnN0OworCiBwcml2
YXRlOgorICAgIGZyaWVuZCBjbGFzcyBCbG9ja0luc2VydGlvblNldDsKICAgICBmcmllbmQgY2xh
c3MgQ29kZTsKICAgICBmcmllbmQgY2xhc3MgSW5zZXJ0aW9uU2V0OwogICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja0luc2VydGlvblNldC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja0luc2VydGlvblNl
dC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJs
b2NrSW5zZXJ0aW9uU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJBaXJCbG9ja0luc2VydGlvblNldC5oIgorCisjaWYgRU5BQkxFKEIz
X0pJVCkKKworI2luY2x1ZGUgIkFpckJhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJBaXJJbnN0SW5s
aW5lcy5oIgorI2luY2x1ZGUgPHd0Zi9CdWJibGVTb3J0Lmg+CisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworQmxvY2tJbnNlcnRpb25TZXQ6OkJsb2Nr
SW5zZXJ0aW9uU2V0KENvZGUgJmNvZGUpCisgICAgOiBtX2NvZGUoY29kZSkKK3sKK30KKworQmxv
Y2tJbnNlcnRpb25TZXQ6On5CbG9ja0luc2VydGlvblNldCgpIHsgfQorCit2b2lkIEJsb2NrSW5z
ZXJ0aW9uU2V0OjppbnNlcnQoQmxvY2tJbnNlcnRpb24mJiBpbnNlcnRpb24pCit7CisgICAgbV9p
bnNlcnRpb25zLmFwcGVuZChXVEZNb3ZlKGluc2VydGlvbikpOworfQorCitCYXNpY0Jsb2NrKiBC
bG9ja0luc2VydGlvblNldDo6aW5zZXJ0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVlbmN5
KQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPiBibG9jayhuZXcgQmFzaWNCbG9j
ayhVSU5UX01BWCwgZnJlcXVlbmN5KSk7CisgICAgQmFzaWNCbG9jayogcmVzdWx0ID0gYmxvY2su
Z2V0KCk7CisgICAgaW5zZXJ0KEJsb2NrSW5zZXJ0aW9uKGluZGV4LCBXVEZNb3ZlKGJsb2NrKSkp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0Jhc2ljQmxvY2sqIEJsb2NrSW5zZXJ0aW9uU2V0
OjppbnNlcnRCZWZvcmUoQmFzaWNCbG9jayogYmVmb3JlLCBkb3VibGUgZnJlcXVlbmN5KQorewor
ICAgIHJldHVybiBpbnNlcnQoYmVmb3JlLT5pbmRleCgpLCBmcmVxdWVuY3kgPT0gZnJlcXVlbmN5
ID8gZnJlcXVlbmN5IDogYmVmb3JlLT5mcmVxdWVuY3koKSk7Cit9CisKK0Jhc2ljQmxvY2sqIEJs
b2NrSW5zZXJ0aW9uU2V0OjppbnNlcnRBZnRlcihCYXNpY0Jsb2NrKiBhZnRlciwgZG91YmxlIGZy
ZXF1ZW5jeSkKK3sKKyAgICByZXR1cm4gaW5zZXJ0KGFmdGVyLT5pbmRleCgpICsgMSwgZnJlcXVl
bmN5ID09IGZyZXF1ZW5jeSA/IGZyZXF1ZW5jeSA6IGFmdGVyLT5mcmVxdWVuY3koKSk7Cit9CisK
K2Jvb2wgQmxvY2tJbnNlcnRpb25TZXQ6OmV4ZWN1dGUoKQoreworICAgIGlmIChtX2luc2VydGlv
bnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgLy8gV2UgYWxs
b3cgaW5zZXJ0aW9ucyB0byBiZSBnaXZlbiB0byB1cyBpbiBhbnkgb3JkZXIuIFNvLCB3ZSBuZWVk
IHRvIHNvcnQgdGhlbSBiZWZvcmUKKyAgICAvLyBydW5uaW5nIFdURjo6ZXhlY3V0ZUluc2VydGlv
bnMuIFdlIHN0cm9uZ2x5IHByZWZlciBhIHN0YWJsZSBzb3J0IGFuZCB3ZSB3YW50IGl0IHRvIGJl
CisgICAgLy8gZmFzdCwgc28gd2UgdXNlIGJ1YmJsZSBzb3J0LgorICAgIGJ1YmJsZVNvcnQobV9p
bnNlcnRpb25zLmJlZ2luKCksIG1faW5zZXJ0aW9ucy5lbmQoKSk7CisKKyAgICBleGVjdXRlSW5z
ZXJ0aW9ucyhtX2NvZGUubV9ibG9ja3MsIG1faW5zZXJ0aW9ucyk7CisgICAgCisgICAgLy8gUHJ1
bmUgb3V0IGVtcHR5IGVudHJpZXMuIFRoaXMgaXNuJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IGJ1dCBp
dCdzCisgICAgLy8gaGVhbHRoeSB0byBrZWVwIHRoZSBibG9jayBsaXN0IGZyb20gZ3Jvd2luZy4K
KyAgICBtX2NvZGUubV9ibG9ja3MucmVtb3ZlQWxsTWF0Y2hpbmcoCisgICAgICAgIFsmXSAoc3Rk
Ojp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+JiBibG9ja1B0cikgLT4gYm9vbCB7CisgICAgICAgICAg
ICByZXR1cm4gIWJsb2NrUHRyOworICAgICAgICB9KTsKKyAgICAKKyAgICAvLyBNYWtlIHN1cmUg
dGhhdCB0aGUgYmxvY2tzIGtub3cgdGhlaXIgbmV3IGluZGljZXMuCisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fY29kZS5tX2Jsb2Nrcy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9jb2Rl
Lm1fYmxvY2tzW2ldLT5tX2luZGV4ID0gaTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
fSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja0luc2VydGlv
blNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmxv
Y2tJbnNlcnRpb25TZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQmxvY2tJbnNlcnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQWlyQmxvY2tJbnNlcnRpb25TZXRfaAorI2RlZmluZSBBaXJCbG9ja0luc2VydGlvblNldF9o
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUg
PHd0Zi9JbnNlcnRpb24uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgSW5zZXJ0aW9uU2V0
OworCit0eXBlZGVmIFdURjo6SW5zZXJ0aW9uPHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPj4g
QmxvY2tJbnNlcnRpb247CisKK2NsYXNzIEJsb2NrSW5zZXJ0aW9uU2V0IHsKK3B1YmxpYzoKKyAg
ICBCbG9ja0luc2VydGlvblNldChDb2RlJik7CisgICAgfkJsb2NrSW5zZXJ0aW9uU2V0KCk7Cisg
ICAgCisgICAgdm9pZCBpbnNlcnQoQmxvY2tJbnNlcnRpb24mJik7CisKKyAgICAvLyBJbnNlcnQg
YSBuZXcgYmxvY2sgYXQgYSBnaXZlbiBpbmRleC4KKyAgICBCYXNpY0Jsb2NrKiBpbnNlcnQodW5z
aWduZWQgaW5kZXgsIGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKTsKKworICAgIC8vIEluc2VydHMg
YSBuZXcgYmxvY2sgYmVmb3JlIHRoZSBnaXZlbiBibG9jay4gVXN1YWxseSB5b3Ugd2lsbCBub3Qg
cGFzcyB0aGUgZnJlcXVlbmN5CisgICAgLy8gYXJndW1lbnQuIFBhc3NpbmcgUE5hTiBjYXVzZXMg
dXMgdG8ganVzdCB1c2UgdGhlIGZyZXF1ZW5jeSBvZiB0aGUgJ2JlZm9yZScgYmxvY2suIFRoYXQn
cworICAgIC8vIHVzdWFsbHkgd2hhdCB5b3Ugd2FudC4KKyAgICBCYXNpY0Jsb2NrKiBpbnNlcnRC
ZWZvcmUoQmFzaWNCbG9jayogYmVmb3JlLCBkb3VibGUgZnJlcXVlbmN5ID0gUE5hTik7CisKKyAg
ICAvLyBJbnNlcnRzIGEgbmV3IGJsb2NrIGFmdGVyIHRoZSBnaXZlbiBibG9jay4KKyAgICBCYXNp
Y0Jsb2NrKiBpbnNlcnRBZnRlcihCYXNpY0Jsb2NrKiBhZnRlciwgZG91YmxlIGZyZXF1ZW5jeSA9
IFBOYU4pOworCisgICAgYm9vbCBleGVjdXRlKCk7CisKK3ByaXZhdGU6CisgICAgQ29kZSYgbV9j
b2RlOworICAgIFZlY3RvcjxCbG9ja0luc2VydGlvbiwgOD4gbV9pbnNlcnRpb25zOworfTsKKwor
fSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKworI2VuZGlmIC8vIEFpckJsb2NrSW5zZXJ0aW9uU2V0X2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCcmVha0NyaXRpY2FsRWRnZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQnJlYWtDcml0aWNhbEVkZ2VzLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQnJlYWtD
cml0aWNhbEVkZ2VzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkFpckJyZWFrQ3JpdGljYWxFZGdlcy5oIgorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworI2luY2x1ZGUgIkFpckJsb2NrSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQWlyQ29k
ZS5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBicmVha0NyaXRpY2FsRWRnZXMoQ29k
ZSYgY29kZSkKK3sKKyAgICBCbG9ja0luc2VydGlvblNldCBpbnNlcnRpb25TZXQoY29kZSk7Cisg
ICAgCisgICAgZm9yICh1bnNpZ25lZCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IGNvZGUu
c2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBjb2Rl
W2Jsb2NrSW5kZXhdOworICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgaWYgKGJsb2NrLT5udW1TdWNjZXNzb3JzKCkgPD0gMSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5udW1TdWNjZXNz
b3JzKCk7IGktLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqJiBzdWNjZXNzb3IgPSBibG9j
ay0+c3VjY2Vzc29yQmxvY2soaSk7CisgICAgICAgICAgICBpZiAoc3VjY2Vzc29yLT5wcmVkZWNl
c3NvcnMoKS5zaXplKCkgPD0gMSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICAgICAgQmFzaWNCbG9jayogcGFkID0gaW5zZXJ0aW9uU2V0Lmluc2VydEJlZm9yZShzdWNjZXNz
b3IsIHN1Y2Nlc3Nvci0+ZnJlcXVlbmN5KCkpOworICAgICAgICAgICAgcGFkLT5hcHBlbmQoSnVt
cCwgc3VjY2Vzc29yLT5hdCgwKS5vcmlnaW4pOworICAgICAgICAgICAgcGFkLT5zdWNjZXNzb3Jz
KCkuYXBwZW5kKEZyZXF1ZW50ZWRCbG9jayhzdWNjZXNzb3IpKTsKKyAgICAgICAgICAgIHN1Y2Nl
c3Nvci0+cmVwbGFjZVByZWRlY2Vzc29yKGJsb2NrLCBwYWQpOworICAgICAgICAgICAgc3VjY2Vz
c29yID0gcGFkOworICAgICAgICB9CisgICAgfQorCisgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUo
KTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCcmVh
a0NyaXRpY2FsRWRnZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckJyZWFrQ3JpdGljYWxFZGdlcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJCcmVha0NyaXRpY2FsRWRnZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBBaXJCcmVha0NyaXRpY2FsRWRnZXNfaAorI2RlZmluZSBBaXJCcmVha0Ny
aXRpY2FsRWRnZXNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCit2b2lkIGJyZWFr
Q3JpdGljYWxFZGdlcyhDb2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJCcmVha0NyaXRpY2Fs
RWRnZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkocmV2
aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAgY2xhc3MgUHJvY2VkdXJlOwogCiBuYW1l
c3BhY2UgQWlyIHsKIAorY2xhc3MgQmxvY2tJbnNlcnRpb25TZXQ7CiBjbGFzcyBDQ2FsbFNwZWNp
YWw7CiAKIC8vIFRoaXMgaXMgYW4gSVIgdGhhdCBpcyB2ZXJ5IGNsb3NlIHRvIHRoZSBiYXJlIG1l
dGFsLiBJdCByZXF1aXJlcyBhYm91dCA0MHggbW9yZSBieXRlcyB0aGFuIHRoZQpAQCAtMzI0LDYg
KzMyNSw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgOjpKU0M6OkIz
OjpQcm9jZWR1cmU7CisgICAgZnJpZW5kIGNsYXNzIEJsb2NrSW5zZXJ0aW9uU2V0OwogICAgIAog
ICAgIENvZGUoUHJvY2VkdXJlJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyRW1pdFNodWZmbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuY3BwCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckVtaXRTaHVmZmxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzAsNiArNzAsMTQgQEAgdm9pZCBTaHVmZmxlUGFpcjo6ZHVtcChQcmludFN0cmVhbSYgb3V0
KQogICAgIG91dC5wcmludCh3aWR0aCgpLCAiOiIsIHNyYygpLCAiPT4iLCBkc3QoKSk7CiB9CiAK
K0luc3QgY3JlYXRlU2h1ZmZsZShWYWx1ZSogb3JpZ2luLCBjb25zdCBWZWN0b3I8U2h1ZmZsZVBh
aXI+JiBwYWlycykKK3sKKyAgICBJbnN0IHJlc3VsdChTaHVmZmxlLCBvcmlnaW4pOworICAgIGZv
ciAoY29uc3QgU2h1ZmZsZVBhaXImIHBhaXIgOiBwYWlycykKKyAgICAgICAgcmVzdWx0LmFwcGVu
ZChwYWlyLnNyYygpLCBwYWlyLmRzdCgpLCBBcmc6OndpZHRoQXJnKHBhaXIud2lkdGgoKSkpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKIFZlY3RvcjxJbnN0PiBlbWl0U2h1ZmZsZSgKICAgICBW
ZWN0b3I8U2h1ZmZsZVBhaXI+IHBhaXJzLCBzdGQ6OmFycmF5PEFyZywgMj4gc2NyYXRjaGVzLCBB
cmc6OlR5cGUgdHlwZSwgVmFsdWUqIG9yaWdpbikKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckVtaXRTaHVmZmxlLmgJKHJldmlzaW9uIDE5NTE3NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuaAkod29ya2luZyBjb3B5
KQpAQCAtNjYsNiArNjYsOSBAQCBwcml2YXRlOgogICAgIEFyZzo6V2lkdGggbV93aWR0aCB7IEFy
Zzo6V2lkdGg4IH07CiB9OwogCisvLyBDcmVhdGUgYSBTaHVmZmxlIGluc3RydWN0aW9uLgorSW5z
dCBjcmVhdGVTaHVmZmxlKFZhbHVlKiBvcmlnaW4sIGNvbnN0IFZlY3RvcjxTaHVmZmxlUGFpcj4m
KTsKKwogLy8gUGVyZm9ybSBhIHNodWZmbGUgb2YgYSBnaXZlbiB0eXBlLiBUaGUgc2NyYXRjaCBh
cmd1bWVudCBpcyBtYW5kYXRvcnkuIFlvdSBzaG91bGQgcGFzcyBpdCBhcwogLy8gZm9sbG93czog
SWYgeW91IGtub3cgdGhhdCB5b3UgaGF2ZSBzY3JhdGNoIHJlZ2lzdGVycyBvciB0ZW1wb3Jhcmll
cyBhdmFpbGFibGUgLSB0aGF0IGlzLCB0aGV5J3JlCiAvLyByZWdpc3RlcnMgdGhhdCBhcmUgbm90
IG1lbnRpb25lZCBpbiB0aGUgc2h1ZmZsZSwgaGF2ZSB0aGUgc2FtZSB0eXBlIGFzIHRoZSBzaHVm
ZmxlLCBhbmQgYXJlIG5vdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJG
aXhTcGlsbFNsb3RaRGVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJGaXhTcGlsbFNsb3RaRGVmLmgJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4U3BpbGxTbG90WkRlZi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDc4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI2lmbmRlZiBBaXJGaXhTcGlsbFNsb3RaRGVmX2gKLSNkZWZpbmUgQWlyRml4U3Bp
bGxTbG90WkRlZl9oCi0KLSNpbmNsdWRlICJBaXJDb2RlLmgiCi0jaW5jbHVkZSAiQWlySW5zZXJ0
aW9uU2V0LmgiCi0jaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKLQotbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBJc1Nw
aWxsU2xvdD4KLXZvaWQgZml4U3BpbGxTbG90WkRlZihDb2RlJiBjb2RlLCBjb25zdCBJc1NwaWxs
U2xvdCYgaXNTcGlsbFNsb3QpCi17Ci0gICAgLy8gV2UgY291bGQgaGF2ZSBpbnRyb2R1Y2VkIFpE
ZWYncyB0byBTdGFja1Nsb3RzIHRoYXQgYXJlIHdpZGVyIHRoYW4gdGhlIGRlZi4gSW4gdGhhdCBj
YXNlLCB3ZQotICAgIC8vIG5lZWQgdG8gZW1pdCBjb2RlIHRvIHplcm8tZmlsbCB0aGUgdG9wIGJp
dHMgb2YgdGhlIFN0YWNrU2xvdC4KLSAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KGNvZGUp
OwotICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7Ci0gICAgICAgIGZvciAodW5z
aWduZWQgaW5zdEluZGV4ID0gMDsgaW5zdEluZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbnN0SW5k
ZXgpIHsKLSAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKLQot
ICAgICAgICAgICAgaW5zdC5mb3JFYWNoQXJnKAotICAgICAgICAgICAgICAgIFsmXSAoQXJnJiBh
cmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUsIEFyZzo6V2lkdGggd2lkdGgpIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKCFBcmc6OmlzWkRlZihyb2xlKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmcuaXNTdGFjaygpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICBpZiAo
IWlzU3BpbGxTbG90KGFyZy5zdGFja1Nsb3QoKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhcmcuc3RhY2tTbG90KCktPmJ5dGVTaXpl
KCkgPT0gQXJnOjpieXRlcyh3aWR0aCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gQ3VycmVudGx5IHdlIG9ubHkgaGFuZGxlIHRoaXMg
c2ltcGxlIGNhc2UgYmVjYXVzZSBpdCdzIHRoZSBvbmx5IG9uZSB0aGF0Ci0gICAgICAgICAgICAg
ICAgICAgIC8vIGFyaXNlczogWkRlZidzIGFyZSBvbmx5IDMyLWJpdCByaWdodCBub3cuIFNvLCB3
aGVuIHdlIGhpdCB0aGVzZQotICAgICAgICAgICAgICAgICAgICAvLyBhc3NlcnRpb25zIGl0IG1l
YW5zIHRoYXQgd2UgbmVlZCB0byBpbXBsZW1lbnQgdGhvc2Ugb3RoZXIga2luZHMgb2YgemVybwot
ICAgICAgICAgICAgICAgICAgICAvLyBmaWxscy4KLSAgICAgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoYXJnLnN0YWNrU2xvdCgpLT5ieXRlU2l6ZSgpID09IDgpOwotICAgICAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVCh3aWR0aCA9PSBBcmc6OldpZHRoMzIpOwotCi0gICAgICAg
ICAgICAgICAgICAgIC8vIFdlIHJlbHkgb24gdGhlIGZhY3QgdGhhdCB0aGVyZSBtdXN0IGJlIHNv
bWUgd2F5IHRvIG1vdmUgemVybyB0byBhIG1lbW9yeQotICAgICAgICAgICAgICAgICAgICAvLyBs
b2NhdGlvbiB3aXRob3V0IGZpcnN0IGJ1cm5pbmcgYSByZWdpc3Rlci4gT24gQVJNLCB3ZSB3b3Vs
ZCBkbyB0aGlzIHVzaW5nCi0gICAgICAgICAgICAgICAgICAgIC8vIHpyLgotICAgICAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChpc1ZhbGlkRm9ybShNb3ZlMzIsIEFyZzo6SW1tLCBBcmc6
OlN0YWNrKSk7Ci0gICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoCi0gICAg
ICAgICAgICAgICAgICAgICAgICBpbnN0SW5kZXggKyAxLCBNb3ZlMzIsIGluc3Qub3JpZ2luLCBB
cmc6OmltbSgwKSwgYXJnLndpdGhPZmZzZXQoNCkpOwotICAgICAgICAgICAgICAgIH0pOwotICAg
ICAgICB9Ci0gICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKLSAgICB9Ci19Ci0K
LX0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKLQotI2VuZGlmIC8vIEFpckZpeFNwaWxs
U2xvdFpEZWZfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVy
YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckdl
bmVyYXRlLmNwcAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJHZW5lcmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDExICszNSwxMyBAQAog
I2luY2x1ZGUgIkFpckdlbmVyYXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiQWlySGFuZGxlQ2Fs
bGVlU2F2ZXMuaCIKICNpbmNsdWRlICJBaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5oIgor
I2luY2x1ZGUgIkFpckxvZ1JlZ2lzdGVyUHJlc3N1cmUuaCIKICNpbmNsdWRlICJBaXJMb3dlckFm
dGVyUmVnQWxsb2MuaCIKICNpbmNsdWRlICJBaXJMb3dlck1hY3Jvcy5oIgogI2luY2x1ZGUgIkFp
ck9wY29kZVV0aWxzLmgiCiAjaW5jbHVkZSAiQWlyT3B0aW1pemVCbG9ja09yZGVyLmgiCiAjaW5j
bHVkZSAiQWlyUmVwb3J0VXNlZFJlZ2lzdGVycy5oIgorI2luY2x1ZGUgIkFpclNjYXZlbmdlUmVn
aXN0ZXJzLmgiCiAjaW5jbHVkZSAiQWlyU2ltcGxpZnlDRkcuaCIKICNpbmNsdWRlICJBaXJTcGls
bEV2ZXJ5dGhpbmcuaCIKICNpbmNsdWRlICJBaXJWYWxpZGF0ZS5oIgpAQCAtODEsOSArODMsMTcg
QEAgdm9pZCBwcmVwYXJlRm9yR2VuZXJhdGlvbihDb2RlJiBjb2RlKQogICAgIC8vIEZvciBkZWJ1
Z2dpbmcsIHlvdSBjYW4gdXNlIHNwaWxsRXZlcnl0aGluZygpIHRvIHB1dCBldmVyeXRoaW5nIHRv
IHRoZSBzdGFjayBiZXR3ZWVuIGVhY2ggSW5zdC4KICAgICBpZiAoT3B0aW9uczo6YWlyU3BpbGxz
RXZlcnl0aGluZygpKQogICAgICAgICBzcGlsbEV2ZXJ5dGhpbmcoY29kZSk7Ci0gICAgZWxzZQor
ICAgIGVsc2UgaWYgKE9wdGlvbnM6OmFpclVzZXNSQ1JTKCkpIHsKKyAgICAgICAgb25lUGFzc0lS
Qyhjb2RlKTsKKyAgICAgICAgc2NhdmVuZ2VSZWdpc3RlcnMoY29kZSk7CisgICAgfSBlbHNlCiAg
ICAgICAgIGl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nKGNvZGUpOwogCisgICAgaWYgKE9wdGlv
bnM6OmxvZ0FpclJlZ2lzdGVyUHJlc3N1cmUoKSkgeworICAgICAgICBkYXRhTG9nKCJSZWdpc3Rl
ciBwcmVzc3VyZSBhZnRlciByZWdpc3RlciBhbGxvY2F0aW9uOlxuIik7CisgICAgICAgIGxvZ1Jl
Z2lzdGVyUHJlc3N1cmUoY29kZSk7CisgICAgfQorCiAgICAgbG93ZXJBZnRlclJlZ0FsbG9jKGNv
ZGUpOwogCiAgICAgLy8gUHJpb3IgdG8gdGhpcyBwb2ludCB0aGUgcHJvbG9ndWUgYW5kIGVwaWxv
Z3VlIGlzIGltcGxpY2l0LiBUaGlzIG1ha2VzIGl0IGV4cGxpY2l0LiBJdCBhbHNvCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAkocmV2aXNpb24gMTk1MTc2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTE2Miw2ICsxNjIsNyBAQCBwdWJsaWM6CiAgICAgLy8KICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlz
IGF1dG8tZ2VuZXJhdGVkIGJ5IG9wY29kZV9nZW5lcmF0b3IucmIuCiAgICAgYm9vbCBhZG1pdHNT
dGFjayh1bnNpZ25lZCBhcmdJbmRleCk7CisgICAgYm9vbCBhZG1pdHNTdGFjayhBcmcmKTsKIAog
ICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGluc3RydWN0aW9uIGNhbiBoYXZlIGFueSBlZmZl
Y3RzIG90aGVyIHRoYW4gY29udHJvbCBmbG93IG9yIGFyZ3VtZW50cy4KICAgICBib29sIGhhc05v
bkFyZ05vbkNvbnRyb2xFZmZlY3RzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpckluc3RJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1
OCw2ICsxNTgsMTEgQEAgaW5saW5lIHZvaWQgSW5zdDo6cmVwb3J0VXNlZFJlZ2lzdGVycyhjbwog
ICAgIGFyZ3NbMF0uc3BlY2lhbCgpLT5yZXBvcnRVc2VkUmVnaXN0ZXJzKCp0aGlzLCB1c2VkUmVn
aXN0ZXJzKTsKIH0KIAoraW5saW5lIGJvb2wgSW5zdDo6YWRtaXRzU3RhY2soQXJnJiBhcmcpCit7
CisgICAgcmV0dXJuIGFkbWl0c1N0YWNrKCZhcmcgLSAmYXJnc1swXSk7Cit9CisKIGlubGluZSBi
b29sIGlzU2hpZnRWYWxpZChjb25zdCBJbnN0JiBpbnN0KQogewogI2lmIENQVShYODYpIHx8IENQ
VShYODZfNjQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RNYXAu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RNYXAu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdE1h
cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEFpckluc3RNYXBfaAorI2RlZmluZSBB
aXJJbnN0TWFwX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJCYXNpY0Js
b2NrLmgiCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkIzSW5kZXhNYXAuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorY2xhc3MgSW5zdE1hcCB7CitwdWJsaWM6CisgICAgSW5zdE1hcChDb2Rl
JiBjb2RlKQorICAgICAgICA6IG1fbWFwKGNvZGUuc2l6ZSgpKQorICAgIHsKKyAgICAgICAgZm9y
IChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpCisgICAgICAgICAgICBtX21hcFtibG9ja10ucmVz
aXplKGJsb2NrLT5zaXplKCkpOworICAgIH0KKworICAgIFQmIGF0KEJhc2ljQmxvY2sqIGJsb2Nr
LCB1bnNpZ25lZCBpbnN0SW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gbV9tYXBbYmxvY2td
W2luc3RJbmRleF07CisgICAgfQorCisgICAgY29uc3QgVCYgYXQoQmFzaWNCbG9jayogYmxvY2ss
IHVuc2lnbmVkIGluc3RJbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBjb25zdF9j
YXN0PEluc3RNYXAqPih0aGlzKS0+Z2V0KGJsb2NrLCBpbnN0SW5kZXgpOworICAgIH0KKyAgICAK
K3ByaXZhdGU6CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgVmVjdG9yPFQ+PiBtX21hcDsKK307
CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCisKKyNlbmRpZiAvLyBBaXJJbnN0TWFwX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVyQ29h
bGVzY2luZy5jcHAJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSw3ICsyOSw2IEBACiAjaWYgRU5BQkxFKEIzX0pJVCkKIAogI2luY2x1ZGUgIkFpckNvZGUu
aCIKLSNpbmNsdWRlICJBaXJGaXhTcGlsbFNsb3RaRGVmLmgiCiAjaW5jbHVkZSAiQWlySW5zZXJ0
aW9uU2V0LmgiCiAjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKICNpbmNsdWRlICJBaXJMaXZl
bmVzcy5oIgpAQCAtMTA1OSw5ICsxMDU4LDE1IEBAIHByaXZhdGU6CiAKIGNsYXNzIEl0ZXJhdGVk
UmVnaXN0ZXJDb2FsZXNjaW5nIHsKIHB1YmxpYzoKLSAgICBJdGVyYXRlZFJlZ2lzdGVyQ29hbGVz
Y2luZyhDb2RlJiBjb2RlKQorICAgIGVudW0gTW9kZSB7CisgICAgICAgIENsYXNzaWMsCisgICAg
ICAgIE9uZVBhc3MKKyAgICB9OworICAgIAorICAgIEl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5n
KENvZGUmIGNvZGUsIE1vZGUgbW9kZSkKICAgICAgICAgOiBtX2NvZGUoY29kZSkKICAgICAgICAg
LCBtX3VzZUNvdW50cyhjb2RlKQorICAgICAgICAsIG1fbW9kZShtb2RlKQogICAgIHsKICAgICB9
CiAKQEAgLTExMDQsNyArMTEwOSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX3RtcFdpZHRo
LnJlY29tcHV0ZShtX2NvZGUpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBDb2xvcmluZ0Fs
bG9jYXRvcjx0eXBlPiBhbGxvY2F0b3IobV9jb2RlLCBtX3RtcFdpZHRoLCBtX3VzZUNvdW50cywg
dW5zcGlsbGFibGVUbXBzKTsKLSAgICAgICAgICAgIGlmICghYWxsb2NhdG9yLnJlcXVpcmVzU3Bp
bGxpbmcoKSkgeworICAgICAgICAgICAgaWYgKCFhbGxvY2F0b3IucmVxdWlyZXNTcGlsbGluZygp
IHx8IG1fbW9kZSA9PSBPbmVQYXNzKSB7CiAgICAgICAgICAgICAgICAgYXNzaWduUmVnaXN0ZXJz
VG9UbXAoYWxsb2NhdG9yKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9
CkBAIC0xMTE1LDYgKzExMjAsMTAgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTxBcmc6OlR5cGUg
dHlwZT4KICAgICB2b2lkIGFzc2lnblJlZ2lzdGVyc1RvVG1wKGNvbnN0IENvbG9yaW5nQWxsb2Nh
dG9yPHR5cGU+JiBhbGxvY2F0b3IpCiAgICAgeworICAgICAgICBIYXNoU2V0PFRtcD4gc3BpbGxl
ZDsKKyAgICAgICAgZm9yIChUbXAgdG1wIDogYWxsb2NhdG9yLnNwaWxsZWRUbXBzKCkpCisgICAg
ICAgICAgICBzcGlsbGVkLmFkZCh0bXApOworICAgICAgICAKICAgICAgICAgZm9yIChCYXNpY0Js
b2NrKiBibG9jayA6IG1fY29kZSkgewogICAgICAgICAgICAgLy8gR2l2ZSBUbXAgYSB2YWxpZCBy
ZWdpc3Rlci4KICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gMDsgaW5zdElu
ZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbnN0SW5kZXgpIHsKQEAgLTExMjQsMTEgKzExMzMsMTEg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAvLyBjb21wbGV0ZSByZWdpc3RlciBhbGxvY2F0
aW9uLiBTbywgd2UgcmVjb3JkIHRoaXMgYmVmb3JlIHN0YXJ0aW5nLgogICAgICAgICAgICAgICAg
IGJvb2wgbWF5QmVDb2FsZXNjYWJsZSA9IGFsbG9jYXRvci5tYXlCZUNvYWxlc2NhYmxlKGluc3Qp
OwogCi0gICAgICAgICAgICAgICAgLy8gT24gWDg2XzY0LCBNb3ZlMzIgaXMgY2hlYXBlciBpZiB3
ZSBrbm93IHRoYXQgaXQncyBlcXVpdmFsZW50IHRvIGEgTW92ZS4gSXQncworICAgICAgICAgICAg
ICAgIC8vIE1vdmUzMiBpcyBjaGVhcGVyIGlmIHdlIGtub3cgdGhhdCBpdCdzIGVxdWl2YWxlbnQg
dG8gYSBNb3ZlLiBJdCdzCiAgICAgICAgICAgICAgICAgLy8gZXF1aXZhbGVudCBpZiB0aGUgZGVz
dGluYXRpb24ncyBoaWdoIGJpdHMgYXJlIG5vdCBvYnNlcnZhYmxlIG9yIGlmIHRoZSBzb3VyY2Un
cyBoaWdoCiAgICAgICAgICAgICAgICAgLy8gYml0cyBhcmUgYWxsIHplcm8uIE5vdGUgdGhhdCB3
ZSBkb24ndCBoYXZlIHRoZSBvcHBvc2l0ZSBvcHRpbWl6YXRpb24gZm9yIG90aGVyCiAgICAgICAg
ICAgICAgICAgLy8gYXJjaGl0ZWN0dXJlcywgd2hpY2ggbWF5IHByZWZlciBNb3ZlIG92ZXIgTW92
ZTMyLCBiZWNhdXNlIE1vdmUgaXMgY2Fub25pY2FsIGFscmVhZHkuCi0gICAgICAgICAgICAgICAg
aWYgKHR5cGUgPT0gQXJnOjpHUCAmJiBvcHRpbWl6ZUZvclg4Nl82NCgpICYmIGluc3Qub3Bjb2Rl
ID09IE1vdmUKKyAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBBcmc6OkdQICYmIGluc3Qub3Bj
b2RlID09IE1vdmUKICAgICAgICAgICAgICAgICAgICAgJiYgaW5zdC5hcmdzWzBdLmlzVG1wKCkg
JiYgaW5zdC5hcmdzWzFdLmlzVG1wKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKG1fdG1w
V2lkdGgudXNlV2lkdGgoaW5zdC5hcmdzWzFdLnRtcCgpKSA8PSBBcmc6OldpZHRoMzIKICAgICAg
ICAgICAgICAgICAgICAgICAgIHx8IG1fdG1wV2lkdGguZGVmV2lkdGgoaW5zdC5hcmdzWzBdLnRt
cCgpKSA8PSBBcmc6OldpZHRoMzIpCkBAIC0xMTM2LDcgKzExNDUsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcEZhc3QoWyZd
IChUbXAmIHRtcCkgewotICAgICAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkgfHwgdG1w
LmlzR1AoKSA9PSAodHlwZSAhPSBBcmc6OkdQKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRt
cC5pc1JlZygpIHx8IHRtcC5pc0dQKCkgPT0gKHR5cGUgIT0gQXJnOjpHUCkgfHwgc3BpbGxlZC5j
b250YWlucyh0bXApKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAg
ICAgICAgICAgICAgIFRtcCBhbGlhc1RtcCA9IGFsbG9jYXRvci5nZXRBbGlhcyh0bXApOwpAQCAt
MTE2OCw3ICsxMTc3LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFkZFNwaWxsQW5kRmlsbChjb25z
dCBDb2xvcmluZ0FsbG9jYXRvcjx0eXBlPiYgYWxsb2NhdG9yLCBIYXNoU2V0PHVuc2lnbmVkPiYg
dW5zcGlsbGFibGVUbXBzKQogICAgIHsKICAgICAgICAgSGFzaE1hcDxUbXAsIFN0YWNrU2xvdCo+
IHN0YWNrU2xvdHM7Ci0gICAgICAgIHVuc2lnbmVkIG5ld1N0YWNrU2xvdFRocmVzaG9sZCA9IG1f
Y29kZS5zdGFja1Nsb3RzKCkuc2l6ZSgpOwogICAgICAgICBmb3IgKFRtcCB0bXAgOiBhbGxvY2F0
b3Iuc3BpbGxlZFRtcHMoKSkgewogICAgICAgICAgICAgLy8gQWxsIHRoZSBzcGlsbGVkIHZhbHVl
cyBiZWNvbWUgdW5zcGlsbGFibGUuCiAgICAgICAgICAgICB1bnNwaWxsYWJsZVRtcHMuYWRkKEFi
c29sdXRlVG1wTWFwcGVyPHR5cGU+OjphYnNvbHV0ZUluZGV4KHRtcCkpOwpAQCAtMTIwMiwxNiAr
MTIxMCwxOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAg
IC8vIFRyeSB0byByZXBsYWNlIHRoZSByZWdpc3RlciB1c2UgYnkgbWVtb3J5IHVzZSB3aGVuIHBv
c3NpYmxlLgotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnN0LmFy
Z3Muc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgQXJnJiBhcmcgPSBpbnN0LmFy
Z3NbaV07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhcmcuaXNUbXAoKSAmJiBhcmcudHlwZSgp
ID09IHR5cGUgJiYgIWFyZy5pc1JlZygpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRv
IHN0YWNrU2xvdEVudHJ5ID0gc3RhY2tTbG90cy5maW5kKGFyZy50bXAoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoc3RhY2tTbG90RW50cnkgIT0gc3RhY2tTbG90cy5lbmQoKSAmJiBp
bnN0LmFkbWl0c1N0YWNrKGkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0g
QXJnOjpzdGFjayhzdGFja1Nsb3RFbnRyeS0+dmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRpZFNwaWxsID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpbnN0LmZvckVhY2hBcmco
CisgICAgICAgICAgICAgICAgICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSwgQXJnOjpUeXBl
IGFyZ1R5cGUsIEFyZzo6V2lkdGggd2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChhcmcuaXNUbXAoKSAmJiBhcmdUeXBlID09IHR5cGUgJiYgIWFyZy5pc1JlZygpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBzdGFja1Nsb3RFbnRyeSA9IHN0YWNrU2xvdHMu
ZmluZChhcmcudG1wKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFja1Ns
b3RFbnRyeSAhPSBzdGFja1Nsb3RzLmVuZCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICYmIGluc3QuYWRtaXRzU3RhY2soYXJnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGFja1Nsb3RFbnRyeS0+dmFsdWUtPmVuc3VyZVNpemUoCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmb3JjZU1vdmUzMklmRGlkU3BpbGwgPyA0IDogQXJnOjpi
eXRlcyh3aWR0aCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBBcmc6
OnN0YWNrKHN0YWNrU2xvdEVudHJ5LT52YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRpZFNwaWxsID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0pOwogCiAgICAgICAgICAgICAgICAgaWYg
KGRpZFNwaWxsICYmIGZvcmNlTW92ZTMySWZEaWRTcGlsbCkKICAgICAgICAgICAgICAgICAgICAg
aW5zdC5vcGNvZGUgPSBNb3ZlMzI7CkBAIC0xMjYyLDE3ICsxMjczLDEyIEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLQotICAgICAgICBm
aXhTcGlsbFNsb3RaRGVmKAotICAgICAgICAgICAgbV9jb2RlLAotICAgICAgICAgICAgWyZdIChT
dGFja1Nsb3QqIHN0YWNrU2xvdCkgLT4gYm9vbCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHN0
YWNrU2xvdC0+aW5kZXgoKSA+PSBuZXdTdGFja1Nsb3RUaHJlc2hvbGQ7Ci0gICAgICAgICAgICB9
KTsKICAgICB9CiAKICAgICBDb2RlJiBtX2NvZGU7CiAgICAgVG1wV2lkdGggbV90bXBXaWR0aDsK
ICAgICBVc2VDb3VudHM8VG1wPiBtX3VzZUNvdW50czsKKyAgICBNb2RlIG1fbW9kZTsKICAgICB1
bnNpZ25lZCBtX251bUl0ZXJhdGlvbnMgeyAwIH07CiB9OwogCkBAIC0xMjgyLDcgKzEyODgsMTUg
QEAgdm9pZCBpdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZyhDb2RlJiBjbwogewogICAgIFBoYXNl
U2NvcGUgcGhhc2VTY29wZShjb2RlLCAiaXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmciKTsKIAot
ICAgIEl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nIGl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5n
KGNvZGUpOworICAgIEl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nIGl0ZXJhdGVkUmVnaXN0ZXJD
b2FsZXNjaW5nKGNvZGUsIEl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nOjpDbGFzc2ljKTsKKyAg
ICBpdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5ydW4oKTsKK30KKwordm9pZCBvbmVQYXNzSVJD
KENvZGUmIGNvZGUpCit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJvbmVQYXNz
SVJDIik7CisKKyAgICBJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZyBpdGVyYXRlZFJlZ2lzdGVy
Q29hbGVzY2luZyhjb2RlLCBJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZzo6T25lUGFzcyk7CiAg
ICAgaXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcucnVuKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckl0ZXJhdGVkUmVnaXN0
ZXJDb2FsZXNjaW5nLmgJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuaAkod29ya2luZyBjb3B5KQpA
QCAtMzYsNiArMzYsMTAgQEAgY2xhc3MgQ29kZTsKIC8vIGh0dHA6Ly93d3cuY3MuY211LmVkdS9h
ZnMvY3MvYWNhZGVtaWMvY2xhc3MvMTU3NDUtczA3L3d3dy9wYXBlcnMvZ2VvcmdlLnBkZgogdm9p
ZCBpdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZyhDb2RlJik7CiAKKy8vIFRoaXMgaXMgYSBtb2Rp
ZmllZCB2ZXJzaW9uIG9mIHRoZSBhbGdvcml0aG0gdGhhdCBwZXJmb3JtcyBqdXN0IG9uZSBpdGVy
YXRpb24gYW5kIGxlYXZlcyAic3BpbGxlZCIKKy8vIFRtcHMgYXMgbm9uLVJlZyBUbXBzLgordm9p
ZCBvbmVQYXNzSVJDKENvZGUmKTsKKwogfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgog
CiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyTGl2ZW5lc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckxpdmVuZXNzLmgJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAkod29ya2luZyBjb3B5KQpAQCAtOTIsMTAgKzky
LDE5IEBAIHN0cnVjdCBSZWdMaXZlbmVzc0FkYXB0ZXIgewogICAgIFJlZyBpbmRleFRvVmFsdWUo
dW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIFJlZzo6ZnJvbUluZGV4KGluZGV4KTsgfQogfTsKIAor
ZW51bSBjbGFzcyBLaWxsTW9kZSA6IGludDhfdCB7CisgICAgRE9BRWFybHlEZWZJbk5leHRJbnN0
LAorICAgIERPQUxhdGVEZWYsCisgICAgRWFybHlVc2VLaWxsLAorICAgIExhdGVVc2VJblByZXZJ
bnN0S2lsbAorfTsKKwogdGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRlcj4KLWNsYXNzIEFic3RyYWN0
TGl2ZW5lc3MgOiBwcml2YXRlIEFkYXB0ZXIgeworY2xhc3MgQWJzdHJhY3RMaXZlbmVzcyA6IHB1
YmxpYyBBZGFwdGVyIHsKICAgICBzdHJ1Y3QgV29ya3NldDsKIHB1YmxpYzoKKyAgICB0eXBlZGVm
IHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nIFRoaW5nOworICAgIAogICAgIEFic3RyYWN0TGl2ZW5l
c3MoQ29kZSYgY29kZSkKICAgICAgICAgOiBBZGFwdGVyKGNvZGUpCiAgICAgICAgICwgbV93b3Jr
c2V0KEFkYXB0ZXI6Om1heEluZGV4KGNvZGUpKQpAQCAtMjIyLDYgKzIzMSwxMSBAQCBwdWJsaWM6
CiAKICAgICAgICAgICAgIEl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gSXRlcmF0b3Io
bV9saXZlbmVzcywgbV9saXZlbmVzcy5tX3dvcmtzZXQuYmVnaW4oKSk7IH0KICAgICAgICAgICAg
IEl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIEl0ZXJhdG9yKG1fbGl2ZW5lc3MsIG1fbGl2
ZW5lc3MubV93b3Jrc2V0LmVuZCgpKTsgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBib29s
IGNvbnRhaW5zKGNvbnN0IHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nJiB0aGluZykgY29uc3QKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9saXZlbmVzcy5tX3dvcmtzZXQu
Y29udGFpbnMoQWRhcHRlcjo6dmFsdWVUb0luZGV4KHRoaW5nKSk7CisgICAgICAgICAgICB9CiAK
ICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgIEFic3RyYWN0TGl2ZW5lc3MmIG1fbGl2ZW5l
c3M7CkBAIC0yMzIsNyArMjQ2LDE2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBJdGVy
YWJsZShtX2xpdmVuZXNzKTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgZXhlY3V0ZSh1bnNp
Z25lZCBpbnN0SW5kZXgpCisgICAgICAgIGJvb2wgaXNMaXZlKGNvbnN0IHR5cGVuYW1lIEFkYXB0
ZXI6OlRoaW5nJiB0aGluZykgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGxp
dmUoKS5jb250YWlucyh0aGluZyk7CisgICAgICAgIH0KKworICAgICAgICAvLyBDYWxscyB0aGUg
a2lsbCBjYWxsYmFjayB3aXRoIHRoZSBraWxscyBhbmQgZGVzY3JpcHRpb25zIG9mIGhvdyB0aGV5
IGdvdCBraWxsZWQuIEFsc28KKyAgICAgICAgLy8gcGFzc2VzIHRoZSBpbnRlcm5hbCBpbmRleCBv
ZiB0aGUgdGhpbmcgYmVpbmcga2lsbGVkLCBpZiB5b3Ugd2FudCB0byB1c2UgaW5kZXgtYmFzZWQK
KyAgICAgICAgLy8gbGl2ZW5lc3MuCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtpbGxDYWxs
YmFjaz4KKyAgICAgICAgdm9pZCBleGVjdXRlKHVuc2lnbmVkIGluc3RJbmRleCwgY29uc3QgS2ls
bENhbGxiYWNrJiBraWxsQ2FsbGJhY2spCiAgICAgICAgIHsKICAgICAgICAgICAgIEluc3QmIGlu
c3QgPSBtX2Jsb2NrLT5hdChpbnN0SW5kZXgpOwogICAgICAgICAgICAgYXV0byYgd29ya3NldCA9
IG1fbGl2ZW5lc3MubV93b3Jrc2V0OwpAQCAtMjQyLDIzICsyNjUsMzIgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgIEluc3QmIG5leHRJbnN0ID0gbV9ibG9jay0+YXQoaW5zdEluZGV4ICsgMSk7
CiAgICAgICAgICAgICAgICAgbmV4dEluc3QuZm9yRWFjaDx0eXBlbmFtZSBBZGFwdGVyOjpUaGlu
Zz4oCiAgICAgICAgICAgICAgICAgICAgIFsmXSAodHlwZW5hbWUgQWRhcHRlcjo6VGhpbmcmIHRo
aW5nLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIHR5cGUsIEFyZzo6V2lkdGgpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzRWFybHlEZWYocm9sZSkgJiYgQWRhcHRlcjo6
YWNjZXB0c1R5cGUodHlwZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya3NldC5y
ZW1vdmUoQWRhcHRlcjo6dmFsdWVUb0luZGV4KHRoaW5nKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoQXJnOjppc0Vhcmx5RGVmKHJvbGUpICYmIEFkYXB0ZXI6OmFjY2VwdHNUeXBlKHR5
cGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBBZGFw
dGVyOjp2YWx1ZVRvSW5kZXgodGhpbmcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghd29ya3NldC5yZW1vdmUoaW5kZXgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBraWxsQ2FsbGJhY2soaW5kZXgsIHRoaW5nLCBLaWxsTW9kZTo6RE9BRWFybHlEZWZJbk5leHRJ
bnN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIFRoZW4gaGFuZGxl
IGRlZidzLgogICAgICAgICAgICAgaW5zdC5mb3JFYWNoPHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5n
PigKICAgICAgICAgICAgICAgICBbJl0gKHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nJiB0aGluZywg
QXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSB0eXBlLCBBcmc6OldpZHRoKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChBcmc6OmlzTGF0ZURlZihyb2xlKSAmJiBBZGFwdGVyOjphY2NlcHRzVHlw
ZSh0eXBlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtzZXQucmVtb3ZlKEFkYXB0ZXI6
OnZhbHVlVG9JbmRleCh0aGluZykpOworICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0xh
dGVEZWYocm9sZSkgJiYgQWRhcHRlcjo6YWNjZXB0c1R5cGUodHlwZSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gQWRhcHRlcjo6dmFsdWVUb0luZGV4KHRoaW5n
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghd29ya3NldC5yZW1vdmUoaW5kZXgpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbGxDYWxsYmFjayhpbmRleCwgdGhpbmcsIEtp
bGxNb2RlOjpET0FMYXRlRGVmKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIH0pOwogCiAgICAgICAgICAgICAvLyBUaGVuIGhhbmRsZSB1c2Uncy4KICAgICAgICAgICAg
IGluc3QuZm9yRWFjaDx0eXBlbmFtZSBBZGFwdGVyOjpUaGluZz4oCiAgICAgICAgICAgICAgICAg
WyZdICh0eXBlbmFtZSBBZGFwdGVyOjpUaGluZyYgdGhpbmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6
OlR5cGUgdHlwZSwgQXJnOjpXaWR0aCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjpp
c0Vhcmx5VXNlKHJvbGUpICYmIEFkYXB0ZXI6OmFjY2VwdHNUeXBlKHR5cGUpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgd29ya3NldC5hZGQoQWRhcHRlcjo6dmFsdWVUb0luZGV4KHRoaW5nKSk7
CisgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzRWFybHlVc2Uocm9sZSkgJiYgQWRhcHRl
cjo6YWNjZXB0c1R5cGUodHlwZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGluZGV4ID0gQWRhcHRlcjo6dmFsdWVUb0luZGV4KHRoaW5nKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh3b3Jrc2V0LmFkZChpbmRleCkpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAga2lsbENhbGxiYWNrKGluZGV4LCB0aGluZywgS2lsbE1vZGU6OkVhcmx5VXNlS2lsbCk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9KTsKIAogICAgICAgICAgICAg
Ly8gQW5kIGZpbmFsbHksIGhhbmRsZSB0aGUgbGF0ZSB1c2UncyBvZiB0aGUgcHJldmlvdXMgaW5z
dHJ1Y3Rpb24uCkBAIC0yNjYsMTcgKzI5OCwzMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
SW5zdCYgcHJldkluc3QgPSBtX2Jsb2NrLT5hdChpbnN0SW5kZXggLSAxKTsKICAgICAgICAgICAg
ICAgICBwcmV2SW5zdC5mb3JFYWNoPHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nPigKICAgICAgICAg
ICAgICAgICAgICAgWyZdICh0eXBlbmFtZSBBZGFwdGVyOjpUaGluZyYgdGhpbmcsIEFyZzo6Um9s
ZSByb2xlLCBBcmc6OlR5cGUgdHlwZSwgQXJnOjpXaWR0aCkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKEFyZzo6aXNMYXRlVXNlKHJvbGUpICYmIEFkYXB0ZXI6OmFjY2VwdHNUeXBlKHR5
cGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtzZXQuYWRkKEFkYXB0ZXI6OnZh
bHVlVG9JbmRleCh0aGluZykpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNM
YXRlVXNlKHJvbGUpICYmIEFkYXB0ZXI6OmFjY2VwdHNUeXBlKHR5cGUpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBBZGFwdGVyOjp2YWx1ZVRvSW5kZXgo
dGhpbmcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3b3Jrc2V0LmFkZChpbmRl
eCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbGxDYWxsYmFjayhpbmRleCwg
dGhpbmcsIEtpbGxNb2RlOjpMYXRlVXNlSW5QcmV2SW5zdEtpbGwpOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogCisgICAgICAgIHZvaWQgZXhlY3V0ZSh1bnNpZ25lZCBpbnN0SW5kZXgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGV4ZWN1dGUoCisgICAgICAgICAgICAgICAgaW5zdEluZGV4LAorICAg
ICAgICAgICAgICAgIFtdICh1bnNpZ25lZCwgY29uc3QgdHlwZW5hbWUgQWRhcHRlcjo6VGhpbmcm
LCBLaWxsTW9kZSkgeyB9KTsKKyAgICAgICAgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgQWJz
dHJhY3RMaXZlbmVzcyYgbV9saXZlbmVzczsKICAgICAgICAgQmFzaWNCbG9jayogbV9ibG9jazsK
ICAgICB9OwogCisgICAgY29uc3QgVmVjdG9yPHVuc2lnbmVkPiYgcmF3TGl2ZUF0SGVhZChCYXNp
Y0Jsb2NrKiBibG9jaykKKyAgICB7CisgICAgICAgIHJldHVybiBtX2xpdmVBdEhlYWRbYmxvY2td
OworICAgIH0KKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFVuZGVybHlpbmdJdGVyYWJsZT4KICAg
ICBjbGFzcyBJdGVyYWJsZSB7CiAgICAgcHVibGljOgpAQCAtMzMwLDYgKzM3NywxMSBAQCBwdWJs
aWM6CiAgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9s
aXZlbmVzcywgbV9pdGVyYWJsZS5iZWdpbigpKTsgfQogICAgICAgICBpdGVyYXRvciBlbmQoKSBj
b25zdCB7IHJldHVybiBpdGVyYXRvcihtX2xpdmVuZXNzLCBtX2l0ZXJhYmxlLmVuZCgpKTsgfQog
CisgICAgICAgIGJvb2wgY29udGFpbnMoY29uc3QgdHlwZW5hbWUgQWRhcHRlcjo6VGhpbmcmIHRo
aW5nKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9saXZlbmVzcy5tX3dv
cmtzZXQuY29udGFpbnMoQWRhcHRlcjo6dmFsdWVUb0luZGV4KHRoaW5nKSk7CisgICAgICAgIH0K
KwogICAgIHByaXZhdGU6CiAgICAgICAgIEFic3RyYWN0TGl2ZW5lc3MmIG1fbGl2ZW5lc3M7CiAg
ICAgICAgIGNvbnN0IFVuZGVybHlpbmdJdGVyYWJsZSYgbV9pdGVyYWJsZTsKQEAgLTM0NSw2ICsz
OTcsOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBJdGVyYWJsZTx0eXBlbmFtZSBBZGFwdGVy
OjpJbmRleFNldD4oKnRoaXMsIG1fbGl2ZUF0VGFpbFtibG9ja10pOwogICAgIH0KIAorICAgIElu
ZGV4U3BhcnNlU2V0PFVuc2FmZVZlY3Rvck92ZXJmbG93PiYgd29ya3NldCgpIHsgcmV0dXJuIG1f
d29ya3NldDsgfQorCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMb2NhbENhbGM7CiAgICAg
ZnJpZW5kIHN0cnVjdCBMb2NhbENhbGM6Okl0ZXJhYmxlOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJMb2dSZWdpc3RlclByZXNzdXJlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxvZ1JlZ2lzdGVyUHJlc3N1cmUuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb2dSZWdpc3Rl
clByZXNzdXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJBaXJMb2dSZWdpc3RlclByZXNzdXJlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisj
aW5jbHVkZSAiQWlyTGl2ZW5lc3MuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIGxvZ1JlZ2lzdGVyUHJlc3N1cmUoQ29kZSYgY29kZSkK
K3sKKyAgICBjb25zdCB1bnNpZ25lZCB0b3RhbENvbHVtbnMgPSAyMDA7CisgICAgY29uc3QgdW5z
aWduZWQgcmVnaXN0ZXJDb2x1bW5zID0gMTAwOworICAgIAorICAgIFJlZ0xpdmVuZXNzIGxpdmVu
ZXNzKGNvZGUpOworCisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAg
ICAgUmVnTGl2ZW5lc3M6OkxvY2FsQ2FsYyBsb2NhbENhbGMobGl2ZW5lc3MsIGJsb2NrKTsKKwor
ICAgICAgICBibG9jay0+ZHVtcEhlYWRlcihXVEY6OmRhdGFGaWxlKCkpOworCisgICAgICAgIFZl
Y3RvcjxDU3RyaW5nPiBpbnN0RHVtcHM7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4
ID0gYmxvY2stPnNpemUoKTsgaW5zdEluZGV4LS07KSB7CisgICAgICAgICAgICBJbnN0JiBpbnN0
ID0gYmxvY2stPmF0KGluc3RJbmRleCk7CisgICAgICAgICAgICBJbnN0KiBwcmV2SW5zdCA9IGJs
b2NrLT5nZXQoaW5zdEluZGV4IC0gMSk7CisKKyAgICAgICAgICAgIGxvY2FsQ2FsYy5leGVjdXRl
KGluc3RJbmRleCk7CisKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHNldDsKKyAgICAgICAgICAg
IHNldC5zZXRBbGwobG9jYWxDYWxjLmxpdmUoKSk7CisgICAgICAgICAgICBJbnN0Ojpmb3JFYWNo
RGVmV2l0aEV4dHJhQ2xvYmJlcmVkUmVnczxSZWc+KAorICAgICAgICAgICAgICAgIHByZXZJbnN0
LCAmaW5zdCwKKyAgICAgICAgICAgICAgICBbJl0gKFJlZyByZWcsIEFyZzo6Um9sZSwgQXJnOjpU
eXBlLCBBcmc6OldpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgIHNldC5zZXQocmVnKTsKKyAg
ICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgU3RyaW5nUHJpbnRTdHJlYW0gaW5zdE91
dDsKKyAgICAgICAgICAgIFN0cmluZ1ByaW50U3RyZWFtIGxpbmVPdXQ7CisgICAgICAgICAgICBs
aW5lT3V0LnByaW50KCIgICAiKTsKKyAgICAgICAgICAgIGlmIChzZXQubnVtYmVyT2ZTZXRSZWdp
c3RlcnMoKSkgeworICAgICAgICAgICAgICAgIHNldC5mb3JFYWNoKAorICAgICAgICAgICAgICAg
ICAgICBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIENTdHJpbmcgdGV4
dCA9IHRvQ1N0cmluZygiICIsIHJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4
dC5sZW5ndGgoKSArIGxpbmVPdXQubGVuZ3RoKCkgPiB0b3RhbENvbHVtbnMpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnN0T3V0LnByaW50KGxpbmVPdXQudG9DU3RyaW5nKCksICJc
biIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVPdXQucmVzZXQoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsaW5lT3V0LnByaW50KCIgICAgICAgIik7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lT3V0LnByaW50
KHRleHQpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBsaW5lT3V0
LnByaW50KCI6Iik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobGluZU91dC5sZW5n
dGgoKSA+IHJlZ2lzdGVyQ29sdW1ucykgeworICAgICAgICAgICAgICAgIGluc3RPdXQucHJpbnQo
bGluZU91dC50b0NTdHJpbmcoKSwgIlxuIik7CisgICAgICAgICAgICAgICAgbGluZU91dC5yZXNl
dCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgd2hpbGUgKGxpbmVPdXQubGVuZ3RoKCkg
PCByZWdpc3RlckNvbHVtbnMpCisgICAgICAgICAgICAgICAgbGluZU91dC5wcmludCgiICIpOwor
ICAgICAgICAgICAgbGluZU91dC5wcmludCgiICIpOworICAgICAgICAgICAgbGluZU91dC5wcmlu
dChpbnN0KTsKKyAgICAgICAgICAgIGluc3RPdXQucHJpbnQobGluZU91dC50b0NTdHJpbmcoKSwg
IlxuIik7CisgICAgICAgICAgICBpbnN0RHVtcHMuYXBwZW5kKGluc3RPdXQudG9DU3RyaW5nKCkp
OworICAgICAgICB9CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gaW5zdER1bXBzLnNpemUo
KTsgaS0tOykKKyAgICAgICAgICAgIGRhdGFMb2coaW5zdER1bXBzW2ldKTsKKyAgICAgICAgCisg
ICAgICAgIGJsb2NrLT5kdW1wRm9vdGVyKFdURjo6ZGF0YUZpbGUoKSk7CisgICAgfQorfQorCit9
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxvZ1JlZ2lzdGVyUHJl
c3N1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxv
Z1JlZ2lzdGVyUHJlc3N1cmUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIEFpckxvZ1JlZ2lzdGVyUHJlc3N1cmVfaAorI2RlZmluZSBBaXJMb2dSZWdpc3RlclBy
ZXNzdXJlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKworLy8gRHVtcHMgdGhlIHJl
Z2lzdGVycyB0aGF0IGFyZSB1c2VkIGF0IGVhY2ggaW5zdHJ1Y3Rpb24uCit2b2lkIGxvZ1JlZ2lz
dGVyUHJlc3N1cmUoQ29kZSYpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyTG9nUmVnaXN0ZXJQcmVz
c3VyZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3B0aW1pemVC
bG9ja09yZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0Fpck9wdGltaXplQmxvY2tPcmRlci5jcHAJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3B0aW1pemVCbG9ja09yZGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC03MywxMCArNzMsOCBAQCBwcml2YXRlOgogCiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UK
IAotdm9pZCBvcHRpbWl6ZUJsb2NrT3JkZXIoQ29kZSYgY29kZSkKK1ZlY3RvcjxCYXNpY0Jsb2Nr
Kj4gYmxvY2tzSW5PcHRpbWl6ZWRPcmRlcihDb2RlJiBjb2RlKQogewotICAgIFBoYXNlU2NvcGUg
cGhhc2VTY29wZShjb2RlLCAib3B0aW1pemVCbG9ja09yZGVyIik7Ci0KICAgICBWZWN0b3I8QmFz
aWNCbG9jayo+IGJsb2Nrc0luT3JkZXI7CiAKICAgICBCbG9ja1dvcmtsaXN0IGZhc3RXb3JrbGlz
dDsKQEAgLTExMyw2ICsxMTEsMTUgQEAgdm9pZCBvcHRpbWl6ZUJsb2NrT3JkZXIoQ29kZSYgY29k
ZSkKICAgICBBU1NFUlQoZmFzdFdvcmtsaXN0LmlzRW1wdHkoKSk7CiAgICAgQVNTRVJUKHNsb3dX
b3JrbGlzdC5pc0VtcHR5KCkpOwogCisgICAgcmV0dXJuIGJsb2Nrc0luT3JkZXI7Cit9CisKK3Zv
aWQgb3B0aW1pemVCbG9ja09yZGVyKENvZGUmIGNvZGUpCit7CisgICAgUGhhc2VTY29wZSBwaGFz
ZVNjb3BlKGNvZGUsICJvcHRpbWl6ZUJsb2NrT3JkZXIiKTsKKworICAgIFZlY3RvcjxCYXNpY0Js
b2NrKj4gYmxvY2tzSW5PcmRlciA9IGJsb2Nrc0luT3B0aW1pemVkT3JkZXIoY29kZSk7CisgICAg
CiAgICAgLy8gUGxhY2UgYmxvY2tzIGludG8gQ29kZSdzIGJsb2NrIGxpc3QgYWNjb3JkaW5nIHRv
IHRoZSBvcmRlcmluZyBpbiBibG9ja3NJbk9yZGVyLiBXZSBkbyB0aGlzIGJ5IGxlYWtpbmcKICAg
ICAvLyBhbGwgb2YgdGhlIGJsb2NrcyBhbmQgdGhlbiByZWFkb3B0aW5nIHRoZW0uCiAgICAgZm9y
IChhdXRvJiBlbnRyeSA6IGNvZGUuYmxvY2tMaXN0KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpck9wdGltaXplQmxvY2tPcmRlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3B0aW1pemVCbG9ja09yZGVyLmgJKHJldmlzaW9u
IDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3B0aW1pemVCbG9j
a09yZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsMTAgKzI4LDE4IEBACiAKICNpZiBFTkFCTEUoQjNf
SklUKQogCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CiAKK2NsYXNzIEJhc2ljQmxvY2s7CiBjbGFzcyBDb2Rl
OwogCisvLyBSZXR1cm5zIGEgbGlzdCBvZiBibG9ja3Mgc29ydGVkIGFjY29yZGluZyB0byB3aGF0
IHdvdWxkIGJlIHRoZSBjdXJyZW50IG9wdGltYWwgb3JkZXIuIFRoaXMgc2hhcmVzCisvLyBzb21l
IHByb3BlcnRpZXMgd2l0aCBhIHByZS1vcmRlciB0cmF2ZXJzYWwuIEluIHBhcnRpY3VsYXIsIGVh
Y2ggYmxvY2sgd2lsbCBhcHBlYXIgYWZ0ZXIgYXQgbGVhc3QKKy8vIG9uZSBvZiBpdHMgcHJlZGVj
ZXNzb3JzLgorVmVjdG9yPEJhc2ljQmxvY2sqPiBibG9ja3NJbk9wdGltaXplZE9yZGVyKENvZGUm
KTsKKwogLy8gUmVvcmRlcnMgdGhlIGJhc2ljIGJsb2NrcyB0byBrZWVwIGhvdCBibG9ja3MgYXQg
dGhlIHRvcCwgYW5kIG1heGltaXplIHRoZSBsaWtlbGlob29kIHRoYXQgYSBmcmVxdWVudGx5CiAv
LyB0YWtlbiBlZGdlIGlzIGp1c3QgYSBmYWxsLXRocm91Z2guCiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyU2NhdmVuZ2VSZWdpc3RlcnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU2NhdmVuZ2VSZWdpc3RlcnMuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTY2F2ZW5nZVJl
Z2lzdGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MjIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQWlyU2NhdmVuZ2VSZWdpc3RlcnMuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisK
KyNpbmNsdWRlICJBaXJCcmVha0NyaXRpY2FsRWRnZXMuaCIKKyNpbmNsdWRlICJBaXJDb2RlLmgi
CisjaW5jbHVkZSAiQWlyRW1pdFNodWZmbGUuaCIKKyNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQu
aCIKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgorI2luY2x1ZGUgIkFpckluc3RNYXAuaCIK
KyNpbmNsdWRlICJBaXJMaXZlbmVzcy5oIgorI2luY2x1ZGUgIkFpck9wdGltaXplQmxvY2tPcmRl
ci5oIgorI2luY2x1ZGUgIkFpclBoYXNlU2NvcGUuaCIKKyNpbmNsdWRlICJBaXJSZWdpc3RlclBy
aW9yaXR5LmgiCisjaW5jbHVkZSAiQWlyVG1wV2lkdGguaCIKKyNpbmNsdWRlICJBaXJVc2VDb3Vu
dHMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewor
CituYW1lc3BhY2UgeworCit0ZW1wbGF0ZTxBcmc6OlR5cGUgdHlwZT4KK2NsYXNzIFNjYXZlbmdl
UmVnaXN0ZXJzIHsKK3B1YmxpYzoKKyAgICBTY2F2ZW5nZVJlZ2lzdGVycyhDb2RlJiBjb2RlKQor
ICAgICAgICA6IG1fY29kZShjb2RlKQorICAgICAgICAsIG1fbGl2ZW5lc3MoY29kZSkKKyAgICAg
ICAgLCBtX2RlYXRocyhjb2RlKQorICAgICAgICAsIG1fdXNlQ291bnRzKGNvZGUpCisgICAgICAg
ICwgbV90bXBXaWR0aChjb2RlKQorICAgICAgICAsIG1faW5zZXJ0aW9uU2V0KGNvZGUpCisgICAg
eworICAgIH0KKworICAgIHZvaWQgcnVuKCkKKyAgICB7CisgICAgICAgIFZlY3RvcjxCYXNpY0Js
b2NrKj4gYmxvY2tzID0gYmxvY2tzSW5PcHRpbWl6ZWRPcmRlcihtX2NvZGUpOworCisgICAgICAg
IGZvciAoOzspIHsKKyAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAg
Zm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGJsb2NrcykgeworICAgICAgICAgICAgICAgIG1fYmxv
Y2sgPSBibG9jazsKKyAgICAgICAgICAgICAgICBwcm9wYWdhdGVWYWx1ZXNJbkJsb2NrKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIW1fY2hhbmdlZCkKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgY29tcHV0ZURlYXRocygpOwor
ICAgICAgICBpbml0aWFsaXplQmxvY2tSZWdTdGF0ZXMoKTsKKworICAgICAgICBmb3IgKEJhc2lj
QmxvY2sqIGJsb2NrIDogYmxvY2tzKSB7CisgICAgICAgICAgICBtX2Jsb2NrID0gYmxvY2s7Cisg
ICAgICAgICAgICBwcm9jZXNzQmxvY2soKTsKKyAgICAgICAgfQorICAgIH0KKworcHJpdmF0ZToK
KyAgICBzdHJ1Y3QgVG1wSW5mbyB7CisgICAgICAgIFRtcEluZm8oKQorICAgICAgICB7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGV4cGxpY2l0IFRtcEluZm8oUmVnIHJlZykKKyAgICAg
ICAgICAgIDogcmVnKHJlZykKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBpbnQ2NF90IGNvbnN0YW50IHsgMCB9OworICAgICAgICBSZWcgcmVnOworICAgICAgICBib29s
IGhhc0NvbnN0YW50IHsgZmFsc2UgfTsKKyAgICAgICAgYm9vbCBoYXNTcGlsbCB7IGZhbHNlIH07
CisgICAgfTsKKworICAgIHN0cnVjdCBSZWdJbmZvIHsKKyAgICAgICAgUmVnSW5mbygpCisgICAg
ICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGV4cGxpY2l0IFJlZ0luZm8oVG1wIHRtcCkKKyAg
ICAgICAgICAgIDogdG1wKHRtcCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgVG1w
IHRtcDsKKyAgICAgICAgYm9vbCBpc0xvY2tlZCB7IGZhbHNlIH07CisgICAgfTsKKworICAgIHZv
aWQgcHJvcGFnYXRlVmFsdWVzSW5CbG9jaygpCisgICAgeworICAgICAgICBtX3N0YXRlID0gbV9h
dEhlYWRbbV9ibG9ja107CisgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6ICptX2Jsb2NrKQorICAg
ICAgICAgICAgcHJvcGFnYXRlVmFsdWVzKGluc3QpOworCisgICAgICAgIGZvciAoQmFzaWNCbG9j
ayogc3VjY2Vzc29yIDogbV9ibG9jay0+c3VjY2Vzc29yQmxvY2tzKCkpIHsKKyAgICAgICAgICAg
IFN0YXRlJiBhdEhlYWQgPSBtX2F0SGVhZFtzdWNjZXNzb3JdOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBpZiAoIWF0SGVhZC52aXNpdGVkQnlQcm9wYWdhdGlvbikgeworICAgICAgICAgICAg
ICAgIGZvciAoYXV0byYgZW50cnkgOiBhdEhlYWQubWFwcGluZykgeworICAgICAgICAgICAgICAg
ICAgICBUbXBJbmZvJiBzcmNJbmZvID0gZ2V0SW5mbyhlbnRyeS5rZXkpOworICAgICAgICAgICAg
ICAgICAgICBUbXBJbmZvJiBkc3RJbmZvID0gZW50cnkudmFsdWU7CisgICAgICAgICAgICAgICAg
ICAgIGRzdEluZm8uY29uc3RhbnQgPSBzcmNJbmZvLmNvbnN0YW50OworICAgICAgICAgICAgICAg
ICAgICBkc3RJbmZvLmhhc0NvbnN0YW50ID0gc3JjSW5mby5oYXNDb25zdGFudDsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgYXRIZWFkLnZpc2l0ZWRCeVByb3BhZ2F0aW9uID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKGF1dG8mIGVudHJ5
IDogYXRIZWFkLm1hcHBpbmcpIHsKKyAgICAgICAgICAgICAgICBUbXBJbmZvJiBkc3RJbmZvID0g
ZW50cnkudmFsdWU7CisgICAgICAgICAgICAgICAgaWYgKCFkc3RJbmZvLmhhc0NvbnN0YW50KQor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBUbXBJbmZvJiBz
cmNJbmZvID0gZ2V0SW5mbyhlbnRyeS5rZXkpOworICAgICAgICAgICAgICAgIGlmICghc3JjSW5m
by5oYXNDb25zdGFudCB8fCBzcmNJbmZvLmNvbnN0YW50ICE9IGRzdEluZm8uY29uc3RhbnQpIHsK
KyAgICAgICAgICAgICAgICAgICAgZHN0SW5mby5oYXNDb25zdGFudCA9IGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIHByb3BhZ2F0ZVZhbHVl
cyhJbnN0JiBpbnN0KQorICAgIHsKKyAgICAgICAgaWYgKHR5cGUgPT0gQXJnOjpHUAorICAgICAg
ICAgICAgJiYgaW5zdC5vcGNvZGUgPT0gTW92ZQorICAgICAgICAgICAgJiYgaW5zdC5hcmdzWzBd
LmlzU29tZUltbSgpCisgICAgICAgICAgICAmJiBpbnN0LmFyZ3NbMV0uaXNUbXAoKSkgeworICAg
ICAgICAgICAgVG1wSW5mbyYgaW5mbyA9IGdldEluZm8oaW5zdC5hcmdzWzFdLnRtcCgpKTsKKyAg
ICAgICAgICAgIGluZm8uaGFzQ29uc3RhbnQgPSB0cnVlOworICAgICAgICAgICAgaW5mby5jb25z
dGFudCA9IGluc3QuYXJnc1sxXS52YWx1ZSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gRklYTUU6IE5lZWQgdGhlIGVxdWl2YWxlbnQgZm9yIEZQLgorCisg
ICAgICAgIEluc3Q6OmZvckVhY2hEZWZXaXRoRXh0cmFDbG9iYmVyZWRSZWdzPFRtcD4oCisgICAg
ICAgICAgICAmaW5zdCwgJmluc3QsIC8vIEdldCBib3RoIGxhdGUgYW5kIGVhcmx5IGRlZnMgZm9y
IGluc3QuCisgICAgICAgICAgICBbJl0gKFRtcCB0bXAsIEFyZzo6Um9sZSwgQXJnOjpUeXBlIHRt
cFR5cGUsIEFyZzo6V2lkdGgpIHsKKyAgICAgICAgICAgICAgICBpZiAodG1wVHlwZSAhPSB0eXBl
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgZ2V0SW5mbyh0
bXApLmhhc0NvbnN0YW50ID0gZmFsc2U7CisgICAgICAgICAgICB9KTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBjb21wdXRlRGVhdGhzKCkKKyAgICB7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayog
YmxvY2sgOiBtX2NvZGUpIHsKKyAgICAgICAgICAgIHR5cGVuYW1lIFRtcExpdmVuZXNzPHR5cGU+
OjpMb2NhbENhbGMgbG9jYWxDYWxjKG1fbGl2ZW5lc3MsIGJsb2NrKTsKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaW5zdEluZGV4ID0gYmxvY2stPnNpemUoKTsgaW5zdEluZGV4LS07KSB7Cisg
ICAgICAgICAgICAgICAgbG9jYWxDYWxjLmV4ZWN1dGUoCisgICAgICAgICAgICAgICAgICAgIGlu
c3RJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgWyZdICh1bnNpZ25lZCwgVG1wIHRtcCwgS2ls
bE1vZGUga2lsbE1vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoa2lsbE1v
ZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgS2lsbE1vZGU6OkRPQUVhcmx5RGVm
SW5OZXh0SW5zdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2RlYXRocy5hdChibG9j
aywgaW5zdEluZGV4ICsgMSkuYXBwZW5kKERlYXRoKHRtcCwgRWFybHlEZWF0aCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBLaWxsTW9kZTo6RE9BTGF0ZURlZjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2Rl
YXRocy5hdChibG9jaywgaW5zdEluZGV4KS5hcHBlbmQoRGVhdGgodG1wLCBMYXRlRGVhdGgpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgS2lsbE1vZGU6OkVhcmx5VXNlS2lsbDoKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2RlYXRocy5hdChibG9jaywgaW5zdEluZGV4KS5hcHBlbmQoRGVhdGgodG1wLCBFYXJs
eURlYXRoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlIEtpbGxNb2RlOjpMYXRlVXNlSW5QcmV2SW5zdEtpbGw6CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9kZWF0aHMuYXQoYmxvY2ssIGluc3RJbmRleCAtIDEp
LmFwcGVuZChEZWF0aCh0bXAsIExhdGVEZWF0aCkpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGlu
aXRpYWxpemVCbG9ja1JlZ1N0YXRlcygpCisgICAgeworICAgICAgICBCYXNpY0Jsb2NrKiByb290
ID0gbV9jb2RlWzBdOworICAgICAgICAKKyAgICAgICAgU3RhdGUmIHN0YXRlID0gbV9hdEhlYWRb
cm9vdF07CisgICAgICAgIGZvciAoVG1wIHRtcCA6IG1fbGl2ZW5lc3MubGl2ZUF0SGVhZChyb290
KSkgeworICAgICAgICAgICAgaWYgKCF0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3RhdGUubWFwcGluZy5hZGQodG1wLCBU
bXBJbmZvKHRtcC5yZWcoKSkpOworICAgICAgICAgICAgc3RhdGUucmV2ZXJzZU1hcHBpbmdbdG1w
LnJlZygpXSA9IFJlZ0luZm8odG1wKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgcHJv
Y2Vzc0Jsb2NrKCkKKyAgICB7CisgICAgICAgIG1fc3RhdGUgPSBtX2F0SGVhZFttX2Jsb2NrXTsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9zdGF0ZS5pc1NldHRsZWQpOworCisgICAgICAgIGZv
ciAobV9pbnN0SW5kZXggPSAwOyBtX2luc3RJbmRleCA8IG1fYmxvY2stPnNpemUoKTsgKyttX2lu
c3RJbmRleCkgeworICAgICAgICAgICAgSW5zdCYgaW5zdCA9IG1fYmxvY2stPmF0KG1faW5zdElu
ZGV4KTsKKyAgICAgICAgICAgIHByb2Nlc3NJbnN0KGluc3QpOworICAgICAgICAgICAgcHJvcGFn
YXRlVmFsdWVzKGluc3QpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fYmxvY2stPm51bVN1
Y2Nlc3NvcnMoKSA+IDEpIHsKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29y
IDogbV9ibG9jay0+c3VjY2Vzc29yQmxvY2tzKCkpCisgICAgICAgICAgICAgICAgYm9vdEJsb2Nr
KHN1Y2Nlc3Nvcik7CisgICAgICAgIH0gZWxzZSBpZiAobV9ibG9jay0+bnVtU3VjY2Vzc29ycygp
ID09IDEpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA9IG1fYmxvY2stPnN1
Y2Nlc3NvckJsb2NrKDApOworICAgICAgICAgICAgaWYgKG1fYXRIZWFkW3N1Y2Nlc3Nvcl0uaXNT
ZXR0bGVkKQorICAgICAgICAgICAgICAgIGNvbmZvcm1UbyhzdWNjZXNzb3IpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGJvb3RCbG9jayhzdWNjZXNzb3IpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKG1fYmxvY2spOworICAg
IH0KKworICAgIHZvaWQgcHJvY2Vzc0luc3QoSW5zdCYgaW5zdCkKKyAgICB7CisgICAgICAgIC8v
IE91ciBzdGF0ZSBtYXBwaW5nIHRlbGxzIHVzIHdoYXQgaXMgbGl2ZSBhdCBhbnkgZ2l2ZW4gbW9t
ZW50LiBXZSB1c2UgYSBzZXBhcmF0ZQorICAgICAgICAvLyBsaXZlbmVzcyBwYXNzIHRvIGNvbGxl
Y3QgdGhlIGtpbGwgbGlzdHMgZm9yIGFsbCBpbnN0cnVjdGlvbnMuIFRoZSBraWxsIGxpc3RzIHRl
bGwgdXMKKyAgICAgICAgLy8gYWJvdXQgdGhlIHdheXMgdGhhdCB0aGluZ3MgZGllIGF0IGFuIElu
c3QuIFRoZXJlIGFyZSBmb3VyIHdheXM6CisgICAgICAgIC8vIAorICAgICAgICAvLyAtIEFuIGVh
cmx5IGRlZiBjb3VsZCBkaWUgYWJvdmUgYW4gSW5zdC4KKyAgICAgICAgLy8gLSBBbiBlYXJseSB1
c2UgY291bGQga2lsbCBhYm92ZSBhbiBJbnN0LgorICAgICAgICAvLyAtIEEgbGF0ZSBkZWYgY291
bGQgZGllIGJlbG93IGFuIEluc3QuCisgICAgICAgIC8vIC0gQSBsYXRlIHVzZSBjb3VsZCBraWxs
IGJlbG93IGFuIEluc3QuCisgICAgICAgIC8vIAorICAgICAgICAvLyBPbmNlIHdlIGFyZSBhcm1l
ZCB3aXRoIG91ciBzdGF0ZSBtYXBwaW5nIGFuZCB0aGUga2lsbCBsaXN0cywgd2UgY2FuIHByb2Nl
c3MgdGhlIEluc3QKKyAgICAgICAgLy8gaW4gdGhlIG9yZGVyIG9mIGl0cyBleGVjdXRpb24gYW5k
IHVwZGF0ZSB0aGUgc3RhdGUgbWFwcGluZyBiYXNlZCBvbiBkZWZzIGFuZCBraWxsCisgICAgICAg
IC8vIGxpc3RzLgorICAgICAgICAvLyAKKyAgICAgICAgLy8gV2Ugc3RhcnQgYWJvdmUgdGhlIElu
c3Qgd2l0aCBhIHN0YXRlIHRoYXQgdGVsbHMgdXMgd2hhdCBpcyBsaXZlIGJlZm9yZSBpdC4gVGhp
cworICAgICAgICAvLyBpbmNsdWRlcyB0aGluZ3MgdGhhdCB3aWxsIGRpZSBhdCB0aGUgdG9wLiBX
ZSBjYW4gaGFuZGxlIGVhcmx5IHVzZXMgYW5kIGRlZnMgYnkgZ2l2aW5nCisgICAgICAgIC8vIHRo
ZW0gcmVnaXN0ZXJzIHRoYXQgYXJlIG5vdCBsaXZlLiBXZSBrbm93IHdoaWNoIHJlZ2lzdGVycyBi
ZWNvbWUgbGl2ZSBiZWNhdXNlIG91cgorICAgICAgICAvLyBtYXBwaW5nIHRlbGxzIHVzIHRoaXMu
IFRoZW4gd2UgY2FuIGFwcGx5IHRoZSBlYXJseSBkZWF0aHMuIFRoZW4gd2UgcHJvY2VzcyBsYXRl
IHVzZXMKKyAgICAgICAgLy8gYW5kIGRlZnMsIGFuZCB0aGVuIGFwcGx5IHRoZSBsYXRlIGRlYXRo
cy4KKyAgICAgICAgLy8gCisgICAgICAgIC8vIFRoaXMgYWxnb3JpdGhtIG11c3QgcHJvY2VlZCBp
biB0aGUgb3JkZXIgb2YgdGhlIEluc3QncyBleGVjdXRpb24uIFdlIGNhbiB1c2UgdGhlCisgICAg
ICAgIC8vIG5vdGlvbiBvZiBsb2NraW5nIGF0IGVhY2ggc3RhZ2UgLSBlYXJseSBhbmQgdGhlbiBs
YXRlIC0gdG8gaW5kaWNhdGUgd2hpY2ggcmVnaXN0ZXJzCisgICAgICAgIC8vIGhhdmUgYWxyZWFk
eSBiZWVuIHB1cnBvc2VkLiBBbGwgZWFybHkgdXNlcyB3aWxsIGhvbGQgdGhlIGxvY2sgd2hpbGUg
d2UgYXJlIHByb2Nlc3NpbmcKKyAgICAgICAgLy8gdGhlIGVhcmx5IHBhcnQgb2YgdGhlIGluc3Ry
dWN0aW9uLCBhbmQgdGhlbiByZWxlYXNlIGl0IGJlZm9yZSB3ZSBzdGFydCBwcm9jZXNzaW5nIHRo
ZQorICAgICAgICAvLyBsYXRlIHN0dWZmLiBJbiBiZXR3ZWVuIGVhcmx5IGFuZCBsYXRlLCBhZnRl
ciB3ZSBoYXZlIHVubG9ja2VkIHRoaW5ncyB1c2VkIGVhcmx5LCB3ZQorICAgICAgICAvLyBjYW4g
cGVyZm9ybSBlYXJseSBkZWF0aHMuIEFsbCBlYXJseSBkZWZzIHdpbGwgaG9sZCB0aGUgbG9jayBl
YXJseSBhbmQgdGhlbiByZWxlYXNlIGl0CisgICAgICAgIC8vIGFmdGVyIHdlIHByb2Nlc3MgbGF0
ZSB0aGluZ3MuIEFzIGEgc3BlY2lhbCBjYXNlLCBVc2VEZWYgd2lsbCBhbHNvIHJlbGVhc2UgdGhl
IGxvY2sKKyAgICAgICAgLy8gbGF0ZS4KKyAgICAgICAgLy8gCisgICAgICAgIC8vIFRoaW5ncyBn
ZXQgd2VpcmQgd2l0aCBVc2VEZWYuIEx1Y2t5IGZvciB1cywgSW5zdHMgd2lsbCBoYXZlIGEgc21h
bGwgbnVtYmVyIG9mIFVzZURlZnMsCisgICAgICAgIC8vIHNvIHRoZSBhbGdvcml0aG0gZG9lc24n
dCBoYXZlIHRvIGJlIGVmZmljaWVudCBhbmQgd2UgY2FuIGJlIHN1cmUgdGhhdCBpZiB3ZSBoYW5k
bGUKKyAgICAgICAgLy8gVXNlRGVmcyBlYXJseSwgdGhlbiB0aGUgZ3JlZWR5IGFwcHJvYWNoIHNo
b3VsZCBqdXN0IHdvcmsuIFRoZSBsb2NraW5nIHN0cmF0ZWd5IGVuc3VyZXMKKyAgICAgICAgLy8g
dGhhdCB3ZSB3b24ndCB0cnkgdG8gcmV1c2UgdGhlIHJlZ2lzdGVyIHdlIGFscmVhZHkgcGlja2Vk
LiBUaGUgb25seSBhZGRpdGlvbmFsIGxvZ2ljCisgICAgICAgIC8vIGZvciBVc2VEZWYgaXMgdGhh
dCB3aGVuIHdlIHBpY2sgYSByZWdpc3RlciBmb3IgaXQsIHdoaWNoIGhhcHBlbnMgZWFybHksIHdl
IGxvb2sgYWhlYWQKKyAgICAgICAgLy8gdG8gbWFrZSBzdXJlIHRoYXQgd2UgZGlkbid0IGFscmVh
ZHkgbG9jayB0aGUgcmVnaXN0ZXIgbGF0ZS4gVGhlIG9ubHkgcmVnaXN0ZXJzIHRoYXQgd2UKKyAg
ICAgICAgLy8gY291bGQgaGF2ZSBhbHJlYWR5IGxvY2tlZCBsYXRlIGFyZSB0aGUgb25lcyB0aGF0
IGFyZSBjbG9iYmVyZWQgbGF0ZSBvciBkZWZpbmVkIGxhdGUuCisgICAgICAgIC8vIAorICAgICAg
ICAvLyBPbmUgb2YgdGhlIGJlYXV0aWZ1bCB0aGluZ3MgYWJvdXQgdGhpcyBhcHByb2FjaCBpcyB0
aGF0IHdlIGNhbiBwcm9jZXNzIHRoZSBJbnN0CisgICAgICAgIC8vIGluLXBsYWNlLiBXZSB3b24n
dCBlZGl0IHRoZSB1c2VzIHVudGlsIHdlIGhhdmUgYWNjb3VudGVkIGZvciB0aGVtLiBXZSB3b24n
dCBlZGl0IHRoZQorICAgICAgICAvLyBkZWZzIHVudGlsIHdlIGhhdmUgYWNjb3VudGVkIGZvciB0
aGVtLiBTbywgd2UgY2FuIGNvbXB1dGUgZm9yd2FyZCBsaXZlbmVzcyB3aGlsZSBhbHNvCisgICAg
ICAgIC8vIGVkaXRpbmcgdGhlIGluc3RydWN0aW9uLgorCisgICAgICAgIC8vIFNwaWxsIGFuZCBs
b2NrIGFsbCBlYXJseSBjbG9iYmVycy4gU3BpbGwgYWxsIGxhdGUgY2xvYmJlcnMsIGJ1dCBkb24n
dCBsb2NrIHRob3NlIHlldC4KKyAgICAgICAgaWYgKGluc3Qub3Bjb2RlID09IFBhdGNoKSB7Cisg
ICAgICAgICAgICBpbnN0LmV4dHJhRWFybHlDbG9iYmVyZWRSZWdzKCkuZm9yRWFjaCgKKyAgICAg
ICAgICAgICAgICBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgc3BpbGwocmVn
KTsKKyAgICAgICAgICAgICAgICAgICAgbG9jayhyZWcpOworICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgd2UgbG9jayBhbHJlYWR5LWFs
bG9jYXRlZCByZWdpc3RlcnMgdGhhdCBhcmUgbGl2ZSBlYXJseS4gVGhpcyBpbmNsdWRlcyBhbGwK
KyAgICAgICAgLy8gZWFybHkgdXNlcywgZWFybHkgZGVmcywgYW5kIGxhdGUgdXNlcy4KKyAgICAg
ICAgaW5zdC5mb3JFYWNoVG1wKAorICAgICAgICAgICAgWyZdIChUbXAmIHRtcCwgQXJnOjpSb2xl
IHJvbGUsIEFyZzo6VHlwZSB0bXBUeXBlLCBBcmc6OldpZHRoKSB7CisgICAgICAgICAgICAgICAg
aWYgKHRtcFR5cGUgIT0gdHlwZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgIGlmICghdG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICBpZiAoIUFyZzo6aXNFYXJseURlZihyb2xlKSAmJiAhQXJnOjppc0Fu
eVVzZShyb2xlKSAmJiByb2xlICE9IEFyZzo6VXNlQWRkcikKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGxvY2soZmlsbCh0bXAs
IHJvbGUpKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgIC8vIEFsbG9jYXRlIHJlZ2lzdGVy
cyB0byB0aG9zZSB0aGluZ3MgdGhhdCBkb24ndCBhZG1pdCBzdGFjay4KKyAgICAgICAgaW5zdC5m
b3JFYWNoQXJnKAorICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFy
Zzo6VHlwZSBhcmdUeXBlLCBBcmc6OldpZHRoIHdpZHRoKSB7CisgICAgICAgICAgICAgICAgaWYg
KGFyZ1R5cGUgIT0gdHlwZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICAgIGlmICghQXJnOjppc0Vhcmx5RGVmKHJvbGUpICYmICFBcmc6OmlzQW55VXNlKHJvbGUp
ICYmIHJvbGUgIT0gQXJnOjpVc2VBZGRyKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgICAgICAgICBpZiAoYXJnLmlzVG1wKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGFyZy5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgICAgICBpZiAoaW5zdC5hZG1pdHNTdGFjayhhcmcpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICBhcmcgPSBUbXAobG9jayhmaWxs
KGFyZy50bXAoKSwgcm9sZSkpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGFyZy5mb3JFYWNoVG1wKAorICAgICAgICAg
ICAgICAgICAgICByb2xlLCB0eXBlLCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgWyZdIChU
bXAmIHRtcCwgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSwgQXJnOjpXaWR0aCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgdG1wID0gVG1wKGxvY2soZmlsbCh0bXAsIHJvbGUpKSk7CisgICAg
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgLy8gQWxsb2Nh
dGUgcmVnaXN0ZXJzIHRvIHRob3NlIHRoaW5ncyB0aGF0IGFkbWl0IHN0YWNrIGJ1dCBhcmUgbm90
IGNvbGQuIEtlZXAgdGhpcyB1cCBzbworICAgICAgICAvLyBsb25nIGFzIHdlIHN0aWxsIGhhdmUg
cmVnaXN0ZXJzLgorICAgICAgICBpbnN0LmZvckVhY2hBcmcoCisgICAgICAgICAgICBbJl0gKEFy
ZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIGFyZ1R5cGUsIEFyZzo6V2lkdGgpIHsK
KyAgICAgICAgICAgICAgICBpZiAoYXJnVHlwZSAhPSB0eXBlKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgaWYgKCFBcmc6OmlzQW55VXNlKHJvbGUpICYmICFB
cmc6OmlzRWFybHlEZWYocm9sZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICBpZiAoQXJnOjppc0NvbGRVc2Uocm9sZSkpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgICBpZiAoIWFyZy5pc1RtcCgpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgaWYgKGFyZy5pc1JlZygpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgICAgICBSZWcgcmVnID0gZmlsbChh
cmcudG1wKCksIHJvbGUsIERvbnRTcGlsbCk7CisgICAgICAgICAgICAgICAgaWYgKCFyZWcpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBhcmcgPSBUbXAobG9j
ayhyZWcpKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hhdCB0
byBkbyB3aXRoIGV2ZXJ5dGhpbmcgZWxzZS4KKyAgICAgICAgaW5zdC5mb3JFYWNoQXJnKAorICAg
ICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSBhcmdUeXBl
LCBBcmc6OldpZHRoIHdpZHRoKSB7CisgICAgICAgICAgICAgICAgaWYgKGFyZ1R5cGUgIT0gdHlw
ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGlmICghQXJn
Ojppc0FueVVzZShyb2xlKSAmJiAhQXJnOjppc0Vhcmx5RGVmKHJvbGUpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgaWYgKCFhcmcuaXNUbXAoKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGlmIChhcmcuaXNSZWcoKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAgICAgVG1wSW5mbyYg
aW5mbyA9IGdldEluZm8oYXJnLnRtcCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoaW5mby5yZWcp
IHsKKyAgICAgICAgICAgICAgICAgICAgYXJnID0gVG1wKGxvY2soaW5mby5yZWcpKTsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIFN0YWNrU2xvdCogc2xvdCA9IHNwaWxsU2xvdChhcmcudG1wKCkpOworICAgICAgICAgICAg
ICAgIGVuc3VyZVdpZHRoKHNsb3QsIHdpZHRoKTsKKyAgICAgICAgICAgICAgICBhcmcgPSBBcmc6
OnN0YWNrKHNsb3QpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgLy8gVW5sb2NrIGFsbCBv
ZiB0aGUgZWFybHkgY2xvYmJlcmVkIHJlZ2lzdGVycy4KKyAgICAgICAgaWYgKGluc3Qub3Bjb2Rl
ID09IFBhdGNoKSB7CisgICAgICAgICAgICBpbnN0LmV4dHJhRWFybHlDbG9iYmVyZWRSZWdzKCku
Zm9yRWFjaCgKKyAgICAgICAgICAgICAgICBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgICAgICAg
ICAgICAgdW5sb2NrKHJlZyk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAg
ICAgICAvLyBVbmxvY2sgYWxsIG9mIHRoZSBlYXJseSB1c2VzLiBUaGlzIHBlcm1pdHMgdGhvc2Ug
cmVnaXN0ZXJzIHRvIGJlIHVzZWQgZm9yIG90aGVyIHRoaW5ncy4KKyAgICAgICAgLy8gSXQgZXZl
biBtZWFucyB0aGF0IHdlIG1pZ2h0IHNwaWxsIHRoZSB1c2VkIHJlZ2lzdGVyIGluIHRoZSBzaHVm
ZmxlIGR1ZSB0byBhIGxhdGUgZGVmIHRoYXQKKyAgICAgICAgLy8gY291bGQgdXNlIHRoYXQgcmVn
aXN0ZXIuCisgICAgICAgIGluc3QuZm9yRWFjaFRtcCgKKyAgICAgICAgICAgIFsmXSAoVG1wJiB0
bXAsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgYXJnVHlwZSwgQXJnOjpXaWR0aCkgeworICAg
ICAgICAgICAgICAgIGlmIChhcmdUeXBlICE9IHR5cGUpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICBpZiAoIUFyZzo6aXNFYXJseVVzZShyb2xlKSAmJiByb2xl
ICE9IEFyZzo6VXNlQWRkcikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHRtcC5pc1JlZygpKTsKKyAgICAgICAgICAgICAgICB1bmxv
Y2sodG1wLnJlZygpKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgIC8vIEFwcGx5IGFsbCBv
ZiB0aGUgZWFybHkgZGVhdGhzLgorICAgICAgICBmb3IgKERlYXRoJiBkZWF0aCA6IG1fZGVhdGhz
LmF0KG1fYmxvY2ssIG1faW5zdEluZGV4KSkgeworICAgICAgICAgICAgaWYgKGRlYXRoLmRlYXRo
TW9kZSA9PSBFYXJseURlYXRoKQorICAgICAgICAgICAgICAgIGtpbGwoZGVhdGgudG1wKTsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIExvY2sgYWxsIG9mIHRoZSBsYXRlIGNsb2JiZXJlZCByZWdp
c3RlcnMuCisgICAgICAgIGlmIChpbnN0Lm9wY29kZSA9PSBQYXRjaCkgeworICAgICAgICAgICAg
aW5zdC5leHRyYUNsb2JiZXJlZFJlZ3MoKS5mb3JFYWNoKAorICAgICAgICAgICAgICAgIFsmXSAo
UmVnIHJlZykgeworICAgICAgICAgICAgICAgICAgICBzcGlsbChyZWcpOworICAgICAgICAgICAg
ICAgICAgICBsb2NrKHJlZyk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAg
ICAgICAvLyBGaWxsIGFuZCBsb2NrIGFsbCBvZiB0aGUgbGF0ZSBkZWZzLgorICAgICAgICBpbnN0
LmZvckVhY2hBcmcoCisgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwg
QXJnOjpUeXBlIGFyZ1R5cGUsIEFyZzo6V2lkdGgpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXJn
VHlwZSAhPSB0eXBlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgaWYgKCFBcmc6OmlzTGF0ZURlZihyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgIGlmICghYXJnLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgICBsb2NrKGZpbGwoYXJnLnRtcCgpLCByb2xlKSk7Cisg
ICAgICAgICAgICB9KTsKKworICAgICAgICAvLyBBc3NpZ24gcmVnaXN0ZXJzIHRvIHRob3NlIGxh
dGUgZGVmcyB0aGF0IGRvbid0IGFkbWl0IHN0YWNrLgorICAgICAgICBpbnN0LmZvckVhY2hBcmco
CisgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIGFy
Z1R5cGUsIEFyZzo6V2lkdGgpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXJnVHlwZSAhPSB0eXBl
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgaWYgKCFBcmc6
OmlzTGF0ZURlZihyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICAgIGlmICghYXJnLmlzVG1wKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICBpZiAoYXJnLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICBpZiAoaW5zdC5hZG1pdHNTdGFjayhhcmcpKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgYXJnID0gVG1wKGxvY2soZmlsbChh
cmcudG1wKCksIHJvbGUpKSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAvLyBEZWFsIHdp
dGggZXZlcnlvbmUgZWxzZS4KKyAgICAgICAgaW5zdC5mb3JFYWNoQXJnKAorICAgICAgICAgICAg
WyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSBhcmdUeXBlLCBBcmc6Oldp
ZHRoIHdpZHRoKSB7CisgICAgICAgICAgICAgICAgaWYgKGFyZ1R5cGUgIT0gdHlwZSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGlmICghQXJnOjppc0xhdGVE
ZWYocm9sZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBp
ZiAoIWFyZy5pc1RtcCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgaWYgKGFyZy5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgICAgICAgICBSZWcgcmVnID0gZmlsbChhcmcudG1wKCksIHJvbGUsIERvbnRTcGlsbCk7
CisgICAgICAgICAgICAgICAgaWYgKHJlZykgeworICAgICAgICAgICAgICAgICAgICBhcmcgPSBU
bXAocmVnKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHNsb3QgPSBzcGls
bFNsb3QoYXJnLnRtcCgpKTsKKyAgICAgICAgICAgICAgICBlbnN1cmVXaWR0aChzbG90LCB3aWR0
aCk7CisgICAgICAgICAgICAgICAgYXJnID0gQXJnOjpzdGFjayhzbG90KTsKKyAgICAgICAgICAg
IH0pOworCisgICAgICAgIC8vIEFwcGx5IHRoZSBsYXRlIGRlYXRocy4KKyAgICAgICAgZm9yIChE
ZWF0aCYgZGVhdGggOiBtX2RlYXRocy5hdChtX2Jsb2NrLCBtX2luc3RJbmRleCkpIHsKKyAgICAg
ICAgICAgIGlmIChkZWF0aC5kZWF0aE1vZGUgPT0gTGF0ZURlYXRoKQorICAgICAgICAgICAgICAg
IGtpbGwoZGVhdGgudG1wKTsKKyAgICAgICAgfQorCisgICAgICAgIGVtaXRTaHVmZmxlKG1faW5z
dEluZGV4KTsKKyAgICAgICAgdW5sb2NrQWxsKCk7CisgICAgfQorCisgICAgdm9pZCBib290Qmxv
Y2soQmFzaWNCbG9jayogYmxvY2spCisgICAgeworICAgICAgICBTdGF0ZSYgZHN0U3RhdGUgPSBt
X2F0SGVhZFtibG9ja107CisKKyAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IGRzdFN0YXRlLm1h
cHBpbmcpIHsKKyAgICAgICAgICAgIFRtcEluZm8mIHNyY0luZm8gPSBnZXRJbmZvKGVudHJ5Lmtl
eSk7CisgICAgICAgICAgICBUbXBJbmZvJiBkc3RJbmZvID0gZW50cnkudmFsdWU7CisgICAgICAg
ICAgICBkc3RJbmZvLnJlZyA9IHNyY0luZm8ucmVnOworICAgICAgICAgICAgZHN0SW5mby5oYXNT
cGlsbCA9IHNyY0luZm8uaGFzU3BpbGw7CisgICAgICAgICAgICBpZiAoc3JjSW5mby5yZWcpCisg
ICAgICAgICAgICAgICAgZHN0U3RhdGUucmV2ZXJzZU1hcHBpbmdbc3JjSW5mby5yZWddLnRtcCA9
IGVudHJ5LmtleTsKKyAgICAgICAgfQorCisgICAgICAgIGRzdFN0YXRlLmlzU2V0dGxlZCA9IHRy
dWU7CisgICAgfQorCisgICAgdm9pZCBjb25mb3JtVG8oQmFzaWNCbG9jayogYmxvY2spCisgICAg
eworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2Jsb2NrLT5sYXN0KCkub3Bjb2RlID09IEp1bXAp
OworICAgICAgICAKKyAgICAgICAgU3RhdGUmIGRzdFN0YXRlID0gbV9hdEhlYWRbYmxvY2tdOwor
ICAgICAgICBSRUxFQVNFX0FTU0VSVChkc3RTdGF0ZS5pc1NldHRsZWQpOworCisgICAgICAgIGZv
ciAoYXV0byYgZW50cnkgOiBkc3RTdGF0ZS5tYXBwaW5nKSB7CisgICAgICAgICAgICBUbXBJbmZv
JiBzcmNJbmZvID0gZ2V0SW5mbyhlbnRyeS5rZXkpOworICAgICAgICAgICAgVG1wSW5mbyYgZHN0
SW5mbyA9IGVudHJ5LnZhbHVlOworCisgICAgICAgICAgICBpZiAoZHN0SW5mby5yZWcgJiYgZHN0
SW5mby5yZWcgIT0gc3JjSW5mby5yZWcpIHsKKyAgICAgICAgICAgICAgICBTaHVmZmxlUGFpciBw
YWlyOworICAgICAgICAgICAgICAgIGlmIChzcmNJbmZvLnJlZykgeworICAgICAgICAgICAgICAg
ICAgICBwYWlyID0gU2h1ZmZsZVBhaXIoCisgICAgICAgICAgICAgICAgICAgICAgICBUbXAoc3Jj
SW5mby5yZWcpLCBUbXAoZHN0SW5mby5yZWcpLCBtX3RtcFdpZHRoLndpZHRoKGVudHJ5LmtleSkp
OworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3JjSW5mby5oYXNDb25zdGFudCkgeworICAg
ICAgICAgICAgICAgICAgICBwYWlyID0gU2h1ZmZsZVBhaXIoCisgICAgICAgICAgICAgICAgICAg
ICAgICBBcmc6OmltbTY0KHNyY0luZm8uY29uc3RhbnQpLCBUbXAoZHN0SW5mby5yZWcpLCBtX3Rt
cFdpZHRoLndpZHRoKGVudHJ5LmtleSkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNyY0luZm8uaGFzU3BpbGwpOworICAgICAg
ICAgICAgICAgICAgICBTdGFja1Nsb3QqIHNsb3QgPSBzcGlsbFNsb3QoZW50cnkua2V5KTsKKyAg
ICAgICAgICAgICAgICAgICAgcGFpciA9IFNodWZmbGVQYWlyKEFyZzo6c3RhY2soc2xvdCksIFRt
cChkc3RJbmZvLnJlZyksIHdpZHRoKHNsb3QpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgbV9zaHVmZmxlUGFpcnMuYXBwZW5kKHBhaXIpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoZHN0SW5mby5oYXNTcGlsbCAmJiAhc3JjSW5mby5oYXNTcGlsbCkgewor
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNyY0luZm8ucmVnKTsKKyAgICAgICAgICAg
ICAgICBTdGFja1Nsb3QqIHNsb3QgPSBzcGlsbFNsb3QoZW50cnkua2V5KTsKKyAgICAgICAgICAg
ICAgICBtX3NodWZmbGVQYWlycy5hcHBlbmQoU2h1ZmZsZVBhaXIoVG1wKHNyY0luZm8ucmVnKSwg
QXJnOjpzdGFjayhzbG90KSwgd2lkdGgoc2xvdCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIGVtaXRTaHVmZmxlKG1fYmxvY2stPnNpemUoKSAtIDEpOworICAgIH0KKwor
ICAgIFRtcEluZm8mIGdldEluZm8oVG1wIHRtcCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3N0
YXRlLm1hcHBpbmcuYWRkKHRtcCwgVG1wSW5mbygpKS5pdGVyYXRvci0+dmFsdWU7CisgICAgfQor
CisgICAgZW51bSBGaWxsRWZmb3J0IHsKKyAgICAgICAgTXVzdEZpbGwsCisgICAgICAgIERvbnRT
cGlsbAorICAgIH07CisKKyAgICBSZWcgZmlsbChUbXAgdG1wLCBBcmc6OlJvbGUgcm9sZSwgRmls
bEVmZm9ydCBmaWxsRWZmb3J0ID0gTXVzdEZpbGwpCisgICAgeworICAgICAgICBpZiAocm9sZSA9
PSBBcmc6OlVzZURlZiB8fCBBcmc6OmlzRWFybHlEZWYocm9sZSkpIHsKKyAgICAgICAgICAgIElu
c3QmIGluc3QgPSBtX2Jsb2NrLT5hdChtX2luc3RJbmRleCk7CisgICAgICAgICAgICByZXR1cm4g
ZmlsbCgKKyAgICAgICAgICAgICAgICB0bXAsIHJvbGUsIGZpbGxFZmZvcnQsCisgICAgICAgICAg
ICAgICAgWyZdIChSZWcgY2FuZGlkYXRlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gVXNlRGVmIGFuZCBlYXJseSBEZWYgcmVxdWlyZXMgdXMgdG8gbG9vayBhaGVhZCBhbmQgc2Vl
IGlmIHRoZSBjYW5kaWRhdGUKKyAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgaXMgYWNj
ZXB0YWJsZSB0byB0aGUgbGF0ZSBkZWZzLCBsYXRlIHVzZXMsIGFuZCBsYXRlIGNsb2JiZXJzLiBB
biBlYXN5CisgICAgICAgICAgICAgICAgICAgIC8vIHdheSB0byBkbyB0aGlzIGlzIGp1c3QgdG8g
c2VlIGlmIHRoZSByZWdpc3RlciBhcHBlYXJzIGFueXdoZXJlIGluIHRoZSBhcmd1bWVudAorICAg
ICAgICAgICAgICAgICAgICAvLyBsaXN0LiBOb3RlIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBjb25z
aWRlciBub24tVG1wIEFyZ3MsIGJlY2F1c2UgdGhvc2Ugd291bGQKKyAgICAgICAgICAgICAgICAg
ICAgLy8gYWxsIGhhdmUgZWFybHkgdXNlcy4KKyAgICAgICAgICAgICAgICAgICAgZm9yIChBcmcm
IGFyZyA6IGluc3QuYXJncykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZy5pc1Jl
ZygpICYmIGFyZy5yZWcoKSA9PSBjYW5kaWRhdGUpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAgICAgLy8gT2YgY291cnNlLCB0aGVyZSBpcyB0aGUgYW5ub3lpbmcgUGF0Y2ggaW5zdHJ1Y3Rp
b24gYW5kIGl0cyBjbG9iYmVyZWQKKyAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXJzLgor
ICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdC5vcGNvZGUgPT0gUGF0Y2ggJiYgaW5zdC5leHRy
YUNsb2JiZXJlZFJlZ3MoKS5nZXQoY2FuZGlkYXRlKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmaWxsKHRtcCwgcm9s
ZSwgZmlsbEVmZm9ydCwgW10gKFJlZykgLT4gYm9vbCB7IHJldHVybiB0cnVlOyB9KTsKKyAgICB9
CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBSZWcgZmlsbChUbXAg
dG1wLCBBcmc6OlJvbGUgcm9sZSwgRmlsbEVmZm9ydCBmaWxsRWZmb3J0LCBjb25zdCBGdW5jdG9y
JiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgVG1wSW5mbyYgaW5mbyA9IGdldEluZm8odG1wKTsK
KworICAgICAgICBpZiAoQXJnOjppc0FueURlZihyb2xlKSkgeworICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoIWluZm8uaGFzU3BpbGwpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWlu
Zm8uaGFzQ29uc3RhbnQpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWluZm8ucmVnKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGluZm8ucmVnKSB7CisgICAgICAgICAg
ICBpZiAodG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQodG1wLnJl
ZygpID09IGluZm8ucmVnKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIGluZm8u
cmVnOworICAgICAgICB9CisKKyAgICAgICAgUmVnIHJlZyA9IHRtcC5yZWcoKTsKKyAgICAgICAg
aWYgKCFyZWcpIHsKKyAgICAgICAgICAgIGZvciAoUmVnIGNhbmRpZGF0ZSA6IHJlZ3NJblByaW9y
aXR5T3JkZXIodHlwZSkpIHsKKyAgICAgICAgICAgICAgICBSZWdJbmZvJiByZWdJbmZvID0gbV9z
dGF0ZS5yZXZlcnNlTWFwcGluZ1tjYW5kaWRhdGVdOworICAgICAgICAgICAgICAgIGlmIChyZWdJ
bmZvLmlzTG9ja2VkIHx8IHJlZ0luZm8udG1wIHx8ICFmdW5jdG9yKGNhbmRpZGF0ZSkpCisgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIHJlZyA9IGNhbmRpZGF0
ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKCFyZWcpIHsKKyAgICAgICAgICAgICAgICBpZiAoZmlsbEVmZm9ydCA9PSBEb250U3BpbGwp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWcoKTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAvLyBOZWVkIHRvIHNwaWxsIHNvbWV0aGluZy4gU3BpbGwgdGhlIHJlZyB0
aGF0IGhvbGRzIHRoZSB0bXAgdGhhdCBoYXMgdGhlIGxlYXN0IHdhcm0KKyAgICAgICAgICAgICAg
ICAvLyB1c2VzLgorICAgICAgICAgICAgICAgIHVuc2lnbmVkIG1pbldhcm1Vc2VzID0gVUlOVF9N
QVg7CisgICAgICAgICAgICAgICAgZm9yIChSZWcgY2FuZGlkYXRlIDogcmVnc0luUHJpb3JpdHlP
cmRlcih0eXBlKSkgeworICAgICAgICAgICAgICAgICAgICBSZWdJbmZvJiByZWdJbmZvID0gbV9z
dGF0ZS5yZXZlcnNlTWFwcGluZ1tjYW5kaWRhdGVdOworICAgICAgICAgICAgICAgICAgICBpZiAo
cmVnSW5mby5pc0xvY2tlZCB8fCAhZnVuY3RvcihjYW5kaWRhdGUpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bVdhcm1V
c2VzID0gbV91c2VDb3VudHNbcmVnSW5mby50bXBdLm51bVdhcm1Vc2VzOworICAgICAgICAgICAg
ICAgICAgICBpZiAobnVtV2FybVVzZXMgPCBtaW5XYXJtVXNlcykgeworICAgICAgICAgICAgICAg
ICAgICAgICAgcmVnID0gY2FuZGlkYXRlOworICAgICAgICAgICAgICAgICAgICAgICAgbWluV2Fy
bVVzZXMgPSBudW1XYXJtVXNlczsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIGlmICghcmVnKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gUmVnKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBzcGlsbChy
ZWcpOworICAgICAgICBpZiAoQXJnOjppc0FueVVzZShyb2xlKSAmJiByb2xlICE9IEFyZzo6U2Ny
YXRjaCkgeworICAgICAgICAgICAgU3RhY2tTbG90KiBzbG90ID0gc3BpbGxTbG90KHRtcCk7Cisg
ICAgICAgICAgICBpZiAoaW5mby5oYXNDb25zdGFudCkgeworICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHR5cGUgPT0gQXJnOjpHUCk7CisgICAgICAgICAgICAgICAgYWRkTW92ZShTaHVm
ZmxlUGFpcihBcmc6OmltbTY0KGluZm8uY29uc3RhbnQpLCBUbXAocmVnKSwgd2lkdGgoc2xvdCkp
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
aW5mby5oYXNTcGlsbCk7CisgICAgICAgICAgICAgICAgYWRkTW92ZShTaHVmZmxlUGFpcihBcmc6
OnN0YWNrKHNsb3QpLCBUbXAocmVnKSwgd2lkdGgoc2xvdCkpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBtX3N0YXRlLnJldmVyc2VNYXBwaW5nW3JlZ10udG1wID0gdG1wOwor
ICAgICAgICBpbmZvLnJlZyA9IHJlZzsKKyAgICAgICAgcmV0dXJuIHJlZzsKKyAgICB9CisKKyAg
ICB2b2lkIHNwaWxsKFJlZyByZWcpCisgICAgeworICAgICAgICBSZWdJbmZvJiByZWdJbmZvID0g
bV9zdGF0ZS5yZXZlcnNlTWFwcGluZ1tyZWddOworICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVn
SW5mby5pc0xvY2tlZCk7CisgICAgICAgIGlmICghcmVnSW5mby50bXApCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIAorICAgICAgICBUbXBJbmZvJiB0bXBJbmZvID0gZ2V0SW5mbyhyZWdJ
bmZvLnRtcCk7CisKKyAgICAgICAgaWYgKCF0bXBJbmZvLmhhc1NwaWxsKSB7CisgICAgICAgICAg
ICBTdGFja1Nsb3QqIHNsb3QgPSBzcGlsbFNsb3QocmVnSW5mby50bXApOworICAgICAgICAgICAg
YWRkTW92ZShTaHVmZmxlUGFpcihUbXAocmVnKSwgQXJnOjpzdGFjayhzbG90KSwgd2lkdGgoc2xv
dCkpKTsKKyAgICAgICAgICAgIHRtcEluZm8uaGFzU3BpbGwgPSB0cnVlOworICAgICAgICB9Cisg
ICAgICAgIHJlZ0luZm8udG1wID0gVG1wKCk7CisgICAgICAgIHRtcEluZm8ucmVnID0gUmVnKCk7
CisgICAgfQorCisgICAgdm9pZCBraWxsKFRtcCB0bXApCisgICAgeworICAgICAgICBUbXBJbmZv
JiB0bXBJbmZvID0gZ2V0SW5mbyh0bXApOworICAgICAgICB0bXBJbmZvLmhhc0NvbnN0YW50ID0g
ZmFsc2U7CisgICAgICAgIHRtcEluZm8uaGFzU3BpbGwgPSBmYWxzZTsKKyAgICAgICAgCisgICAg
ICAgIGlmICghdG1wSW5mby5yZWcpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAg
ICAgICBSZWdJbmZvJiByZWdJbmZvID0gbV9zdGF0ZS5yZXZlcnNlTWFwcGluZ1t0bXBJbmZvLnJl
Z107CisgICAgICAgIHRtcEluZm8ucmVnID0gUmVnKCk7CisgICAgICAgIHJlZ0luZm8udG1wID0g
VG1wKCk7CisgICAgfQorCisgICAgUmVnIGxvY2soUmVnIHJlZykKKyAgICB7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHJlZyk7CisgICAgICAgIGJvb2wmIGlzTG9ja2VkID0gbV9zdGF0ZS5yZXZl
cnNlTWFwcGluZ1tyZWddLmlzTG9ja2VkOworICAgICAgICBpZiAoIWlzTG9ja2VkKSB7CisgICAg
ICAgICAgICBpc0xvY2tlZCA9IHRydWU7CisgICAgICAgICAgICBtX2xvY2tlZC5hcHBlbmQocmVn
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVnOworICAgIH0KKworICAgIHZvaWQgdW5s
b2NrKFJlZyByZWcpCisgICAgeworICAgICAgICBtX3N0YXRlLnJldmVyc2VNYXBwaW5nW3JlZ10u
aXNMb2NrZWQgPSBmYWxzZTsKKyAgICB9CisKKyAgICB2b2lkIHVubG9ja0FsbCgpCisgICAgewor
ICAgICAgICBmb3IgKFJlZyByZWcgOiBtX2xvY2tlZCkKKyAgICAgICAgICAgIHVubG9jayhyZWcp
OworICAgICAgICBtX2xvY2tlZC5yZXNpemUoMCk7CisgICAgfQorCisgICAgdm9pZCBhZGRNb3Zl
KGNvbnN0IFNodWZmbGVQYWlyJiBwYWlyKQorICAgIHsKKyAgICAgICAgbV9zaHVmZmxlUGFpcnMu
cmVtb3ZlQWxsTWF0Y2hpbmcoCisgICAgICAgICAgICBbJl0gKGNvbnN0IFNodWZmbGVQYWlyJiBv
dGhlclBhaXIpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIHJldHVybiBvdGhlclBhaXIuZHN0
KCkgPT0gcGFpci5kc3QoKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICBmb3IgKFNodWZmbGVQ
YWlyJiBvdGhlclBhaXIgOiBtX3NodWZmbGVQYWlycykgeworICAgICAgICAgICAgaWYgKG90aGVy
UGFpci5kc3QoKSA9PSBwYWlyLnNyYygpKSB7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQob3RoZXJQYWlyLndpZHRoKCkgPT0gcGFpci53aWR0aCgpKTsKKyAgICAgICAgICAgICAgICBt
X3NodWZmbGVQYWlycy5hcHBlbmQoU2h1ZmZsZVBhaXIob3RoZXJQYWlyLnNyYygpLCBwYWlyLmRz
dCgpLCBwYWlyLndpZHRoKCkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgbV9zaHVmZmxlUGFpcnMuYXBwZW5kKHBhaXIpOworICAg
IH0KKworICAgIHZvaWQgZW1pdFNodWZmbGUodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAg
ICBtX2luc2VydGlvblNldC5pbnNlcnQoaW5kZXgsIGNyZWF0ZVNodWZmbGUobV9ibG9jay0+YXQo
bV9pbnN0SW5kZXgpLm9yaWdpbiwgbV9zaHVmZmxlUGFpcnMpKTsKKyAgICAgICAgbV9zaHVmZmxl
UGFpcnMucmVzaXplKDApOworICAgIH0KKworICAgIEFyZzo6V2lkdGggd2lkdGgoU3RhY2tTbG90
KiBzbG90KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFyZzo6d2lkdGhGb3JCeXRlcyhzbG90LT5i
eXRlU2l6ZSgpKTsKKyAgICB9CisKKyAgICAvLyBXZSBtYXkgY2hvb3NlIHRvIGRvIGEgZnVsbHdp
ZHRoIGRlZiBvciB1c2Ugb24gYSBzdWJ3aWR0aCBzcGlsbCBzbG90LiBXaGVuIHRoaXMgaGFwcGVu
cywgd2UKKyAgICAvLyBuZWVkIHRvIGluY3JlYXNlIHRoZSB3aWR0aCBvZiB0aGUgc2xvdC4gTm90
ZSB0aGF0IHdlIHJlbHkgb24gc3BpbGwgc2xvdHMgaGF2aW5nIFpEZWYKKyAgICAvLyBzZW1hbnRp
Y3MuCisgICAgdm9pZCBlbnN1cmVXaWR0aChTdGFja1Nsb3QqIHNsb3QsIEFyZzo6V2lkdGggd2lk
dGgpCisgICAgeworICAgICAgICBzbG90LT5lbnN1cmVTaXplKEFyZzo6Ynl0ZXMod2lkdGgpKTsK
KyAgICB9CisgICAgCisgICAgU3RhY2tTbG90KiBzcGlsbFNsb3QoVG1wIHRtcCkKKyAgICB7Cisg
ICAgICAgIFN0YWNrU2xvdComIHJlc3VsdCA9IG1fc3BpbGxTbG90cy5hZGQodG1wLCBudWxscHRy
KS5pdGVyYXRvci0+dmFsdWU7CisgICAgICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgICAgICBy
ZXN1bHQgPSBtX2NvZGUuYWRkU3RhY2tTbG90KAorICAgICAgICAgICAgICAgIG1fdG1wV2lkdGgu
d2lkdGgodG1wKSA8PSBBcmc6OldpZHRoMzIgPyA0IDogOCwKKyAgICAgICAgICAgICAgICBTdGFj
a1Nsb3RLaW5kOjpBbm9ueW1vdXMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgY2xhc3MgUmVnTWFw
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFJlZ01hcCgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHN3aXRjaCAodHlwZSkgeworICAgICAgICAgICAgY2FzZSBBcmc6OkdQOgorICAgICAgICAgICAg
ICAgIG1fdmVjdG9yLmZpbGwoVCgpLCBNYWNyb0Fzc2VtYmxlcjo6bnVtYmVyT2ZSZWdpc3RlcnMo
KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFyZzo6RlA6Cisg
ICAgICAgICAgICAgICAgbV92ZWN0b3IuZmlsbChUKCksIE1hY3JvQXNzZW1ibGVyOjpudW1iZXJP
ZkZQUmVnaXN0ZXJzKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgVCYgb3BlcmF0b3JbXShSZWcgcmVnKQorICAgICAgICB7Cisg
ICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgQXJnOjpHUDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbV92ZWN0b3JbTWFjcm9Bc3NlbWJsZXI6OnJlZ2lzdGVySW5k
ZXgocmVnLmdwcigpKV07CisgICAgICAgICAgICBjYXNlIEFyZzo6RlA6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIG1fdmVjdG9yW01hY3JvQXNzZW1ibGVyOjpyZWdpc3RlckluZGV4KHJlZy5mcHIo
KSldOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6Cisg
ICAgICAgIFZlY3RvcjxUPiBtX3ZlY3RvcjsKKyAgICB9OworCisgICAgc3RydWN0IFN0YXRlIHsK
KyAgICAgICAgSGFzaE1hcDxUbXAsIFRtcEluZm8+IG1hcHBpbmc7IC8vIElmIHRoZSBvcmlnaW5h
bCBwcm9ncmFtIGFza3MgZm9yIHRoaXMgdG1wLCB3aGVyZSBpcyBpdD8KKyAgICAgICAgUmVnTWFw
PFJlZ0luZm8+IHJldmVyc2VNYXBwaW5nOyAvLyBXaGF0IHRtcCBkb2VzIHRoaXMgcmVnaXN0ZXIg
aG9sZCByaWdodCBub3c/CisgICAgICAgIGJvb2wgdmlzaXRlZEJ5UHJvcGFnYXRpb24geyBmYWxz
ZSB9OworICAgICAgICBib29sIGlzU2V0dGxlZCB7IGZhbHNlIH07CisgICAgfTsKKworICAgIGVu
dW0gRGVhdGhNb2RlIHsKKyAgICAgICAgRWFybHlEZWF0aCwKKyAgICAgICAgTGF0ZURlYXRoCisg
ICAgfTsKKworICAgIHN0cnVjdCBEZWF0aCB7CisgICAgICAgIERlYXRoKCkKKyAgICAgICAgewor
ICAgICAgICB9CisKKyAgICAgICAgRGVhdGgoVG1wIHRtcCwgRGVhdGhNb2RlIGRlYXRoTW9kZSkK
KyAgICAgICAgICAgIDogdG1wKHRtcCkKKyAgICAgICAgICAgICwgZGVhdGhNb2RlKGRlYXRoTW9k
ZSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBUbXAgdG1wOworICAg
ICAgICBEZWF0aE1vZGUgZGVhdGhNb2RlIHsgRWFybHlEZWF0aCB9OworICAgIH07CisgICAgCisg
ICAgQ29kZSYgbV9jb2RlOworICAgIFRtcExpdmVuZXNzPHR5cGU+IG1fbGl2ZW5lc3M7CisgICAg
SW5zdE1hcDxWZWN0b3I8RGVhdGg+PiBtX2RlYXRoczsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2Nr
LCBTdGF0ZT4gbV9hdEhlYWQ7CisgICAgU3RhdGUgbV9zdGF0ZTsKKyAgICBWZWN0b3I8UmVnPiBt
X2xvY2tlZDsKKyAgICBVc2VDb3VudHM8VG1wPiBtX3VzZUNvdW50czsKKyAgICBUbXBXaWR0aCBt
X3RtcFdpZHRoOworICAgIEhhc2hNYXA8VG1wLCBTdGFja1Nsb3QqPiBtX3NwaWxsU2xvdHM7Cisg
ICAgQmFzaWNCbG9jayogbV9ibG9jayB7IG51bGxwdHIgfTsKKyAgICB1bnNpZ25lZCBtX2luc3RJ
bmRleCB7IDAgfTsKKyAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+IG1fc2h1ZmZsZVBhaXJzOworICAg
IEluc2VydGlvblNldCBtX2luc2VydGlvblNldDsKKyAgICBib29sIG1fY2hhbmdlZCB7IGZhbHNl
IH07Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9pZCBzY2F2ZW5nZVJlZ2lz
dGVycyhDb2RlJiBjb2RlKQoreworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAic2Nh
dmVuZ2VSZWdpc3RlcnMiKTsKKworICAgIGJyZWFrQ3JpdGljYWxFZGdlcyhjb2RlKTsKKworICAg
IHsKKyAgICAgICAgU2NhdmVuZ2VSZWdpc3RlcnM8QXJnOjpGUD4gc2NhdmVuZ2VSZWdpc3RlcnMo
Y29kZSk7CisgICAgICAgIHNjYXZlbmdlUmVnaXN0ZXJzLnJ1bigpOworICAgIH0KKyAgICB7Cisg
ICAgICAgIFNjYXZlbmdlUmVnaXN0ZXJzPEFyZzo6R1A+IHNjYXZlbmdlUmVnaXN0ZXJzKGNvZGUp
OworICAgICAgICBzY2F2ZW5nZVJlZ2lzdGVycy5ydW4oKTsKKyAgICB9Cit9CisKK30gfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU2NhdmVuZ2VSZWdpc3RlcnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNjYXZlbmdlUmVn
aXN0ZXJzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clNjYXZlbmdlUmVnaXN0ZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQWlyU2Nh
dmVuZ2VSZWdpc3RlcnNfaAorI2RlZmluZSBBaXJTY2F2ZW5nZVJlZ2lzdGVyc19oCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNl
IEFpciB7CisKK2NsYXNzIENvZGU7CisKKy8vIFRoaXMgYWxsb2NhdGVzIHRlbXBvcmFyaWVzIHRv
IHJlZ2lzdGVycyBvciBzdGFjayBsb2NhdGlvbnMgYmFzZWQgb24gZm9yd2FyZCBmbG93LiBJdCB3
aWxsIGhhcHBpbHkKKy8vIGNoYW5nZSB0aGUgbG9jYXRpb24gb2YgYSB0ZW1wb3JhcnkgaW4gY2Fz
ZSB0aGUgcmVnaXN0ZXIgaXQgaGFkIHBpY2tlZCBiZWNvbWVzIHVuYXZhaWxhYmxlIG9yIGluCisv
LyBjYXNlIHdlIG5lZWQgdGhlIHZhbHVlIGFuZCBpdCdzIGN1cnJlbnRseSBvbiB0aGUgc3RhY2su
IEl0IGFsc28gcGVyZm9ybXMgbWF0ZXJpYWxpemF0aW9uIG9mCisvLyBjb25zdGFudHM6IGlmIGEg
dGVtcG9yYXJ5J3MgdmFsdWUgaXMgYWx3YXlzIGEgY29uc3RhbnQgdGhlbiBpbnN0ZWFkIG9mIHNw
aWxsaW5nIHdlIHdpbGwgc2ltcGx5CisvLyByZW1hdGVyaWFsaXplLgorLy8KKy8vIFRoaXMgcGhh
c2UgaXMgbWVhbnQgdG8gcnVuIGFmdGVyIHRoZSBwcmltYXJ5IHJlZ2lzdGVyIGFsbG9jYXRvci4g
VGhlIHByaW1hcnkgcmVnaXN0ZXIgYWxsb2NhdG9yCisvLyBpcyBiZXN0IG9mZiBoYW5kbGluZyBz
cGlsbHMgYnkgc2ltcGx5IGxlYXZpbmcgc3BpbGxlZCBUbXBzIGFsb25lLiBUaGlzIHBoYXNlIHdp
bGwgZW1pdCBwcm9wZXIKKy8vIHNwaWxsIGNvZGUsIGFuZCBpdCB3aWxsIGRvIGl0IG1vcmUgZWZm
aWNpZW50bHkgdGhhbiBjbGFzc2ljYWwgc3BpbGxpbmcgYWxnb3JpdGhtcy4KK3ZvaWQgc2NhdmVu
Z2VSZWdpc3RlcnMoQ29kZSYpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyU2NhdmVuZ2VSZWdpc3Rl
cnNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0
aGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJT
cGlsbEV2ZXJ5dGhpbmcuY3BwCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDcgKzI5LDYgQEAKICNpZiBFTkFCTEUoQjNfSklUKQogCiAjaW5jbHVkZSAiQWlyQ29kZS5oIgot
I2luY2x1ZGUgIkFpckZpeFNwaWxsU2xvdFpEZWYuaCIKICNpbmNsdWRlICJBaXJJbnNlcnRpb25T
ZXQuaCIKICNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkFpckxpdmVuZXNz
LmgiCkBAIC04NCw3ICs4Myw2IEBAIHZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUmIGNvZGUpCiAK
ICAgICAvLyBBbGxvY2F0ZSBhIHN0YWNrIHNsb3QgZm9yIGVhY2ggdG1wLgogICAgIFZlY3RvcjxT
dGFja1Nsb3QqPiBhbGxTdGFja1Nsb3RzW0FyZzo6bnVtVHlwZXNdOwotICAgIHVuc2lnbmVkIG5l
d1N0YWNrU2xvdFRocmVzaG9sZCA9IGNvZGUuc3RhY2tTbG90cygpLnNpemUoKTsKICAgICBmb3Ig
KHVuc2lnbmVkIHR5cGVJbmRleCA9IDA7IHR5cGVJbmRleCA8IEFyZzo6bnVtVHlwZXM7ICsrdHlw
ZUluZGV4KSB7CiAgICAgICAgIFZlY3RvcjxTdGFja1Nsb3QqPiYgc3RhY2tTbG90cyA9IGFsbFN0
YWNrU2xvdHNbdHlwZUluZGV4XTsKICAgICAgICAgQXJnOjpUeXBlIHR5cGUgPSBzdGF0aWNfY2Fz
dDxBcmc6OlR5cGU+KHR5cGVJbmRleCk7CkBAIC0xMzAsNyArMTI4LDYgQEAgdm9pZCBzcGlsbEV2
ZXJ5dGhpbmcoQ29kZSYgY29kZSkKICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChyb2xlKSB7
CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpVc2U6CiAgICAgICAgICAgICAgICAgICAg
IGNhc2UgQXJnOjpDb2xkVXNlOgotICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6RWFybHlE
ZWY6CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiByZWdzSW5Qcmlvcml0
eU9yZGVyKHR5cGUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZXRCZWZv
cmUuZ2V0KHJlZykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QmVmb3Jl
LnNldChyZWcpOwpAQCAtMTU0LDYgKzE1MSw3IEBAIHZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUm
IGNvZGUpCiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpMYXRlVXNlOgogICAgICAgICAg
ICAgICAgICAgICBjYXNlIEFyZzo6TGF0ZUNvbGRVc2U6CiAgICAgICAgICAgICAgICAgICAgIGNh
c2UgQXJnOjpTY3JhdGNoOgorICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6RWFybHlEZWY6
CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiByZWdzSW5Qcmlvcml0eU9y
ZGVyKHR5cGUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZXRCZWZvcmUu
Z2V0KHJlZykgJiYgIXNldEFmdGVyLmdldChyZWcpKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNldEFmdGVyLnNldChyZWcpOwpAQCAtMTgyLDEyICsxODAsNiBAQCB2b2lkIHNw
aWxsRXZlcnl0aGluZyhDb2RlJiBjb2RlKQogICAgICAgICB9CiAgICAgICAgIGluc2VydGlvblNl
dC5leGVjdXRlKGJsb2NrKTsKICAgICB9Ci0KLSAgICBmaXhTcGlsbFNsb3RaRGVmKAotICAgICAg
ICBjb2RlLAotICAgICAgICBbJl0gKFN0YWNrU2xvdCogc3RhY2tTbG90KSAtPiBib29sIHsKLSAg
ICAgICAgICAgIHJldHVybiBzdGFja1Nsb3QtPmluZGV4KCkgPj0gbmV3U3RhY2tTbG90VGhyZXNo
b2xkOwotICAgICAgICB9KTsKIH0KIAogfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdC5oCShyZXZp
c2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xv
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCwxMiBAQCBwdWJsaWM6CiAgICAgYm9vbCBp
c0xvY2tlZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCA9PSBTdGFja1Nsb3RLaW5kOjpMb2NrZWQ7
IH0KICAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KIAorICAg
IHZvaWQgZW5zdXJlU2l6ZSh1bnNpZ25lZCByZXF1ZXN0ZWRTaXplKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKCFtX29mZnNldEZyb21GUCk7CisgICAgICAgIG1fYnl0ZVNpemUgPSBzdGQ6Om1heCht
X2J5dGVTaXplLCByZXF1ZXN0ZWRTaXplKTsKKyAgICB9CisKICAgICB1bnNpZ25lZCBhbGlnbm1l
bnQoKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKGJ5dGVTaXplKCkgPD0gMSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAx
OTUxNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZhbGlkYXRlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODIsNiArODIsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
ICAgICBWQUxJREFURShpc1Rlcm1pbmFsKGluc3Qub3Bjb2RlKSwgKCJBdCAiLCBpbnN0LCAiIGlu
ICIsICpibG9jaykpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAg
VkFMSURBVEUoIWlzVGVybWluYWwoaW5zdC5vcGNvZGUpLCAoIkF0ICIsIGluc3QsICIgaW4gIiwg
KmJsb2NrKSk7CisKKyAgICAgICAgICAgICAgICAvLyBmb3JFYWNoQXJnIG11c3QgcmV0dXJuIEFy
ZyYncyB0aGF0IHBvaW50IGludG8gdGhlIGFyZ3MgYXJyYXkuCisgICAgICAgICAgICAgICAgaW5z
dC5mb3JFYWNoQXJnKAorICAgICAgICAgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJv
bGUsIEFyZzo6VHlwZSwgQXJnOjpXaWR0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgVkFM
SURBVEUoJmFyZyA+PSAmaW5zdC5hcmdzWzBdLCAoIkF0ICIsIGFyZywgIiBpbiAiLCBpbnN0LCAi
IGluICIsICpibG9jaykpOworICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoJmFyZyA8
PSAmaW5zdC5hcmdzLmxhc3QoKSwgKCJBdCAiLCBhcmcsICIgaW4gIiwgaW5zdCwgIiBpbiAiLCAq
YmxvY2spKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JCbG9ja3Mo
KSkKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWxpZEJsb2Nrcy5jb250YWlucyhzdWNjZXNz
b3IpLCAoIkluICIsICpibG9jaykpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bW1vbi5oCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKIC8vIFdlIGFyZSBpbiB0aGUgbWlkZGxlIG9mIGFuIGV4cGVyaW1l
bnRhbCB0cmFuc2l0aW9uIGZyb20gTExWTSB0byBCMyBhcyB0aGUgYmFja2VuZCBmb3IgdGhlIEZU
TC4gV2UgZG9uJ3QKIC8vIHlldCBrbm93IGhvdyBpdCB3aWxsIHR1cm4gb3V0LiBGb3Igbm93LCB0
aGlzIGZsYWcgd2lsbCBjb250cm9sIHdoZXRoZXIgRlRMIHVzZXMgQjMuIFJlbWVtYmVyIHRvIHNl
dCB0aGlzCiAvLyB0byAwIGJlZm9yZSBjb21taXR0aW5nIQotI2RlZmluZSBGVExfVVNFU19CMyAw
CisjZGVmaW5lIEZUTF9VU0VTX0IzIDEKIAogc3RydWN0IE5vZGU7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAx
OTUxNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTg1OCw4ICsxODU4LDggQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAgICAgbV9vdXQubm90WmVybzMyKHJlc3VsdCksIHVzdWFsbHkoY29udGludWF0aW9u
KSwgcmFyZWx5KHNsb3dDYXNlKSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
TEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0
aW9uKTsKLSAgICAgICAgICAgICAgICBMVmFsdWUgY29uZCA9IG1fb3V0LmJpdE9yKG1fb3V0Lmxl
c3NUaGFuKGxlZnQsIG1fb3V0LmludDMyWmVybyksIG1fb3V0Lmxlc3NUaGFuKHJpZ2h0LCBtX291
dC5pbnQzMlplcm8pKTsKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGUoTmVnYXRpdmVaZXJvLCBu
b1ZhbHVlKCksIDAsIGNvbmQpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShOZWdhdGl2ZVpl
cm8sIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQubGVzc1RoYW4obGVmdCwgbV9vdXQuaW50MzJa
ZXJvKSk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKE5lZ2F0aXZlWmVybywgbm9WYWx1ZSgp
LCBudWxscHRyLCBtX291dC5sZXNzVGhhbihyaWdodCwgbV9vdXQuaW50MzJaZXJvKSk7CiAgICAg
ICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAgICAgICAgIG1f
b3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwogICAgICAgICAgICAgfQpAQCAt
MTg5MCw4ICsxODkwLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgbV9vdXQubm90
WmVybzY0KHJlc3VsdCksIHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFyZWx5KHNsb3dDYXNlKSk7
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQg
PSBtX291dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0aW9uKTsKLSAgICAgICAgICAgICAg
ICBMVmFsdWUgY29uZCA9IG1fb3V0LmJpdE9yKG1fb3V0Lmxlc3NUaGFuKGxlZnQsIG1fb3V0Lmlu
dDY0WmVybyksIG1fb3V0Lmxlc3NUaGFuKHJpZ2h0LCBtX291dC5pbnQ2NFplcm8pKTsKLSAgICAg
ICAgICAgICAgICBzcGVjdWxhdGUoTmVnYXRpdmVaZXJvLCBub1ZhbHVlKCksIDAsIGNvbmQpOwor
ICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShOZWdhdGl2ZVplcm8sIG5vVmFsdWUoKSwgbnVsbHB0
ciwgbV9vdXQubGVzc1RoYW4obGVmdCwgbV9vdXQuaW50NjRaZXJvKSk7CisgICAgICAgICAgICAg
ICAgc3BlY3VsYXRlKE5lZ2F0aXZlWmVybywgbm9WYWx1ZSgpLCBudWxscHRyLCBtX291dC5sZXNz
VGhhbihyaWdodCwgbV9vdXQuaW50NjRaZXJvKSk7CiAgICAgICAgICAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOwogICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVh
dGlvbiwgbGFzdE5leHQpOwogICAgICAgICAgICAgfQpAQCAtMTk1Nyw4ICsxOTU3LDggQEAgcHJp
dmF0ZToKIAogICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBw
ZW5kVG8odW5zYWZlRGVub21pbmF0b3IsIGNvbnRpbnVhdGlvbik7CiAgICAgICAgICAgICAgICAg
TFZhbHVlIG5lZzJUb1RoZTMxID0gbV9vdXQuY29uc3RJbnQzMigtMjE0NzQ4MzY0Ny0xKTsKLSAg
ICAgICAgICAgICAgICBMVmFsdWUgY29uZCA9IG1fb3V0LmJpdE9yKG1fb3V0LmlzWmVybzMyKGRl
bm9taW5hdG9yKSwgbV9vdXQuZXF1YWwobnVtZXJhdG9yLCBuZWcyVG9UaGUzMSkpOwotICAgICAg
ICAgICAgICAgIHNwZWN1bGF0ZShPdmVyZmxvdywgbm9WYWx1ZSgpLCAwLCBjb25kKTsKKyAgICAg
ICAgICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQu
aXNaZXJvMzIoZGVub21pbmF0b3IpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoT3ZlcmZs
b3csIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQuZXF1YWwobnVtZXJhdG9yLCBuZWcyVG9UaGUz
MSkpOwogICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAogICAgICAg
ICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwpAQCAtMjAx
Myw4ICsyMDEzLDggQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxh
c3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8odW5zYWZlRGVub21pbmF0b3IsIGNvbnRpbnVhdGlvbik7
CiAgICAgICAgICAgICAgICAgTFZhbHVlIG5lZzJUb1RoZTMxID0gbV9vdXQuY29uc3RJbnQzMigt
MjE0NzQ4MzY0Ny0xKTsKLSAgICAgICAgICAgICAgICBMVmFsdWUgY29uZCA9IG1fb3V0LmJpdE9y
KG1fb3V0LmlzWmVybzMyKGRlbm9taW5hdG9yKSwgbV9vdXQuZXF1YWwobnVtZXJhdG9yLCBuZWcy
VG9UaGUzMSkpOwotICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShPdmVyZmxvdywgbm9WYWx1ZSgp
LCAwLCBjb25kKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIG5vVmFsdWUo
KSwgbnVsbHB0ciwgbV9vdXQuaXNaZXJvMzIoZGVub21pbmF0b3IpKTsKKyAgICAgICAgICAgICAg
ICBzcGVjdWxhdGUoT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQuZXF1YWwobnVt
ZXJhdG9yLCBuZWcyVG9UaGUzMSkpOwogICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGlu
dWF0aW9uKTsKIAogICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwg
bGFzdE5leHQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAko
cmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNl
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MSw2ICs5MSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIEFT
U0VSVCghIXJlZyk7CiAgICAgICAgIHJldHVybiBtX3ZlY3Rvci5nZXQocmVnLmluZGV4KCkpOwog
ICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhYmxlPgorICAgIHZvaWQgc2V0QWxs
KGNvbnN0IEl0ZXJhYmxlJiBpdGVyYWJsZSkKKyAgICB7CisgICAgICAgIGZvciAoUmVnIHJlZyA6
IGl0ZXJhYmxlKQorICAgICAgICAgICAgc2V0KHJlZyk7CisgICAgfQogICAgIAogICAgIHZvaWQg
bWVyZ2UoY29uc3QgUmVnaXN0ZXJTZXQmIG90aGVyKSB7IG1fdmVjdG9yLm1lcmdlKG90aGVyLm1f
dmVjdG9yKTsgfQogICAgIHZvaWQgZmlsdGVyKGNvbnN0IFJlZ2lzdGVyU2V0JiBvdGhlcikgeyBt
X3ZlY3Rvci5maWx0ZXIob3RoZXIubV92ZWN0b3IpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0Myw2ICszNDMs
OCBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2KGJvb2wsIGxvZ0Iz
UGhhc2VUaW1lcywgZmFsc2UsIG51bGxwdHIpIFwKICAgICB2KGRvdWJsZSwgcmFyZUJsb2NrUGVu
YWx0eSwgMC4wMDEsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGFpclNwaWxsc0V2ZXJ5dGhpbmcs
IGZhbHNlLCBudWxscHRyKSBcCisgICAgdihib29sLCBhaXJVc2VzUkNSUywgZmFsc2UsIG51bGxw
dHIpIFwKKyAgICB2KGJvb2wsIGxvZ0FpclJlZ2lzdGVyUHJlc3N1cmUsIGZhbHNlLCBudWxscHRy
KSBcCiAgICAgXAogICAgIHYoYm9vbCwgdXNlRG9sbGFyVk0sIGZhbHNlLCAiaW5zdGFsbHMgdGhl
ICR2bSBkZWJ1Z2dpbmcgdG9vbCBpbiBnbG9iYWwgb2JqZWN0cyIpIFwKICAgICB2KG9wdGlvblN0
cmluZywgZnVuY3Rpb25PdmVycmlkZXMsIG51bGxwdHIsICJmaWxlIHdpdGggZGVidWdnaW5nIG92
ZXJyaWRlcyBmb3IgZnVuY3Rpb24gYm9kaWVzIikgXApJbmRleDogU291cmNlL1dURi93dGYvSW5k
ZXhTcGFyc2VTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9JbmRleFNwYXJzZVNl
dC5oCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvV1RGL3d0Zi9JbmRleFNwYXJzZVNldC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Nyw4ICs0Nyw4IEBAIGNsYXNzIEluZGV4U3BhcnNlU2V0IHsK
IHB1YmxpYzoKICAgICBleHBsaWNpdCBJbmRleFNwYXJzZVNldCh1bnNpZ25lZCBtYXhWYWx1ZSk7
CiAKLSAgICB2b2lkIGFkZCh1bnNpZ25lZCk7Ci0gICAgdm9pZCByZW1vdmUodW5zaWduZWQpOwor
ICAgIGJvb2wgYWRkKHVuc2lnbmVkKTsKKyAgICBib29sIHJlbW92ZSh1bnNpZ25lZCk7CiAgICAg
dm9pZCBjbGVhcigpOwogCiAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0OwpAQCAtNzEsMjkgKzcx
LDMzIEBAIGlubGluZSBJbmRleFNwYXJzZVNldDxPdmVyZmxvd0hhbmRsZXI+OjoKIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgotaW5saW5lIHZvaWQgSW5kZXhTcGFyc2VT
ZXQ8T3ZlcmZsb3dIYW5kbGVyPjo6YWRkKHVuc2lnbmVkIHZhbHVlKQoraW5saW5lIGJvb2wgSW5k
ZXhTcGFyc2VTZXQ8T3ZlcmZsb3dIYW5kbGVyPjo6YWRkKHVuc2lnbmVkIHZhbHVlKQogewogICAg
IGlmIChjb250YWlucyh2YWx1ZSkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgdW5zaWduZWQgbmV3UG9zaXRpb24gPSBtX3ZhbHVlcy5zaXplKCk7CiAgICAg
bV92YWx1ZXMuYXBwZW5kKHZhbHVlKTsKICAgICBtX21hcFt2YWx1ZV0gPSBuZXdQb3NpdGlvbjsK
KyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVy
PgotaW5saW5lIHZvaWQgSW5kZXhTcGFyc2VTZXQ8T3ZlcmZsb3dIYW5kbGVyPjo6cmVtb3ZlKHVu
c2lnbmVkIHZhbHVlKQoraW5saW5lIGJvb2wgSW5kZXhTcGFyc2VTZXQ8T3ZlcmZsb3dIYW5kbGVy
Pjo6cmVtb3ZlKHVuc2lnbmVkIHZhbHVlKQogewogICAgIHVuc2lnbmVkIHBvc2l0aW9uID0gbV9t
YXBbdmFsdWVdOwogICAgIGlmIChwb3NpdGlvbiA+PSBtX3ZhbHVlcy5zaXplKCkpCi0gICAgICAg
IHJldHVybjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKG1fdmFsdWVzW3Bvc2l0
aW9uXSA9PSB2YWx1ZSkgewogICAgICAgICB1bnNpZ25lZCBsYXN0VmFsdWUgPSBtX3ZhbHVlcy5s
YXN0KCk7CiAgICAgICAgIG1fdmFsdWVzW3Bvc2l0aW9uXSA9IGxhc3RWYWx1ZTsKICAgICAgICAg
bV9tYXBbbGFzdFZhbHVlXSA9IHBvc2l0aW9uOwogICAgICAgICBtX3ZhbHVlcy5yZW1vdmVMYXN0
KCk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgpJbmRleDogU291cmNlL1dURi93
dGYvU3RyaW5nUHJpbnRTdHJlYW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TdHJp
bmdQcmludFN0cmVhbS5oCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvV1RGL3d0Zi9TdHJp
bmdQcmludFN0cmVhbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOCw2ICszOCw4IEBAIHB1YmxpYzoKICAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+U3RyaW5nUHJpbnRTdHJlYW0oKTsKICAgICAK
ICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB2b2lkIHZwcmludGYoY29uc3QgY2hhciog
Zm9ybWF0LCB2YV9saXN0KSBvdmVycmlkZSBXVEZfQVRUUklCVVRFX1BSSU5URigyLCAwKTsKKwor
ICAgIHNpemVfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX25leHQ7IH0KICAgICAKICAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgQ1N0cmluZyB0b0NTdHJpbmcoKTsKICAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgU3RyaW5nIHRvU3RyaW5nKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269187</attachid>
            <date>2016-01-16 23:55:16 -0800</date>
            <delta_ts>2016-01-17 11:35:58 -0800</delta_ts>
            <desc>sort of getting it to work</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>132329</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTUxNzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzc5LDcgKzM3OSw3IEBACiAJCTBGNDkzQUZBMTZEMENB
RDMwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ5M0FGODE2RDBDQUQxMDA4NDUwOEIgLyogU291cmNl
UHJvdmlkZXIuY3BwICovOyB9OwogCQkwRjRCOTREQzE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRB
cnJheUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNEI5NERCMTdCOUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNEM5MTY2MUMy
OUY0RjIwMDQzNDFBNiAvKiBCM09yaWdpbkR1bXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEM5MTY1MUMyOUY0RjIwMDQzNDFBNiAvKiBCM09yaWdp
bkR1bXAuaCAqLzsgfTsKLQkJMEY0QzkxNjgxQzJCM0Q2ODAwNDM0MUE2IC8qIEFpckZpeFNwaWxs
U2xvdFpEZWYuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNEM5MTY3MUMyQjNENjgwMDQzNDFBNiAvKiBBaXJGaXhTcGlsbFNsb3RaRGVmLmggKi87IH07
CisJCTBGNERFMUNCMUM0QjYwQjgwMDRENkMxMSAvKiBBaXJMaXZlbmVzcy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRERTFDQTFDNEI2MEI4MDA0
RDZDMTEgLyogQWlyTGl2ZW5lc3MuY3BwICovOyB9OwogCQkwRjRGMjlERjE4QjZBRDFDMDA1N0JD
MTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RjI5REQxOEI2QUQxQzAw
NTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcCAqLzsg
fTsKIAkJMEY0RjI5RTAxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50
RXN0aW1hdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjRGMjlERTE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291
bnRFc3RpbWF0aW9uUGhhc2UuaCAqLzsgfTsKIAkJMEY1MEFGM0MxOTNFOEIzOTAwNjc0RUU4IC8q
IERGR1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY1MEFGM0IxOTNFOEIzOTAwNjc0RUU4IC8qIERGR1N0cnVjdHVy
ZUNsb2JiZXJTdGF0ZS5oICovOyB9OwpAQCAtNzI0LDYgKzcyNCwxNCBAQAogCQkwRkUyMjhFRTE0
MzZBQjJDMDAxOTZDNDggLyogT3B0aW9ucy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUyMjhFQTE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5j
cHAgKi87IH07CiAJCTBGRTI1NEY2MUFCREREMjIwMEE3QzZEMiAvKiBERkdWYXJhcmdzRm9yd2Fy
ZGluZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRTI1NEY0MUFCREREMjIwMEE3QzZEMiAvKiBERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNl
LmNwcCAqLzsgfTsKIAkJMEZFMjU0RjcxQUJEREQyMjAwQTdDNkQyIC8qIERGR1ZhcmFyZ3NGb3J3
YXJkaW5nUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRTI1NEY1MUFCREREMjIwMEE3QzZEMiAvKiBERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNl
LmggKi87IH07CisJCTBGRTM0QzExMUM0QjEwOTYwMDAzQTUxMiAvKiBBaXJCbG9ja0luc2VydGlv
blNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkUzNEMwQjFDNEIxMDk2MDAwM0E1MTIgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwICovOyB9
OworCQkwRkUzNEMxMjFDNEIxMDk2MDAwM0E1MTIgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTM0QzBDMUM0
QjEwOTYwMDAzQTUxMiAvKiBBaXJCbG9ja0luc2VydGlvblNldC5oICovOyB9OworCQkwRkUzNEMx
MzFDNEIxMDk2MDAwM0E1MTIgLyogQWlyQnJlYWtDcml0aWNhbEVkZ2VzLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTM0QzBEMUM0QjEwOTYwMDAz
QTUxMiAvKiBBaXJCcmVha0NyaXRpY2FsRWRnZXMuY3BwICovOyB9OworCQkwRkUzNEMxNDFDNEIx
MDk2MDAwM0E1MTIgLyogQWlyQnJlYWtDcml0aWNhbEVkZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUzNEMwRTFDNEIxMDk2MDAwM0E1MTIgLyog
QWlyQnJlYWtDcml0aWNhbEVkZ2VzLmggKi87IH07CisJCTBGRTM0QzE1MUM0QjEwOTYwMDAzQTUx
MiAvKiBBaXJTY2F2ZW5nZVJlZ2lzdGVycy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUzNEMwRjFDNEIxMDk2MDAwM0E1MTIgLyogQWlyU2NhdmVu
Z2VSZWdpc3RlcnMuY3BwICovOyB9OworCQkwRkUzNEMxNjFDNEIxMDk2MDAwM0E1MTIgLyogQWly
U2NhdmVuZ2VSZWdpc3RlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRTM0QzEwMUM0QjEwOTYwMDAzQTUxMiAvKiBBaXJTY2F2ZW5nZVJlZ2lzdGVy
cy5oICovOyB9OworCQkwRkUzNEMxOTFDNEIzOUFFMDAwM0E1MTIgLyogQWlyTG9nUmVnaXN0ZXJQ
cmVzc3VyZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkUzNEMxNzFDNEIzOUFFMDAwM0E1MTIgLyogQWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5jcHAg
Ki87IH07CisJCTBGRTM0QzFBMUM0QjM5QUUwMDAzQTUxMiAvKiBBaXJMb2dSZWdpc3RlclByZXNz
dXJlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUz
NEMxODFDNEIzOUFFMDAwM0E1MTIgLyogQWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5oICovOyB9Owog
CQkwRkU3MjExRDE5M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNpdGlvbi5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU3MjExQjE5M0I5QzU5MDAz
MUY2RUQgLyogREZHVHJhbnNpdGlvbi5jcHAgKi87IH07CiAJCTBGRTcyMTFFMTkzQjlDNTkwMDMx
RjZFRCAvKiBERkdUcmFuc2l0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkU3MjExQzE5M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNpdGlvbi5o
ICovOyB9OwogCQkwRkU4MzQxNzFBNkVGOTdCMDBEMDQ4NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1
YlJvdXRpbmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFODM0MTUxQTZFRjk3QjAwRDA0ODQ3IC8qIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5l
LmNwcCAqLzsgfTsKQEAgLTI1NDIsNyArMjU1MCw3IEBACiAJCTBGNDkzQUY4MTZEMENBRDEwMDg0
NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTb3VyY2VQcm92aWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGNEI5NERCMTdCOUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlZEFycmF5SW5saW5lcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjRDOTE2NTFDMjlGNEYyMDA0MzQxQTYgLyogQjNPcmlnaW5E
dW1wLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzT3JpZ2luRHVtcC5oOyBw
YXRoID0gYjMvQjNPcmlnaW5EdW1wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBG
NEM5MTY3MUMyQjNENjgwMDQzNDFBNiAvKiBBaXJGaXhTcGlsbFNsb3RaRGVmLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckZpeFNwaWxsU2xvdFpEZWYuaDsgcGF0aCA9IGIz
L2Fpci9BaXJGaXhTcGlsbFNsb3RaRGVmLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGNERFMUNBMUM0QjYwQjgwMDRENkMxMSAvKiBBaXJMaXZlbmVzcy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJMaXZlbmVzcy5jcHA7IHBhdGggPSBiMy9haXIv
QWlyTGl2ZW5lc3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRGMjlERDE4
QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RhdGljRXhlY3V0
aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR1N0YXRpY0V4ZWN1dGlv
bkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY0RjI5REUxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1h
dGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1N0YXRpY0V4
ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHU3RhdGljRXhlY3V0
aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY1MEFGM0IxOTNFOEIzOTAwNjc0RUU4IC8qIERGR1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUu
aDsgcGF0aCA9IGRmZy9ERkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTI5MDAsNiArMjkwOCwxNCBAQAogCQkwRkUyMjhFQjE0MzZBQjIzMDAx
OTZDNDggLyogT3B0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPcHRp
b25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTI1NEY0MUFCREREMjIwMEE3
QzZEMiAvKiBERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwOyBwYXRoID0g
ZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkUyNTRGNTFBQkRERDIyMDBBN0M2RDIgLyogREZHVmFyYXJnc0ZvcndhcmRpbmdQ
aGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYXJhcmdzRm9yd2Fy
ZGluZ1BoYXNlLmg7IHBhdGggPSBkZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkUzNEMwQjFDNEIxMDk2MDAwM0E1MTIgLyogQWly
QmxvY2tJbnNlcnRpb25TZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwOyBwYXRoID0gYjMvYWlyL0FpckJsb2NrSW5zZXJ0
aW9uU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFMzRDMEMxQzRCMTA5
NjAwMDNBNTEyIC8qIEFpckJsb2NrSW5zZXJ0aW9uU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEFpckJsb2NrSW5zZXJ0aW9uU2V0Lmg7IHBhdGggPSBiMy9haXIvQWlyQmxv
Y2tJbnNlcnRpb25TZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFMzRDMEQx
QzRCMTA5NjAwMDNBNTEyIC8qIEFpckJyZWFrQ3JpdGljYWxFZGdlcy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJCcmVha0NyaXRpY2FsRWRnZXMuY3BwOyBwYXRo
ID0gYjMvYWlyL0FpckJyZWFrQ3JpdGljYWxFZGdlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRTM0QzBFMUM0QjEwOTYwMDAzQTUxMiAvKiBBaXJCcmVha0NyaXRpY2FsRWRn
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyQnJlYWtDcml0aWNhbEVk
Z2VzLmg7IHBhdGggPSBiMy9haXIvQWlyQnJlYWtDcml0aWNhbEVkZ2VzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRTM0QzBGMUM0QjEwOTYwMDAzQTUxMiAvKiBBaXJTY2F2ZW5n
ZVJlZ2lzdGVycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJT
Y2F2ZW5nZVJlZ2lzdGVycy5jcHA7IHBhdGggPSBiMy9haXIvQWlyU2NhdmVuZ2VSZWdpc3RlcnMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkUzNEMxMDFDNEIxMDk2MDAwM0E1
MTIgLyogQWlyU2NhdmVuZ2VSZWdpc3RlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQWlyU2NhdmVuZ2VSZWdpc3RlcnMuaDsgcGF0aCA9IGIzL2Fpci9BaXJTY2F2ZW5nZVJl
Z2lzdGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkUzNEMxNzFDNEIzOUFF
MDAwM0E1MTIgLyogQWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJMb2dSZWdpc3RlclByZXNzdXJlLmNwcDsgcGF0aCA9IGIz
L2Fpci9BaXJMb2dSZWdpc3RlclByZXNzdXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFMzRDMTgxQzRCMzlBRTAwMDNBNTEyIC8qIEFpckxvZ1JlZ2lzdGVyUHJlc3N1cmUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyTG9nUmVnaXN0ZXJQcmVzc3Vy
ZS5oOyBwYXRoID0gYjMvYWlyL0FpckxvZ1JlZ2lzdGVyUHJlc3N1cmUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZFNzIxMUIxOTNCOUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRp
b24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHVHJhbnNpdGlv
bi5jcHA7IHBhdGggPSBkZmcvREZHVHJhbnNpdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGRTcyMTFDMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1RyYW5zaXRpb24uaDsgcGF0aCA9IGRm
Zy9ERkdUcmFuc2l0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTgzNDE1
MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGlu
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00ODQ2LDcgKzQ4NjIsMTEgQEAK
IAkJCQkwRkVDODU0QjFCREFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmggKi8sCiAJCQkJMEZFQzg1
NEMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suY3BwICovLAogCQkJCTBGRUM4NTRE
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmggKi8sCisJCQkJMEZFMzRDMEIxQzRC
MTA5NjAwMDNBNTEyIC8qIEFpckJsb2NrSW5zZXJ0aW9uU2V0LmNwcCAqLywKKwkJCQkwRkUzNEMw
QzFDNEIxMDk2MDAwM0E1MTIgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuaCAqLywKIAkJCQkwRkIz
ODc4QjFCRkJDNDREMDBFM0FCMUUgLyogQWlyQmxvY2tXb3JrbGlzdC5oICovLAorCQkJCTBGRTM0
QzBEMUM0QjEwOTYwMDAzQTUxMiAvKiBBaXJCcmVha0NyaXRpY2FsRWRnZXMuY3BwICovLAorCQkJ
CTBGRTM0QzBFMUM0QjEwOTYwMDAzQTUxMiAvKiBBaXJCcmVha0NyaXRpY2FsRWRnZXMuaCAqLywK
IAkJCQkwRjYxODMyMDFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNw
cCAqLywKIAkJCQkwRjYxODMyMTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50
aW9uLmggKi8sCiAJCQkJMEZFQzg1NEUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lh
bC5jcHAgKi8sCkBAIC00ODYxLDcgKzQ4ODEsNiBAQAogCQkJCTBGNjE4MzI0MUM0NUJGMDcwMDcy
NDUwQiAvKiBBaXJFbWl0U2h1ZmZsZS5oICovLAogCQkJCTI2MkQ4NUI0MUMwRDY1MEYwMDZBQ0I2
MSAvKiBBaXJGaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMuY3BwICovLAogCQkJCTI2MkQ4NUI1MUMw
RDY1MEYwMDZBQ0I2MSAvKiBBaXJGaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMuaCAqLywKLQkJCQkw
RjRDOTE2NzFDMkIzRDY4MDA0MzQxQTYgLyogQWlyRml4U3BpbGxTbG90WkRlZi5oICovLAogCQkJ
CTBGRUM4NTUyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCAqLywKIAkJ
CQkwRkVDODU1MzFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGUuY3BwICovLAogCQkJCTBG
RUM4NTU0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5oICovLApAQCAtNDg3Niw3ICs0
ODk1LDEwIEBACiAJCQkJMEZFQzg1NUMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3RJbmxpbmVz
LmggKi8sCiAJCQkJMjY3MThCQTIxQkU5OUY3ODAwNTIwMTdCIC8qIEFpckl0ZXJhdGVkUmVnaXN0
ZXJDb2FsZXNjaW5nLmNwcCAqLywKIAkJCQkyNjcxOEJBMzFCRTk5Rjc4MDA1MjAxN0IgLyogQWly
SXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuaCAqLywKKwkJCQkwRjRERTFDQTFDNEI2MEI4MDA0
RDZDMTEgLyogQWlyTGl2ZW5lc3MuY3BwICovLAogCQkJCTI2ODRENDM3MUMwMDE2MUMwMDgxRDY2
MyAvKiBBaXJMaXZlbmVzcy5oICovLAorCQkJCTBGRTM0QzE3MUM0QjM5QUUwMDAzQTUxMiAvKiBB
aXJMb2dSZWdpc3RlclByZXNzdXJlLmNwcCAqLywKKwkJCQkwRkUzNEMxODFDNEIzOUFFMDAwM0E1
MTIgLyogQWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5oICovLAogCQkJCTBGNjE4MzI1MUM0NUJGMDcw
MDcyNDUwQiAvKiBBaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwICovLAogCQkJCTBGNjE4MzI2MUM0
NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dlckFmdGVyUmVnQWxsb2MuaCAqLywKIAkJCQkwRjYxODMy
NzFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3MuY3BwICovLApAQCAtNDg5MCw2ICs0
OTEyLDggQEAKIAkJCQkwRkVDODU2MTFCREFDREM3MDA4MEZGNzQgLyogQWlyUmVnaXN0ZXJQcmlv
cml0eS5oICovLAogCQkJCTBGNDU3MDNBMUJFNDVGMEEwMDYyQTYyOSAvKiBBaXJSZXBvcnRVc2Vk
UmVnaXN0ZXJzLmNwcCAqLywKIAkJCQkwRjQ1NzAzQjFCRTQ1RjBBMDA2MkE2MjkgLyogQWlyUmVw
b3J0VXNlZFJlZ2lzdGVycy5oICovLAorCQkJCTBGRTM0QzBGMUM0QjEwOTYwMDAzQTUxMiAvKiBB
aXJTY2F2ZW5nZVJlZ2lzdGVycy5jcHAgKi8sCisJCQkJMEZFMzRDMTAxQzRCMTA5NjAwMDNBNTEy
IC8qIEFpclNjYXZlbmdlUmVnaXN0ZXJzLmggKi8sCiAJCQkJMEYzMzhERkIxQkVENTEyNzAwMTND
ODhGIC8qIEFpclNpbXBsaWZ5Q0ZHLmNwcCAqLywKIAkJCQkwRjMzOERGQzFCRUQ1MTI3MDAxM0M4
OEYgLyogQWlyU2ltcGxpZnlDRkcuaCAqLywKIAkJCQkwRkVDODU2MjFCREFDREM3MDA4MEZGNzQg
LyogQWlyU3BlY2lhbC5jcHAgKi8sCkBAIC02OTY0LDYgKzY5ODgsNyBAQAogCQkJCTBGRUM4NTc0
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRUM4NTc2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjM3MzA5MzFDMEQ2N0VFMDAwNTJCRkEgLyogQWlyVXNlQ291bnRzLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkUzNEMxNDFDNEIxMDk2MDAwM0E1MTIgLyogQWlyQnJlYWtDcml0aWNhbEVkZ2Vz
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ1NzAzOTFCRTQ0QzkxMDA2MkE2MjkgLyogQWlyRWxp
bWluYXRlRGVhZENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTc5Q0ZDNkYwMUMzM0IxMDAwMEM3
NjhFQSAvKiBMTEludFBDUmFuZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OUQ1Q0Q1QjFDMTEw
NkE5MDBDRUNBMDcgLyogU2FtcGxpbmdQcm9maWxlci5oIGluIEhlYWRlcnMgKi8sCkBAIC03MzI2
LDcgKzczNTEsNiBAQAogCQkJCURDMDAwMzkzMTlEOEJFNkYwMDAyM0VCMCAvKiBERkdQcmVjaXNl
TG9jYWxDbG9iYmVyaXplLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkJFMEY3NTE2QzFEQjBCMDA4
MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkZGQzk1RTE0RUY5MEI3MDBDNzI1MzIgLyogREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhh
c2UuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGNEM5MTY4MUMyQjNENjgwMDQzNDFBNiAvKiBBaXJG
aXhTcGlsbFNsb3RaRGVmLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjNFMDFBQjE5RDM1M0E1MDBG
NjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjlD
RUQxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1Byb21vdGVkSGVhcExvY2F0aW9uLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkZDOTIxNjFCOTRGQjNFMDA3MURENjYgLyogREZHUHJvcGVydHlUeXBlS2V5
LmggaW4gSGVhZGVycyAqLywKQEAgLTczNTcsNiArNzM4MSw3IEBACiAJCQkJNzBCNzkxOTkxQzAy
NEEyOTAwMjQ4MUUyIC8qIEdlbmVyYXRvclByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZDMDk3QTIxNDZCMjhDQzAwQ0YyNDQyIC8qIERGR1RodW5rcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZEOEEzMjgxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhh
c2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRTM0QzFBMUM0QjM5QUUwMDAzQTUxMiAvKiBBaXJM
b2dSZWdpc3RlclByZXNzdXJlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4QTMyQTE3RDUxRjU3
MDBDQTJDNDAgLyogREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRDhBMzJDMTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTEZvck9TUkVu
dHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTNB
MDZCNDFDMTBDQjkzMDAzOTBGREQgLyogSklUQml0WG9yR2VuZXJhdG9yLmggaW4gSGVhZGVycyAq
LywKQEAgLTgwMjksNiArODA1NCw3IEBACiAJCQkJNzA1QjQxQjIxQTZFNTAxRTAwNzE2NzU3IC8q
IFN5bWJvbFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk2QjczMjgxQkRBMDhFRjAw
MzMxQjg0IC8qIFN5bWJvbFByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThD
NDZCMEUxNkY1Q0QwMEIzNDQ2MCAvKiBTeW1ib2xUYWJsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZFMzRDMTYxQzRCMTA5NjAwMDNBNTEyIC8qIEFpclNjYXZlbmdlUmVnaXN0ZXJzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNzg0QTI2NDExRDE2NjIyMDA1Nzc2QUMgLyogU3ludGF4Q2hlY2tlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNzBFQ0E2MDgxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRl
UmVnaXN0cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwRUNBNjA5MUFGREJFQTIwMDQ0OTczOSAv
KiBUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmggaW4gSGVhZGVycyAqLywKQEAgLTgwNDYsNiArODA3Miw3
IEBACiAJCQkJMEYzMzhFMTMxQkYwMjc2QzAwMTNDODhGIC8qIEIzT3BhcXVlQnlwcm9kdWN0cy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY3MDgxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJy
YXlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjRCOTREQzE3QjlGMDc1MDBERDAz
QTQgLyogVHlwZWRBcnJheUlubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRTM0QzEyMUM0
QjEwOTYwMDAzQTUxMiAvKiBBaXJCbG9ja0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYyQjY3MDkxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlzLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjJCNjcwQjE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMkQ0REVBMTk4MzJEQUMwMDdENEIxOSAvKiBUeXBlTG9jYXRpb24u
aCBpbiBIZWFkZXJzICovLApAQCAtODcyOSw2ICs4NzU2LDcgQEAKIAkJCQkwRkVDODUyMTFCREFD
REFDMDA4MEZGNzQgLyogQjNPcGNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQzg1MjMx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzT3JpZ2luLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUM4
NTI1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGRTM0QzE1MUM0QjEwOTYwMDAzQTUxMiAvKiBBaXJTY2F2ZW5nZVJlZ2lzdGVy
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVDODUyNzFCREFDREFDMDA4MEZGNzQgLyogQjNQ
YXRjaHBvaW50VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQzg1MjkxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzUGhhc2VTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVDODUyQjFC
REFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04ODU2
LDYgKzg4ODQsNyBAQAogCQkJCUMyQzBGN0NEMTdCQkZDNUIwMDQ2NEZFNCAvKiBERkdEZXNpcmVk
VHJhbnNpdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFODUzNEIxNzIzQ0RBNTAwQjYx
OEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMjk4
MUZEODE3QkFFRTRCMDBBM0JDOTggLyogREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGNERFMUNCMUM0QjYwQjgwMDRENkMxMSAvKiBBaXJMaXZlbmVzcy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY0Mjc2NDE1OTFBMUNDMDA0Q0I5RkYgLyogREZHRGlz
YXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNUExMjczMTkyRDlGREYwMDg3NjRB
MyAvKiBERkdEb2VzR0MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEM0M4MjYxNDExNUQ0MDAw
RkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTg4OTUsNiArODkyNCw3
IEBACiAJCQkJMEY1ODc0RUQxOTRGRUIxMjAwQUFCMkMxIC8qIERGR01heUV4aXQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEYxNzI1RkYxQjQ4NzE5QTAwQUMzQTU1IC8qIERGR01pbmlmaWVkR3Jh
cGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQkRDNEQxNTIyODE4NjAwQ0Q4OTEwIC8qIERG
R01pbmlmaWVkTm9kZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkUzNEMxMzFDNEIxMDk2MDAw
M0E1MTIgLyogQWlyQnJlYWtDcml0aWNhbEVkZ2VzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
OEYxNDM1MUFERjA5MDEwMEVENzkyQyAvKiBERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGRjJDRDVCMUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5
T2Zmc2V0RGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzM3ODEwRDE3OTlFQTJFMDA4MTc1
MzMgLyogREZHTmF0dXJhbExvb3BzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTAzNSw2ICs5MDY1
LDcgQEAKIAkJCQkwRjIzNUJFMTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVGh1bmtzLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGNkIxQ0M1MTg2MkM0NzgwMDg0NUQ5NyAvKiBGVExVbndpbmRJbmZv
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNUE2MjgzMTg4Qzk4RDQwMDcyQzlERiAvKiBGVExW
YWx1ZVJhbmdlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTM0QzExMUM0QjEwOTYwMDAzQTUx
MiAvKiBBaXJCbG9ja0luc2VydGlvblNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQTgzNjM4
OTE4RDdEMEZFMDAwMEVCQ0MgLyogRnVsbEdDQWN0aXZpdHlDYWxsYmFjay5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNDdGMzlDQjEwN0VDMzc2MDA0MjdBNDggLyogRnVuY3Rpb25Db25zdHJ1Y3Rv
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkYwRjE5RjE2QjcyQTE3MDA1REY5NUIgLyogRnVu
Y3Rpb25FeGVjdXRhYmxlRHVtcC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTkwOTEsNiArOTEyMiw3
IEBACiAJCQkJQTU5M0NGODIxODQwMzc3MTAwQkZDRTI3IC8qIEluc3BlY3RvclZhbHVlcy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDRjEwN0VDMzc2MDA0MjdBNDggLyogSW50ZXJuYWxG
dW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI5RDdENDBFRDIxMjgyMDBCODk2MTkg
LyogSW50ZXJwcmV0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFMzRDMTkxQzRCMzlBRTAw
MDNBNTEyIC8qIEFpckxvZ1JlZ2lzdGVyUHJlc3N1cmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTFCOUUyMzkxQjRFMEQ2NzAwQkM3RkVEIC8qIEludGxDb2xsYXRvci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBMUI5RTIzQjFCNEUwRDY3MDBCQzdGRUQgLyogSW50bENvbGxhdG9yQ29uc3RydWN0
b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTFCOUUyM0QxQjRFMEQ2NzAwQkM3RkVEIC8qIElu
dGxDb2xsYXRvclByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmNwcAkocmV2aXNpb24gMTk1MTc2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTA1LDE5ICsxMDUsMTQgQEAgSW5zdCBDaGVja1NwZWNpYWw6OmhpZGRlbkJyYW5jaChj
b25zdCBJbgogICAgIHJldHVybiBoaWRkZW5CcmFuY2g7CiB9CiAKLXZvaWQgQ2hlY2tTcGVjaWFs
Ojpjb21taXRIaWRkZW5CcmFuY2goSW5zdCYgb3JpZ2luYWwsIEluc3QmIGhpZGRlbkJyYW5jaCkK
LXsKLSAgICBBU1NFUlQoaGlkZGVuQnJhbmNoLmFyZ3Muc2l6ZSgpID09IG1fbnVtQ2hlY2tBcmdz
KTsKLSAgICBBU1NFUlQoaGlkZGVuQnJhbmNoLm9wY29kZSA9IG1fY2hlY2tPcGNvZGUpOwotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX251bUNoZWNrQXJnczsgKytpKQotICAgICAgICBv
cmlnaW5hbC5hcmdzW2kgKyAxXSA9IGhpZGRlbkJyYW5jaC5hcmdzW2ldOwotfQotCiB2b2lkIENo
ZWNrU3BlY2lhbDo6Zm9yRWFjaEFyZyhJbnN0JiBpbnN0LCBjb25zdCBTY29wZWRMYW1iZGE8SW5z
dDo6RWFjaEFyZ0NhbGxiYWNrPiYgY2FsbGJhY2spCiB7CiAgICAgSW5zdCBoaWRkZW4gPSBoaWRk
ZW5CcmFuY2goaW5zdCk7Ci0gICAgaGlkZGVuLmZvckVhY2hBcmcoY2FsbGJhY2spOwotICAgIGNv
bW1pdEhpZGRlbkJyYW5jaChpbnN0LCBoaWRkZW4pOworICAgIGhpZGRlbi5mb3JFYWNoQXJnKAor
ICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIHR5cGUsIEFy
Zzo6V2lkdGggd2lkdGgpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gJmFyZyAtICZo
aWRkZW4uYXJnc1swXTsKKyAgICAgICAgICAgIGNhbGxiYWNrKGluc3QuYXJnc1sxICsgaW5kZXhd
LCByb2xlLCB0eXBlLCB3aWR0aCk7CisgICAgICAgIH0pOwogICAgIGZvckVhY2hBcmdJbXBsKG51
bUIzQXJncyhpbnN0KSwgbV9udW1DaGVja0FyZ3MgKyAxLCBpbnN0LCBtX3N0YWNrbWFwUm9sZSwg
Y2FsbGJhY2spOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1Nw
ZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1Nw
ZWNpYWwuaAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q2hlY2tTcGVjaWFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMyw5ICsxMjMsNiBAQCBwcm90ZWN0
ZWQ6CiAgICAgLy8gQ29uc3RydWN0cyBhbmQgcmV0dXJucyB0aGUgSW5zdCByZXByZXNlbnRpbmcg
dGhlIGJyYW5jaCB0aGF0IHRoaXMgd2lsbCB1c2UuCiAgICAgQWlyOjpJbnN0IGhpZGRlbkJyYW5j
aChjb25zdCBBaXI6Okluc3QmKSBjb25zdDsKIAotICAgIC8vIElmIHdlIGVkaXRlZCB0aGUgaGlk
ZGVuIGJyYW5jaCwgdGhpcyBpbnN0YWxscyB0aGUgZWRpdHMgaW50byB0aGUgZ2l2ZW4gaW5zdC4K
LSAgICB2b2lkIGNvbW1pdEhpZGRlbkJyYW5jaChBaXI6Okluc3QmIG9yaWdpbmFsLCBBaXI6Oklu
c3QmIGhpZGRlbkJyYW5jaCk7Ci0KICAgICB2b2lkIGZvckVhY2hBcmcoQWlyOjpJbnN0JiwgY29u
c3QgU2NvcGVkTGFtYmRhPEFpcjo6SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYpIG92ZXJyaWRlOwog
ICAgIGJvb2wgaXNWYWxpZChBaXI6Okluc3QmKSBvdmVycmlkZTsKICAgICBib29sIGFkbWl0c1N0
YWNrKEFpcjo6SW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4KSBvdmVycmlkZTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCShyZXZpc2lvbiAxOTUxNzYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODcxLDYgKzg3MSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYXJnID0gdG1w
KHZhbHVlLnZhbHVlKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2Fz
ZSBWYWx1ZVJlcDo6UmVnaXN0ZXI6CisgICAgICAgICAgICAgICAgc3RhY2ttYXAtPmVhcmx5Q2xv
YmJlcmVkKCkuY2xlYXIodmFsdWUucmVwKCkucmVnKCkpOwogICAgICAgICAgICAgICAgIGFyZyA9
IFRtcCh2YWx1ZS5yZXAoKS5yZWcoKSk7CiAgICAgICAgICAgICAgICAgYXBwZW5kKE1vdmUsIGlt
bU9yVG1wKHZhbHVlLnZhbHVlKCkpLCBhcmcpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAt
MTk3Myw2ICsxOTc0LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAog
ICAgICAgICAgICAgZmlsbFN0YWNrbWFwKGluc3QsIHBhdGNocG9pbnRWYWx1ZSwgMCk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGlmIChwYXRjaHBvaW50VmFsdWUtPnJlc3VsdENvbnN0cmFp
bnQuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICBwYXRjaHBvaW50VmFsdWUtPmxhdGVDbG9iYmVy
ZWQoKS5jbGVhcihwYXRjaHBvaW50VmFsdWUtPnJlc3VsdENvbnN0cmFpbnQucmVnKCkpOwogCiAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBwYXRjaHBvaW50VmFsdWUtPm51bUdQU2NyYXRj
aFJlZ2lzdGVyczsgaS0tOykKICAgICAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKG1fY29k
ZS5uZXdUbXAoQXJnOjpHUCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3Rh
Y2ttYXBWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0
YWNrbWFwVmFsdWUuaAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3RhY2ttYXBWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODcsNiArMTg3LDggQEAg
cHVibGljOgogICAgICAgICBjbG9iYmVyTGF0ZShzZXQpOwogICAgIH0KIAorICAgIFJlZ2lzdGVy
U2V0JiBlYXJseUNsb2JiZXJlZCgpIHsgcmV0dXJuIG1fZWFybHlDbG9iYmVyZWQ7IH0KKyAgICBS
ZWdpc3RlclNldCYgbGF0ZUNsb2JiZXJlZCgpIHsgcmV0dXJuIG1fbGF0ZUNsb2JiZXJlZDsgfQog
ICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBlYXJseUNsb2JiZXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZWFybHlDbG9iYmVyZWQ7IH0KICAgICBjb25zdCBSZWdpc3RlclNldCYgbGF0ZUNsb2JiZXJlZCgp
IGNvbnN0IHsgcmV0dXJuIG1fbGF0ZUNsb2JiZXJlZDsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAJKHJldmlzaW9uIDE5
NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoQjNfSklUKQog
CiAjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgogI2lu
Y2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQWlyTGl2ZW5lc3MuaCIKICNpbmNs
dWRlICJBaXJQaGFzZVNjb3BlLmgiCkBAIC0xNjYsOCArMTY3LDQ3IEBAIHZvaWQgYWxsb2NhdGVT
dGFjayhDb2RlJiBjb2RlKQogICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IGJsb2Nr
LT5zaXplKCk7IGluc3RJbmRleC0tOykgewogICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAg
ICAgICAgICAgICAgZGF0YUxvZygiQW5hbHl6aW5nOiAiLCBibG9jay0+YXQoaW5zdEluZGV4KSwg
IlxuIik7CisKKyAgICAgICAgICAgIC8vIEtpbGwgZGVhZCBzdG9yZXMuIEZvciBzaW1wbGljaXR5
IHdlIHNheSB0aGF0IGEgc3RvcmUgaXMga2lsbGFibGUgaWYgaXQgaGFzIG9ubHkgbGF0ZQorICAg
ICAgICAgICAgLy8gZGVmcyBhbmQgdGhvc2UgbGF0ZSBkZWZzIGFyZSB0byB0aGluZ3MgdGhhdCBh
cmUgZGVhZCByaWdodCBub3cuIFdlIG9ubHkgZG8gdGhhdAorICAgICAgICAgICAgLy8gYmVjYXVz
ZSB0aGF0J3MgdGhlIG9ubHkga2luZCBvZiBkZWFkIHN0YWNrIHN0b3JlIHdlIHdpbGwgc2VlIGhl
cmUuCisgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7CisgICAg
ICAgICAgICBpZiAoIWluc3QuaGFzTm9uQXJnRWZmZWN0cygpKSB7CisgICAgICAgICAgICAgICAg
Ym9vbCBvayA9IHRydWU7CisgICAgICAgICAgICAgICAgaW5zdC5mb3JFYWNoQXJnKAorICAgICAg
ICAgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlLCBB
cmc6OldpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0Vhcmx5RGVm
KHJvbGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFyZzo6aXNMYXRlRGVmKHJvbGUpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghYXJnLmlzU3RhY2soKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9rID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzbG90ID0g
YXJnLnN0YWNrU2xvdCgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNsb3QtPmtpbmQo
KSAhPSBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvayA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxv
Y2FsQ2FsYy5pc0xpdmUoc2xvdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvayA9
IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAg
aWYgKG9rKQorICAgICAgICAgICAgICAgICAgICBpbnN0ID0gSW5zdCgpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCiAgICAgICAgICAgICBpbnRlcmZlcmUoaW5zdEluZGV4KTsKICAgICAg
ICAgICAgIGxvY2FsQ2FsYy5leGVjdXRlKGluc3RJbmRleCk7CisKKyAgICAgICAgICAgIGJsb2Nr
LT5pbnN0cygpLnJlbW92ZUFsbE1hdGNoaW5nKAorICAgICAgICAgICAgICAgIFsmXSAoY29uc3Qg
SW5zdCYgaW5zdCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAhaW5zdDsK
KyAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgfQogICAgICAgICBpbnRlcmZlcmUoLTEpOwog
ICAgIH0KQEAgLTIzMiwzMyArMjcyLDQzIEBAIHZvaWQgYWxsb2NhdGVTdGFjayhDb2RlJiBjb2Rl
KQogICAgIC8vIFdlIHdvdWxkIGhhdmUgdG8gc2NhdmVuZ2UgZm9yIHRlbXBvcmFyaWVzIGlmIHRo
aXMgaGFwcGVuZWQuIEZvcnR1bmF0ZWx5LCB0aGlzIGNhc2Ugd2lsbCBiZQogICAgIC8vIGV4dHJl
bWVseSByYXJlIHNvIHdlIGNhbiBkbyBjcmF6eSB0aGluZ3Mgd2hlbiBpdCBhcmlzZXMuCiAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjUzMAotICAgIAor
CisgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChjb2RlKTsKICAgICBmb3IgKEJhc2ljQmxv
Y2sqIGJsb2NrIDogY29kZSkgewotICAgICAgICBmb3IgKEluc3QmIGluc3QgOiAqYmxvY2spIHsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSAwOyBpbnN0SW5kZXggPCBibG9jay0+
c2l6ZSgpOyArK2luc3RJbmRleCkgeworICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5h
dChpbnN0SW5kZXgpOwogICAgICAgICAgICAgaW5zdC5mb3JFYWNoQXJnKAotICAgICAgICAgICAg
ICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSwgQXJnOjpUeXBlLCBBcmc6OldpZHRoIHdpZHRo
KQotICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6
OlJvbGUgcm9sZSwgQXJnOjpUeXBlLCBBcmc6OldpZHRoIHdpZHRoKSB7CisgICAgICAgICAgICAg
ICAgICAgIGF1dG8gc3RhY2tBZGRyID0gWyZdIChpbnQzMl90IG9mZnNldCkgLT4gQXJnIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBcmc6OnN0YWNrQWRkcihvZmZzZXQsIGNvZGUu
ZnJhbWVTaXplKCksIHdpZHRoKTsKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYXJnLmtpbmQoKSkgewogICAg
ICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6U3RhY2s6IHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGFyZyA9IEFyZzo6YWRkcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUbXAoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFy
Zy5vZmZzZXQoKSArIGFyZy5zdGFja1Nsb3QoKS0+b2Zmc2V0RnJvbUZQKCkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFhcmcuaXNWYWxpZEZvcm0od2lkdGgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXJnID0gQXJnOjphZGRyKAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBUbXAoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnLm9mZnNldCgpICsgY29kZS5mcmFtZVNp
emUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHNsb3QgPSBhcmcuc3Rh
Y2tTbG90KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc1pEZWYocm9sZSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBzbG90LT5raW5kKCkgPT0gU3RhY2tTbG90
S2luZDo6QW5vbnltb3VzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2xvdC0+Ynl0
ZVNpemUoKSA+IEFyZzo6Ynl0ZXMod2lkdGgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gQ3VycmVudGx5IHdlIG9ubHkgaGFuZGxlIHRoaXMgc2ltcGxlIGNhc2UgYmVjYXVzZSBp
dCdzIHRoZSBvbmx5IG9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgYXJp
c2VzOiBaRGVmJ3MgYXJlIG9ubHkgMzItYml0IHJpZ2h0IG5vdy4gU28sIHdoZW4gd2UgaGl0IHRo
ZXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXNzZXJ0aW9ucyBpdCBtZWFucyB0
aGF0IHdlIG5lZWQgdG8gaW1wbGVtZW50IHRob3NlIG90aGVyIGtpbmRzIG9mCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gemVybyBmaWxscy4KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChzbG90LT5ieXRlU2l6ZSgpID09IDgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHdpZHRoID09IEFyZzo6V2lkdGgzMik7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSByZWx5IG9uIHRoZSBmYWN0IHRoYXQg
dGhlcmUgbXVzdCBiZSBzb21lIHdheSB0byBtb3ZlIHplcm8gdG8gYQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIG1lbW9yeSBsb2NhdGlvbiB3aXRob3V0IGZpcnN0IGJ1cm5pbmcgYSBy
ZWdpc3Rlci4gT24gQVJNLCB3ZSB3b3VsZCBkbworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHRoaXMgdXNpbmcgenIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoaXNWYWxpZEZvcm0oTW92ZTMyLCBBcmc6OkltbSwgQXJnOjpBZGRyKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW5zdEluZGV4ICsgMSwgTW92ZTMyLCBpbnN0Lm9yaWdpbiwgQXJn
OjppbW0oMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrQWRkcihhcmcu
b2Zmc2V0KCkgKyA0ICsgc2xvdC0+b2Zmc2V0RnJvbUZQKCkpKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IHN0YWNrQWRkcihhcmcub2Zm
c2V0KCkgKyBzbG90LT5vZmZzZXRGcm9tRlAoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBjYXNlIEFy
Zzo6Q2FsbEFyZzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IEFyZzo6YWRkcigKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZy5vZmZzZXQoKSAtIGNvZGUuZnJhbWVT
aXplKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmcuaXNWYWxpZEZvcm0od2lk
dGgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gQXJnOjphZGRyKAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUbXAoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9p
bnRlclJlZ2lzdGVyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnLm9mZnNl
dCgpICsgY29kZS5mcmFtZVNpemUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICBhcmcgPSBzdGFja0FkZHIoYXJnLm9mZnNldCgpIC0gY29kZS5m
cmFtZVNpemUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjY2
LDYgKzMxNiw3IEBAIHZvaWQgYWxsb2NhdGVTdGFjayhDb2RlJiBjb2RlKQogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICk7CiAgICAgICAgIH0KKyAgICAgICAgaW5zZXJ0aW9uU2V0LmV4
ZWN1dGUoYmxvY2spOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJBcmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckFyZy5oCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckFyZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNiArMTI2LDcgQEAgcHVibGljOgog
ICAgICAgICAvLyBkZXBlbmRpbmcgb24gdGhlIGtpbmQgb2YgdGhlIGFyZ3VtZW50OgogICAgICAg
ICAvLwogICAgICAgICAvLyBGb3IgcmVnaXN0ZXI6IHRoZSB1cHBlciBiaXRzIGFyZSB6ZXJvLWZp
bGxlZC4KKyAgICAgICAgLy8gRm9yIGFub255bW91cyBzdGFjayBzbG90OiB0aGUgdXBwZXIgYml0
cyBhcmUgemVyby1maWxsZWQuCiAgICAgICAgIC8vIEZvciBhZGRyZXNzOiB0aGUgdXBwZXIgYml0
cyBhcmUgbm90IHRvdWNoZWQgKGkuZS4gd2UgZG8gYSAzMi1iaXQgc3RvcmUgaW4gb3VyIGV4YW1w
bGUpLgogICAgICAgICAvLyBGb3IgdG1wOiBlaXRoZXIgdGhlIHVwcGVyIGJpdHMgYXJlIG5vdCB0
b3VjaGVkIG9yIHRoZXkgYXJlIHplcm8tZmlsbGVkLCBhbmQgd2Ugd29uJ3Qga25vdwogICAgICAg
ICAvLyB3aGljaCB1bnRpbCB3ZSBsb3dlciB0aGUgdG1wIHRvIGVpdGhlciBhIFN0YWNrU2xvdCBv
ciBhIFJlZy4KQEAgLTUxMyw2ICs1MTQsMTcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIH0KIAorICAgIHN0YXRpYyBBcmcgc3RhY2tBZGRyKGludDMyX3Qgb2Zmc2V0RnJv
bUZQLCB1bnNpZ25lZCBmcmFtZVNpemUsIFdpZHRoIHdpZHRoKQorICAgIHsKKyAgICAgICAgQXJn
IHJlc3VsdCA9IEFyZzo6YWRkcihBaXI6OlRtcChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciks
IG9mZnNldEZyb21GUCk7CisgICAgICAgIGlmICghcmVzdWx0LmlzVmFsaWRGb3JtKHdpZHRoKSkg
eworICAgICAgICAgICAgcmVzdWx0ID0gQXJnOjphZGRyKAorICAgICAgICAgICAgICAgIEFpcjo6
VG1wKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciksCisgICAgICAgICAgICAg
ICAgb2Zmc2V0RnJvbUZQICsgZnJhbWVTaXplKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKwogICAgIC8vIElmIHlvdSBkb24ndCBwYXNzIGEgV2lkdGgsIHRoaXMg
b3B0aW1pc3RpY2FsbHkgYXNzdW1lcyB0aGF0IHlvdSdyZSB1c2luZyB0aGUgcmlnaHQgd2lkdGgu
CiAgICAgc3RhdGljIGJvb2wgaXNWYWxpZFNjYWxlKHVuc2lnbmVkIHNjYWxlLCBPcHRpb25hbDxX
aWR0aD4gd2lkdGggPSBOdWxsb3B0KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMTk1MTc2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTcsMTEgKzU3LDIxIEBAIHZvaWQgQmFzaWNCbG9jazo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSAKIAogdm9pZCBCYXNpY0Jsb2NrOjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAogeworICAgIGR1bXBIZWFkZXIob3V0KTsKKyAgICBmb3IgKGNvbnN0IEluc3QmIGluc3QgOiAq
dGhpcykKKyAgICAgICAgb3V0LnByaW50KCIgICAgIiwgaW5zdCwgIlxuIik7CisgICAgZHVtcEZv
b3RlcihvdXQpOworfQorCit2b2lkIEJhc2ljQmxvY2s6OmR1bXBIZWFkZXIoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKK3sKICAgICBvdXQucHJpbnQoIkJCIiwgKnRoaXMsICI6IDsgZnJlcXVlbmN5
ID0gIiwgbV9mcmVxdWVuY3ksICJcbiIpOwogICAgIGlmIChwcmVkZWNlc3NvcnMoKS5zaXplKCkp
CiAgICAgICAgIG91dC5wcmludCgiICBQcmVkZWNlc3NvcnM6ICIsIHBvaW50ZXJMaXN0RHVtcChw
cmVkZWNlc3NvcnMoKSksICJcbiIpOwotICAgIGZvciAoY29uc3QgSW5zdCYgaW5zdCA6ICp0aGlz
KQotICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBpbnN0LCAiXG4iKTsKK30KKwordm9pZCBCYXNp
Y0Jsb2NrOjpkdW1wRm9vdGVyKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CiAgICAgaWYgKHN1
Y2Nlc3NvcnMoKS5zaXplKCkpCiAgICAgICAgIG91dC5wcmludCgiICBTdWNjZXNzb3JzOiAiLCBs
aXN0RHVtcChzdWNjZXNzb3JzKCkpLCAiXG4iKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpA
QCAtMzYsNiArMzYsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNw
YWNlIEFpciB7CiAKK2NsYXNzIEJsb2NrSW5zZXJ0aW9uU2V0OwogY2xhc3MgQ29kZTsKIGNsYXNz
IEluc2VydGlvblNldDsKIApAQCAtMTI2LDcgKzEyNywxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OwogCisgICAgdm9pZCBkdW1wSGVhZGVyKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAg
dm9pZCBkdW1wRm9vdGVyKFByaW50U3RyZWFtJikgY29uc3Q7CisKIHByaXZhdGU6CisgICAgZnJp
ZW5kIGNsYXNzIEJsb2NrSW5zZXJ0aW9uU2V0OwogICAgIGZyaWVuZCBjbGFzcyBDb2RlOwogICAg
IGZyaWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckJsb2NrSW5zZXJ0aW9uU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJsb2NrSW5zZXJ0aW9uU2V0LmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmxvY2tJbnNlcnRpb25T
ZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkFpckJsb2NrSW5zZXJ0aW9uU2V0LmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5j
bHVkZSAiQWlyQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisjaW5j
bHVkZSA8d3RmL0J1YmJsZVNvcnQuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
IG5hbWVzcGFjZSBBaXIgeworCitCbG9ja0luc2VydGlvblNldDo6QmxvY2tJbnNlcnRpb25TZXQo
Q29kZSAmY29kZSkKKyAgICA6IG1fY29kZShjb2RlKQoreworfQorCitCbG9ja0luc2VydGlvblNl
dDo6fkJsb2NrSW5zZXJ0aW9uU2V0KCkgeyB9CisKK3ZvaWQgQmxvY2tJbnNlcnRpb25TZXQ6Omlu
c2VydChCbG9ja0luc2VydGlvbiYmIGluc2VydGlvbikKK3sKKyAgICBtX2luc2VydGlvbnMuYXBw
ZW5kKFdURk1vdmUoaW5zZXJ0aW9uKSk7Cit9CisKK0Jhc2ljQmxvY2sqIEJsb2NrSW5zZXJ0aW9u
U2V0OjppbnNlcnQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSBmcmVxdWVuY3kpCit7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+IGJsb2NrKG5ldyBCYXNpY0Jsb2NrKFVJTlRfTUFYLCBm
cmVxdWVuY3kpKTsKKyAgICBCYXNpY0Jsb2NrKiByZXN1bHQgPSBibG9jay5nZXQoKTsKKyAgICBp
bnNlcnQoQmxvY2tJbnNlcnRpb24oaW5kZXgsIFdURk1vdmUoYmxvY2spKSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworQmFzaWNCbG9jayogQmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydEJlZm9y
ZShCYXNpY0Jsb2NrKiBiZWZvcmUsIGRvdWJsZSBmcmVxdWVuY3kpCit7CisgICAgcmV0dXJuIGlu
c2VydChiZWZvcmUtPmluZGV4KCksIGZyZXF1ZW5jeSA9PSBmcmVxdWVuY3kgPyBmcmVxdWVuY3kg
OiBiZWZvcmUtPmZyZXF1ZW5jeSgpKTsKK30KKworQmFzaWNCbG9jayogQmxvY2tJbnNlcnRpb25T
ZXQ6Omluc2VydEFmdGVyKEJhc2ljQmxvY2sqIGFmdGVyLCBkb3VibGUgZnJlcXVlbmN5KQorewor
ICAgIHJldHVybiBpbnNlcnQoYWZ0ZXItPmluZGV4KCkgKyAxLCBmcmVxdWVuY3kgPT0gZnJlcXVl
bmN5ID8gZnJlcXVlbmN5IDogYWZ0ZXItPmZyZXF1ZW5jeSgpKTsKK30KKworYm9vbCBCbG9ja0lu
c2VydGlvblNldDo6ZXhlY3V0ZSgpCit7CisgICAgaWYgKG1faW5zZXJ0aW9ucy5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBXZSBhbGxvdyBpbnNlcnRpb25z
IHRvIGJlIGdpdmVuIHRvIHVzIGluIGFueSBvcmRlci4gU28sIHdlIG5lZWQgdG8gc29ydCB0aGVt
IGJlZm9yZQorICAgIC8vIHJ1bm5pbmcgV1RGOjpleGVjdXRlSW5zZXJ0aW9ucy4gV2Ugc3Ryb25n
bHkgcHJlZmVyIGEgc3RhYmxlIHNvcnQgYW5kIHdlIHdhbnQgaXQgdG8gYmUKKyAgICAvLyBmYXN0
LCBzbyB3ZSB1c2UgYnViYmxlIHNvcnQuCisgICAgYnViYmxlU29ydChtX2luc2VydGlvbnMuYmVn
aW4oKSwgbV9pbnNlcnRpb25zLmVuZCgpKTsKKworICAgIGV4ZWN1dGVJbnNlcnRpb25zKG1fY29k
ZS5tX2Jsb2NrcywgbV9pbnNlcnRpb25zKTsKKyAgICAKKyAgICAvLyBQcnVuZSBvdXQgZW1wdHkg
ZW50cmllcy4gVGhpcyBpc24ndCBzdHJpY3RseSBuZWNlc3NhcnkgYnV0IGl0J3MKKyAgICAvLyBo
ZWFsdGh5IHRvIGtlZXAgdGhlIGJsb2NrIGxpc3QgZnJvbSBncm93aW5nLgorICAgIG1fY29kZS5t
X2Jsb2Nrcy5yZW1vdmVBbGxNYXRjaGluZygKKyAgICAgICAgWyZdIChzdGQ6OnVuaXF1ZV9wdHI8
QmFzaWNCbG9jaz4mIGJsb2NrUHRyKSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiAhYmxv
Y2tQdHI7CisgICAgICAgIH0pOworICAgIAorICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBibG9j
a3Mga25vdyB0aGVpciBuZXcgaW5kaWNlcy4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9jb2RlLm1fYmxvY2tzLnNpemUoKTsgKytpKQorICAgICAgICBtX2NvZGUubV9ibG9ja3NbaV0t
Pm1faW5kZXggPSBpOworICAgIAorICAgIHJldHVybiB0cnVlOworfQorCit9IH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJsb2NrSW5zZXJ0aW9uU2V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja0luc2VydGlvblNl
dC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9j
a0luc2VydGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJCbG9ja0lu
c2VydGlvblNldF9oCisjZGVmaW5lIEFpckJsb2NrSW5zZXJ0aW9uU2V0X2gKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSA8d3RmL0luc2VydGlv
bi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBJbnNlcnRpb25TZXQ7CisKK3R5cGVkZWYg
V1RGOjpJbnNlcnRpb248c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiBCbG9ja0luc2VydGlv
bjsKKworY2xhc3MgQmxvY2tJbnNlcnRpb25TZXQgeworcHVibGljOgorICAgIEJsb2NrSW5zZXJ0
aW9uU2V0KENvZGUmKTsKKyAgICB+QmxvY2tJbnNlcnRpb25TZXQoKTsKKyAgICAKKyAgICB2b2lk
IGluc2VydChCbG9ja0luc2VydGlvbiYmKTsKKworICAgIC8vIEluc2VydCBhIG5ldyBibG9jayBh
dCBhIGdpdmVuIGluZGV4LgorICAgIEJhc2ljQmxvY2sqIGluc2VydCh1bnNpZ25lZCBpbmRleCwg
ZG91YmxlIGZyZXF1ZW5jeSA9IFBOYU4pOworCisgICAgLy8gSW5zZXJ0cyBhIG5ldyBibG9jayBi
ZWZvcmUgdGhlIGdpdmVuIGJsb2NrLiBVc3VhbGx5IHlvdSB3aWxsIG5vdCBwYXNzIHRoZSBmcmVx
dWVuY3kKKyAgICAvLyBhcmd1bWVudC4gUGFzc2luZyBQTmFOIGNhdXNlcyB1cyB0byBqdXN0IHVz
ZSB0aGUgZnJlcXVlbmN5IG9mIHRoZSAnYmVmb3JlJyBibG9jay4gVGhhdCdzCisgICAgLy8gdXN1
YWxseSB3aGF0IHlvdSB3YW50LgorICAgIEJhc2ljQmxvY2sqIGluc2VydEJlZm9yZShCYXNpY0Js
b2NrKiBiZWZvcmUsIGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKTsKKworICAgIC8vIEluc2VydHMg
YSBuZXcgYmxvY2sgYWZ0ZXIgdGhlIGdpdmVuIGJsb2NrLgorICAgIEJhc2ljQmxvY2sqIGluc2Vy
dEFmdGVyKEJhc2ljQmxvY2sqIGFmdGVyLCBkb3VibGUgZnJlcXVlbmN5ID0gUE5hTik7CisKKyAg
ICBib29sIGV4ZWN1dGUoKTsKKworcHJpdmF0ZToKKyAgICBDb2RlJiBtX2NvZGU7CisgICAgVmVj
dG9yPEJsb2NrSW5zZXJ0aW9uLCA4PiBtX2luc2VydGlvbnM7Cit9OworCit9IH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYg
Ly8gQWlyQmxvY2tJbnNlcnRpb25TZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckJyZWFrQ3JpdGljYWxFZGdlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCcmVha0NyaXRpY2FsRWRnZXMuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCcmVha0NyaXRpY2FsRWRnZXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QWlyQnJlYWtDcml0aWNhbEVkZ2VzLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVk
ZSAiQWlyQmxvY2tJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVk
ZSAiQWlySW5zdElubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5h
bWVzcGFjZSBBaXIgeworCit2b2lkIGJyZWFrQ3JpdGljYWxFZGdlcyhDb2RlJiBjb2RlKQorewor
ICAgIEJsb2NrSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChjb2RlKTsKKyAgICAKKyAgICBmb3Ig
KHVuc2lnbmVkIGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgY29kZS5zaXplKCk7ICsrYmxv
Y2tJbmRleCkgeworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGNvZGVbYmxvY2tJbmRleF07
CisgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBp
ZiAoYmxvY2stPm51bVN1Y2Nlc3NvcnMoKSA8PSAxKQorICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgaS0tOykg
eworICAgICAgICAgICAgQmFzaWNCbG9jayomIHN1Y2Nlc3NvciA9IGJsb2NrLT5zdWNjZXNzb3JC
bG9jayhpKTsKKyAgICAgICAgICAgIGlmIChzdWNjZXNzb3ItPnByZWRlY2Vzc29ycygpLnNpemUo
KSA8PSAxKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBCYXNpY0Js
b2NrKiBwYWQgPSBpbnNlcnRpb25TZXQuaW5zZXJ0QmVmb3JlKHN1Y2Nlc3Nvciwgc3VjY2Vzc29y
LT5mcmVxdWVuY3koKSk7CisgICAgICAgICAgICBwYWQtPmFwcGVuZChKdW1wLCBzdWNjZXNzb3It
PmF0KDApLm9yaWdpbik7CisgICAgICAgICAgICBwYWQtPnN1Y2Nlc3NvcnMoKS5hcHBlbmQoRnJl
cXVlbnRlZEJsb2NrKHN1Y2Nlc3NvcikpOworICAgICAgICAgICAgcGFkLT5hZGRQcmVkZWNlc3Nv
cihibG9jayk7CisgICAgICAgICAgICBzdWNjZXNzb3ItPnJlcGxhY2VQcmVkZWNlc3NvcihibG9j
aywgcGFkKTsKKyAgICAgICAgICAgIHN1Y2Nlc3NvciA9IHBhZDsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGluc2VydGlvblNldC5leGVjdXRlKCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQnJlYWtDcml0aWNhbEVkZ2VzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCcmVha0NyaXRpY2FsRWRnZXMuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQnJlYWtDcml0
aWNhbEVkZ2VzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQWlyQnJlYWtDcml0aWNh
bEVkZ2VzX2gKKyNkZWZpbmUgQWlyQnJlYWtDcml0aWNhbEVkZ2VzX2gKKworI2lmIEVOQUJMRShC
M19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsK
KworY2xhc3MgQ29kZTsKKwordm9pZCBicmVha0NyaXRpY2FsRWRnZXMoQ29kZSYpOworCit9IH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQor
CisjZW5kaWYgLy8gQWlyQnJlYWtDcml0aWNhbEVkZ2VzX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmNwcAkocmV2aXNpb24gMTk1
MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw5IEBAIENDYWxsU3BlY2lhbDo6Q0NhbGxTcGVj
aWFsKCkKICAgICBtX2Nsb2JiZXJlZFJlZ3MuZXhjbHVkZShSZWdpc3RlclNldDo6c3RhY2tSZWdp
c3RlcnMoKSk7CiAgICAgbV9jbG9iYmVyZWRSZWdzLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnJlc2Vy
dmVkSGFyZHdhcmVSZWdpc3RlcnMoKSk7CiAgICAgbV9jbG9iYmVyZWRSZWdzLmV4Y2x1ZGUoUmVn
aXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CisgICAgbV9jbG9iYmVyZWRSZWdzLmNs
ZWFyKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICBtX2Nsb2JiZXJlZFJlZ3MuY2xlYXIo
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKKyAgICBtX2Nsb2JiZXJlZFJlZ3MuY2xlYXIoRlBS
SW5mbzo6cmV0dXJuVmFsdWVGUFIpOwogfQogCiBDQ2FsbFNwZWNpYWw6On5DQ2FsbFNwZWNpYWwo
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHJldmlzaW9uIDE5
NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Niw2ICs0Niw3IEBAIGNsYXNzIFByb2NlZHVyZTsKIAogbmFtZXNwYWNlIEFp
ciB7CiAKK2NsYXNzIEJsb2NrSW5zZXJ0aW9uU2V0OwogY2xhc3MgQ0NhbGxTcGVjaWFsOwogCiAv
LyBUaGlzIGlzIGFuIElSIHRoYXQgaXMgdmVyeSBjbG9zZSB0byB0aGUgYmFyZSBtZXRhbC4gSXQg
cmVxdWlyZXMgYWJvdXQgNDB4IG1vcmUgYnl0ZXMgdGhhbiB0aGUKQEAgLTMyMiw4ICszMjMsMTUg
QEAgcHVibGljOgogCiAgICAgY29uc3QgY2hhciogbGFzdFBoYXNlTmFtZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbGFzdFBoYXNlTmFtZTsgfQogCisgICAgdm9pZCBzZXRFbmFibGVSQ1JTKGJvb2wgdmFs
dWUpCisgICAgeworICAgICAgICBtX2VuYWJsZVJDUlMgPSB2YWx1ZTsKKyAgICB9CisgICAgYm9v
bCBlbmFibGVSQ1JTKCkgY29uc3QgeyByZXR1cm4gbV9lbmFibGVSQ1JTOyB9CisKIHByaXZhdGU6
CiAgICAgZnJpZW5kIGNsYXNzIDo6SlNDOjpCMzo6UHJvY2VkdXJlOworICAgIGZyaWVuZCBjbGFz
cyBCbG9ja0luc2VydGlvblNldDsKICAgICAKICAgICBDb2RlKFByb2NlZHVyZSYpOwogCkBAIC0z
MzcsNiArMzQ1LDcgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX251bUZQVG1wcyB7IDAgfTsK
ICAgICB1bnNpZ25lZCBtX2ZyYW1lU2l6ZSB7IDAgfTsKICAgICB1bnNpZ25lZCBtX2NhbGxBcmdB
cmVhU2l6ZSB7IDAgfTsKKyAgICBib29sIG1fZW5hYmxlUkNSUyB7IE9wdGlvbnM6OmFpclVzZXNS
Q1JTKCkgfTsKICAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCBtX2NhbGxlZVNhdmVSZWdpc3RlcnM7
CiAgICAgY29uc3QgY2hhciogbV9sYXN0UGhhc2VOYW1lOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckN1c3RvbS5jcHAJKHJldmlzaW9uIDE5NTE3NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjgsMTEgKzI4LDM1IEBACiAKICNpZiBFTkFCTEUoQjNfSklUKQogCisjaW5jbHVkZSAiQWly
SW5zdElubGluZXMuaCIKICNpbmNsdWRlICJCM0NDYWxsVmFsdWUuaCIKICNpbmNsdWRlICJCM1Zh
bHVlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNl
IEFpciB7CiAKK2Jvb2wgUGF0Y2hDdXN0b206OmlzVmFsaWRGb3JtKEluc3QmIGluc3QpCit7Cisg
ICAgaWYgKGluc3QuYXJncy5zaXplKCkgPCAxKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKCFpbnN0LmFyZ3NbMF0uaXNTcGVjaWFsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoIWluc3QuYXJnc1swXS5zcGVjaWFsKCktPmlzVmFsaWQoaW5zdCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBSZWdpc3RlclNldCBjbG9iYmVyZWRFYXJseSA9IGluc3QuZXh0cmFF
YXJseUNsb2JiZXJlZFJlZ3MoKTsKKyAgICBSZWdpc3RlclNldCBjbG9iYmVyZWRMYXRlID0gaW5z
dC5leHRyYUNsb2JiZXJlZFJlZ3MoKTsKKyAgICBib29sIG9rID0gdHJ1ZTsKKyAgICBpbnN0LmZv
ckVhY2hUbXAoCisgICAgICAgIFsmXSAoVG1wJiB0bXAsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5
cGUsIEFyZzo6V2lkdGgpIHsKKyAgICAgICAgICAgIGlmICghdG1wLmlzUmVnKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKEFyZzo6aXNMYXRlRGVmKHJvbGUpIHx8
IEFyZzo6aXNMYXRlVXNlKHJvbGUpKQorICAgICAgICAgICAgICAgIG9rICY9ICFjbG9iYmVyZWRM
YXRlLmdldCh0bXAucmVnKCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG9r
ICY9ICFjbG9iYmVyZWRFYXJseS5nZXQodG1wLnJlZygpKTsKKyAgICAgICAgfSk7CisgICAgcmV0
dXJuIG9rOworfQorCiBib29sIENDYWxsQ3VzdG9tOjppc1ZhbGlkRm9ybShJbnN0JiBpbnN0KQog
ewogICAgIENDYWxsVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW4tPmFzPENDYWxsVmFsdWU+KCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckN1c3RvbS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ3VzdG9tLmgJKHJldmlzaW9u
IDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ3VzdG9tLmgJKHdv
cmtpbmcgY29weSkKQEAgLTcxLDE0ICs3MSw3IEBAIHN0cnVjdCBQYXRjaEN1c3RvbSB7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkRm9ybShJ
bnN0JiBpbnN0KQotICAgIHsKLSAgICAgICAgaWYgKGluc3QuYXJncy5zaXplKCkgPCAxKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIWluc3QuYXJnc1swXS5pc1NwZWNp
YWwoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIGluc3QuYXJn
c1swXS5zcGVjaWFsKCktPmlzVmFsaWQoaW5zdCk7Ci0gICAgfQorICAgIHN0YXRpYyBib29sIGlz
VmFsaWRGb3JtKEluc3QmIGluc3QpOwogCiAgICAgc3RhdGljIGJvb2wgYWRtaXRzU3RhY2soSW5z
dCYgaW5zdCwgdW5zaWduZWQgYXJnSW5kZXgpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJFbWl0U2h1ZmZsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbWl0U2h1ZmZsZS5jcHAJKHJldmlzaW9uIDE5NTE3NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MCw2ICs3MCwxNCBAQCB2b2lkIFNodWZmbGVQYWlyOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpCiAgICAgb3V0LnByaW50KHdpZHRoKCksICI6Iiwgc3JjKCksICI9PiIsIGRz
dCgpKTsKIH0KIAorSW5zdCBjcmVhdGVTaHVmZmxlKFZhbHVlKiBvcmlnaW4sIGNvbnN0IFZlY3Rv
cjxTaHVmZmxlUGFpcj4mIHBhaXJzKQoreworICAgIEluc3QgcmVzdWx0KFNodWZmbGUsIG9yaWdp
bik7CisgICAgZm9yIChjb25zdCBTaHVmZmxlUGFpciYgcGFpciA6IHBhaXJzKQorICAgICAgICBy
ZXN1bHQuYXBwZW5kKHBhaXIuc3JjKCksIHBhaXIuZHN0KCksIEFyZzo6d2lkdGhBcmcocGFpci53
aWR0aCgpKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogVmVjdG9yPEluc3Q+IGVtaXRTaHVm
ZmxlKAogICAgIFZlY3RvcjxTaHVmZmxlUGFpcj4gcGFpcnMsIHN0ZDo6YXJyYXk8QXJnLCAyPiBz
Y3JhdGNoZXMsIEFyZzo6VHlwZSB0eXBlLCBWYWx1ZSogb3JpZ2luKQogewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbWl0U2h1ZmZsZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuaAkocmV2aXNpb24gMTk1
MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbWl0U2h1ZmZsZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2Niw5IEBAIHByaXZhdGU6CiAgICAgQXJnOjpXaWR0aCBt
X3dpZHRoIHsgQXJnOjpXaWR0aDggfTsKIH07CiAKKy8vIENyZWF0ZSBhIFNodWZmbGUgaW5zdHJ1
Y3Rpb24uCitJbnN0IGNyZWF0ZVNodWZmbGUoVmFsdWUqIG9yaWdpbiwgY29uc3QgVmVjdG9yPFNo
dWZmbGVQYWlyPiYpOworCiAvLyBQZXJmb3JtIGEgc2h1ZmZsZSBvZiBhIGdpdmVuIHR5cGUuIFRo
ZSBzY3JhdGNoIGFyZ3VtZW50IGlzIG1hbmRhdG9yeS4gWW91IHNob3VsZCBwYXNzIGl0IGFzCiAv
LyBmb2xsb3dzOiBJZiB5b3Uga25vdyB0aGF0IHlvdSBoYXZlIHNjcmF0Y2ggcmVnaXN0ZXJzIG9y
IHRlbXBvcmFyaWVzIGF2YWlsYWJsZSAtIHRoYXQgaXMsIHRoZXkncmUKIC8vIHJlZ2lzdGVycyB0
aGF0IGFyZSBub3QgbWVudGlvbmVkIGluIHRoZSBzaHVmZmxlLCBoYXZlIHRoZSBzYW1lIHR5cGUg
YXMgdGhlIHNodWZmbGUsIGFuZCBhcmUgbm90CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckZpeFNwaWxsU2xvdFpEZWYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckZpeFNwaWxsU2xvdFpEZWYuaAkocmV2aXNpb24gMTk1MTc2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhTcGlsbFNsb3RaRGVmLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEFpckZpeFNwaWxsU2xvdFpEZWZfaAotI2RlZmlu
ZSBBaXJGaXhTcGlsbFNsb3RaRGVmX2gKLQotI2luY2x1ZGUgIkFpckNvZGUuaCIKLSNpbmNsdWRl
ICJBaXJJbnNlcnRpb25TZXQuaCIKLSNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgotCi1uYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIElzU3BpbGxTbG90Pgotdm9pZCBmaXhTcGlsbFNsb3RaRGVmKENvZGUmIGNvZGUsIGNv
bnN0IElzU3BpbGxTbG90JiBpc1NwaWxsU2xvdCkKLXsKLSAgICAvLyBXZSBjb3VsZCBoYXZlIGlu
dHJvZHVjZWQgWkRlZidzIHRvIFN0YWNrU2xvdHMgdGhhdCBhcmUgd2lkZXIgdGhhbiB0aGUgZGVm
LiBJbiB0aGF0IGNhc2UsIHdlCi0gICAgLy8gbmVlZCB0byBlbWl0IGNvZGUgdG8gemVyby1maWxs
IHRoZSB0b3AgYml0cyBvZiB0aGUgU3RhY2tTbG90LgotICAgIEluc2VydGlvblNldCBpbnNlcnRp
b25TZXQoY29kZSk7Ci0gICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSAwOyBpbnN0SW5kZXggPCBibG9jay0+c2l6ZSgp
OyArK2luc3RJbmRleCkgewotICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0
SW5kZXgpOwotCi0gICAgICAgICAgICBpbnN0LmZvckVhY2hBcmcoCi0gICAgICAgICAgICAgICAg
WyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSwgQXJnOjpXaWR0aCB3aWR0
aCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIUFyZzo6aXNaRGVmKHJvbGUpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZy5p
c1N0YWNrKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICghaXNTcGlsbFNsb3QoYXJnLnN0YWNrU2xvdCgpKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFyZy5zdGFja1Nsb3Qo
KS0+Ynl0ZVNpemUoKSA9PSBBcmc6OmJ5dGVzKHdpZHRoKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAgICAgICAvLyBDdXJyZW50bHkgd2Ugb25seSBo
YW5kbGUgdGhpcyBzaW1wbGUgY2FzZSBiZWNhdXNlIGl0J3MgdGhlIG9ubHkgb25lIHRoYXQKLSAg
ICAgICAgICAgICAgICAgICAgLy8gYXJpc2VzOiBaRGVmJ3MgYXJlIG9ubHkgMzItYml0IHJpZ2h0
IG5vdy4gU28sIHdoZW4gd2UgaGl0IHRoZXNlCi0gICAgICAgICAgICAgICAgICAgIC8vIGFzc2Vy
dGlvbnMgaXQgbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIGltcGxlbWVudCB0aG9zZSBvdGhlciBraW5k
cyBvZiB6ZXJvCi0gICAgICAgICAgICAgICAgICAgIC8vIGZpbGxzLgotICAgICAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChhcmcuc3RhY2tTbG90KCktPmJ5dGVTaXplKCkgPT0gOCk7Ci0g
ICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHdpZHRoID09IEFyZzo6V2lkdGgzMik7
Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gV2UgcmVseSBvbiB0aGUgZmFjdCB0aGF0IHRoZXJl
IG11c3QgYmUgc29tZSB3YXkgdG8gbW92ZSB6ZXJvIHRvIGEgbWVtb3J5Ci0gICAgICAgICAgICAg
ICAgICAgIC8vIGxvY2F0aW9uIHdpdGhvdXQgZmlyc3QgYnVybmluZyBhIHJlZ2lzdGVyLiBPbiBB
Uk0sIHdlIHdvdWxkIGRvIHRoaXMgdXNpbmcKLSAgICAgICAgICAgICAgICAgICAgLy8genIuCi0g
ICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzVmFsaWRGb3JtKE1vdmUzMiwgQXJn
OjpJbW0sIEFyZzo6U3RhY2spKTsKLSAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmlu
c2VydCgKLSAgICAgICAgICAgICAgICAgICAgICAgIGluc3RJbmRleCArIDEsIE1vdmUzMiwgaW5z
dC5vcmlnaW4sIEFyZzo6aW1tKDApLCBhcmcud2l0aE9mZnNldCg0KSk7Ci0gICAgICAgICAgICAg
ICAgfSk7Ci0gICAgICAgIH0KLSAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOwot
ICAgIH0KLX0KLQotfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgotCi0jZW5kaWYgLy8g
QWlyRml4U3BpbGxTbG90WkRlZl9oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyR2VuZXJhdGUuY3BwCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTEg
KzM1LDEzIEBACiAjaW5jbHVkZSAiQWlyR2VuZXJhdGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJB
aXJIYW5kbGVDYWxsZWVTYXZlcy5oIgogI2luY2x1ZGUgIkFpckl0ZXJhdGVkUmVnaXN0ZXJDb2Fs
ZXNjaW5nLmgiCisjaW5jbHVkZSAiQWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5oIgogI2luY2x1ZGUg
IkFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oIgogI2luY2x1ZGUgIkFpckxvd2VyTWFjcm9zLmgiCiAj
aW5jbHVkZSAiQWlyT3Bjb2RlVXRpbHMuaCIKICNpbmNsdWRlICJBaXJPcHRpbWl6ZUJsb2NrT3Jk
ZXIuaCIKICNpbmNsdWRlICJBaXJSZXBvcnRVc2VkUmVnaXN0ZXJzLmgiCisjaW5jbHVkZSAiQWly
U2NhdmVuZ2VSZWdpc3RlcnMuaCIKICNpbmNsdWRlICJBaXJTaW1wbGlmeUNGRy5oIgogI2luY2x1
ZGUgIkFpclNwaWxsRXZlcnl0aGluZy5oIgogI2luY2x1ZGUgIkFpclZhbGlkYXRlLmgiCkBAIC04
MSw5ICs4MywyMyBAQCB2b2lkIHByZXBhcmVGb3JHZW5lcmF0aW9uKENvZGUmIGNvZGUpCiAgICAg
Ly8gRm9yIGRlYnVnZ2luZywgeW91IGNhbiB1c2Ugc3BpbGxFdmVyeXRoaW5nKCkgdG8gcHV0IGV2
ZXJ5dGhpbmcgdG8gdGhlIHN0YWNrIGJldHdlZW4gZWFjaCBJbnN0LgogICAgIGlmIChPcHRpb25z
OjphaXJTcGlsbHNFdmVyeXRoaW5nKCkpCiAgICAgICAgIHNwaWxsRXZlcnl0aGluZyhjb2RlKTsK
LSAgICBlbHNlCisgICAgZWxzZSBpZiAoY29kZS5lbmFibGVSQ1JTKCkpIHsKKyAgICAgICAgb25l
UGFzc0lSQyhjb2RlKTsKKworICAgICAgICBpZiAoT3B0aW9uczo6bG9nQWlyUmVnaXN0ZXJQcmVz
c3VyZSgpKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJSZWdpc3RlciBwcmVzc3VyZSBhZnRlciBv
bmUgcGFzcyBvZiBJUkM6XG4iKTsKKyAgICAgICAgICAgIGxvZ1JlZ2lzdGVyUHJlc3N1cmUoY29k
ZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHNjYXZlbmdlUmVnaXN0ZXJzKGNvZGUp
OworICAgIH0gZWxzZQogICAgICAgICBpdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZyhjb2RlKTsK
IAorICAgIGlmIChPcHRpb25zOjpsb2dBaXJSZWdpc3RlclByZXNzdXJlKCkpIHsKKyAgICAgICAg
ZGF0YUxvZygiUmVnaXN0ZXIgcHJlc3N1cmUgYWZ0ZXIgcmVnaXN0ZXIgYWxsb2NhdGlvbjpcbiIp
OworICAgICAgICBsb2dSZWdpc3RlclByZXNzdXJlKGNvZGUpOworICAgIH0KKwogICAgIGxvd2Vy
QWZ0ZXJSZWdBbGxvYyhjb2RlKTsKIAogICAgIC8vIFByaW9yIHRvIHRoaXMgcG9pbnQgdGhlIHBy
b2xvZ3VlIGFuZCBlcGlsb2d1ZSBpcyBpbXBsaWNpdC4gVGhpcyBtYWtlcyBpdCBleHBsaWNpdC4g
SXQgYWxzbwpAQCAtMTMyLDYgKzE0OCwxNyBAQCB2b2lkIGdlbmVyYXRlKENvZGUmIGNvZGUsIEND
YWxsSGVscGVycyYgCiAgICAgaWYgKGNvZGUuZnJhbWVTaXplKCkpCiAgICAgICAgIGppdC5hZGRQ
dHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLWNvZGUuZnJhbWVTaXplKCkpLCBNYWNyb0Fz
c2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCisgICAgYXV0byBhcmdGb3IgPSBbJl0g
KGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5KSAtPiBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mg
eworICAgICAgICByZXR1cm4gQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBlbnRyeS5vZmZzZXQoKSk7CisgICAgfTsKKyAgICAKKyAgICBmb3IgKGNvbnN0
IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5IDogY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpIHsK
KyAgICAgICAgaWYgKGVudHJ5LnJlZygpLmlzR1BSKCkpCisgICAgICAgICAgICBqaXQuc3RvcmVQ
dHIoZW50cnkucmVnKCkuZ3ByKCksIGFyZ0ZvcihlbnRyeSkpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBqaXQuc3RvcmVEb3VibGUoZW50cnkucmVnKCkuZnByKCksIGFyZ0ZvcihlbnRyeSkp
OworICAgIH0KKwogICAgIEdlbmVyYXRpb25Db250ZXh0IGNvbnRleHQ7CiAgICAgY29udGV4dC5j
b2RlID0gJmNvZGU7CiAgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgQ0NhbGxIZWxwZXJzOjpMYWJl
bD4gYmxvY2tMYWJlbHMoY29kZS5zaXplKCkpOwpAQCAtMTYyLDkgKzE4OSwxNSBAQCB2b2lkIGdl
bmVyYXRlKENvZGUmIGNvZGUsIENDYWxsSGVscGVycyYgCiAgICAgICAgIGlmIChpc1JldHVybihi
bG9jay0+bGFzdCgpLm9wY29kZSkpIHsKICAgICAgICAgICAgIC8vIFdlIGN1cnJlbnRseSBkb24n
dCByZXByZXNlbnQgdGhlIGZ1bGwgcHJvbG9ndWUvZXBpbG9ndWUgaW4gQWlyLCBzbyB3ZSBuZWVk
IHRvCiAgICAgICAgICAgICAvLyBoYXZlIHRoaXMgb3ZlcnJpZGUuCi0gICAgICAgICAgICBpZiAo
Y29kZS5mcmFtZVNpemUoKSkKKyAgICAgICAgICAgIGlmIChjb2RlLmZyYW1lU2l6ZSgpKSB7Cisg
ICAgICAgICAgICAgICAgZm9yIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiBlbnRyeSA6IGNvZGUu
Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChlbnRyeS5y
ZWcoKS5pc0dQUigpKQorICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoYXJnRm9y
KGVudHJ5KSwgZW50cnkucmVnKCkuZ3ByKCkpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZERvdWJsZShhcmdGb3IoZW50cnkpLCBlbnRy
eS5yZWcoKS5mcHIoKSk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGppdC5l
bWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwotICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgfSBl
bHNlCiAgICAgICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlV2l0aEVtcHR5RnJh
bWUoKTsKICAgICAgICAgICAgIGppdC5yZXQoKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxs
ZWVTYXZlcy5jcHAJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsy
OSw2IEBACiAjaWYgRU5BQkxFKEIzX0pJVCkKIAogI2luY2x1ZGUgIkFpckNvZGUuaCIKLSNpbmNs
dWRlICJBaXJJbnNlcnRpb25TZXQuaCIKICNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkFpclBoYXNlU2NvcGUuaCIKIApAQCAtNzEsMzQgKzcwLDYgQEAgdm9pZCBoYW5kbGVD
YWxsZWVTYXZlcyhDb2RlJiBjb2RlKQogICAgIC8vIFRoaXMgaXMgYSBiaXQgd2VpcmQgc2luY2Ug
d2UgY291bGQgaGF2ZSBhbHJlYWR5IHBpbm5lZCBhIGRpZmZlcmVudCBzdGFjayBzbG90IHRvIHRo
aXMKICAgICAvLyBhcmVhLiBBbHNvLCBvdXIgcnVudGltZSBkb2VzIG5vdCByZXF1aXJlIHVzIHRv
IHBpbiB0aGUgc2F2ZXMgYXJlYS4gTWF5YmUgd2Ugc2hvdWxkbid0IHBpbiBpdD8KICAgICBzYXZl
c0FyZWEtPnNldE9mZnNldEZyb21GUCgtYnl0ZVNpemUpOwotCi0gICAgYXV0byBhcmdGb3IgPSBb
Jl0gKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5KSAtPiBBcmcgewotICAgICAgICByZXR1
cm4gQXJnOjpzdGFjayhzYXZlc0FyZWEsIGVudHJ5Lm9mZnNldCgpICsgYnl0ZVNpemUpOwotICAg
IH07Ci0KLSAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KGNvZGUpOwotICAgIAotICAgIC8v
IEZpcnN0IGluc2VydCBzYXZpbmcgY29kZSBpbiB0aGUgcHJvbG9ndWUuCi0gICAgZm9yIChjb25z
dCBSZWdpc3RlckF0T2Zmc2V0JiBlbnRyeSA6IGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVycygpKSB7
Ci0gICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoCi0gICAgICAgICAgICAwLCBlbnRyeS5yZWco
KS5pc0dQUigpID8gTW92ZSA6IE1vdmVEb3VibGUsIGNvZGVbMF0tPmF0KDApLm9yaWdpbiwKLSAg
ICAgICAgICAgIFRtcChlbnRyeS5yZWcoKSksIGFyZ0ZvcihlbnRyeSkpOwotICAgIH0KLSAgICBp
bnNlcnRpb25TZXQuZXhlY3V0ZShjb2RlWzBdKTsKLQotICAgIC8vIE5vdyBpbnNlcnQgcmVzdG9y
ZSBjb2RlIGF0IGVwaWxvZ3Vlcy4KLSAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkg
ewotICAgICAgICBJbnN0JiBsYXN0ID0gYmxvY2stPmxhc3QoKTsKLSAgICAgICAgaWYgKCFpc1Jl
dHVybihsYXN0Lm9wY29kZSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBmb3Ig
KGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5IDogY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJz
KCkpIHsKLSAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoCi0gICAgICAgICAgICAgICAg
YmxvY2stPnNpemUoKSAtIDEsIGVudHJ5LnJlZygpLmlzR1BSKCkgPyBNb3ZlIDogTW92ZURvdWJs
ZSwgbGFzdC5vcmlnaW4sCi0gICAgICAgICAgICAgICAgYXJnRm9yKGVudHJ5KSwgVG1wKGVudHJ5
LnJlZygpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2sp
OwotICAgIH0KIH0KIAogfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgJKHJldmlzaW9uIDE5NTE3NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjIsNiArMTYyLDcgQEAgcHVibGljOgogICAgIC8vCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBh
dXRvLWdlbmVyYXRlZCBieSBvcGNvZGVfZ2VuZXJhdG9yLnJiLgogICAgIGJvb2wgYWRtaXRzU3Rh
Y2sodW5zaWduZWQgYXJnSW5kZXgpOworICAgIGJvb2wgYWRtaXRzU3RhY2soQXJnJik7CiAKICAg
ICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBpbnN0cnVjdGlvbiBjYW4gaGF2ZSBhbnkgZWZmZWN0
cyBvdGhlciB0aGFuIGNvbnRyb2wgZmxvdyBvciBhcmd1bWVudHMuCiAgICAgYm9vbCBoYXNOb25B
cmdOb25Db250cm9sRWZmZWN0cygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJJbnN0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlySW5zdElubGluZXMuaAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgs
NiArMTU4LDExIEBAIGlubGluZSB2b2lkIEluc3Q6OnJlcG9ydFVzZWRSZWdpc3RlcnMoY28KICAg
ICBhcmdzWzBdLnNwZWNpYWwoKS0+cmVwb3J0VXNlZFJlZ2lzdGVycygqdGhpcywgdXNlZFJlZ2lz
dGVycyk7CiB9CiAKK2lubGluZSBib29sIEluc3Q6OmFkbWl0c1N0YWNrKEFyZyYgYXJnKQorewor
ICAgIHJldHVybiBhZG1pdHNTdGFjaygmYXJnIC0gJmFyZ3NbMF0pOworfQorCiBpbmxpbmUgYm9v
bCBpc1NoaWZ0VmFsaWQoY29uc3QgSW5zdCYgaW5zdCkKIHsKICNpZiBDUFUoWDg2KSB8fCBDUFUo
WDg2XzY0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0TWFwLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0TWFwLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RNYXAu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBBaXJJbnN0TWFwX2gKKyNkZWZpbmUgQWly
SW5zdE1hcF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQmFzaWNCbG9j
ay5oIgorI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJCM0luZGV4TWFwLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4KK2NsYXNzIEluc3RNYXAgeworcHVibGljOgorICAgIEluc3RNYXAoQ29kZSYg
Y29kZSkKKyAgICAgICAgOiBtX21hcChjb2RlLnNpemUoKSkKKyAgICB7CisgICAgICAgIGZvciAo
QmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKQorICAgICAgICAgICAgbV9tYXBbYmxvY2tdLnJlc2l6
ZShibG9jay0+c2l6ZSgpKTsKKyAgICB9CisKKyAgICBUJiBhdChCYXNpY0Jsb2NrKiBibG9jaywg
dW5zaWduZWQgaW5zdEluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWFwW2Jsb2NrXVtp
bnN0SW5kZXhdOworICAgIH0KKworICAgIGNvbnN0IFQmIGF0KEJhc2ljQmxvY2sqIGJsb2NrLCB1
bnNpZ25lZCBpbnN0SW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gY29uc3RfY2Fz
dDxJbnN0TWFwKj4odGhpcyktPmdldChibG9jaywgaW5zdEluZGV4KTsKKyAgICB9CisgICAgCitw
cml2YXRlOgorICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIFZlY3RvcjxUPj4gbV9tYXA7Cit9Owor
Cit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQorCisjZW5kaWYgLy8gQWlySW5zdE1hcF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxl
c2NpbmcuY3BwCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjksNyArMjksNiBAQAogI2lmIEVOQUJMRShCM19KSVQpCiAKICNpbmNsdWRlICJBaXJDb2RlLmgi
Ci0jaW5jbHVkZSAiQWlyRml4U3BpbGxTbG90WkRlZi5oIgogI2luY2x1ZGUgIkFpckluc2VydGlv
blNldC5oIgogI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQWlyTGl2ZW5l
c3MuaCIKQEAgLTIzMyw4ICsyMzIsNiBAQCBwcm90ZWN0ZWQ6CiAKICAgICAgICAgaWYgKG1fc3Bp
bGxlZFRtcHMuaXNFbXB0eSgpKQogICAgICAgICAgICAgbV9jb2FsZXNjZWRUbXBzQXRTcGlsbC5j
bGVhcigpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2NvbG9yZWRUbXAuY2xlYXIoKTsK
ICAgICB9CiAKIHByaXZhdGU6CkBAIC0xMDU5LDkgKzEwNTYsMTUgQEAgcHJpdmF0ZToKIAogY2xh
c3MgSXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcgewogcHVibGljOgotICAgIEl0ZXJhdGVkUmVn
aXN0ZXJDb2FsZXNjaW5nKENvZGUmIGNvZGUpCisgICAgZW51bSBNb2RlIHsKKyAgICAgICAgQ2xh
c3NpYywKKyAgICAgICAgT25lUGFzcworICAgIH07CisgICAgCisgICAgSXRlcmF0ZWRSZWdpc3Rl
ckNvYWxlc2NpbmcoQ29kZSYgY29kZSwgTW9kZSBtb2RlKQogICAgICAgICA6IG1fY29kZShjb2Rl
KQogICAgICAgICAsIG1fdXNlQ291bnRzKGNvZGUpCisgICAgICAgICwgbV9tb2RlKG1vZGUpCiAg
ICAgewogICAgIH0KIApAQCAtMTEwNCw3ICsxMTA3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IG1fdG1wV2lkdGgucmVjb21wdXRlKG1fY29kZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IENvbG9yaW5nQWxsb2NhdG9yPHR5cGU+IGFsbG9jYXRvcihtX2NvZGUsIG1fdG1wV2lkdGgsIG1f
dXNlQ291bnRzLCB1bnNwaWxsYWJsZVRtcHMpOwotICAgICAgICAgICAgaWYgKCFhbGxvY2F0b3Iu
cmVxdWlyZXNTcGlsbGluZygpKSB7CisgICAgICAgICAgICBpZiAoIWFsbG9jYXRvci5yZXF1aXJl
c1NwaWxsaW5nKCkgfHwgbV9tb2RlID09IE9uZVBhc3MpIHsKICAgICAgICAgICAgICAgICBhc3Np
Z25SZWdpc3RlcnNUb1RtcChhbGxvY2F0b3IpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgIH0KQEAgLTExMTUsNiArMTExOCwxMCBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRl
PEFyZzo6VHlwZSB0eXBlPgogICAgIHZvaWQgYXNzaWduUmVnaXN0ZXJzVG9UbXAoY29uc3QgQ29s
b3JpbmdBbGxvY2F0b3I8dHlwZT4mIGFsbG9jYXRvcikKICAgICB7CisgICAgICAgIEhhc2hTZXQ8
VG1wPiBzcGlsbGVkOworICAgICAgICBmb3IgKFRtcCB0bXAgOiBhbGxvY2F0b3Iuc3BpbGxlZFRt
cHMoKSkKKyAgICAgICAgICAgIHNwaWxsZWQuYWRkKHRtcCk7CisKICAgICAgICAgZm9yIChCYXNp
Y0Jsb2NrKiBibG9jayA6IG1fY29kZSkgewogICAgICAgICAgICAgLy8gR2l2ZSBUbXAgYSB2YWxp
ZCByZWdpc3Rlci4KICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gMDsgaW5z
dEluZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbnN0SW5kZXgpIHsKQEAgLTExMjQsMTEgKzExMzEs
MTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAvLyBjb21wbGV0ZSByZWdpc3RlciBhbGxv
Y2F0aW9uLiBTbywgd2UgcmVjb3JkIHRoaXMgYmVmb3JlIHN0YXJ0aW5nLgogICAgICAgICAgICAg
ICAgIGJvb2wgbWF5QmVDb2FsZXNjYWJsZSA9IGFsbG9jYXRvci5tYXlCZUNvYWxlc2NhYmxlKGlu
c3QpOwogCi0gICAgICAgICAgICAgICAgLy8gT24gWDg2XzY0LCBNb3ZlMzIgaXMgY2hlYXBlciBp
ZiB3ZSBrbm93IHRoYXQgaXQncyBlcXVpdmFsZW50IHRvIGEgTW92ZS4gSXQncworICAgICAgICAg
ICAgICAgIC8vIE1vdmUzMiBpcyBjaGVhcGVyIGlmIHdlIGtub3cgdGhhdCBpdCdzIGVxdWl2YWxl
bnQgdG8gYSBNb3ZlLiBJdCdzCiAgICAgICAgICAgICAgICAgLy8gZXF1aXZhbGVudCBpZiB0aGUg
ZGVzdGluYXRpb24ncyBoaWdoIGJpdHMgYXJlIG5vdCBvYnNlcnZhYmxlIG9yIGlmIHRoZSBzb3Vy
Y2UncyBoaWdoCiAgICAgICAgICAgICAgICAgLy8gYml0cyBhcmUgYWxsIHplcm8uIE5vdGUgdGhh
dCB3ZSBkb24ndCBoYXZlIHRoZSBvcHBvc2l0ZSBvcHRpbWl6YXRpb24gZm9yIG90aGVyCiAgICAg
ICAgICAgICAgICAgLy8gYXJjaGl0ZWN0dXJlcywgd2hpY2ggbWF5IHByZWZlciBNb3ZlIG92ZXIg
TW92ZTMyLCBiZWNhdXNlIE1vdmUgaXMgY2Fub25pY2FsIGFscmVhZHkuCi0gICAgICAgICAgICAg
ICAgaWYgKHR5cGUgPT0gQXJnOjpHUCAmJiBvcHRpbWl6ZUZvclg4Nl82NCgpICYmIGluc3Qub3Bj
b2RlID09IE1vdmUKKyAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBBcmc6OkdQICYmIGluc3Qu
b3Bjb2RlID09IE1vdmUKICAgICAgICAgICAgICAgICAgICAgJiYgaW5zdC5hcmdzWzBdLmlzVG1w
KCkgJiYgaW5zdC5hcmdzWzFdLmlzVG1wKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKG1f
dG1wV2lkdGgudXNlV2lkdGgoaW5zdC5hcmdzWzFdLnRtcCgpKSA8PSBBcmc6OldpZHRoMzIKICAg
ICAgICAgICAgICAgICAgICAgICAgIHx8IG1fdG1wV2lkdGguZGVmV2lkdGgoaW5zdC5hcmdzWzBd
LnRtcCgpKSA8PSBBcmc6OldpZHRoMzIpCkBAIC0xMTM2LDcgKzExNDMsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcEZhc3Qo
WyZdIChUbXAmIHRtcCkgewotICAgICAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkgfHwg
dG1wLmlzR1AoKSA9PSAodHlwZSAhPSBBcmc6OkdQKSkKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHRtcC5pc1JlZygpIHx8IHRtcC5pc0dQKCkgPT0gKHR5cGUgIT0gQXJnOjpHUCkgfHwgc3BpbGxl
ZC5jb250YWlucyh0bXApKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAg
ICAgICAgICAgICAgICAgIFRtcCBhbGlhc1RtcCA9IGFsbG9jYXRvci5nZXRBbGlhcyh0bXApOwpA
QCAtMTE2OCw3ICsxMTc1LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFkZFNwaWxsQW5kRmlsbChj
b25zdCBDb2xvcmluZ0FsbG9jYXRvcjx0eXBlPiYgYWxsb2NhdG9yLCBIYXNoU2V0PHVuc2lnbmVk
PiYgdW5zcGlsbGFibGVUbXBzKQogICAgIHsKICAgICAgICAgSGFzaE1hcDxUbXAsIFN0YWNrU2xv
dCo+IHN0YWNrU2xvdHM7Ci0gICAgICAgIHVuc2lnbmVkIG5ld1N0YWNrU2xvdFRocmVzaG9sZCA9
IG1fY29kZS5zdGFja1Nsb3RzKCkuc2l6ZSgpOwogICAgICAgICBmb3IgKFRtcCB0bXAgOiBhbGxv
Y2F0b3Iuc3BpbGxlZFRtcHMoKSkgewogICAgICAgICAgICAgLy8gQWxsIHRoZSBzcGlsbGVkIHZh
bHVlcyBiZWNvbWUgdW5zcGlsbGFibGUuCiAgICAgICAgICAgICB1bnNwaWxsYWJsZVRtcHMuYWRk
KEFic29sdXRlVG1wTWFwcGVyPHR5cGU+OjphYnNvbHV0ZUluZGV4KHRtcCkpOwpAQCAtMTIwMiwx
NiArMTIwOCwxOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
ICAgIC8vIFRyeSB0byByZXBsYWNlIHRoZSByZWdpc3RlciB1c2UgYnkgbWVtb3J5IHVzZSB3aGVu
IHBvc3NpYmxlLgotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnN0
LmFyZ3Muc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgQXJnJiBhcmcgPSBpbnN0
LmFyZ3NbaV07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhcmcuaXNUbXAoKSAmJiBhcmcudHlw
ZSgpID09IHR5cGUgJiYgIWFyZy5pc1JlZygpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBh
dXRvIHN0YWNrU2xvdEVudHJ5ID0gc3RhY2tTbG90cy5maW5kKGFyZy50bXAoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoc3RhY2tTbG90RW50cnkgIT0gc3RhY2tTbG90cy5lbmQoKSAm
JiBpbnN0LmFkbWl0c1N0YWNrKGkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJn
ID0gQXJnOjpzdGFjayhzdGFja1Nsb3RFbnRyeS0+dmFsdWUpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRpZFNwaWxsID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpbnN0LmZvckVhY2hB
cmcoCisgICAgICAgICAgICAgICAgICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSwgQXJnOjpU
eXBlIGFyZ1R5cGUsIEFyZzo6V2lkdGggd2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChhcmcuaXNUbXAoKSAmJiBhcmdUeXBlID09IHR5cGUgJiYgIWFyZy5pc1JlZygpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBzdGFja1Nsb3RFbnRyeSA9IHN0YWNrU2xv
dHMuZmluZChhcmcudG1wKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFj
a1Nsb3RFbnRyeSAhPSBzdGFja1Nsb3RzLmVuZCgpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICYmIGluc3QuYWRtaXRzU3RhY2soYXJnKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGFja1Nsb3RFbnRyeS0+dmFsdWUtPmVuc3VyZVNpemUoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZU1vdmUzMklmRGlkU3BpbGwgPyA0IDogQXJn
OjpieXRlcyh3aWR0aCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBB
cmc6OnN0YWNrKHN0YWNrU2xvdEVudHJ5LT52YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRpZFNwaWxsID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0pOwogCiAgICAgICAgICAgICAgICAg
aWYgKGRpZFNwaWxsICYmIGZvcmNlTW92ZTMySWZEaWRTcGlsbCkKICAgICAgICAgICAgICAgICAg
ICAgaW5zdC5vcGNvZGUgPSBNb3ZlMzI7CkBAIC0xMjYyLDE3ICsxMjcxLDEyIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLQotICAgICAg
ICBmaXhTcGlsbFNsb3RaRGVmKAotICAgICAgICAgICAgbV9jb2RlLAotICAgICAgICAgICAgWyZd
IChTdGFja1Nsb3QqIHN0YWNrU2xvdCkgLT4gYm9vbCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHN0YWNrU2xvdC0+aW5kZXgoKSA+PSBuZXdTdGFja1Nsb3RUaHJlc2hvbGQ7Ci0gICAgICAgICAg
ICB9KTsKICAgICB9CiAKICAgICBDb2RlJiBtX2NvZGU7CiAgICAgVG1wV2lkdGggbV90bXBXaWR0
aDsKICAgICBVc2VDb3VudHM8VG1wPiBtX3VzZUNvdW50czsKKyAgICBNb2RlIG1fbW9kZTsKICAg
ICB1bnNpZ25lZCBtX251bUl0ZXJhdGlvbnMgeyAwIH07CiB9OwogCkBAIC0xMjgyLDcgKzEyODYs
MTUgQEAgdm9pZCBpdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZyhDb2RlJiBjbwogewogICAgIFBo
YXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAiaXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmciKTsK
IAotICAgIEl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nIGl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNj
aW5nKGNvZGUpOworICAgIEl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nIGl0ZXJhdGVkUmVnaXN0
ZXJDb2FsZXNjaW5nKGNvZGUsIEl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nOjpDbGFzc2ljKTsK
KyAgICBpdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5ydW4oKTsKK30KKwordm9pZCBvbmVQYXNz
SVJDKENvZGUmIGNvZGUpCit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJvbmVQ
YXNzSVJDIik7CisKKyAgICBJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZyBpdGVyYXRlZFJlZ2lz
dGVyQ29hbGVzY2luZyhjb2RlLCBJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZzo6T25lUGFzcyk7
CiAgICAgaXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcucnVuKCk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckl0ZXJhdGVkUmVn
aXN0ZXJDb2FsZXNjaW5nLmgJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuaAkod29ya2luZyBjb3B5
KQpAQCAtMzYsNiArMzYsMTAgQEAgY2xhc3MgQ29kZTsKIC8vIGh0dHA6Ly93d3cuY3MuY211LmVk
dS9hZnMvY3MvYWNhZGVtaWMvY2xhc3MvMTU3NDUtczA3L3d3dy9wYXBlcnMvZ2VvcmdlLnBkZgog
dm9pZCBpdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZyhDb2RlJik7CiAKKy8vIFRoaXMgaXMgYSBt
b2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBhbGdvcml0aG0gdGhhdCBwZXJmb3JtcyBqdXN0IG9uZSBp
dGVyYXRpb24gYW5kIGxlYXZlcyAic3BpbGxlZCIKKy8vIFRtcHMgYXMgbm9uLVJlZyBUbXBzLgor
dm9pZCBvbmVQYXNzSVJDKENvZGUmKTsKKwogfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFp
cgogCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyTGl2ZW5lc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJMaXZlbmVzcy5oIgorCisjaWYgRU5BQkxF
KEIzX0pJVCkKKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOjpB
aXI7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBLaWxsTW9kZSBraWxs
TW9kZSkKK3sKKyAgICBzd2l0Y2ggKGtpbGxNb2RlKSB7CisgICAgY2FzZSBLaWxsTW9kZTo6RE9B
RWFybHlEZWZJbk5leHRJbnN0OgorICAgICAgICBvdXQucHJpbnQoIkRPQUVhcmx5RGVmSW5OZXh0
SW5zdCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBLaWxsTW9kZTo6RE9BTGF0ZURlZjoK
KyAgICAgICAgb3V0LnByaW50KCJET0FMYXRlRGVmIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIEtpbGxNb2RlOjpFYXJseVVzZUtpbGw6CisgICAgICAgIG91dC5wcmludCgiRWFybHlVc2VL
aWxsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEtpbGxNb2RlOjpMYXRlVXNlSW5QcmV2
SW5zdEtpbGw6CisgICAgICAgIG91dC5wcmludCgiTGF0ZVVzZUluUHJldkluc3RLaWxsIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmgJKHJldmlz
aW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3Mu
aAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShCM19KSVQpCiAK
ICNpbmNsdWRlICJBaXJCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQWlyQ29kZS5oIgogI2luY2x1
ZGUgIkFpckluc3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQWlyVG1wSW5saW5lcy5oIgogI2luY2x1
ZGUgIkIzSW5kZXhNYXAuaCIKQEAgLTkyLDEwICs5MywxOSBAQCBzdHJ1Y3QgUmVnTGl2ZW5lc3NB
ZGFwdGVyIHsKICAgICBSZWcgaW5kZXhUb1ZhbHVlKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBS
ZWc6OmZyb21JbmRleChpbmRleCk7IH0KIH07CiAKK2VudW0gY2xhc3MgS2lsbE1vZGUgOiBpbnQ4
X3QgeworICAgIERPQUVhcmx5RGVmSW5OZXh0SW5zdCwKKyAgICBET0FMYXRlRGVmLAorICAgIEVh
cmx5VXNlS2lsbCwKKyAgICBMYXRlVXNlSW5QcmV2SW5zdEtpbGwKK307CisKIHRlbXBsYXRlPHR5
cGVuYW1lIEFkYXB0ZXI+Ci1jbGFzcyBBYnN0cmFjdExpdmVuZXNzIDogcHJpdmF0ZSBBZGFwdGVy
IHsKK2NsYXNzIEFic3RyYWN0TGl2ZW5lc3MgOiBwdWJsaWMgQWRhcHRlciB7CiAgICAgc3RydWN0
IFdvcmtzZXQ7CiBwdWJsaWM6CisgICAgdHlwZWRlZiB0eXBlbmFtZSBBZGFwdGVyOjpUaGluZyBU
aGluZzsKKyAgICAKICAgICBBYnN0cmFjdExpdmVuZXNzKENvZGUmIGNvZGUpCiAgICAgICAgIDog
QWRhcHRlcihjb2RlKQogICAgICAgICAsIG1fd29ya3NldChBZGFwdGVyOjptYXhJbmRleChjb2Rl
KSkKQEAgLTIyMiw2ICsyMzIsMTEgQEAgcHVibGljOgogCiAgICAgICAgICAgICBJdGVyYXRvciBi
ZWdpbigpIGNvbnN0IHsgcmV0dXJuIEl0ZXJhdG9yKG1fbGl2ZW5lc3MsIG1fbGl2ZW5lc3MubV93
b3Jrc2V0LmJlZ2luKCkpOyB9CiAgICAgICAgICAgICBJdGVyYXRvciBlbmQoKSBjb25zdCB7IHJl
dHVybiBJdGVyYXRvcihtX2xpdmVuZXNzLCBtX2xpdmVuZXNzLm1fd29ya3NldC5lbmQoKSk7IH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgYm9vbCBjb250YWlucyhjb25zdCB0eXBlbmFtZSBB
ZGFwdGVyOjpUaGluZyYgdGhpbmcpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIG1fbGl2ZW5lc3MubV93b3Jrc2V0LmNvbnRhaW5zKEFkYXB0ZXI6OnZhbHVlVG9J
bmRleCh0aGluZykpOworICAgICAgICAgICAgfQogCiAgICAgICAgIHByaXZhdGU6CiAgICAgICAg
ICAgICBBYnN0cmFjdExpdmVuZXNzJiBtX2xpdmVuZXNzOwpAQCAtMjMyLDcgKzI0NywxNiBAQCBw
dWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gSXRlcmFibGUobV9saXZlbmVzcyk7CiAgICAgICAg
IH0KIAotICAgICAgICB2b2lkIGV4ZWN1dGUodW5zaWduZWQgaW5zdEluZGV4KQorICAgICAgICBi
b29sIGlzTGl2ZShjb25zdCB0eXBlbmFtZSBBZGFwdGVyOjpUaGluZyYgdGhpbmcpIGNvbnN0Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBsaXZlKCkuY29udGFpbnModGhpbmcpOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gQ2FsbHMgdGhlIGtpbGwgY2FsbGJhY2sgd2l0aCB0aGUga2ls
bHMgYW5kIGRlc2NyaXB0aW9ucyBvZiBob3cgdGhleSBnb3Qga2lsbGVkLiBBbHNvCisgICAgICAg
IC8vIHBhc3NlcyB0aGUgaW50ZXJuYWwgaW5kZXggb2YgdGhlIHRoaW5nIGJlaW5nIGtpbGxlZCwg
aWYgeW91IHdhbnQgdG8gdXNlIGluZGV4LWJhc2VkCisgICAgICAgIC8vIGxpdmVuZXNzLgorICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLaWxsQ2FsbGJhY2s+CisgICAgICAgIHZvaWQgZXhlY3V0
ZSh1bnNpZ25lZCBpbnN0SW5kZXgsIGNvbnN0IEtpbGxDYWxsYmFjayYga2lsbENhbGxiYWNrKQog
ICAgICAgICB7CiAgICAgICAgICAgICBJbnN0JiBpbnN0ID0gbV9ibG9jay0+YXQoaW5zdEluZGV4
KTsKICAgICAgICAgICAgIGF1dG8mIHdvcmtzZXQgPSBtX2xpdmVuZXNzLm1fd29ya3NldDsKQEAg
LTI0MiwyMyArMjY2LDMyIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBJbnN0JiBuZXh0SW5z
dCA9IG1fYmxvY2stPmF0KGluc3RJbmRleCArIDEpOwogICAgICAgICAgICAgICAgIG5leHRJbnN0
LmZvckVhY2g8dHlwZW5hbWUgQWRhcHRlcjo6VGhpbmc+KAogICAgICAgICAgICAgICAgICAgICBb
Jl0gKHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nJiB0aGluZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6
VHlwZSB0eXBlLCBBcmc6OldpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJn
Ojppc0Vhcmx5RGVmKHJvbGUpICYmIEFkYXB0ZXI6OmFjY2VwdHNUeXBlKHR5cGUpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHdvcmtzZXQucmVtb3ZlKEFkYXB0ZXI6OnZhbHVlVG9JbmRl
eCh0aGluZykpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNFYXJseURlZihy
b2xlKSAmJiBBZGFwdGVyOjphY2NlcHRzVHlwZSh0eXBlKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gQWRhcHRlcjo6dmFsdWVUb0luZGV4KHRoaW5nKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXdvcmtzZXQucmVtb3ZlKGluZGV4KSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2lsbENhbGxiYWNrKGluZGV4LCB0aGlu
ZywgS2lsbE1vZGU6OkRPQUVhcmx5RGVmSW5OZXh0SW5zdCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgCiAgICAgICAgICAgICAvLyBUaGVuIGhhbmRsZSBkZWYncy4KICAgICAgICAgICAgIGluc3Qu
Zm9yRWFjaDx0eXBlbmFtZSBBZGFwdGVyOjpUaGluZz4oCiAgICAgICAgICAgICAgICAgWyZdICh0
eXBlbmFtZSBBZGFwdGVyOjpUaGluZyYgdGhpbmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUg
dHlwZSwgQXJnOjpXaWR0aCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0xhdGVE
ZWYocm9sZSkgJiYgQWRhcHRlcjo6YWNjZXB0c1R5cGUodHlwZSkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICB3b3Jrc2V0LnJlbW92ZShBZGFwdGVyOjp2YWx1ZVRvSW5kZXgodGhpbmcpKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNMYXRlRGVmKHJvbGUpICYmIEFkYXB0ZXI6OmFj
Y2VwdHNUeXBlKHR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRl
eCA9IEFkYXB0ZXI6OnZhbHVlVG9JbmRleCh0aGluZyk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIXdvcmtzZXQucmVtb3ZlKGluZGV4KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBraWxsQ2FsbGJhY2soaW5kZXgsIHRoaW5nLCBLaWxsTW9kZTo6RE9BTGF0ZURlZik7CisgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9KTsKIAogICAgICAgICAgICAgLy8g
VGhlbiBoYW5kbGUgdXNlJ3MuCiAgICAgICAgICAgICBpbnN0LmZvckVhY2g8dHlwZW5hbWUgQWRh
cHRlcjo6VGhpbmc+KAogICAgICAgICAgICAgICAgIFsmXSAodHlwZW5hbWUgQWRhcHRlcjo6VGhp
bmcmIHRoaW5nLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIHR5cGUsIEFyZzo6V2lkdGgpIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNFYXJseVVzZShyb2xlKSAmJiBBZGFwdGVy
OjphY2NlcHRzVHlwZSh0eXBlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtzZXQuYWRk
KEFkYXB0ZXI6OnZhbHVlVG9JbmRleCh0aGluZykpOworICAgICAgICAgICAgICAgICAgICBpZiAo
QXJnOjppc0Vhcmx5VXNlKHJvbGUpICYmIEFkYXB0ZXI6OmFjY2VwdHNUeXBlKHR5cGUpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IEFkYXB0ZXI6OnZhbHVlVG9J
bmRleCh0aGluZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAod29ya3NldC5hZGQoaW5k
ZXgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbGxDYWxsYmFjayhpbmRleCwgdGhp
bmcsIEtpbGxNb2RlOjpFYXJseVVzZUtpbGwpOworICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgfSk7CiAKICAgICAgICAgICAgIC8vIEFuZCBmaW5hbGx5LCBoYW5kbGUgdGhl
IGxhdGUgdXNlJ3Mgb2YgdGhlIHByZXZpb3VzIGluc3RydWN0aW9uLgpAQCAtMjY2LDE3ICsyOTks
MzIgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIEluc3QmIHByZXZJbnN0ID0gbV9ibG9jay0+
YXQoaW5zdEluZGV4IC0gMSk7CiAgICAgICAgICAgICAgICAgcHJldkluc3QuZm9yRWFjaDx0eXBl
bmFtZSBBZGFwdGVyOjpUaGluZz4oCiAgICAgICAgICAgICAgICAgICAgIFsmXSAodHlwZW5hbWUg
QWRhcHRlcjo6VGhpbmcmIHRoaW5nLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIHR5cGUsIEFy
Zzo6V2lkdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzTGF0ZVVzZShy
b2xlKSAmJiBBZGFwdGVyOjphY2NlcHRzVHlwZSh0eXBlKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3b3Jrc2V0LmFkZChBZGFwdGVyOjp2YWx1ZVRvSW5kZXgodGhpbmcpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzTGF0ZVVzZShyb2xlKSAmJiBBZGFwdGVyOjph
Y2NlcHRzVHlwZSh0eXBlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGluZGV4ID0gQWRhcHRlcjo6dmFsdWVUb0luZGV4KHRoaW5nKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAod29ya3NldC5hZGQoaW5kZXgpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBraWxsQ2FsbGJhY2soaW5kZXgsIHRoaW5nLCBLaWxsTW9kZTo6TGF0ZVVzZUlu
UHJldkluc3RLaWxsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgfSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAorICAgICAgICB2b2lkIGV4ZWN1
dGUodW5zaWduZWQgaW5zdEluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICBleGVjdXRlKAor
ICAgICAgICAgICAgICAgIGluc3RJbmRleCwKKyAgICAgICAgICAgICAgICBbXSAodW5zaWduZWQs
IGNvbnN0IHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nJiwgS2lsbE1vZGUpIHsgfSk7CisgICAgICAg
IH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIEFic3RyYWN0TGl2ZW5lc3MmIG1fbGl2ZW5lc3M7
CiAgICAgICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CiAgICAgfTsKIAorICAgIGNvbnN0IFZlY3Rv
cjx1bnNpZ25lZD4mIHJhd0xpdmVBdEhlYWQoQmFzaWNCbG9jayogYmxvY2spCisgICAgeworICAg
ICAgICByZXR1cm4gbV9saXZlQXRIZWFkW2Jsb2NrXTsKKyAgICB9CisKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBVbmRlcmx5aW5nSXRlcmFibGU+CiAgICAgY2xhc3MgSXRlcmFibGUgewogICAgIHB1
YmxpYzoKQEAgLTMzMCw2ICszNzgsMTEgQEAgcHVibGljOgogICAgICAgICBpdGVyYXRvciBiZWdp
bigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKG1fbGl2ZW5lc3MsIG1faXRlcmFibGUuYmVnaW4o
KSk7IH0KICAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9s
aXZlbmVzcywgbV9pdGVyYWJsZS5lbmQoKSk7IH0KIAorICAgICAgICBib29sIGNvbnRhaW5zKGNv
bnN0IHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nJiB0aGluZykgY29uc3QKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIG1fbGl2ZW5lc3MubV93b3Jrc2V0LmNvbnRhaW5zKEFkYXB0ZXI6OnZh
bHVlVG9JbmRleCh0aGluZykpOworICAgICAgICB9CisKICAgICBwcml2YXRlOgogICAgICAgICBB
YnN0cmFjdExpdmVuZXNzJiBtX2xpdmVuZXNzOwogICAgICAgICBjb25zdCBVbmRlcmx5aW5nSXRl
cmFibGUmIG1faXRlcmFibGU7CkBAIC0zNDUsNiArMzk4LDggQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gSXRlcmFibGU8dHlwZW5hbWUgQWRhcHRlcjo6SW5kZXhTZXQ+KCp0aGlzLCBtX2xpdmVB
dFRhaWxbYmxvY2tdKTsKICAgICB9CiAKKyAgICBJbmRleFNwYXJzZVNldDxVbnNhZmVWZWN0b3JP
dmVyZmxvdz4mIHdvcmtzZXQoKSB7IHJldHVybiBtX3dvcmtzZXQ7IH0KKwogcHJpdmF0ZToKICAg
ICBmcmllbmQgY2xhc3MgTG9jYWxDYWxjOwogICAgIGZyaWVuZCBzdHJ1Y3QgTG9jYWxDYWxjOjpJ
dGVyYWJsZTsKQEAgLTM2NCw2ICs0MTksMTIgQEAgdHlwZWRlZiBBYnN0cmFjdExpdmVuZXNzPFJl
Z0xpdmVuZXNzQWRhcAogCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCiAKK25hbWVz
cGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpB
aXI6OktpbGxNb2RlKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKICNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQogCiAjZW5kaWYgLy8gQWlyTGl2ZW5lc3NfaApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJMb2dSZWdpc3RlclByZXNzdXJlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxvZ1JlZ2lzdGVyUHJlc3N1cmUuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb2dSZWdpc3Rl
clByZXNzdXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJBaXJMb2dSZWdpc3RlclByZXNzdXJlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisj
aW5jbHVkZSAiQWlyTGl2ZW5lc3MuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIGxvZ1JlZ2lzdGVyUHJlc3N1cmUoQ29kZSYgY29kZSkK
K3sKKyAgICBjb25zdCB1bnNpZ25lZCB0b3RhbENvbHVtbnMgPSAyMDA7CisgICAgY29uc3QgdW5z
aWduZWQgcmVnaXN0ZXJDb2x1bW5zID0gMTAwOworICAgIAorICAgIFJlZ0xpdmVuZXNzIGxpdmVu
ZXNzKGNvZGUpOworCisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAg
ICAgUmVnTGl2ZW5lc3M6OkxvY2FsQ2FsYyBsb2NhbENhbGMobGl2ZW5lc3MsIGJsb2NrKTsKKwor
ICAgICAgICBibG9jay0+ZHVtcEhlYWRlcihXVEY6OmRhdGFGaWxlKCkpOworCisgICAgICAgIFZl
Y3RvcjxDU3RyaW5nPiBpbnN0RHVtcHM7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4
ID0gYmxvY2stPnNpemUoKTsgaW5zdEluZGV4LS07KSB7CisgICAgICAgICAgICBJbnN0JiBpbnN0
ID0gYmxvY2stPmF0KGluc3RJbmRleCk7CisgICAgICAgICAgICBJbnN0KiBwcmV2SW5zdCA9IGJs
b2NrLT5nZXQoaW5zdEluZGV4IC0gMSk7CisKKyAgICAgICAgICAgIGxvY2FsQ2FsYy5leGVjdXRl
KGluc3RJbmRleCk7CisKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHNldDsKKyAgICAgICAgICAg
IHNldC5zZXRBbGwobG9jYWxDYWxjLmxpdmUoKSk7CisgICAgICAgICAgICBJbnN0Ojpmb3JFYWNo
RGVmV2l0aEV4dHJhQ2xvYmJlcmVkUmVnczxSZWc+KAorICAgICAgICAgICAgICAgIHByZXZJbnN0
LCAmaW5zdCwKKyAgICAgICAgICAgICAgICBbJl0gKFJlZyByZWcsIEFyZzo6Um9sZSwgQXJnOjpU
eXBlLCBBcmc6OldpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgIHNldC5zZXQocmVnKTsKKyAg
ICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgU3RyaW5nUHJpbnRTdHJlYW0gaW5zdE91
dDsKKyAgICAgICAgICAgIFN0cmluZ1ByaW50U3RyZWFtIGxpbmVPdXQ7CisgICAgICAgICAgICBs
aW5lT3V0LnByaW50KCIgICAiKTsKKyAgICAgICAgICAgIGlmIChzZXQubnVtYmVyT2ZTZXRSZWdp
c3RlcnMoKSkgeworICAgICAgICAgICAgICAgIHNldC5mb3JFYWNoKAorICAgICAgICAgICAgICAg
ICAgICBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIENTdHJpbmcgdGV4
dCA9IHRvQ1N0cmluZygiICIsIHJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4
dC5sZW5ndGgoKSArIGxpbmVPdXQubGVuZ3RoKCkgPiB0b3RhbENvbHVtbnMpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnN0T3V0LnByaW50KGxpbmVPdXQudG9DU3RyaW5nKCksICJc
biIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVPdXQucmVzZXQoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsaW5lT3V0LnByaW50KCIgICAgICAgIik7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lT3V0LnByaW50
KHRleHQpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBsaW5lT3V0
LnByaW50KCI6Iik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobGluZU91dC5sZW5n
dGgoKSA+IHJlZ2lzdGVyQ29sdW1ucykgeworICAgICAgICAgICAgICAgIGluc3RPdXQucHJpbnQo
bGluZU91dC50b0NTdHJpbmcoKSwgIlxuIik7CisgICAgICAgICAgICAgICAgbGluZU91dC5yZXNl
dCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgd2hpbGUgKGxpbmVPdXQubGVuZ3RoKCkg
PCByZWdpc3RlckNvbHVtbnMpCisgICAgICAgICAgICAgICAgbGluZU91dC5wcmludCgiICIpOwor
ICAgICAgICAgICAgbGluZU91dC5wcmludCgiICIpOworICAgICAgICAgICAgbGluZU91dC5wcmlu
dChpbnN0KTsKKyAgICAgICAgICAgIGluc3RPdXQucHJpbnQobGluZU91dC50b0NTdHJpbmcoKSwg
IlxuIik7CisgICAgICAgICAgICBpbnN0RHVtcHMuYXBwZW5kKGluc3RPdXQudG9DU3RyaW5nKCkp
OworICAgICAgICB9CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gaW5zdER1bXBzLnNpemUo
KTsgaS0tOykKKyAgICAgICAgICAgIGRhdGFMb2coaW5zdER1bXBzW2ldKTsKKyAgICAgICAgCisg
ICAgICAgIGJsb2NrLT5kdW1wRm9vdGVyKFdURjo6ZGF0YUZpbGUoKSk7CisgICAgfQorfQorCit9
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxvZ1JlZ2lzdGVyUHJl
c3N1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxv
Z1JlZ2lzdGVyUHJlc3N1cmUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIEFpckxvZ1JlZ2lzdGVyUHJlc3N1cmVfaAorI2RlZmluZSBBaXJMb2dSZWdpc3RlclBy
ZXNzdXJlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKworLy8gRHVtcHMgdGhlIHJl
Z2lzdGVycyB0aGF0IGFyZSB1c2VkIGF0IGVhY2ggaW5zdHJ1Y3Rpb24uCit2b2lkIGxvZ1JlZ2lz
dGVyUHJlc3N1cmUoQ29kZSYpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyTG9nUmVnaXN0ZXJQcmVz
c3VyZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3B0aW1pemVC
bG9ja09yZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0Fpck9wdGltaXplQmxvY2tPcmRlci5jcHAJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3B0aW1pemVCbG9ja09yZGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC03MywxMCArNzMsOCBAQCBwcml2YXRlOgogCiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UK
IAotdm9pZCBvcHRpbWl6ZUJsb2NrT3JkZXIoQ29kZSYgY29kZSkKK1ZlY3RvcjxCYXNpY0Jsb2Nr
Kj4gYmxvY2tzSW5PcHRpbWl6ZWRPcmRlcihDb2RlJiBjb2RlKQogewotICAgIFBoYXNlU2NvcGUg
cGhhc2VTY29wZShjb2RlLCAib3B0aW1pemVCbG9ja09yZGVyIik7Ci0KICAgICBWZWN0b3I8QmFz
aWNCbG9jayo+IGJsb2Nrc0luT3JkZXI7CiAKICAgICBCbG9ja1dvcmtsaXN0IGZhc3RXb3JrbGlz
dDsKQEAgLTExMyw2ICsxMTEsMTUgQEAgdm9pZCBvcHRpbWl6ZUJsb2NrT3JkZXIoQ29kZSYgY29k
ZSkKICAgICBBU1NFUlQoZmFzdFdvcmtsaXN0LmlzRW1wdHkoKSk7CiAgICAgQVNTRVJUKHNsb3dX
b3JrbGlzdC5pc0VtcHR5KCkpOwogCisgICAgcmV0dXJuIGJsb2Nrc0luT3JkZXI7Cit9CisKK3Zv
aWQgb3B0aW1pemVCbG9ja09yZGVyKENvZGUmIGNvZGUpCit7CisgICAgUGhhc2VTY29wZSBwaGFz
ZVNjb3BlKGNvZGUsICJvcHRpbWl6ZUJsb2NrT3JkZXIiKTsKKworICAgIFZlY3RvcjxCYXNpY0Js
b2NrKj4gYmxvY2tzSW5PcmRlciA9IGJsb2Nrc0luT3B0aW1pemVkT3JkZXIoY29kZSk7CisgICAg
CiAgICAgLy8gUGxhY2UgYmxvY2tzIGludG8gQ29kZSdzIGJsb2NrIGxpc3QgYWNjb3JkaW5nIHRv
IHRoZSBvcmRlcmluZyBpbiBibG9ja3NJbk9yZGVyLiBXZSBkbyB0aGlzIGJ5IGxlYWtpbmcKICAg
ICAvLyBhbGwgb2YgdGhlIGJsb2NrcyBhbmQgdGhlbiByZWFkb3B0aW5nIHRoZW0uCiAgICAgZm9y
IChhdXRvJiBlbnRyeSA6IGNvZGUuYmxvY2tMaXN0KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpck9wdGltaXplQmxvY2tPcmRlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3B0aW1pemVCbG9ja09yZGVyLmgJKHJldmlzaW9u
IDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3B0aW1pemVCbG9j
a09yZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsMTAgKzI4LDE4IEBACiAKICNpZiBFTkFCTEUoQjNf
SklUKQogCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CiAKK2NsYXNzIEJhc2ljQmxvY2s7CiBjbGFzcyBDb2Rl
OwogCisvLyBSZXR1cm5zIGEgbGlzdCBvZiBibG9ja3Mgc29ydGVkIGFjY29yZGluZyB0byB3aGF0
IHdvdWxkIGJlIHRoZSBjdXJyZW50IG9wdGltYWwgb3JkZXIuIFRoaXMgc2hhcmVzCisvLyBzb21l
IHByb3BlcnRpZXMgd2l0aCBhIHByZS1vcmRlciB0cmF2ZXJzYWwuIEluIHBhcnRpY3VsYXIsIGVh
Y2ggYmxvY2sgd2lsbCBhcHBlYXIgYWZ0ZXIgYXQgbGVhc3QKKy8vIG9uZSBvZiBpdHMgcHJlZGVj
ZXNzb3JzLgorVmVjdG9yPEJhc2ljQmxvY2sqPiBibG9ja3NJbk9wdGltaXplZE9yZGVyKENvZGUm
KTsKKwogLy8gUmVvcmRlcnMgdGhlIGJhc2ljIGJsb2NrcyB0byBrZWVwIGhvdCBibG9ja3MgYXQg
dGhlIHRvcCwgYW5kIG1heGltaXplIHRoZSBsaWtlbGlob29kIHRoYXQgYSBmcmVxdWVudGx5CiAv
LyB0YWtlbiBlZGdlIGlzIGp1c3QgYSBmYWxsLXRocm91Z2guCiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyUmVwb3J0VXNlZFJlZ2lzdGVycy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZXBvcnRVc2VkUmVnaXN0ZXJzLmNw
cAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJS
ZXBvcnRVc2VkUmVnaXN0ZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsMzIgQEAg
dm9pZCByZXBvcnRVc2VkUmVnaXN0ZXJzKENvZGUmIGNvZGUpCiAKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTspIHsKICAgICAgICAg
ICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKKworICAgICAgICAgICAgLy8g
S2lsbCBkZWFkIGFzc2lnbm1lbnRzIHRvIHJlZ2lzdGVycy4gRm9yIHNpbXBsaWNpdHkgd2Ugc2F5
IHRoYXQgYSBzdG9yZSBpcyBraWxsYWJsZSBpZgorICAgICAgICAgICAgLy8gaXQgaGFzIG9ubHkg
bGF0ZSBkZWZzIGFuZCB0aG9zZSBsYXRlIGRlZnMgYXJlIHRvIHJlZ2lzdGVycyB0aGF0IGFyZSBk
ZWFkIHJpZ2h0IG5vdy4KKyAgICAgICAgICAgIGlmICghaW5zdC5oYXNOb25BcmdFZmZlY3RzKCkp
IHsKKyAgICAgICAgICAgICAgICBib29sIGNhbkRlbGV0ZSA9IHRydWU7CisgICAgICAgICAgICAg
ICAgaW5zdC5mb3JFYWNoQXJnKAorICAgICAgICAgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBB
cmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlLCBBcmc6OldpZHRoKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoQXJnOjppc0Vhcmx5RGVmKHJvbGUpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2FuRGVsZXRlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFBcmc6OmlzTGF0ZURlZihyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZy5pc1JlZygpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuRGVsZXRlID0gZmFsc2U7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2FsQ2FsYy5pc0xpdmUoYXJnLnJlZygpKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbkRlbGV0ZSA9IGZhbHNlOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgaWYgKGNhbkRlbGV0ZSkKKyAg
ICAgICAgICAgICAgICAgICAgaW5zdCA9IEluc3QoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAogICAgICAgICAgICAgaWYgKGluc3Qub3Bjb2RlID09IFBhdGNoKSB7CiAgICAgICAgICAg
ICAgICAgUmVnaXN0ZXJTZXQgcmVnaXN0ZXJTZXQ7CiAgICAgICAgICAgICAgICAgZm9yIChSZWcg
cmVnIDogbG9jYWxDYWxjLmxpdmUoKSkKQEAgLTU0LDYgKzgwLDExIEBAIHZvaWQgcmVwb3J0VXNl
ZFJlZ2lzdGVycyhDb2RlJiBjb2RlKQogICAgICAgICAgICAgfQogICAgICAgICAgICAgbG9jYWxD
YWxjLmV4ZWN1dGUoaW5zdEluZGV4KTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYmxv
Y2stPmluc3RzKCkucmVtb3ZlQWxsTWF0Y2hpbmcoCisgICAgICAgICAgICBbJl0gKGNvbnN0IElu
c3QmIGluc3QpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIHJldHVybiAhaW5zdDsKKyAgICAg
ICAgICAgIH0pOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJTY2F2ZW5nZVJlZ2lzdGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJTY2F2ZW5nZVJlZ2lzdGVycy5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNjYXZlbmdlUmVnaXN0ZXJzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDk0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJTY2F2
ZW5nZVJlZ2lzdGVycy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckJy
ZWFrQ3JpdGljYWxFZGdlcy5oIgorI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJF
bWl0U2h1ZmZsZS5oIgorI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkFp
ckluc3RJbmxpbmVzLmgiCisjaW5jbHVkZSAiQWlySW5zdE1hcC5oIgorI2luY2x1ZGUgIkFpckxp
dmVuZXNzLmgiCisjaW5jbHVkZSAiQWlyT3B0aW1pemVCbG9ja09yZGVyLmgiCisjaW5jbHVkZSAi
QWlyUGhhc2VTY29wZS5oIgorI2luY2x1ZGUgIkFpclJlZ2lzdGVyUHJpb3JpdHkuaCIKKyNpbmNs
dWRlICJBaXJUbXBXaWR0aC5oIgorI2luY2x1ZGUgIkFpclVzZUNvdW50cy5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK25hbWVzcGFjZSB7CisK
K2Jvb2wgdmVyYm9zZSA9IGZhbHNlOworCit0ZW1wbGF0ZTxBcmc6OlR5cGUgdHlwZT4KK2NsYXNz
IFNjYXZlbmdlUmVnaXN0ZXJzIHsKK3B1YmxpYzoKKyAgICBTY2F2ZW5nZVJlZ2lzdGVycyhDb2Rl
JiBjb2RlKQorICAgICAgICA6IG1fY29kZShjb2RlKQorICAgICAgICAsIG1fbGl2ZW5lc3MoY29k
ZSkKKyAgICAgICAgLCBtX2RlYXRocyhjb2RlKQorICAgICAgICAsIG1fYXRIZWFkKGNvZGUuc2l6
ZSgpKQorICAgICAgICAsIG1fdXNlQ291bnRzKGNvZGUpCisgICAgICAgICwgbV90bXBXaWR0aChj
b2RlKQorICAgICAgICAsIG1faW5zZXJ0aW9uU2V0KGNvZGUpCisgICAgeworICAgIH0KKworICAg
IHZvaWQgcnVuKCkKKyAgICB7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0
YUxvZygic2NhdmVuZ2VSZWdpc3RlcnMoKSBkZWFsaW5nIHdpdGggY29kZTpcbiIsIG1fY29kZSk7
CisKKyAgICAgICAgaW5pdGlhbGl6ZUF0SGVhZCgpOworICAgICAgICAKKyAgICAgICAgVmVjdG9y
PEJhc2ljQmxvY2sqPiBibG9ja3MgPSBibG9ja3NJbk9wdGltaXplZE9yZGVyKG1fY29kZSk7CisK
KyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7CisgICAg
ICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogYmxvY2tzKSB7CisgICAgICAgICAgICAg
ICAgbV9ibG9jayA9IGJsb2NrOworICAgICAgICAgICAgICAgIHByb3BhZ2F0ZVZhbHVlc0luQmxv
Y2soKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghbV9jaGFuZ2VkKQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjb21wdXRlRGVh
dGhzKCk7CisgICAgICAgIGluaXRpYWxpemVCbG9ja1JlZ1N0YXRlcygpOworCisgICAgICAgIG1f
YXRIZWFkW21fY29kZVswXV0uaXNTZXR0bGVkID0gdHJ1ZTsKKyAgICAgICAgZm9yIChCYXNpY0Js
b2NrKiBibG9jayA6IGJsb2NrcykgeworICAgICAgICAgICAgbV9ibG9jayA9IGJsb2NrOworICAg
ICAgICAgICAgcHJvY2Vzc0Jsb2NrKCk7CisgICAgICAgIH0KKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgc3RydWN0IFRtcEluZm8geworICAgICAgICBUbXBJbmZvKCkKKyAgICAgICAgeworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBleHBsaWNpdCBUbXBJbmZvKFJlZyByZWcpCisgICAgICAg
ICAgICA6IHJlZyhyZWcpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
aW50NjRfdCBjb25zdGFudCB7IDAgfTsKKyAgICAgICAgUmVnIHJlZzsKKyAgICAgICAgYm9vbCBo
YXNDb25zdGFudCB7IGZhbHNlIH07CisgICAgICAgIGJvb2wgaGFzU3BpbGwgeyBmYWxzZSB9Owor
ICAgIH07CisKKyAgICBzdHJ1Y3QgUmVnSW5mbyB7CisgICAgICAgIFJlZ0luZm8oKQorICAgICAg
ICB7CisgICAgICAgIH0KKworICAgICAgICBleHBsaWNpdCBSZWdJbmZvKFRtcCB0bXApCisgICAg
ICAgICAgICA6IHRtcCh0bXApCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFRtcCB0
bXA7CisgICAgICAgIGJvb2wgaXNMb2NrZWQgeyBmYWxzZSB9OworICAgIH07CisKKyAgICB2b2lk
IGluaXRpYWxpemVBdEhlYWQoKQorICAgIHsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9j
ayA6IG1fY29kZSkgeworICAgICAgICAgICAgU3RhdGUmIHN0YXRlID0gbV9hdEhlYWRbYmxvY2td
OworICAgICAgICAgICAgZm9yIChUbXAgdG1wIDogbV9saXZlbmVzcy5saXZlQXRIZWFkKGJsb2Nr
KSkKKyAgICAgICAgICAgICAgICBzdGF0ZS5tYXBwaW5nLmFkZCh0bXAsIFRtcEluZm8oKSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHByb3BhZ2F0ZVZhbHVlc0luQmxvY2soKQorICAg
IHsKKyAgICAgICAgbV9zdGF0ZSA9IG1fYXRIZWFkW21fYmxvY2tdOworICAgICAgICBmb3IgKElu
c3QmIGluc3QgOiAqbV9ibG9jaykKKyAgICAgICAgICAgIHByb3BhZ2F0ZVZhbHVlcyhpbnN0KTsK
KworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA6IG1fYmxvY2stPnN1Y2Nlc3Nv
ckJsb2NrcygpKSB7CisgICAgICAgICAgICBTdGF0ZSYgYXRIZWFkID0gbV9hdEhlYWRbc3VjY2Vz
c29yXTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFhdEhlYWQudmlzaXRlZEJ5UHJv
cGFnYXRpb24pIHsKKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogYXRIZWFkLm1h
cHBpbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgVG1wSW5mbyYgc3JjSW5mbyA9IGdldEluZm8o
ZW50cnkua2V5KTsKKyAgICAgICAgICAgICAgICAgICAgVG1wSW5mbyYgZHN0SW5mbyA9IGVudHJ5
LnZhbHVlOworICAgICAgICAgICAgICAgICAgICBkc3RJbmZvLmNvbnN0YW50ID0gc3JjSW5mby5j
b25zdGFudDsKKyAgICAgICAgICAgICAgICAgICAgZHN0SW5mby5oYXNDb25zdGFudCA9IHNyY0lu
Zm8uaGFzQ29uc3RhbnQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGF0SGVh
ZC52aXNpdGVkQnlQcm9wYWdhdGlvbiA9IHRydWU7CisgICAgICAgICAgICAgICAgbV9jaGFuZ2Vk
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IGF0SGVhZC5tYXBwaW5nKSB7CisgICAgICAgICAg
ICAgICAgVG1wSW5mbyYgZHN0SW5mbyA9IGVudHJ5LnZhbHVlOworICAgICAgICAgICAgICAgIGlm
ICghZHN0SW5mby5oYXNDb25zdGFudCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgVG1wSW5mbyYgc3JjSW5mbyA9IGdldEluZm8oZW50cnkua2V5KTsKKyAg
ICAgICAgICAgICAgICBpZiAoIXNyY0luZm8uaGFzQ29uc3RhbnQgfHwgc3JjSW5mby5jb25zdGFu
dCAhPSBkc3RJbmZvLmNvbnN0YW50KSB7CisgICAgICAgICAgICAgICAgICAgIGRzdEluZm8uaGFz
Q29uc3RhbnQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAg
CisgICAgdm9pZCBwcm9wYWdhdGVWYWx1ZXMoSW5zdCYgaW5zdCkKKyAgICB7CisgICAgICAgIGlm
ICh0eXBlID09IEFyZzo6R1AKKyAgICAgICAgICAgICYmIGluc3Qub3Bjb2RlID09IE1vdmUKKyAg
ICAgICAgICAgICYmIGluc3QuYXJnc1swXS5pc1NvbWVJbW0oKQorICAgICAgICAgICAgJiYgaW5z
dC5hcmdzWzFdLmlzVG1wKCkpIHsKKyAgICAgICAgICAgIFRtcEluZm8mIGluZm8gPSBnZXRJbmZv
KGluc3QuYXJnc1sxXS50bXAoKSk7CisgICAgICAgICAgICBpbmZvLmhhc0NvbnN0YW50ID0gdHJ1
ZTsKKyAgICAgICAgICAgIGluZm8uY29uc3RhbnQgPSBpbnN0LmFyZ3NbMV0udmFsdWUoKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBOZWVkIHRo
ZSBlcXVpdmFsZW50IGZvciBGUC4KKworICAgICAgICBJbnN0Ojpmb3JFYWNoRGVmV2l0aEV4dHJh
Q2xvYmJlcmVkUmVnczxUbXA+KAorICAgICAgICAgICAgJmluc3QsICZpbnN0LCAvLyBHZXQgYm90
aCBsYXRlIGFuZCBlYXJseSBkZWZzIGZvciBpbnN0LgorICAgICAgICAgICAgWyZdIChUbXAgdG1w
LCBBcmc6OlJvbGUsIEFyZzo6VHlwZSB0bXBUeXBlLCBBcmc6OldpZHRoKSB7CisgICAgICAgICAg
ICAgICAgaWYgKHRtcFR5cGUgIT0gdHlwZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICAgIGdldEluZm8odG1wKS5oYXNDb25zdGFudCA9IGZhbHNlOworICAgICAg
ICAgICAgfSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcHV0ZURlYXRocygpCisgICAgewor
ICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7CisgICAgICAgICAgICB0
eXBlbmFtZSBUbXBMaXZlbmVzczx0eXBlPjo6TG9jYWxDYWxjIGxvY2FsQ2FsYyhtX2xpdmVuZXNz
LCBibG9jayk7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRh
TG9nKCIgICBMaXZlIGF0IHRhaWwgb2YgIiwgKmJsb2NrLCAiOiAiLCBsaXN0RHVtcChsb2NhbENh
bGMubGl2ZSgpKSwgIlxuIik7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9
IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykgeworICAgICAgICAgICAgICAgIGlmICh2ZXJi
b3NlKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICBBbmFseXppbmcgIiwgYmxv
Y2stPmF0KGluc3RJbmRleCksICJcbiIpOworICAgICAgICAgICAgICAgIGxvY2FsQ2FsYy5leGVj
dXRlKAorICAgICAgICAgICAgICAgICAgICBpbnN0SW5kZXgsCisgICAgICAgICAgICAgICAgICAg
IFsmXSAodW5zaWduZWQsIFRtcCB0bXAsIEtpbGxNb2RlIGtpbGxNb2RlKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKCIgICAgICAgICBLaWxsaW5nICIsIHRtcCwgIiBkdWUgdG8gIiwga2lsbE1vZGUsICJc
biIpOworICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChraWxsTW9kZSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSBLaWxsTW9kZTo6RE9BRWFybHlEZWZJbk5leHRJbnN0Ogor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGVhdGhzLmF0KGJsb2NrLCBpbnN0SW5kZXgg
KyAxKS5hcHBlbmQoRGVhdGgodG1wLCBFYXJseURlYXRoKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEtpbGxNb2RlOjpE
T0FMYXRlRGVmOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGVhdGhzLmF0KGJsb2Nr
LCBpbnN0SW5kZXgpLmFwcGVuZChEZWF0aCh0bXAsIExhdGVEZWF0aCkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBLaWxs
TW9kZTo6RWFybHlVc2VLaWxsOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGVhdGhz
LmF0KGJsb2NrLCBpbnN0SW5kZXgpLmFwcGVuZChEZWF0aCh0bXAsIEVhcmx5RGVhdGgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgS2lsbE1vZGU6OkxhdGVVc2VJblByZXZJbnN0S2lsbDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2RlYXRocy5hdChibG9jaywgaW5zdEluZGV4IC0gMSkuYXBwZW5kKERlYXRo
KHRtcCwgTGF0ZURlYXRoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgaW5pdGlhbGl6ZUJsb2Nr
UmVnU3RhdGVzKCkKKyAgICB7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBtX2NvZGVbMF07
CisgICAgICAgIAorICAgICAgICBTdGF0ZSYgc3RhdGUgPSBtX2F0SGVhZFtyb290XTsKKyAgICAg
ICAgZm9yIChUbXAgdG1wIDogbV9saXZlbmVzcy5saXZlQXRIZWFkKHJvb3QpKSB7CisgICAgICAg
ICAgICBpZiAoIXRtcC5pc1JlZygpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBzdGF0ZS5tYXBwaW5nLmFkZCh0bXAsIFRtcEluZm8odG1wLnJl
ZygpKSk7CisgICAgICAgICAgICBzdGF0ZS5yZXZlcnNlTWFwcGluZ1t0bXAucmVnKCldID0gUmVn
SW5mbyh0bXApOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBwcm9jZXNzQmxvY2soKQor
ICAgIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCIgICBQcm9j
ZXNzaW5nIGJsb2NrICIsICptX2Jsb2NrLCAiXG4iKTsKKyAgICAgICAgbV9zdGF0ZSA9IG1fYXRI
ZWFkW21fYmxvY2tdOworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3N0YXRlLmlzU2V0dGxlZCk7
CisKKyAgICAgICAgZm9yIChtX2luc3RJbmRleCA9IDA7IG1faW5zdEluZGV4IDwgbV9ibG9jay0+
c2l6ZSgpOyArK21faW5zdEluZGV4KSB7CisgICAgICAgICAgICBJbnN0JiBpbnN0ID0gbV9ibG9j
ay0+YXQobV9pbnN0SW5kZXgpOworICAgICAgICAgICAgcHJvY2Vzc0luc3QoaW5zdCk7CisgICAg
ICAgICAgICBwcm9wYWdhdGVWYWx1ZXMoaW5zdCk7CisgICAgICAgIH0KKworICAgICAgICBib29s
IGp1bXBzSW50b0hvdCA9IGZhbHNlOworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3Nv
ciA6IG1fYmxvY2stPnN1Y2Nlc3NvckJsb2NrcygpKQorICAgICAgICAgICAganVtcHNJbnRvSG90
IHw9IHN1Y2Nlc3Nvci0+ZnJlcXVlbmN5KCkgPiBtX2Jsb2NrLT5mcmVxdWVuY3koKTsKKyAgICAg
ICAgaWYgKGp1bXBzSW50b0hvdCkKKyAgICAgICAgICAgIHByZVNwaWxsKG1fYmxvY2stPnNpemUo
KSAtIDEpOworCisgICAgICAgIGlmIChtX2Jsb2NrLT5udW1TdWNjZXNzb3JzKCkgPiAxKSB7Cisg
ICAgICAgICAgICByZWJhc2UobV9ibG9jay0+c2l6ZSgpIC0gMSk7CisgICAgICAgICAgICBmb3Ig
KEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA6IG1fYmxvY2stPnN1Y2Nlc3NvckJsb2NrcygpKQorICAg
ICAgICAgICAgICAgIGJvb3RCbG9jayhzdWNjZXNzb3IpOworICAgICAgICB9IGVsc2UgaWYgKG1f
YmxvY2stPm51bVN1Y2Nlc3NvcnMoKSA9PSAxKSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBz
dWNjZXNzb3IgPSBtX2Jsb2NrLT5zdWNjZXNzb3JCbG9jaygwKTsKKyAgICAgICAgICAgIGlmICht
X2F0SGVhZFtzdWNjZXNzb3JdLmlzU2V0dGxlZCkKKyAgICAgICAgICAgICAgICBjb25mb3JtVG8o
c3VjY2Vzc29yKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHJlYmFzZSht
X2Jsb2NrLT5zaXplKCkgLSAxKTsKKyAgICAgICAgICAgICAgICBib290QmxvY2soc3VjY2Vzc29y
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9pbnNlcnRp
b25TZXQuZXhlY3V0ZShtX2Jsb2NrKTsKKyAgICB9CisKKyAgICB2b2lkIHByb2Nlc3NJbnN0KElu
c3QmIGluc3QpCisgICAgeworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFM
b2coIiAgICAgIFByb2Nlc3NpbmcgIiwgaW5zdCwgIlxuIik7CisgICAgICAgIAorICAgICAgICAv
LyBPdXIgc3RhdGUgbWFwcGluZyB0ZWxscyB1cyB3aGF0IGlzIGxpdmUgYXQgYW55IGdpdmVuIG1v
bWVudC4gV2UgdXNlIGEgc2VwYXJhdGUKKyAgICAgICAgLy8gbGl2ZW5lc3MgcGFzcyB0byBjb2xs
ZWN0IHRoZSBraWxsIGxpc3RzIGZvciBhbGwgaW5zdHJ1Y3Rpb25zLiBUaGUga2lsbCBsaXN0cyB0
ZWxsIHVzCisgICAgICAgIC8vIGFib3V0IHRoZSB3YXlzIHRoYXQgdGhpbmdzIGRpZSBhdCBhbiBJ
bnN0LiBUaGVyZSBhcmUgZm91ciB3YXlzOgorICAgICAgICAvLyAKKyAgICAgICAgLy8gLSBBbiBl
YXJseSBkZWYgY291bGQgZGllIGFib3ZlIGFuIEluc3QuCisgICAgICAgIC8vIC0gQW4gZWFybHkg
dXNlIGNvdWxkIGtpbGwgYWJvdmUgYW4gSW5zdC4KKyAgICAgICAgLy8gLSBBIGxhdGUgZGVmIGNv
dWxkIGRpZSBiZWxvdyBhbiBJbnN0LgorICAgICAgICAvLyAtIEEgbGF0ZSB1c2UgY291bGQga2ls
bCBiZWxvdyBhbiBJbnN0LgorICAgICAgICAvLyAKKyAgICAgICAgLy8gT25jZSB3ZSBhcmUgYXJt
ZWQgd2l0aCBvdXIgc3RhdGUgbWFwcGluZyBhbmQgdGhlIGtpbGwgbGlzdHMsIHdlIGNhbiBwcm9j
ZXNzIHRoZSBJbnN0CisgICAgICAgIC8vIGluIHRoZSBvcmRlciBvZiBpdHMgZXhlY3V0aW9uIGFu
ZCB1cGRhdGUgdGhlIHN0YXRlIG1hcHBpbmcgYmFzZWQgb24gZGVmcyBhbmQga2lsbAorICAgICAg
ICAvLyBsaXN0cy4KKyAgICAgICAgLy8gCisgICAgICAgIC8vIFdlIHN0YXJ0IGFib3ZlIHRoZSBJ
bnN0IHdpdGggYSBzdGF0ZSB0aGF0IHRlbGxzIHVzIHdoYXQgaXMgbGl2ZSBiZWZvcmUgaXQuIFRo
aXMKKyAgICAgICAgLy8gaW5jbHVkZXMgdGhpbmdzIHRoYXQgd2lsbCBkaWUgYXQgdGhlIHRvcC4g
V2UgY2FuIGhhbmRsZSBlYXJseSB1c2VzIGFuZCBkZWZzIGJ5IGdpdmluZworICAgICAgICAvLyB0
aGVtIHJlZ2lzdGVycyB0aGF0IGFyZSBub3QgbGl2ZS4gV2Uga25vdyB3aGljaCByZWdpc3RlcnMg
YmVjb21lIGxpdmUgYmVjYXVzZSBvdXIKKyAgICAgICAgLy8gbWFwcGluZyB0ZWxscyB1cyB0aGlz
LiBUaGVuIHdlIGNhbiBhcHBseSB0aGUgZWFybHkgZGVhdGhzLiBUaGVuIHdlIHByb2Nlc3MgbGF0
ZSB1c2VzCisgICAgICAgIC8vIGFuZCBkZWZzLCBhbmQgdGhlbiBhcHBseSB0aGUgbGF0ZSBkZWF0
aHMuCisgICAgICAgIC8vIAorICAgICAgICAvLyBUaGlzIGFsZ29yaXRobSBtdXN0IHByb2NlZWQg
aW4gdGhlIG9yZGVyIG9mIHRoZSBJbnN0J3MgZXhlY3V0aW9uLiBXZSBjYW4gdXNlIHRoZQorICAg
ICAgICAvLyBub3Rpb24gb2YgbG9ja2luZyBhdCBlYWNoIHN0YWdlIC0gZWFybHkgYW5kIHRoZW4g
bGF0ZSAtIHRvIGluZGljYXRlIHdoaWNoIHJlZ2lzdGVycworICAgICAgICAvLyBoYXZlIGFscmVh
ZHkgYmVlbiBwdXJwb3NlZC4gQWxsIGVhcmx5IHVzZXMgd2lsbCBob2xkIHRoZSBsb2NrIHdoaWxl
IHdlIGFyZSBwcm9jZXNzaW5nCisgICAgICAgIC8vIHRoZSBlYXJseSBwYXJ0IG9mIHRoZSBpbnN0
cnVjdGlvbiwgYW5kIHRoZW4gcmVsZWFzZSBpdCBiZWZvcmUgd2Ugc3RhcnQgcHJvY2Vzc2luZyB0
aGUKKyAgICAgICAgLy8gbGF0ZSBzdHVmZi4gSW4gYmV0d2VlbiBlYXJseSBhbmQgbGF0ZSwgYWZ0
ZXIgd2UgaGF2ZSB1bmxvY2tlZCB0aGluZ3MgdXNlZCBlYXJseSwgd2UKKyAgICAgICAgLy8gY2Fu
IHBlcmZvcm0gZWFybHkgZGVhdGhzLiBBbGwgZWFybHkgZGVmcyB3aWxsIGhvbGQgdGhlIGxvY2sg
ZWFybHkgYW5kIHRoZW4gcmVsZWFzZSBpdAorICAgICAgICAvLyBhZnRlciB3ZSBwcm9jZXNzIGxh
dGUgdGhpbmdzLiBBcyBhIHNwZWNpYWwgY2FzZSwgVXNlRGVmIHdpbGwgYWxzbyByZWxlYXNlIHRo
ZSBsb2NrCisgICAgICAgIC8vIGxhdGUuCisgICAgICAgIC8vIAorICAgICAgICAvLyBUaGluZ3Mg
Z2V0IHdlaXJkIHdpdGggVXNlRGVmLiBMdWNreSBmb3IgdXMsIEluc3RzIHdpbGwgaGF2ZSBhIHNt
YWxsIG51bWJlciBvZiBVc2VEZWZzLAorICAgICAgICAvLyBzbyB0aGUgYWxnb3JpdGhtIGRvZXNu
J3QgaGF2ZSB0byBiZSBlZmZpY2llbnQgYW5kIHdlIGNhbiBiZSBzdXJlIHRoYXQgaWYgd2UgaGFu
ZGxlCisgICAgICAgIC8vIFVzZURlZnMgZWFybHksIHRoZW4gdGhlIGdyZWVkeSBhcHByb2FjaCBz
aG91bGQganVzdCB3b3JrLiBUaGUgbG9ja2luZyBzdHJhdGVneSBlbnN1cmVzCisgICAgICAgIC8v
IHRoYXQgd2Ugd29uJ3QgdHJ5IHRvIHJldXNlIHRoZSByZWdpc3RlciB3ZSBhbHJlYWR5IHBpY2tl
ZC4gVGhlIG9ubHkgYWRkaXRpb25hbCBsb2dpYworICAgICAgICAvLyBmb3IgVXNlRGVmIGlzIHRo
YXQgd2hlbiB3ZSBwaWNrIGEgcmVnaXN0ZXIgZm9yIGl0LCB3aGljaCBoYXBwZW5zIGVhcmx5LCB3
ZSBsb29rIGFoZWFkCisgICAgICAgIC8vIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGRpZG4ndCBhbHJl
YWR5IGxvY2sgdGhlIHJlZ2lzdGVyIGxhdGUuIFRoZSBvbmx5IHJlZ2lzdGVycyB0aGF0IHdlCisg
ICAgICAgIC8vIGNvdWxkIGhhdmUgYWxyZWFkeSBsb2NrZWQgbGF0ZSBhcmUgdGhlIG9uZXMgdGhh
dCBhcmUgY2xvYmJlcmVkIGxhdGUgb3IgZGVmaW5lZCBsYXRlLgorICAgICAgICAvLyAKKyAgICAg
ICAgLy8gT25lIG9mIHRoZSBiZWF1dGlmdWwgdGhpbmdzIGFib3V0IHRoaXMgYXBwcm9hY2ggaXMg
dGhhdCB3ZSBjYW4gcHJvY2VzcyB0aGUgSW5zdAorICAgICAgICAvLyBpbi1wbGFjZS4gV2Ugd29u
J3QgZWRpdCB0aGUgdXNlcyB1bnRpbCB3ZSBoYXZlIGFjY291bnRlZCBmb3IgdGhlbS4gV2Ugd29u
J3QgZWRpdCB0aGUKKyAgICAgICAgLy8gZGVmcyB1bnRpbCB3ZSBoYXZlIGFjY291bnRlZCBmb3Ig
dGhlbS4gU28sIHdlIGNhbiBjb21wdXRlIGZvcndhcmQgbGl2ZW5lc3Mgd2hpbGUgYWxzbworICAg
ICAgICAvLyBlZGl0aW5nIHRoZSBpbnN0cnVjdGlvbi4KKworICAgICAgICAvLyBTcGlsbCBhbmQg
bG9jayBhbGwgZWFybHkgY2xvYmJlcnMuIFNwaWxsIGFsbCBsYXRlIGNsb2JiZXJzLCBidXQgZG9u
J3QgbG9jayB0aG9zZSB5ZXQuCisgICAgICAgIGlmIChpbnN0Lm9wY29kZSA9PSBQYXRjaCkgewor
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAg
ICAgICBDbG9iYmVyZWQgZWFybHk6ICIsIGluc3QuZXh0cmFFYXJseUNsb2JiZXJlZFJlZ3MoKSwg
IlxuIik7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICAgICAgQ2xvYmJlcmVkIGxhdGU6
ICIsIGluc3QuZXh0cmFDbG9iYmVyZWRSZWdzKCksICJcbiIpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICBpbnN0LmV4dHJhRWFybHlDbG9iYmVyZWRSZWdzKCkuZm9y
RWFjaCgKKyAgICAgICAgICAgICAgICBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKEFyZyhUbXAocmVnKSkudHlwZSgpICE9IHR5cGUpCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIHNwaWxsKHJlZyk7CisgICAgICAgICAg
ICAgICAgICAgIGxvY2socmVnKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlIGxvY2sgYWxyZWFkeS1hbGxvY2F0ZWQgcmVnaXN0
ZXJzIHRoYXQgYXJlIGxpdmUgZWFybHkuIFRoaXMgaW5jbHVkZXMgYWxsCisgICAgICAgIC8vIGVh
cmx5IHVzZXMsIGVhcmx5IGRlZnMsIGFuZCBsYXRlIHVzZXMuCisgICAgICAgIGluc3QuZm9yRWFj
aFRtcCgKKyAgICAgICAgICAgIFsmXSAoVG1wJiB0bXAsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5
cGUgdG1wVHlwZSwgQXJnOjpXaWR0aCkgeworICAgICAgICAgICAgICAgIGlmICh0bXBUeXBlICE9
IHR5cGUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBpZiAo
IXRtcC5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgaWYgKCFBcmc6OmlzRWFybHlEZWYocm9sZSkgJiYgIUFyZzo6aXNBbnlVc2Uocm9sZSkgJiYg
cm9sZSAhPSBBcmc6OlVzZUFkZHIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBsb2NrKGZpbGwodG1wLCByb2xlKSk7CisgICAg
ICAgICAgICB9KTsKKworICAgICAgICAvLyBBbGxvY2F0ZSByZWdpc3RlcnMgdG8gdGhvc2UgdGhp
bmdzIHRoYXQgZG9uJ3QgYWRtaXQgc3RhY2suCisgICAgICAgIGluc3QuZm9yRWFjaEFyZygKKyAg
ICAgICAgICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgYXJnVHlw
ZSwgQXJnOjpXaWR0aCB3aWR0aCkgeworICAgICAgICAgICAgICAgIGlmIChhcmdUeXBlICE9IHR5
cGUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBpZiAoYXJnLmlzVG1wKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFB
cmc6OmlzRWFybHlEZWYocm9sZSkgJiYgIUFyZzo6aXNBbnlVc2Uocm9sZSkgJiYgcm9sZSAhPSBB
cmc6OlVzZUFkZHIpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGFyZy5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdC5hZG1pdHNTdGFjayhhcmcpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICBhcmcgPSBU
bXAobG9jayhmaWxsKGFyZy50bXAoKSwgcm9sZSkpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGFyZy5mb3JFYWNoVG1w
KAorICAgICAgICAgICAgICAgICAgICByb2xlLCB0eXBlLCB3aWR0aCwKKyAgICAgICAgICAgICAg
ICAgICAgWyZdIChUbXAmIHRtcCwgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSB0bXBUeXBlLCBB
cmc6OldpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wVHlwZSAhPSB0eXBl
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRtcCA9IFRtcChsb2NrKGZpbGwodG1wLCByb2xlKSkpOworICAgICAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgIC8vIEFsbG9jYXRlIHJlZ2lzdGVy
cyB0byB0aG9zZSB0aGluZ3MgdGhhdCBhZG1pdCBzdGFjayBidXQgYXJlIG5vdCBjb2xkLiBLZWVw
IHRoaXMgdXAgc28KKyAgICAgICAgLy8gbG9uZyBhcyB3ZSBzdGlsbCBoYXZlIHJlZ2lzdGVycy4K
KyAgICAgICAgaW5zdC5mb3JFYWNoQXJnKAorICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJn
OjpSb2xlIHJvbGUsIEFyZzo6VHlwZSBhcmdUeXBlLCBBcmc6OldpZHRoKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGFyZ1R5cGUgIT0gdHlwZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICAgIGlmICghQXJnOjppc0FueVVzZShyb2xlKSAmJiAhQXJnOjppc0Vhcmx5
RGVmKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
aWYgKEFyZzo6aXNDb2xkVXNlKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgaWYgKCFhcmcuaXNUbXAoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgIGlmIChhcmcuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgICAgICAgICAgUmVnIHJlZyA9IGZpbGwoYXJnLnRtcCgpLCBy
b2xlLCBEb250U3BpbGwpOworICAgICAgICAgICAgICAgIGlmICghcmVnKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgYXJnID0gVG1wKGxvY2socmVnKSk7Cisg
ICAgICAgICAgICB9KTsKKworICAgICAgICAvLyBGaWd1cmUgb3V0IHdoYXQgdG8gZG8gd2l0aCBl
dmVyeXRoaW5nIGVsc2UuCisgICAgICAgIGluc3QuZm9yRWFjaEFyZygKKyAgICAgICAgICAgIFsm
XSAoQXJnJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgYXJnVHlwZSwgQXJnOjpXaWR0
aCB3aWR0aCkgeworICAgICAgICAgICAgICAgIGlmIChhcmdUeXBlICE9IHR5cGUpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBpZiAoIUFyZzo6aXNBbnlVc2Uo
cm9sZSkgJiYgIUFyZzo6aXNFYXJseURlZihyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgIGlmICghYXJnLmlzVG1wKCkpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBpZiAoYXJnLmlzUmVnKCkpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgICAgIFRtcEluZm8mIGluZm8gPSBnZXRJ
bmZvKGFyZy50bXAoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gRklY
TUU6IFdlIHNob3VsZCBoYXZlIGEgY2FzZSBmb3IgY29uc3RhbnRzIGhlcmUuCisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgaWYgKGluZm8uaGFzU3BpbGwpIHsKKyAgICAgICAgICAg
ICAgICAgICAgU3RhY2tTbG90KiBzbG90ID0gc3BpbGxTbG90KGFyZy50bXAoKSk7CisgICAgICAg
ICAgICAgICAgICAgIGVuc3VyZVdpZHRoKHNsb3QsIHdpZHRoKTsKKyAgICAgICAgICAgICAgICAg
ICAgYXJnID0gQXJnOjpzdGFjayhzbG90KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGFyZyA9IFRtcChsb2NrKGluZm8u
cmVnKSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAvLyBVbmxvY2sgYWxsIG9mIHRoZSBl
YXJseSBjbG9iYmVyZWQgcmVnaXN0ZXJzLgorICAgICAgICBpZiAoaW5zdC5vcGNvZGUgPT0gUGF0
Y2gpIHsKKyAgICAgICAgICAgIGluc3QuZXh0cmFFYXJseUNsb2JiZXJlZFJlZ3MoKS5mb3JFYWNo
KAorICAgICAgICAgICAgICAgIFsmXSAoUmVnIHJlZykgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoQXJnKFRtcChyZWcpKS50eXBlKCkgIT0gdHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgdW5sb2NrKHJlZyk7CisgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBVbmxvY2sgYWxsIG9mIHRoZSBlYXJseSB1
c2VzLiBUaGlzIHBlcm1pdHMgdGhvc2UgcmVnaXN0ZXJzIHRvIGJlIHVzZWQgZm9yIG90aGVyIHRo
aW5ncy4KKyAgICAgICAgLy8gSXQgZXZlbiBtZWFucyB0aGF0IHdlIG1pZ2h0IHNwaWxsIHRoZSB1
c2VkIHJlZ2lzdGVyIGluIHRoZSBzaHVmZmxlIGR1ZSB0byBhIGxhdGUgZGVmIHRoYXQKKyAgICAg
ICAgLy8gY291bGQgdXNlIHRoYXQgcmVnaXN0ZXIuCisgICAgICAgIFZlY3RvcjxSZWcsIDE+IHJl
Z3NUb1JlbG9jazsKKyAgICAgICAgaW5zdC5mb3JFYWNoVG1wKAorICAgICAgICAgICAgWyZdIChU
bXAmIHRtcCwgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSBhcmdUeXBlLCBBcmc6OldpZHRoKSB7
CisgICAgICAgICAgICAgICAgaWYgKGFyZ1R5cGUgIT0gdHlwZSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGlmICghQXJnOjppc0Vhcmx5VXNlKHJvbGUpICYm
IHJvbGUgIT0gQXJnOjpVc2VBZGRyKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQodG1wLmlzUmVnKCkpOworICAgICAgICAgICAgICAg
IGlmIChBcmc6OmlzTGF0ZURlZihyb2xlKSkgeworICAgICAgICAgICAgICAgICAgICByZWdzVG9S
ZWxvY2suYXBwZW5kKHRtcC5yZWcoKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgICAgIFVubG9ja2luZyAiLCB0bXAsICJcbiIpOwor
ICAgICAgICAgICAgICAgIHVubG9jayh0bXAucmVnKCkpOworICAgICAgICAgICAgfSk7CisKKyAg
ICAgICAgLy8gUmVsb2NrIHRoZSBVc2VEZWZzLiBXZSBjb3VsZCBoYXZlIGEgVXNlRGVmIGZvciBz
b21lIHJlZ2lzdGVyIGFuZCBhbHNvIGEgVXNlIGZvciB0aGF0IHNhbWUKKyAgICAgICAgLy8gcmVn
aXN0ZXIuIFdoZW4gdGhhdCBoYXBwZW5zLCB3ZSB3aWxsIGhhdmUgdW5sb2NrZWQgaXQgYWJvdmUg
ZHVlIHRvIHRoZSBVc2UuCisgICAgICAgIGZvciAoUmVnIHJlZyA6IHJlZ3NUb1JlbG9jaykKKyAg
ICAgICAgICAgIGxvY2socmVnKTsKKworICAgICAgICAvLyBBcHBseSBhbGwgb2YgdGhlIGVhcmx5
IGRlYXRocy4KKyAgICAgICAgZm9yIChEZWF0aCYgZGVhdGggOiBtX2RlYXRocy5hdChtX2Jsb2Nr
LCBtX2luc3RJbmRleCkpIHsKKyAgICAgICAgICAgIGlmIChkZWF0aC5kZWF0aE1vZGUgPT0gRWFy
bHlEZWF0aCkKKyAgICAgICAgICAgICAgICBraWxsKGRlYXRoLnRtcCk7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBMb2NrIGFsbCBvZiB0aGUgbGF0ZSBjbG9iYmVyZWQgcmVnaXN0ZXJzLgorICAg
ICAgICBpZiAoaW5zdC5vcGNvZGUgPT0gUGF0Y2gpIHsKKyAgICAgICAgICAgIGluc3QuZXh0cmFD
bG9iYmVyZWRSZWdzKCkuZm9yRWFjaCgKKyAgICAgICAgICAgICAgICBbJl0gKFJlZyByZWcpIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKEFyZyhUbXAocmVnKSkudHlwZSgpICE9IHR5cGUpCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIHNwaWxs
KHJlZyk7CisgICAgICAgICAgICAgICAgICAgIGxvY2socmVnKTsKKyAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZpbGwgYW5kIGxvY2sgYWxsIG9mIHRoZSBsYXRl
IGRlZnMuCisgICAgICAgIGluc3QuZm9yRWFjaEFyZygKKyAgICAgICAgICAgIFsmXSAoQXJnJiBh
cmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgYXJnVHlwZSwgQXJnOjpXaWR0aCkgeworICAg
ICAgICAgICAgICAgIGlmIChhcmdUeXBlICE9IHR5cGUpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICBpZiAoIUFyZzo6aXNMYXRlRGVmKHJvbGUpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNFYXJseVVz
ZShyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGlm
ICghYXJnLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICBsb2NrKGZpbGwoYXJnLnRtcCgpLCByb2xlKSk7CisgICAgICAgICAgICB9KTsKKworICAg
ICAgICAvLyBBc3NpZ24gcmVnaXN0ZXJzIHRvIGxhdGUgZGVmcy4gQWx3YXlzIHB1dCB0aGVzZSB0
aGluZ3MgaW50byByZWdpc3RlcnMgZmlyc3QuCisgICAgICAgIC8vIEZJWE1FOiBSZXZpc2l0IHRo
YXQgYXBwcm9hY2guIE1heWJlIHdlIHdhbnQgdG8gaWRlbnRpZnkgZGVmcyB0aGF0IGFyZSByZWFs
bHkgdXNlbGVzcyBhbmQKKyAgICAgICAgLy8gcHV0IHRob3NlIGRpcmVjdGx5IGludG8gdGhlIHN0
YWNrLgorICAgICAgICBpbnN0LmZvckVhY2hBcmcoCisgICAgICAgICAgICBbJl0gKEFyZyYgYXJn
LCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIGFyZ1R5cGUsIEFyZzo6V2lkdGgpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoYXJnVHlwZSAhPSB0eXBlKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgaWYgKCFBcmc6OmlzTGF0ZURlZihyb2xlKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzRWFybHlVc2Uo
cm9sZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBpZiAo
IWFyZy5pc1RtcCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgaWYgKGFyZy5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgICAgYXJnID0gVG1wKGxvY2soZmlsbChhcmcudG1wKCksIHJvbGUpKSk7CisgICAgICAg
ICAgICB9KTsKKworICAgICAgICB1bmxvY2tBbGwoKTsKKworICAgICAgICAvLyBBcHBseSB0aGUg
bGF0ZSBkZWF0aHMuCisgICAgICAgIGZvciAoRGVhdGgmIGRlYXRoIDogbV9kZWF0aHMuYXQobV9i
bG9jaywgbV9pbnN0SW5kZXgpKSB7CisgICAgICAgICAgICBpZiAoZGVhdGguZGVhdGhNb2RlID09
IExhdGVEZWF0aCkKKyAgICAgICAgICAgICAgICBraWxsKGRlYXRoLnRtcCk7CisgICAgICAgIH0K
KworICAgICAgICBlbWl0U2h1ZmZsZShtX2luc3RJbmRleCk7CisgICAgfQorCisgICAgdm9pZCBw
cmVTcGlsbCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAg
ICAgICAgICAgZGF0YUxvZygiICAgICAgUHJlLXNwaWxsaW5nIGluICIsICptX2Jsb2NrLCAiXG4i
KTsKKyAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fc3RhdGUubWFwcGluZykgeworICAgICAg
ICAgICAgaWYgKGVudHJ5LnZhbHVlLmhhc1NwaWxsKSB7CisgICAgICAgICAgICAgICAgaWYgKHZl
cmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgIEFscmVhZHkgaGFz
IHNwaWxsOiAiLCBlbnRyeS5rZXksICJcbiIpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgU3RhY2tTbG90KiBzbG90ID0gc3BpbGxTbG90KGVu
dHJ5LmtleSk7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRh
TG9nKCIgICAgICAgICBDb25zaWRlcmluZyAiLCBlbnRyeS5rZXksICJcbiIpOworICAgICAgICAg
ICAgaWYgKGVudHJ5LnZhbHVlLnJlZykgeworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQor
ICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgICBTcGlsbGluZyBmcm9tICIsIGVu
dHJ5LnZhbHVlLnJlZywgIlxuIik7CisgICAgICAgICAgICAgICAgbV9zaHVmZmxlUGFpcnMuYXBw
ZW5kKAorICAgICAgICAgICAgICAgICAgICBTaHVmZmxlUGFpcihUbXAoZW50cnkudmFsdWUucmVn
KSwgQXJnOjpzdGFjayhzbG90KSwgd2lkdGgoc2xvdCkpKTsKKyAgICAgICAgICAgICAgICBlbnRy
eS52YWx1ZS5oYXNTcGlsbCA9IHRydWU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGVudHJ5LnZh
bHVlLmhhc0NvbnN0YW50KSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgIFNwaWxsaW5nIGZyb20gY29uc3RhbnQgIiwg
ZW50cnkudmFsdWUuY29uc3RhbnQsICJcbiIpOworICAgICAgICAgICAgICAgIG1fc2h1ZmZsZVBh
aXJzLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgU2h1ZmZsZVBhaXIoQXJnOjppbW02NChl
bnRyeS52YWx1ZS5jb25zdGFudCksIEFyZzo6c3RhY2soc2xvdCksIHdpZHRoKHNsb3QpKSk7Cisg
ICAgICAgICAgICAgICAgZW50cnkudmFsdWUuaGFzU3BpbGwgPSB0cnVlOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgZW1pdFNodWZmbGUoaW5kZXgpOworICAgIH0KKworICAg
IHZvaWQgcmViYXNlKHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJTZXQg
c2V0OworICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9zdGF0ZS5tYXBwaW5nKSB7CisgICAg
ICAgICAgICBpZiAoZW50cnkua2V5LmlzUmVnKCkgJiYgKGVudHJ5LnZhbHVlLmhhc0NvbnN0YW50
IHx8IGVudHJ5LnZhbHVlLmhhc1NwaWxsKSkKKyAgICAgICAgICAgICAgICBzZXQuc2V0KGVudHJ5
LmtleS5yZWcoKSk7CisgICAgICAgIH0KKworICAgICAgICBzZXQuZm9yRWFjaCgKKyAgICAgICAg
ICAgIFsmXSAoUmVnIHJlZykgeworICAgICAgICAgICAgICAgIGZpbGwoVG1wKHJlZyksIEFyZzo6
VXNlKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICBlbWl0U2h1ZmZsZShpbmRleCk7CisgICAg
fQorCisgICAgdm9pZCBib290QmxvY2soQmFzaWNCbG9jayogYmxvY2spCisgICAgeworICAgICAg
ICBTdGF0ZSYgZHN0U3RhdGUgPSBtX2F0SGVhZFtibG9ja107CisKKyAgICAgICAgZm9yIChhdXRv
JiBlbnRyeSA6IGRzdFN0YXRlLm1hcHBpbmcpIHsKKyAgICAgICAgICAgIFRtcEluZm8mIHNyY0lu
Zm8gPSBnZXRJbmZvKGVudHJ5LmtleSk7CisgICAgICAgICAgICBUbXBJbmZvJiBkc3RJbmZvID0g
ZW50cnkudmFsdWU7CisgICAgICAgICAgICBkc3RJbmZvLnJlZyA9IHNyY0luZm8ucmVnOworICAg
ICAgICAgICAgZHN0SW5mby5oYXNTcGlsbCA9IHNyY0luZm8uaGFzU3BpbGw7CisgICAgICAgICAg
ICBpZiAoc3JjSW5mby5yZWcpCisgICAgICAgICAgICAgICAgZHN0U3RhdGUucmV2ZXJzZU1hcHBp
bmdbc3JjSW5mby5yZWddLnRtcCA9IGVudHJ5LmtleTsKKyAgICAgICAgfQorCisgICAgICAgIGRz
dFN0YXRlLmlzU2V0dGxlZCA9IHRydWU7CisgICAgfQorCisgICAgdm9pZCBjb25mb3JtVG8oQmFz
aWNCbG9jayogYmxvY2spCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2Jsb2NrLT5s
YXN0KCkub3Bjb2RlID09IEp1bXApOworICAgICAgICAKKyAgICAgICAgU3RhdGUmIGRzdFN0YXRl
ID0gbV9hdEhlYWRbYmxvY2tdOworICAgICAgICBSRUxFQVNFX0FTU0VSVChkc3RTdGF0ZS5pc1Nl
dHRsZWQpOworCisgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBkc3RTdGF0ZS5tYXBwaW5nKSB7
CisgICAgICAgICAgICBUbXBJbmZvJiBzcmNJbmZvID0gZ2V0SW5mbyhlbnRyeS5rZXkpOworICAg
ICAgICAgICAgVG1wSW5mbyYgZHN0SW5mbyA9IGVudHJ5LnZhbHVlOworCisgICAgICAgICAgICBp
ZiAoZHN0SW5mby5yZWcgJiYgZHN0SW5mby5yZWcgIT0gc3JjSW5mby5yZWcpIHsKKyAgICAgICAg
ICAgICAgICBTaHVmZmxlUGFpciBwYWlyOworICAgICAgICAgICAgICAgIGlmIChzcmNJbmZvLnJl
ZykgeworICAgICAgICAgICAgICAgICAgICBwYWlyID0gU2h1ZmZsZVBhaXIoCisgICAgICAgICAg
ICAgICAgICAgICAgICBUbXAoc3JjSW5mby5yZWcpLCBUbXAoZHN0SW5mby5yZWcpLCBtX3RtcFdp
ZHRoLndpZHRoKGVudHJ5LmtleSkpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3JjSW5m
by5oYXNDb25zdGFudCkgeworICAgICAgICAgICAgICAgICAgICBwYWlyID0gU2h1ZmZsZVBhaXIo
CisgICAgICAgICAgICAgICAgICAgICAgICBBcmc6OmltbTY0KHNyY0luZm8uY29uc3RhbnQpLCBU
bXAoZHN0SW5mby5yZWcpLCBtX3RtcFdpZHRoLndpZHRoKGVudHJ5LmtleSkpOworICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNyY0lu
Zm8uaGFzU3BpbGwpOworICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHNsb3QgPSBzcGls
bFNsb3QoZW50cnkua2V5KTsKKyAgICAgICAgICAgICAgICAgICAgcGFpciA9IFNodWZmbGVQYWly
KEFyZzo6c3RhY2soc2xvdCksIFRtcChkc3RJbmZvLnJlZyksIHdpZHRoKHNsb3QpKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbV9zaHVmZmxlUGFpcnMuYXBwZW5kKHBhaXIp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZHN0SW5mby5oYXNTcGlsbCAmJiAh
c3JjSW5mby5oYXNTcGlsbCkgeworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNyY0lu
Zm8ucmVnKTsKKyAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHNsb3QgPSBzcGlsbFNsb3QoZW50
cnkua2V5KTsKKyAgICAgICAgICAgICAgICBtX3NodWZmbGVQYWlycy5hcHBlbmQoU2h1ZmZsZVBh
aXIoVG1wKHNyY0luZm8ucmVnKSwgQXJnOjpzdGFjayhzbG90KSwgd2lkdGgoc2xvdCkpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGVtaXRTaHVmZmxlKG1fYmxvY2stPnNp
emUoKSAtIDEpOworICAgIH0KKworICAgIFRtcEluZm8mIGdldEluZm8oVG1wIHRtcCkKKyAgICB7
CisgICAgICAgIHJldHVybiBtX3N0YXRlLm1hcHBpbmcuYWRkKHRtcCwgVG1wSW5mbygpKS5pdGVy
YXRvci0+dmFsdWU7CisgICAgfQorCisgICAgZW51bSBGaWxsRWZmb3J0IHsKKyAgICAgICAgTXVz
dEZpbGwsCisgICAgICAgIERvbnRTcGlsbAorICAgIH07CisKKyAgICBSZWcgZmlsbChUbXAgdG1w
LCBBcmc6OlJvbGUgcm9sZSwgRmlsbEVmZm9ydCBmaWxsRWZmb3J0ID0gTXVzdEZpbGwpCisgICAg
eworICAgICAgICBpZiAocm9sZSA9PSBBcmc6OlVzZURlZiB8fCBBcmc6OmlzRWFybHlEZWYocm9s
ZSkpIHsKKyAgICAgICAgICAgIEluc3QmIGluc3QgPSBtX2Jsb2NrLT5hdChtX2luc3RJbmRleCk7
CisgICAgICAgICAgICByZXR1cm4gZmlsbCgKKyAgICAgICAgICAgICAgICB0bXAsIHJvbGUsIGZp
bGxFZmZvcnQsCisgICAgICAgICAgICAgICAgWyZdIChSZWcgY2FuZGlkYXRlKSAtPiBib29sIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gVXNlRGVmIGFuZCBlYXJseSBEZWYgcmVxdWlyZXMgdXMg
dG8gbG9vayBhaGVhZCBhbmQgc2VlIGlmIHRoZSBjYW5kaWRhdGUKKyAgICAgICAgICAgICAgICAg
ICAgLy8gcmVnaXN0ZXIgaXMgYWNjZXB0YWJsZSB0byB0aGUgbGF0ZSBkZWZzLCBsYXRlIHVzZXMs
IGFuZCBsYXRlIGNsb2JiZXJzLiBBbiBlYXN5CisgICAgICAgICAgICAgICAgICAgIC8vIHdheSB0
byBkbyB0aGlzIGlzIGp1c3QgdG8gc2VlIGlmIHRoZSByZWdpc3RlciBhcHBlYXJzIGFueXdoZXJl
IGluIHRoZSBhcmd1bWVudAorICAgICAgICAgICAgICAgICAgICAvLyBsaXN0LiBOb3RlIHRoYXQg
d2UgZG9uJ3QgaGF2ZSB0byBjb25zaWRlciBub24tVG1wIEFyZ3MsIGJlY2F1c2UgdGhvc2Ugd291
bGQKKyAgICAgICAgICAgICAgICAgICAgLy8gYWxsIGhhdmUgZWFybHkgdXNlcy4KKyAgICAgICAg
ICAgICAgICAgICAgZm9yIChBcmcmIGFyZyA6IGluc3QuYXJncykgeworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGFyZy5pc1JlZygpICYmIGFyZy5yZWcoKSA9PSBjYW5kaWRhdGUpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gT2YgY291cnNlLCB0aGVyZSBpcyB0aGUgYW5u
b3lpbmcgUGF0Y2ggaW5zdHJ1Y3Rpb24gYW5kIGl0cyBjbG9iYmVyZWQKKyAgICAgICAgICAgICAg
ICAgICAgLy8gcmVnaXN0ZXJzLgorICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdC5vcGNvZGUg
PT0gUGF0Y2ggJiYgaW5zdC5leHRyYUNsb2JiZXJlZFJlZ3MoKS5nZXQoY2FuZGlkYXRlKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiBmaWxsKHRtcCwgcm9sZSwgZmlsbEVmZm9ydCwgW10gKFJlZykgLT4gYm9vbCB7IHJl
dHVybiB0cnVlOyB9KTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4KKyAgICBSZWcgZmlsbChUbXAgdG1wLCBBcmc6OlJvbGUgcm9sZSwgRmlsbEVmZm9ydCBmaWxs
RWZmb3J0LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgaWYgKHZlcmJv
c2UpCisgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgICBGaWxsaW5nICIsIHRtcCwgIiBmb3Ig
Iiwgcm9sZSwgIlxuIik7CisgICAgICAgIAorICAgICAgICBUbXBJbmZvJiBpbmZvID0gZ2V0SW5m
byh0bXApOworCisgICAgICAgIC8vIEZvciBtb3N0IERlZnMsIHdlIGluc2lzdCB0aGF0IHRoZXkg
YXJlIGRlYWQuIFdlIG1ha2UgYW4gZXhjZXB0aW9uIGZvciBVc2VEZWYsIHdoaWNoIGdldHMKKyAg
ICAgICAgLy8gZmlsbGVkIGFzIGEgdXNlLgorICAgICAgICBpZiAoQXJnOjppc0FueURlZihyb2xl
KSAmJiAhQXJnOjppc0Vhcmx5VXNlKHJvbGUpKSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VCghaW5mby5oYXNTcGlsbCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghaW5mby5oYXND
b25zdGFudCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghaW5mby5yZWcpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBpZiAoaW5mby5yZWcpIHsKKyAgICAgICAgICAgIGlmICh2
ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgICAgIEFscmVhZHkgaW4g
IiwgaW5mby5yZWcsICJcbiIpOworICAgICAgICAgICAgaWYgKHRtcC5pc1JlZygpKQorICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRtcC5yZWcoKSA9PSBpbmZvLnJlZyk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIHJldHVybiBpbmZvLnJlZzsKKyAgICAgICAgfQorCisgICAgICAg
IFJlZyByZWc7CisgICAgICAgIGlmICh0bXAuaXNSZWcoKSkgeworICAgICAgICAgICAgaWYgKHZl
cmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICAgICAgICAgTXVzdCB1c2UgIiwg
dG1wLnJlZygpLCAiXG4iKTsKKyAgICAgICAgICAgIHJlZyA9IHRtcC5yZWcoKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAoUmVnIGNhbmRpZGF0ZSA6IHJlZ3NJblByaW9yaXR5
T3JkZXIodHlwZSkpIHsKKyAgICAgICAgICAgICAgICBSZWdJbmZvJiByZWdJbmZvID0gbV9zdGF0
ZS5yZXZlcnNlTWFwcGluZ1tjYW5kaWRhdGVdOworICAgICAgICAgICAgICAgIGlmIChyZWdJbmZv
LmlzTG9ja2VkIHx8IHJlZ0luZm8udG1wIHx8ICFmdW5jdG9yKGNhbmRpZGF0ZSkpCisgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIHJlZyA9IGNhbmRpZGF0ZTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KCFyZWcpIHsKKyAgICAgICAgICAgICAgICBpZiAoZmlsbEVmZm9ydCA9PSBEb250U3BpbGwpIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nKCIgICAgICAgICAgICBHaXZpbmcgdXAgZHVlIHRvIGVmZm9ydC5cbiIpOworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gUmVnKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIE5lZWQgdG8gc3BpbGwgc29tZXRoaW5nLiBT
cGlsbCB0aGUgcmVnIHRoYXQgaG9sZHMgdGhlIHRtcCB0aGF0IGhhcyB0aGUgbGVhc3Qgd2FybQor
ICAgICAgICAgICAgICAgIC8vIHVzZXMuCisgICAgICAgICAgICAgICAgdW5zaWduZWQgbWluV2Fy
bVVzZXMgPSBVSU5UX01BWDsKKyAgICAgICAgICAgICAgICBmb3IgKFJlZyBjYW5kaWRhdGUgOiBy
ZWdzSW5Qcmlvcml0eU9yZGVyKHR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgIFJlZ0luZm8m
IHJlZ0luZm8gPSBtX3N0YXRlLnJldmVyc2VNYXBwaW5nW2NhbmRpZGF0ZV07CisgICAgICAgICAg
ICAgICAgICAgIGlmIChyZWdJbmZvLmlzTG9ja2VkIHx8ICFmdW5jdG9yKGNhbmRpZGF0ZSkpCisg
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgbnVtV2FybVVzZXMgPSBtX3VzZUNvdW50c1tyZWdJbmZvLnRtcF0ubnVtV2FybVVzZXM7
CisgICAgICAgICAgICAgICAgICAgIGlmIChudW1XYXJtVXNlcyA8IG1pbldhcm1Vc2VzKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZWcgPSBjYW5kaWRhdGU7CisgICAgICAgICAgICAgICAg
ICAgICAgICBtaW5XYXJtVXNlcyA9IG51bVdhcm1Vc2VzOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorIAorICAgICAgICAgICAgICAgIGlmICghcmVnKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZygiICAgICAgICAgICAgUmFuIG91dCBvZiByZWdpc3RlcnMuXG4iKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIFJlZygpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygi
ICAgICAgICAgICAgVXNpbmcgIiwgcmVnLCAiXG4iKTsKKworICAgICAgICBzcGlsbChyZWcpOwor
ICAgICAgICBpZiAoQXJnOjppc0FueVVzZShyb2xlKSAmJiByb2xlICE9IEFyZzo6U2NyYXRjaCkg
eworICAgICAgICAgICAgU3RhY2tTbG90KiBzbG90ID0gc3BpbGxTbG90KHRtcCk7CisgICAgICAg
ICAgICBpZiAoaW5mby5oYXNDb25zdGFudCkgeworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHR5cGUgPT0gQXJnOjpHUCk7CisgICAgICAgICAgICAgICAgYWRkTW92ZShTaHVmZmxlUGFp
cihBcmc6OmltbTY0KGluZm8uY29uc3RhbnQpLCBUbXAocmVnKSwgd2lkdGgoc2xvdCkpKTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5mby5o
YXNTcGlsbCk7CisgICAgICAgICAgICAgICAgYWRkTW92ZShTaHVmZmxlUGFpcihBcmc6OnN0YWNr
KHNsb3QpLCBUbXAocmVnKSwgd2lkdGgoc2xvdCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICBtX3N0YXRlLnJldmVyc2VNYXBwaW5nW3JlZ10udG1wID0gdG1wOworICAgICAg
ICBpbmZvLnJlZyA9IHJlZzsKKyAgICAgICAgcmV0dXJuIHJlZzsKKyAgICB9CisKKyAgICB2b2lk
IHNwaWxsKFJlZyByZWcpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChyZWcpOworICAg
ICAgICBSZWdJbmZvJiByZWdJbmZvID0gbV9zdGF0ZS5yZXZlcnNlTWFwcGluZ1tyZWddOworICAg
ICAgICBSRUxFQVNFX0FTU0VSVCghcmVnSW5mby5pc0xvY2tlZCk7CisgICAgICAgIGlmICghcmVn
SW5mby50bXApCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICh2ZXJib3NlKQorICAg
ICAgICAgICAgZGF0YUxvZygiICAgICAgICAgU3BpbGxpbmcgIiwgcmVnLCAiXG4iKTsKKyAgICAg
ICAgCisgICAgICAgIFRtcEluZm8mIHRtcEluZm8gPSBnZXRJbmZvKHJlZ0luZm8udG1wKTsKKwor
ICAgICAgICBpZiAoIXRtcEluZm8uaGFzU3BpbGwpIHsKKyAgICAgICAgICAgIFN0YWNrU2xvdCog
c2xvdCA9IHNwaWxsU2xvdChyZWdJbmZvLnRtcCk7CisgICAgICAgICAgICBhZGRNb3ZlKFNodWZm
bGVQYWlyKFRtcChyZWcpLCBBcmc6OnN0YWNrKHNsb3QpLCB3aWR0aChzbG90KSkpOworICAgICAg
ICAgICAgdG1wSW5mby5oYXNTcGlsbCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmVnSW5m
by50bXAgPSBUbXAoKTsKKyAgICAgICAgdG1wSW5mby5yZWcgPSBSZWcoKTsKKyAgICB9CisKKyAg
ICB2b2lkIGtpbGwoVG1wIHRtcCkKKyAgICB7CisgICAgICAgIFRtcEluZm8mIHRtcEluZm8gPSBn
ZXRJbmZvKHRtcCk7CisgICAgICAgIGlmICh0bXBJbmZvLnJlZykgeworICAgICAgICAgICAgUmVn
SW5mbyYgcmVnSW5mbyA9IG1fc3RhdGUucmV2ZXJzZU1hcHBpbmdbdG1wSW5mby5yZWddOworICAg
ICAgICAgICAgaWYgKHJlZ0luZm8uaXNMb2NrZWQpCisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgdG1wSW5mby5yZWcgPSBSZWcoKTsKKyAgICAgICAgICAgIHJlZ0luZm8udG1w
ID0gVG1wKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAg
IGRhdGFMb2coIiAgICAgICAgIEtpbGxpbmcgIiwgdG1wLCAiXG4iKTsKKyAgICAgICAgCisgICAg
ICAgIHRtcEluZm8uaGFzQ29uc3RhbnQgPSBmYWxzZTsKKyAgICAgICAgdG1wSW5mby5oYXNTcGls
bCA9IGZhbHNlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVnIGxvY2soUmVnIHJl
ZykKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlZyk7CisgICAgICAgIGJvb2wmIGlz
TG9ja2VkID0gbV9zdGF0ZS5yZXZlcnNlTWFwcGluZ1tyZWddLmlzTG9ja2VkOworICAgICAgICBp
ZiAoIWlzTG9ja2VkKSB7CisgICAgICAgICAgICBpc0xvY2tlZCA9IHRydWU7CisgICAgICAgICAg
ICBtX2xvY2tlZC5hcHBlbmQocmVnKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVnOwor
ICAgIH0KKworICAgIHZvaWQgdW5sb2NrKFJlZyByZWcpCisgICAgeworICAgICAgICBtX3N0YXRl
LnJldmVyc2VNYXBwaW5nW3JlZ10uaXNMb2NrZWQgPSBmYWxzZTsKKyAgICB9CisKKyAgICB2b2lk
IHVubG9ja0FsbCgpCisgICAgeworICAgICAgICBmb3IgKFJlZyByZWcgOiBtX2xvY2tlZCkKKyAg
ICAgICAgICAgIHVubG9jayhyZWcpOworICAgICAgICBtX2xvY2tlZC5yZXNpemUoMCk7CisgICAg
fQorCisgICAgdm9pZCBhZGRNb3ZlKGNvbnN0IFNodWZmbGVQYWlyJiBwYWlyKQorICAgIHsKKyAg
ICAgICAgbV9zaHVmZmxlUGFpcnMucmVtb3ZlQWxsTWF0Y2hpbmcoCisgICAgICAgICAgICBbJl0g
KGNvbnN0IFNodWZmbGVQYWlyJiBvdGhlclBhaXIpIC0+IGJvb2wgeworICAgICAgICAgICAgICAg
IHJldHVybiBvdGhlclBhaXIuZHN0KCkgPT0gcGFpci5kc3QoKTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICBmb3IgKFNodWZmbGVQYWlyJiBvdGhlclBhaXIgOiBtX3NodWZmbGVQYWlycykgewor
ICAgICAgICAgICAgaWYgKG90aGVyUGFpci5kc3QoKSA9PSBwYWlyLnNyYygpKSB7CisgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQob3RoZXJQYWlyLndpZHRoKCkgPT0gcGFpci53aWR0aCgp
KTsKKyAgICAgICAgICAgICAgICBtX3NodWZmbGVQYWlycy5hcHBlbmQoU2h1ZmZsZVBhaXIob3Ro
ZXJQYWlyLnNyYygpLCBwYWlyLmRzdCgpLCBwYWlyLndpZHRoKCkpKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbV9zaHVmZmxlUGFp
cnMuYXBwZW5kKHBhaXIpOworICAgIH0KKworICAgIHZvaWQgZW1pdFNodWZmbGUodW5zaWduZWQg
aW5kZXgpCisgICAgeworICAgICAgICBpZiAobV9zaHVmZmxlUGFpcnMuaXNFbXB0eSgpKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQoaW5kZXgsIGNy
ZWF0ZVNodWZmbGUobV9ibG9jay0+YXQoaW5kZXgpLm9yaWdpbiwgbV9zaHVmZmxlUGFpcnMpKTsK
KyAgICAgICAgbV9zaHVmZmxlUGFpcnMucmVzaXplKDApOworICAgIH0KKworICAgIEFyZzo6V2lk
dGggd2lkdGgoU3RhY2tTbG90KiBzbG90KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFyZzo6d2lk
dGhGb3JCeXRlcyhzbG90LT5ieXRlU2l6ZSgpKTsKKyAgICB9CisKKyAgICAvLyBXZSBtYXkgY2hv
b3NlIHRvIGRvIGEgZnVsbHdpZHRoIGRlZiBvciB1c2Ugb24gYSBzdWJ3aWR0aCBzcGlsbCBzbG90
LiBXaGVuIHRoaXMgaGFwcGVucywgd2UKKyAgICAvLyBuZWVkIHRvIGluY3JlYXNlIHRoZSB3aWR0
aCBvZiB0aGUgc2xvdC4gTm90ZSB0aGF0IHdlIHJlbHkgb24gc3BpbGwgc2xvdHMgaGF2aW5nIFpE
ZWYKKyAgICAvLyBzZW1hbnRpY3MuCisgICAgdm9pZCBlbnN1cmVXaWR0aChTdGFja1Nsb3QqIHNs
b3QsIEFyZzo6V2lkdGggd2lkdGgpCisgICAgeworICAgICAgICBzbG90LT5lbnN1cmVTaXplKEFy
Zzo6Ynl0ZXMod2lkdGgpKTsKKyAgICB9CisgICAgCisgICAgU3RhY2tTbG90KiBzcGlsbFNsb3Qo
VG1wIHRtcCkKKyAgICB7CisgICAgICAgIFN0YWNrU2xvdComIHJlc3VsdCA9IG1fc3BpbGxTbG90
cy5hZGQodG1wLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CisgICAgICAgIGlmICghcmVzdWx0
KSB7CisgICAgICAgICAgICByZXN1bHQgPSBtX2NvZGUuYWRkU3RhY2tTbG90KAorICAgICAgICAg
ICAgICAgIG1fdG1wV2lkdGgud2lkdGgodG1wKSA8PSBBcmc6OldpZHRoMzIgPyA0IDogOCwKKyAg
ICAgICAgICAgICAgICBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXMpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
CisgICAgY2xhc3MgUmVnTWFwIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFJlZ01hcCgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICAgICAgY2FzZSBBcmc6
OkdQOgorICAgICAgICAgICAgICAgIG1fdmVjdG9yLmZpbGwoVCgpLCBNYWNyb0Fzc2VtYmxlcjo6
bnVtYmVyT2ZSZWdpc3RlcnMoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIEFyZzo6RlA6CisgICAgICAgICAgICAgICAgbV92ZWN0b3IuZmlsbChUKCksIE1hY3Jv
QXNzZW1ibGVyOjpudW1iZXJPZkZQUmVnaXN0ZXJzKCkpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgVCYgb3BlcmF0b3JbXShSZWcg
cmVnKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgICAg
IGNhc2UgQXJnOjpHUDoKKyAgICAgICAgICAgICAgICByZXR1cm4gbV92ZWN0b3JbTWFjcm9Bc3Nl
bWJsZXI6OnJlZ2lzdGVySW5kZXgocmVnLmdwcigpKV07CisgICAgICAgICAgICBjYXNlIEFyZzo6
RlA6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fdmVjdG9yW01hY3JvQXNzZW1ibGVyOjpmcFJl
Z2lzdGVySW5kZXgocmVnLmZwcigpKV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgVmVjdG9yPFQ+IG1fdmVjdG9yOworICAgIH07CisK
KyAgICBzdHJ1Y3QgU3RhdGUgeworICAgICAgICBIYXNoTWFwPFRtcCwgVG1wSW5mbz4gbWFwcGlu
ZzsgLy8gSWYgdGhlIG9yaWdpbmFsIHByb2dyYW0gYXNrcyBmb3IgdGhpcyB0bXAsIHdoZXJlIGlz
IGl0PworICAgICAgICBSZWdNYXA8UmVnSW5mbz4gcmV2ZXJzZU1hcHBpbmc7IC8vIFdoYXQgdG1w
IGRvZXMgdGhpcyByZWdpc3RlciBob2xkIHJpZ2h0IG5vdz8KKyAgICAgICAgYm9vbCB2aXNpdGVk
QnlQcm9wYWdhdGlvbiB7IGZhbHNlIH07CisgICAgICAgIGJvb2wgaXNTZXR0bGVkIHsgZmFsc2Ug
fTsKKyAgICB9OworCisgICAgZW51bSBEZWF0aE1vZGUgeworICAgICAgICBFYXJseURlYXRoLAor
ICAgICAgICBMYXRlRGVhdGgKKyAgICB9OworCisgICAgc3RydWN0IERlYXRoIHsKKyAgICAgICAg
RGVhdGgoKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBEZWF0aChUbXAgdG1wLCBE
ZWF0aE1vZGUgZGVhdGhNb2RlKQorICAgICAgICAgICAgOiB0bXAodG1wKQorICAgICAgICAgICAg
LCBkZWF0aE1vZGUoZGVhdGhNb2RlKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIFRtcCB0bXA7CisgICAgICAgIERlYXRoTW9kZSBkZWF0aE1vZGUgeyBFYXJseURlYXRo
IH07CisgICAgfTsKKyAgICAKKyAgICBDb2RlJiBtX2NvZGU7CisgICAgVG1wTGl2ZW5lc3M8dHlw
ZT4gbV9saXZlbmVzczsKKyAgICBJbnN0TWFwPFZlY3RvcjxEZWF0aD4+IG1fZGVhdGhzOworICAg
IEluZGV4TWFwPEJhc2ljQmxvY2ssIFN0YXRlPiBtX2F0SGVhZDsKKyAgICBTdGF0ZSBtX3N0YXRl
OworICAgIFZlY3RvcjxSZWc+IG1fbG9ja2VkOworICAgIFVzZUNvdW50czxUbXA+IG1fdXNlQ291
bnRzOworICAgIFRtcFdpZHRoIG1fdG1wV2lkdGg7CisgICAgSGFzaE1hcDxUbXAsIFN0YWNrU2xv
dCo+IG1fc3BpbGxTbG90czsKKyAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrIHsgbnVsbHB0ciB9Owor
ICAgIHVuc2lnbmVkIG1faW5zdEluZGV4IHsgMCB9OworICAgIFZlY3RvcjxTaHVmZmxlUGFpcj4g
bV9zaHVmZmxlUGFpcnM7CisgICAgSW5zZXJ0aW9uU2V0IG1faW5zZXJ0aW9uU2V0OworICAgIGJv
b2wgbV9jaGFuZ2VkIHsgZmFsc2UgfTsKK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQor
Cit2b2lkIHNjYXZlbmdlUmVnaXN0ZXJzKENvZGUmIGNvZGUpCit7CisgICAgUGhhc2VTY29wZSBw
aGFzZVNjb3BlKGNvZGUsICJzY2F2ZW5nZVJlZ2lzdGVycyIpOworCisgICAgYnJlYWtDcml0aWNh
bEVkZ2VzKGNvZGUpOworCisgICAgeworICAgICAgICBTY2F2ZW5nZVJlZ2lzdGVyczxBcmc6OkZQ
PiBzY2F2ZW5nZVJlZ2lzdGVycyhjb2RlKTsKKyAgICAgICAgc2NhdmVuZ2VSZWdpc3RlcnMucnVu
KCk7CisgICAgfQorICAgIHsKKyAgICAgICAgU2NhdmVuZ2VSZWdpc3RlcnM8QXJnOjpHUD4gc2Nh
dmVuZ2VSZWdpc3RlcnMoY29kZSk7CisgICAgICAgIHNjYXZlbmdlUmVnaXN0ZXJzLnJ1bigpOwor
ICAgIH0KK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJT
Y2F2ZW5nZVJlZ2lzdGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyU2NhdmVuZ2VSZWdpc3RlcnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyU2NhdmVuZ2VSZWdpc3RlcnMuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBBaXJTY2F2ZW5nZVJlZ2lzdGVyc19oCisjZGVmaW5lIEFpclNjYXZlbmdl
UmVnaXN0ZXJzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKworLy8gVGhpcyBhbGxv
Y2F0ZXMgdGVtcG9yYXJpZXMgdG8gcmVnaXN0ZXJzIG9yIHN0YWNrIGxvY2F0aW9ucyBiYXNlZCBv
biBmb3J3YXJkIGZsb3cuIEl0IHdpbGwgaGFwcGlseQorLy8gY2hhbmdlIHRoZSBsb2NhdGlvbiBv
ZiBhIHRlbXBvcmFyeSBpbiBjYXNlIHRoZSByZWdpc3RlciBpdCBoYWQgcGlja2VkIGJlY29tZXMg
dW5hdmFpbGFibGUgb3IgaW4KKy8vIGNhc2Ugd2UgbmVlZCB0aGUgdmFsdWUgYW5kIGl0J3MgY3Vy
cmVudGx5IG9uIHRoZSBzdGFjay4gSXQgYWxzbyBwZXJmb3JtcyBtYXRlcmlhbGl6YXRpb24gb2YK
Ky8vIGNvbnN0YW50czogaWYgYSB0ZW1wb3JhcnkncyB2YWx1ZSBpcyBhbHdheXMgYSBjb25zdGFu
dCB0aGVuIGluc3RlYWQgb2Ygc3BpbGxpbmcgd2Ugd2lsbCBzaW1wbHkKKy8vIHJlbWF0ZXJpYWxp
emUuCisvLworLy8gVGhpcyBwaGFzZSBpcyBtZWFudCB0byBydW4gYWZ0ZXIgdGhlIHByaW1hcnkg
cmVnaXN0ZXIgYWxsb2NhdG9yLiBUaGUgcHJpbWFyeSByZWdpc3RlciBhbGxvY2F0b3IKKy8vIGlz
IGJlc3Qgb2ZmIGhhbmRsaW5nIHNwaWxscyBieSBzaW1wbHkgbGVhdmluZyBzcGlsbGVkIFRtcHMg
YWxvbmUuIFRoaXMgcGhhc2Ugd2lsbCBlbWl0IHByb3BlcgorLy8gc3BpbGwgY29kZSwgYW5kIGl0
IHdpbGwgZG8gaXQgbW9yZSBlZmZpY2llbnRseSB0aGFuIGNsYXNzaWNhbCBzcGlsbGluZyBhbGdv
cml0aG1zLgordm9pZCBzY2F2ZW5nZVJlZ2lzdGVycyhDb2RlJik7CisKK30gfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAv
LyBBaXJTY2F2ZW5nZVJlZ2lzdGVyc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAJKHJldmlzaW9uIDE5NTE3NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAogI2lmIEVOQUJMRShCM19KSVQpCiAKICNp
bmNsdWRlICJBaXJDb2RlLmgiCi0jaW5jbHVkZSAiQWlyRml4U3BpbGxTbG90WkRlZi5oIgogI2lu
Y2x1ZGUgIkFpckluc2VydGlvblNldC5oIgogI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiQWlyTGl2ZW5lc3MuaCIKQEAgLTg0LDcgKzgzLDYgQEAgdm9pZCBzcGlsbEV2ZXJ5
dGhpbmcoQ29kZSYgY29kZSkKIAogICAgIC8vIEFsbG9jYXRlIGEgc3RhY2sgc2xvdCBmb3IgZWFj
aCB0bXAuCiAgICAgVmVjdG9yPFN0YWNrU2xvdCo+IGFsbFN0YWNrU2xvdHNbQXJnOjpudW1UeXBl
c107Ci0gICAgdW5zaWduZWQgbmV3U3RhY2tTbG90VGhyZXNob2xkID0gY29kZS5zdGFja1Nsb3Rz
KCkuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgdHlwZUluZGV4ID0gMDsgdHlwZUluZGV4IDwg
QXJnOjpudW1UeXBlczsgKyt0eXBlSW5kZXgpIHsKICAgICAgICAgVmVjdG9yPFN0YWNrU2xvdCo+
JiBzdGFja1Nsb3RzID0gYWxsU3RhY2tTbG90c1t0eXBlSW5kZXhdOwogICAgICAgICBBcmc6OlR5
cGUgdHlwZSA9IHN0YXRpY19jYXN0PEFyZzo6VHlwZT4odHlwZUluZGV4KTsKQEAgLTEzMCw3ICsx
MjgsNiBAQCB2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJiBjb2RlKQogICAgICAgICAgICAgICAg
ICAgICBzd2l0Y2ggKHJvbGUpIHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OlVzZToK
ICAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkNvbGRVc2U6Ci0gICAgICAgICAgICAgICAg
ICAgIGNhc2UgQXJnOjpFYXJseURlZjoKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoUmVn
IHJlZyA6IHJlZ3NJblByaW9yaXR5T3JkZXIodHlwZSkpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIXNldEJlZm9yZS5nZXQocmVnKSkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZXRCZWZvcmUuc2V0KHJlZyk7CkBAIC0xNTQsNiArMTUxLDcgQEAgdm9pZCBz
cGlsbEV2ZXJ5dGhpbmcoQ29kZSYgY29kZSkKICAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6
OkxhdGVVc2U6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpMYXRlQ29sZFVzZToKICAg
ICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OlNjcmF0Y2g6CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgQXJnOjpFYXJseURlZjoKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoUmVnIHJl
ZyA6IHJlZ3NJblByaW9yaXR5T3JkZXIodHlwZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIXNldEJlZm9yZS5nZXQocmVnKSAmJiAhc2V0QWZ0ZXIuZ2V0KHJlZykpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QWZ0ZXIuc2V0KHJlZyk7CkBAIC0xODIs
MTIgKzE4MCw2IEBAIHZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUmIGNvZGUpCiAgICAgICAgIH0K
ICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOwogICAgIH0KLQotICAgIGZpeFNw
aWxsU2xvdFpEZWYoCi0gICAgICAgIGNvZGUsCi0gICAgICAgIFsmXSAoU3RhY2tTbG90KiBzdGFj
a1Nsb3QpIC0+IGJvb2wgewotICAgICAgICAgICAgcmV0dXJuIHN0YWNrU2xvdC0+aW5kZXgoKSA+
PSBuZXdTdGFja1Nsb3RUaHJlc2hvbGQ7Ci0gICAgICAgIH0pOwogfQogCiB9IH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMzo6QWlyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clN0YWNrU2xvdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyU3RhY2tTbG90LmgJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyU3RhY2tTbG90LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDEyIEBA
IHB1YmxpYzoKICAgICBib29sIGlzTG9ja2VkKCkgY29uc3QgeyByZXR1cm4gbV9raW5kID09IFN0
YWNrU2xvdEtpbmQ6OkxvY2tlZDsgfQogICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1
cm4gbV9pbmRleDsgfQogCisgICAgdm9pZCBlbnN1cmVTaXplKHVuc2lnbmVkIHJlcXVlc3RlZFNp
emUpCisgICAgeworICAgICAgICBBU1NFUlQoIW1fb2Zmc2V0RnJvbUZQKTsKKyAgICAgICAgbV9i
eXRlU2l6ZSA9IHN0ZDo6bWF4KG1fYnl0ZVNpemUsIHJlcXVlc3RlZFNpemUpOworICAgIH0KKwog
ICAgIHVuc2lnbmVkIGFsaWdubWVudCgpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoYnl0ZVNp
emUoKSA8PSAxKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJWYWxpZGF0
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJWYWxp
ZGF0ZS5jcHAJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw2ICs4MiwxMyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKGlzVGVybWluYWwoaW5zdC5vcGNvZGUp
LCAoIkF0ICIsIGluc3QsICIgaW4gIiwgKmJsb2NrKSk7CiAgICAgICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgICAgICBWQUxJREFURSghaXNUZXJtaW5hbChpbnN0Lm9wY29kZSksICgi
QXQgIiwgaW5zdCwgIiBpbiAiLCAqYmxvY2spKTsKKworICAgICAgICAgICAgICAgIC8vIGZvckVh
Y2hBcmcgbXVzdCByZXR1cm4gQXJnJidzIHRoYXQgcG9pbnQgaW50byB0aGUgYXJncyBhcnJheS4K
KyAgICAgICAgICAgICAgICBpbnN0LmZvckVhY2hBcmcoCisgICAgICAgICAgICAgICAgICAgIFsm
XSAoQXJnJiBhcmcsIEFyZzo6Um9sZSwgQXJnOjpUeXBlLCBBcmc6OldpZHRoKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBWQUxJREFURSgmYXJnID49ICZpbnN0LmFyZ3NbMF0sICgiQXQgIiwg
YXJnLCAiIGluICIsIGluc3QsICIgaW4gIiwgKmJsb2NrKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBWQUxJREFURSgmYXJnIDw9ICZpbnN0LmFyZ3MubGFzdCgpLCAoIkF0ICIsIGFyZywgIiBp
biAiLCBpbnN0LCAiIGluICIsICpibG9jaykpOworICAgICAgICAgICAgICAgICAgICB9KTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDogYmxv
Y2stPnN1Y2Nlc3NvckJsb2NrcygpKQogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbGlkQmxv
Y2tzLmNvbnRhaW5zKHN1Y2Nlc3NvciksICgiSW4gIiwgKmJsb2NrKSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4
LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogLy8gV2UgYXJlIGluIHRoZSBt
aWRkbGUgb2YgYW4gZXhwZXJpbWVudGFsIHRyYW5zaXRpb24gZnJvbSBMTFZNIHRvIEIzIGFzIHRo
ZSBiYWNrZW5kIGZvciB0aGUgRlRMLiBXZSBkb24ndAogLy8geWV0IGtub3cgaG93IGl0IHdpbGwg
dHVybiBvdXQuIEZvciBub3csIHRoaXMgZmxhZyB3aWxsIGNvbnRyb2wgd2hldGhlciBGVEwgdXNl
cyBCMy4gUmVtZW1iZXIgdG8gc2V0IHRoaXMKIC8vIHRvIDAgYmVmb3JlIGNvbW1pdHRpbmchCi0j
ZGVmaW5lIEZUTF9VU0VTX0IzIDAKKyNkZWZpbmUgRlRMX1VTRVNfQjMgMQogCiBzdHJ1Y3QgTm9k
ZTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExCM0NvbXBpbGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQjNDb21waWxlLmNwcAko
cmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExCM0NvbXBp
bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoRlRM
X0pJVCkgJiYgRlRMX1VTRVNfQjMKIAorI2luY2x1ZGUgIkFpckNvZGUuaCIKICNpbmNsdWRlICJC
M0dlbmVyYXRlLmgiCiAjaW5jbHVkZSAiQjNQcm9jZWR1cmVJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
QjNTdGFja1Nsb3RWYWx1ZS5oIgpAQCAtNTcsNiArNTgsOSBAQCB2b2lkIGNvbXBpbGUoU3RhdGUm
IHN0YXRlLCBTYWZlcG9pbnQ6OlJlCiAgICAgR3JhcGgmIGdyYXBoID0gc3RhdGUuZ3JhcGg7CiAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBncmFwaC5tX2NvZGVCbG9jazsKICAgICBWTSYgdm0g
PSBncmFwaC5tX3ZtOworCisgICAgLy9zdGF0ZS5wcm9jLT5jb2RlKCkuc2V0RW5hYmxlUkNSUygK
KyAgICAvLyAgICBPcHRpb25zOjphaXJVc2VzUkNSUygpID8gKGNvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25Db3VudCgpID09IDU5OSkgOiBmYWxzZSk7CiAgICAgCiAgICAgewogICAgICAgICBHcmFwaFNh
ZmVwb2ludCBzYWZlcG9pbnQoc3RhdGUuZ3JhcGgsIHNhZmVwb2ludFJlc3VsdCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2
aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
TExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NTgsOCArMTg1OCw4IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgICAgIG1fb3V0Lm5vdFplcm8zMihyZXN1bHQpLCB1c3VhbGx5KGNvbnRp
bnVhdGlvbiksIHJhcmVseShzbG93Q2FzZSkpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oc2xvd0Nhc2UsIGNv
bnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAgICAgTFZhbHVlIGNvbmQgPSBtX291dC5iaXRPciht
X291dC5sZXNzVGhhbihsZWZ0LCBtX291dC5pbnQzMlplcm8pLCBtX291dC5sZXNzVGhhbihyaWdo
dCwgbV9vdXQuaW50MzJaZXJvKSk7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRlKE5lZ2F0aXZl
WmVybywgbm9WYWx1ZSgpLCAwLCBjb25kKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoTmVn
YXRpdmVaZXJvLCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0Lmxlc3NUaGFuKGxlZnQsIG1fb3V0
LmludDMyWmVybykpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShOZWdhdGl2ZVplcm8sIG5v
VmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQubGVzc1RoYW4ocmlnaHQsIG1fb3V0LmludDMyWmVybykp
OwogICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgICAg
ICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKICAgICAgICAgICAg
IH0KQEAgLTE4OTAsOCArMTg5MCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIG1f
b3V0Lm5vdFplcm82NChyZXN1bHQpLCB1c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJhcmVseShzbG93
Q2FzZSkpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxh
c3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAg
ICAgICAgICAgTFZhbHVlIGNvbmQgPSBtX291dC5iaXRPcihtX291dC5sZXNzVGhhbihsZWZ0LCBt
X291dC5pbnQ2NFplcm8pLCBtX291dC5sZXNzVGhhbihyaWdodCwgbV9vdXQuaW50NjRaZXJvKSk7
Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRlKE5lZ2F0aXZlWmVybywgbm9WYWx1ZSgpLCAwLCBj
b25kKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoTmVnYXRpdmVaZXJvLCBub1ZhbHVlKCks
IG51bGxwdHIsIG1fb3V0Lmxlc3NUaGFuKGxlZnQsIG1fb3V0LmludDY0WmVybykpOworICAgICAg
ICAgICAgICAgIHNwZWN1bGF0ZShOZWdhdGl2ZVplcm8sIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9v
dXQubGVzc1RoYW4ocmlnaHQsIG1fb3V0LmludDY0WmVybykpOwogICAgICAgICAgICAgICAgIG1f
b3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhj
b250aW51YXRpb24sIGxhc3ROZXh0KTsKICAgICAgICAgICAgIH0KQEAgLTE5NTcsOCArMTk1Nyw4
IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1f
b3V0LmFwcGVuZFRvKHVuc2FmZURlbm9taW5hdG9yLCBjb250aW51YXRpb24pOwogICAgICAgICAg
ICAgICAgIExWYWx1ZSBuZWcyVG9UaGUzMSA9IG1fb3V0LmNvbnN0SW50MzIoLTIxNDc0ODM2NDct
MSk7Ci0gICAgICAgICAgICAgICAgTFZhbHVlIGNvbmQgPSBtX291dC5iaXRPcihtX291dC5pc1pl
cm8zMihkZW5vbWluYXRvciksIG1fb3V0LmVxdWFsKG51bWVyYXRvciwgbmVnMlRvVGhlMzEpKTsK
LSAgICAgICAgICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIG5vVmFsdWUoKSwgMCwgY29uZCk7
CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIs
IG1fb3V0LmlzWmVybzMyKGRlbm9taW5hdG9yKSk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRl
KE92ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0LmVxdWFsKG51bWVyYXRvciwgbmVn
MlRvVGhlMzEpKTsKICAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAK
ICAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsK
QEAgLTIwMTMsOCArMjAxMyw4IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAgICBMQmFzaWNC
bG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHVuc2FmZURlbm9taW5hdG9yLCBjb250aW51
YXRpb24pOwogICAgICAgICAgICAgICAgIExWYWx1ZSBuZWcyVG9UaGUzMSA9IG1fb3V0LmNvbnN0
SW50MzIoLTIxNDc0ODM2NDctMSk7Ci0gICAgICAgICAgICAgICAgTFZhbHVlIGNvbmQgPSBtX291
dC5iaXRPcihtX291dC5pc1plcm8zMihkZW5vbWluYXRvciksIG1fb3V0LmVxdWFsKG51bWVyYXRv
ciwgbmVnMlRvVGhlMzEpKTsKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIG5v
VmFsdWUoKSwgMCwgY29uZCk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCBu
b1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0LmlzWmVybzMyKGRlbm9taW5hdG9yKSk7CisgICAgICAg
ICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0LmVx
dWFsKG51bWVyYXRvciwgbmVnMlRvVGhlMzEpKTsKICAgICAgICAgICAgICAgICBtX291dC5qdW1w
KGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51
YXRpb24sIGxhc3ROZXh0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0
ZXJTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVy
U2V0LmgJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVn
aXN0ZXJTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtOTEsNiArOTEsMTMgQEAgcHVibGljOgogICAg
ICAgICBBU1NFUlQoISFyZWcpOwogICAgICAgICByZXR1cm4gbV92ZWN0b3IuZ2V0KHJlZy5pbmRl
eCgpKTsKICAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYWJsZT4KKyAgICB2b2lk
IHNldEFsbChjb25zdCBJdGVyYWJsZSYgaXRlcmFibGUpCisgICAgeworICAgICAgICBmb3IgKFJl
ZyByZWcgOiBpdGVyYWJsZSkKKyAgICAgICAgICAgIHNldChyZWcpOworICAgIH0KICAgICAKICAg
ICB2b2lkIG1lcmdlKGNvbnN0IFJlZ2lzdGVyU2V0JiBvdGhlcikgeyBtX3ZlY3Rvci5tZXJnZShv
dGhlci5tX3ZlY3Rvcik7IH0KICAgICB2b2lkIGZpbHRlcihjb25zdCBSZWdpc3RlclNldCYgb3Ro
ZXIpIHsgbV92ZWN0b3IuZmlsdGVyKG90aGVyLm1fdmVjdG9yKTsgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDMs
NiArMzQzLDggQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgdihib29s
LCBsb2dCM1BoYXNlVGltZXMsIGZhbHNlLCBudWxscHRyKSBcCiAgICAgdihkb3VibGUsIHJhcmVC
bG9ja1BlbmFsdHksIDAuMDAxLCBudWxscHRyKSBcCiAgICAgdihib29sLCBhaXJTcGlsbHNFdmVy
eXRoaW5nLCBmYWxzZSwgbnVsbHB0cikgXAorICAgIHYoYm9vbCwgYWlyVXNlc1JDUlMsIGZhbHNl
LCBudWxscHRyKSBcCisgICAgdihib29sLCBsb2dBaXJSZWdpc3RlclByZXNzdXJlLCBmYWxzZSwg
bnVsbHB0cikgXAogICAgIFwKICAgICB2KGJvb2wsIHVzZURvbGxhclZNLCBmYWxzZSwgImluc3Rh
bGxzIHRoZSAkdm0gZGVidWdnaW5nIHRvb2wgaW4gZ2xvYmFsIG9iamVjdHMiKSBcCiAgICAgdihv
cHRpb25TdHJpbmcsIGZ1bmN0aW9uT3ZlcnJpZGVzLCBudWxscHRyLCAiZmlsZSB3aXRoIGRlYnVn
Z2luZyBvdmVycmlkZXMgZm9yIGZ1bmN0aW9uIGJvZGllcyIpIFwKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL0luZGV4U3BhcnNlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSW5kZXhT
cGFyc2VTZXQuaAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL1dURi93dGYvSW5kZXhTcGFy
c2VTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsOCArNDcsOCBAQCBjbGFzcyBJbmRleFNwYXJz
ZVNldCB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgSW5kZXhTcGFyc2VTZXQodW5zaWduZWQgbWF4
VmFsdWUpOwogCi0gICAgdm9pZCBhZGQodW5zaWduZWQpOwotICAgIHZvaWQgcmVtb3ZlKHVuc2ln
bmVkKTsKKyAgICBib29sIGFkZCh1bnNpZ25lZCk7CisgICAgYm9vbCByZW1vdmUodW5zaWduZWQp
OwogICAgIHZvaWQgY2xlYXIoKTsKIAogICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdDsKQEAgLTcx
LDI5ICs3MSwzMyBAQCBpbmxpbmUgSW5kZXhTcGFyc2VTZXQ8T3ZlcmZsb3dIYW5kbGVyPjo6CiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KLWlubGluZSB2b2lkIEluZGV4
U3BhcnNlU2V0PE92ZXJmbG93SGFuZGxlcj46OmFkZCh1bnNpZ25lZCB2YWx1ZSkKK2lubGluZSBi
b29sIEluZGV4U3BhcnNlU2V0PE92ZXJmbG93SGFuZGxlcj46OmFkZCh1bnNpZ25lZCB2YWx1ZSkK
IHsKICAgICBpZiAoY29udGFpbnModmFsdWUpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIHVuc2lnbmVkIG5ld1Bvc2l0aW9uID0gbV92YWx1ZXMuc2l6ZSgp
OwogICAgIG1fdmFsdWVzLmFwcGVuZCh2YWx1ZSk7CiAgICAgbV9tYXBbdmFsdWVdID0gbmV3UG9z
aXRpb247CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE92ZXJmbG93
SGFuZGxlcj4KLWlubGluZSB2b2lkIEluZGV4U3BhcnNlU2V0PE92ZXJmbG93SGFuZGxlcj46OnJl
bW92ZSh1bnNpZ25lZCB2YWx1ZSkKK2lubGluZSBib29sIEluZGV4U3BhcnNlU2V0PE92ZXJmbG93
SGFuZGxlcj46OnJlbW92ZSh1bnNpZ25lZCB2YWx1ZSkKIHsKICAgICB1bnNpZ25lZCBwb3NpdGlv
biA9IG1fbWFwW3ZhbHVlXTsKICAgICBpZiAocG9zaXRpb24gPj0gbV92YWx1ZXMuc2l6ZSgpKQot
ICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChtX3ZhbHVl
c1twb3NpdGlvbl0gPT0gdmFsdWUpIHsKICAgICAgICAgdW5zaWduZWQgbGFzdFZhbHVlID0gbV92
YWx1ZXMubGFzdCgpOwogICAgICAgICBtX3ZhbHVlc1twb3NpdGlvbl0gPSBsYXN0VmFsdWU7CiAg
ICAgICAgIG1fbWFwW2xhc3RWYWx1ZV0gPSBwb3NpdGlvbjsKICAgICAgICAgbV92YWx1ZXMucmVt
b3ZlTGFzdCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CisKKyAgICByZXR1cm4gZmFs
c2U7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL1N0cmluZ1ByaW50U3RyZWFtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvU3RyaW5nUHJpbnRTdHJlYW0uaAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL1dURi93
dGYvU3RyaW5nUHJpbnRTdHJlYW0uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsNiArMzgsOCBAQCBwdWJs
aWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgflN0cmluZ1ByaW50U3RyZWFtKCk7
CiAgICAgCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgdm9pZCB2cHJpbnRmKGNvbnN0
IGNoYXIqIGZvcm1hdCwgdmFfbGlzdCkgb3ZlcnJpZGUgV1RGX0FUVFJJQlVURV9QUklOVEYoMiwg
MCk7CisKKyAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9uZXh0OyB9CiAgICAg
CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIENTdHJpbmcgdG9DU3RyaW5nKCk7CiAgICAgV1RGX0VY
UE9SVF9QUklWQVRFIFN0cmluZyB0b1N0cmluZygpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269190</attachid>
            <date>2016-01-17 11:35:58 -0800</date>
            <delta_ts>2016-01-17 12:27:36 -0800</delta_ts>
            <desc>trying more things</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>154913</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTUxNzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzc5LDcgKzM3OSw5IEBACiAJCTBGNDkzQUZBMTZEMENB
RDMwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ5M0FGODE2RDBDQUQxMDA4NDUwOEIgLyogU291cmNl
UHJvdmlkZXIuY3BwICovOyB9OwogCQkwRjRCOTREQzE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRB
cnJheUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNEI5NERCMTdCOUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNEM5MTY2MUMy
OUY0RjIwMDQzNDFBNiAvKiBCM09yaWdpbkR1bXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEM5MTY1MUMyOUY0RjIwMDQzNDFBNiAvKiBCM09yaWdp
bkR1bXAuaCAqLzsgfTsKLQkJMEY0QzkxNjgxQzJCM0Q2ODAwNDM0MUE2IC8qIEFpckZpeFNwaWxs
U2xvdFpEZWYuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNEM5MTY3MUMyQjNENjgwMDQzNDFBNiAvKiBBaXJGaXhTcGlsbFNsb3RaRGVmLmggKi87IH07
CisJCTBGNERFMUNCMUM0QjYwQjgwMDRENkMxMSAvKiBBaXJMaXZlbmVzcy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRERTFDQTFDNEI2MEI4MDA0
RDZDMTEgLyogQWlyTGl2ZW5lc3MuY3BwICovOyB9OworCQkwRjRERTFDRTFDNEMxQjU0MDA0RDZD
MTEgLyogQWlyRml4T2J2aW91c1NwaWxscy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRERTFDQzFDNEMxQjU0MDA0RDZDMTEgLyogQWlyRml4T2J2
aW91c1NwaWxscy5jcHAgKi87IH07CisJCTBGNERFMUNGMUM0QzFCNTQwMDRENkMxMSAvKiBBaXJG
aXhPYnZpb3VzU3BpbGxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjRERTFDRDFDNEMxQjU0MDA0RDZDMTEgLyogQWlyRml4T2J2aW91c1NwaWxscy5o
ICovOyB9OwogCQkwRjRGMjlERjE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9u
Q291bnRFc3RpbWF0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0RjI5REQxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1
dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcCAqLzsgfTsKIAkJMEY0RjI5RTAxOEI2QUQxQzAw
NTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRGMjlERTE4QjZBRDFD
MDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCAqLzsg
fTsKIAkJMEY1MEFGM0MxOTNFOEIzOTAwNjc0RUU4IC8qIERGR1N0cnVjdHVyZUNsb2JiZXJTdGF0
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1MEFG
M0IxOTNFOEIzOTAwNjc0RUU4IC8qIERGR1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oICovOyB9OwpA
QCAtNzI0LDYgKzcyNiwxNCBAQAogCQkwRkUyMjhFRTE0MzZBQjJDMDAxOTZDNDggLyogT3B0aW9u
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUy
MjhFQTE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5jcHAgKi87IH07CiAJCTBGRTI1NEY2MUFC
REREMjIwMEE3QzZEMiAvKiBERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTI1NEY0MUFCREREMjIwMEE3
QzZEMiAvKiBERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcCAqLzsgfTsKIAkJMEZFMjU0Rjcx
QUJEREQyMjAwQTdDNkQyIC8qIERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTI1NEY1MUFCREREMjIwMEE3
QzZEMiAvKiBERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmggKi87IH07CisJCTBGRTM0QzExMUM0
QjEwOTYwMDAzQTUxMiAvKiBBaXJCbG9ja0luc2VydGlvblNldC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUzNEMwQjFDNEIxMDk2MDAwM0E1MTIg
LyogQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwICovOyB9OworCQkwRkUzNEMxMjFDNEIxMDk2MDAw
M0E1MTIgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTM0QzBDMUM0QjEwOTYwMDAzQTUxMiAvKiBBaXJCbG9j
a0luc2VydGlvblNldC5oICovOyB9OworCQkwRkUzNEMxMzFDNEIxMDk2MDAwM0E1MTIgLyogQWly
QnJlYWtDcml0aWNhbEVkZ2VzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRTM0QzBEMUM0QjEwOTYwMDAzQTUxMiAvKiBBaXJCcmVha0NyaXRpY2Fs
RWRnZXMuY3BwICovOyB9OworCQkwRkUzNEMxNDFDNEIxMDk2MDAwM0E1MTIgLyogQWlyQnJlYWtD
cml0aWNhbEVkZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkUzNEMwRTFDNEIxMDk2MDAwM0E1MTIgLyogQWlyQnJlYWtDcml0aWNhbEVkZ2VzLmgg
Ki87IH07CisJCTBGRTM0QzE1MUM0QjEwOTYwMDAzQTUxMiAvKiBBaXJTY2F2ZW5nZVJlZ2lzdGVy
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUz
NEMwRjFDNEIxMDk2MDAwM0E1MTIgLyogQWlyU2NhdmVuZ2VSZWdpc3RlcnMuY3BwICovOyB9Owor
CQkwRkUzNEMxNjFDNEIxMDk2MDAwM0E1MTIgLyogQWlyU2NhdmVuZ2VSZWdpc3RlcnMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTM0QzEwMUM0QjEw
OTYwMDAzQTUxMiAvKiBBaXJTY2F2ZW5nZVJlZ2lzdGVycy5oICovOyB9OworCQkwRkUzNEMxOTFD
NEIzOUFFMDAwM0E1MTIgLyogQWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUzNEMxNzFDNEIzOUFFMDAwM0E1
MTIgLyogQWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5jcHAgKi87IH07CisJCTBGRTM0QzFBMUM0QjM5
QUUwMDAzQTUxMiAvKiBBaXJMb2dSZWdpc3RlclByZXNzdXJlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUzNEMxODFDNEIzOUFFMDAwM0E1MTIgLyog
QWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5oICovOyB9OwogCQkwRkU3MjExRDE5M0I5QzU5MDAzMUY2
RUQgLyogREZHVHJhbnNpdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkU3MjExQjE5M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNpdGlvbi5j
cHAgKi87IH07CiAJCTBGRTcyMTFFMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU3MjExQzE5
M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNpdGlvbi5oICovOyB9OwogCQkwRkU4MzQxNzFBNkVG
OTdCMDBEMDQ4NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFODM0MTUxQTZFRjk3QjAwRDA0
ODQ3IC8qIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcCAqLzsgfTsKQEAgLTI1NDIsNyAr
MjU1Miw5IEBACiAJCTBGNDkzQUY4MTZEMENBRDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTb3VyY2VQcm92aWRlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEI5NERCMTdCOUYwNzUwMEREMDNB
NCAvKiBUeXBlZEFycmF5SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBUeXBlZEFycmF5SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRD
OTE2NTFDMjlGNEYyMDA0MzQxQTYgLyogQjNPcmlnaW5EdW1wLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEIzT3JpZ2luRHVtcC5oOyBwYXRoID0gYjMvQjNPcmlnaW5EdW1wLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNEM5MTY3MUMyQjNENjgwMDQzNDFBNiAv
KiBBaXJGaXhTcGlsbFNsb3RaRGVmLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEFpckZpeFNwaWxsU2xvdFpEZWYuaDsgcGF0aCA9IGIzL2Fpci9BaXJGaXhTcGlsbFNsb3RaRGVm
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNERFMUNBMUM0QjYwQjgwMDRENkMx
MSAvKiBBaXJMaXZlbmVzcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBBaXJMaXZlbmVzcy5jcHA7IHBhdGggPSBiMy9haXIvQWlyTGl2ZW5lc3MuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjRERTFDQzFDNEMxQjU0MDA0RDZDMTEgLyogQWlyRml4
T2J2aW91c1NwaWxscy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBB
aXJGaXhPYnZpb3VzU3BpbGxzLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJGaXhPYnZpb3VzU3BpbGxz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0REUxQ0QxQzRDMUI1NDAwNEQ2
QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQWlyRml4T2J2aW91c1NwaWxscy5oOyBwYXRoID0gYjMvYWlyL0FpckZpeE9idmlvdXNT
cGlsbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0RjI5REQxOEI2QUQxQzAw
NTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50
RXN0aW1hdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdTdGF0aWNFeGVjdXRpb25Db3VudEVz
dGltYXRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEYyOURF
MThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFz
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTdGF0aWNFeGVjdXRpb25D
b3VudEVzdGltYXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR1N0YXRpY0V4ZWN1dGlvbkNvdW50
RXN0aW1hdGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTBBRjNC
MTkzRThCMzkwMDY3NEVFOCAvKiBERkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmg7IHBhdGgg
PSBkZmcvREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0yOTAwLDYgKzI5MTIsMTQgQEAKIAkJMEZFMjI4RUIxNDM2QUIyMzAwMTk2QzQ4IC8q
IE9wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3B0aW9ucy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkUyNTRGNDFBQkRERDIyMDBBN0M2RDIgLyog
REZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdW
YXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZFMjU0RjUxQUJEREQyMjAwQTdDNkQyIC8qIERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFz
ZS5oOyBwYXRoID0gZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFMzRDMEIxQzRCMTA5NjAwMDNBNTEyIC8qIEFpckJsb2NrSW5z
ZXJ0aW9uU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckJs
b2NrSW5zZXJ0aW9uU2V0LmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJCbG9ja0luc2VydGlvblNldC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTM0QzBDMUM0QjEwOTYwMDAzQTUx
MiAvKiBBaXJCbG9ja0luc2VydGlvblNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBBaXJCbG9ja0luc2VydGlvblNldC5oOyBwYXRoID0gYjMvYWlyL0FpckJsb2NrSW5zZXJ0
aW9uU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTM0QzBEMUM0QjEwOTYw
MDAzQTUxMiAvKiBBaXJCcmVha0NyaXRpY2FsRWRnZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gQWlyQnJlYWtDcml0aWNhbEVkZ2VzLmNwcDsgcGF0aCA9IGIzL2Fp
ci9BaXJCcmVha0NyaXRpY2FsRWRnZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkUzNEMwRTFDNEIxMDk2MDAwM0E1MTIgLyogQWlyQnJlYWtDcml0aWNhbEVkZ2VzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckJyZWFrQ3JpdGljYWxFZGdlcy5oOyBw
YXRoID0gYjMvYWlyL0FpckJyZWFrQ3JpdGljYWxFZGdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkUzNEMwRjFDNEIxMDk2MDAwM0E1MTIgLyogQWlyU2NhdmVuZ2VSZWdpc3Rl
cnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyU2NhdmVuZ2VS
ZWdpc3RlcnMuY3BwOyBwYXRoID0gYjMvYWlyL0FpclNjYXZlbmdlUmVnaXN0ZXJzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFMzRDMTAxQzRCMTA5NjAwMDNBNTEyIC8qIEFp
clNjYXZlbmdlUmVnaXN0ZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFp
clNjYXZlbmdlUmVnaXN0ZXJzLmg7IHBhdGggPSBiMy9haXIvQWlyU2NhdmVuZ2VSZWdpc3RlcnMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFMzRDMTcxQzRCMzlBRTAwMDNBNTEy
IC8qIEFpckxvZ1JlZ2lzdGVyUHJlc3N1cmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gQWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5jcHA7IHBhdGggPSBiMy9haXIvQWly
TG9nUmVnaXN0ZXJQcmVzc3VyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RTM0QzE4MUM0QjM5QUUwMDAzQTUxMiAvKiBBaXJMb2dSZWdpc3RlclByZXNzdXJlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckxvZ1JlZ2lzdGVyUHJlc3N1cmUuaDsgcGF0
aCA9IGIzL2Fpci9BaXJMb2dSZWdpc3RlclByZXNzdXJlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGRTcyMTFCMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1RyYW5zaXRpb24uY3BwOyBw
YXRoID0gZGZnL0RGR1RyYW5zaXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkU3MjExQzE5M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNpdGlvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdUcmFuc2l0aW9uLmg7IHBhdGggPSBkZmcvREZHVHJh
bnNpdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkU4MzQxNTFBNkVGOTdC
MDBEMDQ4NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDg0Niw3ICs0ODY2LDExIEBACiAJCQkJMEZF
Qzg1NEIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5oICovLAogCQkJCTBGRUM4NTRDMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmNwcCAqLywKIAkJCQkwRkVDODU0RDFCREFDREM3
MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5oICovLAorCQkJCTBGRTM0QzBCMUM0QjEwOTYwMDAz
QTUxMiAvKiBBaXJCbG9ja0luc2VydGlvblNldC5jcHAgKi8sCisJCQkJMEZFMzRDMEMxQzRCMTA5
NjAwMDNBNTEyIC8qIEFpckJsb2NrSW5zZXJ0aW9uU2V0LmggKi8sCiAJCQkJMEZCMzg3OEIxQkZC
QzQ0RDAwRTNBQjFFIC8qIEFpckJsb2NrV29ya2xpc3QuaCAqLywKKwkJCQkwRkUzNEMwRDFDNEIx
MDk2MDAwM0E1MTIgLyogQWlyQnJlYWtDcml0aWNhbEVkZ2VzLmNwcCAqLywKKwkJCQkwRkUzNEMw
RTFDNEIxMDk2MDAwM0E1MTIgLyogQWlyQnJlYWtDcml0aWNhbEVkZ2VzLmggKi8sCiAJCQkJMEY2
MTgzMjAxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5jcHAgKi8sCiAJ
CQkJMEY2MTgzMjExQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5oICov
LAogCQkJCTBGRUM4NTRFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuY3BwICov
LApAQCAtNDg1OSw5ICs0ODgzLDEwIEBACiAJCQkJMEY0NTcwMzcxQkU0NEM5MTAwNjJBNjI5IC8q
IEFpckVsaW1pbmF0ZURlYWRDb2RlLmggKi8sCiAJCQkJMEY2MTgzMjMxQzQ1QkYwNzAwNzI0NTBC
IC8qIEFpckVtaXRTaHVmZmxlLmNwcCAqLywKIAkJCQkwRjYxODMyNDFDNDVCRjA3MDA3MjQ1MEIg
LyogQWlyRW1pdFNodWZmbGUuaCAqLywKKwkJCQkwRjRERTFDQzFDNEMxQjU0MDA0RDZDMTEgLyog
QWlyRml4T2J2aW91c1NwaWxscy5jcHAgKi8sCisJCQkJMEY0REUxQ0QxQzRDMUI1NDAwNEQ2QzEx
IC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCAqLywKIAkJCQkyNjJEODVCNDFDMEQ2NTBGMDA2QUNC
NjEgLyogQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmNwcCAqLywKIAkJCQkyNjJEODVCNTFD
MEQ2NTBGMDA2QUNCNjEgLyogQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmggKi8sCi0JCQkJ
MEY0QzkxNjcxQzJCM0Q2ODAwNDM0MUE2IC8qIEFpckZpeFNwaWxsU2xvdFpEZWYuaCAqLywKIAkJ
CQkwRkVDODU1MjFCREFDREM3MDA4MEZGNzQgLyogQWlyRnJlcXVlbnRlZEJsb2NrLmggKi8sCiAJ
CQkJMEZFQzg1NTMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmNwcCAqLywKIAkJCQkw
RkVDODU1NDFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGUuaCAqLywKQEAgLTQ4NzYsNyAr
NDkwMSwxMCBAQAogCQkJCTBGRUM4NTVDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0SW5saW5l
cy5oICovLAogCQkJCTI2NzE4QkEyMUJFOTlGNzgwMDUyMDE3QiAvKiBBaXJJdGVyYXRlZFJlZ2lz
dGVyQ29hbGVzY2luZy5jcHAgKi8sCiAJCQkJMjY3MThCQTMxQkU5OUY3ODAwNTIwMTdCIC8qIEFp
ckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmggKi8sCisJCQkJMEY0REUxQ0ExQzRCNjBCODAw
NEQ2QzExIC8qIEFpckxpdmVuZXNzLmNwcCAqLywKIAkJCQkyNjg0RDQzNzFDMDAxNjFDMDA4MUQ2
NjMgLyogQWlyTGl2ZW5lc3MuaCAqLywKKwkJCQkwRkUzNEMxNzFDNEIzOUFFMDAwM0E1MTIgLyog
QWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5jcHAgKi8sCisJCQkJMEZFMzRDMTgxQzRCMzlBRTAwMDNB
NTEyIC8qIEFpckxvZ1JlZ2lzdGVyUHJlc3N1cmUuaCAqLywKIAkJCQkwRjYxODMyNTFDNDVCRjA3
MDA3MjQ1MEIgLyogQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcCAqLywKIAkJCQkwRjYxODMyNjFD
NDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmggKi8sCiAJCQkJMEY2MTgz
MjcxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyTWFjcm9zLmNwcCAqLywKQEAgLTQ4OTAsNiAr
NDkxOCw4IEBACiAJCQkJMEZFQzg1NjExQkRBQ0RDNzAwODBGRjc0IC8qIEFpclJlZ2lzdGVyUHJp
b3JpdHkuaCAqLywKIAkJCQkwRjQ1NzAzQTFCRTQ1RjBBMDA2MkE2MjkgLyogQWlyUmVwb3J0VXNl
ZFJlZ2lzdGVycy5jcHAgKi8sCiAJCQkJMEY0NTcwM0IxQkU0NUYwQTAwNjJBNjI5IC8qIEFpclJl
cG9ydFVzZWRSZWdpc3RlcnMuaCAqLywKKwkJCQkwRkUzNEMwRjFDNEIxMDk2MDAwM0E1MTIgLyog
QWlyU2NhdmVuZ2VSZWdpc3RlcnMuY3BwICovLAorCQkJCTBGRTM0QzEwMUM0QjEwOTYwMDAzQTUx
MiAvKiBBaXJTY2F2ZW5nZVJlZ2lzdGVycy5oICovLAogCQkJCTBGMzM4REZCMUJFRDUxMjcwMDEz
Qzg4RiAvKiBBaXJTaW1wbGlmeUNGRy5jcHAgKi8sCiAJCQkJMEYzMzhERkMxQkVENTEyNzAwMTND
ODhGIC8qIEFpclNpbXBsaWZ5Q0ZHLmggKi8sCiAJCQkJMEZFQzg1NjIxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpclNwZWNpYWwuY3BwICovLApAQCAtNjk2NCw2ICs2OTk0LDcgQEAKIAkJCQkwRkVDODU3
NDFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkVDODU3NjFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYzNzMwOTMxQzBENjdFRTAwMDUyQkZBIC8qIEFpclVzZUNvdW50cy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEZFMzRDMTQxQzRCMTA5NjAwMDNBNTEyIC8qIEFpckJyZWFrQ3JpdGljYWxFZGdl
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0NTcwMzkxQkU0NEM5MTAwNjJBNjI5IC8qIEFpckVs
aW1pbmF0ZURlYWRDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OUNGQzZGMDFDMzNCMTAwMDBD
NzY4RUEgLyogTExJbnRQQ1Jhbmdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzlENUNENUIxQzEx
MDZBOTAwQ0VDQTA3IC8qIFNhbXBsaW5nUHJvZmlsZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNzMy
Niw3ICs3MzU3LDYgQEAKIAkJCQlEQzAwMDM5MzE5RDhCRTZGMDAwMjNFQjAgLyogREZHUHJlY2lz
ZUxvY2FsQ2xvYmJlcml6ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCRTBGNzUxNkMxREIwQjAw
ODJDNUU4IC8qIERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZGRkM5NUUxNEVGOTBCNzAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBo
YXNlLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjRDOTE2ODFDMkIzRDY4MDA0MzQxQTYgLyogQWly
Rml4U3BpbGxTbG90WkRlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzRTAxQUIxOUQzNTNBNTAw
RjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI5
Q0VEMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZGQzkyMTYxQjk0RkIzRTAwNzFERDY2IC8qIERGR1Byb3BlcnR5VHlwZUtl
eS5oIGluIEhlYWRlcnMgKi8sCkBAIC03MzU3LDYgKzczODcsNyBAQAogCQkJCTcwQjc5MTk5MUMw
MjRBMjkwMDI0ODFFMiAvKiBHZW5lcmF0b3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGQzA5N0EyMTQ2QjI4Q0MwMENGMjQ0MiAvKiBERkdUaHVua3MuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRDhBMzI4MTdENTFGNTcwMENBMkM0MCAvKiBERkdUaWVyVXBDaGVja0luamVjdGlvblBo
YXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkUzNEMxQTFDNEIzOUFFMDAwM0E1MTIgLyogQWly
TG9nUmVnaXN0ZXJQcmVzc3VyZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEOEEzMkExN0Q1MUY1
NzAwQ0EyQzQwIC8qIERGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkQ4QTMyQzE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExGb3JPU1JF
bnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUz
QTA2QjQxQzEwQ0I5MzAwMzkwRkREIC8qIEpJVEJpdFhvckdlbmVyYXRvci5oIGluIEhlYWRlcnMg
Ki8sCkBAIC03NDAyLDYgKzc0MzMsNyBAQAogCQkJCTBGM0FDNzU0MTg4RTVFQzgwMDMyMDI5RiAv
KiBFeGl0aW5nSklUVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMTA1ODYxNjc1NDgxMjAw
RjhBQjZFIC8qIEV4aXRLaW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCODNBQjE0QkNGNUJC
MDA4ODVCNEYgLyogRXhwcmVzc2lvblJhbmdlSW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0
REUxQ0YxQzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3QThBRjM4MTdBREI1RjMwMDVBQjE3NCAvKiBGbG9hdDMyQXJyYXkuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3QThBRjM5MTdBREI1RjMwMDVBQjE3NCAvKiBGbG9hdDY0QXJyYXku
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjRFNTQzMTdFQTlGNTkwMEFCQjIxNyAvKiBGUFJJbmZv
LmggaW4gSGVhZGVycyAqLywKQEAgLTgwMjksNiArODA2MSw3IEBACiAJCQkJNzA1QjQxQjIxQTZF
NTAxRTAwNzE2NzU3IC8qIFN5bWJvbFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk2
QjczMjgxQkRBMDhFRjAwMzMxQjg0IC8qIFN5bWJvbFByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDMThDNDZCMEUxNkY1Q0QwMEIzNDQ2MCAvKiBTeW1ib2xUYWJsZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZFMzRDMTYxQzRCMTA5NjAwMDNBNTEyIC8qIEFpclNjYXZlbmdlUmVn
aXN0ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzg0QTI2NDExRDE2NjIyMDA1Nzc2QUMgLyog
U3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzBFQ0E2MDgxQUZEQkVBMjAwNDQ5
NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwRUNBNjA5MUFG
REJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmggaW4gSGVhZGVycyAqLywKQEAg
LTgwNDYsNiArODA3OSw3IEBACiAJCQkJMEYzMzhFMTMxQkYwMjc2QzAwMTNDODhGIC8qIEIzT3Bh
cXVlQnlwcm9kdWN0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY3MDgxN0I2QjVBQjAwQTdB
RTNGIC8qIFR5cGVkQXJyYXlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjRCOTRE
QzE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRBcnJheUlubGluZXMuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGRTM0QzEyMUM0QjEwOTYwMDAzQTUxMiAvKiBBaXJCbG9ja0luc2VydGlvblNldC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY3MDkxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlz
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjcwQjE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRB
cnJheVR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkQ0REVBMTk4MzJEQUMwMDdENEIxOSAv
KiBUeXBlTG9jYXRpb24uaCBpbiBIZWFkZXJzICovLApAQCAtODY3Niw2ICs4NzEwLDcgQEAKIAkJ
CQkwRkVDODU2RDFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFjay5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk0MzQyMkE2NjFDMTYyNjc1MDBFMkVCOTggLyogQjNSZWR1Y2VEb3VibGVU
b0Zsb2F0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUM4NTZGMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJBcmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY0REUxQ0UxQzRDMUI1NDAwNEQ2QzEx
IC8qIEFpckZpeE9idmlvdXNTcGlsbHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQzg1NzEx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZFQzg1NzMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkVDODU3NTFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTg3MjksNiArODc2NCw3IEBACiAJCQkJMEZFQzg1MjExQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzT3Bjb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUM4NTIzMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM09yaWdpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVDODUyNTFCREFD
REFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRkUzNEMxNTFDNEIxMDk2MDAwM0E1MTIgLyogQWlyU2NhdmVuZ2VSZWdpc3RlcnMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZFQzg1MjcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2lu
dFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUM4NTI5MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1BoYXNlU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQzg1MkIxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzUHJvY2VkdXJlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtODg1Niw2ICs4ODky
LDcgQEAKIAkJCQlDMkMwRjdDRDE3QkJGQzVCMDA0NjRGRTQgLyogREZHRGVzaXJlZFRyYW5zaXRp
b25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRTg1MzRCMTcyM0NEQTUwMEI2MThGNSAvKiBE
RkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzI5ODFGRDgxN0JB
RUU0QjAwQTNCQzk4IC8qIERGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRjRERTFDQjFDNEI2MEI4MDA0RDZDMTEgLyogQWlyTGl2ZW5lc3MuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZGNDI3NjQxNTkxQTFDQzAwNENCOUZGIC8qIERGR0Rpc2Fzc2VtYmxl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjVBMTI3MzE5MkQ5RkRGMDA4NzY0QTMgLyogREZH
RG9lc0dDLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDNDODI2MTQxMTVENDAwMEZEODFDQiAv
KiBERkdEcml2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04ODk1LDYgKzg5MzIsNyBAQAogCQkJ
CTBGNTg3NEVEMTk0RkVCMTIwMEFBQjJDMSAvKiBERkdNYXlFeGl0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGMTcyNUZGMUI0ODcxOUEwMEFDM0E1NSAvKiBERkdNaW5pZmllZEdyYXBoLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGMkJEQzREMTUyMjgxODYwMENEODkxMCAvKiBERkdNaW5pZmll
ZE5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFMzRDMTMxQzRCMTA5NjAwMDNBNTEyIC8q
IEFpckJyZWFrQ3JpdGljYWxFZGdlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjhGMTQzNTFB
REYwOTAxMDBFRDc5MkMgLyogREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRkYyQ0Q1QjFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNldERh
dGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTczNzgxMEQxNzk5RUEyRTAwODE3NTMzIC8qIERG
R05hdHVyYWxMb29wcy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTkwMzUsNiArOTA3Myw3IEBACiAJ
CQkJMEYyMzVCRTExNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFRodW5rcy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjZCMUNDNTE4NjJDNDc4MDA4NDVEOTcgLyogRlRMVW53aW5kSW5mby5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjVBNjI4MzE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5n
ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkUzNEMxMTFDNEIxMDk2MDAwM0E1MTIgLyogQWly
QmxvY2tJbnNlcnRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkE4MzYzODkxOEQ3RDBG
RTAwMDBFQkNDIC8qIEZ1bGxHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTQ3RjM5Q0IxMDdFQzM3NjAwNDI3QTQ4IC8qIEZ1bmN0aW9uQ29uc3RydWN0b3IuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZGMEYxOUYxNkI3MkExNzAwNURGOTVCIC8qIEZ1bmN0aW9uRXhl
Y3V0YWJsZUR1bXAuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05MDkxLDYgKzkxMzAsNyBAQAogCQkJ
CUE1OTNDRjgyMTg0MDM3NzEwMEJGQ0UyNyAvKiBJbnNwZWN0b3JWYWx1ZXMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTQ3RjM5Q0YxMDdFQzM3NjAwNDI3QTQ4IC8qIEludGVybmFsRnVuY3Rpb24u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyOUQ3RDQwRUQyMTI4MjAwQjg5NjE5IC8qIEludGVy
cHJldGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTM0QzE5MUM0QjM5QUUwMDAzQTUxMiAv
KiBBaXJMb2dSZWdpc3RlclByZXNzdXJlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExQjlFMjM5
MUI0RTBENjcwMEJDN0ZFRCAvKiBJbnRsQ29sbGF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTFCOUUyM0IxQjRFMEQ2NzAwQkM3RkVEIC8qIEludGxDb2xsYXRvckNvbnN0cnVjdG9yLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUExQjlFMjNEMUI0RTBENjcwMEJDN0ZFRCAvKiBJbnRsQ29sbGF0
b3JQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDaGVja1NwZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5jcHAJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
NSwxOSArMTA1LDE0IEBAIEluc3QgQ2hlY2tTcGVjaWFsOjpoaWRkZW5CcmFuY2goY29uc3QgSW4K
ICAgICByZXR1cm4gaGlkZGVuQnJhbmNoOwogfQogCi12b2lkIENoZWNrU3BlY2lhbDo6Y29tbWl0
SGlkZGVuQnJhbmNoKEluc3QmIG9yaWdpbmFsLCBJbnN0JiBoaWRkZW5CcmFuY2gpCi17Ci0gICAg
QVNTRVJUKGhpZGRlbkJyYW5jaC5hcmdzLnNpemUoKSA9PSBtX251bUNoZWNrQXJncyk7Ci0gICAg
QVNTRVJUKGhpZGRlbkJyYW5jaC5vcGNvZGUgPSBtX2NoZWNrT3Bjb2RlKTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9udW1DaGVja0FyZ3M7ICsraSkKLSAgICAgICAgb3JpZ2luYWwu
YXJnc1tpICsgMV0gPSBoaWRkZW5CcmFuY2guYXJnc1tpXTsKLX0KLQogdm9pZCBDaGVja1NwZWNp
YWw6OmZvckVhY2hBcmcoSW5zdCYgaW5zdCwgY29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hB
cmdDYWxsYmFjaz4mIGNhbGxiYWNrKQogewogICAgIEluc3QgaGlkZGVuID0gaGlkZGVuQnJhbmNo
KGluc3QpOwotICAgIGhpZGRlbi5mb3JFYWNoQXJnKGNhbGxiYWNrKTsKLSAgICBjb21taXRIaWRk
ZW5CcmFuY2goaW5zdCwgaGlkZGVuKTsKKyAgICBoaWRkZW4uZm9yRWFjaEFyZygKKyAgICAgICAg
WyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSB0eXBlLCBBcmc6OldpZHRo
IHdpZHRoKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9ICZhcmcgLSAmaGlkZGVuLmFy
Z3NbMF07CisgICAgICAgICAgICBjYWxsYmFjayhpbnN0LmFyZ3NbMSArIGluZGV4XSwgcm9sZSwg
dHlwZSwgd2lkdGgpOworICAgICAgICB9KTsKICAgICBmb3JFYWNoQXJnSW1wbChudW1CM0FyZ3Mo
aW5zdCksIG1fbnVtQ2hlY2tBcmdzICsgMSwgaW5zdCwgbV9zdGFja21hcFJvbGUsIGNhbGxiYWNr
KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmgJ
KHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3Bl
Y2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsOSArMTIzLDYgQEAgcHJvdGVjdGVkOgogICAg
IC8vIENvbnN0cnVjdHMgYW5kIHJldHVybnMgdGhlIEluc3QgcmVwcmVzZW50aW5nIHRoZSBicmFu
Y2ggdGhhdCB0aGlzIHdpbGwgdXNlLgogICAgIEFpcjo6SW5zdCBoaWRkZW5CcmFuY2goY29uc3Qg
QWlyOjpJbnN0JikgY29uc3Q7CiAKLSAgICAvLyBJZiB3ZSBlZGl0ZWQgdGhlIGhpZGRlbiBicmFu
Y2gsIHRoaXMgaW5zdGFsbHMgdGhlIGVkaXRzIGludG8gdGhlIGdpdmVuIGluc3QuCi0gICAgdm9p
ZCBjb21taXRIaWRkZW5CcmFuY2goQWlyOjpJbnN0JiBvcmlnaW5hbCwgQWlyOjpJbnN0JiBoaWRk
ZW5CcmFuY2gpOwotCiAgICAgdm9pZCBmb3JFYWNoQXJnKEFpcjo6SW5zdCYsIGNvbnN0IFNjb3Bl
ZExhbWJkYTxBaXI6Okluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mKSBvdmVycmlkZTsKICAgICBib29s
IGlzVmFsaWQoQWlyOjpJbnN0Jikgb3ZlcnJpZGU7CiAgICAgYm9vbCBhZG1pdHNTdGFjayhBaXI6
Okluc3QmLCB1bnNpZ25lZCBhcmdJbmRleCkgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3
MSw2ICs4NzEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGFyZyA9IHRtcCh2YWx1ZS52
YWx1ZSgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgVmFsdWVS
ZXA6OlJlZ2lzdGVyOgorICAgICAgICAgICAgICAgIHN0YWNrbWFwLT5lYXJseUNsb2JiZXJlZCgp
LmNsZWFyKHZhbHVlLnJlcCgpLnJlZygpKTsKICAgICAgICAgICAgICAgICBhcmcgPSBUbXAodmFs
dWUucmVwKCkucmVnKCkpOwogICAgICAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBpbW1PclRtcCh2
YWx1ZS52YWx1ZSgpKSwgYXJnKTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTE5NzMsNiAr
MTk3NCw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGZpbGxTdGFja21hcChpbnN0LCBwYXRjaHBvaW50VmFsdWUsIDApOworICAgICAgICAgICAg
CisgICAgICAgICAgICBpZiAocGF0Y2hwb2ludFZhbHVlLT5yZXN1bHRDb25zdHJhaW50LmlzUmVn
KCkpCisgICAgICAgICAgICAgICAgcGF0Y2hwb2ludFZhbHVlLT5sYXRlQ2xvYmJlcmVkKCkuY2xl
YXIocGF0Y2hwb2ludFZhbHVlLT5yZXN1bHRDb25zdHJhaW50LnJlZygpKTsKIAogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gcGF0Y2hwb2ludFZhbHVlLT5udW1HUFNjcmF0Y2hSZWdpc3Rl
cnM7IGktLTspCiAgICAgICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChtX2NvZGUubmV3VG1w
KEFyZzo6R1ApKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwVmFs
dWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFZh
bHVlLmgJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0
YWNrbWFwVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTg3LDYgKzE4Nyw4IEBAIHB1YmxpYzoK
ICAgICAgICAgY2xvYmJlckxhdGUoc2V0KTsKICAgICB9CiAKKyAgICBSZWdpc3RlclNldCYgZWFy
bHlDbG9iYmVyZWQoKSB7IHJldHVybiBtX2Vhcmx5Q2xvYmJlcmVkOyB9CisgICAgUmVnaXN0ZXJT
ZXQmIGxhdGVDbG9iYmVyZWQoKSB7IHJldHVybiBtX2xhdGVDbG9iYmVyZWQ7IH0KICAgICBjb25z
dCBSZWdpc3RlclNldCYgZWFybHlDbG9iYmVyZWQoKSBjb25zdCB7IHJldHVybiBtX2Vhcmx5Q2xv
YmJlcmVkOyB9CiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGxhdGVDbG9iYmVyZWQoKSBjb25zdCB7
IHJldHVybiBtX2xhdGVDbG9iYmVyZWQ7IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwCShyZXZpc2lvbiAxOTUxNzYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKEIzX0pJVCkKIAogI2luY2x1
ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIKICNpbmNsdWRlICJB
aXJJbnN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgiCiAjaW5jbHVkZSAiQWly
UGhhc2VTY29wZS5oIgpAQCAtMTY2LDggKzE2Nyw0NyBAQCB2b2lkIGFsbG9jYXRlU3RhY2soQ29k
ZSYgY29kZSkKICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgp
OyBpbnN0SW5kZXgtLTspIHsKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAg
ICAgIGRhdGFMb2coIkFuYWx5emluZzogIiwgYmxvY2stPmF0KGluc3RJbmRleCksICJcbiIpOwor
CisgICAgICAgICAgICAvLyBLaWxsIGRlYWQgc3RvcmVzLiBGb3Igc2ltcGxpY2l0eSB3ZSBzYXkg
dGhhdCBhIHN0b3JlIGlzIGtpbGxhYmxlIGlmIGl0IGhhcyBvbmx5IGxhdGUKKyAgICAgICAgICAg
IC8vIGRlZnMgYW5kIHRob3NlIGxhdGUgZGVmcyBhcmUgdG8gdGhpbmdzIHRoYXQgYXJlIGRlYWQg
cmlnaHQgbm93LiBXZSBvbmx5IGRvIHRoYXQKKyAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhhdCdz
IHRoZSBvbmx5IGtpbmQgb2YgZGVhZCBzdGFjayBzdG9yZSB3ZSB3aWxsIHNlZSBoZXJlLgorICAg
ICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOworICAgICAgICAgICAg
aWYgKCFpbnN0Lmhhc05vbkFyZ0VmZmVjdHMoKSkgeworICAgICAgICAgICAgICAgIGJvb2wgb2sg
PSB0cnVlOworICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaEFyZygKKyAgICAgICAgICAgICAg
ICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSwgQXJnOjpXaWR0
aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNFYXJseURlZihyb2xlKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9rID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFBcmc6OmlzTGF0ZURlZihyb2xlKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFy
Zy5pc1N0YWNrKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvayA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc2xvdCA9IGFyZy5zdGFj
a1Nsb3QoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzbG90LT5raW5kKCkgIT0gU3Rh
Y2tTbG90S2luZDo6QW5vbnltb3VzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2sg
PSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2NhbENhbGMu
aXNMaXZlKHNsb3QpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2sgPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIGlmIChvaykK
KyAgICAgICAgICAgICAgICAgICAgaW5zdCA9IEluc3QoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAogICAgICAgICAgICAgaW50ZXJmZXJlKGluc3RJbmRleCk7CiAgICAgICAgICAgICBs
b2NhbENhbGMuZXhlY3V0ZShpbnN0SW5kZXgpOworCisgICAgICAgICAgICBibG9jay0+aW5zdHMo
KS5yZW1vdmVBbGxNYXRjaGluZygKKyAgICAgICAgICAgICAgICBbJl0gKGNvbnN0IEluc3QmIGlu
c3QpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gIWluc3Q7CisgICAgICAg
ICAgICAgICAgfSk7CiAgICAgICAgIH0KICAgICAgICAgaW50ZXJmZXJlKC0xKTsKICAgICB9CkBA
IC0yMzIsMzMgKzI3Miw0MyBAQCB2b2lkIGFsbG9jYXRlU3RhY2soQ29kZSYgY29kZSkKICAgICAv
LyBXZSB3b3VsZCBoYXZlIHRvIHNjYXZlbmdlIGZvciB0ZW1wb3JhcmllcyBpZiB0aGlzIGhhcHBl
bmVkLiBGb3J0dW5hdGVseSwgdGhpcyBjYXNlIHdpbGwgYmUKICAgICAvLyBleHRyZW1lbHkgcmFy
ZSBzbyB3ZSBjYW4gZG8gY3JhenkgdGhpbmdzIHdoZW4gaXQgYXJpc2VzLgogICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI1MzAKLSAgICAKKworICAgIElu
c2VydGlvblNldCBpbnNlcnRpb25TZXQoY29kZSk7CiAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9j
ayA6IGNvZGUpIHsKLSAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogKmJsb2NrKSB7CisgICAgICAg
IGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gMDsgaW5zdEluZGV4IDwgYmxvY2stPnNpemUoKTsg
KytpbnN0SW5kZXgpIHsKKyAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdElu
ZGV4KTsKICAgICAgICAgICAgIGluc3QuZm9yRWFjaEFyZygKLSAgICAgICAgICAgICAgICBbJl0g
KEFyZyYgYXJnLCBBcmc6OlJvbGUsIEFyZzo6VHlwZSwgQXJnOjpXaWR0aCB3aWR0aCkKLSAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJv
bGUsIEFyZzo6VHlwZSwgQXJnOjpXaWR0aCB3aWR0aCkgeworICAgICAgICAgICAgICAgICAgICBh
dXRvIHN0YWNrQWRkciA9IFsmXSAoaW50MzJfdCBvZmZzZXQpIC0+IEFyZyB7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gQXJnOjpzdGFja0FkZHIob2Zmc2V0LCBjb2RlLmZyYW1lU2l6
ZSgpLCB3aWR0aCk7CisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGFyZy5raW5kKCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgY2FzZSBBcmc6OlN0YWNrOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcmcg
PSBBcmc6OmFkZHIoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVG1wKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcub2Zmc2V0
KCkgKyBhcmcuc3RhY2tTbG90KCktPm9mZnNldEZyb21GUCgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghYXJnLmlzVmFsaWRGb3JtKHdpZHRoKSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFyZyA9IEFyZzo6YWRkcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVG1wKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFyZy5vZmZzZXQoKSArIGNvZGUuZnJhbWVTaXplKCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzbG90ID0gYXJnLnN0YWNrU2xvdCgp
OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNaRGVmKHJvbGUpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJiYgc2xvdC0+a2luZCgpID09IFN0YWNrU2xvdEtpbmQ6OkFu
b255bW91cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNsb3QtPmJ5dGVTaXplKCkg
PiBBcmc6OmJ5dGVzKHdpZHRoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEN1
cnJlbnRseSB3ZSBvbmx5IGhhbmRsZSB0aGlzIHNpbXBsZSBjYXNlIGJlY2F1c2UgaXQncyB0aGUg
b25seSBvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGF0IGFyaXNlczogWkRl
ZidzIGFyZSBvbmx5IDMyLWJpdCByaWdodCBub3cuIFNvLCB3aGVuIHdlIGhpdCB0aGVzZQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzc2VydGlvbnMgaXQgbWVhbnMgdGhhdCB3ZSBu
ZWVkIHRvIGltcGxlbWVudCB0aG9zZSBvdGhlciBraW5kcyBvZgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIHplcm8gZmlsbHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoc2xvdC0+Ynl0ZVNpemUoKSA9PSA4KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVCh3aWR0aCA9PSBBcmc6OldpZHRoMzIpOworCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gV2UgcmVseSBvbiB0aGUgZmFjdCB0aGF0IHRoZXJlIG11
c3QgYmUgc29tZSB3YXkgdG8gbW92ZSB6ZXJvIHRvIGEKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBtZW1vcnkgbG9jYXRpb24gd2l0aG91dCBmaXJzdCBidXJuaW5nIGEgcmVnaXN0ZXIu
IE9uIEFSTSwgd2Ugd291bGQgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlz
IHVzaW5nIHpyLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlz
VmFsaWRGb3JtKE1vdmUzMiwgQXJnOjpJbW0sIEFyZzo6QWRkcikpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluc3RJbmRleCArIDEsIE1vdmUzMiwgaW5zdC5vcmlnaW4sIEFyZzo6aW1tKDAp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja0FkZHIoYXJnLm9mZnNldCgp
ICsgNCArIHNsb3QtPm9mZnNldEZyb21GUCgpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBzdGFja0FkZHIoYXJnLm9mZnNldCgpICsg
c2xvdC0+b2Zmc2V0RnJvbUZQKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkNhbGxB
cmc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBBcmc6OmFkZHIoCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhcmcub2Zmc2V0KCkgLSBjb2RlLmZyYW1lU2l6ZSgpKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlzVmFsaWRGb3JtKHdpZHRoKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IEFyZzo6YWRkcigKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVG1wKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdp
c3RlciksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZy5vZmZzZXQoKSArIGNv
ZGUuZnJhbWVTaXplKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgYXJnID0gc3RhY2tBZGRyKGFyZy5vZmZzZXQoKSAtIGNvZGUuZnJhbWVTaXpl
KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTI2Niw2ICszMTYs
NyBAQCB2b2lkIGFsbG9jYXRlU3RhY2soQ29kZSYgY29kZSkKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICApOwogICAgICAgICB9CisgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKGJs
b2NrKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
QXJnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcu
aAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJB
cmcuaAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDYgKzEyNiw3IEBAIHB1YmxpYzoKICAgICAgICAg
Ly8gZGVwZW5kaW5nIG9uIHRoZSBraW5kIG9mIHRoZSBhcmd1bWVudDoKICAgICAgICAgLy8KICAg
ICAgICAgLy8gRm9yIHJlZ2lzdGVyOiB0aGUgdXBwZXIgYml0cyBhcmUgemVyby1maWxsZWQuCisg
ICAgICAgIC8vIEZvciBhbm9ueW1vdXMgc3RhY2sgc2xvdDogdGhlIHVwcGVyIGJpdHMgYXJlIHpl
cm8tZmlsbGVkLgogICAgICAgICAvLyBGb3IgYWRkcmVzczogdGhlIHVwcGVyIGJpdHMgYXJlIG5v
dCB0b3VjaGVkIChpLmUuIHdlIGRvIGEgMzItYml0IHN0b3JlIGluIG91ciBleGFtcGxlKS4KICAg
ICAgICAgLy8gRm9yIHRtcDogZWl0aGVyIHRoZSB1cHBlciBiaXRzIGFyZSBub3QgdG91Y2hlZCBv
ciB0aGV5IGFyZSB6ZXJvLWZpbGxlZCwgYW5kIHdlIHdvbid0IGtub3cKICAgICAgICAgLy8gd2hp
Y2ggdW50aWwgd2UgbG93ZXIgdGhlIHRtcCB0byBlaXRoZXIgYSBTdGFja1Nsb3Qgb3IgYSBSZWcu
CkBAIC01MTMsNiArNTE0LDE3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICB9CiAKKyAgICBzdGF0aWMgQXJnIHN0YWNrQWRkcihpbnQzMl90IG9mZnNldEZyb21GUCwgdW5z
aWduZWQgZnJhbWVTaXplLCBXaWR0aCB3aWR0aCkKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQg
PSBBcmc6OmFkZHIoQWlyOjpUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpLCBvZmZzZXRG
cm9tRlApOworICAgICAgICBpZiAoIXJlc3VsdC5pc1ZhbGlkRm9ybSh3aWR0aCkpIHsKKyAgICAg
ICAgICAgIHJlc3VsdCA9IEFyZzo6YWRkcigKKyAgICAgICAgICAgICAgICBBaXI6OlRtcChNYWNy
b0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpLAorICAgICAgICAgICAgICAgIG9mZnNl
dEZyb21GUCArIGZyYW1lU2l6ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisKICAgICAvLyBJZiB5b3UgZG9uJ3QgcGFzcyBhIFdpZHRoLCB0aGlzIG9wdGltaXN0
aWNhbGx5IGFzc3VtZXMgdGhhdCB5b3UncmUgdXNpbmcgdGhlIHJpZ2h0IHdpZHRoLgogICAgIHN0
YXRpYyBib29sIGlzVmFsaWRTY2FsZSh1bnNpZ25lZCBzY2FsZSwgT3B0aW9uYWw8V2lkdGg+IHdp
ZHRoID0gTnVsbG9wdCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckJhc2ljQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQmFzaWNCbG9jay5jcHAJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3
LDExICs1NywyMSBAQCB2b2lkIEJhc2ljQmxvY2s6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgCiAK
IHZvaWQgQmFzaWNCbG9jazo6ZGVlcER1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKKyAg
ICBkdW1wSGVhZGVyKG91dCk7CisgICAgZm9yIChjb25zdCBJbnN0JiBpbnN0IDogKnRoaXMpCisg
ICAgICAgIG91dC5wcmludCgiICAgICIsIGluc3QsICJcbiIpOworICAgIGR1bXBGb290ZXIob3V0
KTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpkdW1wSGVhZGVyKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Cit7CiAgICAgb3V0LnByaW50KCJCQiIsICp0aGlzLCAiOiA7IGZyZXF1ZW5jeSA9ICIsIG1f
ZnJlcXVlbmN5LCAiXG4iKTsKICAgICBpZiAocHJlZGVjZXNzb3JzKCkuc2l6ZSgpKQogICAgICAg
ICBvdXQucHJpbnQoIiAgUHJlZGVjZXNzb3JzOiAiLCBwb2ludGVyTGlzdER1bXAocHJlZGVjZXNz
b3JzKCkpLCAiXG4iKTsKLSAgICBmb3IgKGNvbnN0IEluc3QmIGluc3QgOiAqdGhpcykKLSAgICAg
ICAgb3V0LnByaW50KCIgICAgIiwgaW5zdCwgIlxuIik7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6
ZHVtcEZvb3RlcihQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewogICAgIGlmIChzdWNjZXNzb3Jz
KCkuc2l6ZSgpKQogICAgICAgICBvdXQucHJpbnQoIiAgU3VjY2Vzc29yczogIiwgbGlzdER1bXAo
c3VjY2Vzc29ycygpKSwgIlxuIik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckJhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckJhc2ljQmxvY2suaAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYg
KzM2LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIg
ewogCitjbGFzcyBCbG9ja0luc2VydGlvblNldDsKIGNsYXNzIENvZGU7CiBjbGFzcyBJbnNlcnRp
b25TZXQ7CiAKQEAgLTEyNiw3ICsxMjcsMTEgQEAgcHVibGljOgogICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0OwogICAgIHZvaWQgZGVlcER1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
IAorICAgIHZvaWQgZHVtcEhlYWRlcihQcmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZHVt
cEZvb3RlcihQcmludFN0cmVhbSYpIGNvbnN0OworCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFz
cyBCbG9ja0luc2VydGlvblNldDsKICAgICBmcmllbmQgY2xhc3MgQ29kZTsKICAgICBmcmllbmQg
Y2xhc3MgSW5zZXJ0aW9uU2V0OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJCbG9ja0luc2VydGlvblNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja0luc2VydGlvblNldC5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJsb2NrSW5zZXJ0aW9uU2V0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJC
bG9ja0luc2VydGlvblNldC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFp
ckJhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgorI2luY2x1ZGUgPHd0
Zi9CdWJibGVTb3J0Lmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3Bh
Y2UgQWlyIHsKKworQmxvY2tJbnNlcnRpb25TZXQ6OkJsb2NrSW5zZXJ0aW9uU2V0KENvZGUgJmNv
ZGUpCisgICAgOiBtX2NvZGUoY29kZSkKK3sKK30KKworQmxvY2tJbnNlcnRpb25TZXQ6On5CbG9j
a0luc2VydGlvblNldCgpIHsgfQorCit2b2lkIEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnQoQmxv
Y2tJbnNlcnRpb24mJiBpbnNlcnRpb24pCit7CisgICAgbV9pbnNlcnRpb25zLmFwcGVuZChXVEZN
b3ZlKGluc2VydGlvbikpOworfQorCitCYXNpY0Jsb2NrKiBCbG9ja0luc2VydGlvblNldDo6aW5z
ZXJ0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVlbmN5KQoreworICAgIHN0ZDo6dW5pcXVl
X3B0cjxCYXNpY0Jsb2NrPiBibG9jayhuZXcgQmFzaWNCbG9jayhVSU5UX01BWCwgZnJlcXVlbmN5
KSk7CisgICAgQmFzaWNCbG9jayogcmVzdWx0ID0gYmxvY2suZ2V0KCk7CisgICAgaW5zZXJ0KEJs
b2NrSW5zZXJ0aW9uKGluZGV4LCBXVEZNb3ZlKGJsb2NrKSkpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK0Jhc2ljQmxvY2sqIEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnRCZWZvcmUoQmFzaWNC
bG9jayogYmVmb3JlLCBkb3VibGUgZnJlcXVlbmN5KQoreworICAgIHJldHVybiBpbnNlcnQoYmVm
b3JlLT5pbmRleCgpLCBmcmVxdWVuY3kgPT0gZnJlcXVlbmN5ID8gZnJlcXVlbmN5IDogYmVmb3Jl
LT5mcmVxdWVuY3koKSk7Cit9CisKK0Jhc2ljQmxvY2sqIEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNl
cnRBZnRlcihCYXNpY0Jsb2NrKiBhZnRlciwgZG91YmxlIGZyZXF1ZW5jeSkKK3sKKyAgICByZXR1
cm4gaW5zZXJ0KGFmdGVyLT5pbmRleCgpICsgMSwgZnJlcXVlbmN5ID09IGZyZXF1ZW5jeSA/IGZy
ZXF1ZW5jeSA6IGFmdGVyLT5mcmVxdWVuY3koKSk7Cit9CisKK2Jvb2wgQmxvY2tJbnNlcnRpb25T
ZXQ6OmV4ZWN1dGUoKQoreworICAgIGlmIChtX2luc2VydGlvbnMuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgLy8gV2UgYWxsb3cgaW5zZXJ0aW9ucyB0byBiZSBn
aXZlbiB0byB1cyBpbiBhbnkgb3JkZXIuIFNvLCB3ZSBuZWVkIHRvIHNvcnQgdGhlbSBiZWZvcmUK
KyAgICAvLyBydW5uaW5nIFdURjo6ZXhlY3V0ZUluc2VydGlvbnMuIFdlIHN0cm9uZ2x5IHByZWZl
ciBhIHN0YWJsZSBzb3J0IGFuZCB3ZSB3YW50IGl0IHRvIGJlCisgICAgLy8gZmFzdCwgc28gd2Ug
dXNlIGJ1YmJsZSBzb3J0LgorICAgIGJ1YmJsZVNvcnQobV9pbnNlcnRpb25zLmJlZ2luKCksIG1f
aW5zZXJ0aW9ucy5lbmQoKSk7CisKKyAgICBleGVjdXRlSW5zZXJ0aW9ucyhtX2NvZGUubV9ibG9j
a3MsIG1faW5zZXJ0aW9ucyk7CisgICAgCisgICAgLy8gUHJ1bmUgb3V0IGVtcHR5IGVudHJpZXMu
IFRoaXMgaXNuJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IGJ1dCBpdCdzCisgICAgLy8gaGVhbHRoeSB0
byBrZWVwIHRoZSBibG9jayBsaXN0IGZyb20gZ3Jvd2luZy4KKyAgICBtX2NvZGUubV9ibG9ja3Mu
cmVtb3ZlQWxsTWF0Y2hpbmcoCisgICAgICAgIFsmXSAoc3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxv
Y2s+JiBibG9ja1B0cikgLT4gYm9vbCB7CisgICAgICAgICAgICByZXR1cm4gIWJsb2NrUHRyOwor
ICAgICAgICB9KTsKKyAgICAKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgYmxvY2tzIGtub3cg
dGhlaXIgbmV3IGluZGljZXMuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY29kZS5t
X2Jsb2Nrcy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9jb2RlLm1fYmxvY2tzW2ldLT5tX2luZGV4
ID0gaTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja0luc2VydGlvblNldC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmxvY2tJbnNlcnRpb25TZXQuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmxvY2tJbnNlcnRp
b25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyQmxvY2tJbnNlcnRpb25T
ZXRfaAorI2RlZmluZSBBaXJCbG9ja0luc2VydGlvblNldF9oCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgPHd0Zi9JbnNlcnRpb24uaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBu
YW1lc3BhY2UgQWlyIHsKKworY2xhc3MgSW5zZXJ0aW9uU2V0OworCit0eXBlZGVmIFdURjo6SW5z
ZXJ0aW9uPHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPj4gQmxvY2tJbnNlcnRpb247CisKK2Ns
YXNzIEJsb2NrSW5zZXJ0aW9uU2V0IHsKK3B1YmxpYzoKKyAgICBCbG9ja0luc2VydGlvblNldChD
b2RlJik7CisgICAgfkJsb2NrSW5zZXJ0aW9uU2V0KCk7CisgICAgCisgICAgdm9pZCBpbnNlcnQo
QmxvY2tJbnNlcnRpb24mJik7CisKKyAgICAvLyBJbnNlcnQgYSBuZXcgYmxvY2sgYXQgYSBnaXZl
biBpbmRleC4KKyAgICBCYXNpY0Jsb2NrKiBpbnNlcnQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSBm
cmVxdWVuY3kgPSBQTmFOKTsKKworICAgIC8vIEluc2VydHMgYSBuZXcgYmxvY2sgYmVmb3JlIHRo
ZSBnaXZlbiBibG9jay4gVXN1YWxseSB5b3Ugd2lsbCBub3QgcGFzcyB0aGUgZnJlcXVlbmN5Cisg
ICAgLy8gYXJndW1lbnQuIFBhc3NpbmcgUE5hTiBjYXVzZXMgdXMgdG8ganVzdCB1c2UgdGhlIGZy
ZXF1ZW5jeSBvZiB0aGUgJ2JlZm9yZScgYmxvY2suIFRoYXQncworICAgIC8vIHVzdWFsbHkgd2hh
dCB5b3Ugd2FudC4KKyAgICBCYXNpY0Jsb2NrKiBpbnNlcnRCZWZvcmUoQmFzaWNCbG9jayogYmVm
b3JlLCBkb3VibGUgZnJlcXVlbmN5ID0gUE5hTik7CisKKyAgICAvLyBJbnNlcnRzIGEgbmV3IGJs
b2NrIGFmdGVyIHRoZSBnaXZlbiBibG9jay4KKyAgICBCYXNpY0Jsb2NrKiBpbnNlcnRBZnRlcihC
YXNpY0Jsb2NrKiBhZnRlciwgZG91YmxlIGZyZXF1ZW5jeSA9IFBOYU4pOworCisgICAgYm9vbCBl
eGVjdXRlKCk7CisKK3ByaXZhdGU6CisgICAgQ29kZSYgbV9jb2RlOworICAgIFZlY3RvcjxCbG9j
a0luc2VydGlvbiwgOD4gbV9pbnNlcnRpb25zOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckJs
b2NrSW5zZXJ0aW9uU2V0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJCcmVha0NyaXRpY2FsRWRnZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQnJlYWtDcml0aWNhbEVkZ2VzLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQnJlYWtDcml0aWNhbEVkZ2VzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckJyZWFr
Q3JpdGljYWxFZGdlcy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckJs
b2NrSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpcklu
c3RJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2Ug
QWlyIHsKKwordm9pZCBicmVha0NyaXRpY2FsRWRnZXMoQ29kZSYgY29kZSkKK3sKKyAgICBCbG9j
a0luc2VydGlvblNldCBpbnNlcnRpb25TZXQoY29kZSk7CisgICAgCisgICAgZm9yICh1bnNpZ25l
ZCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IGNvZGUuc2l6ZSgpOyArK2Jsb2NrSW5kZXgp
IHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBjb2RlW2Jsb2NrSW5kZXhdOworICAgICAg
ICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKGJsb2Nr
LT5udW1TdWNjZXNzb3JzKCkgPD0gMSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IGktLTspIHsKKyAgICAg
ICAgICAgIEJhc2ljQmxvY2sqJiBzdWNjZXNzb3IgPSBibG9jay0+c3VjY2Vzc29yQmxvY2soaSk7
CisgICAgICAgICAgICBpZiAoc3VjY2Vzc29yLT5wcmVkZWNlc3NvcnMoKS5zaXplKCkgPD0gMSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgQmFzaWNCbG9jayogcGFk
ID0gaW5zZXJ0aW9uU2V0Lmluc2VydEJlZm9yZShzdWNjZXNzb3IsIHN1Y2Nlc3Nvci0+ZnJlcXVl
bmN5KCkpOworICAgICAgICAgICAgcGFkLT5hcHBlbmQoSnVtcCwgc3VjY2Vzc29yLT5hdCgwKS5v
cmlnaW4pOworICAgICAgICAgICAgcGFkLT5zdWNjZXNzb3JzKCkuYXBwZW5kKEZyZXF1ZW50ZWRC
bG9jayhzdWNjZXNzb3IpKTsKKyAgICAgICAgICAgIHBhZC0+YWRkUHJlZGVjZXNzb3IoYmxvY2sp
OworICAgICAgICAgICAgc3VjY2Vzc29yLT5yZXBsYWNlUHJlZGVjZXNzb3IoYmxvY2ssIHBhZCk7
CisgICAgICAgICAgICBzdWNjZXNzb3IgPSBwYWQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp
bnNlcnRpb25TZXQuZXhlY3V0ZSgpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6
QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckJyZWFrQ3JpdGljYWxFZGdlcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQnJlYWtDcml0aWNhbEVkZ2VzLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJyZWFrQ3JpdGljYWxFZGdl
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEFpckJyZWFrQ3JpdGljYWxFZGdlc19o
CisjZGVmaW5lIEFpckJyZWFrQ3JpdGljYWxFZGdlc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNz
IENvZGU7CisKK3ZvaWQgYnJlYWtDcml0aWNhbEVkZ2VzKENvZGUmKTsKKworfSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlm
IC8vIEFpckJyZWFrQ3JpdGljYWxFZGdlc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5jcHAJKHJldmlzaW9uIDE5NTE3NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsNiArMzYsOSBAQCBDQ2FsbFNwZWNpYWw6OkNDYWxsU3BlY2lhbCgpCiAg
ICAgbV9jbG9iYmVyZWRSZWdzLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCkp
OwogICAgIG1fY2xvYmJlcmVkUmVncy5leGNsdWRlKFJlZ2lzdGVyU2V0OjpyZXNlcnZlZEhhcmR3
YXJlUmVnaXN0ZXJzKCkpOwogICAgIG1fY2xvYmJlcmVkUmVncy5leGNsdWRlKFJlZ2lzdGVyU2V0
OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworICAgIG1fY2xvYmJlcmVkUmVncy5jbGVhcihHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgbV9jbG9iYmVyZWRSZWdzLmNsZWFyKEdQUkluZm86
OnJldHVyblZhbHVlR1BSMik7CisgICAgbV9jbG9iYmVyZWRSZWdzLmNsZWFyKEZQUkluZm86OnJl
dHVyblZhbHVlRlBSKTsKIH0KIAogQ0NhbGxTcGVjaWFsOjp+Q0NhbGxTcGVjaWFsKCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCShyZXZpc2lvbiAxOTUxNzYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNDYsNiArNDYsNyBAQCBjbGFzcyBQcm9jZWR1cmU7CiAKIG5hbWVzcGFjZSBBaXIgewogCitj
bGFzcyBCbG9ja0luc2VydGlvblNldDsKIGNsYXNzIENDYWxsU3BlY2lhbDsKIAogLy8gVGhpcyBp
cyBhbiBJUiB0aGF0IGlzIHZlcnkgY2xvc2UgdG8gdGhlIGJhcmUgbWV0YWwuIEl0IHJlcXVpcmVz
IGFib3V0IDQweCBtb3JlIGJ5dGVzIHRoYW4gdGhlCkBAIC0zMjIsOCArMzIzLDE1IEBAIHB1Ymxp
YzoKIAogICAgIGNvbnN0IGNoYXIqIGxhc3RQaGFzZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX2xh
c3RQaGFzZU5hbWU7IH0KIAorICAgIHZvaWQgc2V0RW5hYmxlUkNSUyhib29sIHZhbHVlKQorICAg
IHsKKyAgICAgICAgbV9lbmFibGVSQ1JTID0gdmFsdWU7CisgICAgfQorICAgIGJvb2wgZW5hYmxl
UkNSUygpIGNvbnN0IHsgcmV0dXJuIG1fZW5hYmxlUkNSUzsgfQorCiBwcml2YXRlOgogICAgIGZy
aWVuZCBjbGFzcyA6OkpTQzo6QjM6OlByb2NlZHVyZTsKKyAgICBmcmllbmQgY2xhc3MgQmxvY2tJ
bnNlcnRpb25TZXQ7CiAgICAgCiAgICAgQ29kZShQcm9jZWR1cmUmKTsKIApAQCAtMzM3LDYgKzM0
NSw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9udW1GUFRtcHMgeyAwIH07CiAgICAgdW5z
aWduZWQgbV9mcmFtZVNpemUgeyAwIH07CiAgICAgdW5zaWduZWQgbV9jYWxsQXJnQXJlYVNpemUg
eyAwIH07CisgICAgYm9vbCBtX2VuYWJsZVJDUlMgeyBPcHRpb25zOjphaXJVc2VzUkNSUygpIH07
CiAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOwogICAgIGNv
bnN0IGNoYXIqIG1fbGFzdFBoYXNlTmFtZTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJDdXN0b20uY3BwCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEx
ICsyOCwzNSBAQAogCiAjaWYgRU5BQkxFKEIzX0pJVCkKIAorI2luY2x1ZGUgIkFpckluc3RJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiQjNDQ2FsbFZhbHVlLmgiCiAjaW5jbHVkZSAiQjNWYWx1ZUlubGlu
ZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewog
Citib29sIFBhdGNoQ3VzdG9tOjppc1ZhbGlkRm9ybShJbnN0JiBpbnN0KQoreworICAgIGlmIChp
bnN0LmFyZ3Muc2l6ZSgpIDwgMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghaW5z
dC5hcmdzWzBdLmlzU3BlY2lhbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFp
bnN0LmFyZ3NbMF0uc3BlY2lhbCgpLT5pc1ZhbGlkKGluc3QpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgUmVnaXN0ZXJTZXQgY2xvYmJlcmVkRWFybHkgPSBpbnN0LmV4dHJhRWFybHlDbG9i
YmVyZWRSZWdzKCk7CisgICAgUmVnaXN0ZXJTZXQgY2xvYmJlcmVkTGF0ZSA9IGluc3QuZXh0cmFD
bG9iYmVyZWRSZWdzKCk7CisgICAgYm9vbCBvayA9IHRydWU7CisgICAgaW5zdC5mb3JFYWNoVG1w
KAorICAgICAgICBbJl0gKFRtcCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlLCBBcmc6
OldpZHRoKSB7CisgICAgICAgICAgICBpZiAoIXRtcC5pc1JlZygpKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIGlmIChBcmc6OmlzTGF0ZURlZihyb2xlKSB8fCBBcmc6Omlz
TGF0ZVVzZShyb2xlKSkKKyAgICAgICAgICAgICAgICBvayAmPSAhY2xvYmJlcmVkTGF0ZS5nZXQo
dG1wLnJlZygpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBvayAmPSAhY2xv
YmJlcmVkRWFybHkuZ2V0KHRtcC5yZWcoKSk7CisgICAgICAgIH0pOworICAgIHJldHVybiBvazsK
K30KKwogYm9vbCBDQ2FsbEN1c3RvbTo6aXNWYWxpZEZvcm0oSW5zdCYgaW5zdCkKIHsKICAgICBD
Q2FsbFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luLT5hczxDQ2FsbFZhbHVlPigpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0b20uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckN1c3RvbS5oCShyZXZpc2lvbiAxOTUxNzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckN1c3RvbS5oCSh3b3JraW5nIGNv
cHkpCkBAIC03MSwxNCArNzEsNyBAQCBzdHJ1Y3QgUGF0Y2hDdXN0b20gewogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wgaXNWYWxpZEZvcm0oSW5zdCYgaW5z
dCkKLSAgICB7Ci0gICAgICAgIGlmIChpbnN0LmFyZ3Muc2l6ZSgpIDwgMSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFpbnN0LmFyZ3NbMF0uaXNTcGVjaWFsKCkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBpbnN0LmFyZ3NbMF0uc3Bl
Y2lhbCgpLT5pc1ZhbGlkKGluc3QpOwotICAgIH0KKyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkRm9y
bShJbnN0JiBpbnN0KTsKIAogICAgIHN0YXRpYyBib29sIGFkbWl0c1N0YWNrKEluc3QmIGluc3Qs
IHVuc2lnbmVkIGFyZ0luZGV4KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyRW1pdFNodWZmbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuY3BwCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckVtaXRTaHVmZmxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzAsNiArNzAsMTQgQEAgdm9pZCBTaHVmZmxlUGFpcjo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KQogICAgIG91dC5wcmludCh3aWR0aCgpLCAiOiIsIHNyYygpLCAiPT4iLCBkc3QoKSk7CiB9
CiAKK0luc3QgY3JlYXRlU2h1ZmZsZShWYWx1ZSogb3JpZ2luLCBjb25zdCBWZWN0b3I8U2h1ZmZs
ZVBhaXI+JiBwYWlycykKK3sKKyAgICBJbnN0IHJlc3VsdChTaHVmZmxlLCBvcmlnaW4pOworICAg
IGZvciAoY29uc3QgU2h1ZmZsZVBhaXImIHBhaXIgOiBwYWlycykKKyAgICAgICAgcmVzdWx0LmFw
cGVuZChwYWlyLnNyYygpLCBwYWlyLmRzdCgpLCBBcmc6OndpZHRoQXJnKHBhaXIud2lkdGgoKSkp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIFZlY3RvcjxJbnN0PiBlbWl0U2h1ZmZsZSgKICAg
ICBWZWN0b3I8U2h1ZmZsZVBhaXI+IHBhaXJzLCBzdGQ6OmFycmF5PEFyZywgMj4gc2NyYXRjaGVz
LCBBcmc6OlR5cGUgdHlwZSwgVmFsdWUqIG9yaWdpbikKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckVtaXRTaHVmZmxlLmgJKHJldmlzaW9uIDE5NTE3NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNjYsNiArNjYsOSBAQCBwcml2YXRlOgogICAgIEFyZzo6V2lkdGggbV93aWR0aCB7
IEFyZzo6V2lkdGg4IH07CiB9OwogCisvLyBDcmVhdGUgYSBTaHVmZmxlIGluc3RydWN0aW9uLgor
SW5zdCBjcmVhdGVTaHVmZmxlKFZhbHVlKiBvcmlnaW4sIGNvbnN0IFZlY3RvcjxTaHVmZmxlUGFp
cj4mKTsKKwogLy8gUGVyZm9ybSBhIHNodWZmbGUgb2YgYSBnaXZlbiB0eXBlLiBUaGUgc2NyYXRj
aCBhcmd1bWVudCBpcyBtYW5kYXRvcnkuIFlvdSBzaG91bGQgcGFzcyBpdCBhcwogLy8gZm9sbG93
czogSWYgeW91IGtub3cgdGhhdCB5b3UgaGF2ZSBzY3JhdGNoIHJlZ2lzdGVycyBvciB0ZW1wb3Jh
cmllcyBhdmFpbGFibGUgLSB0aGF0IGlzLCB0aGV5J3JlCiAvLyByZWdpc3RlcnMgdGhhdCBhcmUg
bm90IG1lbnRpb25lZCBpbiB0aGUgc2h1ZmZsZSwgaGF2ZSB0aGUgc2FtZSB0eXBlIGFzIHRoZSBz
aHVmZmxlLCBhbmQgYXJlIG5vdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJGaXhPYnZpb3VzU3BpbGxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckZpeE9idmlvdXNTcGlsbHMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhPYnZpb3VzU3BpbGxzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDUxMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJGaXhPYnZpb3Vz
U3BpbGxzLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgor
I2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgor
I2luY2x1ZGUgIkIzSW5kZXhNYXAuaCIKKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCituYW1lc3BhY2Ug
eworCitib29sIHZlcmJvc2UgPSBmYWxzZTsKKworY2xhc3MgRml4T2J2aW91c1NwaWxscyB7Citw
dWJsaWM6CisgICAgRml4T2J2aW91c1NwaWxscyhDb2RlJiBjb2RlKQorICAgICAgICA6IG1fY29k
ZShjb2RlKQorICAgICAgICAsIG1fYXRIZWFkKGNvZGUuc2l6ZSgpKQorICAgIHsKKyAgICB9CisK
KyAgICB2b2lkIHJ1bigpCisgICAgeworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAg
IGRhdGFMb2coIkNvZGUgYmVmb3JlIGZpeE9idmlvdXNTcGlsbHM6XG4iLCBtX2NvZGUpOworICAg
ICAgICAKKyAgICAgICAgY29tcHV0ZUFsaWFzZXMoKTsKKyAgICAgICAgZml4Q29kZSgpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGNvbXB1dGVBbGlhc2VzKCkKKyAgICB7CisgICAgICAg
IG1fYXRIZWFkW21fY29kZVswXV0ud2FzVmlzaXRlZCA9IHRydWU7CisgICAgICAgIAorICAgICAg
ICBib29sIGNoYW5nZWQgPSB0cnVlOworICAgICAgICB3aGlsZSAoY2hhbmdlZCkgeworICAgICAg
ICAgICAgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKEJh
c2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7CisgICAgICAgICAgICAgICAgbV9ibG9jayA9IGJs
b2NrOworICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBtX2F0SGVhZFtibG9ja107CisgICAgICAg
ICAgICAgICAgaWYgKCFtX3N0YXRlLndhc1Zpc2l0ZWQpCisgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coIkV4ZWN1dGluZyBibG9jayAiLCAqbV9ibG9jaywgIjogIiwgbV9zdGF0ZSwg
IlxuIik7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZm9yIChtX2luc3RJbmRl
eCA9IDA7IG1faW5zdEluZGV4IDwgYmxvY2stPnNpemUoKTsgKyttX2luc3RJbmRleCkKKyAgICAg
ICAgICAgICAgICAgICAgZXhlY3V0ZUluc3QoKTsKKworICAgICAgICAgICAgICAgIGZvciAoQmFz
aWNCbG9jayogc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3NvckJsb2NrcygpKSB7CisgICAgICAg
ICAgICAgICAgICAgIFN0YXRlJiB0b1N0YXRlID0gbV9hdEhlYWRbc3VjY2Vzc29yXTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHRvU3RhdGUud2FzVmlzaXRlZCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNoYW5nZWQgfD0gdG9TdGF0ZS5tZXJnZShtX3N0YXRlKTsKKyAgICAgICAgICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0b1N0YXRlID0gbV9zdGF0ZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCisgICAgdm9pZCBmaXhDb2RlKCkKKyAgICB7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayog
YmxvY2sgOiBtX2NvZGUpIHsKKyAgICAgICAgICAgIG1fYmxvY2sgPSBibG9jazsKKyAgICAgICAg
ICAgIG1fc3RhdGUgPSBtX2F0SGVhZFtibG9ja107CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChtX3N0YXRlLndhc1Zpc2l0ZWQpOworCisgICAgICAgICAgICBmb3IgKG1faW5zdEluZGV4ID0g
MDsgbV9pbnN0SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK21faW5zdEluZGV4KSB7CisgICAgICAg
ICAgICAgICAgZml4SW5zdCgpOworICAgICAgICAgICAgICAgIGV4ZWN1dGVJbnN0KCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGV4ZWN1dGVJbnN0KCkKKyAg
ICB7CisgICAgICAgIEluc3QmIGluc3QgPSBtX2Jsb2NrLT5hdChtX2luc3RJbmRleCk7CisKKyAg
ICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCIgICAgRXhlY3V0aW5nICIs
IGluc3QsICI6ICIsIG1fc3RhdGUsICJcbiIpOworCisgICAgICAgIEluc3Q6OmZvckVhY2hEZWZX
aXRoRXh0cmFDbG9iYmVyZWRSZWdzPEFyZz4oCisgICAgICAgICAgICAmaW5zdCwgJmluc3QsCisg
ICAgICAgICAgICBbJl0gKGNvbnN0IEFyZyYgYXJnLCBBcmc6OlJvbGUsIEFyZzo6VHlwZSwgQXJn
OjpXaWR0aCkgeworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nKCIgICAgICAgIENsb2JiZXJpbmcgIiwgYXJnLCAiXG4iKTsKKyAgICAgICAg
ICAgICAgICBtX3N0YXRlLmNsb2JiZXIoYXJnKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAg
IHN3aXRjaCAoaW5zdC5vcGNvZGUpIHsKKyAgICAgICAgY2FzZSBNb3ZlOgorICAgICAgICAgICAg
aWYgKGluc3QuYXJnc1swXS5pc1NvbWVJbW0oKSkgeworICAgICAgICAgICAgICAgIGlmIChpbnN0
LmFyZ3NbMV0uaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5hZGRBbGlhcyhS
ZWdDb25zdChpbnN0LmFyZ3NbMV0ucmVnKCksIGluc3QuYXJnc1swXS52YWx1ZSgpKSk7CisgICAg
ICAgICAgICAgICAgZWxzZSBpZiAoaXNTcGlsbFNsb3QoaW5zdC5hcmdzWzFdKSkKKyAgICAgICAg
ICAgICAgICAgICAgbV9zdGF0ZS5hZGRBbGlhcyhTbG90Q29uc3QoaW5zdC5hcmdzWzFdLnN0YWNr
U2xvdCgpLCBpbnN0LmFyZ3NbMF0udmFsdWUoKSkpOworICAgICAgICAgICAgfSBlbHNlIGlmIChp
c1NwaWxsU2xvdChpbnN0LmFyZ3NbMF0pICYmIGluc3QuYXJnc1sxXS5pc1JlZygpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKE9wdGlvbmFsPGludDY0X3Q+IGNvbnN0YW50ID0gbV9zdGF0ZS5jb25z
dGFudEZvcihpbnN0LmFyZ3NbMF0pKQorICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLmFkZEFs
aWFzKFJlZ0NvbnN0KGluc3QuYXJnc1sxXS5yZWcoKSwgKmNvbnN0YW50KSk7CisgICAgICAgICAg
ICAgICAgbV9zdGF0ZS5hZGRBbGlhcygKKyAgICAgICAgICAgICAgICAgICAgUmVnU2xvdChpbnN0
LmFyZ3NbMV0ucmVnKCksIGluc3QuYXJnc1swXS5zdGFja1Nsb3QoKSwgUmVnU2xvdDo6QWxsQml0
cykpOworICAgICAgICAgICAgfSBlbHNlIGlmIChpbnN0LmFyZ3NbMF0uaXNSZWcoKSAmJiBpc1Nw
aWxsU2xvdChpbnN0LmFyZ3NbMV0pKSB7CisgICAgICAgICAgICAgICAgaWYgKE9wdGlvbmFsPGlu
dDY0X3Q+IGNvbnN0YW50ID0gbV9zdGF0ZS5jb25zdGFudEZvcihpbnN0LmFyZ3NbMF0pKQorICAg
ICAgICAgICAgICAgICAgICBtX3N0YXRlLmFkZEFsaWFzKFNsb3RDb25zdChpbnN0LmFyZ3NbMV0u
c3RhY2tTbG90KCksICpjb25zdGFudCkpOworICAgICAgICAgICAgICAgIG1fc3RhdGUuYWRkQWxp
YXMoCisgICAgICAgICAgICAgICAgICAgIFJlZ1Nsb3QoaW5zdC5hcmdzWzBdLnJlZygpLCBpbnN0
LmFyZ3NbMV0uc3RhY2tTbG90KCksIFJlZ1Nsb3Q6OkFsbEJpdHMpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTW92ZTMyOgorICAgICAgICAgICAg
aWYgKGluc3QuYXJnc1swXS5pc1NvbWVJbW0oKSkgeworICAgICAgICAgICAgICAgIGlmIChpbnN0
LmFyZ3NbMV0uaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5hZGRBbGlhcyhS
ZWdDb25zdChpbnN0LmFyZ3NbMV0ucmVnKCksIHN0YXRpY19jYXN0PHVpbnQzMl90PihpbnN0LmFy
Z3NbMF0udmFsdWUoKSkpKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChpc1NwaWxsU2xvdChp
bnN0LmFyZ3NbMV0pKQorICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLmFkZEFsaWFzKFNsb3RD
b25zdChpbnN0LmFyZ3NbMV0uc3RhY2tTbG90KCksIHN0YXRpY19jYXN0PHVpbnQzMl90PihpbnN0
LmFyZ3NbMF0udmFsdWUoKSkpKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNTcGlsbFNsb3Qo
aW5zdC5hcmdzWzBdKSAmJiBpbnN0LmFyZ3NbMV0uaXNSZWcoKSkgeworICAgICAgICAgICAgICAg
IGlmIChPcHRpb25hbDxpbnQ2NF90PiBjb25zdGFudCA9IG1fc3RhdGUuY29uc3RhbnRGb3IoaW5z
dC5hcmdzWzBdKSkKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5hZGRBbGlhcyhSZWdDb25z
dChpbnN0LmFyZ3NbMV0ucmVnKCksIHN0YXRpY19jYXN0PHVpbnQzMl90PigqY29uc3RhbnQpKSk7
CisgICAgICAgICAgICAgICAgbV9zdGF0ZS5hZGRBbGlhcygKKyAgICAgICAgICAgICAgICAgICAg
UmVnU2xvdChpbnN0LmFyZ3NbMV0ucmVnKCksIGluc3QuYXJnc1swXS5zdGFja1Nsb3QoKSwgUmVn
U2xvdDo6WkV4dDMyKSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGluc3QuYXJnc1swXS5pc1Jl
ZygpICYmIGlzU3BpbGxTbG90KGluc3QuYXJnc1sxXSkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
T3B0aW9uYWw8aW50NjRfdD4gY29uc3RhbnQgPSBtX3N0YXRlLmNvbnN0YW50Rm9yKGluc3QuYXJn
c1swXSkpCisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuYWRkQWxpYXMoU2xvdENvbnN0KGlu
c3QuYXJnc1sxXS5zdGFja1Nsb3QoKSwgc3RhdGljX2Nhc3Q8aW50MzJfdD4oKmNvbnN0YW50KSkp
OworICAgICAgICAgICAgICAgIG1fc3RhdGUuYWRkQWxpYXMoCisgICAgICAgICAgICAgICAgICAg
IFJlZ1Nsb3QoaW5zdC5hcmdzWzBdLnJlZygpLCBpbnN0LmFyZ3NbMV0uc3RhY2tTbG90KCksIFJl
Z1Nsb3Q6Ok1hdGNoMzIpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHZvaWQgZml4SW5zdCgpCisgICAgeworICAgICAgICBJbnN0JiBpbnN0ID0gbV9ibG9jay0+
YXQobV9pbnN0SW5kZXgpOworCisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0
YUxvZygiRml4aW5nIGluc3QgIiwgaW5zdCwgIjogIiwgbV9zdGF0ZSwgIlxuIik7CisKKyAgICAg
ICAgLy8gQ3JlYXRlIGEgY29weSBpbiBjYXNlIHdlIGludmFsaWRhdGUgdGhlIGluc3RydWN0aW9u
LiBUaGF0IGRvZXNuJ3QgaGFwcGVuIG9mdGVuLgorICAgICAgICBJbnN0IGluc3RDb3B5ID0gaW5z
dDsKKworICAgICAgICAvLyBUaGUgZ29hbCBpcyB0byByZXBsYWNlIHJlZmVyZW5jZXMgdG8gc3Rh
Y2sgc2xvdHMuIFdlIG9ubHkgY2FyZSBhYm91dCB1c2VzLiBXZSBjYW4ndCBoYW5kbGUKKyAgICAg
ICAgLy8gVXNlRGVmcy4gV2UgY291bGQgdGVhY2ggdGhpcyB0byBoYW5kbGUgVXNlRGVmcyBpZiB3
ZSBpbnNlcnRlZCBhIHN0b3JlIGluc3RydWN0aW9uIGFmdGVyCisgICAgICAgIC8vIGFuZCB3ZSBw
cm92ZWQgdGhhdCB0aGUgcmVnaXN0ZXIgYWxpYXNlZCB0byB0aGUgc3RhY2sgc2xvdCBkaWVzIGhl
cmUuIFdlIGNhbiBnZXQgdGhhdAorICAgICAgICAvLyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBsaXZl
bmVzcyBhbmFseXNpcy4KKyAgICAgICAgYm9vbCBkaWRUaGluZ3MgPSBmYWxzZTsKKyAgICAgICAg
YXV0byBoYW5kbGVBcmcgPSBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBl
LCBBcmc6OldpZHRoIHdpZHRoKSB7CisgICAgICAgICAgICBpZiAoIWlzU3BpbGxTbG90KGFyZykp
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKCFBcmc6OmlzQW55VXNl
KHJvbGUpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmIChBcmc6Omlz
QW55RGVmKHJvbGUpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgLy8gVHJ5IHRvIGdldCBhIHJlZ2lzdGVyIGlmIGF0IGFsbCBwb3NzaWJsZS4KKyAg
ICAgICAgICAgIGlmIChjb25zdCBSZWdTbG90KiBhbGlhcyA9IG1fc3RhdGUuZ2V0UmVnU2xvdChh
cmcuc3RhY2tTbG90KCkpKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoICh3aWR0aCkgeworICAg
ICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDY0OgorICAgICAgICAgICAgICAgICAgICBpZiAo
YWxpYXMtPm1vZGUgIT0gUmVnU2xvdDo6QWxsQml0cykKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nKCIgICAgUmVwbGFjaW5nICIsIGFyZywgIiB3aXRoICIsIGFsaWFz
LT5yZWcsICJcbiIpOworICAgICAgICAgICAgICAgICAgICBhcmcgPSBUbXAoYWxpYXMtPnJlZyk7
CisgICAgICAgICAgICAgICAgICAgIGRpZFRoaW5ncyA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBjYXNlIEFyZzo6V2lkdGgzMjoKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KCIgICAgUmVwbGFjaW5nICIsIGFyZywgIiB3aXRoICIsIGFsaWFzLT5yZWcsICIgKHN1YndpZHRo
IGNhc2UpXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgYXJnID0gVG1wKGFsaWFzLT5yZWcpOwor
ICAgICAgICAgICAgICAgICAgICBkaWRUaGluZ3MgPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Ly8gUmV2ZXJ0IHRvIGltbWVkaWF0ZSBpZiB0aGF0IGRpZG4ndCB3b3JrLgorICAgICAgICAgICAg
aWYgKGNvbnN0IFNsb3RDb25zdCogYWxpYXMgPSBtX3N0YXRlLmdldFNsb3RDb25zdChhcmcuc3Rh
Y2tTbG90KCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2coIiAgICBSZXBsYWNpbmcgIiwgYXJnLCAiIHdpdGggY29uc3RhbnQgIiwg
YWxpYXMtPmNvbnN0YW50LCAiXG4iKTsKKyAgICAgICAgICAgICAgICBpZiAoQXJnOjppc1ZhbGlk
SW1tRm9ybShhbGlhcy0+Y29uc3RhbnQpKQorICAgICAgICAgICAgICAgICAgICBhcmcgPSBBcmc6
OmltbShhbGlhcy0+Y29uc3RhbnQpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgYXJnID0gQXJnOjppbW02NChhbGlhcy0+Y29uc3RhbnQpOworICAgICAgICAgICAg
ICAgIGRpZFRoaW5ncyA9IHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgaW5zdC5mb3JFYWNoQXJnKGhhbmRs
ZUFyZyk7CisgICAgICAgIGlmICghZGlkVGhpbmdzIHx8IGluc3QuaXNWYWxpZEZvcm0oKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIC8vIFdlIGludHJvZHVjZWQgc29t
ZXRoaW5nIGludmFsaWQgYWxvbmcgdGhlIHdheS4gQmFjayB1cCBhbmQgY2FyZWZ1bGx5IGhhbmRs
ZSBlYWNoIGFyZ3VtZW50LgorICAgICAgICBpbnN0ID0gaW5zdENvcHk7CisgICAgICAgIEFTU0VS
VChpbnN0LmlzVmFsaWRGb3JtKCkpOworICAgICAgICBpbnN0LmZvckVhY2hBcmcoCisgICAgICAg
ICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIHR5cGUsIEFyZzo6
V2lkdGggd2lkdGgpIHsKKyAgICAgICAgICAgICAgICBBcmcgYXJnQ29weSA9IGFyZzsKKyAgICAg
ICAgICAgICAgICBoYW5kbGVBcmcoYXJnLCByb2xlLCB0eXBlLCB3aWR0aCk7CisgICAgICAgICAg
ICAgICAgaWYgKCFpbnN0LmlzVmFsaWRGb3JtKCkpCisgICAgICAgICAgICAgICAgICAgIGFyZyA9
IGFyZ0NvcHk7CisgICAgICAgICAgICB9KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGJvb2wg
aXNTcGlsbFNsb3QoY29uc3QgQXJnJiBhcmcpCisgICAgeworICAgICAgICByZXR1cm4gYXJnLmlz
U3RhY2soKSAmJiAhYXJnLnN0YWNrU2xvdCgpLT5pc0xvY2tlZCgpOworICAgIH0KKyAgICAKKyAg
ICBzdHJ1Y3QgUmVnQ29uc3QgeworICAgICAgICBSZWdDb25zdCgpCisgICAgICAgIHsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgUmVnQ29uc3QoUmVnIHJlZywgaW50NjRfdCBjb25zdGFu
dCkKKyAgICAgICAgICAgIDogcmVnKHJlZykKKyAgICAgICAgICAgICwgY29uc3RhbnQoY29uc3Rh
bnQpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJv
b2woKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gISFyZWc7CisgICAgICAg
IH0KKworICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICAgICAg
eworICAgICAgICAgICAgb3V0LnByaW50KHJlZywgIi0+IiwgY29uc3RhbnQpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBSZWcgcmVnOworICAgICAgICBpbnQ2NF90IGNvbnN0YW50IHsg
MCB9OworICAgIH07CisKKyAgICBzdHJ1Y3QgUmVnU2xvdCB7CisgICAgICAgIGVudW0gTW9kZSA6
IGludDhfdCB7CisgICAgICAgICAgICBBbGxCaXRzLAorICAgICAgICAgICAgWkV4dDMyLCAvLyBS
ZWdpc3RlciBjb250YWlucyB6ZXJvLWV4dGVuZGVkIGNvbnRlbnRzIG9mIHN0YWNrIHNsb3QuCisg
ICAgICAgICAgICBNYXRjaDMyIC8vIExvdyAzMiBiaXRzIG9mIHJlZ2lzdGVyIG1hdGNoIGxvdyAz
MiBiaXRzIG9mIHN0YWNrIHNsb3QuCisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICBSZWdT
bG90KCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgUmVnU2xvdChSZWcgcmVnLCBT
dGFja1Nsb3QqIHNsb3QsIE1vZGUgbW9kZSkKKyAgICAgICAgICAgIDogc2xvdChzbG90KQorICAg
ICAgICAgICAgLCByZWcocmVnKQorICAgICAgICAgICAgLCBtb2RlKG1vZGUpCisgICAgICAgIHsK
KyAgICAgICAgfQorCisgICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdAorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gc2xvdCAmJiByZWc7CisgICAgICAgIH0KKworICAg
ICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICAgICAgeworICAgICAg
ICAgICAgb3V0LnByaW50KHBvaW50ZXJEdW1wKHNsb3QpLCAiLT4iLCByZWcpOworICAgICAgICAg
ICAgc3dpdGNoIChtb2RlKSB7CisgICAgICAgICAgICBjYXNlIEFsbEJpdHM6CisgICAgICAgICAg
ICAgICAgb3V0LnByaW50KCIoQWxsQml0cykiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgWkV4dDMyOgorICAgICAgICAgICAgICAgIG91dC5wcmludCgiKFpFeHQz
MikiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgTWF0Y2gzMjoK
KyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIihNYXRjaDMyKSIpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBTdGFj
a1Nsb3QqIHNsb3QgeyBudWxscHRyIH07CisgICAgICAgIFJlZyByZWc7CisgICAgICAgIE1vZGUg
bW9kZSB7IEFsbEJpdHMgfTsKKyAgICB9OworCisgICAgc3RydWN0IFNsb3RDb25zdCB7CisgICAg
ICAgIFNsb3RDb25zdCgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFNsb3RDb25z
dChTdGFja1Nsb3QqIHNsb3QsIGludDY0X3QgY29uc3RhbnQpCisgICAgICAgICAgICA6IHNsb3Qo
c2xvdCkKKyAgICAgICAgICAgICwgY29uc3RhbnQoY29uc3RhbnQpCisgICAgICAgIHsKKyAgICAg
ICAgfQorCisgICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdAorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gc2xvdDsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBvdXQucHJp
bnQocG9pbnRlckR1bXAoc2xvdCksICItPiIsIGNvbnN0YW50KTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgU3RhY2tTbG90KiBzbG90IHsgbnVsbHB0ciB9OworICAgICAgICBpbnQ2NF90
IGNvbnN0YW50IHsgMCB9OworICAgIH07CisKKyAgICBzdHJ1Y3QgU3RhdGUgeworICAgICAgICB2
b2lkIGFkZEFsaWFzKGNvbnN0IFJlZ0NvbnN0JiBuZXdBbGlhcykKKyAgICAgICAgeworICAgICAg
ICAgICAgcmVnQ29uc3QuYXBwZW5kKG5ld0FsaWFzKTsKKyAgICAgICAgfQorICAgICAgICB2b2lk
IGFkZEFsaWFzKGNvbnN0IFJlZ1Nsb3QmIG5ld0FsaWFzKQorICAgICAgICB7CisgICAgICAgICAg
ICByZWdTbG90LmFwcGVuZChuZXdBbGlhcyk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBhZGRB
bGlhcyhjb25zdCBTbG90Q29uc3QmIG5ld0FsaWFzKQorICAgICAgICB7CisgICAgICAgICAgICBz
bG90Q29uc3QuYXBwZW5kKG5ld0FsaWFzKTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFJl
Z0NvbnN0KiBnZXRSZWdDb25zdChSZWcgcmVnKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAg
ICBmb3IgKGNvbnN0IFJlZ0NvbnN0JiBhbGlhcyA6IHJlZ0NvbnN0KSB7CisgICAgICAgICAgICAg
ICAgaWYgKGFsaWFzLnJlZyA9PSByZWcpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAmYWxp
YXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
fQorCisgICAgICAgIGNvbnN0IFJlZ1Nsb3QqIGdldFJlZ1Nsb3QoUmVnIHJlZykgY29uc3QKKyAg
ICAgICAgeworICAgICAgICAgICAgZm9yIChjb25zdCBSZWdTbG90JiBhbGlhcyA6IHJlZ1Nsb3Qp
IHsKKyAgICAgICAgICAgICAgICBpZiAoYWxpYXMucmVnID09IHJlZykKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuICZhbGlhczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgUmVnU2xvdCogZ2V0UmVnU2xvdChT
dGFja1Nsb3QqIHNsb3QpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoY29uc3Qg
UmVnU2xvdCYgYWxpYXMgOiByZWdTbG90KSB7CisgICAgICAgICAgICAgICAgaWYgKGFsaWFzLnNs
b3QgPT0gc2xvdCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICZhbGlhczsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAg
Y29uc3QgUmVnU2xvdCogZ2V0UmVnU2xvdChSZWcgcmVnLCBTdGFja1Nsb3QqIHNsb3QpIGNvbnN0
CisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoY29uc3QgUmVnU2xvdCYgYWxpYXMgOiByZWdT
bG90KSB7CisgICAgICAgICAgICAgICAgaWYgKGFsaWFzLnJlZyA9PSByZWcgJiYgYWxpYXMuc2xv
dCA9PSBzbG90KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gJmFsaWFzOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICBj
b25zdCBTbG90Q29uc3QqIGdldFNsb3RDb25zdChTdGFja1Nsb3QqIHNsb3QpIGNvbnN0CisgICAg
ICAgIHsKKyAgICAgICAgICAgIGZvciAoY29uc3QgU2xvdENvbnN0JiBhbGlhcyA6IHNsb3RDb25z
dCkgeworICAgICAgICAgICAgICAgIGlmIChhbGlhcy5zbG90ID09IHNsb3QpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAmYWxpYXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIE9wdGlvbmFsPGludDY0X3Q+IGNvbnN0
YW50Rm9yKGNvbnN0IEFyZyYgYXJnKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoYXJnLmlz
UmVnKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoY29uc3QgUmVnQ29uc3QqIGFsaWFzID0gZ2V0
UmVnQ29uc3QoYXJnLnJlZygpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFsaWFzLT5j
b25zdGFudDsKKyAgICAgICAgICAgICAgICByZXR1cm4gTnVsbG9wdDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIChhcmcuaXNTdGFjaygpKSB7CisgICAgICAgICAgICAgICAgaWYgKGNv
bnN0IFNsb3RDb25zdCogYWxpYXMgPSBnZXRTbG90Q29uc3QoYXJnLnN0YWNrU2xvdCgpKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGFsaWFzLT5jb25zdGFudDsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gTnVsbG9wdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBOdWxs
b3B0OworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBjbG9iYmVyKGNvbnN0IEFyZyYgYXJnKQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAoYXJnLmlzUmVnKCkpIHsKKyAgICAgICAgICAgICAg
ICByZWdDb25zdC5yZW1vdmVBbGxNYXRjaGluZygKKyAgICAgICAgICAgICAgICAgICAgWyZdIChj
b25zdCBSZWdDb25zdCYgYWxpYXMpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGFsaWFzLnJlZyA9PSBhcmcucmVnKCk7CisgICAgICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgICAgIHJlZ1Nsb3QucmVtb3ZlQWxsTWF0Y2hpbmcoCisgICAgICAgICAgICAg
ICAgICAgIFsmXSAoY29uc3QgUmVnU2xvdCYgYWxpYXMpIC0+IGJvb2wgeworICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGFsaWFzLnJlZyA9PSBhcmcucmVnKCk7CisgICAgICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmIChhcmcuaXNTdGFjaygpKSB7CisgICAgICAgICAgICAgICAgc2xvdENvbnN0LnJl
bW92ZUFsbE1hdGNoaW5nKAorICAgICAgICAgICAgICAgICAgICBbJl0gKGNvbnN0IFNsb3RDb25z
dCYgYWxpYXMpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFsaWFz
LnNsb3QgPT0gYXJnLnN0YWNrU2xvdCgpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgICAgICByZWdTbG90LnJlbW92ZUFsbE1hdGNoaW5nKAorICAgICAgICAgICAgICAgICAg
ICBbJl0gKGNvbnN0IFJlZ1Nsb3QmIGFsaWFzKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBhbGlhcy5zbG90ID09IGFyZy5zdGFja1Nsb3QoKTsKKyAgICAgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBib29sIG1l
cmdlKGNvbnN0IFN0YXRlJiBvdGhlcikKKyAgICAgICAgeworICAgICAgICAgICAgYm9vbCBjaGFu
Z2VkID0gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gISFyZWdD
b25zdC5yZW1vdmVBbGxNYXRjaGluZygKKyAgICAgICAgICAgICAgICBbJl0gKFJlZ0NvbnN0JiBh
bGlhcykgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlZ0NvbnN0KiBvdGhl
ckFsaWFzID0gb3RoZXIuZ2V0UmVnQ29uc3QoYWxpYXMucmVnKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFvdGhlckFsaWFzKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICAgICAgICAgIGlmIChhbGlhcy5jb25zdGFudCAhPSBvdGhlckFsaWFzLT5j
b25zdGFudCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAg
ICAgIGNoYW5nZWQgfD0gISFzbG90Q29uc3QucmVtb3ZlQWxsTWF0Y2hpbmcoCisgICAgICAgICAg
ICAgICAgWyZdIChTbG90Q29uc3QmIGFsaWFzKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAg
ICAgY29uc3QgU2xvdENvbnN0KiBvdGhlckFsaWFzID0gb3RoZXIuZ2V0U2xvdENvbnN0KGFsaWFz
LnNsb3QpOworICAgICAgICAgICAgICAgICAgICBpZiAoIW90aGVyQWxpYXMpCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFsaWFz
LmNvbnN0YW50ICE9IG90aGVyQWxpYXMtPmNvbnN0YW50KQorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgY2hhbmdlZCB8PSAhIXJlZ1Nsb3QucmVtb3Zl
QWxsTWF0Y2hpbmcoCisgICAgICAgICAgICAgICAgWyZdIChSZWdTbG90JiBhbGlhcykgLT4gYm9v
bCB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlZ1Nsb3QqIG90aGVyQWxpYXMgPSBvdGhl
ci5nZXRSZWdTbG90KGFsaWFzLnJlZywgYWxpYXMuc2xvdCk7CisgICAgICAgICAgICAgICAgICAg
IGlmICghb3RoZXJBbGlhcykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoYWxpYXMubW9kZSAhPSBSZWdTbG90OjpNYXRjaDMyICYm
IGFsaWFzLm1vZGUgIT0gb3RoZXJBbGlhcy0+bW9kZSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgYWxpYXMubW9kZSA9IFJlZ1Nsb3Q6Ok1hdGNoMzI7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIHJl
dHVybiBjaGFuZ2VkOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIG91dC5wcmludCgKKyAgICAgICAg
ICAgICAgICAie3JlZ0NvbnN0ID0gWyIsIGxpc3REdW1wKHJlZ0NvbnN0KSwgIl0sIHNsb3RDb25z
dCA9IFsiLCBsaXN0RHVtcChzbG90Q29uc3QpLAorICAgICAgICAgICAgICAgICJdLCByZWdTbG90
ID0gWyIsIGxpc3REdW1wKHJlZ1Nsb3QpLCAiXSwgd2FzVmlzaXRlZCA9ICIsIHdhc1Zpc2l0ZWQs
ICJ9Iik7CisgICAgICAgIH0KKworICAgICAgICBWZWN0b3I8UmVnQ29uc3Q+IHJlZ0NvbnN0Owor
ICAgICAgICBWZWN0b3I8U2xvdENvbnN0PiBzbG90Q29uc3Q7CisgICAgICAgIFZlY3RvcjxSZWdT
bG90PiByZWdTbG90OworICAgICAgICBib29sIHdhc1Zpc2l0ZWQgeyBmYWxzZSB9OworICAgIH07
CisKKyAgICBDb2RlJiBtX2NvZGU7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgU3RhdGU+IG1f
YXRIZWFkOworICAgIFN0YXRlIG1fc3RhdGU7CisgICAgQmFzaWNCbG9jayogbV9ibG9jayB7IG51
bGxwdHIgfTsKKyAgICB1bnNpZ25lZCBtX2luc3RJbmRleCB7IDAgfTsKK307CisKK30gLy8gYW5v
bnltb3VzIG5hbWVzcGFjZQorCit2b2lkIGZpeE9idmlvdXNTcGlsbHMoQ29kZSYgY29kZSkKK3sK
KyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgImZpeE9idmlvdXNTcGlsbHMiKTsKKwor
ICAgIEZpeE9idmlvdXNTcGlsbHMgZml4T2J2aW91c1NwaWxscyhjb2RlKTsKKyAgICBmaXhPYnZp
b3VzU3BpbGxzLnJ1bigpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckZpeE9idmlvdXNTcGlsbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckZpeE9idmlvdXNTcGlsbHMuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4T2J2aW91c1NwaWxscy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIEFpckZpeE9idmlvdXNTcGlsbHNfaAorI2RlZmluZSBBaXJG
aXhPYnZpb3VzU3BpbGxzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKworLy8gVGhp
cyBpcyBhIGZvcndhcmQgZmxvdyBwaGFzZSB0aGF0IHRyYWNrcyBlcXVpdmFsZW5jZSBiZXR3ZWVu
IHNwaWxscyBzbG90cyBhbmQgcmVnaXN0ZXJzLiBJdAorLy8gcmVtb3ZlcyBsb2FkcyBmcm9tIHNw
aWxsIHNsb3RzIGluIGNhc2VzIHdoZW4gdGhlIGNvbnRlbnRzIG9mIHRoZSBzcGlsbCBzbG90IGNh
biBiZSBmb3VuZCBpbiAob3IKKy8vIGNvbXB1dGVkIGZyb20pIGEgcmVnaXN0ZXIuCit2b2lkIGZp
eE9idmlvdXNTcGlsbHMoQ29kZSYpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWly
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyRml4T2J2aW91c1Nw
aWxsc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4U3BpbGxT
bG90WkRlZi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
Rml4U3BpbGxTbG90WkRlZi5oCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckZpeFNwaWxsU2xvdFpEZWYuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3
OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNpZm5kZWYgQWlyRml4U3BpbGxTbG90WkRlZl9oCi0jZGVmaW5lIEFpckZpeFNwaWxsU2xvdFpE
ZWZfaAotCi0jaW5jbHVkZSAiQWlyQ29kZS5oIgotI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5o
IgotI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCi0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgSXNTcGlsbFNsb3Q+
Ci12b2lkIGZpeFNwaWxsU2xvdFpEZWYoQ29kZSYgY29kZSwgY29uc3QgSXNTcGlsbFNsb3QmIGlz
U3BpbGxTbG90KQotewotICAgIC8vIFdlIGNvdWxkIGhhdmUgaW50cm9kdWNlZCBaRGVmJ3MgdG8g
U3RhY2tTbG90cyB0aGF0IGFyZSB3aWRlciB0aGFuIHRoZSBkZWYuIEluIHRoYXQgY2FzZSwgd2UK
LSAgICAvLyBuZWVkIHRvIGVtaXQgY29kZSB0byB6ZXJvLWZpbGwgdGhlIHRvcCBiaXRzIG9mIHRo
ZSBTdGFja1Nsb3QuCi0gICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChjb2RlKTsKLSAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
c3RJbmRleCA9IDA7IGluc3RJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsraW5zdEluZGV4KSB7Ci0g
ICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7Ci0KLSAgICAgICAg
ICAgIGluc3QuZm9yRWFjaEFyZygKLSAgICAgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6
OlJvbGUgcm9sZSwgQXJnOjpUeXBlLCBBcmc6OldpZHRoIHdpZHRoKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICghQXJnOjppc1pEZWYocm9sZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlzU3RhY2soKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1NwaWxs
U2xvdChhcmcuc3RhY2tTbG90KCkpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoYXJnLnN0YWNrU2xvdCgpLT5ieXRlU2l6ZSgpID09IEFy
Zzo6Ynl0ZXMod2lkdGgpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgICAgICAgICAgICAgIC8vIEN1cnJlbnRseSB3ZSBvbmx5IGhhbmRsZSB0aGlzIHNpbXBsZSBj
YXNlIGJlY2F1c2UgaXQncyB0aGUgb25seSBvbmUgdGhhdAotICAgICAgICAgICAgICAgICAgICAv
LyBhcmlzZXM6IFpEZWYncyBhcmUgb25seSAzMi1iaXQgcmlnaHQgbm93LiBTbywgd2hlbiB3ZSBo
aXQgdGhlc2UKLSAgICAgICAgICAgICAgICAgICAgLy8gYXNzZXJ0aW9ucyBpdCBtZWFucyB0aGF0
IHdlIG5lZWQgdG8gaW1wbGVtZW50IHRob3NlIG90aGVyIGtpbmRzIG9mIHplcm8KLSAgICAgICAg
ICAgICAgICAgICAgLy8gZmlsbHMuCi0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGFyZy5zdGFja1Nsb3QoKS0+Ynl0ZVNpemUoKSA9PSA4KTsKLSAgICAgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQod2lkdGggPT0gQXJnOjpXaWR0aDMyKTsKLQotICAgICAgICAgICAgICAg
ICAgICAvLyBXZSByZWx5IG9uIHRoZSBmYWN0IHRoYXQgdGhlcmUgbXVzdCBiZSBzb21lIHdheSB0
byBtb3ZlIHplcm8gdG8gYSBtZW1vcnkKLSAgICAgICAgICAgICAgICAgICAgLy8gbG9jYXRpb24g
d2l0aG91dCBmaXJzdCBidXJuaW5nIGEgcmVnaXN0ZXIuIE9uIEFSTSwgd2Ugd291bGQgZG8gdGhp
cyB1c2luZwotICAgICAgICAgICAgICAgICAgICAvLyB6ci4KLSAgICAgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoaXNWYWxpZEZvcm0oTW92ZTMyLCBBcmc6OkltbSwgQXJnOjpTdGFjaykp
OwotICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KAotICAgICAgICAgICAg
ICAgICAgICAgICAgaW5zdEluZGV4ICsgMSwgTW92ZTMyLCBpbnN0Lm9yaWdpbiwgQXJnOjppbW0o
MCksIGFyZy53aXRoT2Zmc2V0KDQpKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgfQot
ICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7Ci0gICAgfQotfQotCi19IH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCi0KLSNlbmRpZiAvLyBBaXJGaXhTcGlsbFNsb3RaRGVm
X2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5j
cHAJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
R2VuZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNSArMzEsMTggQEAKICNpbmNsdWRl
ICJBaXJBbGxvY2F0ZVN0YWNrLmgiCiAjaW5jbHVkZSAiQWlyQ29kZS5oIgogI2luY2x1ZGUgIkFp
ckVsaW1pbmF0ZURlYWRDb2RlLmgiCisjaW5jbHVkZSAiQWlyRml4T2J2aW91c1NwaWxscy5oIgog
I2luY2x1ZGUgIkFpckZpeFBhcnRpYWxSZWdpc3RlclN0YWxscy5oIgogI2luY2x1ZGUgIkFpckdl
bmVyYXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCIKICNp
bmNsdWRlICJBaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5oIgorI2luY2x1ZGUgIkFpckxv
Z1JlZ2lzdGVyUHJlc3N1cmUuaCIKICNpbmNsdWRlICJBaXJMb3dlckFmdGVyUmVnQWxsb2MuaCIK
ICNpbmNsdWRlICJBaXJMb3dlck1hY3Jvcy5oIgogI2luY2x1ZGUgIkFpck9wY29kZVV0aWxzLmgi
CiAjaW5jbHVkZSAiQWlyT3B0aW1pemVCbG9ja09yZGVyLmgiCiAjaW5jbHVkZSAiQWlyUmVwb3J0
VXNlZFJlZ2lzdGVycy5oIgorI2luY2x1ZGUgIkFpclNjYXZlbmdlUmVnaXN0ZXJzLmgiCiAjaW5j
bHVkZSAiQWlyU2ltcGxpZnlDRkcuaCIKICNpbmNsdWRlICJBaXJTcGlsbEV2ZXJ5dGhpbmcuaCIK
ICNpbmNsdWRlICJBaXJWYWxpZGF0ZS5oIgpAQCAtODEsOSArODQsMjUgQEAgdm9pZCBwcmVwYXJl
Rm9yR2VuZXJhdGlvbihDb2RlJiBjb2RlKQogICAgIC8vIEZvciBkZWJ1Z2dpbmcsIHlvdSBjYW4g
dXNlIHNwaWxsRXZlcnl0aGluZygpIHRvIHB1dCBldmVyeXRoaW5nIHRvIHRoZSBzdGFjayBiZXR3
ZWVuIGVhY2ggSW5zdC4KICAgICBpZiAoT3B0aW9uczo6YWlyU3BpbGxzRXZlcnl0aGluZygpKQog
ICAgICAgICBzcGlsbEV2ZXJ5dGhpbmcoY29kZSk7Ci0gICAgZWxzZQorICAgIGVsc2UgaWYgKGNv
ZGUuZW5hYmxlUkNSUygpKSB7CisgICAgICAgIG9uZVBhc3NJUkMoY29kZSk7CisKKyAgICAgICAg
aWYgKE9wdGlvbnM6OmxvZ0FpclJlZ2lzdGVyUHJlc3N1cmUoKSkgeworICAgICAgICAgICAgZGF0
YUxvZygiUmVnaXN0ZXIgcHJlc3N1cmUgYWZ0ZXIgb25lIHBhc3Mgb2YgSVJDOlxuIik7CisgICAg
ICAgICAgICBsb2dSZWdpc3RlclByZXNzdXJlKGNvZGUpOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBzY2F2ZW5nZVJlZ2lzdGVycyhjb2RlKTsKKyAgICB9IGVsc2UKICAgICAgICAgaXRl
cmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcoY29kZSk7CiAKKyAgICBpZiAoT3B0aW9uczo6bG9nQWly
UmVnaXN0ZXJQcmVzc3VyZSgpKSB7CisgICAgICAgIGRhdGFMb2coIlJlZ2lzdGVyIHByZXNzdXJl
IGFmdGVyIHJlZ2lzdGVyIGFsbG9jYXRpb246XG4iKTsKKyAgICAgICAgbG9nUmVnaXN0ZXJQcmVz
c3VyZShjb2RlKTsKKyAgICB9CisKKyAgICBmaXhPYnZpb3VzU3BpbGxzKGNvZGUpOworCiAgICAg
bG93ZXJBZnRlclJlZ0FsbG9jKGNvZGUpOwogCiAgICAgLy8gUHJpb3IgdG8gdGhpcyBwb2ludCB0
aGUgcHJvbG9ndWUgYW5kIGVwaWxvZ3VlIGlzIGltcGxpY2l0LiBUaGlzIG1ha2VzIGl0IGV4cGxp
Y2l0LiBJdCBhbHNvCkBAIC0xMzIsNiArMTUxLDE3IEBAIHZvaWQgZ2VuZXJhdGUoQ29kZSYgY29k
ZSwgQ0NhbGxIZWxwZXJzJiAKICAgICBpZiAoY29kZS5mcmFtZVNpemUoKSkKICAgICAgICAgaml0
LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtY29kZS5mcmFtZVNpemUoKSksIE1h
Y3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKKyAgICBhdXRvIGFyZ0ZvciA9
IFsmXSAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgZW50cnkpIC0+IENDYWxsSGVscGVyczo6QWRk
cmVzcyB7CisgICAgICAgIHJldHVybiBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIGVudHJ5Lm9mZnNldCgpKTsKKyAgICB9OworICAgIAorICAgIGZvciAo
Y29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgZW50cnkgOiBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlcnMo
KSkgeworICAgICAgICBpZiAoZW50cnkucmVnKCkuaXNHUFIoKSkKKyAgICAgICAgICAgIGppdC5z
dG9yZVB0cihlbnRyeS5yZWcoKS5ncHIoKSwgYXJnRm9yKGVudHJ5KSk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGppdC5zdG9yZURvdWJsZShlbnRyeS5yZWcoKS5mcHIoKSwgYXJnRm9yKGVu
dHJ5KSk7CisgICAgfQorCiAgICAgR2VuZXJhdGlvbkNvbnRleHQgY29udGV4dDsKICAgICBjb250
ZXh0LmNvZGUgPSAmY29kZTsKICAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBDQ2FsbEhlbHBlcnM6
OkxhYmVsPiBibG9ja0xhYmVscyhjb2RlLnNpemUoKSk7CkBAIC0xNjIsOSArMTkyLDE1IEBAIHZv
aWQgZ2VuZXJhdGUoQ29kZSYgY29kZSwgQ0NhbGxIZWxwZXJzJiAKICAgICAgICAgaWYgKGlzUmV0
dXJuKGJsb2NrLT5sYXN0KCkub3Bjb2RlKSkgewogICAgICAgICAgICAgLy8gV2UgY3VycmVudGx5
IGRvbid0IHJlcHJlc2VudCB0aGUgZnVsbCBwcm9sb2d1ZS9lcGlsb2d1ZSBpbiBBaXIsIHNvIHdl
IG5lZWQgdG8KICAgICAgICAgICAgIC8vIGhhdmUgdGhpcyBvdmVycmlkZS4KLSAgICAgICAgICAg
IGlmIChjb2RlLmZyYW1lU2l6ZSgpKQorICAgICAgICAgICAgaWYgKGNvZGUuZnJhbWVTaXplKCkp
IHsKKyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5IDog
Y29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVu
dHJ5LnJlZygpLmlzR1BSKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihh
cmdGb3IoZW50cnkpLCBlbnRyeS5yZWcoKS5ncHIoKSk7CisgICAgICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkRG91YmxlKGFyZ0ZvcihlbnRyeSks
IGVudHJ5LnJlZygpLmZwcigpKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
aml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7Ci0gICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICB9IGVsc2UKICAgICAgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWVXaXRoRW1w
dHlGcmFtZSgpOwogICAgICAgICAgICAgaml0LnJldCgpOwogICAgICAgICAgICAgY29udGludWU7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRs
ZUNhbGxlZVNhdmVzLmNwcAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDcgKzI5LDYgQEAKICNpZiBFTkFCTEUoQjNfSklUKQogCiAjaW5jbHVkZSAiQWlyQ29kZS5oIgot
I2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgogI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgogCkBAIC03MSwzNCArNzAsNiBAQCB2b2lkIGhh
bmRsZUNhbGxlZVNhdmVzKENvZGUmIGNvZGUpCiAgICAgLy8gVGhpcyBpcyBhIGJpdCB3ZWlyZCBz
aW5jZSB3ZSBjb3VsZCBoYXZlIGFscmVhZHkgcGlubmVkIGEgZGlmZmVyZW50IHN0YWNrIHNsb3Qg
dG8gdGhpcwogICAgIC8vIGFyZWEuIEFsc28sIG91ciBydW50aW1lIGRvZXMgbm90IHJlcXVpcmUg
dXMgdG8gcGluIHRoZSBzYXZlcyBhcmVhLiBNYXliZSB3ZSBzaG91bGRuJ3QgcGluIGl0PwogICAg
IHNhdmVzQXJlYS0+c2V0T2Zmc2V0RnJvbUZQKC1ieXRlU2l6ZSk7Ci0KLSAgICBhdXRvIGFyZ0Zv
ciA9IFsmXSAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgZW50cnkpIC0+IEFyZyB7Ci0gICAgICAg
IHJldHVybiBBcmc6OnN0YWNrKHNhdmVzQXJlYSwgZW50cnkub2Zmc2V0KCkgKyBieXRlU2l6ZSk7
Ci0gICAgfTsKLQotICAgIEluc2VydGlvblNldCBpbnNlcnRpb25TZXQoY29kZSk7Ci0gICAgCi0g
ICAgLy8gRmlyc3QgaW5zZXJ0IHNhdmluZyBjb2RlIGluIHRoZSBwcm9sb2d1ZS4KLSAgICBmb3Ig
KGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5IDogY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJz
KCkpIHsKLSAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgKLSAgICAgICAgICAgIDAsIGVudHJ5
LnJlZygpLmlzR1BSKCkgPyBNb3ZlIDogTW92ZURvdWJsZSwgY29kZVswXS0+YXQoMCkub3JpZ2lu
LAotICAgICAgICAgICAgVG1wKGVudHJ5LnJlZygpKSwgYXJnRm9yKGVudHJ5KSk7Ci0gICAgfQot
ICAgIGluc2VydGlvblNldC5leGVjdXRlKGNvZGVbMF0pOwotCi0gICAgLy8gTm93IGluc2VydCBy
ZXN0b3JlIGNvZGUgYXQgZXBpbG9ndWVzLgotICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBj
b2RlKSB7Ci0gICAgICAgIEluc3QmIGxhc3QgPSBibG9jay0+bGFzdCgpOwotICAgICAgICBpZiAo
IWlzUmV0dXJuKGxhc3Qub3Bjb2RlKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
IGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgZW50cnkgOiBjb2RlLmNhbGxlZVNhdmVSZWdp
c3RlcnMoKSkgewotICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgKLSAgICAgICAgICAg
ICAgICBibG9jay0+c2l6ZSgpIC0gMSwgZW50cnkucmVnKCkuaXNHUFIoKSA/IE1vdmUgOiBNb3Zl
RG91YmxlLCBsYXN0Lm9yaWdpbiwKLSAgICAgICAgICAgICAgICBhcmdGb3IoZW50cnkpLCBUbXAo
ZW50cnkucmVnKCkpKTsKLSAgICAgICAgfQotICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShi
bG9jayk7Ci0gICAgfQogfQogCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAkocmV2aXNpb24gMTk1MTc2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTE2Miw2ICsxNjIsNyBAQCBwdWJsaWM6CiAgICAgLy8KICAgICAvLyBUaGlzIGZ1bmN0aW9u
IGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IG9wY29kZV9nZW5lcmF0b3IucmIuCiAgICAgYm9vbCBhZG1p
dHNTdGFjayh1bnNpZ25lZCBhcmdJbmRleCk7CisgICAgYm9vbCBhZG1pdHNTdGFjayhBcmcmKTsK
IAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGluc3RydWN0aW9uIGNhbiBoYXZlIGFueSBl
ZmZlY3RzIG90aGVyIHRoYW4gY29udHJvbCBmbG93IG9yIGFyZ3VtZW50cy4KICAgICBib29sIGhh
c05vbkFyZ05vbkNvbnRyb2xFZmZlY3RzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpckluc3RJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE1OCw2ICsxNTgsMTEgQEAgaW5saW5lIHZvaWQgSW5zdDo6cmVwb3J0VXNlZFJlZ2lzdGVycyhj
bwogICAgIGFyZ3NbMF0uc3BlY2lhbCgpLT5yZXBvcnRVc2VkUmVnaXN0ZXJzKCp0aGlzLCB1c2Vk
UmVnaXN0ZXJzKTsKIH0KIAoraW5saW5lIGJvb2wgSW5zdDo6YWRtaXRzU3RhY2soQXJnJiBhcmcp
Cit7CisgICAgcmV0dXJuIGFkbWl0c1N0YWNrKCZhcmcgLSAmYXJnc1swXSk7Cit9CisKIGlubGlu
ZSBib29sIGlzU2hpZnRWYWxpZChjb25zdCBJbnN0JiBpbnN0KQogewogI2lmIENQVShYODYpIHx8
IENQVShYODZfNjQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RN
YXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RN
YXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5z
dE1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEFpckluc3RNYXBfaAorI2RlZmlu
ZSBBaXJJbnN0TWFwX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJCYXNp
Y0Jsb2NrLmgiCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkIzSW5kZXhNYXAuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgSW5zdE1hcCB7CitwdWJsaWM6CisgICAgSW5zdE1hcChD
b2RlJiBjb2RlKQorICAgICAgICA6IG1fbWFwKGNvZGUuc2l6ZSgpKQorICAgIHsKKyAgICAgICAg
Zm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpCisgICAgICAgICAgICBtX21hcFtibG9ja10u
cmVzaXplKGJsb2NrLT5zaXplKCkpOworICAgIH0KKworICAgIFQmIGF0KEJhc2ljQmxvY2sqIGJs
b2NrLCB1bnNpZ25lZCBpbnN0SW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gbV9tYXBbYmxv
Y2tdW2luc3RJbmRleF07CisgICAgfQorCisgICAgY29uc3QgVCYgYXQoQmFzaWNCbG9jayogYmxv
Y2ssIHVuc2lnbmVkIGluc3RJbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBjb25z
dF9jYXN0PEluc3RNYXAqPih0aGlzKS0+Z2V0KGJsb2NrLCBpbnN0SW5kZXgpOworICAgIH0KKyAg
ICAKK3ByaXZhdGU6CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgVmVjdG9yPFQ+PiBtX21hcDsK
K307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJJbnN0TWFwX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVy
Q29hbGVzY2luZy5jcHAJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw3ICsyOSw2IEBACiAjaWYgRU5BQkxFKEIzX0pJVCkKIAogI2luY2x1ZGUgIkFpckNv
ZGUuaCIKLSNpbmNsdWRlICJBaXJGaXhTcGlsbFNsb3RaRGVmLmgiCiAjaW5jbHVkZSAiQWlySW5z
ZXJ0aW9uU2V0LmgiCiAjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKICNpbmNsdWRlICJBaXJM
aXZlbmVzcy5oIgpAQCAtMjMzLDggKzIzMiw2IEBAIHByb3RlY3RlZDoKIAogICAgICAgICBpZiAo
bV9zcGlsbGVkVG1wcy5pc0VtcHR5KCkpCiAgICAgICAgICAgICBtX2NvYWxlc2NlZFRtcHNBdFNw
aWxsLmNsZWFyKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fY29sb3JlZFRtcC5jbGVh
cigpOwogICAgIH0KIAogcHJpdmF0ZToKQEAgLTEwNTksOSArMTA1NiwxNSBAQCBwcml2YXRlOgog
CiBjbGFzcyBJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZyB7CiBwdWJsaWM6Ci0gICAgSXRlcmF0
ZWRSZWdpc3RlckNvYWxlc2NpbmcoQ29kZSYgY29kZSkKKyAgICBlbnVtIE1vZGUgeworICAgICAg
ICBDbGFzc2ljLAorICAgICAgICBPbmVQYXNzCisgICAgfTsKKyAgICAKKyAgICBJdGVyYXRlZFJl
Z2lzdGVyQ29hbGVzY2luZyhDb2RlJiBjb2RlLCBNb2RlIG1vZGUpCiAgICAgICAgIDogbV9jb2Rl
KGNvZGUpCiAgICAgICAgICwgbV91c2VDb3VudHMoY29kZSkKKyAgICAgICAgLCBtX21vZGUobW9k
ZSkKICAgICB7CiAgICAgfQogCkBAIC0xMTA0LDcgKzExMDcsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgbV90bXBXaWR0aC5yZWNvbXB1dGUobV9jb2RlKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgQ29sb3JpbmdBbGxvY2F0b3I8dHlwZT4gYWxsb2NhdG9yKG1fY29kZSwgbV90bXBXaWR0
aCwgbV91c2VDb3VudHMsIHVuc3BpbGxhYmxlVG1wcyk7Ci0gICAgICAgICAgICBpZiAoIWFsbG9j
YXRvci5yZXF1aXJlc1NwaWxsaW5nKCkpIHsKKyAgICAgICAgICAgIGlmICghYWxsb2NhdG9yLnJl
cXVpcmVzU3BpbGxpbmcoKSB8fCBtX21vZGUgPT0gT25lUGFzcykgewogICAgICAgICAgICAgICAg
IGFzc2lnblJlZ2lzdGVyc1RvVG1wKGFsbG9jYXRvcik7CiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgfQpAQCAtMTExNSw2ICsxMTE4LDEwIEBAIHByaXZhdGU6CiAgICAgdGVt
cGxhdGU8QXJnOjpUeXBlIHR5cGU+CiAgICAgdm9pZCBhc3NpZ25SZWdpc3RlcnNUb1RtcChjb25z
dCBDb2xvcmluZ0FsbG9jYXRvcjx0eXBlPiYgYWxsb2NhdG9yKQogICAgIHsKKyAgICAgICAgSGFz
aFNldDxUbXA+IHNwaWxsZWQ7CisgICAgICAgIGZvciAoVG1wIHRtcCA6IGFsbG9jYXRvci5zcGls
bGVkVG1wcygpKQorICAgICAgICAgICAgc3BpbGxlZC5hZGQodG1wKTsKKwogICAgICAgICBmb3Ig
KEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7CiAgICAgICAgICAgICAvLyBHaXZlIFRtcCBh
IHZhbGlkIHJlZ2lzdGVyLgogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSAw
OyBpbnN0SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK2luc3RJbmRleCkgewpAQCAtMTEyNCwxMSAr
MTEzMSwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIGNvbXBsZXRlIHJlZ2lzdGVy
IGFsbG9jYXRpb24uIFNvLCB3ZSByZWNvcmQgdGhpcyBiZWZvcmUgc3RhcnRpbmcuCiAgICAgICAg
ICAgICAgICAgYm9vbCBtYXlCZUNvYWxlc2NhYmxlID0gYWxsb2NhdG9yLm1heUJlQ29hbGVzY2Fi
bGUoaW5zdCk7CiAKLSAgICAgICAgICAgICAgICAvLyBPbiBYODZfNjQsIE1vdmUzMiBpcyBjaGVh
cGVyIGlmIHdlIGtub3cgdGhhdCBpdCdzIGVxdWl2YWxlbnQgdG8gYSBNb3ZlLiBJdCdzCisgICAg
ICAgICAgICAgICAgLy8gTW92ZTMyIGlzIGNoZWFwZXIgaWYgd2Uga25vdyB0aGF0IGl0J3MgZXF1
aXZhbGVudCB0byBhIE1vdmUuIEl0J3MKICAgICAgICAgICAgICAgICAvLyBlcXVpdmFsZW50IGlm
IHRoZSBkZXN0aW5hdGlvbidzIGhpZ2ggYml0cyBhcmUgbm90IG9ic2VydmFibGUgb3IgaWYgdGhl
IHNvdXJjZSdzIGhpZ2gKICAgICAgICAgICAgICAgICAvLyBiaXRzIGFyZSBhbGwgemVyby4gTm90
ZSB0aGF0IHdlIGRvbid0IGhhdmUgdGhlIG9wcG9zaXRlIG9wdGltaXphdGlvbiBmb3Igb3RoZXIK
ICAgICAgICAgICAgICAgICAvLyBhcmNoaXRlY3R1cmVzLCB3aGljaCBtYXkgcHJlZmVyIE1vdmUg
b3ZlciBNb3ZlMzIsIGJlY2F1c2UgTW92ZSBpcyBjYW5vbmljYWwgYWxyZWFkeS4KLSAgICAgICAg
ICAgICAgICBpZiAodHlwZSA9PSBBcmc6OkdQICYmIG9wdGltaXplRm9yWDg2XzY0KCkgJiYgaW5z
dC5vcGNvZGUgPT0gTW92ZQorICAgICAgICAgICAgICAgIGlmICh0eXBlID09IEFyZzo6R1AgJiYg
aW5zdC5vcGNvZGUgPT0gTW92ZQogICAgICAgICAgICAgICAgICAgICAmJiBpbnN0LmFyZ3NbMF0u
aXNUbXAoKSAmJiBpbnN0LmFyZ3NbMV0uaXNUbXAoKSkgewogICAgICAgICAgICAgICAgICAgICBp
ZiAobV90bXBXaWR0aC51c2VXaWR0aChpbnN0LmFyZ3NbMV0udG1wKCkpIDw9IEFyZzo6V2lkdGgz
MgogICAgICAgICAgICAgICAgICAgICAgICAgfHwgbV90bXBXaWR0aC5kZWZXaWR0aChpbnN0LmFy
Z3NbMF0udG1wKCkpIDw9IEFyZzo6V2lkdGgzMikKQEAgLTExMzYsNyArMTE0Myw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgaW5zdC5mb3JFYWNoVG1w
RmFzdChbJl0gKFRtcCYgdG1wKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWco
KSB8fCB0bXAuaXNHUCgpID09ICh0eXBlICE9IEFyZzo6R1ApKQorICAgICAgICAgICAgICAgICAg
ICBpZiAodG1wLmlzUmVnKCkgfHwgdG1wLmlzR1AoKSA9PSAodHlwZSAhPSBBcmc6OkdQKSB8fCBz
cGlsbGVkLmNvbnRhaW5zKHRtcCkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAK
ICAgICAgICAgICAgICAgICAgICAgVG1wIGFsaWFzVG1wID0gYWxsb2NhdG9yLmdldEFsaWFzKHRt
cCk7CkBAIC0xMTY4LDcgKzExNzUsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgYWRkU3BpbGxBbmRG
aWxsKGNvbnN0IENvbG9yaW5nQWxsb2NhdG9yPHR5cGU+JiBhbGxvY2F0b3IsIEhhc2hTZXQ8dW5z
aWduZWQ+JiB1bnNwaWxsYWJsZVRtcHMpCiAgICAgewogICAgICAgICBIYXNoTWFwPFRtcCwgU3Rh
Y2tTbG90Kj4gc3RhY2tTbG90czsKLSAgICAgICAgdW5zaWduZWQgbmV3U3RhY2tTbG90VGhyZXNo
b2xkID0gbV9jb2RlLnN0YWNrU2xvdHMoKS5zaXplKCk7CiAgICAgICAgIGZvciAoVG1wIHRtcCA6
IGFsbG9jYXRvci5zcGlsbGVkVG1wcygpKSB7CiAgICAgICAgICAgICAvLyBBbGwgdGhlIHNwaWxs
ZWQgdmFsdWVzIGJlY29tZSB1bnNwaWxsYWJsZS4KICAgICAgICAgICAgIHVuc3BpbGxhYmxlVG1w
cy5hZGQoQWJzb2x1dGVUbXBNYXBwZXI8dHlwZT46OmFic29sdXRlSW5kZXgodG1wKSk7CkBAIC0x
MjAyLDE2ICsxMjA4LDE5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICAgICAgLy8gVHJ5IHRvIHJlcGxhY2UgdGhlIHJlZ2lzdGVyIHVzZSBieSBtZW1vcnkgdXNl
IHdoZW4gcG9zc2libGUuCi0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGluc3QuYXJncy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgICAgICBBcmcmIGFyZyA9
IGluc3QuYXJnc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFyZy5pc1RtcCgpICYmIGFy
Zy50eXBlKCkgPT0gdHlwZSAmJiAhYXJnLmlzUmVnKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGF1dG8gc3RhY2tTbG90RW50cnkgPSBzdGFja1Nsb3RzLmZpbmQoYXJnLnRtcCgpKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFja1Nsb3RFbnRyeSAhPSBzdGFja1Nsb3RzLmVu
ZCgpICYmIGluc3QuYWRtaXRzU3RhY2soaSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhcmcgPSBBcmc6OnN0YWNrKHN0YWNrU2xvdEVudHJ5LT52YWx1ZSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGlkU3BpbGwgPSB0cnVlOworICAgICAgICAgICAgICAgIGluc3QuZm9y
RWFjaEFyZygKKyAgICAgICAgICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlLCBB
cmc6OlR5cGUgYXJnVHlwZSwgQXJnOjpXaWR0aCB3aWR0aCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGFyZy5pc1RtcCgpICYmIGFyZ1R5cGUgPT0gdHlwZSAmJiAhYXJnLmlzUmVnKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHN0YWNrU2xvdEVudHJ5ID0gc3Rh
Y2tTbG90cy5maW5kKGFyZy50bXAoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHN0YWNrU2xvdEVudHJ5ICE9IHN0YWNrU2xvdHMuZW5kKCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJiYgaW5zdC5hZG1pdHNTdGFjayhhcmcpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YWNrU2xvdEVudHJ5LT52YWx1ZS0+ZW5zdXJlU2l6ZSgKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlTW92ZTMySWZEaWRTcGlsbCA/IDQg
OiBBcmc6OmJ5dGVzKHdpZHRoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFy
ZyA9IEFyZzo6c3RhY2soc3RhY2tTbG90RW50cnktPnZhbHVlKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGlkU3BpbGwgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSk7CiAKICAgICAgICAgICAg
ICAgICBpZiAoZGlkU3BpbGwgJiYgZm9yY2VNb3ZlMzJJZkRpZFNwaWxsKQogICAgICAgICAgICAg
ICAgICAgICBpbnN0Lm9wY29kZSA9IE1vdmUzMjsKQEAgLTEyNjIsMTcgKzEyNzEsMTIgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotCi0g
ICAgICAgIGZpeFNwaWxsU2xvdFpEZWYoCi0gICAgICAgICAgICBtX2NvZGUsCi0gICAgICAgICAg
ICBbJl0gKFN0YWNrU2xvdCogc3RhY2tTbG90KSAtPiBib29sIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gc3RhY2tTbG90LT5pbmRleCgpID49IG5ld1N0YWNrU2xvdFRocmVzaG9sZDsKLSAgICAg
ICAgICAgIH0pOwogICAgIH0KIAogICAgIENvZGUmIG1fY29kZTsKICAgICBUbXBXaWR0aCBtX3Rt
cFdpZHRoOwogICAgIFVzZUNvdW50czxUbXA+IG1fdXNlQ291bnRzOworICAgIE1vZGUgbV9tb2Rl
OwogICAgIHVuc2lnbmVkIG1fbnVtSXRlcmF0aW9ucyB7IDAgfTsKIH07CiAKQEAgLTEyODIsNyAr
MTI4NiwxNSBAQCB2b2lkIGl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nKENvZGUmIGNvCiB7CiAg
ICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJpdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2lu
ZyIpOwogCi0gICAgSXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcgaXRlcmF0ZWRSZWdpc3RlckNv
YWxlc2NpbmcoY29kZSk7CisgICAgSXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcgaXRlcmF0ZWRS
ZWdpc3RlckNvYWxlc2NpbmcoY29kZSwgSXRlcmF0ZWRSZWdpc3RlckNvYWxlc2Npbmc6OkNsYXNz
aWMpOworICAgIGl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLnJ1bigpOworfQorCit2b2lkIG9u
ZVBhc3NJUkMoQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwg
Im9uZVBhc3NJUkMiKTsKKworICAgIEl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nIGl0ZXJhdGVk
UmVnaXN0ZXJDb2FsZXNjaW5nKGNvZGUsIEl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nOjpPbmVQ
YXNzKTsKICAgICBpdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5ydW4oKTsKIH0KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2lu
Zy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySXRlcmF0
ZWRSZWdpc3RlckNvYWxlc2NpbmcuaAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiw2ICszNiwxMCBAQCBjbGFzcyBDb2RlOwogLy8gaHR0cDovL3d3dy5jcy5j
bXUuZWR1L2Fmcy9jcy9hY2FkZW1pYy9jbGFzcy8xNTc0NS1zMDcvd3d3L3BhcGVycy9nZW9yZ2Uu
cGRmCiB2b2lkIGl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nKENvZGUmKTsKIAorLy8gVGhpcyBp
cyBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIGFsZ29yaXRobSB0aGF0IHBlcmZvcm1zIGp1c3Qg
b25lIGl0ZXJhdGlvbiBhbmQgbGVhdmVzICJzcGlsbGVkIgorLy8gVG1wcyBhcyBub24tUmVnIFRt
cHMuCit2b2lkIG9uZVBhc3NJUkMoQ29kZSYpOworCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
Mzo6QWlyCiAKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgiCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6
QjM6OkFpcjsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEtpbGxNb2Rl
IGtpbGxNb2RlKQoreworICAgIHN3aXRjaCAoa2lsbE1vZGUpIHsKKyAgICBjYXNlIEtpbGxNb2Rl
OjpET0FFYXJseURlZkluTmV4dEluc3Q6CisgICAgICAgIG91dC5wcmludCgiRE9BRWFybHlEZWZJ
bk5leHRJbnN0Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEtpbGxNb2RlOjpET0FMYXRl
RGVmOgorICAgICAgICBvdXQucHJpbnQoIkRPQUxhdGVEZWYiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgS2lsbE1vZGU6OkVhcmx5VXNlS2lsbDoKKyAgICAgICAgb3V0LnByaW50KCJFYXJs
eVVzZUtpbGwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgS2lsbE1vZGU6OkxhdGVVc2VJ
blByZXZJbnN0S2lsbDoKKyAgICAgICAgb3V0LnByaW50KCJMYXRlVXNlSW5QcmV2SW5zdEtpbGwi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAko
cmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZl
bmVzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKEIzX0pJ
VCkKIAogI2luY2x1ZGUgIkFpckJhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJBaXJDb2RlLmgiCiAj
aW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKICNpbmNsdWRlICJBaXJUbXBJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiQjNJbmRleE1hcC5oIgpAQCAtOTIsMTAgKzkzLDE5IEBAIHN0cnVjdCBSZWdMaXZl
bmVzc0FkYXB0ZXIgewogICAgIFJlZyBpbmRleFRvVmFsdWUodW5zaWduZWQgaW5kZXgpIHsgcmV0
dXJuIFJlZzo6ZnJvbUluZGV4KGluZGV4KTsgfQogfTsKIAorZW51bSBjbGFzcyBLaWxsTW9kZSA6
IGludDhfdCB7CisgICAgRE9BRWFybHlEZWZJbk5leHRJbnN0LAorICAgIERPQUxhdGVEZWYsCisg
ICAgRWFybHlVc2VLaWxsLAorICAgIExhdGVVc2VJblByZXZJbnN0S2lsbAorfTsKKwogdGVtcGxh
dGU8dHlwZW5hbWUgQWRhcHRlcj4KLWNsYXNzIEFic3RyYWN0TGl2ZW5lc3MgOiBwcml2YXRlIEFk
YXB0ZXIgeworY2xhc3MgQWJzdHJhY3RMaXZlbmVzcyA6IHB1YmxpYyBBZGFwdGVyIHsKICAgICBz
dHJ1Y3QgV29ya3NldDsKIHB1YmxpYzoKKyAgICB0eXBlZGVmIHR5cGVuYW1lIEFkYXB0ZXI6OlRo
aW5nIFRoaW5nOworICAgIAogICAgIEFic3RyYWN0TGl2ZW5lc3MoQ29kZSYgY29kZSkKICAgICAg
ICAgOiBBZGFwdGVyKGNvZGUpCiAgICAgICAgICwgbV93b3Jrc2V0KEFkYXB0ZXI6Om1heEluZGV4
KGNvZGUpKQpAQCAtMjIyLDYgKzIzMiwxMSBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgIEl0ZXJh
dG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gSXRlcmF0b3IobV9saXZlbmVzcywgbV9saXZlbmVz
cy5tX3dvcmtzZXQuYmVnaW4oKSk7IH0KICAgICAgICAgICAgIEl0ZXJhdG9yIGVuZCgpIGNvbnN0
IHsgcmV0dXJuIEl0ZXJhdG9yKG1fbGl2ZW5lc3MsIG1fbGl2ZW5lc3MubV93b3Jrc2V0LmVuZCgp
KTsgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBib29sIGNvbnRhaW5zKGNvbnN0IHR5cGVu
YW1lIEFkYXB0ZXI6OlRoaW5nJiB0aGluZykgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbV9saXZlbmVzcy5tX3dvcmtzZXQuY29udGFpbnMoQWRhcHRlcjo6dmFs
dWVUb0luZGV4KHRoaW5nKSk7CisgICAgICAgICAgICB9CiAKICAgICAgICAgcHJpdmF0ZToKICAg
ICAgICAgICAgIEFic3RyYWN0TGl2ZW5lc3MmIG1fbGl2ZW5lc3M7CkBAIC0yMzIsNyArMjQ3LDE2
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBJdGVyYWJsZShtX2xpdmVuZXNzKTsKICAg
ICAgICAgfQogCi0gICAgICAgIHZvaWQgZXhlY3V0ZSh1bnNpZ25lZCBpbnN0SW5kZXgpCisgICAg
ICAgIGJvb2wgaXNMaXZlKGNvbnN0IHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nJiB0aGluZykgY29u
c3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGxpdmUoKS5jb250YWlucyh0aGluZyk7
CisgICAgICAgIH0KKworICAgICAgICAvLyBDYWxscyB0aGUga2lsbCBjYWxsYmFjayB3aXRoIHRo
ZSBraWxscyBhbmQgZGVzY3JpcHRpb25zIG9mIGhvdyB0aGV5IGdvdCBraWxsZWQuIEFsc28KKyAg
ICAgICAgLy8gcGFzc2VzIHRoZSBpbnRlcm5hbCBpbmRleCBvZiB0aGUgdGhpbmcgYmVpbmcga2ls
bGVkLCBpZiB5b3Ugd2FudCB0byB1c2UgaW5kZXgtYmFzZWQKKyAgICAgICAgLy8gbGl2ZW5lc3Mu
CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtpbGxDYWxsYmFjaz4KKyAgICAgICAgdm9pZCBl
eGVjdXRlKHVuc2lnbmVkIGluc3RJbmRleCwgY29uc3QgS2lsbENhbGxiYWNrJiBraWxsQ2FsbGJh
Y2spCiAgICAgICAgIHsKICAgICAgICAgICAgIEluc3QmIGluc3QgPSBtX2Jsb2NrLT5hdChpbnN0
SW5kZXgpOwogICAgICAgICAgICAgYXV0byYgd29ya3NldCA9IG1fbGl2ZW5lc3MubV93b3Jrc2V0
OwpAQCAtMjQyLDIzICsyNjYsMzIgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIEluc3QmIG5l
eHRJbnN0ID0gbV9ibG9jay0+YXQoaW5zdEluZGV4ICsgMSk7CiAgICAgICAgICAgICAgICAgbmV4
dEluc3QuZm9yRWFjaDx0eXBlbmFtZSBBZGFwdGVyOjpUaGluZz4oCiAgICAgICAgICAgICAgICAg
ICAgIFsmXSAodHlwZW5hbWUgQWRhcHRlcjo6VGhpbmcmIHRoaW5nLCBBcmc6OlJvbGUgcm9sZSwg
QXJnOjpUeXBlIHR5cGUsIEFyZzo6V2lkdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChBcmc6OmlzRWFybHlEZWYocm9sZSkgJiYgQWRhcHRlcjo6YWNjZXB0c1R5cGUodHlwZSkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya3NldC5yZW1vdmUoQWRhcHRlcjo6dmFsdWVU
b0luZGV4KHRoaW5nKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0Vhcmx5
RGVmKHJvbGUpICYmIEFkYXB0ZXI6OmFjY2VwdHNUeXBlKHR5cGUpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBBZGFwdGVyOjp2YWx1ZVRvSW5kZXgodGhp
bmcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghd29ya3NldC5yZW1vdmUoaW5k
ZXgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBraWxsQ2FsbGJhY2soaW5kZXgs
IHRoaW5nLCBLaWxsTW9kZTo6RE9BRWFybHlEZWZJbk5leHRJbnN0KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIC8vIFRoZW4gaGFuZGxlIGRlZidzLgogICAgICAgICAgICAg
aW5zdC5mb3JFYWNoPHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nPigKICAgICAgICAgICAgICAgICBb
Jl0gKHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nJiB0aGluZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6
VHlwZSB0eXBlLCBBcmc6OldpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChBcmc6Omlz
TGF0ZURlZihyb2xlKSAmJiBBZGFwdGVyOjphY2NlcHRzVHlwZSh0eXBlKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHdvcmtzZXQucmVtb3ZlKEFkYXB0ZXI6OnZhbHVlVG9JbmRleCh0aGluZykp
OworICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0xhdGVEZWYocm9sZSkgJiYgQWRhcHRl
cjo6YWNjZXB0c1R5cGUodHlwZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGluZGV4ID0gQWRhcHRlcjo6dmFsdWVUb0luZGV4KHRoaW5nKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghd29ya3NldC5yZW1vdmUoaW5kZXgpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGtpbGxDYWxsYmFjayhpbmRleCwgdGhpbmcsIEtpbGxNb2RlOjpET0FMYXRlRGVmKTsK
KyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0pOwogCiAgICAgICAgICAg
ICAvLyBUaGVuIGhhbmRsZSB1c2Uncy4KICAgICAgICAgICAgIGluc3QuZm9yRWFjaDx0eXBlbmFt
ZSBBZGFwdGVyOjpUaGluZz4oCiAgICAgICAgICAgICAgICAgWyZdICh0eXBlbmFtZSBBZGFwdGVy
OjpUaGluZyYgdGhpbmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgdHlwZSwgQXJnOjpXaWR0
aCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0Vhcmx5VXNlKHJvbGUpICYmIEFk
YXB0ZXI6OmFjY2VwdHNUeXBlKHR5cGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgd29ya3Nl
dC5hZGQoQWRhcHRlcjo6dmFsdWVUb0luZGV4KHRoaW5nKSk7CisgICAgICAgICAgICAgICAgICAg
IGlmIChBcmc6OmlzRWFybHlVc2Uocm9sZSkgJiYgQWRhcHRlcjo6YWNjZXB0c1R5cGUodHlwZSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gQWRhcHRlcjo6dmFs
dWVUb0luZGV4KHRoaW5nKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3b3Jrc2V0LmFk
ZChpbmRleCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAga2lsbENhbGxiYWNrKGluZGV4
LCB0aGluZywgS2lsbE1vZGU6OkVhcmx5VXNlS2lsbCk7CisgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICB9KTsKIAogICAgICAgICAgICAgLy8gQW5kIGZpbmFsbHksIGhhbmRs
ZSB0aGUgbGF0ZSB1c2UncyBvZiB0aGUgcHJldmlvdXMgaW5zdHJ1Y3Rpb24uCkBAIC0yNjYsMTcg
KzI5OSwzMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgSW5zdCYgcHJldkluc3QgPSBtX2Js
b2NrLT5hdChpbnN0SW5kZXggLSAxKTsKICAgICAgICAgICAgICAgICBwcmV2SW5zdC5mb3JFYWNo
PHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nPigKICAgICAgICAgICAgICAgICAgICAgWyZdICh0eXBl
bmFtZSBBZGFwdGVyOjpUaGluZyYgdGhpbmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgdHlw
ZSwgQXJnOjpXaWR0aCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNMYXRl
VXNlKHJvbGUpICYmIEFkYXB0ZXI6OmFjY2VwdHNUeXBlKHR5cGUpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdvcmtzZXQuYWRkKEFkYXB0ZXI6OnZhbHVlVG9JbmRleCh0aGluZykpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNMYXRlVXNlKHJvbGUpICYmIEFkYXB0
ZXI6OmFjY2VwdHNUeXBlKHR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgaW5kZXggPSBBZGFwdGVyOjp2YWx1ZVRvSW5kZXgodGhpbmcpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh3b3Jrc2V0LmFkZChpbmRleCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGtpbGxDYWxsYmFjayhpbmRleCwgdGhpbmcsIEtpbGxNb2RlOjpMYXRl
VXNlSW5QcmV2SW5zdEtpbGwpOworICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCisgICAgICAgIHZvaWQg
ZXhlY3V0ZSh1bnNpZ25lZCBpbnN0SW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGV4ZWN1
dGUoCisgICAgICAgICAgICAgICAgaW5zdEluZGV4LAorICAgICAgICAgICAgICAgIFtdICh1bnNp
Z25lZCwgY29uc3QgdHlwZW5hbWUgQWRhcHRlcjo6VGhpbmcmLCBLaWxsTW9kZSkgeyB9KTsKKyAg
ICAgICAgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgQWJzdHJhY3RMaXZlbmVzcyYgbV9saXZl
bmVzczsKICAgICAgICAgQmFzaWNCbG9jayogbV9ibG9jazsKICAgICB9OwogCisgICAgY29uc3Qg
VmVjdG9yPHVuc2lnbmVkPiYgcmF3TGl2ZUF0SGVhZChCYXNpY0Jsb2NrKiBibG9jaykKKyAgICB7
CisgICAgICAgIHJldHVybiBtX2xpdmVBdEhlYWRbYmxvY2tdOworICAgIH0KKwogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFVuZGVybHlpbmdJdGVyYWJsZT4KICAgICBjbGFzcyBJdGVyYWJsZSB7CiAg
ICAgcHVibGljOgpAQCAtMzMwLDYgKzM3OCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIGl0ZXJhdG9y
IGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9saXZlbmVzcywgbV9pdGVyYWJsZS5i
ZWdpbigpKTsgfQogICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRv
cihtX2xpdmVuZXNzLCBtX2l0ZXJhYmxlLmVuZCgpKTsgfQogCisgICAgICAgIGJvb2wgY29udGFp
bnMoY29uc3QgdHlwZW5hbWUgQWRhcHRlcjo6VGhpbmcmIHRoaW5nKSBjb25zdAorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gbV9saXZlbmVzcy5tX3dvcmtzZXQuY29udGFpbnMoQWRhcHRl
cjo6dmFsdWVUb0luZGV4KHRoaW5nKSk7CisgICAgICAgIH0KKwogICAgIHByaXZhdGU6CiAgICAg
ICAgIEFic3RyYWN0TGl2ZW5lc3MmIG1fbGl2ZW5lc3M7CiAgICAgICAgIGNvbnN0IFVuZGVybHlp
bmdJdGVyYWJsZSYgbV9pdGVyYWJsZTsKQEAgLTM0NSw2ICszOTgsOCBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBJdGVyYWJsZTx0eXBlbmFtZSBBZGFwdGVyOjpJbmRleFNldD4oKnRoaXMsIG1f
bGl2ZUF0VGFpbFtibG9ja10pOwogICAgIH0KIAorICAgIEluZGV4U3BhcnNlU2V0PFVuc2FmZVZl
Y3Rvck92ZXJmbG93PiYgd29ya3NldCgpIHsgcmV0dXJuIG1fd29ya3NldDsgfQorCiBwcml2YXRl
OgogICAgIGZyaWVuZCBjbGFzcyBMb2NhbENhbGM7CiAgICAgZnJpZW5kIHN0cnVjdCBMb2NhbENh
bGM6Okl0ZXJhYmxlOwpAQCAtMzY0LDYgKzQxOSwxMiBAQCB0eXBlZGVmIEFic3RyYWN0TGl2ZW5l
c3M8UmVnTGl2ZW5lc3NBZGFwCiAKIH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKIAor
bmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6
QjM6OkFpcjo6S2lsbE1vZGUpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwogI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCiAKICNlbmRpZiAvLyBBaXJMaXZlbmVzc19oCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckxvZ1JlZ2lzdGVyUHJlc3N1cmUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxvZ1Jl
Z2lzdGVyUHJlc3N1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkFpckxvZ1JlZ2lzdGVyUHJlc3N1cmUuaCIKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlySW5zdElubGluZXMu
aCIKKyNpbmNsdWRlICJBaXJMaXZlbmVzcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgbG9nUmVnaXN0ZXJQcmVzc3VyZShDb2RlJiBj
b2RlKQoreworICAgIGNvbnN0IHVuc2lnbmVkIHRvdGFsQ29sdW1ucyA9IDIwMDsKKyAgICBjb25z
dCB1bnNpZ25lZCByZWdpc3RlckNvbHVtbnMgPSAxMDA7CisgICAgCisgICAgUmVnTGl2ZW5lc3Mg
bGl2ZW5lc3MoY29kZSk7CisKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgewor
ICAgICAgICBSZWdMaXZlbmVzczo6TG9jYWxDYWxjIGxvY2FsQ2FsYyhsaXZlbmVzcywgYmxvY2sp
OworCisgICAgICAgIGJsb2NrLT5kdW1wSGVhZGVyKFdURjo6ZGF0YUZpbGUoKSk7CisKKyAgICAg
ICAgVmVjdG9yPENTdHJpbmc+IGluc3REdW1wczsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0
SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTspIHsKKyAgICAgICAgICAgIEluc3Qm
IGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKKyAgICAgICAgICAgIEluc3QqIHByZXZJbnN0
ID0gYmxvY2stPmdldChpbnN0SW5kZXggLSAxKTsKKworICAgICAgICAgICAgbG9jYWxDYWxjLmV4
ZWN1dGUoaW5zdEluZGV4KTsKKworICAgICAgICAgICAgUmVnaXN0ZXJTZXQgc2V0OworICAgICAg
ICAgICAgc2V0LnNldEFsbChsb2NhbENhbGMubGl2ZSgpKTsKKyAgICAgICAgICAgIEluc3Q6OmZv
ckVhY2hEZWZXaXRoRXh0cmFDbG9iYmVyZWRSZWdzPFJlZz4oCisgICAgICAgICAgICAgICAgcHJl
dkluc3QsICZpbnN0LAorICAgICAgICAgICAgICAgIFsmXSAoUmVnIHJlZywgQXJnOjpSb2xlLCBB
cmc6OlR5cGUsIEFyZzo6V2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgc2V0LnNldChyZWcp
OworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBTdHJpbmdQcmludFN0cmVhbSBp
bnN0T3V0OworICAgICAgICAgICAgU3RyaW5nUHJpbnRTdHJlYW0gbGluZU91dDsKKyAgICAgICAg
ICAgIGxpbmVPdXQucHJpbnQoIiAgICIpOworICAgICAgICAgICAgaWYgKHNldC5udW1iZXJPZlNl
dFJlZ2lzdGVycygpKSB7CisgICAgICAgICAgICAgICAgc2V0LmZvckVhY2goCisgICAgICAgICAg
ICAgICAgICAgIFsmXSAoUmVnIHJlZykgeworICAgICAgICAgICAgICAgICAgICAgICAgQ1N0cmlu
ZyB0ZXh0ID0gdG9DU3RyaW5nKCIgIiwgcmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh0ZXh0Lmxlbmd0aCgpICsgbGluZU91dC5sZW5ndGgoKSA+IHRvdGFsQ29sdW1ucykgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RPdXQucHJpbnQobGluZU91dC50b0NTdHJpbmco
KSwgIlxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZU91dC5yZXNldCgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVPdXQucHJpbnQoIiAgICAgICAiKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVPdXQu
cHJpbnQodGV4dCk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIGxp
bmVPdXQucHJpbnQoIjoiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChsaW5lT3V0
Lmxlbmd0aCgpID4gcmVnaXN0ZXJDb2x1bW5zKSB7CisgICAgICAgICAgICAgICAgaW5zdE91dC5w
cmludChsaW5lT3V0LnRvQ1N0cmluZygpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBsaW5lT3V0
LnJlc2V0KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aGlsZSAobGluZU91dC5sZW5n
dGgoKSA8IHJlZ2lzdGVyQ29sdW1ucykKKyAgICAgICAgICAgICAgICBsaW5lT3V0LnByaW50KCIg
Iik7CisgICAgICAgICAgICBsaW5lT3V0LnByaW50KCIgIik7CisgICAgICAgICAgICBsaW5lT3V0
LnByaW50KGluc3QpOworICAgICAgICAgICAgaW5zdE91dC5wcmludChsaW5lT3V0LnRvQ1N0cmlu
ZygpLCAiXG4iKTsKKyAgICAgICAgICAgIGluc3REdW1wcy5hcHBlbmQoaW5zdE91dC50b0NTdHJp
bmcoKSk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBpbnN0RHVtcHMu
c2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgZGF0YUxvZyhpbnN0RHVtcHNbaV0pOworICAgICAg
ICAKKyAgICAgICAgYmxvY2stPmR1bXBGb290ZXIoV1RGOjpkYXRhRmlsZSgpKTsKKyAgICB9Cit9
CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG9nUmVnaXN0
ZXJQcmVzc3VyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJMb2dSZWdpc3RlclByZXNzdXJlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgQWlyTG9nUmVnaXN0ZXJQcmVzc3VyZV9oCisjZGVmaW5lIEFpckxvZ1JlZ2lz
dGVyUHJlc3N1cmVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCisvLyBEdW1wcyB0
aGUgcmVnaXN0ZXJzIHRoYXQgYXJlIHVzZWQgYXQgZWFjaCBpbnN0cnVjdGlvbi4KK3ZvaWQgbG9n
UmVnaXN0ZXJQcmVzc3VyZShDb2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpB
aXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJMb2dSZWdpc3Rl
clByZXNzdXJlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcHRp
bWl6ZUJsb2NrT3JkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyT3B0aW1pemVCbG9ja09yZGVyLmNwcAkocmV2aXNpb24gMTk1MTc2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcHRpbWl6ZUJsb2NrT3JkZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTczLDEwICs3Myw4IEBAIHByaXZhdGU6CiAKIH0gLy8gYW5vbnltb3VzIG5hbWVz
cGFjZQogCi12b2lkIG9wdGltaXplQmxvY2tPcmRlcihDb2RlJiBjb2RlKQorVmVjdG9yPEJhc2lj
QmxvY2sqPiBibG9ja3NJbk9wdGltaXplZE9yZGVyKENvZGUmIGNvZGUpCiB7Ci0gICAgUGhhc2VT
Y29wZSBwaGFzZVNjb3BlKGNvZGUsICJvcHRpbWl6ZUJsb2NrT3JkZXIiKTsKLQogICAgIFZlY3Rv
cjxCYXNpY0Jsb2NrKj4gYmxvY2tzSW5PcmRlcjsKIAogICAgIEJsb2NrV29ya2xpc3QgZmFzdFdv
cmtsaXN0OwpAQCAtMTEzLDYgKzExMSwxNSBAQCB2b2lkIG9wdGltaXplQmxvY2tPcmRlcihDb2Rl
JiBjb2RlKQogICAgIEFTU0VSVChmYXN0V29ya2xpc3QuaXNFbXB0eSgpKTsKICAgICBBU1NFUlQo
c2xvd1dvcmtsaXN0LmlzRW1wdHkoKSk7CiAKKyAgICByZXR1cm4gYmxvY2tzSW5PcmRlcjsKK30K
Kwordm9pZCBvcHRpbWl6ZUJsb2NrT3JkZXIoQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3Bl
IHBoYXNlU2NvcGUoY29kZSwgIm9wdGltaXplQmxvY2tPcmRlciIpOworCisgICAgVmVjdG9yPEJh
c2ljQmxvY2sqPiBibG9ja3NJbk9yZGVyID0gYmxvY2tzSW5PcHRpbWl6ZWRPcmRlcihjb2RlKTsK
KyAgICAKICAgICAvLyBQbGFjZSBibG9ja3MgaW50byBDb2RlJ3MgYmxvY2sgbGlzdCBhY2NvcmRp
bmcgdG8gdGhlIG9yZGVyaW5nIGluIGJsb2Nrc0luT3JkZXIuIFdlIGRvIHRoaXMgYnkgbGVha2lu
ZwogICAgIC8vIGFsbCBvZiB0aGUgYmxvY2tzIGFuZCB0aGVuIHJlYWRvcHRpbmcgdGhlbS4KICAg
ICBmb3IgKGF1dG8mIGVudHJ5IDogY29kZS5ibG9ja0xpc3QoKSkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyT3B0aW1pemVCbG9ja09yZGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcHRpbWl6ZUJsb2NrT3JkZXIuaAkocmV2
aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcHRpbWl6
ZUJsb2NrT3JkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCwxMCArMjgsMTggQEAKIAogI2lmIEVOQUJM
RShCM19KSVQpCiAKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKIAorY2xhc3MgQmFzaWNCbG9jazsKIGNsYXNz
IENvZGU7CiAKKy8vIFJldHVybnMgYSBsaXN0IG9mIGJsb2NrcyBzb3J0ZWQgYWNjb3JkaW5nIHRv
IHdoYXQgd291bGQgYmUgdGhlIGN1cnJlbnQgb3B0aW1hbCBvcmRlci4gVGhpcyBzaGFyZXMKKy8v
IHNvbWUgcHJvcGVydGllcyB3aXRoIGEgcHJlLW9yZGVyIHRyYXZlcnNhbC4gSW4gcGFydGljdWxh
ciwgZWFjaCBibG9jayB3aWxsIGFwcGVhciBhZnRlciBhdCBsZWFzdAorLy8gb25lIG9mIGl0cyBw
cmVkZWNlc3NvcnMuCitWZWN0b3I8QmFzaWNCbG9jayo+IGJsb2Nrc0luT3B0aW1pemVkT3JkZXIo
Q29kZSYpOworCiAvLyBSZW9yZGVycyB0aGUgYmFzaWMgYmxvY2tzIHRvIGtlZXAgaG90IGJsb2Nr
cyBhdCB0aGUgdG9wLCBhbmQgbWF4aW1pemUgdGhlIGxpa2VsaWhvb2QgdGhhdCBhIGZyZXF1ZW50
bHkKIC8vIHRha2VuIGVkZ2UgaXMganVzdCBhIGZhbGwtdGhyb3VnaC4KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZXBvcnRVc2VkUmVnaXN0ZXJzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlcG9ydFVzZWRSZWdpc3Rl
cnMuY3BwCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpclJlcG9ydFVzZWRSZWdpc3RlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niwz
MiBAQCB2b2lkIHJlcG9ydFVzZWRSZWdpc3RlcnMoQ29kZSYgY29kZSkKIAogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykgewogICAg
ICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOworCisgICAgICAgICAg
ICAvLyBLaWxsIGRlYWQgYXNzaWdubWVudHMgdG8gcmVnaXN0ZXJzLiBGb3Igc2ltcGxpY2l0eSB3
ZSBzYXkgdGhhdCBhIHN0b3JlIGlzIGtpbGxhYmxlIGlmCisgICAgICAgICAgICAvLyBpdCBoYXMg
b25seSBsYXRlIGRlZnMgYW5kIHRob3NlIGxhdGUgZGVmcyBhcmUgdG8gcmVnaXN0ZXJzIHRoYXQg
YXJlIGRlYWQgcmlnaHQgbm93LgorICAgICAgICAgICAgaWYgKCFpbnN0Lmhhc05vbkFyZ0VmZmVj
dHMoKSkgeworICAgICAgICAgICAgICAgIGJvb2wgY2FuRGVsZXRlID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICBpbnN0LmZvckVhY2hBcmcoCisgICAgICAgICAgICAgICAgICAgIFsmXSAoQXJnJiBh
cmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUsIEFyZzo6V2lkdGgpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChBcmc6OmlzRWFybHlEZWYocm9sZSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjYW5EZWxldGUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIUFyZzo6aXNMYXRlRGVmKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlzUmVnKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5EZWxldGUgPSBmYWxzZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9jYWxDYWxjLmlzTGl2ZShhcmcucmVnKCkp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuRGVsZXRlID0gZmFsc2U7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBpZiAoY2FuRGVsZXRl
KQorICAgICAgICAgICAgICAgICAgICBpbnN0ID0gSW5zdCgpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCiAgICAgICAgICAgICBpZiAoaW5zdC5vcGNvZGUgPT0gUGF0Y2gpIHsKICAgICAg
ICAgICAgICAgICBSZWdpc3RlclNldCByZWdpc3RlclNldDsKICAgICAgICAgICAgICAgICBmb3Ig
KFJlZyByZWcgOiBsb2NhbENhbGMubGl2ZSgpKQpAQCAtNTQsNiArODAsMTEgQEAgdm9pZCByZXBv
cnRVc2VkUmVnaXN0ZXJzKENvZGUmIGNvZGUpCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBs
b2NhbENhbGMuZXhlY3V0ZShpbnN0SW5kZXgpOwogICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBibG9jay0+aW5zdHMoKS5yZW1vdmVBbGxNYXRjaGluZygKKyAgICAgICAgICAgIFsmXSAoY29u
c3QgSW5zdCYgaW5zdCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgcmV0dXJuICFpbnN0Owor
ICAgICAgICAgICAgfSk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpclNjYXZlbmdlUmVnaXN0ZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpclNjYXZlbmdlUmVnaXN0ZXJzLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU2NhdmVuZ2VSZWdpc3RlcnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFp
clNjYXZlbmdlUmVnaXN0ZXJzLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
QWlyQnJlYWtDcml0aWNhbEVkZ2VzLmgiCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUg
IkFpckVtaXRTaHVmZmxlLmgiCisjaW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVk
ZSAiQWlySW5zdElubGluZXMuaCIKKyNpbmNsdWRlICJBaXJJbnN0TWFwLmgiCisjaW5jbHVkZSAi
QWlyTGl2ZW5lc3MuaCIKKyNpbmNsdWRlICJBaXJPcHRpbWl6ZUJsb2NrT3JkZXIuaCIKKyNpbmNs
dWRlICJBaXJQaGFzZVNjb3BlLmgiCisjaW5jbHVkZSAiQWlyUmVnaXN0ZXJQcmlvcml0eS5oIgor
I2luY2x1ZGUgIkFpclRtcFdpZHRoLmgiCisjaW5jbHVkZSAiQWlyVXNlQ291bnRzLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworbmFtZXNwYWNl
IHsKKworYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKK3RlbXBsYXRlPEFyZzo6VHlwZSB0eXBlPgor
Y2xhc3MgU2NhdmVuZ2VSZWdpc3RlcnMgeworcHVibGljOgorICAgIFNjYXZlbmdlUmVnaXN0ZXJz
KENvZGUmIGNvZGUpCisgICAgICAgIDogbV9jb2RlKGNvZGUpCisgICAgICAgICwgbV9saXZlbmVz
cyhjb2RlKQorICAgICAgICAsIG1fZGVhdGhzKGNvZGUpCisgICAgICAgICwgbV9hdEhlYWQoY29k
ZS5zaXplKCkpCisgICAgICAgICwgbV91c2VDb3VudHMoY29kZSkKKyAgICAgICAgLCBtX3RtcFdp
ZHRoKGNvZGUpCisgICAgICAgICwgbV9pbnNlcnRpb25TZXQoY29kZSkKKyAgICB7CisgICAgfQor
CisgICAgdm9pZCBydW4oKQorICAgIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAg
ICBkYXRhTG9nKCJzY2F2ZW5nZVJlZ2lzdGVycygpIGRlYWxpbmcgd2l0aCBjb2RlOlxuIiwgbV9j
b2RlKTsKKworICAgICAgICBpbml0aWFsaXplQXRIZWFkKCk7CisgICAgICAgIAorICAgICAgICBW
ZWN0b3I8QmFzaWNCbG9jayo+IGJsb2NrcyA9IGJsb2Nrc0luT3B0aW1pemVkT3JkZXIobV9jb2Rl
KTsKKworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsK
KyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBibG9ja3MpIHsKKyAgICAgICAg
ICAgICAgICBtX2Jsb2NrID0gYmxvY2s7CisgICAgICAgICAgICAgICAgcHJvcGFnYXRlVmFsdWVz
SW5CbG9jaygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFtX2NoYW5nZWQpCisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGNvbXB1
dGVEZWF0aHMoKTsKKyAgICAgICAgaW5pdGlhbGl6ZUJsb2NrUmVnU3RhdGVzKCk7CisKKyAgICAg
ICAgbV9hdEhlYWRbbV9jb2RlWzBdXS5pc1NldHRsZWQgPSB0cnVlOworICAgICAgICBmb3IgKEJh
c2ljQmxvY2sqIGJsb2NrIDogYmxvY2tzKSB7CisgICAgICAgICAgICBtX2Jsb2NrID0gYmxvY2s7
CisgICAgICAgICAgICBwcm9jZXNzQmxvY2soKTsKKyAgICAgICAgfQorICAgIH0KKworcHJpdmF0
ZToKKyAgICBzdHJ1Y3QgVG1wSW5mbyB7CisgICAgICAgIFRtcEluZm8oKQorICAgICAgICB7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGV4cGxpY2l0IFRtcEluZm8oUmVnIHJlZykKKyAg
ICAgICAgICAgIDogcmVnKHJlZykKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBpbnQ2NF90IGNvbnN0YW50IHsgMCB9OworICAgICAgICBSZWcgcmVnOworICAgICAgICBi
b29sIGhhc0NvbnN0YW50IHsgZmFsc2UgfTsKKyAgICAgICAgYm9vbCBoYXNTcGlsbCB7IGZhbHNl
IH07CisgICAgfTsKKworICAgIHN0cnVjdCBSZWdJbmZvIHsKKyAgICAgICAgUmVnSW5mbygpCisg
ICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGV4cGxpY2l0IFJlZ0luZm8oVG1wIHRtcCkK
KyAgICAgICAgICAgIDogdG1wKHRtcCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAg
VG1wIHRtcDsKKyAgICAgICAgYm9vbCBpc0xvY2tlZCB7IGZhbHNlIH07CisgICAgfTsKKworICAg
IHZvaWQgaW5pdGlhbGl6ZUF0SGVhZCgpCisgICAgeworICAgICAgICBmb3IgKEJhc2ljQmxvY2sq
IGJsb2NrIDogbV9jb2RlKSB7CisgICAgICAgICAgICBTdGF0ZSYgc3RhdGUgPSBtX2F0SGVhZFti
bG9ja107CisgICAgICAgICAgICBmb3IgKFRtcCB0bXAgOiBtX2xpdmVuZXNzLmxpdmVBdEhlYWQo
YmxvY2spKQorICAgICAgICAgICAgICAgIHN0YXRlLm1hcHBpbmcuYWRkKHRtcCwgVG1wSW5mbygp
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgcHJvcGFnYXRlVmFsdWVzSW5CbG9jaygp
CisgICAgeworICAgICAgICBtX3N0YXRlID0gbV9hdEhlYWRbbV9ibG9ja107CisgICAgICAgIGZv
ciAoSW5zdCYgaW5zdCA6ICptX2Jsb2NrKQorICAgICAgICAgICAgcHJvcGFnYXRlVmFsdWVzKGlu
c3QpOworCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDogbV9ibG9jay0+c3Vj
Y2Vzc29yQmxvY2tzKCkpIHsKKyAgICAgICAgICAgIFN0YXRlJiBhdEhlYWQgPSBtX2F0SGVhZFtz
dWNjZXNzb3JdOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIWF0SGVhZC52aXNpdGVk
QnlQcm9wYWdhdGlvbikgeworICAgICAgICAgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBhdEhl
YWQubWFwcGluZykgeworICAgICAgICAgICAgICAgICAgICBUbXBJbmZvJiBzcmNJbmZvID0gZ2V0
SW5mbyhlbnRyeS5rZXkpOworICAgICAgICAgICAgICAgICAgICBUbXBJbmZvJiBkc3RJbmZvID0g
ZW50cnkudmFsdWU7CisgICAgICAgICAgICAgICAgICAgIGRzdEluZm8uY29uc3RhbnQgPSBzcmNJ
bmZvLmNvbnN0YW50OworICAgICAgICAgICAgICAgICAgICBkc3RJbmZvLmhhc0NvbnN0YW50ID0g
c3JjSW5mby5oYXNDb25zdGFudDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
YXRIZWFkLnZpc2l0ZWRCeVByb3BhZ2F0aW9uID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBtX2No
YW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogYXRIZWFkLm1hcHBpbmcpIHsKKyAgICAg
ICAgICAgICAgICBUbXBJbmZvJiBkc3RJbmZvID0gZW50cnkudmFsdWU7CisgICAgICAgICAgICAg
ICAgaWYgKCFkc3RJbmZvLmhhc0NvbnN0YW50KQorICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICBUbXBJbmZvJiBzcmNJbmZvID0gZ2V0SW5mbyhlbnRyeS5rZXkp
OworICAgICAgICAgICAgICAgIGlmICghc3JjSW5mby5oYXNDb25zdGFudCB8fCBzcmNJbmZvLmNv
bnN0YW50ICE9IGRzdEluZm8uY29uc3RhbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgZHN0SW5m
by5oYXNDb25zdGFudCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0
cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KyAgICAKKyAgICB2b2lkIHByb3BhZ2F0ZVZhbHVlcyhJbnN0JiBpbnN0KQorICAgIHsKKyAgICAg
ICAgaWYgKHR5cGUgPT0gQXJnOjpHUAorICAgICAgICAgICAgJiYgaW5zdC5vcGNvZGUgPT0gTW92
ZQorICAgICAgICAgICAgJiYgaW5zdC5hcmdzWzBdLmlzU29tZUltbSgpCisgICAgICAgICAgICAm
JiBpbnN0LmFyZ3NbMV0uaXNUbXAoKSkgeworICAgICAgICAgICAgVG1wSW5mbyYgaW5mbyA9IGdl
dEluZm8oaW5zdC5hcmdzWzFdLnRtcCgpKTsKKyAgICAgICAgICAgIGluZm8uaGFzQ29uc3RhbnQg
PSB0cnVlOworICAgICAgICAgICAgaW5mby5jb25zdGFudCA9IGluc3QuYXJnc1sxXS52YWx1ZSgp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE5l
ZWQgdGhlIGVxdWl2YWxlbnQgZm9yIEZQLgorCisgICAgICAgIEluc3Q6OmZvckVhY2hEZWZXaXRo
RXh0cmFDbG9iYmVyZWRSZWdzPFRtcD4oCisgICAgICAgICAgICAmaW5zdCwgJmluc3QsIC8vIEdl
dCBib3RoIGxhdGUgYW5kIGVhcmx5IGRlZnMgZm9yIGluc3QuCisgICAgICAgICAgICBbJl0gKFRt
cCB0bXAsIEFyZzo6Um9sZSwgQXJnOjpUeXBlIHRtcFR5cGUsIEFyZzo6V2lkdGgpIHsKKyAgICAg
ICAgICAgICAgICBpZiAodG1wVHlwZSAhPSB0eXBlKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgZ2V0SW5mbyh0bXApLmhhc0NvbnN0YW50ID0gZmFsc2U7Cisg
ICAgICAgICAgICB9KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21wdXRlRGVhdGhzKCkKKyAg
ICB7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsKKyAgICAgICAg
ICAgIHR5cGVuYW1lIFRtcExpdmVuZXNzPHR5cGU+OjpMb2NhbENhbGMgbG9jYWxDYWxjKG1fbGl2
ZW5lc3MsIGJsb2NrKTsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAg
IGRhdGFMb2coIiAgIExpdmUgYXQgdGFpbCBvZiAiLCAqYmxvY2ssICI6ICIsIGxpc3REdW1wKGxv
Y2FsQ2FsYy5saXZlKCkpLCAiXG4iKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5zdElu
ZGV4ID0gYmxvY2stPnNpemUoKTsgaW5zdEluZGV4LS07KSB7CisgICAgICAgICAgICAgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgIEFuYWx5emluZyAi
LCBibG9jay0+YXQoaW5zdEluZGV4KSwgIlxuIik7CisgICAgICAgICAgICAgICAgbG9jYWxDYWxj
LmV4ZWN1dGUoCisgICAgICAgICAgICAgICAgICAgIGluc3RJbmRleCwKKyAgICAgICAgICAgICAg
ICAgICAgWyZdICh1bnNpZ25lZCwgVG1wIHRtcCwgS2lsbE1vZGUga2lsbE1vZGUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coIiAgICAgICAgIEtpbGxpbmcgIiwgdG1wLCAiIGR1ZSB0byAiLCBraWxsTW9k
ZSwgIlxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGtpbGxNb2RlKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEtpbGxNb2RlOjpET0FFYXJseURlZkluTmV4dElu
c3Q6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9kZWF0aHMuYXQoYmxvY2ssIGluc3RJ
bmRleCArIDEpLmFwcGVuZChEZWF0aCh0bXAsIEVhcmx5RGVhdGgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgS2lsbE1v
ZGU6OkRPQUxhdGVEZWY6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9kZWF0aHMuYXQo
YmxvY2ssIGluc3RJbmRleCkuYXBwZW5kKERlYXRoKHRtcCwgTGF0ZURlYXRoKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNl
IEtpbGxNb2RlOjpFYXJseVVzZUtpbGw6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9k
ZWF0aHMuYXQoYmxvY2ssIGluc3RJbmRleCkuYXBwZW5kKERlYXRoKHRtcCwgRWFybHlEZWF0aCkp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBLaWxsTW9kZTo6TGF0ZVVzZUluUHJldkluc3RLaWxsOgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fZGVhdGhzLmF0KGJsb2NrLCBpbnN0SW5kZXggLSAxKS5hcHBlbmQo
RGVhdGgodG1wLCBMYXRlRGVhdGgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBpbml0aWFsaXpl
QmxvY2tSZWdTdGF0ZXMoKQorICAgIHsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IG1fY29k
ZVswXTsKKyAgICAgICAgCisgICAgICAgIFN0YXRlJiBzdGF0ZSA9IG1fYXRIZWFkW3Jvb3RdOwor
ICAgICAgICBmb3IgKFRtcCB0bXAgOiBtX2xpdmVuZXNzLmxpdmVBdEhlYWQocm9vdCkpIHsKKyAg
ICAgICAgICAgIGlmICghdG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIHN0YXRlLm1hcHBpbmcuYWRkKHRtcCwgVG1wSW5mbyh0
bXAucmVnKCkpKTsKKyAgICAgICAgICAgIHN0YXRlLnJldmVyc2VNYXBwaW5nW3RtcC5yZWcoKV0g
PSBSZWdJbmZvKHRtcCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHByb2Nlc3NCbG9j
aygpCisgICAgeworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAg
IFByb2Nlc3NpbmcgYmxvY2sgIiwgKm1fYmxvY2ssICJcbiIpOworICAgICAgICBtX3N0YXRlID0g
bV9hdEhlYWRbbV9ibG9ja107CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fc3RhdGUuaXNTZXR0
bGVkKTsKKworICAgICAgICBmb3IgKG1faW5zdEluZGV4ID0gMDsgbV9pbnN0SW5kZXggPCBtX2Js
b2NrLT5zaXplKCk7ICsrbV9pbnN0SW5kZXgpIHsKKyAgICAgICAgICAgIEluc3QmIGluc3QgPSBt
X2Jsb2NrLT5hdChtX2luc3RJbmRleCk7CisgICAgICAgICAgICBwcm9jZXNzSW5zdChpbnN0KTsK
KyAgICAgICAgICAgIHByb3BhZ2F0ZVZhbHVlcyhpbnN0KTsKKyAgICAgICAgfQorCisgICAgICAg
IGJvb2wganVtcHNJbnRvSG90ID0gZmFsc2U7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3Vj
Y2Vzc29yIDogbV9ibG9jay0+c3VjY2Vzc29yQmxvY2tzKCkpCisgICAgICAgICAgICBqdW1wc0lu
dG9Ib3QgfD0gc3VjY2Vzc29yLT5mcmVxdWVuY3koKSA+IG1fYmxvY2stPmZyZXF1ZW5jeSgpOwor
ICAgICAgICBpZiAoanVtcHNJbnRvSG90KQorICAgICAgICAgICAgcHJlU3BpbGwobV9ibG9jay0+
c2l6ZSgpIC0gMSk7CisKKyAgICAgICAgaWYgKG1fYmxvY2stPm51bVN1Y2Nlc3NvcnMoKSA+IDEp
IHsKKyAgICAgICAgICAgIHJlYmFzZShtX2Jsb2NrLT5zaXplKCkgLSAxKTsKKyAgICAgICAgICAg
IGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDogbV9ibG9jay0+c3VjY2Vzc29yQmxvY2tzKCkp
CisgICAgICAgICAgICAgICAgYm9vdEJsb2NrKHN1Y2Nlc3Nvcik7CisgICAgICAgIH0gZWxzZSBp
ZiAobV9ibG9jay0+bnVtU3VjY2Vzc29ycygpID09IDEpIHsKKyAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIHN1Y2Nlc3NvciA9IG1fYmxvY2stPnN1Y2Nlc3NvckJsb2NrKDApOworICAgICAgICAgICAg
aWYgKG1fYXRIZWFkW3N1Y2Nlc3Nvcl0uaXNTZXR0bGVkKQorICAgICAgICAgICAgICAgIGNvbmZv
cm1UbyhzdWNjZXNzb3IpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcmVi
YXNlKG1fYmxvY2stPnNpemUoKSAtIDEpOworICAgICAgICAgICAgICAgIGJvb3RCbG9jayhzdWNj
ZXNzb3IpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2lu
c2VydGlvblNldC5leGVjdXRlKG1fYmxvY2spOworICAgIH0KKworICAgIHZvaWQgcHJvY2Vzc0lu
c3QoSW5zdCYgaW5zdCkKKyAgICB7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAg
ZGF0YUxvZygiICAgICAgUHJvY2Vzc2luZyAiLCBpbnN0LCAiXG4iKTsKKyAgICAgICAgCisgICAg
ICAgIC8vIE91ciBzdGF0ZSBtYXBwaW5nIHRlbGxzIHVzIHdoYXQgaXMgbGl2ZSBhdCBhbnkgZ2l2
ZW4gbW9tZW50LiBXZSB1c2UgYSBzZXBhcmF0ZQorICAgICAgICAvLyBsaXZlbmVzcyBwYXNzIHRv
IGNvbGxlY3QgdGhlIGtpbGwgbGlzdHMgZm9yIGFsbCBpbnN0cnVjdGlvbnMuIFRoZSBraWxsIGxp
c3RzIHRlbGwgdXMKKyAgICAgICAgLy8gYWJvdXQgdGhlIHdheXMgdGhhdCB0aGluZ3MgZGllIGF0
IGFuIEluc3QuIFRoZXJlIGFyZSBmb3VyIHdheXM6CisgICAgICAgIC8vIAorICAgICAgICAvLyAt
IEFuIGVhcmx5IGRlZiBjb3VsZCBkaWUgYWJvdmUgYW4gSW5zdC4KKyAgICAgICAgLy8gLSBBbiBl
YXJseSB1c2UgY291bGQga2lsbCBhYm92ZSBhbiBJbnN0LgorICAgICAgICAvLyAtIEEgbGF0ZSBk
ZWYgY291bGQgZGllIGJlbG93IGFuIEluc3QuCisgICAgICAgIC8vIC0gQSBsYXRlIHVzZSBjb3Vs
ZCBraWxsIGJlbG93IGFuIEluc3QuCisgICAgICAgIC8vIAorICAgICAgICAvLyBPbmNlIHdlIGFy
ZSBhcm1lZCB3aXRoIG91ciBzdGF0ZSBtYXBwaW5nIGFuZCB0aGUga2lsbCBsaXN0cywgd2UgY2Fu
IHByb2Nlc3MgdGhlIEluc3QKKyAgICAgICAgLy8gaW4gdGhlIG9yZGVyIG9mIGl0cyBleGVjdXRp
b24gYW5kIHVwZGF0ZSB0aGUgc3RhdGUgbWFwcGluZyBiYXNlZCBvbiBkZWZzIGFuZCBraWxsCisg
ICAgICAgIC8vIGxpc3RzLgorICAgICAgICAvLyAKKyAgICAgICAgLy8gV2Ugc3RhcnQgYWJvdmUg
dGhlIEluc3Qgd2l0aCBhIHN0YXRlIHRoYXQgdGVsbHMgdXMgd2hhdCBpcyBsaXZlIGJlZm9yZSBp
dC4gVGhpcworICAgICAgICAvLyBpbmNsdWRlcyB0aGluZ3MgdGhhdCB3aWxsIGRpZSBhdCB0aGUg
dG9wLiBXZSBjYW4gaGFuZGxlIGVhcmx5IHVzZXMgYW5kIGRlZnMgYnkgZ2l2aW5nCisgICAgICAg
IC8vIHRoZW0gcmVnaXN0ZXJzIHRoYXQgYXJlIG5vdCBsaXZlLiBXZSBrbm93IHdoaWNoIHJlZ2lz
dGVycyBiZWNvbWUgbGl2ZSBiZWNhdXNlIG91cgorICAgICAgICAvLyBtYXBwaW5nIHRlbGxzIHVz
IHRoaXMuIFRoZW4gd2UgY2FuIGFwcGx5IHRoZSBlYXJseSBkZWF0aHMuIFRoZW4gd2UgcHJvY2Vz
cyBsYXRlIHVzZXMKKyAgICAgICAgLy8gYW5kIGRlZnMsIGFuZCB0aGVuIGFwcGx5IHRoZSBsYXRl
IGRlYXRocy4KKyAgICAgICAgLy8gCisgICAgICAgIC8vIFRoaXMgYWxnb3JpdGhtIG11c3QgcHJv
Y2VlZCBpbiB0aGUgb3JkZXIgb2YgdGhlIEluc3QncyBleGVjdXRpb24uIFdlIGNhbiB1c2UgdGhl
CisgICAgICAgIC8vIG5vdGlvbiBvZiBsb2NraW5nIGF0IGVhY2ggc3RhZ2UgLSBlYXJseSBhbmQg
dGhlbiBsYXRlIC0gdG8gaW5kaWNhdGUgd2hpY2ggcmVnaXN0ZXJzCisgICAgICAgIC8vIGhhdmUg
YWxyZWFkeSBiZWVuIHB1cnBvc2VkLiBBbGwgZWFybHkgdXNlcyB3aWxsIGhvbGQgdGhlIGxvY2sg
d2hpbGUgd2UgYXJlIHByb2Nlc3NpbmcKKyAgICAgICAgLy8gdGhlIGVhcmx5IHBhcnQgb2YgdGhl
IGluc3RydWN0aW9uLCBhbmQgdGhlbiByZWxlYXNlIGl0IGJlZm9yZSB3ZSBzdGFydCBwcm9jZXNz
aW5nIHRoZQorICAgICAgICAvLyBsYXRlIHN0dWZmLiBJbiBiZXR3ZWVuIGVhcmx5IGFuZCBsYXRl
LCBhZnRlciB3ZSBoYXZlIHVubG9ja2VkIHRoaW5ncyB1c2VkIGVhcmx5LCB3ZQorICAgICAgICAv
LyBjYW4gcGVyZm9ybSBlYXJseSBkZWF0aHMuIEFsbCBlYXJseSBkZWZzIHdpbGwgaG9sZCB0aGUg
bG9jayBlYXJseSBhbmQgdGhlbiByZWxlYXNlIGl0CisgICAgICAgIC8vIGFmdGVyIHdlIHByb2Nl
c3MgbGF0ZSB0aGluZ3MuIEFzIGEgc3BlY2lhbCBjYXNlLCBVc2VEZWYgd2lsbCBhbHNvIHJlbGVh
c2UgdGhlIGxvY2sKKyAgICAgICAgLy8gbGF0ZS4KKyAgICAgICAgLy8gCisgICAgICAgIC8vIFRo
aW5ncyBnZXQgd2VpcmQgd2l0aCBVc2VEZWYuIEx1Y2t5IGZvciB1cywgSW5zdHMgd2lsbCBoYXZl
IGEgc21hbGwgbnVtYmVyIG9mIFVzZURlZnMsCisgICAgICAgIC8vIHNvIHRoZSBhbGdvcml0aG0g
ZG9lc24ndCBoYXZlIHRvIGJlIGVmZmljaWVudCBhbmQgd2UgY2FuIGJlIHN1cmUgdGhhdCBpZiB3
ZSBoYW5kbGUKKyAgICAgICAgLy8gVXNlRGVmcyBlYXJseSwgdGhlbiB0aGUgZ3JlZWR5IGFwcHJv
YWNoIHNob3VsZCBqdXN0IHdvcmsuIFRoZSBsb2NraW5nIHN0cmF0ZWd5IGVuc3VyZXMKKyAgICAg
ICAgLy8gdGhhdCB3ZSB3b24ndCB0cnkgdG8gcmV1c2UgdGhlIHJlZ2lzdGVyIHdlIGFscmVhZHkg
cGlja2VkLiBUaGUgb25seSBhZGRpdGlvbmFsIGxvZ2ljCisgICAgICAgIC8vIGZvciBVc2VEZWYg
aXMgdGhhdCB3aGVuIHdlIHBpY2sgYSByZWdpc3RlciBmb3IgaXQsIHdoaWNoIGhhcHBlbnMgZWFy
bHksIHdlIGxvb2sgYWhlYWQKKyAgICAgICAgLy8gdG8gbWFrZSBzdXJlIHRoYXQgd2UgZGlkbid0
IGFscmVhZHkgbG9jayB0aGUgcmVnaXN0ZXIgbGF0ZS4gVGhlIG9ubHkgcmVnaXN0ZXJzIHRoYXQg
d2UKKyAgICAgICAgLy8gY291bGQgaGF2ZSBhbHJlYWR5IGxvY2tlZCBsYXRlIGFyZSB0aGUgb25l
cyB0aGF0IGFyZSBjbG9iYmVyZWQgbGF0ZSBvciBkZWZpbmVkIGxhdGUuCisgICAgICAgIC8vIAor
ICAgICAgICAvLyBPbmUgb2YgdGhlIGJlYXV0aWZ1bCB0aGluZ3MgYWJvdXQgdGhpcyBhcHByb2Fj
aCBpcyB0aGF0IHdlIGNhbiBwcm9jZXNzIHRoZSBJbnN0CisgICAgICAgIC8vIGluLXBsYWNlLiBX
ZSB3b24ndCBlZGl0IHRoZSB1c2VzIHVudGlsIHdlIGhhdmUgYWNjb3VudGVkIGZvciB0aGVtLiBX
ZSB3b24ndCBlZGl0IHRoZQorICAgICAgICAvLyBkZWZzIHVudGlsIHdlIGhhdmUgYWNjb3VudGVk
IGZvciB0aGVtLiBTbywgd2UgY2FuIGNvbXB1dGUgZm9yd2FyZCBsaXZlbmVzcyB3aGlsZSBhbHNv
CisgICAgICAgIC8vIGVkaXRpbmcgdGhlIGluc3RydWN0aW9uLgorCisgICAgICAgIC8vIFNwaWxs
IGFuZCBsb2NrIGFsbCBlYXJseSBjbG9iYmVycy4gU3BpbGwgYWxsIGxhdGUgY2xvYmJlcnMsIGJ1
dCBkb24ndCBsb2NrIHRob3NlIHlldC4KKyAgICAgICAgaWYgKGluc3Qub3Bjb2RlID09IFBhdGNo
KSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2co
IiAgICAgICAgIENsb2JiZXJlZCBlYXJseTogIiwgaW5zdC5leHRyYUVhcmx5Q2xvYmJlcmVkUmVn
cygpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgICBDbG9iYmVyZWQg
bGF0ZTogIiwgaW5zdC5leHRyYUNsb2JiZXJlZFJlZ3MoKSwgIlxuIik7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGluc3QuZXh0cmFFYXJseUNsb2JiZXJlZFJlZ3Mo
KS5mb3JFYWNoKAorICAgICAgICAgICAgICAgIFsmXSAoUmVnIHJlZykgeworICAgICAgICAgICAg
ICAgICAgICBpZiAoQXJnKFRtcChyZWcpKS50eXBlKCkgIT0gdHlwZSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgc3BpbGwocmVnKTsKKyAgICAg
ICAgICAgICAgICAgICAgbG9jayhyZWcpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9
CisKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgd2UgbG9jayBhbHJlYWR5LWFsbG9jYXRlZCBy
ZWdpc3RlcnMgdGhhdCBhcmUgbGl2ZSBlYXJseS4gVGhpcyBpbmNsdWRlcyBhbGwKKyAgICAgICAg
Ly8gZWFybHkgdXNlcywgZWFybHkgZGVmcywgYW5kIGxhdGUgdXNlcy4KKyAgICAgICAgaW5zdC5m
b3JFYWNoVG1wKAorICAgICAgICAgICAgWyZdIChUbXAmIHRtcCwgQXJnOjpSb2xlIHJvbGUsIEFy
Zzo6VHlwZSB0bXBUeXBlLCBBcmc6OldpZHRoKSB7CisgICAgICAgICAgICAgICAgaWYgKHRtcFR5
cGUgIT0gdHlwZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
IGlmICghdG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICBpZiAoIUFyZzo6aXNFYXJseURlZihyb2xlKSAmJiAhQXJnOjppc0FueVVzZShyb2xl
KSAmJiByb2xlICE9IEFyZzo6VXNlQWRkcikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGxvY2soZmlsbCh0bXAsIHJvbGUpKTsK
KyAgICAgICAgICAgIH0pOworCisgICAgICAgIC8vIEFsbG9jYXRlIHJlZ2lzdGVycyB0byB0aG9z
ZSB0aGluZ3MgdGhhdCBkb24ndCBhZG1pdCBzdGFjay4KKyAgICAgICAgaW5zdC5mb3JFYWNoQXJn
KAorICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSBh
cmdUeXBlLCBBcmc6OldpZHRoIHdpZHRoKSB7CisgICAgICAgICAgICAgICAgaWYgKGFyZ1R5cGUg
IT0gdHlwZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGlmIChhcmcuaXNUbXAoKSkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoIUFyZzo6aXNFYXJseURlZihyb2xlKSAmJiAhQXJnOjppc0FueVVzZShyb2xlKSAmJiByb2xl
ICE9IEFyZzo6VXNlQWRkcikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICAgICAgICAgICAgICBpZiAoYXJnLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0LmFkbWl0c1N0YWNrKGFyZykp
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIGFy
ZyA9IFRtcChsb2NrKGZpbGwoYXJnLnRtcCgpLCByb2xlKSkpOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYXJnLmZvckVh
Y2hUbXAoCisgICAgICAgICAgICAgICAgICAgIHJvbGUsIHR5cGUsIHdpZHRoLAorICAgICAgICAg
ICAgICAgICAgICBbJl0gKFRtcCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIHRtcFR5
cGUsIEFyZzo6V2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXBUeXBlICE9
IHR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgICAgICAgICAgdG1wID0gVG1wKGxvY2soZmlsbCh0bXAsIHJvbGUpKSk7CisgICAgICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgLy8gQWxsb2NhdGUgcmVn
aXN0ZXJzIHRvIHRob3NlIHRoaW5ncyB0aGF0IGFkbWl0IHN0YWNrIGJ1dCBhcmUgbm90IGNvbGQu
IEtlZXAgdGhpcyB1cCBzbworICAgICAgICAvLyBsb25nIGFzIHdlIHN0aWxsIGhhdmUgcmVnaXN0
ZXJzLgorICAgICAgICBpbnN0LmZvckVhY2hBcmcoCisgICAgICAgICAgICBbJl0gKEFyZyYgYXJn
LCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIGFyZ1R5cGUsIEFyZzo6V2lkdGgpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoYXJnVHlwZSAhPSB0eXBlKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgaWYgKCFBcmc6OmlzQW55VXNlKHJvbGUpICYmICFBcmc6Omlz
RWFybHlEZWYocm9sZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICBpZiAoQXJnOjppc0NvbGRVc2Uocm9sZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICBpZiAoIWFyZy5pc1RtcCgpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgaWYgKGFyZy5pc1JlZygpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgICAgICBSZWcgcmVnID0gZmlsbChhcmcudG1w
KCksIHJvbGUsIERvbnRTcGlsbCk7CisgICAgICAgICAgICAgICAgaWYgKCFyZWcpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBhcmcgPSBUbXAobG9jayhyZWcp
KTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hhdCB0byBkbyB3
aXRoIGV2ZXJ5dGhpbmcgZWxzZS4KKyAgICAgICAgaW5zdC5mb3JFYWNoQXJnKAorICAgICAgICAg
ICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSBhcmdUeXBlLCBBcmc6
OldpZHRoIHdpZHRoKSB7CisgICAgICAgICAgICAgICAgaWYgKGFyZ1R5cGUgIT0gdHlwZSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGlmICghQXJnOjppc0Fu
eVVzZShyb2xlKSAmJiAhQXJnOjppc0Vhcmx5RGVmKHJvbGUpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgaWYgKCFhcmcuaXNUbXAoKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGlmIChhcmcuaXNSZWcoKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAgICAgVG1wSW5mbyYgaW5mbyA9
IGdldEluZm8oYXJnLnRtcCgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIGhhdmUgYSBjYXNlIGZvciBjb25zdGFudHMgaGVyZS4KKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoaW5mby5oYXNTcGlsbCkgeworICAgICAg
ICAgICAgICAgICAgICBTdGFja1Nsb3QqIHNsb3QgPSBzcGlsbFNsb3QoYXJnLnRtcCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgZW5zdXJlV2lkdGgoc2xvdCwgd2lkdGgpOworICAgICAgICAgICAg
ICAgICAgICBhcmcgPSBBcmc6OnN0YWNrKHNsb3QpOworICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYXJnID0gVG1wKGxvY2so
aW5mby5yZWcpKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgIC8vIFVubG9jayBhbGwgb2Yg
dGhlIGVhcmx5IGNsb2JiZXJlZCByZWdpc3RlcnMuCisgICAgICAgIGlmIChpbnN0Lm9wY29kZSA9
PSBQYXRjaCkgeworICAgICAgICAgICAgaW5zdC5leHRyYUVhcmx5Q2xvYmJlcmVkUmVncygpLmZv
ckVhY2goCisgICAgICAgICAgICAgICAgWyZdIChSZWcgcmVnKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChBcmcoVG1wKHJlZykpLnR5cGUoKSAhPSB0eXBlKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB1bmxvY2socmVnKTsKKyAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFVubG9jayBhbGwgb2YgdGhlIGVh
cmx5IHVzZXMuIFRoaXMgcGVybWl0cyB0aG9zZSByZWdpc3RlcnMgdG8gYmUgdXNlZCBmb3Igb3Ro
ZXIgdGhpbmdzLgorICAgICAgICAvLyBJdCBldmVuIG1lYW5zIHRoYXQgd2UgbWlnaHQgc3BpbGwg
dGhlIHVzZWQgcmVnaXN0ZXIgaW4gdGhlIHNodWZmbGUgZHVlIHRvIGEgbGF0ZSBkZWYgdGhhdAor
ICAgICAgICAvLyBjb3VsZCB1c2UgdGhhdCByZWdpc3Rlci4KKyAgICAgICAgVmVjdG9yPFJlZywg
MT4gcmVnc1RvUmVsb2NrOworICAgICAgICBpbnN0LmZvckVhY2hUbXAoCisgICAgICAgICAgICBb
Jl0gKFRtcCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIGFyZ1R5cGUsIEFyZzo6V2lk
dGgpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXJnVHlwZSAhPSB0eXBlKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgaWYgKCFBcmc6OmlzRWFybHlVc2Uocm9s
ZSkgJiYgcm9sZSAhPSBBcmc6OlVzZUFkZHIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh0bXAuaXNSZWcoKSk7CisgICAgICAgICAg
ICAgICAgaWYgKEFyZzo6aXNMYXRlRGVmKHJvbGUpKSB7CisgICAgICAgICAgICAgICAgICAgIHJl
Z3NUb1JlbG9jay5hcHBlbmQodG1wLnJlZygpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICAgICAgICAgVW5sb2NraW5nICIsIHRtcCwgIlxu
Iik7CisgICAgICAgICAgICAgICAgdW5sb2NrKHRtcC5yZWcoKSk7CisgICAgICAgICAgICB9KTsK
KworICAgICAgICAvLyBSZWxvY2sgdGhlIFVzZURlZnMuIFdlIGNvdWxkIGhhdmUgYSBVc2VEZWYg
Zm9yIHNvbWUgcmVnaXN0ZXIgYW5kIGFsc28gYSBVc2UgZm9yIHRoYXQgc2FtZQorICAgICAgICAv
LyByZWdpc3Rlci4gV2hlbiB0aGF0IGhhcHBlbnMsIHdlIHdpbGwgaGF2ZSB1bmxvY2tlZCBpdCBh
Ym92ZSBkdWUgdG8gdGhlIFVzZS4KKyAgICAgICAgZm9yIChSZWcgcmVnIDogcmVnc1RvUmVsb2Nr
KQorICAgICAgICAgICAgbG9jayhyZWcpOworCisgICAgICAgIC8vIEFwcGx5IGFsbCBvZiB0aGUg
ZWFybHkgZGVhdGhzLgorICAgICAgICBmb3IgKERlYXRoJiBkZWF0aCA6IG1fZGVhdGhzLmF0KG1f
YmxvY2ssIG1faW5zdEluZGV4KSkgeworICAgICAgICAgICAgaWYgKGRlYXRoLmRlYXRoTW9kZSA9
PSBFYXJseURlYXRoKQorICAgICAgICAgICAgICAgIGtpbGwoZGVhdGgudG1wKTsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIExvY2sgYWxsIG9mIHRoZSBsYXRlIGNsb2JiZXJlZCByZWdpc3RlcnMu
CisgICAgICAgIGlmIChpbnN0Lm9wY29kZSA9PSBQYXRjaCkgeworICAgICAgICAgICAgaW5zdC5l
eHRyYUNsb2JiZXJlZFJlZ3MoKS5mb3JFYWNoKAorICAgICAgICAgICAgICAgIFsmXSAoUmVnIHJl
ZykgeworICAgICAgICAgICAgICAgICAgICBpZiAoQXJnKFRtcChyZWcpKS50eXBlKCkgIT0gdHlw
ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAg
c3BpbGwocmVnKTsKKyAgICAgICAgICAgICAgICAgICAgbG9jayhyZWcpOworICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAgLy8gRmlsbCBhbmQgbG9jayBhbGwgb2YgdGhl
IGxhdGUgZGVmcy4KKyAgICAgICAgaW5zdC5mb3JFYWNoQXJnKAorICAgICAgICAgICAgWyZdIChB
cmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSBhcmdUeXBlLCBBcmc6OldpZHRoKSB7
CisgICAgICAgICAgICAgICAgaWYgKGFyZ1R5cGUgIT0gdHlwZSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGlmICghQXJnOjppc0xhdGVEZWYocm9sZSkpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0Vh
cmx5VXNlKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgaWYgKCFhcmcuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgIGxvY2soZmlsbChhcmcudG1wKCksIHJvbGUpKTsKKyAgICAgICAgICAgIH0pOwor
CisgICAgICAgIC8vIEFzc2lnbiByZWdpc3RlcnMgdG8gbGF0ZSBkZWZzLiBBbHdheXMgcHV0IHRo
ZXNlIHRoaW5ncyBpbnRvIHJlZ2lzdGVycyBmaXJzdC4KKyAgICAgICAgLy8gRklYTUU6IFJldmlz
aXQgdGhhdCBhcHByb2FjaC4gTWF5YmUgd2Ugd2FudCB0byBpZGVudGlmeSBkZWZzIHRoYXQgYXJl
IHJlYWxseSB1c2VsZXNzIGFuZAorICAgICAgICAvLyBwdXQgdGhvc2UgZGlyZWN0bHkgaW50byB0
aGUgc3RhY2suCisgICAgICAgIGluc3QuZm9yRWFjaEFyZygKKyAgICAgICAgICAgIFsmXSAoQXJn
JiBhcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgYXJnVHlwZSwgQXJnOjpXaWR0aCkgewor
ICAgICAgICAgICAgICAgIGlmIChhcmdUeXBlICE9IHR5cGUpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgICBpZiAoIUFyZzo6aXNMYXRlRGVmKHJvbGUpKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNFYXJs
eVVzZShyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
IGlmICghYXJnLmlzVG1wKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICBpZiAoYXJnLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICBhcmcgPSBUbXAobG9jayhmaWxsKGFyZy50bXAoKSwgcm9sZSkpKTsKKyAg
ICAgICAgICAgIH0pOworCisgICAgICAgIHVubG9ja0FsbCgpOworCisgICAgICAgIC8vIEFwcGx5
IHRoZSBsYXRlIGRlYXRocy4KKyAgICAgICAgZm9yIChEZWF0aCYgZGVhdGggOiBtX2RlYXRocy5h
dChtX2Jsb2NrLCBtX2luc3RJbmRleCkpIHsKKyAgICAgICAgICAgIGlmIChkZWF0aC5kZWF0aE1v
ZGUgPT0gTGF0ZURlYXRoKQorICAgICAgICAgICAgICAgIGtpbGwoZGVhdGgudG1wKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGVtaXRTaHVmZmxlKG1faW5zdEluZGV4KTsKKyAgICB9CisKKyAgICB2
b2lkIHByZVNwaWxsKHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgaWYgKHZlcmJvc2Up
CisgICAgICAgICAgICBkYXRhTG9nKCIgICAgICBQcmUtc3BpbGxpbmcgaW4gIiwgKm1fYmxvY2ss
ICJcbiIpOworICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9zdGF0ZS5tYXBwaW5nKSB7Cisg
ICAgICAgICAgICBpZiAoZW50cnkudmFsdWUuaGFzU3BpbGwpIHsKKyAgICAgICAgICAgICAgICBp
ZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICAgICAgQWxyZWFk
eSBoYXMgc3BpbGw6ICIsIGVudHJ5LmtleSwgIlxuIik7CisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBTdGFja1Nsb3QqIHNsb3QgPSBzcGlsbFNs
b3QoZW50cnkua2V5KTsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAg
IGRhdGFMb2coIiAgICAgICAgIENvbnNpZGVyaW5nICIsIGVudHJ5LmtleSwgIlxuIik7CisgICAg
ICAgICAgICBpZiAoZW50cnkudmFsdWUucmVnKSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJv
c2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgIFNwaWxsaW5nIGZyb20g
IiwgZW50cnkudmFsdWUucmVnLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBtX3NodWZmbGVQYWly
cy5hcHBlbmQoCisgICAgICAgICAgICAgICAgICAgIFNodWZmbGVQYWlyKFRtcChlbnRyeS52YWx1
ZS5yZWcpLCBBcmc6OnN0YWNrKHNsb3QpLCB3aWR0aChzbG90KSkpOworICAgICAgICAgICAgICAg
IGVudHJ5LnZhbHVlLmhhc1NwaWxsID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZW50
cnkudmFsdWUuaGFzQ29uc3RhbnQpIHsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICAgICAgU3BpbGxpbmcgZnJvbSBjb25zdGFu
dCAiLCBlbnRyeS52YWx1ZS5jb25zdGFudCwgIlxuIik7CisgICAgICAgICAgICAgICAgbV9zaHVm
ZmxlUGFpcnMuYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICBTaHVmZmxlUGFpcihBcmc6Omlt
bTY0KGVudHJ5LnZhbHVlLmNvbnN0YW50KSwgQXJnOjpzdGFjayhzbG90KSwgd2lkdGgoc2xvdCkp
KTsKKyAgICAgICAgICAgICAgICBlbnRyeS52YWx1ZS5oYXNTcGlsbCA9IHRydWU7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBlbWl0U2h1ZmZsZShpbmRleCk7CisgICAgfQor
CisgICAgdm9pZCByZWJhc2UodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBSZWdpc3Rl
clNldCBzZXQ7CisgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBtX3N0YXRlLm1hcHBpbmcpIHsK
KyAgICAgICAgICAgIGlmIChlbnRyeS5rZXkuaXNSZWcoKSAmJiAoZW50cnkudmFsdWUuaGFzQ29u
c3RhbnQgfHwgZW50cnkudmFsdWUuaGFzU3BpbGwpKQorICAgICAgICAgICAgICAgIHNldC5zZXQo
ZW50cnkua2V5LnJlZygpKTsKKyAgICAgICAgfQorCisgICAgICAgIHNldC5mb3JFYWNoKAorICAg
ICAgICAgICAgWyZdIChSZWcgcmVnKSB7CisgICAgICAgICAgICAgICAgZmlsbChUbXAocmVnKSwg
QXJnOjpVc2UpOworICAgICAgICAgICAgfSk7CisgICAgICAgIGVtaXRTaHVmZmxlKGluZGV4KTsK
KyAgICB9CisKKyAgICB2b2lkIGJvb3RCbG9jayhCYXNpY0Jsb2NrKiBibG9jaykKKyAgICB7Cisg
ICAgICAgIFN0YXRlJiBkc3RTdGF0ZSA9IG1fYXRIZWFkW2Jsb2NrXTsKKworICAgICAgICBmb3Ig
KGF1dG8mIGVudHJ5IDogZHN0U3RhdGUubWFwcGluZykgeworICAgICAgICAgICAgVG1wSW5mbyYg
c3JjSW5mbyA9IGdldEluZm8oZW50cnkua2V5KTsKKyAgICAgICAgICAgIFRtcEluZm8mIGRzdElu
Zm8gPSBlbnRyeS52YWx1ZTsKKyAgICAgICAgICAgIGRzdEluZm8ucmVnID0gc3JjSW5mby5yZWc7
CisgICAgICAgICAgICBkc3RJbmZvLmhhc1NwaWxsID0gc3JjSW5mby5oYXNTcGlsbDsKKyAgICAg
ICAgICAgIGlmIChzcmNJbmZvLnJlZykKKyAgICAgICAgICAgICAgICBkc3RTdGF0ZS5yZXZlcnNl
TWFwcGluZ1tzcmNJbmZvLnJlZ10udG1wID0gZW50cnkua2V5OworICAgICAgICB9CisKKyAgICAg
ICAgZHN0U3RhdGUuaXNTZXR0bGVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICB2b2lkIGNvbmZvcm1U
byhCYXNpY0Jsb2NrKiBibG9jaykKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fYmxv
Y2stPmxhc3QoKS5vcGNvZGUgPT0gSnVtcCk7CisgICAgICAgIAorICAgICAgICBTdGF0ZSYgZHN0
U3RhdGUgPSBtX2F0SGVhZFtibG9ja107CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGRzdFN0YXRl
LmlzU2V0dGxlZCk7CisKKyAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IGRzdFN0YXRlLm1hcHBp
bmcpIHsKKyAgICAgICAgICAgIFRtcEluZm8mIHNyY0luZm8gPSBnZXRJbmZvKGVudHJ5LmtleSk7
CisgICAgICAgICAgICBUbXBJbmZvJiBkc3RJbmZvID0gZW50cnkudmFsdWU7CisKKyAgICAgICAg
ICAgIGlmIChkc3RJbmZvLnJlZyAmJiBkc3RJbmZvLnJlZyAhPSBzcmNJbmZvLnJlZykgeworICAg
ICAgICAgICAgICAgIFNodWZmbGVQYWlyIHBhaXI7CisgICAgICAgICAgICAgICAgaWYgKHNyY0lu
Zm8ucmVnKSB7CisgICAgICAgICAgICAgICAgICAgIHBhaXIgPSBTaHVmZmxlUGFpcigKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFRtcChzcmNJbmZvLnJlZyksIFRtcChkc3RJbmZvLnJlZyksIG1f
dG1wV2lkdGgud2lkdGgoZW50cnkua2V5KSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChz
cmNJbmZvLmhhc0NvbnN0YW50KSB7CisgICAgICAgICAgICAgICAgICAgIHBhaXIgPSBTaHVmZmxl
UGFpcigKKyAgICAgICAgICAgICAgICAgICAgICAgIEFyZzo6aW1tNjQoc3JjSW5mby5jb25zdGFu
dCksIFRtcChkc3RJbmZvLnJlZyksIG1fdG1wV2lkdGgud2lkdGgoZW50cnkua2V5KSk7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
c3JjSW5mby5oYXNTcGlsbCk7CisgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc2xvdCA9
IHNwaWxsU2xvdChlbnRyeS5rZXkpOworICAgICAgICAgICAgICAgICAgICBwYWlyID0gU2h1ZmZs
ZVBhaXIoQXJnOjpzdGFjayhzbG90KSwgVG1wKGRzdEluZm8ucmVnKSwgd2lkdGgoc2xvdCkpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX3NodWZmbGVQYWlycy5hcHBlbmQo
cGFpcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChkc3RJbmZvLmhhc1NwaWxs
ICYmICFzcmNJbmZvLmhhc1NwaWxsKSB7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
c3JjSW5mby5yZWcpOworICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc2xvdCA9IHNwaWxsU2xv
dChlbnRyeS5rZXkpOworICAgICAgICAgICAgICAgIG1fc2h1ZmZsZVBhaXJzLmFwcGVuZChTaHVm
ZmxlUGFpcihUbXAoc3JjSW5mby5yZWcpLCBBcmc6OnN0YWNrKHNsb3QpLCB3aWR0aChzbG90KSkp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZW1pdFNodWZmbGUobV9ibG9j
ay0+c2l6ZSgpIC0gMSk7CisgICAgfQorCisgICAgVG1wSW5mbyYgZ2V0SW5mbyhUbXAgdG1wKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc3RhdGUubWFwcGluZy5hZGQodG1wLCBUbXBJbmZvKCkp
Lml0ZXJhdG9yLT52YWx1ZTsKKyAgICB9CisKKyAgICBlbnVtIEZpbGxFZmZvcnQgeworICAgICAg
ICBNdXN0RmlsbCwKKyAgICAgICAgRG9udFNwaWxsCisgICAgfTsKKworICAgIFJlZyBmaWxsKFRt
cCB0bXAsIEFyZzo6Um9sZSByb2xlLCBGaWxsRWZmb3J0IGZpbGxFZmZvcnQgPSBNdXN0RmlsbCkK
KyAgICB7CisgICAgICAgIGlmIChyb2xlID09IEFyZzo6VXNlRGVmIHx8IEFyZzo6aXNFYXJseURl
Zihyb2xlKSkgeworICAgICAgICAgICAgSW5zdCYgaW5zdCA9IG1fYmxvY2stPmF0KG1faW5zdElu
ZGV4KTsKKyAgICAgICAgICAgIHJldHVybiBmaWxsKAorICAgICAgICAgICAgICAgIHRtcCwgcm9s
ZSwgZmlsbEVmZm9ydCwKKyAgICAgICAgICAgICAgICBbJl0gKFJlZyBjYW5kaWRhdGUpIC0+IGJv
b2wgeworICAgICAgICAgICAgICAgICAgICAvLyBVc2VEZWYgYW5kIGVhcmx5IERlZiByZXF1aXJl
cyB1cyB0byBsb29rIGFoZWFkIGFuZCBzZWUgaWYgdGhlIGNhbmRpZGF0ZQorICAgICAgICAgICAg
ICAgICAgICAvLyByZWdpc3RlciBpcyBhY2NlcHRhYmxlIHRvIHRoZSBsYXRlIGRlZnMsIGxhdGUg
dXNlcywgYW5kIGxhdGUgY2xvYmJlcnMuIEFuIGVhc3kKKyAgICAgICAgICAgICAgICAgICAgLy8g
d2F5IHRvIGRvIHRoaXMgaXMganVzdCB0byBzZWUgaWYgdGhlIHJlZ2lzdGVyIGFwcGVhcnMgYW55
d2hlcmUgaW4gdGhlIGFyZ3VtZW50CisgICAgICAgICAgICAgICAgICAgIC8vIGxpc3QuIE5vdGUg
dGhhdCB3ZSBkb24ndCBoYXZlIHRvIGNvbnNpZGVyIG5vbi1UbXAgQXJncywgYmVjYXVzZSB0aG9z
ZSB3b3VsZAorICAgICAgICAgICAgICAgICAgICAvLyBhbGwgaGF2ZSBlYXJseSB1c2VzLgorICAg
ICAgICAgICAgICAgICAgICBmb3IgKEFyZyYgYXJnIDogaW5zdC5hcmdzKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoYXJnLmlzUmVnKCkgJiYgYXJnLnJlZygpID09IGNhbmRpZGF0ZSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyBPZiBjb3Vyc2UsIHRoZXJlIGlzIHRo
ZSBhbm5veWluZyBQYXRjaCBpbnN0cnVjdGlvbiBhbmQgaXRzIGNsb2JiZXJlZAorICAgICAgICAg
ICAgICAgICAgICAvLyByZWdpc3RlcnMuCisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0Lm9w
Y29kZSA9PSBQYXRjaCAmJiBpbnN0LmV4dHJhQ2xvYmJlcmVkUmVncygpLmdldChjYW5kaWRhdGUp
KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuIGZpbGwodG1wLCByb2xlLCBmaWxsRWZmb3J0LCBbXSAoUmVnKSAtPiBib29s
IHsgcmV0dXJuIHRydWU7IH0pOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPgorICAgIFJlZyBmaWxsKFRtcCB0bXAsIEFyZzo6Um9sZSByb2xlLCBGaWxsRWZmb3J0
IGZpbGxFZmZvcnQsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBpZiAo
dmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgIEZpbGxpbmcgIiwgdG1wLCAi
IGZvciAiLCByb2xlLCAiXG4iKTsKKyAgICAgICAgCisgICAgICAgIFRtcEluZm8mIGluZm8gPSBn
ZXRJbmZvKHRtcCk7CisKKyAgICAgICAgLy8gRm9yIG1vc3QgRGVmcywgd2UgaW5zaXN0IHRoYXQg
dGhleSBhcmUgZGVhZC4gV2UgbWFrZSBhbiBleGNlcHRpb24gZm9yIFVzZURlZiwgd2hpY2ggZ2V0
cworICAgICAgICAvLyBmaWxsZWQgYXMgYSB1c2UuCisgICAgICAgIGlmIChBcmc6OmlzQW55RGVm
KHJvbGUpICYmICFBcmc6OmlzRWFybHlVc2Uocm9sZSkpIHsKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKCFpbmZvLmhhc1NwaWxsKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFpbmZv
Lmhhc0NvbnN0YW50KTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFpbmZvLnJlZyk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChpbmZvLnJlZykgeworICAgICAgICAgICAg
aWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICAgICAgICAgQWxyZWFk
eSBpbiAiLCBpbmZvLnJlZywgIlxuIik7CisgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkpCisg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQodG1wLnJlZygpID09IGluZm8ucmVnKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIGluZm8ucmVnOworICAgICAgICB9CisKKyAg
ICAgICAgUmVnIHJlZzsKKyAgICAgICAgaWYgKHRtcC5pc1JlZygpKSB7CisgICAgICAgICAgICBp
ZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgICAgICBNdXN0IHVz
ZSAiLCB0bXAucmVnKCksICJcbiIpOworICAgICAgICAgICAgcmVnID0gdG1wLnJlZygpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm9yIChSZWcgY2FuZGlkYXRlIDogcmVnc0luUHJp
b3JpdHlPcmRlcih0eXBlKSkgeworICAgICAgICAgICAgICAgIFJlZ0luZm8mIHJlZ0luZm8gPSBt
X3N0YXRlLnJldmVyc2VNYXBwaW5nW2NhbmRpZGF0ZV07CisgICAgICAgICAgICAgICAgaWYgKHJl
Z0luZm8uaXNMb2NrZWQgfHwgcmVnSW5mby50bXAgfHwgIWZ1bmN0b3IoY2FuZGlkYXRlKSkKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgcmVnID0gY2FuZGlk
YXRlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoIXJlZykgeworICAgICAgICAgICAgICAgIGlmIChmaWxsRWZmb3J0ID09IERvbnRTcGls
bCkgeworICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2coIiAgICAgICAgICAgIEdpdmluZyB1cCBkdWUgdG8gZWZmb3J0LlxuIik7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWcoKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gTmVlZCB0byBzcGlsbCBzb21ldGhp
bmcuIFNwaWxsIHRoZSByZWcgdGhhdCBob2xkcyB0aGUgdG1wIHRoYXQgaGFzIHRoZSBsZWFzdCB3
YXJtCisgICAgICAgICAgICAgICAgLy8gdXNlcy4gV2UgYXBwbHkgdHdvIG11bHRpcGxpZXJzOgor
ICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gLSBjb25zdGFudCBtdWx0aXBs
aWVyOiBpZiBhIHJlZ2lzdGVyIGhhcyBhIGNvbnN0YW50LCB3ZSBhcmUgbW9yZSBsaWtlbHkgdG8g
dXNlIGl0LgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gLSByZWcgbXVs
dGlwbGllcjogaWYgYSBUbXAgaXNSZWcsIHdlIGFyZSBsZXNzIGxpa2VseSB0byB1c2UgaXQuCisg
ICAgICAgICAgICAgICAgLy9kb3VibGUgY29uc3RhbnRNdWx0aXBsaWVyID0gMC4xOworICAgICAg
ICAgICAgICAgIGRvdWJsZSByZWdNdWx0aXBsaWVyID0gMTAwMDsKKyAgICAgICAgICAgICAgICBk
b3VibGUgbWluV2FybVVzZXMgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5
KCk7CisgICAgICAgICAgICAgICAgZm9yIChSZWcgY2FuZGlkYXRlIDogcmVnc0luUHJpb3JpdHlP
cmRlcih0eXBlKSkgeworICAgICAgICAgICAgICAgICAgICBSZWdJbmZvJiByZWdJbmZvID0gbV9z
dGF0ZS5yZXZlcnNlTWFwcGluZ1tjYW5kaWRhdGVdOworICAgICAgICAgICAgICAgICAgICBpZiAo
cmVnSW5mby5pc0xvY2tlZCB8fCAhZnVuY3RvcihjYW5kaWRhdGUpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBudW1XYXJtVXNl
cyA9IG1fdXNlQ291bnRzW3JlZ0luZm8udG1wXS5udW1XYXJtVXNlczsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHJlZ0luZm8udG1wID09IFRtcChjYW5kaWRhdGUpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgbnVtV2FybVVzZXMgKj0gcmVnTXVsdGlwbGllcjsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKG51bVdhcm1Vc2VzIDwgbWluV2FybVVzZXMpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJlZyA9IGNhbmRpZGF0ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1pbldhcm1Vc2Vz
ID0gbnVtV2FybVVzZXM7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgCisgICAgICAgICAgICAgICAgaWYgKCFyZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgICAgICBS
YW4gb3V0IG9mIHJlZ2lzdGVycy5cbiIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVn
KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgICAgICBVc2luZyAi
LCByZWcsICJcbiIpOworCisgICAgICAgIHNwaWxsKHJlZyk7CisgICAgICAgIGlmIChBcmc6Omlz
QW55VXNlKHJvbGUpICYmIHJvbGUgIT0gQXJnOjpTY3JhdGNoKSB7CisgICAgICAgICAgICBTdGFj
a1Nsb3QqIHNsb3QgPSBzcGlsbFNsb3QodG1wKTsKKyAgICAgICAgICAgIGlmIChpbmZvLmhhc0Nv
bnN0YW50KSB7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQodHlwZSA9PSBBcmc6OkdQ
KTsKKyAgICAgICAgICAgICAgICBhZGRNb3ZlKFNodWZmbGVQYWlyKEFyZzo6aW1tNjQoaW5mby5j
b25zdGFudCksIFRtcChyZWcpLCB3aWR0aChzbG90KSkpOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpbmZvLmhhc1NwaWxsKTsKKyAgICAgICAg
ICAgICAgICBhZGRNb3ZlKFNodWZmbGVQYWlyKEFyZzo6c3RhY2soc2xvdCksIFRtcChyZWcpLCB3
aWR0aChzbG90KSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1fc3RhdGUu
cmV2ZXJzZU1hcHBpbmdbcmVnXS50bXAgPSB0bXA7CisgICAgICAgIGluZm8ucmVnID0gcmVnOwor
ICAgICAgICByZXR1cm4gcmVnOworICAgIH0KKworICAgIHZvaWQgc3BpbGwoUmVnIHJlZykKKyAg
ICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlZyk7CisgICAgICAgIFJlZ0luZm8mIHJlZ0lu
Zm8gPSBtX3N0YXRlLnJldmVyc2VNYXBwaW5nW3JlZ107CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KCFyZWdJbmZvLmlzTG9ja2VkKTsKKyAgICAgICAgaWYgKCFyZWdJbmZvLnRtcCkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCIg
ICAgICAgICBTcGlsbGluZyAiLCByZWcsICJcbiIpOworICAgICAgICAKKyAgICAgICAgVG1wSW5m
byYgdG1wSW5mbyA9IGdldEluZm8ocmVnSW5mby50bXApOworCisgICAgICAgIGlmICghdG1wSW5m
by5oYXNTcGlsbCkgeworICAgICAgICAgICAgU3RhY2tTbG90KiBzbG90ID0gc3BpbGxTbG90KHJl
Z0luZm8udG1wKTsKKyAgICAgICAgICAgIGFkZE1vdmUoU2h1ZmZsZVBhaXIoVG1wKHJlZyksIEFy
Zzo6c3RhY2soc2xvdCksIHdpZHRoKHNsb3QpKSk7CisgICAgICAgICAgICB0bXBJbmZvLmhhc1Nw
aWxsID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZWdJbmZvLnRtcCA9IFRtcCgpOworICAg
ICAgICB0bXBJbmZvLnJlZyA9IFJlZygpOworICAgIH0KKworICAgIHZvaWQga2lsbChUbXAgdG1w
KQorICAgIHsKKyAgICAgICAgVG1wSW5mbyYgdG1wSW5mbyA9IGdldEluZm8odG1wKTsKKyAgICAg
ICAgaWYgKHRtcEluZm8ucmVnKSB7CisgICAgICAgICAgICBSZWdJbmZvJiByZWdJbmZvID0gbV9z
dGF0ZS5yZXZlcnNlTWFwcGluZ1t0bXBJbmZvLnJlZ107CisgICAgICAgICAgICBpZiAocmVnSW5m
by5pc0xvY2tlZCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB0bXBJbmZv
LnJlZyA9IFJlZygpOworICAgICAgICAgICAgcmVnSW5mby50bXAgPSBUbXAoKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiICAgICAgICAg
S2lsbGluZyAiLCB0bXAsICJcbiIpOworICAgICAgICAKKyAgICAgICAgdG1wSW5mby5oYXNDb25z
dGFudCA9IGZhbHNlOworICAgICAgICB0bXBJbmZvLmhhc1NwaWxsID0gZmFsc2U7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBSZWcgbG9jayhSZWcgcmVnKQorICAgIHsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQocmVnKTsKKyAgICAgICAgYm9vbCYgaXNMb2NrZWQgPSBtX3N0YXRlLnJl
dmVyc2VNYXBwaW5nW3JlZ10uaXNMb2NrZWQ7CisgICAgICAgIGlmICghaXNMb2NrZWQpIHsKKyAg
ICAgICAgICAgIGlzTG9ja2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIG1fbG9ja2VkLmFwcGVuZChy
ZWcpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZWc7CisgICAgfQorCisgICAgdm9pZCB1
bmxvY2soUmVnIHJlZykKKyAgICB7CisgICAgICAgIG1fc3RhdGUucmV2ZXJzZU1hcHBpbmdbcmVn
XS5pc0xvY2tlZCA9IGZhbHNlOworICAgIH0KKworICAgIHZvaWQgdW5sb2NrQWxsKCkKKyAgICB7
CisgICAgICAgIGZvciAoUmVnIHJlZyA6IG1fbG9ja2VkKQorICAgICAgICAgICAgdW5sb2NrKHJl
Zyk7CisgICAgICAgIG1fbG9ja2VkLnJlc2l6ZSgwKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZE1v
dmUoY29uc3QgU2h1ZmZsZVBhaXImIHBhaXIpCisgICAgeworICAgICAgICBtX3NodWZmbGVQYWly
cy5yZW1vdmVBbGxNYXRjaGluZygKKyAgICAgICAgICAgIFsmXSAoY29uc3QgU2h1ZmZsZVBhaXIm
IG90aGVyUGFpcikgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG90aGVyUGFpci5k
c3QoKSA9PSBwYWlyLmRzdCgpOworICAgICAgICAgICAgfSk7CisgICAgICAgIGZvciAoU2h1ZmZs
ZVBhaXImIG90aGVyUGFpciA6IG1fc2h1ZmZsZVBhaXJzKSB7CisgICAgICAgICAgICBpZiAob3Ro
ZXJQYWlyLmRzdCgpID09IHBhaXIuc3JjKCkpIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChvdGhlclBhaXIud2lkdGgoKSA9PSBwYWlyLndpZHRoKCkpOworICAgICAgICAgICAgICAg
IG1fc2h1ZmZsZVBhaXJzLmFwcGVuZChTaHVmZmxlUGFpcihvdGhlclBhaXIuc3JjKCksIHBhaXIu
ZHN0KCksIHBhaXIud2lkdGgoKSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBtX3NodWZmbGVQYWlycy5hcHBlbmQocGFpcik7Cisg
ICAgfQorCisgICAgdm9pZCBlbWl0U2h1ZmZsZSh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAg
ICAgIGlmIChtX3NodWZmbGVQYWlycy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydChpbmRleCwgY3JlYXRlU2h1ZmZsZShtX2Jsb2Nr
LT5hdChpbmRleCkub3JpZ2luLCBtX3NodWZmbGVQYWlycykpOworICAgICAgICBtX3NodWZmbGVQ
YWlycy5yZXNpemUoMCk7CisgICAgfQorCisgICAgQXJnOjpXaWR0aCB3aWR0aChTdGFja1Nsb3Qq
IHNsb3QpCisgICAgeworICAgICAgICByZXR1cm4gQXJnOjp3aWR0aEZvckJ5dGVzKHNsb3QtPmJ5
dGVTaXplKCkpOworICAgIH0KKworICAgIC8vIFdlIG1heSBjaG9vc2UgdG8gZG8gYSBmdWxsd2lk
dGggZGVmIG9yIHVzZSBvbiBhIHN1YndpZHRoIHNwaWxsIHNsb3QuIFdoZW4gdGhpcyBoYXBwZW5z
LCB3ZQorICAgIC8vIG5lZWQgdG8gaW5jcmVhc2UgdGhlIHdpZHRoIG9mIHRoZSBzbG90LiBOb3Rl
IHRoYXQgd2UgcmVseSBvbiBzcGlsbCBzbG90cyBoYXZpbmcgWkRlZgorICAgIC8vIHNlbWFudGlj
cy4KKyAgICB2b2lkIGVuc3VyZVdpZHRoKFN0YWNrU2xvdCogc2xvdCwgQXJnOjpXaWR0aCB3aWR0
aCkKKyAgICB7CisgICAgICAgIHNsb3QtPmVuc3VyZVNpemUoQXJnOjpieXRlcyh3aWR0aCkpOwor
ICAgIH0KKyAgICAKKyAgICBTdGFja1Nsb3QqIHNwaWxsU2xvdChUbXAgdG1wKQorICAgIHsKKyAg
ICAgICAgU3RhY2tTbG90KiYgcmVzdWx0ID0gbV9zcGlsbFNsb3RzLmFkZCh0bXAsIG51bGxwdHIp
Lml0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgICAgIHJl
c3VsdCA9IG1fY29kZS5hZGRTdGFja1Nsb3QoCisgICAgICAgICAgICAgICAgbV90bXBXaWR0aC53
aWR0aCh0bXApIDw9IEFyZzo6V2lkdGgzMiA/IDQgOiA4LAorICAgICAgICAgICAgICAgIFN0YWNr
U2xvdEtpbmQ6OkFub255bW91cyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBjbGFzcyBSZWdNYXAg
eworICAgIHB1YmxpYzoKKyAgICAgICAgUmVnTWFwKCkKKyAgICAgICAgeworICAgICAgICAgICAg
c3dpdGNoICh0eXBlKSB7CisgICAgICAgICAgICBjYXNlIEFyZzo6R1A6CisgICAgICAgICAgICAg
ICAgbV92ZWN0b3IuZmlsbChUKCksIE1hY3JvQXNzZW1ibGVyOjpudW1iZXJPZlJlZ2lzdGVycygp
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXJnOjpGUDoKKyAg
ICAgICAgICAgICAgICBtX3ZlY3Rvci5maWxsKFQoKSwgTWFjcm9Bc3NlbWJsZXI6Om51bWJlck9m
RlBSZWdpc3RlcnMoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBUJiBvcGVyYXRvcltdKFJlZyByZWcpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICAgICAgY2FzZSBBcmc6OkdQOgorICAg
ICAgICAgICAgICAgIHJldHVybiBtX3ZlY3RvcltNYWNyb0Fzc2VtYmxlcjo6cmVnaXN0ZXJJbmRl
eChyZWcuZ3ByKCkpXTsKKyAgICAgICAgICAgIGNhc2UgQXJnOjpGUDoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbV92ZWN0b3JbTWFjcm9Bc3NlbWJsZXI6OmZwUmVnaXN0ZXJJbmRleChyZWcuZnBy
KCkpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICBwcml2YXRlOgor
ICAgICAgICBWZWN0b3I8VD4gbV92ZWN0b3I7CisgICAgfTsKKworICAgIHN0cnVjdCBTdGF0ZSB7
CisgICAgICAgIEhhc2hNYXA8VG1wLCBUbXBJbmZvPiBtYXBwaW5nOyAvLyBJZiB0aGUgb3JpZ2lu
YWwgcHJvZ3JhbSBhc2tzIGZvciB0aGlzIHRtcCwgd2hlcmUgaXMgaXQ/CisgICAgICAgIFJlZ01h
cDxSZWdJbmZvPiByZXZlcnNlTWFwcGluZzsgLy8gV2hhdCB0bXAgZG9lcyB0aGlzIHJlZ2lzdGVy
IGhvbGQgcmlnaHQgbm93PworICAgICAgICBib29sIHZpc2l0ZWRCeVByb3BhZ2F0aW9uIHsgZmFs
c2UgfTsKKyAgICAgICAgYm9vbCBpc1NldHRsZWQgeyBmYWxzZSB9OworICAgIH07CisKKyAgICBl
bnVtIERlYXRoTW9kZSB7CisgICAgICAgIEVhcmx5RGVhdGgsCisgICAgICAgIExhdGVEZWF0aAor
ICAgIH07CisKKyAgICBzdHJ1Y3QgRGVhdGggeworICAgICAgICBEZWF0aCgpCisgICAgICAgIHsK
KyAgICAgICAgfQorCisgICAgICAgIERlYXRoKFRtcCB0bXAsIERlYXRoTW9kZSBkZWF0aE1vZGUp
CisgICAgICAgICAgICA6IHRtcCh0bXApCisgICAgICAgICAgICAsIGRlYXRoTW9kZShkZWF0aE1v
ZGUpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgVG1wIHRtcDsKKyAg
ICAgICAgRGVhdGhNb2RlIGRlYXRoTW9kZSB7IEVhcmx5RGVhdGggfTsKKyAgICB9OworICAgIAor
ICAgIENvZGUmIG1fY29kZTsKKyAgICBUbXBMaXZlbmVzczx0eXBlPiBtX2xpdmVuZXNzOworICAg
IEluc3RNYXA8VmVjdG9yPERlYXRoPj4gbV9kZWF0aHM7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9j
aywgU3RhdGU+IG1fYXRIZWFkOworICAgIFN0YXRlIG1fc3RhdGU7CisgICAgVmVjdG9yPFJlZz4g
bV9sb2NrZWQ7CisgICAgVXNlQ291bnRzPFRtcD4gbV91c2VDb3VudHM7CisgICAgVG1wV2lkdGgg
bV90bXBXaWR0aDsKKyAgICBIYXNoTWFwPFRtcCwgU3RhY2tTbG90Kj4gbV9zcGlsbFNsb3RzOwor
ICAgIEJhc2ljQmxvY2sqIG1fYmxvY2sgeyBudWxscHRyIH07CisgICAgdW5zaWduZWQgbV9pbnN0
SW5kZXggeyAwIH07CisgICAgVmVjdG9yPFNodWZmbGVQYWlyPiBtX3NodWZmbGVQYWlyczsKKyAg
ICBJbnNlcnRpb25TZXQgbV9pbnNlcnRpb25TZXQ7CisgICAgYm9vbCBtX2NoYW5nZWQgeyBmYWxz
ZSB9OworfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgc2NhdmVuZ2VSZWdp
c3RlcnMoQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgInNj
YXZlbmdlUmVnaXN0ZXJzIik7CisKKyAgICBicmVha0NyaXRpY2FsRWRnZXMoY29kZSk7CisKKyAg
ICB7CisgICAgICAgIFNjYXZlbmdlUmVnaXN0ZXJzPEFyZzo6RlA+IHNjYXZlbmdlUmVnaXN0ZXJz
KGNvZGUpOworICAgICAgICBzY2F2ZW5nZVJlZ2lzdGVycy5ydW4oKTsKKyAgICB9CisgICAgewor
ICAgICAgICBTY2F2ZW5nZVJlZ2lzdGVyczxBcmc6OkdQPiBzY2F2ZW5nZVJlZ2lzdGVycyhjb2Rl
KTsKKyAgICAgICAgc2NhdmVuZ2VSZWdpc3RlcnMucnVuKCk7CisgICAgfQorfQorCit9IH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNjYXZlbmdlUmVnaXN0ZXJzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTY2F2ZW5nZVJl
Z2lzdGVycy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJTY2F2ZW5nZVJlZ2lzdGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEFpclNj
YXZlbmdlUmVnaXN0ZXJzX2gKKyNkZWZpbmUgQWlyU2NhdmVuZ2VSZWdpc3RlcnNfaAorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFj
ZSBBaXIgeworCitjbGFzcyBDb2RlOworCisvLyBUaGlzIGFsbG9jYXRlcyB0ZW1wb3JhcmllcyB0
byByZWdpc3RlcnMgb3Igc3RhY2sgbG9jYXRpb25zIGJhc2VkIG9uIGZvcndhcmQgZmxvdy4gSXQg
d2lsbCBoYXBwaWx5CisvLyBjaGFuZ2UgdGhlIGxvY2F0aW9uIG9mIGEgdGVtcG9yYXJ5IGluIGNh
c2UgdGhlIHJlZ2lzdGVyIGl0IGhhZCBwaWNrZWQgYmVjb21lcyB1bmF2YWlsYWJsZSBvciBpbgor
Ly8gY2FzZSB3ZSBuZWVkIHRoZSB2YWx1ZSBhbmQgaXQncyBjdXJyZW50bHkgb24gdGhlIHN0YWNr
LiBJdCBhbHNvIHBlcmZvcm1zIG1hdGVyaWFsaXphdGlvbiBvZgorLy8gY29uc3RhbnRzOiBpZiBh
IHRlbXBvcmFyeSdzIHZhbHVlIGlzIGFsd2F5cyBhIGNvbnN0YW50IHRoZW4gaW5zdGVhZCBvZiBz
cGlsbGluZyB3ZSB3aWxsIHNpbXBseQorLy8gcmVtYXRlcmlhbGl6ZS4KKy8vCisvLyBUaGlzIHBo
YXNlIGlzIG1lYW50IHRvIHJ1biBhZnRlciB0aGUgcHJpbWFyeSByZWdpc3RlciBhbGxvY2F0b3Iu
IFRoZSBwcmltYXJ5IHJlZ2lzdGVyIGFsbG9jYXRvcgorLy8gaXMgYmVzdCBvZmYgaGFuZGxpbmcg
c3BpbGxzIGJ5IHNpbXBseSBsZWF2aW5nIHNwaWxsZWQgVG1wcyBhbG9uZS4gVGhpcyBwaGFzZSB3
aWxsIGVtaXQgcHJvcGVyCisvLyBzcGlsbCBjb2RlLCBhbmQgaXQgd2lsbCBkbyBpdCBtb3JlIGVm
ZmljaWVudGx5IHRoYW4gY2xhc3NpY2FsIHNwaWxsaW5nIGFsZ29yaXRobXMuCit2b2lkIHNjYXZl
bmdlUmVnaXN0ZXJzKENvZGUmKTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpclNjYXZlbmdlUmVnaXN0
ZXJzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5
dGhpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
U3BpbGxFdmVyeXRoaW5nLmNwcAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw3ICsyOSw2IEBACiAjaWYgRU5BQkxFKEIzX0pJVCkKIAogI2luY2x1ZGUgIkFpckNvZGUuaCIK
LSNpbmNsdWRlICJBaXJGaXhTcGlsbFNsb3RaRGVmLmgiCiAjaW5jbHVkZSAiQWlySW5zZXJ0aW9u
U2V0LmgiCiAjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKICNpbmNsdWRlICJBaXJMaXZlbmVz
cy5oIgpAQCAtODQsNyArODMsNiBAQCB2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJiBjb2RlKQog
CiAgICAgLy8gQWxsb2NhdGUgYSBzdGFjayBzbG90IGZvciBlYWNoIHRtcC4KICAgICBWZWN0b3I8
U3RhY2tTbG90Kj4gYWxsU3RhY2tTbG90c1tBcmc6Om51bVR5cGVzXTsKLSAgICB1bnNpZ25lZCBu
ZXdTdGFja1Nsb3RUaHJlc2hvbGQgPSBjb2RlLnN0YWNrU2xvdHMoKS5zaXplKCk7CiAgICAgZm9y
ICh1bnNpZ25lZCB0eXBlSW5kZXggPSAwOyB0eXBlSW5kZXggPCBBcmc6Om51bVR5cGVzOyArK3R5
cGVJbmRleCkgewogICAgICAgICBWZWN0b3I8U3RhY2tTbG90Kj4mIHN0YWNrU2xvdHMgPSBhbGxT
dGFja1Nsb3RzW3R5cGVJbmRleF07CiAgICAgICAgIEFyZzo6VHlwZSB0eXBlID0gc3RhdGljX2Nh
c3Q8QXJnOjpUeXBlPih0eXBlSW5kZXgpOwpAQCAtMTMwLDcgKzEyOCw2IEBAIHZvaWQgc3BpbGxF
dmVyeXRoaW5nKENvZGUmIGNvZGUpCiAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocm9sZSkg
ewogICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6VXNlOgogICAgICAgICAgICAgICAgICAg
ICBjYXNlIEFyZzo6Q29sZFVzZToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkVhcmx5
RGVmOgogICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogcmVnc0luUHJpb3Jp
dHlPcmRlcih0eXBlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2V0QmVm
b3JlLmdldChyZWcpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEJlZm9y
ZS5zZXQocmVnKTsKQEAgLTE1NCw2ICsxNTEsNyBAQCB2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2Rl
JiBjb2RlKQogICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6TGF0ZVVzZToKICAgICAgICAg
ICAgICAgICAgICAgY2FzZSBBcmc6OkxhdGVDb2xkVXNlOgogICAgICAgICAgICAgICAgICAgICBj
YXNlIEFyZzo6U2NyYXRjaDoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkVhcmx5RGVm
OgogICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogcmVnc0luUHJpb3JpdHlP
cmRlcih0eXBlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2V0QmVmb3Jl
LmdldChyZWcpICYmICFzZXRBZnRlci5nZXQocmVnKSkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZXRBZnRlci5zZXQocmVnKTsKQEAgLTE4MiwxMiArMTgwLDYgQEAgdm9pZCBz
cGlsbEV2ZXJ5dGhpbmcoQ29kZSYgY29kZSkKICAgICAgICAgfQogICAgICAgICBpbnNlcnRpb25T
ZXQuZXhlY3V0ZShibG9jayk7CiAgICAgfQotCi0gICAgZml4U3BpbGxTbG90WkRlZigKLSAgICAg
ICAgY29kZSwKLSAgICAgICAgWyZdIChTdGFja1Nsb3QqIHN0YWNrU2xvdCkgLT4gYm9vbCB7Ci0g
ICAgICAgICAgICByZXR1cm4gc3RhY2tTbG90LT5pbmRleCgpID49IG5ld1N0YWNrU2xvdFRocmVz
aG9sZDsKLSAgICAgICAgfSk7CiB9CiAKIH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuaAkocmV2
aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Ns
b3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsMTIgQEAgcHVibGljOgogICAgIGJvb2wg
aXNMb2NrZWQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQgPT0gU3RhY2tTbG90S2luZDo6TG9ja2Vk
OyB9CiAgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CiAKKyAg
ICB2b2lkIGVuc3VyZVNpemUodW5zaWduZWQgcmVxdWVzdGVkU2l6ZSkKKyAgICB7CisgICAgICAg
IEFTU0VSVCghbV9vZmZzZXRGcm9tRlApOworICAgICAgICBtX2J5dGVTaXplID0gc3RkOjptYXgo
bV9ieXRlU2l6ZSwgcmVxdWVzdGVkU2l6ZSk7CisgICAgfQorCiAgICAgdW5zaWduZWQgYWxpZ25t
ZW50KCkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChieXRlU2l6ZSgpIDw9IDEpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZhbGlkYXRlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZhbGlkYXRlLmNwcAkocmV2aXNpb24g
MTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJWYWxpZGF0ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTgyLDYgKzgyLDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICAgICAgVkFMSURBVEUoaXNUZXJtaW5hbChpbnN0Lm9wY29kZSksICgiQXQgIiwgaW5zdCwgIiBp
biAiLCAqYmxvY2spKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAg
IFZBTElEQVRFKCFpc1Rlcm1pbmFsKGluc3Qub3Bjb2RlKSwgKCJBdCAiLCBpbnN0LCAiIGluICIs
ICpibG9jaykpOworCisgICAgICAgICAgICAgICAgLy8gZm9yRWFjaEFyZyBtdXN0IHJldHVybiBB
cmcmJ3MgdGhhdCBwb2ludCBpbnRvIHRoZSBhcmdzIGFycmF5LgorICAgICAgICAgICAgICAgIGlu
c3QuZm9yRWFjaEFyZygKKyAgICAgICAgICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpS
b2xlLCBBcmc6OlR5cGUsIEFyZzo6V2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZB
TElEQVRFKCZhcmcgPj0gJmluc3QuYXJnc1swXSwgKCJBdCAiLCBhcmcsICIgaW4gIiwgaW5zdCwg
IiBpbiAiLCAqYmxvY2spKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKCZhcmcg
PD0gJmluc3QuYXJncy5sYXN0KCksICgiQXQgIiwgYXJnLCAiIGluICIsIGluc3QsICIgaW4gIiwg
KmJsb2NrKSk7CisgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29yQmxvY2tz
KCkpCiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsaWRCbG9ja3MuY29udGFpbnMoc3VjY2Vz
c29yKSwgKCJJbiAiLCAqYmxvY2spKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b21tb24uaAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CiAvLyBXZSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbiBleHBlcmlt
ZW50YWwgdHJhbnNpdGlvbiBmcm9tIExMVk0gdG8gQjMgYXMgdGhlIGJhY2tlbmQgZm9yIHRoZSBG
VEwuIFdlIGRvbid0CiAvLyB5ZXQga25vdyBob3cgaXQgd2lsbCB0dXJuIG91dC4gRm9yIG5vdywg
dGhpcyBmbGFnIHdpbGwgY29udHJvbCB3aGV0aGVyIEZUTCB1c2VzIEIzLiBSZW1lbWJlciB0byBz
ZXQgdGhpcwogLy8gdG8gMCBiZWZvcmUgY29tbWl0dGluZyEKLSNkZWZpbmUgRlRMX1VTRVNfQjMg
MAorI2RlZmluZSBGVExfVVNFU19CMyAxCiAKIHN0cnVjdCBOb2RlOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2
LDcgKzY2LDcgQEAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAogICAgIGlm
ICghT3B0aW9uczo6Ynl0ZWNvZGVSYW5nZVRvREZHQ29tcGlsZSgpLmlzSW5SYW5nZShjb2RlQmxv
Y2stPmluc3RydWN0aW9uQ291bnQoKSkKICAgICAgICAgfHwgIUZ1bmN0aW9uV2hpdGVsaXN0Ojpl
bnN1cmVHbG9iYWxXaGl0ZWxpc3QoKS5jb250YWlucyhjb2RlQmxvY2spKQogICAgICAgICByZXR1
cm4gQ29tcGlsYXRpb25GYWlsZWQ7Ci0gICAgCisKICAgICBudW1Db21waWxhdGlvbnMrKzsKICAg
ICAKICAgICBBU1NFUlQoY29kZUJsb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQjNDb21waWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEIzQ29tcGlsZS5jcHAJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMQjNDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgs
NyBAQAogCiAjaWYgRU5BQkxFKEZUTF9KSVQpICYmIEZUTF9VU0VTX0IzCiAKKyNpbmNsdWRlICJB
aXJDb2RlLmgiCiAjaW5jbHVkZSAiQjNHZW5lcmF0ZS5oIgogI2luY2x1ZGUgIkIzUHJvY2VkdXJl
SW5saW5lcy5oIgogI2luY2x1ZGUgIkIzU3RhY2tTbG90VmFsdWUuaCIKQEAgLTU3LDcgKzU4LDcg
QEAgdm9pZCBjb21waWxlKFN0YXRlJiBzdGF0ZSwgU2FmZXBvaW50OjpSZQogICAgIEdyYXBoJiBn
cmFwaCA9IHN0YXRlLmdyYXBoOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZ3JhcGgubV9j
b2RlQmxvY2s7CiAgICAgVk0mIHZtID0gZ3JhcGgubV92bTsKLSAgICAKKwogICAgIHsKICAgICAg
ICAgR3JhcGhTYWZlcG9pbnQgc2FmZXBvaW50KHN0YXRlLmdyYXBoLCBzYWZlcG9pbnRSZXN1bHQp
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9M
TFZNLmNwcAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NTgsOCArMTg1OCw4IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIG1fb3V0Lm5vdFplcm8zMihyZXN1bHQpLCB1
c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJhcmVseShzbG93Q2FzZSkpOwogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8o
c2xvd0Nhc2UsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAgICAgTFZhbHVlIGNvbmQgPSBt
X291dC5iaXRPcihtX291dC5sZXNzVGhhbihsZWZ0LCBtX291dC5pbnQzMlplcm8pLCBtX291dC5s
ZXNzVGhhbihyaWdodCwgbV9vdXQuaW50MzJaZXJvKSk7Ci0gICAgICAgICAgICAgICAgc3BlY3Vs
YXRlKE5lZ2F0aXZlWmVybywgbm9WYWx1ZSgpLCAwLCBjb25kKTsKKyAgICAgICAgICAgICAgICBz
cGVjdWxhdGUoTmVnYXRpdmVaZXJvLCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0Lmxlc3NUaGFu
KGxlZnQsIG1fb3V0LmludDMyWmVybykpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShOZWdh
dGl2ZVplcm8sIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQubGVzc1RoYW4ocmlnaHQsIG1fb3V0
LmludDMyWmVybykpOwogICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
ICAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsK
ICAgICAgICAgICAgIH0KQEAgLTE4OTAsOCArMTg5MCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgICAgIG1fb3V0Lm5vdFplcm82NChyZXN1bHQpLCB1c3VhbGx5KGNvbnRpbnVhdGlvbiks
IHJhcmVseShzbG93Q2FzZSkpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIExC
YXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlv
bik7Ci0gICAgICAgICAgICAgICAgTFZhbHVlIGNvbmQgPSBtX291dC5iaXRPcihtX291dC5sZXNz
VGhhbihsZWZ0LCBtX291dC5pbnQ2NFplcm8pLCBtX291dC5sZXNzVGhhbihyaWdodCwgbV9vdXQu
aW50NjRaZXJvKSk7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRlKE5lZ2F0aXZlWmVybywgbm9W
YWx1ZSgpLCAwLCBjb25kKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoTmVnYXRpdmVaZXJv
LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0Lmxlc3NUaGFuKGxlZnQsIG1fb3V0LmludDY0WmVy
bykpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShOZWdhdGl2ZVplcm8sIG5vVmFsdWUoKSwg
bnVsbHB0ciwgbV9vdXQubGVzc1RoYW4ocmlnaHQsIG1fb3V0LmludDY0WmVybykpOwogICAgICAg
ICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgICAgICAgICBtX291
dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKICAgICAgICAgICAgIH0KQEAgLTE5
NTcsOCArMTk1Nyw4IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBs
YXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHVuc2FmZURlbm9taW5hdG9yLCBjb250aW51YXRpb24p
OwogICAgICAgICAgICAgICAgIExWYWx1ZSBuZWcyVG9UaGUzMSA9IG1fb3V0LmNvbnN0SW50MzIo
LTIxNDc0ODM2NDctMSk7Ci0gICAgICAgICAgICAgICAgTFZhbHVlIGNvbmQgPSBtX291dC5iaXRP
cihtX291dC5pc1plcm8zMihkZW5vbWluYXRvciksIG1fb3V0LmVxdWFsKG51bWVyYXRvciwgbmVn
MlRvVGhlMzEpKTsKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIG5vVmFsdWUo
KSwgMCwgY29uZCk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCBub1ZhbHVl
KCksIG51bGxwdHIsIG1fb3V0LmlzWmVybzMyKGRlbm9taW5hdG9yKSk7CisgICAgICAgICAgICAg
ICAgc3BlY3VsYXRlKE92ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0LmVxdWFsKG51
bWVyYXRvciwgbmVnMlRvVGhlMzEpKTsKICAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7CiAKICAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24s
IGxhc3ROZXh0KTsKQEAgLTIwMTMsOCArMjAxMyw4IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAg
ICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHVuc2FmZURlbm9taW5h
dG9yLCBjb250aW51YXRpb24pOwogICAgICAgICAgICAgICAgIExWYWx1ZSBuZWcyVG9UaGUzMSA9
IG1fb3V0LmNvbnN0SW50MzIoLTIxNDc0ODM2NDctMSk7Ci0gICAgICAgICAgICAgICAgTFZhbHVl
IGNvbmQgPSBtX291dC5iaXRPcihtX291dC5pc1plcm8zMihkZW5vbWluYXRvciksIG1fb3V0LmVx
dWFsKG51bWVyYXRvciwgbmVnMlRvVGhlMzEpKTsKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGUo
T3ZlcmZsb3csIG5vVmFsdWUoKSwgMCwgY29uZCk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRl
KE92ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0LmlzWmVybzMyKGRlbm9taW5hdG9y
KSk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCBub1ZhbHVlKCksIG51bGxw
dHIsIG1fb3V0LmVxdWFsKG51bWVyYXRvciwgbmVnMlRvVGhlMzEpKTsKICAgICAgICAgICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAgICAgICAgICBtX291dC5hcHBl
bmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVnaXN0ZXJTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1JlZ2lzdGVyU2V0LmgJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtOTEsNiArOTEsMTMgQEAg
cHVibGljOgogICAgICAgICBBU1NFUlQoISFyZWcpOwogICAgICAgICByZXR1cm4gbV92ZWN0b3Iu
Z2V0KHJlZy5pbmRleCgpKTsKICAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYWJs
ZT4KKyAgICB2b2lkIHNldEFsbChjb25zdCBJdGVyYWJsZSYgaXRlcmFibGUpCisgICAgeworICAg
ICAgICBmb3IgKFJlZyByZWcgOiBpdGVyYWJsZSkKKyAgICAgICAgICAgIHNldChyZWcpOworICAg
IH0KICAgICAKICAgICB2b2lkIG1lcmdlKGNvbnN0IFJlZ2lzdGVyU2V0JiBvdGhlcikgeyBtX3Zl
Y3Rvci5tZXJnZShvdGhlci5tX3ZlY3Rvcik7IH0KICAgICB2b2lkIGZpbHRlcihjb25zdCBSZWdp
c3RlclNldCYgb3RoZXIpIHsgbV92ZWN0b3IuZmlsdGVyKG90aGVyLm1fdmVjdG9yKTsgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMTk1MTc2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNDMsNiArMzQzLDggQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7
CiAgICAgdihib29sLCBsb2dCM1BoYXNlVGltZXMsIGZhbHNlLCBudWxscHRyKSBcCiAgICAgdihk
b3VibGUsIHJhcmVCbG9ja1BlbmFsdHksIDAuMDAxLCBudWxscHRyKSBcCiAgICAgdihib29sLCBh
aXJTcGlsbHNFdmVyeXRoaW5nLCBmYWxzZSwgbnVsbHB0cikgXAorICAgIHYoYm9vbCwgYWlyVXNl
c1JDUlMsIGZhbHNlLCBudWxscHRyKSBcCisgICAgdihib29sLCBsb2dBaXJSZWdpc3RlclByZXNz
dXJlLCBmYWxzZSwgbnVsbHB0cikgXAogICAgIFwKICAgICB2KGJvb2wsIHVzZURvbGxhclZNLCBm
YWxzZSwgImluc3RhbGxzIHRoZSAkdm0gZGVidWdnaW5nIHRvb2wgaW4gZ2xvYmFsIG9iamVjdHMi
KSBcCiAgICAgdihvcHRpb25TdHJpbmcsIGZ1bmN0aW9uT3ZlcnJpZGVzLCBudWxscHRyLCAiZmls
ZSB3aXRoIGRlYnVnZ2luZyBvdmVycmlkZXMgZm9yIGZ1bmN0aW9uIGJvZGllcyIpIFwKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL0luZGV4U3BhcnNlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvSW5kZXhTcGFyc2VTZXQuaAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL1dURi93
dGYvSW5kZXhTcGFyc2VTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsOCArNDcsOCBAQCBjbGFz
cyBJbmRleFNwYXJzZVNldCB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgSW5kZXhTcGFyc2VTZXQo
dW5zaWduZWQgbWF4VmFsdWUpOwogCi0gICAgdm9pZCBhZGQodW5zaWduZWQpOwotICAgIHZvaWQg
cmVtb3ZlKHVuc2lnbmVkKTsKKyAgICBib29sIGFkZCh1bnNpZ25lZCk7CisgICAgYm9vbCByZW1v
dmUodW5zaWduZWQpOwogICAgIHZvaWQgY2xlYXIoKTsKIAogICAgIHVuc2lnbmVkIHNpemUoKSBj
b25zdDsKQEAgLTcxLDI5ICs3MSwzMyBAQCBpbmxpbmUgSW5kZXhTcGFyc2VTZXQ8T3ZlcmZsb3dI
YW5kbGVyPjo6CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KLWlubGlu
ZSB2b2lkIEluZGV4U3BhcnNlU2V0PE92ZXJmbG93SGFuZGxlcj46OmFkZCh1bnNpZ25lZCB2YWx1
ZSkKK2lubGluZSBib29sIEluZGV4U3BhcnNlU2V0PE92ZXJmbG93SGFuZGxlcj46OmFkZCh1bnNp
Z25lZCB2YWx1ZSkKIHsKICAgICBpZiAoY29udGFpbnModmFsdWUpKQotICAgICAgICByZXR1cm47
CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHVuc2lnbmVkIG5ld1Bvc2l0aW9uID0gbV92
YWx1ZXMuc2l6ZSgpOwogICAgIG1fdmFsdWVzLmFwcGVuZCh2YWx1ZSk7CiAgICAgbV9tYXBbdmFs
dWVdID0gbmV3UG9zaXRpb247CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIE92ZXJmbG93SGFuZGxlcj4KLWlubGluZSB2b2lkIEluZGV4U3BhcnNlU2V0PE92ZXJmbG93
SGFuZGxlcj46OnJlbW92ZSh1bnNpZ25lZCB2YWx1ZSkKK2lubGluZSBib29sIEluZGV4U3BhcnNl
U2V0PE92ZXJmbG93SGFuZGxlcj46OnJlbW92ZSh1bnNpZ25lZCB2YWx1ZSkKIHsKICAgICB1bnNp
Z25lZCBwb3NpdGlvbiA9IG1fbWFwW3ZhbHVlXTsKICAgICBpZiAocG9zaXRpb24gPj0gbV92YWx1
ZXMuc2l6ZSgpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IGlmIChtX3ZhbHVlc1twb3NpdGlvbl0gPT0gdmFsdWUpIHsKICAgICAgICAgdW5zaWduZWQgbGFz
dFZhbHVlID0gbV92YWx1ZXMubGFzdCgpOwogICAgICAgICBtX3ZhbHVlc1twb3NpdGlvbl0gPSBs
YXN0VmFsdWU7CiAgICAgICAgIG1fbWFwW2xhc3RWYWx1ZV0gPSBwb3NpdGlvbjsKICAgICAgICAg
bV92YWx1ZXMucmVtb3ZlTGFzdCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CisKKyAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4K
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL1N0cmluZ1ByaW50U3RyZWFtLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvU3RyaW5nUHJpbnRTdHJlYW0uaAkocmV2aXNpb24gMTk1MTc2KQorKysg
U291cmNlL1dURi93dGYvU3RyaW5nUHJpbnRTdHJlYW0uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsNiAr
MzgsOCBAQCBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgflN0cmluZ1By
aW50U3RyZWFtKCk7CiAgICAgCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgdm9pZCB2
cHJpbnRmKGNvbnN0IGNoYXIqIGZvcm1hdCwgdmFfbGlzdCkgb3ZlcnJpZGUgV1RGX0FUVFJJQlVU
RV9QUklOVEYoMiwgMCk7CisKKyAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9u
ZXh0OyB9CiAgICAgCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIENTdHJpbmcgdG9DU3RyaW5nKCk7
CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyB0b1N0cmluZygpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269194</attachid>
            <date>2016-01-17 12:27:36 -0800</date>
            <delta_ts>2016-01-17 13:08:45 -0800</delta_ts>
            <desc>things</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>155021</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTUxNzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzc5LDcgKzM3OSw5IEBACiAJCTBGNDkzQUZBMTZEMENB
RDMwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ5M0FGODE2RDBDQUQxMDA4NDUwOEIgLyogU291cmNl
UHJvdmlkZXIuY3BwICovOyB9OwogCQkwRjRCOTREQzE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRB
cnJheUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNEI5NERCMTdCOUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNEM5MTY2MUMy
OUY0RjIwMDQzNDFBNiAvKiBCM09yaWdpbkR1bXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEM5MTY1MUMyOUY0RjIwMDQzNDFBNiAvKiBCM09yaWdp
bkR1bXAuaCAqLzsgfTsKLQkJMEY0QzkxNjgxQzJCM0Q2ODAwNDM0MUE2IC8qIEFpckZpeFNwaWxs
U2xvdFpEZWYuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNEM5MTY3MUMyQjNENjgwMDQzNDFBNiAvKiBBaXJGaXhTcGlsbFNsb3RaRGVmLmggKi87IH07
CisJCTBGNERFMUNCMUM0QjYwQjgwMDRENkMxMSAvKiBBaXJMaXZlbmVzcy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRERTFDQTFDNEI2MEI4MDA0
RDZDMTEgLyogQWlyTGl2ZW5lc3MuY3BwICovOyB9OworCQkwRjRERTFDRTFDNEMxQjU0MDA0RDZD
MTEgLyogQWlyRml4T2J2aW91c1NwaWxscy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRERTFDQzFDNEMxQjU0MDA0RDZDMTEgLyogQWlyRml4T2J2
aW91c1NwaWxscy5jcHAgKi87IH07CisJCTBGNERFMUNGMUM0QzFCNTQwMDRENkMxMSAvKiBBaXJG
aXhPYnZpb3VzU3BpbGxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjRERTFDRDFDNEMxQjU0MDA0RDZDMTEgLyogQWlyRml4T2J2aW91c1NwaWxscy5o
ICovOyB9OwogCQkwRjRGMjlERjE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9u
Q291bnRFc3RpbWF0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0RjI5REQxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1
dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcCAqLzsgfTsKIAkJMEY0RjI5RTAxOEI2QUQxQzAw
NTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRGMjlERTE4QjZBRDFD
MDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCAqLzsg
fTsKIAkJMEY1MEFGM0MxOTNFOEIzOTAwNjc0RUU4IC8qIERGR1N0cnVjdHVyZUNsb2JiZXJTdGF0
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1MEFG
M0IxOTNFOEIzOTAwNjc0RUU4IC8qIERGR1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oICovOyB9OwpA
QCAtNzI0LDYgKzcyNiwxNCBAQAogCQkwRkUyMjhFRTE0MzZBQjJDMDAxOTZDNDggLyogT3B0aW9u
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUy
MjhFQTE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5jcHAgKi87IH07CiAJCTBGRTI1NEY2MUFC
REREMjIwMEE3QzZEMiAvKiBERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTI1NEY0MUFCREREMjIwMEE3
QzZEMiAvKiBERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcCAqLzsgfTsKIAkJMEZFMjU0Rjcx
QUJEREQyMjAwQTdDNkQyIC8qIERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTI1NEY1MUFCREREMjIwMEE3
QzZEMiAvKiBERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmggKi87IH07CisJCTBGRTM0QzExMUM0
QjEwOTYwMDAzQTUxMiAvKiBBaXJCbG9ja0luc2VydGlvblNldC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUzNEMwQjFDNEIxMDk2MDAwM0E1MTIg
LyogQWlyQmxvY2tJbnNlcnRpb25TZXQuY3BwICovOyB9OworCQkwRkUzNEMxMjFDNEIxMDk2MDAw
M0E1MTIgLyogQWlyQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTM0QzBDMUM0QjEwOTYwMDAzQTUxMiAvKiBBaXJCbG9j
a0luc2VydGlvblNldC5oICovOyB9OworCQkwRkUzNEMxMzFDNEIxMDk2MDAwM0E1MTIgLyogQWly
QnJlYWtDcml0aWNhbEVkZ2VzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRTM0QzBEMUM0QjEwOTYwMDAzQTUxMiAvKiBBaXJCcmVha0NyaXRpY2Fs
RWRnZXMuY3BwICovOyB9OworCQkwRkUzNEMxNDFDNEIxMDk2MDAwM0E1MTIgLyogQWlyQnJlYWtD
cml0aWNhbEVkZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkUzNEMwRTFDNEIxMDk2MDAwM0E1MTIgLyogQWlyQnJlYWtDcml0aWNhbEVkZ2VzLmgg
Ki87IH07CisJCTBGRTM0QzE1MUM0QjEwOTYwMDAzQTUxMiAvKiBBaXJTY2F2ZW5nZVJlZ2lzdGVy
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUz
NEMwRjFDNEIxMDk2MDAwM0E1MTIgLyogQWlyU2NhdmVuZ2VSZWdpc3RlcnMuY3BwICovOyB9Owor
CQkwRkUzNEMxNjFDNEIxMDk2MDAwM0E1MTIgLyogQWlyU2NhdmVuZ2VSZWdpc3RlcnMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTM0QzEwMUM0QjEw
OTYwMDAzQTUxMiAvKiBBaXJTY2F2ZW5nZVJlZ2lzdGVycy5oICovOyB9OworCQkwRkUzNEMxOTFD
NEIzOUFFMDAwM0E1MTIgLyogQWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUzNEMxNzFDNEIzOUFFMDAwM0E1
MTIgLyogQWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5jcHAgKi87IH07CisJCTBGRTM0QzFBMUM0QjM5
QUUwMDAzQTUxMiAvKiBBaXJMb2dSZWdpc3RlclByZXNzdXJlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUzNEMxODFDNEIzOUFFMDAwM0E1MTIgLyog
QWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5oICovOyB9OwogCQkwRkU3MjExRDE5M0I5QzU5MDAzMUY2
RUQgLyogREZHVHJhbnNpdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkU3MjExQjE5M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNpdGlvbi5j
cHAgKi87IH07CiAJCTBGRTcyMTFFMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU3MjExQzE5
M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNpdGlvbi5oICovOyB9OwogCQkwRkU4MzQxNzFBNkVG
OTdCMDBEMDQ4NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFODM0MTUxQTZFRjk3QjAwRDA0
ODQ3IC8qIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcCAqLzsgfTsKQEAgLTI1NDIsNyAr
MjU1Miw5IEBACiAJCTBGNDkzQUY4MTZEMENBRDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTb3VyY2VQcm92aWRlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEI5NERCMTdCOUYwNzUwMEREMDNB
NCAvKiBUeXBlZEFycmF5SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBUeXBlZEFycmF5SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRD
OTE2NTFDMjlGNEYyMDA0MzQxQTYgLyogQjNPcmlnaW5EdW1wLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEIzT3JpZ2luRHVtcC5oOyBwYXRoID0gYjMvQjNPcmlnaW5EdW1wLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNEM5MTY3MUMyQjNENjgwMDQzNDFBNiAv
KiBBaXJGaXhTcGlsbFNsb3RaRGVmLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEFpckZpeFNwaWxsU2xvdFpEZWYuaDsgcGF0aCA9IGIzL2Fpci9BaXJGaXhTcGlsbFNsb3RaRGVm
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNERFMUNBMUM0QjYwQjgwMDRENkMx
MSAvKiBBaXJMaXZlbmVzcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBBaXJMaXZlbmVzcy5jcHA7IHBhdGggPSBiMy9haXIvQWlyTGl2ZW5lc3MuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjRERTFDQzFDNEMxQjU0MDA0RDZDMTEgLyogQWlyRml4
T2J2aW91c1NwaWxscy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBB
aXJGaXhPYnZpb3VzU3BpbGxzLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJGaXhPYnZpb3VzU3BpbGxz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0REUxQ0QxQzRDMUI1NDAwNEQ2
QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQWlyRml4T2J2aW91c1NwaWxscy5oOyBwYXRoID0gYjMvYWlyL0FpckZpeE9idmlvdXNT
cGlsbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0RjI5REQxOEI2QUQxQzAw
NTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50
RXN0aW1hdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdTdGF0aWNFeGVjdXRpb25Db3VudEVz
dGltYXRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEYyOURF
MThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFz
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTdGF0aWNFeGVjdXRpb25D
b3VudEVzdGltYXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR1N0YXRpY0V4ZWN1dGlvbkNvdW50
RXN0aW1hdGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTBBRjNC
MTkzRThCMzkwMDY3NEVFOCAvKiBERkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmg7IHBhdGgg
PSBkZmcvREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0yOTAwLDYgKzI5MTIsMTQgQEAKIAkJMEZFMjI4RUIxNDM2QUIyMzAwMTk2QzQ4IC8q
IE9wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3B0aW9ucy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkUyNTRGNDFBQkRERDIyMDBBN0M2RDIgLyog
REZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdW
YXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZFMjU0RjUxQUJEREQyMjAwQTdDNkQyIC8qIERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFz
ZS5oOyBwYXRoID0gZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFMzRDMEIxQzRCMTA5NjAwMDNBNTEyIC8qIEFpckJsb2NrSW5z
ZXJ0aW9uU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckJs
b2NrSW5zZXJ0aW9uU2V0LmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJCbG9ja0luc2VydGlvblNldC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTM0QzBDMUM0QjEwOTYwMDAzQTUx
MiAvKiBBaXJCbG9ja0luc2VydGlvblNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBBaXJCbG9ja0luc2VydGlvblNldC5oOyBwYXRoID0gYjMvYWlyL0FpckJsb2NrSW5zZXJ0
aW9uU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTM0QzBEMUM0QjEwOTYw
MDAzQTUxMiAvKiBBaXJCcmVha0NyaXRpY2FsRWRnZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gQWlyQnJlYWtDcml0aWNhbEVkZ2VzLmNwcDsgcGF0aCA9IGIzL2Fp
ci9BaXJCcmVha0NyaXRpY2FsRWRnZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkUzNEMwRTFDNEIxMDk2MDAwM0E1MTIgLyogQWlyQnJlYWtDcml0aWNhbEVkZ2VzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckJyZWFrQ3JpdGljYWxFZGdlcy5oOyBw
YXRoID0gYjMvYWlyL0FpckJyZWFrQ3JpdGljYWxFZGdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkUzNEMwRjFDNEIxMDk2MDAwM0E1MTIgLyogQWlyU2NhdmVuZ2VSZWdpc3Rl
cnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyU2NhdmVuZ2VS
ZWdpc3RlcnMuY3BwOyBwYXRoID0gYjMvYWlyL0FpclNjYXZlbmdlUmVnaXN0ZXJzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFMzRDMTAxQzRCMTA5NjAwMDNBNTEyIC8qIEFp
clNjYXZlbmdlUmVnaXN0ZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFp
clNjYXZlbmdlUmVnaXN0ZXJzLmg7IHBhdGggPSBiMy9haXIvQWlyU2NhdmVuZ2VSZWdpc3RlcnMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFMzRDMTcxQzRCMzlBRTAwMDNBNTEy
IC8qIEFpckxvZ1JlZ2lzdGVyUHJlc3N1cmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gQWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5jcHA7IHBhdGggPSBiMy9haXIvQWly
TG9nUmVnaXN0ZXJQcmVzc3VyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RTM0QzE4MUM0QjM5QUUwMDAzQTUxMiAvKiBBaXJMb2dSZWdpc3RlclByZXNzdXJlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckxvZ1JlZ2lzdGVyUHJlc3N1cmUuaDsgcGF0
aCA9IGIzL2Fpci9BaXJMb2dSZWdpc3RlclByZXNzdXJlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGRTcyMTFCMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1RyYW5zaXRpb24uY3BwOyBw
YXRoID0gZGZnL0RGR1RyYW5zaXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkU3MjExQzE5M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNpdGlvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdUcmFuc2l0aW9uLmg7IHBhdGggPSBkZmcvREZHVHJh
bnNpdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkU4MzQxNTFBNkVGOTdC
MDBEMDQ4NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDg0Niw3ICs0ODY2LDExIEBACiAJCQkJMEZF
Qzg1NEIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5oICovLAogCQkJCTBGRUM4NTRDMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmNwcCAqLywKIAkJCQkwRkVDODU0RDFCREFDREM3
MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5oICovLAorCQkJCTBGRTM0QzBCMUM0QjEwOTYwMDAz
QTUxMiAvKiBBaXJCbG9ja0luc2VydGlvblNldC5jcHAgKi8sCisJCQkJMEZFMzRDMEMxQzRCMTA5
NjAwMDNBNTEyIC8qIEFpckJsb2NrSW5zZXJ0aW9uU2V0LmggKi8sCiAJCQkJMEZCMzg3OEIxQkZC
QzQ0RDAwRTNBQjFFIC8qIEFpckJsb2NrV29ya2xpc3QuaCAqLywKKwkJCQkwRkUzNEMwRDFDNEIx
MDk2MDAwM0E1MTIgLyogQWlyQnJlYWtDcml0aWNhbEVkZ2VzLmNwcCAqLywKKwkJCQkwRkUzNEMw
RTFDNEIxMDk2MDAwM0E1MTIgLyogQWlyQnJlYWtDcml0aWNhbEVkZ2VzLmggKi8sCiAJCQkJMEY2
MTgzMjAxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5jcHAgKi8sCiAJ
CQkJMEY2MTgzMjExQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5oICov
LAogCQkJCTBGRUM4NTRFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuY3BwICov
LApAQCAtNDg1OSw5ICs0ODgzLDEwIEBACiAJCQkJMEY0NTcwMzcxQkU0NEM5MTAwNjJBNjI5IC8q
IEFpckVsaW1pbmF0ZURlYWRDb2RlLmggKi8sCiAJCQkJMEY2MTgzMjMxQzQ1QkYwNzAwNzI0NTBC
IC8qIEFpckVtaXRTaHVmZmxlLmNwcCAqLywKIAkJCQkwRjYxODMyNDFDNDVCRjA3MDA3MjQ1MEIg
LyogQWlyRW1pdFNodWZmbGUuaCAqLywKKwkJCQkwRjRERTFDQzFDNEMxQjU0MDA0RDZDMTEgLyog
QWlyRml4T2J2aW91c1NwaWxscy5jcHAgKi8sCisJCQkJMEY0REUxQ0QxQzRDMUI1NDAwNEQ2QzEx
IC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCAqLywKIAkJCQkyNjJEODVCNDFDMEQ2NTBGMDA2QUNC
NjEgLyogQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmNwcCAqLywKIAkJCQkyNjJEODVCNTFD
MEQ2NTBGMDA2QUNCNjEgLyogQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmggKi8sCi0JCQkJ
MEY0QzkxNjcxQzJCM0Q2ODAwNDM0MUE2IC8qIEFpckZpeFNwaWxsU2xvdFpEZWYuaCAqLywKIAkJ
CQkwRkVDODU1MjFCREFDREM3MDA4MEZGNzQgLyogQWlyRnJlcXVlbnRlZEJsb2NrLmggKi8sCiAJ
CQkJMEZFQzg1NTMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmNwcCAqLywKIAkJCQkw
RkVDODU1NDFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGUuaCAqLywKQEAgLTQ4NzYsNyAr
NDkwMSwxMCBAQAogCQkJCTBGRUM4NTVDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0SW5saW5l
cy5oICovLAogCQkJCTI2NzE4QkEyMUJFOTlGNzgwMDUyMDE3QiAvKiBBaXJJdGVyYXRlZFJlZ2lz
dGVyQ29hbGVzY2luZy5jcHAgKi8sCiAJCQkJMjY3MThCQTMxQkU5OUY3ODAwNTIwMTdCIC8qIEFp
ckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmggKi8sCisJCQkJMEY0REUxQ0ExQzRCNjBCODAw
NEQ2QzExIC8qIEFpckxpdmVuZXNzLmNwcCAqLywKIAkJCQkyNjg0RDQzNzFDMDAxNjFDMDA4MUQ2
NjMgLyogQWlyTGl2ZW5lc3MuaCAqLywKKwkJCQkwRkUzNEMxNzFDNEIzOUFFMDAwM0E1MTIgLyog
QWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5jcHAgKi8sCisJCQkJMEZFMzRDMTgxQzRCMzlBRTAwMDNB
NTEyIC8qIEFpckxvZ1JlZ2lzdGVyUHJlc3N1cmUuaCAqLywKIAkJCQkwRjYxODMyNTFDNDVCRjA3
MDA3MjQ1MEIgLyogQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcCAqLywKIAkJCQkwRjYxODMyNjFD
NDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmggKi8sCiAJCQkJMEY2MTgz
MjcxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyTWFjcm9zLmNwcCAqLywKQEAgLTQ4OTAsNiAr
NDkxOCw4IEBACiAJCQkJMEZFQzg1NjExQkRBQ0RDNzAwODBGRjc0IC8qIEFpclJlZ2lzdGVyUHJp
b3JpdHkuaCAqLywKIAkJCQkwRjQ1NzAzQTFCRTQ1RjBBMDA2MkE2MjkgLyogQWlyUmVwb3J0VXNl
ZFJlZ2lzdGVycy5jcHAgKi8sCiAJCQkJMEY0NTcwM0IxQkU0NUYwQTAwNjJBNjI5IC8qIEFpclJl
cG9ydFVzZWRSZWdpc3RlcnMuaCAqLywKKwkJCQkwRkUzNEMwRjFDNEIxMDk2MDAwM0E1MTIgLyog
QWlyU2NhdmVuZ2VSZWdpc3RlcnMuY3BwICovLAorCQkJCTBGRTM0QzEwMUM0QjEwOTYwMDAzQTUx
MiAvKiBBaXJTY2F2ZW5nZVJlZ2lzdGVycy5oICovLAogCQkJCTBGMzM4REZCMUJFRDUxMjcwMDEz
Qzg4RiAvKiBBaXJTaW1wbGlmeUNGRy5jcHAgKi8sCiAJCQkJMEYzMzhERkMxQkVENTEyNzAwMTND
ODhGIC8qIEFpclNpbXBsaWZ5Q0ZHLmggKi8sCiAJCQkJMEZFQzg1NjIxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpclNwZWNpYWwuY3BwICovLApAQCAtNjk2NCw2ICs2OTk0LDcgQEAKIAkJCQkwRkVDODU3
NDFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkVDODU3NjFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYzNzMwOTMxQzBENjdFRTAwMDUyQkZBIC8qIEFpclVzZUNvdW50cy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEZFMzRDMTQxQzRCMTA5NjAwMDNBNTEyIC8qIEFpckJyZWFrQ3JpdGljYWxFZGdl
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0NTcwMzkxQkU0NEM5MTAwNjJBNjI5IC8qIEFpckVs
aW1pbmF0ZURlYWRDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OUNGQzZGMDFDMzNCMTAwMDBD
NzY4RUEgLyogTExJbnRQQ1Jhbmdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzlENUNENUIxQzEx
MDZBOTAwQ0VDQTA3IC8qIFNhbXBsaW5nUHJvZmlsZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNzMy
Niw3ICs3MzU3LDYgQEAKIAkJCQlEQzAwMDM5MzE5RDhCRTZGMDAwMjNFQjAgLyogREZHUHJlY2lz
ZUxvY2FsQ2xvYmJlcml6ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCRTBGNzUxNkMxREIwQjAw
ODJDNUU4IC8qIERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZGRkM5NUUxNEVGOTBCNzAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBo
YXNlLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjRDOTE2ODFDMkIzRDY4MDA0MzQxQTYgLyogQWly
Rml4U3BpbGxTbG90WkRlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzRTAxQUIxOUQzNTNBNTAw
RjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI5
Q0VEMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZGQzkyMTYxQjk0RkIzRTAwNzFERDY2IC8qIERGR1Byb3BlcnR5VHlwZUtl
eS5oIGluIEhlYWRlcnMgKi8sCkBAIC03MzU3LDYgKzczODcsNyBAQAogCQkJCTcwQjc5MTk5MUMw
MjRBMjkwMDI0ODFFMiAvKiBHZW5lcmF0b3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGQzA5N0EyMTQ2QjI4Q0MwMENGMjQ0MiAvKiBERkdUaHVua3MuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRDhBMzI4MTdENTFGNTcwMENBMkM0MCAvKiBERkdUaWVyVXBDaGVja0luamVjdGlvblBo
YXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkUzNEMxQTFDNEIzOUFFMDAwM0E1MTIgLyogQWly
TG9nUmVnaXN0ZXJQcmVzc3VyZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEOEEzMkExN0Q1MUY1
NzAwQ0EyQzQwIC8qIERGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkQ4QTMyQzE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExGb3JPU1JF
bnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUz
QTA2QjQxQzEwQ0I5MzAwMzkwRkREIC8qIEpJVEJpdFhvckdlbmVyYXRvci5oIGluIEhlYWRlcnMg
Ki8sCkBAIC03NDAyLDYgKzc0MzMsNyBAQAogCQkJCTBGM0FDNzU0MTg4RTVFQzgwMDMyMDI5RiAv
KiBFeGl0aW5nSklUVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMTA1ODYxNjc1NDgxMjAw
RjhBQjZFIC8qIEV4aXRLaW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCODNBQjE0QkNGNUJC
MDA4ODVCNEYgLyogRXhwcmVzc2lvblJhbmdlSW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0
REUxQ0YxQzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3QThBRjM4MTdBREI1RjMwMDVBQjE3NCAvKiBGbG9hdDMyQXJyYXkuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3QThBRjM5MTdBREI1RjMwMDVBQjE3NCAvKiBGbG9hdDY0QXJyYXku
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjRFNTQzMTdFQTlGNTkwMEFCQjIxNyAvKiBGUFJJbmZv
LmggaW4gSGVhZGVycyAqLywKQEAgLTgwMjksNiArODA2MSw3IEBACiAJCQkJNzA1QjQxQjIxQTZF
NTAxRTAwNzE2NzU3IC8qIFN5bWJvbFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk2
QjczMjgxQkRBMDhFRjAwMzMxQjg0IC8qIFN5bWJvbFByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDMThDNDZCMEUxNkY1Q0QwMEIzNDQ2MCAvKiBTeW1ib2xUYWJsZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZFMzRDMTYxQzRCMTA5NjAwMDNBNTEyIC8qIEFpclNjYXZlbmdlUmVn
aXN0ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzg0QTI2NDExRDE2NjIyMDA1Nzc2QUMgLyog
U3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzBFQ0E2MDgxQUZEQkVBMjAwNDQ5
NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwRUNBNjA5MUFG
REJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmggaW4gSGVhZGVycyAqLywKQEAg
LTgwNDYsNiArODA3OSw3IEBACiAJCQkJMEYzMzhFMTMxQkYwMjc2QzAwMTNDODhGIC8qIEIzT3Bh
cXVlQnlwcm9kdWN0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY3MDgxN0I2QjVBQjAwQTdB
RTNGIC8qIFR5cGVkQXJyYXlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjRCOTRE
QzE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRBcnJheUlubGluZXMuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGRTM0QzEyMUM0QjEwOTYwMDAzQTUxMiAvKiBBaXJCbG9ja0luc2VydGlvblNldC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY3MDkxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlz
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjcwQjE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRB
cnJheVR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkQ0REVBMTk4MzJEQUMwMDdENEIxOSAv
KiBUeXBlTG9jYXRpb24uaCBpbiBIZWFkZXJzICovLApAQCAtODY3Niw2ICs4NzEwLDcgQEAKIAkJ
CQkwRkVDODU2RDFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFjay5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk0MzQyMkE2NjFDMTYyNjc1MDBFMkVCOTggLyogQjNSZWR1Y2VEb3VibGVU
b0Zsb2F0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUM4NTZGMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJBcmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY0REUxQ0UxQzRDMUI1NDAwNEQ2QzEx
IC8qIEFpckZpeE9idmlvdXNTcGlsbHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQzg1NzEx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZFQzg1NzMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkVDODU3NTFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTg3MjksNiArODc2NCw3IEBACiAJCQkJMEZFQzg1MjExQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzT3Bjb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUM4NTIzMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM09yaWdpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVDODUyNTFCREFD
REFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRkUzNEMxNTFDNEIxMDk2MDAwM0E1MTIgLyogQWlyU2NhdmVuZ2VSZWdpc3RlcnMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZFQzg1MjcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2lu
dFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUM4NTI5MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1BoYXNlU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQzg1MkIxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzUHJvY2VkdXJlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtODg1Niw2ICs4ODky
LDcgQEAKIAkJCQlDMkMwRjdDRDE3QkJGQzVCMDA0NjRGRTQgLyogREZHRGVzaXJlZFRyYW5zaXRp
b25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRTg1MzRCMTcyM0NEQTUwMEI2MThGNSAvKiBE
RkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzI5ODFGRDgxN0JB
RUU0QjAwQTNCQzk4IC8qIERGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRjRERTFDQjFDNEI2MEI4MDA0RDZDMTEgLyogQWlyTGl2ZW5lc3MuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZGNDI3NjQxNTkxQTFDQzAwNENCOUZGIC8qIERGR0Rpc2Fzc2VtYmxl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjVBMTI3MzE5MkQ5RkRGMDA4NzY0QTMgLyogREZH
RG9lc0dDLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDNDODI2MTQxMTVENDAwMEZEODFDQiAv
KiBERkdEcml2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04ODk1LDYgKzg5MzIsNyBAQAogCQkJ
CTBGNTg3NEVEMTk0RkVCMTIwMEFBQjJDMSAvKiBERkdNYXlFeGl0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGMTcyNUZGMUI0ODcxOUEwMEFDM0E1NSAvKiBERkdNaW5pZmllZEdyYXBoLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGMkJEQzREMTUyMjgxODYwMENEODkxMCAvKiBERkdNaW5pZmll
ZE5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFMzRDMTMxQzRCMTA5NjAwMDNBNTEyIC8q
IEFpckJyZWFrQ3JpdGljYWxFZGdlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjhGMTQzNTFB
REYwOTAxMDBFRDc5MkMgLyogREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRkYyQ0Q1QjFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNldERh
dGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTczNzgxMEQxNzk5RUEyRTAwODE3NTMzIC8qIERG
R05hdHVyYWxMb29wcy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTkwMzUsNiArOTA3Myw3IEBACiAJ
CQkJMEYyMzVCRTExNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFRodW5rcy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjZCMUNDNTE4NjJDNDc4MDA4NDVEOTcgLyogRlRMVW53aW5kSW5mby5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjVBNjI4MzE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5n
ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkUzNEMxMTFDNEIxMDk2MDAwM0E1MTIgLyogQWly
QmxvY2tJbnNlcnRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkE4MzYzODkxOEQ3RDBG
RTAwMDBFQkNDIC8qIEZ1bGxHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTQ3RjM5Q0IxMDdFQzM3NjAwNDI3QTQ4IC8qIEZ1bmN0aW9uQ29uc3RydWN0b3IuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZGMEYxOUYxNkI3MkExNzAwNURGOTVCIC8qIEZ1bmN0aW9uRXhl
Y3V0YWJsZUR1bXAuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05MDkxLDYgKzkxMzAsNyBAQAogCQkJ
CUE1OTNDRjgyMTg0MDM3NzEwMEJGQ0UyNyAvKiBJbnNwZWN0b3JWYWx1ZXMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTQ3RjM5Q0YxMDdFQzM3NjAwNDI3QTQ4IC8qIEludGVybmFsRnVuY3Rpb24u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyOUQ3RDQwRUQyMTI4MjAwQjg5NjE5IC8qIEludGVy
cHJldGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTM0QzE5MUM0QjM5QUUwMDAzQTUxMiAv
KiBBaXJMb2dSZWdpc3RlclByZXNzdXJlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExQjlFMjM5
MUI0RTBENjcwMEJDN0ZFRCAvKiBJbnRsQ29sbGF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTFCOUUyM0IxQjRFMEQ2NzAwQkM3RkVEIC8qIEludGxDb2xsYXRvckNvbnN0cnVjdG9yLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUExQjlFMjNEMUI0RTBENjcwMEJDN0ZFRCAvKiBJbnRsQ29sbGF0
b3JQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDaGVja1NwZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5jcHAJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
NSwxOSArMTA1LDE0IEBAIEluc3QgQ2hlY2tTcGVjaWFsOjpoaWRkZW5CcmFuY2goY29uc3QgSW4K
ICAgICByZXR1cm4gaGlkZGVuQnJhbmNoOwogfQogCi12b2lkIENoZWNrU3BlY2lhbDo6Y29tbWl0
SGlkZGVuQnJhbmNoKEluc3QmIG9yaWdpbmFsLCBJbnN0JiBoaWRkZW5CcmFuY2gpCi17Ci0gICAg
QVNTRVJUKGhpZGRlbkJyYW5jaC5hcmdzLnNpemUoKSA9PSBtX251bUNoZWNrQXJncyk7Ci0gICAg
QVNTRVJUKGhpZGRlbkJyYW5jaC5vcGNvZGUgPSBtX2NoZWNrT3Bjb2RlKTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9udW1DaGVja0FyZ3M7ICsraSkKLSAgICAgICAgb3JpZ2luYWwu
YXJnc1tpICsgMV0gPSBoaWRkZW5CcmFuY2guYXJnc1tpXTsKLX0KLQogdm9pZCBDaGVja1NwZWNp
YWw6OmZvckVhY2hBcmcoSW5zdCYgaW5zdCwgY29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hB
cmdDYWxsYmFjaz4mIGNhbGxiYWNrKQogewogICAgIEluc3QgaGlkZGVuID0gaGlkZGVuQnJhbmNo
KGluc3QpOwotICAgIGhpZGRlbi5mb3JFYWNoQXJnKGNhbGxiYWNrKTsKLSAgICBjb21taXRIaWRk
ZW5CcmFuY2goaW5zdCwgaGlkZGVuKTsKKyAgICBoaWRkZW4uZm9yRWFjaEFyZygKKyAgICAgICAg
WyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSB0eXBlLCBBcmc6OldpZHRo
IHdpZHRoKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9ICZhcmcgLSAmaGlkZGVuLmFy
Z3NbMF07CisgICAgICAgICAgICBjYWxsYmFjayhpbnN0LmFyZ3NbMSArIGluZGV4XSwgcm9sZSwg
dHlwZSwgd2lkdGgpOworICAgICAgICB9KTsKICAgICBmb3JFYWNoQXJnSW1wbChudW1CM0FyZ3Mo
aW5zdCksIG1fbnVtQ2hlY2tBcmdzICsgMSwgaW5zdCwgbV9zdGFja21hcFJvbGUsIGNhbGxiYWNr
KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmgJ
KHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3Bl
Y2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsOSArMTIzLDYgQEAgcHJvdGVjdGVkOgogICAg
IC8vIENvbnN0cnVjdHMgYW5kIHJldHVybnMgdGhlIEluc3QgcmVwcmVzZW50aW5nIHRoZSBicmFu
Y2ggdGhhdCB0aGlzIHdpbGwgdXNlLgogICAgIEFpcjo6SW5zdCBoaWRkZW5CcmFuY2goY29uc3Qg
QWlyOjpJbnN0JikgY29uc3Q7CiAKLSAgICAvLyBJZiB3ZSBlZGl0ZWQgdGhlIGhpZGRlbiBicmFu
Y2gsIHRoaXMgaW5zdGFsbHMgdGhlIGVkaXRzIGludG8gdGhlIGdpdmVuIGluc3QuCi0gICAgdm9p
ZCBjb21taXRIaWRkZW5CcmFuY2goQWlyOjpJbnN0JiBvcmlnaW5hbCwgQWlyOjpJbnN0JiBoaWRk
ZW5CcmFuY2gpOwotCiAgICAgdm9pZCBmb3JFYWNoQXJnKEFpcjo6SW5zdCYsIGNvbnN0IFNjb3Bl
ZExhbWJkYTxBaXI6Okluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mKSBvdmVycmlkZTsKICAgICBib29s
IGlzVmFsaWQoQWlyOjpJbnN0Jikgb3ZlcnJpZGU7CiAgICAgYm9vbCBhZG1pdHNTdGFjayhBaXI6
Okluc3QmLCB1bnNpZ25lZCBhcmdJbmRleCkgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3
MSw2ICs4NzEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGFyZyA9IHRtcCh2YWx1ZS52
YWx1ZSgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgVmFsdWVS
ZXA6OlJlZ2lzdGVyOgorICAgICAgICAgICAgICAgIHN0YWNrbWFwLT5lYXJseUNsb2JiZXJlZCgp
LmNsZWFyKHZhbHVlLnJlcCgpLnJlZygpKTsKICAgICAgICAgICAgICAgICBhcmcgPSBUbXAodmFs
dWUucmVwKCkucmVnKCkpOwogICAgICAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBpbW1PclRtcCh2
YWx1ZS52YWx1ZSgpKSwgYXJnKTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTE5NzMsNiAr
MTk3NCw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGZpbGxTdGFja21hcChpbnN0LCBwYXRjaHBvaW50VmFsdWUsIDApOworICAgICAgICAgICAg
CisgICAgICAgICAgICBpZiAocGF0Y2hwb2ludFZhbHVlLT5yZXN1bHRDb25zdHJhaW50LmlzUmVn
KCkpCisgICAgICAgICAgICAgICAgcGF0Y2hwb2ludFZhbHVlLT5sYXRlQ2xvYmJlcmVkKCkuY2xl
YXIocGF0Y2hwb2ludFZhbHVlLT5yZXN1bHRDb25zdHJhaW50LnJlZygpKTsKIAogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gcGF0Y2hwb2ludFZhbHVlLT5udW1HUFNjcmF0Y2hSZWdpc3Rl
cnM7IGktLTspCiAgICAgICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChtX2NvZGUubmV3VG1w
KEFyZzo6R1ApKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwVmFs
dWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFZh
bHVlLmgJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0
YWNrbWFwVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTg3LDYgKzE4Nyw4IEBAIHB1YmxpYzoK
ICAgICAgICAgY2xvYmJlckxhdGUoc2V0KTsKICAgICB9CiAKKyAgICBSZWdpc3RlclNldCYgZWFy
bHlDbG9iYmVyZWQoKSB7IHJldHVybiBtX2Vhcmx5Q2xvYmJlcmVkOyB9CisgICAgUmVnaXN0ZXJT
ZXQmIGxhdGVDbG9iYmVyZWQoKSB7IHJldHVybiBtX2xhdGVDbG9iYmVyZWQ7IH0KICAgICBjb25z
dCBSZWdpc3RlclNldCYgZWFybHlDbG9iYmVyZWQoKSBjb25zdCB7IHJldHVybiBtX2Vhcmx5Q2xv
YmJlcmVkOyB9CiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGxhdGVDbG9iYmVyZWQoKSBjb25zdCB7
IHJldHVybiBtX2xhdGVDbG9iYmVyZWQ7IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwCShyZXZpc2lvbiAxOTUxNzYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKEIzX0pJVCkKIAogI2luY2x1
ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIKICNpbmNsdWRlICJB
aXJJbnN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgiCiAjaW5jbHVkZSAiQWly
UGhhc2VTY29wZS5oIgpAQCAtMTY2LDggKzE2Nyw0NyBAQCB2b2lkIGFsbG9jYXRlU3RhY2soQ29k
ZSYgY29kZSkKICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgp
OyBpbnN0SW5kZXgtLTspIHsKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAg
ICAgIGRhdGFMb2coIkFuYWx5emluZzogIiwgYmxvY2stPmF0KGluc3RJbmRleCksICJcbiIpOwor
CisgICAgICAgICAgICAvLyBLaWxsIGRlYWQgc3RvcmVzLiBGb3Igc2ltcGxpY2l0eSB3ZSBzYXkg
dGhhdCBhIHN0b3JlIGlzIGtpbGxhYmxlIGlmIGl0IGhhcyBvbmx5IGxhdGUKKyAgICAgICAgICAg
IC8vIGRlZnMgYW5kIHRob3NlIGxhdGUgZGVmcyBhcmUgdG8gdGhpbmdzIHRoYXQgYXJlIGRlYWQg
cmlnaHQgbm93LiBXZSBvbmx5IGRvIHRoYXQKKyAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhhdCdz
IHRoZSBvbmx5IGtpbmQgb2YgZGVhZCBzdGFjayBzdG9yZSB3ZSB3aWxsIHNlZSBoZXJlLgorICAg
ICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOworICAgICAgICAgICAg
aWYgKCFpbnN0Lmhhc05vbkFyZ0VmZmVjdHMoKSkgeworICAgICAgICAgICAgICAgIGJvb2wgb2sg
PSB0cnVlOworICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaEFyZygKKyAgICAgICAgICAgICAg
ICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSwgQXJnOjpXaWR0
aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNFYXJseURlZihyb2xlKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9rID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFBcmc6OmlzTGF0ZURlZihyb2xlKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFy
Zy5pc1N0YWNrKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvayA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc2xvdCA9IGFyZy5zdGFj
a1Nsb3QoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzbG90LT5raW5kKCkgIT0gU3Rh
Y2tTbG90S2luZDo6QW5vbnltb3VzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2sg
PSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2NhbENhbGMu
aXNMaXZlKHNsb3QpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2sgPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIGlmIChvaykK
KyAgICAgICAgICAgICAgICAgICAgaW5zdCA9IEluc3QoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAogICAgICAgICAgICAgaW50ZXJmZXJlKGluc3RJbmRleCk7CiAgICAgICAgICAgICBs
b2NhbENhbGMuZXhlY3V0ZShpbnN0SW5kZXgpOworCisgICAgICAgICAgICBibG9jay0+aW5zdHMo
KS5yZW1vdmVBbGxNYXRjaGluZygKKyAgICAgICAgICAgICAgICBbJl0gKGNvbnN0IEluc3QmIGlu
c3QpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gIWluc3Q7CisgICAgICAg
ICAgICAgICAgfSk7CiAgICAgICAgIH0KICAgICAgICAgaW50ZXJmZXJlKC0xKTsKICAgICB9CkBA
IC0yMzIsMzMgKzI3Miw0MyBAQCB2b2lkIGFsbG9jYXRlU3RhY2soQ29kZSYgY29kZSkKICAgICAv
LyBXZSB3b3VsZCBoYXZlIHRvIHNjYXZlbmdlIGZvciB0ZW1wb3JhcmllcyBpZiB0aGlzIGhhcHBl
bmVkLiBGb3J0dW5hdGVseSwgdGhpcyBjYXNlIHdpbGwgYmUKICAgICAvLyBleHRyZW1lbHkgcmFy
ZSBzbyB3ZSBjYW4gZG8gY3JhenkgdGhpbmdzIHdoZW4gaXQgYXJpc2VzLgogICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI1MzAKLSAgICAKKworICAgIElu
c2VydGlvblNldCBpbnNlcnRpb25TZXQoY29kZSk7CiAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9j
ayA6IGNvZGUpIHsKLSAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogKmJsb2NrKSB7CisgICAgICAg
IGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gMDsgaW5zdEluZGV4IDwgYmxvY2stPnNpemUoKTsg
KytpbnN0SW5kZXgpIHsKKyAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdElu
ZGV4KTsKICAgICAgICAgICAgIGluc3QuZm9yRWFjaEFyZygKLSAgICAgICAgICAgICAgICBbJl0g
KEFyZyYgYXJnLCBBcmc6OlJvbGUsIEFyZzo6VHlwZSwgQXJnOjpXaWR0aCB3aWR0aCkKLSAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJv
bGUsIEFyZzo6VHlwZSwgQXJnOjpXaWR0aCB3aWR0aCkgeworICAgICAgICAgICAgICAgICAgICBh
dXRvIHN0YWNrQWRkciA9IFsmXSAoaW50MzJfdCBvZmZzZXQpIC0+IEFyZyB7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gQXJnOjpzdGFja0FkZHIob2Zmc2V0LCBjb2RlLmZyYW1lU2l6
ZSgpLCB3aWR0aCk7CisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGFyZy5raW5kKCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgY2FzZSBBcmc6OlN0YWNrOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcmcg
PSBBcmc6OmFkZHIoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVG1wKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcub2Zmc2V0
KCkgKyBhcmcuc3RhY2tTbG90KCktPm9mZnNldEZyb21GUCgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghYXJnLmlzVmFsaWRGb3JtKHdpZHRoKSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFyZyA9IEFyZzo6YWRkcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVG1wKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFyZy5vZmZzZXQoKSArIGNvZGUuZnJhbWVTaXplKCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzbG90ID0gYXJnLnN0YWNrU2xvdCgp
OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNaRGVmKHJvbGUpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJiYgc2xvdC0+a2luZCgpID09IFN0YWNrU2xvdEtpbmQ6OkFu
b255bW91cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNsb3QtPmJ5dGVTaXplKCkg
PiBBcmc6OmJ5dGVzKHdpZHRoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEN1
cnJlbnRseSB3ZSBvbmx5IGhhbmRsZSB0aGlzIHNpbXBsZSBjYXNlIGJlY2F1c2UgaXQncyB0aGUg
b25seSBvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGF0IGFyaXNlczogWkRl
ZidzIGFyZSBvbmx5IDMyLWJpdCByaWdodCBub3cuIFNvLCB3aGVuIHdlIGhpdCB0aGVzZQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzc2VydGlvbnMgaXQgbWVhbnMgdGhhdCB3ZSBu
ZWVkIHRvIGltcGxlbWVudCB0aG9zZSBvdGhlciBraW5kcyBvZgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIHplcm8gZmlsbHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoc2xvdC0+Ynl0ZVNpemUoKSA9PSA4KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVCh3aWR0aCA9PSBBcmc6OldpZHRoMzIpOworCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gV2UgcmVseSBvbiB0aGUgZmFjdCB0aGF0IHRoZXJlIG11
c3QgYmUgc29tZSB3YXkgdG8gbW92ZSB6ZXJvIHRvIGEKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBtZW1vcnkgbG9jYXRpb24gd2l0aG91dCBmaXJzdCBidXJuaW5nIGEgcmVnaXN0ZXIu
IE9uIEFSTSwgd2Ugd291bGQgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlz
IHVzaW5nIHpyLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlz
VmFsaWRGb3JtKE1vdmUzMiwgQXJnOjpJbW0sIEFyZzo6QWRkcikpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluc3RJbmRleCArIDEsIE1vdmUzMiwgaW5zdC5vcmlnaW4sIEFyZzo6aW1tKDAp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja0FkZHIoYXJnLm9mZnNldCgp
ICsgNCArIHNsb3QtPm9mZnNldEZyb21GUCgpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBzdGFja0FkZHIoYXJnLm9mZnNldCgpICsg
c2xvdC0+b2Zmc2V0RnJvbUZQKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkNhbGxB
cmc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBBcmc6OmFkZHIoCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhcmcub2Zmc2V0KCkgLSBjb2RlLmZyYW1lU2l6ZSgpKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlzVmFsaWRGb3JtKHdpZHRoKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IEFyZzo6YWRkcigKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVG1wKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdp
c3RlciksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZy5vZmZzZXQoKSArIGNv
ZGUuZnJhbWVTaXplKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgYXJnID0gc3RhY2tBZGRyKGFyZy5vZmZzZXQoKSAtIGNvZGUuZnJhbWVTaXpl
KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTI2Niw2ICszMTYs
NyBAQCB2b2lkIGFsbG9jYXRlU3RhY2soQ29kZSYgY29kZSkKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICApOwogICAgICAgICB9CisgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKGJs
b2NrKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
QXJnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcu
aAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJB
cmcuaAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDYgKzEyNiw3IEBAIHB1YmxpYzoKICAgICAgICAg
Ly8gZGVwZW5kaW5nIG9uIHRoZSBraW5kIG9mIHRoZSBhcmd1bWVudDoKICAgICAgICAgLy8KICAg
ICAgICAgLy8gRm9yIHJlZ2lzdGVyOiB0aGUgdXBwZXIgYml0cyBhcmUgemVyby1maWxsZWQuCisg
ICAgICAgIC8vIEZvciBhbm9ueW1vdXMgc3RhY2sgc2xvdDogdGhlIHVwcGVyIGJpdHMgYXJlIHpl
cm8tZmlsbGVkLgogICAgICAgICAvLyBGb3IgYWRkcmVzczogdGhlIHVwcGVyIGJpdHMgYXJlIG5v
dCB0b3VjaGVkIChpLmUuIHdlIGRvIGEgMzItYml0IHN0b3JlIGluIG91ciBleGFtcGxlKS4KICAg
ICAgICAgLy8gRm9yIHRtcDogZWl0aGVyIHRoZSB1cHBlciBiaXRzIGFyZSBub3QgdG91Y2hlZCBv
ciB0aGV5IGFyZSB6ZXJvLWZpbGxlZCwgYW5kIHdlIHdvbid0IGtub3cKICAgICAgICAgLy8gd2hp
Y2ggdW50aWwgd2UgbG93ZXIgdGhlIHRtcCB0byBlaXRoZXIgYSBTdGFja1Nsb3Qgb3IgYSBSZWcu
CkBAIC01MTMsNiArNTE0LDE3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICB9CiAKKyAgICBzdGF0aWMgQXJnIHN0YWNrQWRkcihpbnQzMl90IG9mZnNldEZyb21GUCwgdW5z
aWduZWQgZnJhbWVTaXplLCBXaWR0aCB3aWR0aCkKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQg
PSBBcmc6OmFkZHIoQWlyOjpUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpLCBvZmZzZXRG
cm9tRlApOworICAgICAgICBpZiAoIXJlc3VsdC5pc1ZhbGlkRm9ybSh3aWR0aCkpIHsKKyAgICAg
ICAgICAgIHJlc3VsdCA9IEFyZzo6YWRkcigKKyAgICAgICAgICAgICAgICBBaXI6OlRtcChNYWNy
b0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpLAorICAgICAgICAgICAgICAgIG9mZnNl
dEZyb21GUCArIGZyYW1lU2l6ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisKICAgICAvLyBJZiB5b3UgZG9uJ3QgcGFzcyBhIFdpZHRoLCB0aGlzIG9wdGltaXN0
aWNhbGx5IGFzc3VtZXMgdGhhdCB5b3UncmUgdXNpbmcgdGhlIHJpZ2h0IHdpZHRoLgogICAgIHN0
YXRpYyBib29sIGlzVmFsaWRTY2FsZSh1bnNpZ25lZCBzY2FsZSwgT3B0aW9uYWw8V2lkdGg+IHdp
ZHRoID0gTnVsbG9wdCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckJhc2ljQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQmFzaWNCbG9jay5jcHAJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3
LDExICs1NywyMSBAQCB2b2lkIEJhc2ljQmxvY2s6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgCiAK
IHZvaWQgQmFzaWNCbG9jazo6ZGVlcER1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKKyAg
ICBkdW1wSGVhZGVyKG91dCk7CisgICAgZm9yIChjb25zdCBJbnN0JiBpbnN0IDogKnRoaXMpCisg
ICAgICAgIG91dC5wcmludCgiICAgICIsIGluc3QsICJcbiIpOworICAgIGR1bXBGb290ZXIob3V0
KTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpkdW1wSGVhZGVyKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Cit7CiAgICAgb3V0LnByaW50KCJCQiIsICp0aGlzLCAiOiA7IGZyZXF1ZW5jeSA9ICIsIG1f
ZnJlcXVlbmN5LCAiXG4iKTsKICAgICBpZiAocHJlZGVjZXNzb3JzKCkuc2l6ZSgpKQogICAgICAg
ICBvdXQucHJpbnQoIiAgUHJlZGVjZXNzb3JzOiAiLCBwb2ludGVyTGlzdER1bXAocHJlZGVjZXNz
b3JzKCkpLCAiXG4iKTsKLSAgICBmb3IgKGNvbnN0IEluc3QmIGluc3QgOiAqdGhpcykKLSAgICAg
ICAgb3V0LnByaW50KCIgICAgIiwgaW5zdCwgIlxuIik7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6
ZHVtcEZvb3RlcihQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewogICAgIGlmIChzdWNjZXNzb3Jz
KCkuc2l6ZSgpKQogICAgICAgICBvdXQucHJpbnQoIiAgU3VjY2Vzc29yczogIiwgbGlzdER1bXAo
c3VjY2Vzc29ycygpKSwgIlxuIik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckJhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckJhc2ljQmxvY2suaAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYg
KzM2LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIg
ewogCitjbGFzcyBCbG9ja0luc2VydGlvblNldDsKIGNsYXNzIENvZGU7CiBjbGFzcyBJbnNlcnRp
b25TZXQ7CiAKQEAgLTEyNiw3ICsxMjcsMTEgQEAgcHVibGljOgogICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0OwogICAgIHZvaWQgZGVlcER1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
IAorICAgIHZvaWQgZHVtcEhlYWRlcihQcmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZHVt
cEZvb3RlcihQcmludFN0cmVhbSYpIGNvbnN0OworCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFz
cyBCbG9ja0luc2VydGlvblNldDsKICAgICBmcmllbmQgY2xhc3MgQ29kZTsKICAgICBmcmllbmQg
Y2xhc3MgSW5zZXJ0aW9uU2V0OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJCbG9ja0luc2VydGlvblNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja0luc2VydGlvblNldC5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJsb2NrSW5zZXJ0aW9uU2V0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJC
bG9ja0luc2VydGlvblNldC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFp
ckJhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgorI2luY2x1ZGUgPHd0
Zi9CdWJibGVTb3J0Lmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3Bh
Y2UgQWlyIHsKKworQmxvY2tJbnNlcnRpb25TZXQ6OkJsb2NrSW5zZXJ0aW9uU2V0KENvZGUgJmNv
ZGUpCisgICAgOiBtX2NvZGUoY29kZSkKK3sKK30KKworQmxvY2tJbnNlcnRpb25TZXQ6On5CbG9j
a0luc2VydGlvblNldCgpIHsgfQorCit2b2lkIEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnQoQmxv
Y2tJbnNlcnRpb24mJiBpbnNlcnRpb24pCit7CisgICAgbV9pbnNlcnRpb25zLmFwcGVuZChXVEZN
b3ZlKGluc2VydGlvbikpOworfQorCitCYXNpY0Jsb2NrKiBCbG9ja0luc2VydGlvblNldDo6aW5z
ZXJ0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVlbmN5KQoreworICAgIHN0ZDo6dW5pcXVl
X3B0cjxCYXNpY0Jsb2NrPiBibG9jayhuZXcgQmFzaWNCbG9jayhVSU5UX01BWCwgZnJlcXVlbmN5
KSk7CisgICAgQmFzaWNCbG9jayogcmVzdWx0ID0gYmxvY2suZ2V0KCk7CisgICAgaW5zZXJ0KEJs
b2NrSW5zZXJ0aW9uKGluZGV4LCBXVEZNb3ZlKGJsb2NrKSkpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK0Jhc2ljQmxvY2sqIEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnRCZWZvcmUoQmFzaWNC
bG9jayogYmVmb3JlLCBkb3VibGUgZnJlcXVlbmN5KQoreworICAgIHJldHVybiBpbnNlcnQoYmVm
b3JlLT5pbmRleCgpLCBmcmVxdWVuY3kgPT0gZnJlcXVlbmN5ID8gZnJlcXVlbmN5IDogYmVmb3Jl
LT5mcmVxdWVuY3koKSk7Cit9CisKK0Jhc2ljQmxvY2sqIEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNl
cnRBZnRlcihCYXNpY0Jsb2NrKiBhZnRlciwgZG91YmxlIGZyZXF1ZW5jeSkKK3sKKyAgICByZXR1
cm4gaW5zZXJ0KGFmdGVyLT5pbmRleCgpICsgMSwgZnJlcXVlbmN5ID09IGZyZXF1ZW5jeSA/IGZy
ZXF1ZW5jeSA6IGFmdGVyLT5mcmVxdWVuY3koKSk7Cit9CisKK2Jvb2wgQmxvY2tJbnNlcnRpb25T
ZXQ6OmV4ZWN1dGUoKQoreworICAgIGlmIChtX2luc2VydGlvbnMuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgLy8gV2UgYWxsb3cgaW5zZXJ0aW9ucyB0byBiZSBn
aXZlbiB0byB1cyBpbiBhbnkgb3JkZXIuIFNvLCB3ZSBuZWVkIHRvIHNvcnQgdGhlbSBiZWZvcmUK
KyAgICAvLyBydW5uaW5nIFdURjo6ZXhlY3V0ZUluc2VydGlvbnMuIFdlIHN0cm9uZ2x5IHByZWZl
ciBhIHN0YWJsZSBzb3J0IGFuZCB3ZSB3YW50IGl0IHRvIGJlCisgICAgLy8gZmFzdCwgc28gd2Ug
dXNlIGJ1YmJsZSBzb3J0LgorICAgIGJ1YmJsZVNvcnQobV9pbnNlcnRpb25zLmJlZ2luKCksIG1f
aW5zZXJ0aW9ucy5lbmQoKSk7CisKKyAgICBleGVjdXRlSW5zZXJ0aW9ucyhtX2NvZGUubV9ibG9j
a3MsIG1faW5zZXJ0aW9ucyk7CisgICAgCisgICAgLy8gUHJ1bmUgb3V0IGVtcHR5IGVudHJpZXMu
IFRoaXMgaXNuJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IGJ1dCBpdCdzCisgICAgLy8gaGVhbHRoeSB0
byBrZWVwIHRoZSBibG9jayBsaXN0IGZyb20gZ3Jvd2luZy4KKyAgICBtX2NvZGUubV9ibG9ja3Mu
cmVtb3ZlQWxsTWF0Y2hpbmcoCisgICAgICAgIFsmXSAoc3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxv
Y2s+JiBibG9ja1B0cikgLT4gYm9vbCB7CisgICAgICAgICAgICByZXR1cm4gIWJsb2NrUHRyOwor
ICAgICAgICB9KTsKKyAgICAKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgYmxvY2tzIGtub3cg
dGhlaXIgbmV3IGluZGljZXMuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY29kZS5t
X2Jsb2Nrcy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9jb2RlLm1fYmxvY2tzW2ldLT5tX2luZGV4
ID0gaTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCbG9ja0luc2VydGlvblNldC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmxvY2tJbnNlcnRpb25TZXQuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmxvY2tJbnNlcnRp
b25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyQmxvY2tJbnNlcnRpb25T
ZXRfaAorI2RlZmluZSBBaXJCbG9ja0luc2VydGlvblNldF9oCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgPHd0Zi9JbnNlcnRpb24uaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBu
YW1lc3BhY2UgQWlyIHsKKworY2xhc3MgSW5zZXJ0aW9uU2V0OworCit0eXBlZGVmIFdURjo6SW5z
ZXJ0aW9uPHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPj4gQmxvY2tJbnNlcnRpb247CisKK2Ns
YXNzIEJsb2NrSW5zZXJ0aW9uU2V0IHsKK3B1YmxpYzoKKyAgICBCbG9ja0luc2VydGlvblNldChD
b2RlJik7CisgICAgfkJsb2NrSW5zZXJ0aW9uU2V0KCk7CisgICAgCisgICAgdm9pZCBpbnNlcnQo
QmxvY2tJbnNlcnRpb24mJik7CisKKyAgICAvLyBJbnNlcnQgYSBuZXcgYmxvY2sgYXQgYSBnaXZl
biBpbmRleC4KKyAgICBCYXNpY0Jsb2NrKiBpbnNlcnQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSBm
cmVxdWVuY3kgPSBQTmFOKTsKKworICAgIC8vIEluc2VydHMgYSBuZXcgYmxvY2sgYmVmb3JlIHRo
ZSBnaXZlbiBibG9jay4gVXN1YWxseSB5b3Ugd2lsbCBub3QgcGFzcyB0aGUgZnJlcXVlbmN5Cisg
ICAgLy8gYXJndW1lbnQuIFBhc3NpbmcgUE5hTiBjYXVzZXMgdXMgdG8ganVzdCB1c2UgdGhlIGZy
ZXF1ZW5jeSBvZiB0aGUgJ2JlZm9yZScgYmxvY2suIFRoYXQncworICAgIC8vIHVzdWFsbHkgd2hh
dCB5b3Ugd2FudC4KKyAgICBCYXNpY0Jsb2NrKiBpbnNlcnRCZWZvcmUoQmFzaWNCbG9jayogYmVm
b3JlLCBkb3VibGUgZnJlcXVlbmN5ID0gUE5hTik7CisKKyAgICAvLyBJbnNlcnRzIGEgbmV3IGJs
b2NrIGFmdGVyIHRoZSBnaXZlbiBibG9jay4KKyAgICBCYXNpY0Jsb2NrKiBpbnNlcnRBZnRlcihC
YXNpY0Jsb2NrKiBhZnRlciwgZG91YmxlIGZyZXF1ZW5jeSA9IFBOYU4pOworCisgICAgYm9vbCBl
eGVjdXRlKCk7CisKK3ByaXZhdGU6CisgICAgQ29kZSYgbV9jb2RlOworICAgIFZlY3RvcjxCbG9j
a0luc2VydGlvbiwgOD4gbV9pbnNlcnRpb25zOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckJs
b2NrSW5zZXJ0aW9uU2V0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJCcmVha0NyaXRpY2FsRWRnZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQnJlYWtDcml0aWNhbEVkZ2VzLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQnJlYWtDcml0aWNhbEVkZ2VzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckJyZWFr
Q3JpdGljYWxFZGdlcy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckJs
b2NrSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpcklu
c3RJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2Ug
QWlyIHsKKwordm9pZCBicmVha0NyaXRpY2FsRWRnZXMoQ29kZSYgY29kZSkKK3sKKyAgICBCbG9j
a0luc2VydGlvblNldCBpbnNlcnRpb25TZXQoY29kZSk7CisgICAgCisgICAgZm9yICh1bnNpZ25l
ZCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IGNvZGUuc2l6ZSgpOyArK2Jsb2NrSW5kZXgp
IHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBjb2RlW2Jsb2NrSW5kZXhdOworICAgICAg
ICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKGJsb2Nr
LT5udW1TdWNjZXNzb3JzKCkgPD0gMSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IGktLTspIHsKKyAgICAg
ICAgICAgIEJhc2ljQmxvY2sqJiBzdWNjZXNzb3IgPSBibG9jay0+c3VjY2Vzc29yQmxvY2soaSk7
CisgICAgICAgICAgICBpZiAoc3VjY2Vzc29yLT5wcmVkZWNlc3NvcnMoKS5zaXplKCkgPD0gMSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgQmFzaWNCbG9jayogcGFk
ID0gaW5zZXJ0aW9uU2V0Lmluc2VydEJlZm9yZShzdWNjZXNzb3IsIHN1Y2Nlc3Nvci0+ZnJlcXVl
bmN5KCkpOworICAgICAgICAgICAgcGFkLT5hcHBlbmQoSnVtcCwgc3VjY2Vzc29yLT5hdCgwKS5v
cmlnaW4pOworICAgICAgICAgICAgcGFkLT5zdWNjZXNzb3JzKCkuYXBwZW5kKEZyZXF1ZW50ZWRC
bG9jayhzdWNjZXNzb3IpKTsKKyAgICAgICAgICAgIHBhZC0+YWRkUHJlZGVjZXNzb3IoYmxvY2sp
OworICAgICAgICAgICAgc3VjY2Vzc29yLT5yZXBsYWNlUHJlZGVjZXNzb3IoYmxvY2ssIHBhZCk7
CisgICAgICAgICAgICBzdWNjZXNzb3IgPSBwYWQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp
bnNlcnRpb25TZXQuZXhlY3V0ZSgpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6
QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckJyZWFrQ3JpdGljYWxFZGdlcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQnJlYWtDcml0aWNhbEVkZ2VzLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJyZWFrQ3JpdGljYWxFZGdl
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEFpckJyZWFrQ3JpdGljYWxFZGdlc19o
CisjZGVmaW5lIEFpckJyZWFrQ3JpdGljYWxFZGdlc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNz
IENvZGU7CisKK3ZvaWQgYnJlYWtDcml0aWNhbEVkZ2VzKENvZGUmKTsKKworfSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlm
IC8vIEFpckJyZWFrQ3JpdGljYWxFZGdlc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5jcHAJKHJldmlzaW9uIDE5NTE3NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsNiArMzYsOSBAQCBDQ2FsbFNwZWNpYWw6OkNDYWxsU3BlY2lhbCgpCiAg
ICAgbV9jbG9iYmVyZWRSZWdzLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCkp
OwogICAgIG1fY2xvYmJlcmVkUmVncy5leGNsdWRlKFJlZ2lzdGVyU2V0OjpyZXNlcnZlZEhhcmR3
YXJlUmVnaXN0ZXJzKCkpOwogICAgIG1fY2xvYmJlcmVkUmVncy5leGNsdWRlKFJlZ2lzdGVyU2V0
OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworICAgIG1fY2xvYmJlcmVkUmVncy5jbGVhcihHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgbV9jbG9iYmVyZWRSZWdzLmNsZWFyKEdQUkluZm86
OnJldHVyblZhbHVlR1BSMik7CisgICAgbV9jbG9iYmVyZWRSZWdzLmNsZWFyKEZQUkluZm86OnJl
dHVyblZhbHVlRlBSKTsKIH0KIAogQ0NhbGxTcGVjaWFsOjp+Q0NhbGxTcGVjaWFsKCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCShyZXZpc2lvbiAxOTUxNzYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNDYsNiArNDYsNyBAQCBjbGFzcyBQcm9jZWR1cmU7CiAKIG5hbWVzcGFjZSBBaXIgewogCitj
bGFzcyBCbG9ja0luc2VydGlvblNldDsKIGNsYXNzIENDYWxsU3BlY2lhbDsKIAogLy8gVGhpcyBp
cyBhbiBJUiB0aGF0IGlzIHZlcnkgY2xvc2UgdG8gdGhlIGJhcmUgbWV0YWwuIEl0IHJlcXVpcmVz
IGFib3V0IDQweCBtb3JlIGJ5dGVzIHRoYW4gdGhlCkBAIC0zMjIsOCArMzIzLDE1IEBAIHB1Ymxp
YzoKIAogICAgIGNvbnN0IGNoYXIqIGxhc3RQaGFzZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX2xh
c3RQaGFzZU5hbWU7IH0KIAorICAgIHZvaWQgc2V0RW5hYmxlUkNSUyhib29sIHZhbHVlKQorICAg
IHsKKyAgICAgICAgbV9lbmFibGVSQ1JTID0gdmFsdWU7CisgICAgfQorICAgIGJvb2wgZW5hYmxl
UkNSUygpIGNvbnN0IHsgcmV0dXJuIG1fZW5hYmxlUkNSUzsgfQorCiBwcml2YXRlOgogICAgIGZy
aWVuZCBjbGFzcyA6OkpTQzo6QjM6OlByb2NlZHVyZTsKKyAgICBmcmllbmQgY2xhc3MgQmxvY2tJ
bnNlcnRpb25TZXQ7CiAgICAgCiAgICAgQ29kZShQcm9jZWR1cmUmKTsKIApAQCAtMzM3LDYgKzM0
NSw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9udW1GUFRtcHMgeyAwIH07CiAgICAgdW5z
aWduZWQgbV9mcmFtZVNpemUgeyAwIH07CiAgICAgdW5zaWduZWQgbV9jYWxsQXJnQXJlYVNpemUg
eyAwIH07CisgICAgYm9vbCBtX2VuYWJsZVJDUlMgeyBPcHRpb25zOjphaXJVc2VzUkNSUygpIH07
CiAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOwogICAgIGNv
bnN0IGNoYXIqIG1fbGFzdFBoYXNlTmFtZTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJDdXN0b20uY3BwCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEx
ICsyOCwzNSBAQAogCiAjaWYgRU5BQkxFKEIzX0pJVCkKIAorI2luY2x1ZGUgIkFpckluc3RJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiQjNDQ2FsbFZhbHVlLmgiCiAjaW5jbHVkZSAiQjNWYWx1ZUlubGlu
ZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewog
Citib29sIFBhdGNoQ3VzdG9tOjppc1ZhbGlkRm9ybShJbnN0JiBpbnN0KQoreworICAgIGlmIChp
bnN0LmFyZ3Muc2l6ZSgpIDwgMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghaW5z
dC5hcmdzWzBdLmlzU3BlY2lhbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFp
bnN0LmFyZ3NbMF0uc3BlY2lhbCgpLT5pc1ZhbGlkKGluc3QpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgUmVnaXN0ZXJTZXQgY2xvYmJlcmVkRWFybHkgPSBpbnN0LmV4dHJhRWFybHlDbG9i
YmVyZWRSZWdzKCk7CisgICAgUmVnaXN0ZXJTZXQgY2xvYmJlcmVkTGF0ZSA9IGluc3QuZXh0cmFD
bG9iYmVyZWRSZWdzKCk7CisgICAgYm9vbCBvayA9IHRydWU7CisgICAgaW5zdC5mb3JFYWNoVG1w
KAorICAgICAgICBbJl0gKFRtcCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlLCBBcmc6
OldpZHRoKSB7CisgICAgICAgICAgICBpZiAoIXRtcC5pc1JlZygpKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIGlmIChBcmc6OmlzTGF0ZURlZihyb2xlKSB8fCBBcmc6Omlz
TGF0ZVVzZShyb2xlKSkKKyAgICAgICAgICAgICAgICBvayAmPSAhY2xvYmJlcmVkTGF0ZS5nZXQo
dG1wLnJlZygpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBvayAmPSAhY2xv
YmJlcmVkRWFybHkuZ2V0KHRtcC5yZWcoKSk7CisgICAgICAgIH0pOworICAgIHJldHVybiBvazsK
K30KKwogYm9vbCBDQ2FsbEN1c3RvbTo6aXNWYWxpZEZvcm0oSW5zdCYgaW5zdCkKIHsKICAgICBD
Q2FsbFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luLT5hczxDQ2FsbFZhbHVlPigpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0b20uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckN1c3RvbS5oCShyZXZpc2lvbiAxOTUxNzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckN1c3RvbS5oCSh3b3JraW5nIGNv
cHkpCkBAIC03MSwxNCArNzEsNyBAQCBzdHJ1Y3QgUGF0Y2hDdXN0b20gewogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wgaXNWYWxpZEZvcm0oSW5zdCYgaW5z
dCkKLSAgICB7Ci0gICAgICAgIGlmIChpbnN0LmFyZ3Muc2l6ZSgpIDwgMSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFpbnN0LmFyZ3NbMF0uaXNTcGVjaWFsKCkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBpbnN0LmFyZ3NbMF0uc3Bl
Y2lhbCgpLT5pc1ZhbGlkKGluc3QpOwotICAgIH0KKyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkRm9y
bShJbnN0JiBpbnN0KTsKIAogICAgIHN0YXRpYyBib29sIGFkbWl0c1N0YWNrKEluc3QmIGluc3Qs
IHVuc2lnbmVkIGFyZ0luZGV4KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyRW1pdFNodWZmbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuY3BwCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckVtaXRTaHVmZmxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzAsNiArNzAsMTQgQEAgdm9pZCBTaHVmZmxlUGFpcjo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KQogICAgIG91dC5wcmludCh3aWR0aCgpLCAiOiIsIHNyYygpLCAiPT4iLCBkc3QoKSk7CiB9
CiAKK0luc3QgY3JlYXRlU2h1ZmZsZShWYWx1ZSogb3JpZ2luLCBjb25zdCBWZWN0b3I8U2h1ZmZs
ZVBhaXI+JiBwYWlycykKK3sKKyAgICBJbnN0IHJlc3VsdChTaHVmZmxlLCBvcmlnaW4pOworICAg
IGZvciAoY29uc3QgU2h1ZmZsZVBhaXImIHBhaXIgOiBwYWlycykKKyAgICAgICAgcmVzdWx0LmFw
cGVuZChwYWlyLnNyYygpLCBwYWlyLmRzdCgpLCBBcmc6OndpZHRoQXJnKHBhaXIud2lkdGgoKSkp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIFZlY3RvcjxJbnN0PiBlbWl0U2h1ZmZsZSgKICAg
ICBWZWN0b3I8U2h1ZmZsZVBhaXI+IHBhaXJzLCBzdGQ6OmFycmF5PEFyZywgMj4gc2NyYXRjaGVz
LCBBcmc6OlR5cGUgdHlwZSwgVmFsdWUqIG9yaWdpbikKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckVtaXRTaHVmZmxlLmgJKHJldmlzaW9uIDE5NTE3NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNjYsNiArNjYsOSBAQCBwcml2YXRlOgogICAgIEFyZzo6V2lkdGggbV93aWR0aCB7
IEFyZzo6V2lkdGg4IH07CiB9OwogCisvLyBDcmVhdGUgYSBTaHVmZmxlIGluc3RydWN0aW9uLgor
SW5zdCBjcmVhdGVTaHVmZmxlKFZhbHVlKiBvcmlnaW4sIGNvbnN0IFZlY3RvcjxTaHVmZmxlUGFp
cj4mKTsKKwogLy8gUGVyZm9ybSBhIHNodWZmbGUgb2YgYSBnaXZlbiB0eXBlLiBUaGUgc2NyYXRj
aCBhcmd1bWVudCBpcyBtYW5kYXRvcnkuIFlvdSBzaG91bGQgcGFzcyBpdCBhcwogLy8gZm9sbG93
czogSWYgeW91IGtub3cgdGhhdCB5b3UgaGF2ZSBzY3JhdGNoIHJlZ2lzdGVycyBvciB0ZW1wb3Jh
cmllcyBhdmFpbGFibGUgLSB0aGF0IGlzLCB0aGV5J3JlCiAvLyByZWdpc3RlcnMgdGhhdCBhcmUg
bm90IG1lbnRpb25lZCBpbiB0aGUgc2h1ZmZsZSwgaGF2ZSB0aGUgc2FtZSB0eXBlIGFzIHRoZSBz
aHVmZmxlLCBhbmQgYXJlIG5vdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJGaXhPYnZpb3VzU3BpbGxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckZpeE9idmlvdXNTcGlsbHMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhPYnZpb3VzU3BpbGxzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDUxMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJGaXhPYnZpb3Vz
U3BpbGxzLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgor
I2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgor
I2luY2x1ZGUgIkIzSW5kZXhNYXAuaCIKKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCituYW1lc3BhY2Ug
eworCitib29sIHZlcmJvc2UgPSBmYWxzZTsKKworY2xhc3MgRml4T2J2aW91c1NwaWxscyB7Citw
dWJsaWM6CisgICAgRml4T2J2aW91c1NwaWxscyhDb2RlJiBjb2RlKQorICAgICAgICA6IG1fY29k
ZShjb2RlKQorICAgICAgICAsIG1fYXRIZWFkKGNvZGUuc2l6ZSgpKQorICAgIHsKKyAgICB9CisK
KyAgICB2b2lkIHJ1bigpCisgICAgeworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAg
IGRhdGFMb2coIkNvZGUgYmVmb3JlIGZpeE9idmlvdXNTcGlsbHM6XG4iLCBtX2NvZGUpOworICAg
ICAgICAKKyAgICAgICAgY29tcHV0ZUFsaWFzZXMoKTsKKyAgICAgICAgZml4Q29kZSgpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGNvbXB1dGVBbGlhc2VzKCkKKyAgICB7CisgICAgICAg
IG1fYXRIZWFkW21fY29kZVswXV0ud2FzVmlzaXRlZCA9IHRydWU7CisgICAgICAgIAorICAgICAg
ICBib29sIGNoYW5nZWQgPSB0cnVlOworICAgICAgICB3aGlsZSAoY2hhbmdlZCkgeworICAgICAg
ICAgICAgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKEJh
c2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7CisgICAgICAgICAgICAgICAgbV9ibG9jayA9IGJs
b2NrOworICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBtX2F0SGVhZFtibG9ja107CisgICAgICAg
ICAgICAgICAgaWYgKCFtX3N0YXRlLndhc1Zpc2l0ZWQpCisgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coIkV4ZWN1dGluZyBibG9jayAiLCAqbV9ibG9jaywgIjogIiwgbV9zdGF0ZSwg
IlxuIik7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZm9yIChtX2luc3RJbmRl
eCA9IDA7IG1faW5zdEluZGV4IDwgYmxvY2stPnNpemUoKTsgKyttX2luc3RJbmRleCkKKyAgICAg
ICAgICAgICAgICAgICAgZXhlY3V0ZUluc3QoKTsKKworICAgICAgICAgICAgICAgIGZvciAoQmFz
aWNCbG9jayogc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3NvckJsb2NrcygpKSB7CisgICAgICAg
ICAgICAgICAgICAgIFN0YXRlJiB0b1N0YXRlID0gbV9hdEhlYWRbc3VjY2Vzc29yXTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHRvU3RhdGUud2FzVmlzaXRlZCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNoYW5nZWQgfD0gdG9TdGF0ZS5tZXJnZShtX3N0YXRlKTsKKyAgICAgICAgICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0b1N0YXRlID0gbV9zdGF0ZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCisgICAgdm9pZCBmaXhDb2RlKCkKKyAgICB7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayog
YmxvY2sgOiBtX2NvZGUpIHsKKyAgICAgICAgICAgIG1fYmxvY2sgPSBibG9jazsKKyAgICAgICAg
ICAgIG1fc3RhdGUgPSBtX2F0SGVhZFtibG9ja107CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChtX3N0YXRlLndhc1Zpc2l0ZWQpOworCisgICAgICAgICAgICBmb3IgKG1faW5zdEluZGV4ID0g
MDsgbV9pbnN0SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK21faW5zdEluZGV4KSB7CisgICAgICAg
ICAgICAgICAgZml4SW5zdCgpOworICAgICAgICAgICAgICAgIGV4ZWN1dGVJbnN0KCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGV4ZWN1dGVJbnN0KCkKKyAg
ICB7CisgICAgICAgIEluc3QmIGluc3QgPSBtX2Jsb2NrLT5hdChtX2luc3RJbmRleCk7CisKKyAg
ICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCIgICAgRXhlY3V0aW5nICIs
IGluc3QsICI6ICIsIG1fc3RhdGUsICJcbiIpOworCisgICAgICAgIEluc3Q6OmZvckVhY2hEZWZX
aXRoRXh0cmFDbG9iYmVyZWRSZWdzPEFyZz4oCisgICAgICAgICAgICAmaW5zdCwgJmluc3QsCisg
ICAgICAgICAgICBbJl0gKGNvbnN0IEFyZyYgYXJnLCBBcmc6OlJvbGUsIEFyZzo6VHlwZSwgQXJn
OjpXaWR0aCkgeworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nKCIgICAgICAgIENsb2JiZXJpbmcgIiwgYXJnLCAiXG4iKTsKKyAgICAgICAg
ICAgICAgICBtX3N0YXRlLmNsb2JiZXIoYXJnKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAg
IHN3aXRjaCAoaW5zdC5vcGNvZGUpIHsKKyAgICAgICAgY2FzZSBNb3ZlOgorICAgICAgICAgICAg
aWYgKGluc3QuYXJnc1swXS5pc1NvbWVJbW0oKSkgeworICAgICAgICAgICAgICAgIGlmIChpbnN0
LmFyZ3NbMV0uaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5hZGRBbGlhcyhS
ZWdDb25zdChpbnN0LmFyZ3NbMV0ucmVnKCksIGluc3QuYXJnc1swXS52YWx1ZSgpKSk7CisgICAg
ICAgICAgICAgICAgZWxzZSBpZiAoaXNTcGlsbFNsb3QoaW5zdC5hcmdzWzFdKSkKKyAgICAgICAg
ICAgICAgICAgICAgbV9zdGF0ZS5hZGRBbGlhcyhTbG90Q29uc3QoaW5zdC5hcmdzWzFdLnN0YWNr
U2xvdCgpLCBpbnN0LmFyZ3NbMF0udmFsdWUoKSkpOworICAgICAgICAgICAgfSBlbHNlIGlmIChp
c1NwaWxsU2xvdChpbnN0LmFyZ3NbMF0pICYmIGluc3QuYXJnc1sxXS5pc1JlZygpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKE9wdGlvbmFsPGludDY0X3Q+IGNvbnN0YW50ID0gbV9zdGF0ZS5jb25z
dGFudEZvcihpbnN0LmFyZ3NbMF0pKQorICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLmFkZEFs
aWFzKFJlZ0NvbnN0KGluc3QuYXJnc1sxXS5yZWcoKSwgKmNvbnN0YW50KSk7CisgICAgICAgICAg
ICAgICAgbV9zdGF0ZS5hZGRBbGlhcygKKyAgICAgICAgICAgICAgICAgICAgUmVnU2xvdChpbnN0
LmFyZ3NbMV0ucmVnKCksIGluc3QuYXJnc1swXS5zdGFja1Nsb3QoKSwgUmVnU2xvdDo6QWxsQml0
cykpOworICAgICAgICAgICAgfSBlbHNlIGlmIChpbnN0LmFyZ3NbMF0uaXNSZWcoKSAmJiBpc1Nw
aWxsU2xvdChpbnN0LmFyZ3NbMV0pKSB7CisgICAgICAgICAgICAgICAgaWYgKE9wdGlvbmFsPGlu
dDY0X3Q+IGNvbnN0YW50ID0gbV9zdGF0ZS5jb25zdGFudEZvcihpbnN0LmFyZ3NbMF0pKQorICAg
ICAgICAgICAgICAgICAgICBtX3N0YXRlLmFkZEFsaWFzKFNsb3RDb25zdChpbnN0LmFyZ3NbMV0u
c3RhY2tTbG90KCksICpjb25zdGFudCkpOworICAgICAgICAgICAgICAgIG1fc3RhdGUuYWRkQWxp
YXMoCisgICAgICAgICAgICAgICAgICAgIFJlZ1Nsb3QoaW5zdC5hcmdzWzBdLnJlZygpLCBpbnN0
LmFyZ3NbMV0uc3RhY2tTbG90KCksIFJlZ1Nsb3Q6OkFsbEJpdHMpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTW92ZTMyOgorICAgICAgICAgICAg
aWYgKGluc3QuYXJnc1swXS5pc1NvbWVJbW0oKSkgeworICAgICAgICAgICAgICAgIGlmIChpbnN0
LmFyZ3NbMV0uaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5hZGRBbGlhcyhS
ZWdDb25zdChpbnN0LmFyZ3NbMV0ucmVnKCksIHN0YXRpY19jYXN0PHVpbnQzMl90PihpbnN0LmFy
Z3NbMF0udmFsdWUoKSkpKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChpc1NwaWxsU2xvdChp
bnN0LmFyZ3NbMV0pKQorICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLmFkZEFsaWFzKFNsb3RD
b25zdChpbnN0LmFyZ3NbMV0uc3RhY2tTbG90KCksIHN0YXRpY19jYXN0PHVpbnQzMl90PihpbnN0
LmFyZ3NbMF0udmFsdWUoKSkpKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNTcGlsbFNsb3Qo
aW5zdC5hcmdzWzBdKSAmJiBpbnN0LmFyZ3NbMV0uaXNSZWcoKSkgeworICAgICAgICAgICAgICAg
IGlmIChPcHRpb25hbDxpbnQ2NF90PiBjb25zdGFudCA9IG1fc3RhdGUuY29uc3RhbnRGb3IoaW5z
dC5hcmdzWzBdKSkKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5hZGRBbGlhcyhSZWdDb25z
dChpbnN0LmFyZ3NbMV0ucmVnKCksIHN0YXRpY19jYXN0PHVpbnQzMl90PigqY29uc3RhbnQpKSk7
CisgICAgICAgICAgICAgICAgbV9zdGF0ZS5hZGRBbGlhcygKKyAgICAgICAgICAgICAgICAgICAg
UmVnU2xvdChpbnN0LmFyZ3NbMV0ucmVnKCksIGluc3QuYXJnc1swXS5zdGFja1Nsb3QoKSwgUmVn
U2xvdDo6WkV4dDMyKSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGluc3QuYXJnc1swXS5pc1Jl
ZygpICYmIGlzU3BpbGxTbG90KGluc3QuYXJnc1sxXSkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
T3B0aW9uYWw8aW50NjRfdD4gY29uc3RhbnQgPSBtX3N0YXRlLmNvbnN0YW50Rm9yKGluc3QuYXJn
c1swXSkpCisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuYWRkQWxpYXMoU2xvdENvbnN0KGlu
c3QuYXJnc1sxXS5zdGFja1Nsb3QoKSwgc3RhdGljX2Nhc3Q8aW50MzJfdD4oKmNvbnN0YW50KSkp
OworICAgICAgICAgICAgICAgIG1fc3RhdGUuYWRkQWxpYXMoCisgICAgICAgICAgICAgICAgICAg
IFJlZ1Nsb3QoaW5zdC5hcmdzWzBdLnJlZygpLCBpbnN0LmFyZ3NbMV0uc3RhY2tTbG90KCksIFJl
Z1Nsb3Q6Ok1hdGNoMzIpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHZvaWQgZml4SW5zdCgpCisgICAgeworICAgICAgICBJbnN0JiBpbnN0ID0gbV9ibG9jay0+
YXQobV9pbnN0SW5kZXgpOworCisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0
YUxvZygiRml4aW5nIGluc3QgIiwgaW5zdCwgIjogIiwgbV9zdGF0ZSwgIlxuIik7CisKKyAgICAg
ICAgLy8gQ3JlYXRlIGEgY29weSBpbiBjYXNlIHdlIGludmFsaWRhdGUgdGhlIGluc3RydWN0aW9u
LiBUaGF0IGRvZXNuJ3QgaGFwcGVuIG9mdGVuLgorICAgICAgICBJbnN0IGluc3RDb3B5ID0gaW5z
dDsKKworICAgICAgICAvLyBUaGUgZ29hbCBpcyB0byByZXBsYWNlIHJlZmVyZW5jZXMgdG8gc3Rh
Y2sgc2xvdHMuIFdlIG9ubHkgY2FyZSBhYm91dCBlYXJseSB1c2VzLiBXZSBjYW4ndAorICAgICAg
ICAvLyBoYW5kbGUgVXNlRGVmcy4gV2UgY291bGQgdGVhY2ggdGhpcyB0byBoYW5kbGUgVXNlRGVm
cyBpZiB3ZSBpbnNlcnRlZCBhIHN0b3JlIGluc3RydWN0aW9uCisgICAgICAgIC8vIGFmdGVyIGFu
ZCB3ZSBwcm92ZWQgdGhhdCB0aGUgcmVnaXN0ZXIgYWxpYXNlZCB0byB0aGUgc3RhY2sgc2xvdCBk
aWVzIGhlcmUuIFdlIGNhbiBnZXQgdGhhdAorICAgICAgICAvLyBpbmZvcm1hdGlvbiBmcm9tIHRo
ZSBsaXZlbmVzcyBhbmFseXNpcy4gV2UgYWxzbyBjYW4ndCBoYW5kbGUgbGF0ZSB1c2VzLCBiZWNh
dXNlIHdlIGRvbid0CisgICAgICAgIC8vIGxvb2sgYXQgbGF0ZSBjbG9iYmVycyB3aGVuIGRvaW5n
IHRoaXMuCisgICAgICAgIGJvb2wgZGlkVGhpbmdzID0gZmFsc2U7CisgICAgICAgIGF1dG8gaGFu
ZGxlQXJnID0gWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSwgQXJnOjpX
aWR0aCB3aWR0aCkgeworICAgICAgICAgICAgaWYgKCFpc1NwaWxsU2xvdChhcmcpKQorICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmICghQXJnOjppc0Vhcmx5VXNlKHJvbGUp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmIChBcmc6OmlzQW55RGVm
KHJvbGUpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgLy8gVHJ5IHRvIGdldCBhIHJlZ2lzdGVyIGlmIGF0IGFsbCBwb3NzaWJsZS4KKyAgICAgICAg
ICAgIGlmIChjb25zdCBSZWdTbG90KiBhbGlhcyA9IG1fc3RhdGUuZ2V0UmVnU2xvdChhcmcuc3Rh
Y2tTbG90KCkpKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoICh3aWR0aCkgeworICAgICAgICAg
ICAgICAgIGNhc2UgQXJnOjpXaWR0aDY0OgorICAgICAgICAgICAgICAgICAgICBpZiAoYWxpYXMt
Pm1vZGUgIT0gUmVnU2xvdDo6QWxsQml0cykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nKCIgICAgUmVwbGFjaW5nICIsIGFyZywgIiB3aXRoICIsIGFsaWFzLT5yZWcs
ICJcbiIpOworICAgICAgICAgICAgICAgICAgICBhcmcgPSBUbXAoYWxpYXMtPnJlZyk7CisgICAg
ICAgICAgICAgICAgICAgIGRpZFRoaW5ncyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICBjYXNlIEFyZzo6V2lkdGgzMjoKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAg
UmVwbGFjaW5nICIsIGFyZywgIiB3aXRoICIsIGFsaWFzLT5yZWcsICIgKHN1YndpZHRoIGNhc2Up
XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgYXJnID0gVG1wKGFsaWFzLT5yZWcpOworICAgICAg
ICAgICAgICAgICAgICBkaWRUaGluZ3MgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gUmV2
ZXJ0IHRvIGltbWVkaWF0ZSBpZiB0aGF0IGRpZG4ndCB3b3JrLgorICAgICAgICAgICAgaWYgKGNv
bnN0IFNsb3RDb25zdCogYWxpYXMgPSBtX3N0YXRlLmdldFNsb3RDb25zdChhcmcuc3RhY2tTbG90
KCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coIiAgICBSZXBsYWNpbmcgIiwgYXJnLCAiIHdpdGggY29uc3RhbnQgIiwgYWxpYXMt
PmNvbnN0YW50LCAiXG4iKTsKKyAgICAgICAgICAgICAgICBpZiAoQXJnOjppc1ZhbGlkSW1tRm9y
bShhbGlhcy0+Y29uc3RhbnQpKQorICAgICAgICAgICAgICAgICAgICBhcmcgPSBBcmc6OmltbShh
bGlhcy0+Y29uc3RhbnQpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgYXJnID0gQXJnOjppbW02NChhbGlhcy0+Y29uc3RhbnQpOworICAgICAgICAgICAgICAgIGRp
ZFRoaW5ncyA9IHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
ICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgaW5zdC5mb3JFYWNoQXJnKGhhbmRsZUFyZyk7
CisgICAgICAgIGlmICghZGlkVGhpbmdzIHx8IGluc3QuaXNWYWxpZEZvcm0oKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIC8vIFdlIGludHJvZHVjZWQgc29tZXRoaW5n
IGludmFsaWQgYWxvbmcgdGhlIHdheS4gQmFjayB1cCBhbmQgY2FyZWZ1bGx5IGhhbmRsZSBlYWNo
IGFyZ3VtZW50LgorICAgICAgICBpbnN0ID0gaW5zdENvcHk7CisgICAgICAgIEFTU0VSVChpbnN0
LmlzVmFsaWRGb3JtKCkpOworICAgICAgICBpbnN0LmZvckVhY2hBcmcoCisgICAgICAgICAgICBb
Jl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIHR5cGUsIEFyZzo6V2lkdGgg
d2lkdGgpIHsKKyAgICAgICAgICAgICAgICBBcmcgYXJnQ29weSA9IGFyZzsKKyAgICAgICAgICAg
ICAgICBoYW5kbGVBcmcoYXJnLCByb2xlLCB0eXBlLCB3aWR0aCk7CisgICAgICAgICAgICAgICAg
aWYgKCFpbnN0LmlzVmFsaWRGb3JtKCkpCisgICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZ0Nv
cHk7CisgICAgICAgICAgICB9KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGJvb2wgaXNTcGls
bFNsb3QoY29uc3QgQXJnJiBhcmcpCisgICAgeworICAgICAgICByZXR1cm4gYXJnLmlzU3RhY2so
KSAmJiAhYXJnLnN0YWNrU2xvdCgpLT5pc0xvY2tlZCgpOworICAgIH0KKyAgICAKKyAgICBzdHJ1
Y3QgUmVnQ29uc3QgeworICAgICAgICBSZWdDb25zdCgpCisgICAgICAgIHsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgUmVnQ29uc3QoUmVnIHJlZywgaW50NjRfdCBjb25zdGFudCkKKyAg
ICAgICAgICAgIDogcmVnKHJlZykKKyAgICAgICAgICAgICwgY29uc3RhbnQoY29uc3RhbnQpCisg
ICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBj
b25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gISFyZWc7CisgICAgICAgIH0KKwor
ICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICAgICAgeworICAg
ICAgICAgICAgb3V0LnByaW50KHJlZywgIi0+IiwgY29uc3RhbnQpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBSZWcgcmVnOworICAgICAgICBpbnQ2NF90IGNvbnN0YW50IHsgMCB9Owor
ICAgIH07CisKKyAgICBzdHJ1Y3QgUmVnU2xvdCB7CisgICAgICAgIGVudW0gTW9kZSA6IGludDhf
dCB7CisgICAgICAgICAgICBBbGxCaXRzLAorICAgICAgICAgICAgWkV4dDMyLCAvLyBSZWdpc3Rl
ciBjb250YWlucyB6ZXJvLWV4dGVuZGVkIGNvbnRlbnRzIG9mIHN0YWNrIHNsb3QuCisgICAgICAg
ICAgICBNYXRjaDMyIC8vIExvdyAzMiBiaXRzIG9mIHJlZ2lzdGVyIG1hdGNoIGxvdyAzMiBiaXRz
IG9mIHN0YWNrIHNsb3QuCisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICBSZWdTbG90KCkK
KyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgUmVnU2xvdChSZWcgcmVnLCBTdGFja1Ns
b3QqIHNsb3QsIE1vZGUgbW9kZSkKKyAgICAgICAgICAgIDogc2xvdChzbG90KQorICAgICAgICAg
ICAgLCByZWcocmVnKQorICAgICAgICAgICAgLCBtb2RlKG1vZGUpCisgICAgICAgIHsKKyAgICAg
ICAgfQorCisgICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdAorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gc2xvdCAmJiByZWc7CisgICAgICAgIH0KKworICAgICAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAg
b3V0LnByaW50KHBvaW50ZXJEdW1wKHNsb3QpLCAiLT4iLCByZWcpOworICAgICAgICAgICAgc3dp
dGNoIChtb2RlKSB7CisgICAgICAgICAgICBjYXNlIEFsbEJpdHM6CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KCIoQWxsQml0cykiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgWkV4dDMyOgorICAgICAgICAgICAgICAgIG91dC5wcmludCgiKFpFeHQzMikiKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgTWF0Y2gzMjoKKyAgICAg
ICAgICAgICAgICBvdXQucHJpbnQoIihNYXRjaDMyKSIpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBTdGFja1Nsb3Qq
IHNsb3QgeyBudWxscHRyIH07CisgICAgICAgIFJlZyByZWc7CisgICAgICAgIE1vZGUgbW9kZSB7
IEFsbEJpdHMgfTsKKyAgICB9OworCisgICAgc3RydWN0IFNsb3RDb25zdCB7CisgICAgICAgIFNs
b3RDb25zdCgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFNsb3RDb25zdChTdGFj
a1Nsb3QqIHNsb3QsIGludDY0X3QgY29uc3RhbnQpCisgICAgICAgICAgICA6IHNsb3Qoc2xvdCkK
KyAgICAgICAgICAgICwgY29uc3RhbnQoY29uc3RhbnQpCisgICAgICAgIHsKKyAgICAgICAgfQor
CisgICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdAorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gc2xvdDsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBvdXQucHJpbnQocG9p
bnRlckR1bXAoc2xvdCksICItPiIsIGNvbnN0YW50KTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgU3RhY2tTbG90KiBzbG90IHsgbnVsbHB0ciB9OworICAgICAgICBpbnQ2NF90IGNvbnN0
YW50IHsgMCB9OworICAgIH07CisKKyAgICBzdHJ1Y3QgU3RhdGUgeworICAgICAgICB2b2lkIGFk
ZEFsaWFzKGNvbnN0IFJlZ0NvbnN0JiBuZXdBbGlhcykKKyAgICAgICAgeworICAgICAgICAgICAg
cmVnQ29uc3QuYXBwZW5kKG5ld0FsaWFzKTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIGFkZEFs
aWFzKGNvbnN0IFJlZ1Nsb3QmIG5ld0FsaWFzKQorICAgICAgICB7CisgICAgICAgICAgICByZWdT
bG90LmFwcGVuZChuZXdBbGlhcyk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBhZGRBbGlhcyhj
b25zdCBTbG90Q29uc3QmIG5ld0FsaWFzKQorICAgICAgICB7CisgICAgICAgICAgICBzbG90Q29u
c3QuYXBwZW5kKG5ld0FsaWFzKTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFJlZ0NvbnN0
KiBnZXRSZWdDb25zdChSZWcgcmVnKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBmb3Ig
KGNvbnN0IFJlZ0NvbnN0JiBhbGlhcyA6IHJlZ0NvbnN0KSB7CisgICAgICAgICAgICAgICAgaWYg
KGFsaWFzLnJlZyA9PSByZWcpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAmYWxpYXM7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisg
ICAgICAgIGNvbnN0IFJlZ1Nsb3QqIGdldFJlZ1Nsb3QoUmVnIHJlZykgY29uc3QKKyAgICAgICAg
eworICAgICAgICAgICAgZm9yIChjb25zdCBSZWdTbG90JiBhbGlhcyA6IHJlZ1Nsb3QpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoYWxpYXMucmVnID09IHJlZykKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuICZhbGlhczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgUmVnU2xvdCogZ2V0UmVnU2xvdChTdGFja1Ns
b3QqIHNsb3QpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoY29uc3QgUmVnU2xv
dCYgYWxpYXMgOiByZWdTbG90KSB7CisgICAgICAgICAgICAgICAgaWYgKGFsaWFzLnNsb3QgPT0g
c2xvdCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICZhbGlhczsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgY29uc3Qg
UmVnU2xvdCogZ2V0UmVnU2xvdChSZWcgcmVnLCBTdGFja1Nsb3QqIHNsb3QpIGNvbnN0CisgICAg
ICAgIHsKKyAgICAgICAgICAgIGZvciAoY29uc3QgUmVnU2xvdCYgYWxpYXMgOiByZWdTbG90KSB7
CisgICAgICAgICAgICAgICAgaWYgKGFsaWFzLnJlZyA9PSByZWcgJiYgYWxpYXMuc2xvdCA9PSBz
bG90KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gJmFsaWFzOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBT
bG90Q29uc3QqIGdldFNsb3RDb25zdChTdGFja1Nsb3QqIHNsb3QpIGNvbnN0CisgICAgICAgIHsK
KyAgICAgICAgICAgIGZvciAoY29uc3QgU2xvdENvbnN0JiBhbGlhcyA6IHNsb3RDb25zdCkgewor
ICAgICAgICAgICAgICAgIGlmIChhbGlhcy5zbG90ID09IHNsb3QpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAmYWxpYXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIE9wdGlvbmFsPGludDY0X3Q+IGNvbnN0YW50Rm9y
KGNvbnN0IEFyZyYgYXJnKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoYXJnLmlzUmVnKCkp
IHsKKyAgICAgICAgICAgICAgICBpZiAoY29uc3QgUmVnQ29uc3QqIGFsaWFzID0gZ2V0UmVnQ29u
c3QoYXJnLnJlZygpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFsaWFzLT5jb25zdGFu
dDsKKyAgICAgICAgICAgICAgICByZXR1cm4gTnVsbG9wdDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmIChhcmcuaXNTdGFjaygpKSB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnN0IFNs
b3RDb25zdCogYWxpYXMgPSBnZXRTbG90Q29uc3QoYXJnLnN0YWNrU2xvdCgpKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGFsaWFzLT5jb25zdGFudDsKKyAgICAgICAgICAgICAgICByZXR1
cm4gTnVsbG9wdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBOdWxsb3B0Owor
ICAgICAgICB9CisKKyAgICAgICAgdm9pZCBjbG9iYmVyKGNvbnN0IEFyZyYgYXJnKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAoYXJnLmlzUmVnKCkpIHsKKyAgICAgICAgICAgICAgICByZWdD
b25zdC5yZW1vdmVBbGxNYXRjaGluZygKKyAgICAgICAgICAgICAgICAgICAgWyZdIChjb25zdCBS
ZWdDb25zdCYgYWxpYXMpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGFsaWFzLnJlZyA9PSBhcmcucmVnKCk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgICAgIHJlZ1Nsb3QucmVtb3ZlQWxsTWF0Y2hpbmcoCisgICAgICAgICAgICAgICAgICAg
IFsmXSAoY29uc3QgUmVnU2xvdCYgYWxpYXMpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGFsaWFzLnJlZyA9PSBhcmcucmVnKCk7CisgICAgICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChhcmcuaXNTdGFjaygpKSB7CisgICAgICAgICAgICAgICAgc2xvdENvbnN0LnJlbW92ZUFs
bE1hdGNoaW5nKAorICAgICAgICAgICAgICAgICAgICBbJl0gKGNvbnN0IFNsb3RDb25zdCYgYWxp
YXMpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFsaWFzLnNsb3Qg
PT0gYXJnLnN0YWNrU2xvdCgpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
ICAgICByZWdTbG90LnJlbW92ZUFsbE1hdGNoaW5nKAorICAgICAgICAgICAgICAgICAgICBbJl0g
KGNvbnN0IFJlZ1Nsb3QmIGFsaWFzKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBhbGlhcy5zbG90ID09IGFyZy5zdGFja1Nsb3QoKTsKKyAgICAgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBib29sIG1lcmdlKGNv
bnN0IFN0YXRlJiBvdGhlcikKKyAgICAgICAgeworICAgICAgICAgICAgYm9vbCBjaGFuZ2VkID0g
ZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gISFyZWdDb25zdC5y
ZW1vdmVBbGxNYXRjaGluZygKKyAgICAgICAgICAgICAgICBbJl0gKFJlZ0NvbnN0JiBhbGlhcykg
LT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlZ0NvbnN0KiBvdGhlckFsaWFz
ID0gb3RoZXIuZ2V0UmVnQ29uc3QoYWxpYXMucmVnKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFvdGhlckFsaWFzKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChhbGlhcy5jb25zdGFudCAhPSBvdGhlckFsaWFzLT5jb25zdGFu
dCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIGNo
YW5nZWQgfD0gISFzbG90Q29uc3QucmVtb3ZlQWxsTWF0Y2hpbmcoCisgICAgICAgICAgICAgICAg
WyZdIChTbG90Q29uc3QmIGFsaWFzKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgY29u
c3QgU2xvdENvbnN0KiBvdGhlckFsaWFzID0gb3RoZXIuZ2V0U2xvdENvbnN0KGFsaWFzLnNsb3Qp
OworICAgICAgICAgICAgICAgICAgICBpZiAoIW90aGVyQWxpYXMpCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFsaWFzLmNvbnN0
YW50ICE9IG90aGVyQWxpYXMtPmNvbnN0YW50KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
ICAgICB9KTsKKworICAgICAgICAgICAgY2hhbmdlZCB8PSAhIXJlZ1Nsb3QucmVtb3ZlQWxsTWF0
Y2hpbmcoCisgICAgICAgICAgICAgICAgWyZdIChSZWdTbG90JiBhbGlhcykgLT4gYm9vbCB7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlZ1Nsb3QqIG90aGVyQWxpYXMgPSBvdGhlci5nZXRS
ZWdTbG90KGFsaWFzLnJlZywgYWxpYXMuc2xvdCk7CisgICAgICAgICAgICAgICAgICAgIGlmICgh
b3RoZXJBbGlhcykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgICAgICAgICBpZiAoYWxpYXMubW9kZSAhPSBSZWdTbG90OjpNYXRjaDMyICYmIGFsaWFz
Lm1vZGUgIT0gb3RoZXJBbGlhcy0+bW9kZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYWxp
YXMubW9kZSA9IFJlZ1Nsb3Q6Ok1hdGNoMzI7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFu
Z2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIHJldHVybiBj
aGFuZ2VkOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIG91dC5wcmludCgKKyAgICAgICAgICAgICAg
ICAie3JlZ0NvbnN0ID0gWyIsIGxpc3REdW1wKHJlZ0NvbnN0KSwgIl0sIHNsb3RDb25zdCA9IFsi
LCBsaXN0RHVtcChzbG90Q29uc3QpLAorICAgICAgICAgICAgICAgICJdLCByZWdTbG90ID0gWyIs
IGxpc3REdW1wKHJlZ1Nsb3QpLCAiXSwgd2FzVmlzaXRlZCA9ICIsIHdhc1Zpc2l0ZWQsICJ9Iik7
CisgICAgICAgIH0KKworICAgICAgICBWZWN0b3I8UmVnQ29uc3Q+IHJlZ0NvbnN0OworICAgICAg
ICBWZWN0b3I8U2xvdENvbnN0PiBzbG90Q29uc3Q7CisgICAgICAgIFZlY3RvcjxSZWdTbG90PiBy
ZWdTbG90OworICAgICAgICBib29sIHdhc1Zpc2l0ZWQgeyBmYWxzZSB9OworICAgIH07CisKKyAg
ICBDb2RlJiBtX2NvZGU7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgU3RhdGU+IG1fYXRIZWFk
OworICAgIFN0YXRlIG1fc3RhdGU7CisgICAgQmFzaWNCbG9jayogbV9ibG9jayB7IG51bGxwdHIg
fTsKKyAgICB1bnNpZ25lZCBtX2luc3RJbmRleCB7IDAgfTsKK307CisKK30gLy8gYW5vbnltb3Vz
IG5hbWVzcGFjZQorCit2b2lkIGZpeE9idmlvdXNTcGlsbHMoQ29kZSYgY29kZSkKK3sKKyAgICBQ
aGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgImZpeE9idmlvdXNTcGlsbHMiKTsKKworICAgIEZp
eE9idmlvdXNTcGlsbHMgZml4T2J2aW91c1NwaWxscyhjb2RlKTsKKyAgICBmaXhPYnZpb3VzU3Bp
bGxzLnJ1bigpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckZpeE9idmlvdXNTcGlsbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckZpeE9idmlvdXNTcGlsbHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4T2J2aW91c1NwaWxscy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIEFpckZpeE9idmlvdXNTcGlsbHNfaAorI2RlZmluZSBBaXJGaXhPYnZp
b3VzU3BpbGxzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKworLy8gVGhpcyBpcyBh
IGZvcndhcmQgZmxvdyBwaGFzZSB0aGF0IHRyYWNrcyBlcXVpdmFsZW5jZSBiZXR3ZWVuIHNwaWxs
cyBzbG90cyBhbmQgcmVnaXN0ZXJzLiBJdAorLy8gcmVtb3ZlcyBsb2FkcyBmcm9tIHNwaWxsIHNs
b3RzIGluIGNhc2VzIHdoZW4gdGhlIGNvbnRlbnRzIG9mIHRoZSBzcGlsbCBzbG90IGNhbiBiZSBm
b3VuZCBpbiAob3IKKy8vIGNvbXB1dGVkIGZyb20pIGEgcmVnaXN0ZXIuCit2b2lkIGZpeE9idmlv
dXNTcGlsbHMoQ29kZSYpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyRml4T2J2aW91c1NwaWxsc19o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4U3BpbGxTbG90WkRl
Zi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4U3Bp
bGxTbG90WkRlZi5oCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckZpeFNwaWxsU2xvdFpEZWYuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3OCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5k
ZWYgQWlyRml4U3BpbGxTbG90WkRlZl9oCi0jZGVmaW5lIEFpckZpeFNwaWxsU2xvdFpEZWZfaAot
Ci0jaW5jbHVkZSAiQWlyQ29kZS5oIgotI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgotI2lu
Y2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCi0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eyBuYW1lc3BhY2UgQWlyIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgSXNTcGlsbFNsb3Q+Ci12b2lk
IGZpeFNwaWxsU2xvdFpEZWYoQ29kZSYgY29kZSwgY29uc3QgSXNTcGlsbFNsb3QmIGlzU3BpbGxT
bG90KQotewotICAgIC8vIFdlIGNvdWxkIGhhdmUgaW50cm9kdWNlZCBaRGVmJ3MgdG8gU3RhY2tT
bG90cyB0aGF0IGFyZSB3aWRlciB0aGFuIHRoZSBkZWYuIEluIHRoYXQgY2FzZSwgd2UKLSAgICAv
LyBuZWVkIHRvIGVtaXQgY29kZSB0byB6ZXJvLWZpbGwgdGhlIHRvcCBiaXRzIG9mIHRoZSBTdGFj
a1Nsb3QuCi0gICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChjb2RlKTsKLSAgICBmb3IgKEJh
c2ljQmxvY2sqIGJsb2NrIDogY29kZSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRl
eCA9IDA7IGluc3RJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsraW5zdEluZGV4KSB7Ci0gICAgICAg
ICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7Ci0KLSAgICAgICAgICAgIGlu
c3QuZm9yRWFjaEFyZygKLSAgICAgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUg
cm9sZSwgQXJnOjpUeXBlLCBBcmc6OldpZHRoIHdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmICghQXJnOjppc1pEZWYocm9sZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlzU3RhY2soKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1NwaWxsU2xvdChh
cmcuc3RhY2tTbG90KCkpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgICAgICAgICBpZiAoYXJnLnN0YWNrU2xvdCgpLT5ieXRlU2l6ZSgpID09IEFyZzo6Ynl0
ZXMod2lkdGgpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAg
ICAgICAgICAgIC8vIEN1cnJlbnRseSB3ZSBvbmx5IGhhbmRsZSB0aGlzIHNpbXBsZSBjYXNlIGJl
Y2F1c2UgaXQncyB0aGUgb25seSBvbmUgdGhhdAotICAgICAgICAgICAgICAgICAgICAvLyBhcmlz
ZXM6IFpEZWYncyBhcmUgb25seSAzMi1iaXQgcmlnaHQgbm93LiBTbywgd2hlbiB3ZSBoaXQgdGhl
c2UKLSAgICAgICAgICAgICAgICAgICAgLy8gYXNzZXJ0aW9ucyBpdCBtZWFucyB0aGF0IHdlIG5l
ZWQgdG8gaW1wbGVtZW50IHRob3NlIG90aGVyIGtpbmRzIG9mIHplcm8KLSAgICAgICAgICAgICAg
ICAgICAgLy8gZmlsbHMuCi0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFyZy5z
dGFja1Nsb3QoKS0+Ynl0ZVNpemUoKSA9PSA4KTsKLSAgICAgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQod2lkdGggPT0gQXJnOjpXaWR0aDMyKTsKLQotICAgICAgICAgICAgICAgICAgICAv
LyBXZSByZWx5IG9uIHRoZSBmYWN0IHRoYXQgdGhlcmUgbXVzdCBiZSBzb21lIHdheSB0byBtb3Zl
IHplcm8gdG8gYSBtZW1vcnkKLSAgICAgICAgICAgICAgICAgICAgLy8gbG9jYXRpb24gd2l0aG91
dCBmaXJzdCBidXJuaW5nIGEgcmVnaXN0ZXIuIE9uIEFSTSwgd2Ugd291bGQgZG8gdGhpcyB1c2lu
ZwotICAgICAgICAgICAgICAgICAgICAvLyB6ci4KLSAgICAgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoaXNWYWxpZEZvcm0oTW92ZTMyLCBBcmc6OkltbSwgQXJnOjpTdGFjaykpOwotICAg
ICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KAotICAgICAgICAgICAgICAgICAg
ICAgICAgaW5zdEluZGV4ICsgMSwgTW92ZTMyLCBpbnN0Lm9yaWdpbiwgQXJnOjppbW0oMCksIGFy
Zy53aXRoT2Zmc2V0KDQpKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgfQotICAgICAg
ICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7Ci0gICAgfQotfQotCi19IH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMzo6QWlyCi0KLSNlbmRpZiAvLyBBaXJGaXhTcGlsbFNsb3RaRGVmX2gKLQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAJKHJl
dmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJh
dGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNSArMzEsMTggQEAKICNpbmNsdWRlICJBaXJB
bGxvY2F0ZVN0YWNrLmgiCiAjaW5jbHVkZSAiQWlyQ29kZS5oIgogI2luY2x1ZGUgIkFpckVsaW1p
bmF0ZURlYWRDb2RlLmgiCisjaW5jbHVkZSAiQWlyRml4T2J2aW91c1NwaWxscy5oIgogI2luY2x1
ZGUgIkFpckZpeFBhcnRpYWxSZWdpc3RlclN0YWxscy5oIgogI2luY2x1ZGUgIkFpckdlbmVyYXRp
b25Db250ZXh0LmgiCiAjaW5jbHVkZSAiQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCIKICNpbmNsdWRl
ICJBaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5oIgorI2luY2x1ZGUgIkFpckxvZ1JlZ2lz
dGVyUHJlc3N1cmUuaCIKICNpbmNsdWRlICJBaXJMb3dlckFmdGVyUmVnQWxsb2MuaCIKICNpbmNs
dWRlICJBaXJMb3dlck1hY3Jvcy5oIgogI2luY2x1ZGUgIkFpck9wY29kZVV0aWxzLmgiCiAjaW5j
bHVkZSAiQWlyT3B0aW1pemVCbG9ja09yZGVyLmgiCiAjaW5jbHVkZSAiQWlyUmVwb3J0VXNlZFJl
Z2lzdGVycy5oIgorI2luY2x1ZGUgIkFpclNjYXZlbmdlUmVnaXN0ZXJzLmgiCiAjaW5jbHVkZSAi
QWlyU2ltcGxpZnlDRkcuaCIKICNpbmNsdWRlICJBaXJTcGlsbEV2ZXJ5dGhpbmcuaCIKICNpbmNs
dWRlICJBaXJWYWxpZGF0ZS5oIgpAQCAtODEsOSArODQsMjUgQEAgdm9pZCBwcmVwYXJlRm9yR2Vu
ZXJhdGlvbihDb2RlJiBjb2RlKQogICAgIC8vIEZvciBkZWJ1Z2dpbmcsIHlvdSBjYW4gdXNlIHNw
aWxsRXZlcnl0aGluZygpIHRvIHB1dCBldmVyeXRoaW5nIHRvIHRoZSBzdGFjayBiZXR3ZWVuIGVh
Y2ggSW5zdC4KICAgICBpZiAoT3B0aW9uczo6YWlyU3BpbGxzRXZlcnl0aGluZygpKQogICAgICAg
ICBzcGlsbEV2ZXJ5dGhpbmcoY29kZSk7Ci0gICAgZWxzZQorICAgIGVsc2UgaWYgKGNvZGUuZW5h
YmxlUkNSUygpKSB7CisgICAgICAgIG9uZVBhc3NJUkMoY29kZSk7CisKKyAgICAgICAgaWYgKE9w
dGlvbnM6OmxvZ0FpclJlZ2lzdGVyUHJlc3N1cmUoKSkgeworICAgICAgICAgICAgZGF0YUxvZygi
UmVnaXN0ZXIgcHJlc3N1cmUgYWZ0ZXIgb25lIHBhc3Mgb2YgSVJDOlxuIik7CisgICAgICAgICAg
ICBsb2dSZWdpc3RlclByZXNzdXJlKGNvZGUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBzY2F2ZW5nZVJlZ2lzdGVycyhjb2RlKTsKKyAgICB9IGVsc2UKICAgICAgICAgaXRlcmF0ZWRS
ZWdpc3RlckNvYWxlc2NpbmcoY29kZSk7CiAKKyAgICBpZiAoT3B0aW9uczo6bG9nQWlyUmVnaXN0
ZXJQcmVzc3VyZSgpKSB7CisgICAgICAgIGRhdGFMb2coIlJlZ2lzdGVyIHByZXNzdXJlIGFmdGVy
IHJlZ2lzdGVyIGFsbG9jYXRpb246XG4iKTsKKyAgICAgICAgbG9nUmVnaXN0ZXJQcmVzc3VyZShj
b2RlKTsKKyAgICB9CisKKyAgICBmaXhPYnZpb3VzU3BpbGxzKGNvZGUpOworCiAgICAgbG93ZXJB
ZnRlclJlZ0FsbG9jKGNvZGUpOwogCiAgICAgLy8gUHJpb3IgdG8gdGhpcyBwb2ludCB0aGUgcHJv
bG9ndWUgYW5kIGVwaWxvZ3VlIGlzIGltcGxpY2l0LiBUaGlzIG1ha2VzIGl0IGV4cGxpY2l0LiBJ
dCBhbHNvCkBAIC0xMzIsNiArMTUxLDE3IEBAIHZvaWQgZ2VuZXJhdGUoQ29kZSYgY29kZSwgQ0Nh
bGxIZWxwZXJzJiAKICAgICBpZiAoY29kZS5mcmFtZVNpemUoKSkKICAgICAgICAgaml0LmFkZFB0
cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtY29kZS5mcmFtZVNpemUoKSksIE1hY3JvQXNz
ZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKKyAgICBhdXRvIGFyZ0ZvciA9IFsmXSAo
Y29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgZW50cnkpIC0+IENDYWxsSGVscGVyczo6QWRkcmVzcyB7
CisgICAgICAgIHJldHVybiBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIGVudHJ5Lm9mZnNldCgpKTsKKyAgICB9OworICAgIAorICAgIGZvciAoY29uc3Qg
UmVnaXN0ZXJBdE9mZnNldCYgZW50cnkgOiBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlcnMoKSkgewor
ICAgICAgICBpZiAoZW50cnkucmVnKCkuaXNHUFIoKSkKKyAgICAgICAgICAgIGppdC5zdG9yZVB0
cihlbnRyeS5yZWcoKS5ncHIoKSwgYXJnRm9yKGVudHJ5KSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGppdC5zdG9yZURvdWJsZShlbnRyeS5yZWcoKS5mcHIoKSwgYXJnRm9yKGVudHJ5KSk7
CisgICAgfQorCiAgICAgR2VuZXJhdGlvbkNvbnRleHQgY29udGV4dDsKICAgICBjb250ZXh0LmNv
ZGUgPSAmY29kZTsKICAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBDQ2FsbEhlbHBlcnM6OkxhYmVs
PiBibG9ja0xhYmVscyhjb2RlLnNpemUoKSk7CkBAIC0xNjIsOSArMTkyLDE1IEBAIHZvaWQgZ2Vu
ZXJhdGUoQ29kZSYgY29kZSwgQ0NhbGxIZWxwZXJzJiAKICAgICAgICAgaWYgKGlzUmV0dXJuKGJs
b2NrLT5sYXN0KCkub3Bjb2RlKSkgewogICAgICAgICAgICAgLy8gV2UgY3VycmVudGx5IGRvbid0
IHJlcHJlc2VudCB0aGUgZnVsbCBwcm9sb2d1ZS9lcGlsb2d1ZSBpbiBBaXIsIHNvIHdlIG5lZWQg
dG8KICAgICAgICAgICAgIC8vIGhhdmUgdGhpcyBvdmVycmlkZS4KLSAgICAgICAgICAgIGlmIChj
b2RlLmZyYW1lU2l6ZSgpKQorICAgICAgICAgICAgaWYgKGNvZGUuZnJhbWVTaXplKCkpIHsKKyAg
ICAgICAgICAgICAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5IDogY29kZS5j
YWxsZWVTYXZlUmVnaXN0ZXJzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVudHJ5LnJl
ZygpLmlzR1BSKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihhcmdGb3Io
ZW50cnkpLCBlbnRyeS5yZWcoKS5ncHIoKSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkRG91YmxlKGFyZ0ZvcihlbnRyeSksIGVudHJ5
LnJlZygpLmZwcigpKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaml0LmVt
aXRGdW5jdGlvbkVwaWxvZ3VlKCk7Ci0gICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB9IGVs
c2UKICAgICAgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWVXaXRoRW1wdHlGcmFt
ZSgpOwogICAgICAgICAgICAgaml0LnJldCgpOwogICAgICAgICAgICAgY29udGludWU7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxl
ZVNhdmVzLmNwcAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5
LDYgQEAKICNpZiBFTkFCTEUoQjNfSklUKQogCiAjaW5jbHVkZSAiQWlyQ29kZS5oIgotI2luY2x1
ZGUgIkFpckluc2VydGlvblNldC5oIgogI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiQWlyUGhhc2VTY29wZS5oIgogCkBAIC03MSwzNCArNzAsNiBAQCB2b2lkIGhhbmRsZUNh
bGxlZVNhdmVzKENvZGUmIGNvZGUpCiAgICAgLy8gVGhpcyBpcyBhIGJpdCB3ZWlyZCBzaW5jZSB3
ZSBjb3VsZCBoYXZlIGFscmVhZHkgcGlubmVkIGEgZGlmZmVyZW50IHN0YWNrIHNsb3QgdG8gdGhp
cwogICAgIC8vIGFyZWEuIEFsc28sIG91ciBydW50aW1lIGRvZXMgbm90IHJlcXVpcmUgdXMgdG8g
cGluIHRoZSBzYXZlcyBhcmVhLiBNYXliZSB3ZSBzaG91bGRuJ3QgcGluIGl0PwogICAgIHNhdmVz
QXJlYS0+c2V0T2Zmc2V0RnJvbUZQKC1ieXRlU2l6ZSk7Ci0KLSAgICBhdXRvIGFyZ0ZvciA9IFsm
XSAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgZW50cnkpIC0+IEFyZyB7Ci0gICAgICAgIHJldHVy
biBBcmc6OnN0YWNrKHNhdmVzQXJlYSwgZW50cnkub2Zmc2V0KCkgKyBieXRlU2l6ZSk7Ci0gICAg
fTsKLQotICAgIEluc2VydGlvblNldCBpbnNlcnRpb25TZXQoY29kZSk7Ci0gICAgCi0gICAgLy8g
Rmlyc3QgaW5zZXJ0IHNhdmluZyBjb2RlIGluIHRoZSBwcm9sb2d1ZS4KLSAgICBmb3IgKGNvbnN0
IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5IDogY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpIHsK
LSAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgKLSAgICAgICAgICAgIDAsIGVudHJ5LnJlZygp
LmlzR1BSKCkgPyBNb3ZlIDogTW92ZURvdWJsZSwgY29kZVswXS0+YXQoMCkub3JpZ2luLAotICAg
ICAgICAgICAgVG1wKGVudHJ5LnJlZygpKSwgYXJnRm9yKGVudHJ5KSk7Ci0gICAgfQotICAgIGlu
c2VydGlvblNldC5leGVjdXRlKGNvZGVbMF0pOwotCi0gICAgLy8gTm93IGluc2VydCByZXN0b3Jl
IGNvZGUgYXQgZXBpbG9ndWVzLgotICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7
Ci0gICAgICAgIEluc3QmIGxhc3QgPSBibG9jay0+bGFzdCgpOwotICAgICAgICBpZiAoIWlzUmV0
dXJuKGxhc3Qub3Bjb2RlKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGZvciAo
Y29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgZW50cnkgOiBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlcnMo
KSkgewotICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgKLSAgICAgICAgICAgICAgICBi
bG9jay0+c2l6ZSgpIC0gMSwgZW50cnkucmVnKCkuaXNHUFIoKSA/IE1vdmUgOiBNb3ZlRG91Ymxl
LCBsYXN0Lm9yaWdpbiwKLSAgICAgICAgICAgICAgICBhcmdGb3IoZW50cnkpLCBUbXAoZW50cnku
cmVnKCkpKTsKLSAgICAgICAgfQotICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7
Ci0gICAgfQogfQogCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAkocmV2aXNpb24gMTk1MTc2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2
Miw2ICsxNjIsNyBAQCBwdWJsaWM6CiAgICAgLy8KICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGF1
dG8tZ2VuZXJhdGVkIGJ5IG9wY29kZV9nZW5lcmF0b3IucmIuCiAgICAgYm9vbCBhZG1pdHNTdGFj
ayh1bnNpZ25lZCBhcmdJbmRleCk7CisgICAgYm9vbCBhZG1pdHNTdGFjayhBcmcmKTsKIAogICAg
IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGluc3RydWN0aW9uIGNhbiBoYXZlIGFueSBlZmZlY3Rz
IG90aGVyIHRoYW4gY29udHJvbCBmbG93IG9yIGFyZ3VtZW50cy4KICAgICBib29sIGhhc05vbkFy
Z05vbkNvbnRyb2xFZmZlY3RzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0Fpckluc3RJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJJbnN0SW5saW5lcy5oCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1OCw2
ICsxNTgsMTEgQEAgaW5saW5lIHZvaWQgSW5zdDo6cmVwb3J0VXNlZFJlZ2lzdGVycyhjbwogICAg
IGFyZ3NbMF0uc3BlY2lhbCgpLT5yZXBvcnRVc2VkUmVnaXN0ZXJzKCp0aGlzLCB1c2VkUmVnaXN0
ZXJzKTsKIH0KIAoraW5saW5lIGJvb2wgSW5zdDo6YWRtaXRzU3RhY2soQXJnJiBhcmcpCit7Cisg
ICAgcmV0dXJuIGFkbWl0c1N0YWNrKCZhcmcgLSAmYXJnc1swXSk7Cit9CisKIGlubGluZSBib29s
IGlzU2hpZnRWYWxpZChjb25zdCBJbnN0JiBpbnN0KQogewogI2lmIENQVShYODYpIHx8IENQVShY
ODZfNjQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RNYXAuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RNYXAuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdE1hcC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEFpckluc3RNYXBfaAorI2RlZmluZSBBaXJJ
bnN0TWFwX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJCYXNpY0Jsb2Nr
LmgiCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkIzSW5kZXhNYXAuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorY2xhc3MgSW5zdE1hcCB7CitwdWJsaWM6CisgICAgSW5zdE1hcChDb2RlJiBj
b2RlKQorICAgICAgICA6IG1fbWFwKGNvZGUuc2l6ZSgpKQorICAgIHsKKyAgICAgICAgZm9yIChC
YXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpCisgICAgICAgICAgICBtX21hcFtibG9ja10ucmVzaXpl
KGJsb2NrLT5zaXplKCkpOworICAgIH0KKworICAgIFQmIGF0KEJhc2ljQmxvY2sqIGJsb2NrLCB1
bnNpZ25lZCBpbnN0SW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gbV9tYXBbYmxvY2tdW2lu
c3RJbmRleF07CisgICAgfQorCisgICAgY29uc3QgVCYgYXQoQmFzaWNCbG9jayogYmxvY2ssIHVu
c2lnbmVkIGluc3RJbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBjb25zdF9jYXN0
PEluc3RNYXAqPih0aGlzKS0+Z2V0KGJsb2NrLCBpbnN0SW5kZXgpOworICAgIH0KKyAgICAKK3By
aXZhdGU6CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgVmVjdG9yPFQ+PiBtX21hcDsKK307CisK
K30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCisKKyNlbmRpZiAvLyBBaXJJbnN0TWFwX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVz
Y2luZy5jcHAJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw3ICsyOSw2IEBACiAjaWYgRU5BQkxFKEIzX0pJVCkKIAogI2luY2x1ZGUgIkFpckNvZGUuaCIK
LSNpbmNsdWRlICJBaXJGaXhTcGlsbFNsb3RaRGVmLmgiCiAjaW5jbHVkZSAiQWlySW5zZXJ0aW9u
U2V0LmgiCiAjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKICNpbmNsdWRlICJBaXJMaXZlbmVz
cy5oIgpAQCAtMjMzLDggKzIzMiw2IEBAIHByb3RlY3RlZDoKIAogICAgICAgICBpZiAobV9zcGls
bGVkVG1wcy5pc0VtcHR5KCkpCiAgICAgICAgICAgICBtX2NvYWxlc2NlZFRtcHNBdFNwaWxsLmNs
ZWFyKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fY29sb3JlZFRtcC5jbGVhcigpOwog
ICAgIH0KIAogcHJpdmF0ZToKQEAgLTEwNTksOSArMTA1NiwxNSBAQCBwcml2YXRlOgogCiBjbGFz
cyBJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZyB7CiBwdWJsaWM6Ci0gICAgSXRlcmF0ZWRSZWdp
c3RlckNvYWxlc2NpbmcoQ29kZSYgY29kZSkKKyAgICBlbnVtIE1vZGUgeworICAgICAgICBDbGFz
c2ljLAorICAgICAgICBPbmVQYXNzCisgICAgfTsKKyAgICAKKyAgICBJdGVyYXRlZFJlZ2lzdGVy
Q29hbGVzY2luZyhDb2RlJiBjb2RlLCBNb2RlIG1vZGUpCiAgICAgICAgIDogbV9jb2RlKGNvZGUp
CiAgICAgICAgICwgbV91c2VDb3VudHMoY29kZSkKKyAgICAgICAgLCBtX21vZGUobW9kZSkKICAg
ICB7CiAgICAgfQogCkBAIC0xMTA0LDcgKzExMDcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
bV90bXBXaWR0aC5yZWNvbXB1dGUobV9jb2RlKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAg
Q29sb3JpbmdBbGxvY2F0b3I8dHlwZT4gYWxsb2NhdG9yKG1fY29kZSwgbV90bXBXaWR0aCwgbV91
c2VDb3VudHMsIHVuc3BpbGxhYmxlVG1wcyk7Ci0gICAgICAgICAgICBpZiAoIWFsbG9jYXRvci5y
ZXF1aXJlc1NwaWxsaW5nKCkpIHsKKyAgICAgICAgICAgIGlmICghYWxsb2NhdG9yLnJlcXVpcmVz
U3BpbGxpbmcoKSB8fCBtX21vZGUgPT0gT25lUGFzcykgewogICAgICAgICAgICAgICAgIGFzc2ln
blJlZ2lzdGVyc1RvVG1wKGFsbG9jYXRvcik7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgfQpAQCAtMTExNSw2ICsxMTE4LDEwIEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8
QXJnOjpUeXBlIHR5cGU+CiAgICAgdm9pZCBhc3NpZ25SZWdpc3RlcnNUb1RtcChjb25zdCBDb2xv
cmluZ0FsbG9jYXRvcjx0eXBlPiYgYWxsb2NhdG9yKQogICAgIHsKKyAgICAgICAgSGFzaFNldDxU
bXA+IHNwaWxsZWQ7CisgICAgICAgIGZvciAoVG1wIHRtcCA6IGFsbG9jYXRvci5zcGlsbGVkVG1w
cygpKQorICAgICAgICAgICAgc3BpbGxlZC5hZGQodG1wKTsKKwogICAgICAgICBmb3IgKEJhc2lj
QmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7CiAgICAgICAgICAgICAvLyBHaXZlIFRtcCBhIHZhbGlk
IHJlZ2lzdGVyLgogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSAwOyBpbnN0
SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK2luc3RJbmRleCkgewpAQCAtMTEyNCwxMSArMTEzMSwx
MSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIGNvbXBsZXRlIHJlZ2lzdGVyIGFsbG9j
YXRpb24uIFNvLCB3ZSByZWNvcmQgdGhpcyBiZWZvcmUgc3RhcnRpbmcuCiAgICAgICAgICAgICAg
ICAgYm9vbCBtYXlCZUNvYWxlc2NhYmxlID0gYWxsb2NhdG9yLm1heUJlQ29hbGVzY2FibGUoaW5z
dCk7CiAKLSAgICAgICAgICAgICAgICAvLyBPbiBYODZfNjQsIE1vdmUzMiBpcyBjaGVhcGVyIGlm
IHdlIGtub3cgdGhhdCBpdCdzIGVxdWl2YWxlbnQgdG8gYSBNb3ZlLiBJdCdzCisgICAgICAgICAg
ICAgICAgLy8gTW92ZTMyIGlzIGNoZWFwZXIgaWYgd2Uga25vdyB0aGF0IGl0J3MgZXF1aXZhbGVu
dCB0byBhIE1vdmUuIEl0J3MKICAgICAgICAgICAgICAgICAvLyBlcXVpdmFsZW50IGlmIHRoZSBk
ZXN0aW5hdGlvbidzIGhpZ2ggYml0cyBhcmUgbm90IG9ic2VydmFibGUgb3IgaWYgdGhlIHNvdXJj
ZSdzIGhpZ2gKICAgICAgICAgICAgICAgICAvLyBiaXRzIGFyZSBhbGwgemVyby4gTm90ZSB0aGF0
IHdlIGRvbid0IGhhdmUgdGhlIG9wcG9zaXRlIG9wdGltaXphdGlvbiBmb3Igb3RoZXIKICAgICAg
ICAgICAgICAgICAvLyBhcmNoaXRlY3R1cmVzLCB3aGljaCBtYXkgcHJlZmVyIE1vdmUgb3ZlciBN
b3ZlMzIsIGJlY2F1c2UgTW92ZSBpcyBjYW5vbmljYWwgYWxyZWFkeS4KLSAgICAgICAgICAgICAg
ICBpZiAodHlwZSA9PSBBcmc6OkdQICYmIG9wdGltaXplRm9yWDg2XzY0KCkgJiYgaW5zdC5vcGNv
ZGUgPT0gTW92ZQorICAgICAgICAgICAgICAgIGlmICh0eXBlID09IEFyZzo6R1AgJiYgaW5zdC5v
cGNvZGUgPT0gTW92ZQogICAgICAgICAgICAgICAgICAgICAmJiBpbnN0LmFyZ3NbMF0uaXNUbXAo
KSAmJiBpbnN0LmFyZ3NbMV0uaXNUbXAoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAobV90
bXBXaWR0aC51c2VXaWR0aChpbnN0LmFyZ3NbMV0udG1wKCkpIDw9IEFyZzo6V2lkdGgzMgogICAg
ICAgICAgICAgICAgICAgICAgICAgfHwgbV90bXBXaWR0aC5kZWZXaWR0aChpbnN0LmFyZ3NbMF0u
dG1wKCkpIDw9IEFyZzo6V2lkdGgzMikKQEAgLTExMzYsNyArMTE0Myw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgaW5zdC5mb3JFYWNoVG1wRmFzdChb
Jl0gKFRtcCYgdG1wKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSB8fCB0
bXAuaXNHUCgpID09ICh0eXBlICE9IEFyZzo6R1ApKQorICAgICAgICAgICAgICAgICAgICBpZiAo
dG1wLmlzUmVnKCkgfHwgdG1wLmlzR1AoKSA9PSAodHlwZSAhPSBBcmc6OkdQKSB8fCBzcGlsbGVk
LmNvbnRhaW5zKHRtcCkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAg
ICAgICAgICAgICAgICAgVG1wIGFsaWFzVG1wID0gYWxsb2NhdG9yLmdldEFsaWFzKHRtcCk7CkBA
IC0xMTY4LDcgKzExNzUsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgYWRkU3BpbGxBbmRGaWxsKGNv
bnN0IENvbG9yaW5nQWxsb2NhdG9yPHR5cGU+JiBhbGxvY2F0b3IsIEhhc2hTZXQ8dW5zaWduZWQ+
JiB1bnNwaWxsYWJsZVRtcHMpCiAgICAgewogICAgICAgICBIYXNoTWFwPFRtcCwgU3RhY2tTbG90
Kj4gc3RhY2tTbG90czsKLSAgICAgICAgdW5zaWduZWQgbmV3U3RhY2tTbG90VGhyZXNob2xkID0g
bV9jb2RlLnN0YWNrU2xvdHMoKS5zaXplKCk7CiAgICAgICAgIGZvciAoVG1wIHRtcCA6IGFsbG9j
YXRvci5zcGlsbGVkVG1wcygpKSB7CiAgICAgICAgICAgICAvLyBBbGwgdGhlIHNwaWxsZWQgdmFs
dWVzIGJlY29tZSB1bnNwaWxsYWJsZS4KICAgICAgICAgICAgIHVuc3BpbGxhYmxlVG1wcy5hZGQo
QWJzb2x1dGVUbXBNYXBwZXI8dHlwZT46OmFic29sdXRlSW5kZXgodG1wKSk7CkBAIC0xMjAyLDE2
ICsxMjA4LDE5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAg
ICAgLy8gVHJ5IHRvIHJlcGxhY2UgdGhlIHJlZ2lzdGVyIHVzZSBieSBtZW1vcnkgdXNlIHdoZW4g
cG9zc2libGUuCi0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluc3Qu
YXJncy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgICAgICBBcmcmIGFyZyA9IGluc3Qu
YXJnc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFyZy5pc1RtcCgpICYmIGFyZy50eXBl
KCkgPT0gdHlwZSAmJiAhYXJnLmlzUmVnKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1
dG8gc3RhY2tTbG90RW50cnkgPSBzdGFja1Nsb3RzLmZpbmQoYXJnLnRtcCgpKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChzdGFja1Nsb3RFbnRyeSAhPSBzdGFja1Nsb3RzLmVuZCgpICYm
IGluc3QuYWRtaXRzU3RhY2soaSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcg
PSBBcmc6OnN0YWNrKHN0YWNrU2xvdEVudHJ5LT52YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGlkU3BpbGwgPSB0cnVlOworICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaEFy
ZygKKyAgICAgICAgICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlLCBBcmc6OlR5
cGUgYXJnVHlwZSwgQXJnOjpXaWR0aCB3aWR0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGFyZy5pc1RtcCgpICYmIGFyZ1R5cGUgPT0gdHlwZSAmJiAhYXJnLmlzUmVnKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHN0YWNrU2xvdEVudHJ5ID0gc3RhY2tTbG90
cy5maW5kKGFyZy50bXAoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNr
U2xvdEVudHJ5ICE9IHN0YWNrU2xvdHMuZW5kKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJiYgaW5zdC5hZG1pdHNTdGFjayhhcmcpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YWNrU2xvdEVudHJ5LT52YWx1ZS0+ZW5zdXJlU2l6ZSgKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlTW92ZTMySWZEaWRTcGlsbCA/IDQgOiBBcmc6
OmJ5dGVzKHdpZHRoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IEFy
Zzo6c3RhY2soc3RhY2tTbG90RW50cnktPnZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGlkU3BpbGwgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSk7CiAKICAgICAgICAgICAgICAgICBp
ZiAoZGlkU3BpbGwgJiYgZm9yY2VNb3ZlMzJJZkRpZFNwaWxsKQogICAgICAgICAgICAgICAgICAg
ICBpbnN0Lm9wY29kZSA9IE1vdmUzMjsKQEAgLTEyNjIsMTcgKzEyNzEsMTIgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotCi0gICAgICAg
IGZpeFNwaWxsU2xvdFpEZWYoCi0gICAgICAgICAgICBtX2NvZGUsCi0gICAgICAgICAgICBbJl0g
KFN0YWNrU2xvdCogc3RhY2tTbG90KSAtPiBib29sIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
c3RhY2tTbG90LT5pbmRleCgpID49IG5ld1N0YWNrU2xvdFRocmVzaG9sZDsKLSAgICAgICAgICAg
IH0pOwogICAgIH0KIAogICAgIENvZGUmIG1fY29kZTsKICAgICBUbXBXaWR0aCBtX3RtcFdpZHRo
OwogICAgIFVzZUNvdW50czxUbXA+IG1fdXNlQ291bnRzOworICAgIE1vZGUgbV9tb2RlOwogICAg
IHVuc2lnbmVkIG1fbnVtSXRlcmF0aW9ucyB7IDAgfTsKIH07CiAKQEAgLTEyODIsNyArMTI4Niwx
NSBAQCB2b2lkIGl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nKENvZGUmIGNvCiB7CiAgICAgUGhh
c2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJpdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZyIpOwog
Ci0gICAgSXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcgaXRlcmF0ZWRSZWdpc3RlckNvYWxlc2Np
bmcoY29kZSk7CisgICAgSXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcgaXRlcmF0ZWRSZWdpc3Rl
ckNvYWxlc2NpbmcoY29kZSwgSXRlcmF0ZWRSZWdpc3RlckNvYWxlc2Npbmc6OkNsYXNzaWMpOwor
ICAgIGl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLnJ1bigpOworfQorCit2b2lkIG9uZVBhc3NJ
UkMoQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgIm9uZVBh
c3NJUkMiKTsKKworICAgIEl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nIGl0ZXJhdGVkUmVnaXN0
ZXJDb2FsZXNjaW5nKGNvZGUsIEl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nOjpPbmVQYXNzKTsK
ICAgICBpdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5ydW4oKTsKIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySXRlcmF0ZWRSZWdp
c3RlckNvYWxlc2NpbmcuaAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiw2ICszNiwxMCBAQCBjbGFzcyBDb2RlOwogLy8gaHR0cDovL3d3dy5jcy5jbXUuZWR1
L2Fmcy9jcy9hY2FkZW1pYy9jbGFzcy8xNTc0NS1zMDcvd3d3L3BhcGVycy9nZW9yZ2UucGRmCiB2
b2lkIGl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nKENvZGUmKTsKIAorLy8gVGhpcyBpcyBhIG1v
ZGlmaWVkIHZlcnNpb24gb2YgdGhlIGFsZ29yaXRobSB0aGF0IHBlcmZvcm1zIGp1c3Qgb25lIGl0
ZXJhdGlvbiBhbmQgbGVhdmVzICJzcGlsbGVkIgorLy8gVG1wcyBhcyBub24tUmVnIFRtcHMuCit2
b2lkIG9uZVBhc3NJUkMoQ29kZSYpOworCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWly
CiAKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJMaXZlbmVzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgiCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM6OkFp
cjsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEtpbGxNb2RlIGtpbGxN
b2RlKQoreworICAgIHN3aXRjaCAoa2lsbE1vZGUpIHsKKyAgICBjYXNlIEtpbGxNb2RlOjpET0FF
YXJseURlZkluTmV4dEluc3Q6CisgICAgICAgIG91dC5wcmludCgiRE9BRWFybHlEZWZJbk5leHRJ
bnN0Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEtpbGxNb2RlOjpET0FMYXRlRGVmOgor
ICAgICAgICBvdXQucHJpbnQoIkRPQUxhdGVEZWYiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgS2lsbE1vZGU6OkVhcmx5VXNlS2lsbDoKKyAgICAgICAgb3V0LnByaW50KCJFYXJseVVzZUtp
bGwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgS2lsbE1vZGU6OkxhdGVVc2VJblByZXZJ
bnN0S2lsbDoKKyAgICAgICAgb3V0LnByaW50KCJMYXRlVXNlSW5QcmV2SW5zdEtpbGwiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAkocmV2aXNp
b24gMTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKEIzX0pJVCkKIAog
I2luY2x1ZGUgIkFpckJhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJBaXJDb2RlLmgiCiAjaW5jbHVk
ZSAiQWlySW5zdElubGluZXMuaCIKICNpbmNsdWRlICJBaXJUbXBJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiQjNJbmRleE1hcC5oIgpAQCAtOTIsMTAgKzkzLDE5IEBAIHN0cnVjdCBSZWdMaXZlbmVzc0Fk
YXB0ZXIgewogICAgIFJlZyBpbmRleFRvVmFsdWUodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIFJl
Zzo6ZnJvbUluZGV4KGluZGV4KTsgfQogfTsKIAorZW51bSBjbGFzcyBLaWxsTW9kZSA6IGludDhf
dCB7CisgICAgRE9BRWFybHlEZWZJbk5leHRJbnN0LAorICAgIERPQUxhdGVEZWYsCisgICAgRWFy
bHlVc2VLaWxsLAorICAgIExhdGVVc2VJblByZXZJbnN0S2lsbAorfTsKKwogdGVtcGxhdGU8dHlw
ZW5hbWUgQWRhcHRlcj4KLWNsYXNzIEFic3RyYWN0TGl2ZW5lc3MgOiBwcml2YXRlIEFkYXB0ZXIg
eworY2xhc3MgQWJzdHJhY3RMaXZlbmVzcyA6IHB1YmxpYyBBZGFwdGVyIHsKICAgICBzdHJ1Y3Qg
V29ya3NldDsKIHB1YmxpYzoKKyAgICB0eXBlZGVmIHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nIFRo
aW5nOworICAgIAogICAgIEFic3RyYWN0TGl2ZW5lc3MoQ29kZSYgY29kZSkKICAgICAgICAgOiBB
ZGFwdGVyKGNvZGUpCiAgICAgICAgICwgbV93b3Jrc2V0KEFkYXB0ZXI6Om1heEluZGV4KGNvZGUp
KQpAQCAtMjIyLDYgKzIzMiwxMSBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgIEl0ZXJhdG9yIGJl
Z2luKCkgY29uc3QgeyByZXR1cm4gSXRlcmF0b3IobV9saXZlbmVzcywgbV9saXZlbmVzcy5tX3dv
cmtzZXQuYmVnaW4oKSk7IH0KICAgICAgICAgICAgIEl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0
dXJuIEl0ZXJhdG9yKG1fbGl2ZW5lc3MsIG1fbGl2ZW5lc3MubV93b3Jrc2V0LmVuZCgpKTsgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICBib29sIGNvbnRhaW5zKGNvbnN0IHR5cGVuYW1lIEFk
YXB0ZXI6OlRoaW5nJiB0aGluZykgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbV9saXZlbmVzcy5tX3dvcmtzZXQuY29udGFpbnMoQWRhcHRlcjo6dmFsdWVUb0lu
ZGV4KHRoaW5nKSk7CisgICAgICAgICAgICB9CiAKICAgICAgICAgcHJpdmF0ZToKICAgICAgICAg
ICAgIEFic3RyYWN0TGl2ZW5lc3MmIG1fbGl2ZW5lc3M7CkBAIC0yMzIsNyArMjQ3LDE2IEBAIHB1
YmxpYzoKICAgICAgICAgICAgIHJldHVybiBJdGVyYWJsZShtX2xpdmVuZXNzKTsKICAgICAgICAg
fQogCi0gICAgICAgIHZvaWQgZXhlY3V0ZSh1bnNpZ25lZCBpbnN0SW5kZXgpCisgICAgICAgIGJv
b2wgaXNMaXZlKGNvbnN0IHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nJiB0aGluZykgY29uc3QKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGxpdmUoKS5jb250YWlucyh0aGluZyk7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBDYWxscyB0aGUga2lsbCBjYWxsYmFjayB3aXRoIHRoZSBraWxs
cyBhbmQgZGVzY3JpcHRpb25zIG9mIGhvdyB0aGV5IGdvdCBraWxsZWQuIEFsc28KKyAgICAgICAg
Ly8gcGFzc2VzIHRoZSBpbnRlcm5hbCBpbmRleCBvZiB0aGUgdGhpbmcgYmVpbmcga2lsbGVkLCBp
ZiB5b3Ugd2FudCB0byB1c2UgaW5kZXgtYmFzZWQKKyAgICAgICAgLy8gbGl2ZW5lc3MuCisgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtpbGxDYWxsYmFjaz4KKyAgICAgICAgdm9pZCBleGVjdXRl
KHVuc2lnbmVkIGluc3RJbmRleCwgY29uc3QgS2lsbENhbGxiYWNrJiBraWxsQ2FsbGJhY2spCiAg
ICAgICAgIHsKICAgICAgICAgICAgIEluc3QmIGluc3QgPSBtX2Jsb2NrLT5hdChpbnN0SW5kZXgp
OwogICAgICAgICAgICAgYXV0byYgd29ya3NldCA9IG1fbGl2ZW5lc3MubV93b3Jrc2V0OwpAQCAt
MjQyLDIzICsyNjYsMzIgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIEluc3QmIG5leHRJbnN0
ID0gbV9ibG9jay0+YXQoaW5zdEluZGV4ICsgMSk7CiAgICAgICAgICAgICAgICAgbmV4dEluc3Qu
Zm9yRWFjaDx0eXBlbmFtZSBBZGFwdGVyOjpUaGluZz4oCiAgICAgICAgICAgICAgICAgICAgIFsm
XSAodHlwZW5hbWUgQWRhcHRlcjo6VGhpbmcmIHRoaW5nLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpU
eXBlIHR5cGUsIEFyZzo6V2lkdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6
OmlzRWFybHlEZWYocm9sZSkgJiYgQWRhcHRlcjo6YWNjZXB0c1R5cGUodHlwZSkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd29ya3NldC5yZW1vdmUoQWRhcHRlcjo6dmFsdWVUb0luZGV4
KHRoaW5nKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0Vhcmx5RGVmKHJv
bGUpICYmIEFkYXB0ZXI6OmFjY2VwdHNUeXBlKHR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBBZGFwdGVyOjp2YWx1ZVRvSW5kZXgodGhpbmcpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghd29ya3NldC5yZW1vdmUoaW5kZXgpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBraWxsQ2FsbGJhY2soaW5kZXgsIHRoaW5n
LCBLaWxsTW9kZTo6RE9BRWFybHlEZWZJbk5leHRJbnN0KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIC8vIFRoZW4gaGFuZGxlIGRlZidzLgogICAgICAgICAgICAgaW5zdC5m
b3JFYWNoPHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nPigKICAgICAgICAgICAgICAgICBbJl0gKHR5
cGVuYW1lIEFkYXB0ZXI6OlRoaW5nJiB0aGluZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSB0
eXBlLCBBcmc6OldpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzTGF0ZURl
Zihyb2xlKSAmJiBBZGFwdGVyOjphY2NlcHRzVHlwZSh0eXBlKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHdvcmtzZXQucmVtb3ZlKEFkYXB0ZXI6OnZhbHVlVG9JbmRleCh0aGluZykpOworICAg
ICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0xhdGVEZWYocm9sZSkgJiYgQWRhcHRlcjo6YWNj
ZXB0c1R5cGUodHlwZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4
ID0gQWRhcHRlcjo6dmFsdWVUb0luZGV4KHRoaW5nKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghd29ya3NldC5yZW1vdmUoaW5kZXgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGtpbGxDYWxsYmFjayhpbmRleCwgdGhpbmcsIEtpbGxNb2RlOjpET0FMYXRlRGVmKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0pOwogCiAgICAgICAgICAgICAvLyBU
aGVuIGhhbmRsZSB1c2Uncy4KICAgICAgICAgICAgIGluc3QuZm9yRWFjaDx0eXBlbmFtZSBBZGFw
dGVyOjpUaGluZz4oCiAgICAgICAgICAgICAgICAgWyZdICh0eXBlbmFtZSBBZGFwdGVyOjpUaGlu
ZyYgdGhpbmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgdHlwZSwgQXJnOjpXaWR0aCkgewot
ICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0Vhcmx5VXNlKHJvbGUpICYmIEFkYXB0ZXI6
OmFjY2VwdHNUeXBlKHR5cGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgd29ya3NldC5hZGQo
QWRhcHRlcjo6dmFsdWVUb0luZGV4KHRoaW5nKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChB
cmc6OmlzRWFybHlVc2Uocm9sZSkgJiYgQWRhcHRlcjo6YWNjZXB0c1R5cGUodHlwZSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gQWRhcHRlcjo6dmFsdWVUb0lu
ZGV4KHRoaW5nKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3b3Jrc2V0LmFkZChpbmRl
eCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAga2lsbENhbGxiYWNrKGluZGV4LCB0aGlu
ZywgS2lsbE1vZGU6OkVhcmx5VXNlS2lsbCk7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICB9KTsKIAogICAgICAgICAgICAgLy8gQW5kIGZpbmFsbHksIGhhbmRsZSB0aGUg
bGF0ZSB1c2UncyBvZiB0aGUgcHJldmlvdXMgaW5zdHJ1Y3Rpb24uCkBAIC0yNjYsMTcgKzI5OSwz
MiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgSW5zdCYgcHJldkluc3QgPSBtX2Jsb2NrLT5h
dChpbnN0SW5kZXggLSAxKTsKICAgICAgICAgICAgICAgICBwcmV2SW5zdC5mb3JFYWNoPHR5cGVu
YW1lIEFkYXB0ZXI6OlRoaW5nPigKICAgICAgICAgICAgICAgICAgICAgWyZdICh0eXBlbmFtZSBB
ZGFwdGVyOjpUaGluZyYgdGhpbmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgdHlwZSwgQXJn
OjpXaWR0aCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNMYXRlVXNlKHJv
bGUpICYmIEFkYXB0ZXI6OmFjY2VwdHNUeXBlKHR5cGUpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdvcmtzZXQuYWRkKEFkYXB0ZXI6OnZhbHVlVG9JbmRleCh0aGluZykpOworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNMYXRlVXNlKHJvbGUpICYmIEFkYXB0ZXI6OmFj
Y2VwdHNUeXBlKHR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
aW5kZXggPSBBZGFwdGVyOjp2YWx1ZVRvSW5kZXgodGhpbmcpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh3b3Jrc2V0LmFkZChpbmRleCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGtpbGxDYWxsYmFjayhpbmRleCwgdGhpbmcsIEtpbGxNb2RlOjpMYXRlVXNlSW5Q
cmV2SW5zdEtpbGwpOworICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICB9KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCisgICAgICAgIHZvaWQgZXhlY3V0
ZSh1bnNpZ25lZCBpbnN0SW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGV4ZWN1dGUoCisg
ICAgICAgICAgICAgICAgaW5zdEluZGV4LAorICAgICAgICAgICAgICAgIFtdICh1bnNpZ25lZCwg
Y29uc3QgdHlwZW5hbWUgQWRhcHRlcjo6VGhpbmcmLCBLaWxsTW9kZSkgeyB9KTsKKyAgICAgICAg
fQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgQWJzdHJhY3RMaXZlbmVzcyYgbV9saXZlbmVzczsK
ICAgICAgICAgQmFzaWNCbG9jayogbV9ibG9jazsKICAgICB9OwogCisgICAgY29uc3QgVmVjdG9y
PHVuc2lnbmVkPiYgcmF3TGl2ZUF0SGVhZChCYXNpY0Jsb2NrKiBibG9jaykKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX2xpdmVBdEhlYWRbYmxvY2tdOworICAgIH0KKwogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFVuZGVybHlpbmdJdGVyYWJsZT4KICAgICBjbGFzcyBJdGVyYWJsZSB7CiAgICAgcHVi
bGljOgpAQCAtMzMwLDYgKzM3OCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIGl0ZXJhdG9yIGJlZ2lu
KCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9saXZlbmVzcywgbV9pdGVyYWJsZS5iZWdpbigp
KTsgfQogICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihtX2xp
dmVuZXNzLCBtX2l0ZXJhYmxlLmVuZCgpKTsgfQogCisgICAgICAgIGJvb2wgY29udGFpbnMoY29u
c3QgdHlwZW5hbWUgQWRhcHRlcjo6VGhpbmcmIHRoaW5nKSBjb25zdAorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gbV9saXZlbmVzcy5tX3dvcmtzZXQuY29udGFpbnMoQWRhcHRlcjo6dmFs
dWVUb0luZGV4KHRoaW5nKSk7CisgICAgICAgIH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIEFi
c3RyYWN0TGl2ZW5lc3MmIG1fbGl2ZW5lc3M7CiAgICAgICAgIGNvbnN0IFVuZGVybHlpbmdJdGVy
YWJsZSYgbV9pdGVyYWJsZTsKQEAgLTM0NSw2ICszOTgsOCBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBJdGVyYWJsZTx0eXBlbmFtZSBBZGFwdGVyOjpJbmRleFNldD4oKnRoaXMsIG1fbGl2ZUF0
VGFpbFtibG9ja10pOwogICAgIH0KIAorICAgIEluZGV4U3BhcnNlU2V0PFVuc2FmZVZlY3Rvck92
ZXJmbG93PiYgd29ya3NldCgpIHsgcmV0dXJuIG1fd29ya3NldDsgfQorCiBwcml2YXRlOgogICAg
IGZyaWVuZCBjbGFzcyBMb2NhbENhbGM7CiAgICAgZnJpZW5kIHN0cnVjdCBMb2NhbENhbGM6Okl0
ZXJhYmxlOwpAQCAtMzY0LDYgKzQxOSwxMiBAQCB0eXBlZGVmIEFic3RyYWN0TGl2ZW5lc3M8UmVn
TGl2ZW5lc3NBZGFwCiAKIH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKIAorbmFtZXNw
YWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OkFp
cjo6S2lsbE1vZGUpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwogI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCiAKICNlbmRpZiAvLyBBaXJMaXZlbmVzc19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckxvZ1JlZ2lzdGVyUHJlc3N1cmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxvZ1JlZ2lzdGVy
UHJlc3N1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkFpckxvZ1JlZ2lzdGVyUHJlc3N1cmUuaCIKKworI2lmIEVOQUJMRShCM19KSVQp
CisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKKyNp
bmNsdWRlICJBaXJMaXZlbmVzcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsg
bmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgbG9nUmVnaXN0ZXJQcmVzc3VyZShDb2RlJiBjb2RlKQor
eworICAgIGNvbnN0IHVuc2lnbmVkIHRvdGFsQ29sdW1ucyA9IDIwMDsKKyAgICBjb25zdCB1bnNp
Z25lZCByZWdpc3RlckNvbHVtbnMgPSAxMDA7CisgICAgCisgICAgUmVnTGl2ZW5lc3MgbGl2ZW5l
c3MoY29kZSk7CisKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAg
ICBSZWdMaXZlbmVzczo6TG9jYWxDYWxjIGxvY2FsQ2FsYyhsaXZlbmVzcywgYmxvY2spOworCisg
ICAgICAgIGJsb2NrLT5kdW1wSGVhZGVyKFdURjo6ZGF0YUZpbGUoKSk7CisKKyAgICAgICAgVmVj
dG9yPENTdHJpbmc+IGluc3REdW1wczsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXgg
PSBibG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTspIHsKKyAgICAgICAgICAgIEluc3QmIGluc3Qg
PSBibG9jay0+YXQoaW5zdEluZGV4KTsKKyAgICAgICAgICAgIEluc3QqIHByZXZJbnN0ID0gYmxv
Y2stPmdldChpbnN0SW5kZXggLSAxKTsKKworICAgICAgICAgICAgbG9jYWxDYWxjLmV4ZWN1dGUo
aW5zdEluZGV4KTsKKworICAgICAgICAgICAgUmVnaXN0ZXJTZXQgc2V0OworICAgICAgICAgICAg
c2V0LnNldEFsbChsb2NhbENhbGMubGl2ZSgpKTsKKyAgICAgICAgICAgIEluc3Q6OmZvckVhY2hE
ZWZXaXRoRXh0cmFDbG9iYmVyZWRSZWdzPFJlZz4oCisgICAgICAgICAgICAgICAgcHJldkluc3Qs
ICZpbnN0LAorICAgICAgICAgICAgICAgIFsmXSAoUmVnIHJlZywgQXJnOjpSb2xlLCBBcmc6OlR5
cGUsIEFyZzo6V2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgc2V0LnNldChyZWcpOworICAg
ICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBTdHJpbmdQcmludFN0cmVhbSBpbnN0T3V0
OworICAgICAgICAgICAgU3RyaW5nUHJpbnRTdHJlYW0gbGluZU91dDsKKyAgICAgICAgICAgIGxp
bmVPdXQucHJpbnQoIiAgICIpOworICAgICAgICAgICAgaWYgKHNldC5udW1iZXJPZlNldFJlZ2lz
dGVycygpKSB7CisgICAgICAgICAgICAgICAgc2V0LmZvckVhY2goCisgICAgICAgICAgICAgICAg
ICAgIFsmXSAoUmVnIHJlZykgeworICAgICAgICAgICAgICAgICAgICAgICAgQ1N0cmluZyB0ZXh0
ID0gdG9DU3RyaW5nKCIgIiwgcmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0
Lmxlbmd0aCgpICsgbGluZU91dC5sZW5ndGgoKSA+IHRvdGFsQ29sdW1ucykgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGluc3RPdXQucHJpbnQobGluZU91dC50b0NTdHJpbmcoKSwgIlxu
Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZU91dC5yZXNldCgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxpbmVPdXQucHJpbnQoIiAgICAgICAiKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVPdXQucHJpbnQo
dGV4dCk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIGxpbmVPdXQu
cHJpbnQoIjoiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChsaW5lT3V0Lmxlbmd0
aCgpID4gcmVnaXN0ZXJDb2x1bW5zKSB7CisgICAgICAgICAgICAgICAgaW5zdE91dC5wcmludChs
aW5lT3V0LnRvQ1N0cmluZygpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBsaW5lT3V0LnJlc2V0
KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aGlsZSAobGluZU91dC5sZW5ndGgoKSA8
IHJlZ2lzdGVyQ29sdW1ucykKKyAgICAgICAgICAgICAgICBsaW5lT3V0LnByaW50KCIgIik7Cisg
ICAgICAgICAgICBsaW5lT3V0LnByaW50KCIgIik7CisgICAgICAgICAgICBsaW5lT3V0LnByaW50
KGluc3QpOworICAgICAgICAgICAgaW5zdE91dC5wcmludChsaW5lT3V0LnRvQ1N0cmluZygpLCAi
XG4iKTsKKyAgICAgICAgICAgIGluc3REdW1wcy5hcHBlbmQoaW5zdE91dC50b0NTdHJpbmcoKSk7
CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBpbnN0RHVtcHMuc2l6ZSgp
OyBpLS07KQorICAgICAgICAgICAgZGF0YUxvZyhpbnN0RHVtcHNbaV0pOworICAgICAgICAKKyAg
ICAgICAgYmxvY2stPmR1bXBGb290ZXIoV1RGOjpkYXRhRmlsZSgpKTsKKyAgICB9Cit9CisKK30g
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG9nUmVnaXN0ZXJQcmVz
c3VyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG9n
UmVnaXN0ZXJQcmVzc3VyZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJMb2dSZWdpc3RlclByZXNzdXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgQWlyTG9nUmVnaXN0ZXJQcmVzc3VyZV9oCisjZGVmaW5lIEFpckxvZ1JlZ2lzdGVyUHJl
c3N1cmVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCisvLyBEdW1wcyB0aGUgcmVn
aXN0ZXJzIHRoYXQgYXJlIHVzZWQgYXQgZWFjaCBpbnN0cnVjdGlvbi4KK3ZvaWQgbG9nUmVnaXN0
ZXJQcmVzc3VyZShDb2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJMb2dSZWdpc3RlclByZXNz
dXJlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcHRpbWl6ZUJs
b2NrT3JkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyT3B0aW1pemVCbG9ja09yZGVyLmNwcAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcHRpbWl6ZUJsb2NrT3JkZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTczLDEwICs3Myw4IEBAIHByaXZhdGU6CiAKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQog
Ci12b2lkIG9wdGltaXplQmxvY2tPcmRlcihDb2RlJiBjb2RlKQorVmVjdG9yPEJhc2ljQmxvY2sq
PiBibG9ja3NJbk9wdGltaXplZE9yZGVyKENvZGUmIGNvZGUpCiB7Ci0gICAgUGhhc2VTY29wZSBw
aGFzZVNjb3BlKGNvZGUsICJvcHRpbWl6ZUJsb2NrT3JkZXIiKTsKLQogICAgIFZlY3RvcjxCYXNp
Y0Jsb2NrKj4gYmxvY2tzSW5PcmRlcjsKIAogICAgIEJsb2NrV29ya2xpc3QgZmFzdFdvcmtsaXN0
OwpAQCAtMTEzLDYgKzExMSwxNSBAQCB2b2lkIG9wdGltaXplQmxvY2tPcmRlcihDb2RlJiBjb2Rl
KQogICAgIEFTU0VSVChmYXN0V29ya2xpc3QuaXNFbXB0eSgpKTsKICAgICBBU1NFUlQoc2xvd1dv
cmtsaXN0LmlzRW1wdHkoKSk7CiAKKyAgICByZXR1cm4gYmxvY2tzSW5PcmRlcjsKK30KKwordm9p
ZCBvcHRpbWl6ZUJsb2NrT3JkZXIoQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNl
U2NvcGUoY29kZSwgIm9wdGltaXplQmxvY2tPcmRlciIpOworCisgICAgVmVjdG9yPEJhc2ljQmxv
Y2sqPiBibG9ja3NJbk9yZGVyID0gYmxvY2tzSW5PcHRpbWl6ZWRPcmRlcihjb2RlKTsKKyAgICAK
ICAgICAvLyBQbGFjZSBibG9ja3MgaW50byBDb2RlJ3MgYmxvY2sgbGlzdCBhY2NvcmRpbmcgdG8g
dGhlIG9yZGVyaW5nIGluIGJsb2Nrc0luT3JkZXIuIFdlIGRvIHRoaXMgYnkgbGVha2luZwogICAg
IC8vIGFsbCBvZiB0aGUgYmxvY2tzIGFuZCB0aGVuIHJlYWRvcHRpbmcgdGhlbS4KICAgICBmb3Ig
KGF1dG8mIGVudHJ5IDogY29kZS5ibG9ja0xpc3QoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyT3B0aW1pemVCbG9ja09yZGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcHRpbWl6ZUJsb2NrT3JkZXIuaAkocmV2aXNpb24g
MTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcHRpbWl6ZUJsb2Nr
T3JkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCwxMCArMjgsMTggQEAKIAogI2lmIEVOQUJMRShCM19K
SVQpCiAKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKIAorY2xhc3MgQmFzaWNCbG9jazsKIGNsYXNzIENvZGU7
CiAKKy8vIFJldHVybnMgYSBsaXN0IG9mIGJsb2NrcyBzb3J0ZWQgYWNjb3JkaW5nIHRvIHdoYXQg
d291bGQgYmUgdGhlIGN1cnJlbnQgb3B0aW1hbCBvcmRlci4gVGhpcyBzaGFyZXMKKy8vIHNvbWUg
cHJvcGVydGllcyB3aXRoIGEgcHJlLW9yZGVyIHRyYXZlcnNhbC4gSW4gcGFydGljdWxhciwgZWFj
aCBibG9jayB3aWxsIGFwcGVhciBhZnRlciBhdCBsZWFzdAorLy8gb25lIG9mIGl0cyBwcmVkZWNl
c3NvcnMuCitWZWN0b3I8QmFzaWNCbG9jayo+IGJsb2Nrc0luT3B0aW1pemVkT3JkZXIoQ29kZSYp
OworCiAvLyBSZW9yZGVycyB0aGUgYmFzaWMgYmxvY2tzIHRvIGtlZXAgaG90IGJsb2NrcyBhdCB0
aGUgdG9wLCBhbmQgbWF4aW1pemUgdGhlIGxpa2VsaWhvb2QgdGhhdCBhIGZyZXF1ZW50bHkKIC8v
IHRha2VuIGVkZ2UgaXMganVzdCBhIGZhbGwtdGhyb3VnaC4KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJSZXBvcnRVc2VkUmVnaXN0ZXJzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlcG9ydFVzZWRSZWdpc3RlcnMuY3Bw
CShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJl
cG9ydFVzZWRSZWdpc3RlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0NiwzMiBAQCB2
b2lkIHJlcG9ydFVzZWRSZWdpc3RlcnMoQ29kZSYgY29kZSkKIAogICAgICAgICBmb3IgKHVuc2ln
bmVkIGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykgewogICAgICAgICAg
ICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOworCisgICAgICAgICAgICAvLyBL
aWxsIGRlYWQgYXNzaWdubWVudHMgdG8gcmVnaXN0ZXJzLiBGb3Igc2ltcGxpY2l0eSB3ZSBzYXkg
dGhhdCBhIHN0b3JlIGlzIGtpbGxhYmxlIGlmCisgICAgICAgICAgICAvLyBpdCBoYXMgb25seSBs
YXRlIGRlZnMgYW5kIHRob3NlIGxhdGUgZGVmcyBhcmUgdG8gcmVnaXN0ZXJzIHRoYXQgYXJlIGRl
YWQgcmlnaHQgbm93LgorICAgICAgICAgICAgaWYgKCFpbnN0Lmhhc05vbkFyZ0VmZmVjdHMoKSkg
eworICAgICAgICAgICAgICAgIGJvb2wgY2FuRGVsZXRlID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICBpbnN0LmZvckVhY2hBcmcoCisgICAgICAgICAgICAgICAgICAgIFsmXSAoQXJnJiBhcmcsIEFy
Zzo6Um9sZSByb2xlLCBBcmc6OlR5cGUsIEFyZzo6V2lkdGgpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChBcmc6OmlzRWFybHlEZWYocm9sZSkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjYW5EZWxldGUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIUFyZzo6aXNMYXRlRGVmKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlzUmVnKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5EZWxldGUgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAobG9jYWxDYWxjLmlzTGl2ZShhcmcucmVnKCkpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuRGVsZXRlID0gZmFsc2U7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBpZiAoY2FuRGVsZXRlKQorICAg
ICAgICAgICAgICAgICAgICBpbnN0ID0gSW5zdCgpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCiAgICAgICAgICAgICBpZiAoaW5zdC5vcGNvZGUgPT0gUGF0Y2gpIHsKICAgICAgICAgICAg
ICAgICBSZWdpc3RlclNldCByZWdpc3RlclNldDsKICAgICAgICAgICAgICAgICBmb3IgKFJlZyBy
ZWcgOiBsb2NhbENhbGMubGl2ZSgpKQpAQCAtNTQsNiArODAsMTEgQEAgdm9pZCByZXBvcnRVc2Vk
UmVnaXN0ZXJzKENvZGUmIGNvZGUpCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsb2NhbENh
bGMuZXhlY3V0ZShpbnN0SW5kZXgpOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBibG9j
ay0+aW5zdHMoKS5yZW1vdmVBbGxNYXRjaGluZygKKyAgICAgICAgICAgIFsmXSAoY29uc3QgSW5z
dCYgaW5zdCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgcmV0dXJuICFpbnN0OworICAgICAg
ICAgICAgfSk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpclNjYXZlbmdlUmVnaXN0ZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpclNjYXZlbmdlUmVnaXN0ZXJzLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU2NhdmVuZ2VSZWdpc3RlcnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsOTU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclNjYXZl
bmdlUmVnaXN0ZXJzLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQnJl
YWtDcml0aWNhbEVkZ2VzLmgiCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckVt
aXRTaHVmZmxlLmgiCisjaW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQWly
SW5zdElubGluZXMuaCIKKyNpbmNsdWRlICJBaXJJbnN0TWFwLmgiCisjaW5jbHVkZSAiQWlyTGl2
ZW5lc3MuaCIKKyNpbmNsdWRlICJBaXJPcHRpbWl6ZUJsb2NrT3JkZXIuaCIKKyNpbmNsdWRlICJB
aXJQaGFzZVNjb3BlLmgiCisjaW5jbHVkZSAiQWlyUmVnaXN0ZXJQcmlvcml0eS5oIgorI2luY2x1
ZGUgIkFpclRtcFdpZHRoLmgiCisjaW5jbHVkZSAiQWlyVXNlQ291bnRzLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworbmFtZXNwYWNlIHsKKwor
Ym9vbCB2ZXJib3NlID0gZmFsc2U7CisKK3RlbXBsYXRlPEFyZzo6VHlwZSB0eXBlPgorY2xhc3Mg
U2NhdmVuZ2VSZWdpc3RlcnMgeworcHVibGljOgorICAgIFNjYXZlbmdlUmVnaXN0ZXJzKENvZGUm
IGNvZGUpCisgICAgICAgIDogbV9jb2RlKGNvZGUpCisgICAgICAgICwgbV9saXZlbmVzcyhjb2Rl
KQorICAgICAgICAsIG1fZGVhdGhzKGNvZGUpCisgICAgICAgICwgbV9hdEhlYWQoY29kZS5zaXpl
KCkpCisgICAgICAgICwgbV91c2VDb3VudHMoY29kZSkKKyAgICAgICAgLCBtX3RtcFdpZHRoKGNv
ZGUpCisgICAgICAgICwgbV9pbnNlcnRpb25TZXQoY29kZSkKKyAgICB7CisgICAgfQorCisgICAg
dm9pZCBydW4oKQorICAgIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRh
TG9nKCJzY2F2ZW5nZVJlZ2lzdGVycygpIGRlYWxpbmcgd2l0aCBjb2RlOlxuIiwgbV9jb2RlKTsK
KworICAgICAgICBpbml0aWFsaXplQXRIZWFkKCk7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8
QmFzaWNCbG9jayo+IGJsb2NrcyA9IGJsb2Nrc0luT3B0aW1pemVkT3JkZXIobV9jb2RlKTsKKwor
ICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKKyAgICAg
ICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBibG9ja3MpIHsKKyAgICAgICAgICAgICAg
ICBtX2Jsb2NrID0gYmxvY2s7CisgICAgICAgICAgICAgICAgcHJvcGFnYXRlVmFsdWVzSW5CbG9j
aygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFtX2NoYW5nZWQpCisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGNvbXB1dGVEZWF0
aHMoKTsKKyAgICAgICAgaW5pdGlhbGl6ZUJsb2NrUmVnU3RhdGVzKCk7CisKKyAgICAgICAgbV9h
dEhlYWRbbV9jb2RlWzBdXS5pc1NldHRsZWQgPSB0cnVlOworICAgICAgICBmb3IgKEJhc2ljQmxv
Y2sqIGJsb2NrIDogYmxvY2tzKSB7CisgICAgICAgICAgICBtX2Jsb2NrID0gYmxvY2s7CisgICAg
ICAgICAgICBwcm9jZXNzQmxvY2soKTsKKyAgICAgICAgfQorICAgIH0KKworcHJpdmF0ZToKKyAg
ICBzdHJ1Y3QgVG1wSW5mbyB7CisgICAgICAgIFRtcEluZm8oKQorICAgICAgICB7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGV4cGxpY2l0IFRtcEluZm8oUmVnIHJlZykKKyAgICAgICAg
ICAgIDogcmVnKHJlZykKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBp
bnQ2NF90IGNvbnN0YW50IHsgMCB9OworICAgICAgICBSZWcgcmVnOworICAgICAgICBib29sIGhh
c0NvbnN0YW50IHsgZmFsc2UgfTsKKyAgICAgICAgYm9vbCBoYXNTcGlsbCB7IGZhbHNlIH07Cisg
ICAgfTsKKworICAgIHN0cnVjdCBSZWdJbmZvIHsKKyAgICAgICAgUmVnSW5mbygpCisgICAgICAg
IHsKKyAgICAgICAgfQorCisgICAgICAgIGV4cGxpY2l0IFJlZ0luZm8oVG1wIHRtcCkKKyAgICAg
ICAgICAgIDogdG1wKHRtcCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgVG1wIHRt
cDsKKyAgICAgICAgYm9vbCBpc0xvY2tlZCB7IGZhbHNlIH07CisgICAgfTsKKworICAgIHZvaWQg
aW5pdGlhbGl6ZUF0SGVhZCgpCisgICAgeworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2Nr
IDogbV9jb2RlKSB7CisgICAgICAgICAgICBTdGF0ZSYgc3RhdGUgPSBtX2F0SGVhZFtibG9ja107
CisgICAgICAgICAgICBmb3IgKFRtcCB0bXAgOiBtX2xpdmVuZXNzLmxpdmVBdEhlYWQoYmxvY2sp
KQorICAgICAgICAgICAgICAgIHN0YXRlLm1hcHBpbmcuYWRkKHRtcCwgVG1wSW5mbygpKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHZvaWQgcHJvcGFnYXRlVmFsdWVzSW5CbG9jaygpCisgICAg
eworICAgICAgICBtX3N0YXRlID0gbV9hdEhlYWRbbV9ibG9ja107CisgICAgICAgIGZvciAoSW5z
dCYgaW5zdCA6ICptX2Jsb2NrKQorICAgICAgICAgICAgcHJvcGFnYXRlVmFsdWVzKGluc3QpOwor
CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDogbV9ibG9jay0+c3VjY2Vzc29y
QmxvY2tzKCkpIHsKKyAgICAgICAgICAgIFN0YXRlJiBhdEhlYWQgPSBtX2F0SGVhZFtzdWNjZXNz
b3JdOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIWF0SGVhZC52aXNpdGVkQnlQcm9w
YWdhdGlvbikgeworICAgICAgICAgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBhdEhlYWQubWFw
cGluZykgeworICAgICAgICAgICAgICAgICAgICBUbXBJbmZvJiBzcmNJbmZvID0gZ2V0SW5mbyhl
bnRyeS5rZXkpOworICAgICAgICAgICAgICAgICAgICBUbXBJbmZvJiBkc3RJbmZvID0gZW50cnku
dmFsdWU7CisgICAgICAgICAgICAgICAgICAgIGRzdEluZm8uY29uc3RhbnQgPSBzcmNJbmZvLmNv
bnN0YW50OworICAgICAgICAgICAgICAgICAgICBkc3RJbmZvLmhhc0NvbnN0YW50ID0gc3JjSW5m
by5oYXNDb25zdGFudDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYXRIZWFk
LnZpc2l0ZWRCeVByb3BhZ2F0aW9uID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBtX2NoYW5nZWQg
PSB0cnVlOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogYXRIZWFkLm1hcHBpbmcpIHsKKyAgICAgICAgICAg
ICAgICBUbXBJbmZvJiBkc3RJbmZvID0gZW50cnkudmFsdWU7CisgICAgICAgICAgICAgICAgaWYg
KCFkc3RJbmZvLmhhc0NvbnN0YW50KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICBUbXBJbmZvJiBzcmNJbmZvID0gZ2V0SW5mbyhlbnRyeS5rZXkpOworICAg
ICAgICAgICAgICAgIGlmICghc3JjSW5mby5oYXNDb25zdGFudCB8fCBzcmNJbmZvLmNvbnN0YW50
ICE9IGRzdEluZm8uY29uc3RhbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgZHN0SW5mby5oYXND
b25zdGFudCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAK
KyAgICB2b2lkIHByb3BhZ2F0ZVZhbHVlcyhJbnN0JiBpbnN0KQorICAgIHsKKyAgICAgICAgaWYg
KHR5cGUgPT0gQXJnOjpHUAorICAgICAgICAgICAgJiYgaW5zdC5vcGNvZGUgPT0gTW92ZQorICAg
ICAgICAgICAgJiYgaW5zdC5hcmdzWzBdLmlzU29tZUltbSgpCisgICAgICAgICAgICAmJiBpbnN0
LmFyZ3NbMV0uaXNUbXAoKSkgeworICAgICAgICAgICAgVG1wSW5mbyYgaW5mbyA9IGdldEluZm8o
aW5zdC5hcmdzWzFdLnRtcCgpKTsKKyAgICAgICAgICAgIGluZm8uaGFzQ29uc3RhbnQgPSB0cnVl
OworICAgICAgICAgICAgaW5mby5jb25zdGFudCA9IGluc3QuYXJnc1sxXS52YWx1ZSgpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IE5lZWQgdGhl
IGVxdWl2YWxlbnQgZm9yIEZQLgorCisgICAgICAgIEluc3Q6OmZvckVhY2hEZWZXaXRoRXh0cmFD
bG9iYmVyZWRSZWdzPFRtcD4oCisgICAgICAgICAgICAmaW5zdCwgJmluc3QsIC8vIEdldCBib3Ro
IGxhdGUgYW5kIGVhcmx5IGRlZnMgZm9yIGluc3QuCisgICAgICAgICAgICBbJl0gKFRtcCB0bXAs
IEFyZzo6Um9sZSwgQXJnOjpUeXBlIHRtcFR5cGUsIEFyZzo6V2lkdGgpIHsKKyAgICAgICAgICAg
ICAgICBpZiAodG1wVHlwZSAhPSB0eXBlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgZ2V0SW5mbyh0bXApLmhhc0NvbnN0YW50ID0gZmFsc2U7CisgICAgICAg
ICAgICB9KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21wdXRlRGVhdGhzKCkKKyAgICB7Cisg
ICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsKKyAgICAgICAgICAgIHR5
cGVuYW1lIFRtcExpdmVuZXNzPHR5cGU+OjpMb2NhbENhbGMgbG9jYWxDYWxjKG1fbGl2ZW5lc3Ms
IGJsb2NrKTsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFM
b2coIiAgIExpdmUgYXQgdGFpbCBvZiAiLCAqYmxvY2ssICI6ICIsIGxpc3REdW1wKGxvY2FsQ2Fs
Yy5saXZlKCkpLCAiXG4iKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0g
YmxvY2stPnNpemUoKTsgaW5zdEluZGV4LS07KSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJv
c2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgIEFuYWx5emluZyAiLCBibG9j
ay0+YXQoaW5zdEluZGV4KSwgIlxuIik7CisgICAgICAgICAgICAgICAgbG9jYWxDYWxjLmV4ZWN1
dGUoCisgICAgICAgICAgICAgICAgICAgIGluc3RJbmRleCwKKyAgICAgICAgICAgICAgICAgICAg
WyZdICh1bnNpZ25lZCwgVG1wIHRtcCwgS2lsbE1vZGUga2lsbE1vZGUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGFMb2coIiAgICAgICAgIEtpbGxpbmcgIiwgdG1wLCAiIGR1ZSB0byAiLCBraWxsTW9kZSwgIlxu
Iik7CisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGtpbGxNb2RlKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIEtpbGxNb2RlOjpET0FFYXJseURlZkluTmV4dEluc3Q6Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9kZWF0aHMuYXQoYmxvY2ssIGluc3RJbmRleCAr
IDEpLmFwcGVuZChEZWF0aCh0bXAsIEVhcmx5RGVhdGgpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgS2lsbE1vZGU6OkRP
QUxhdGVEZWY6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9kZWF0aHMuYXQoYmxvY2ss
IGluc3RJbmRleCkuYXBwZW5kKERlYXRoKHRtcCwgTGF0ZURlYXRoKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEtpbGxN
b2RlOjpFYXJseVVzZUtpbGw6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9kZWF0aHMu
YXQoYmxvY2ssIGluc3RJbmRleCkuYXBwZW5kKERlYXRoKHRtcCwgRWFybHlEZWF0aCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSBLaWxsTW9kZTo6TGF0ZVVzZUluUHJldkluc3RLaWxsOgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZGVhdGhzLmF0KGJsb2NrLCBpbnN0SW5kZXggLSAxKS5hcHBlbmQoRGVhdGgo
dG1wLCBMYXRlRGVhdGgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBpbml0aWFsaXplQmxvY2tS
ZWdTdGF0ZXMoKQorICAgIHsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IG1fY29kZVswXTsK
KyAgICAgICAgCisgICAgICAgIFN0YXRlJiBzdGF0ZSA9IG1fYXRIZWFkW3Jvb3RdOworICAgICAg
ICBmb3IgKFRtcCB0bXAgOiBtX2xpdmVuZXNzLmxpdmVBdEhlYWQocm9vdCkpIHsKKyAgICAgICAg
ICAgIGlmICghdG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIHN0YXRlLm1hcHBpbmcuYWRkKHRtcCwgVG1wSW5mbyh0bXAucmVn
KCkpKTsKKyAgICAgICAgICAgIHN0YXRlLnJldmVyc2VNYXBwaW5nW3RtcC5yZWcoKV0gPSBSZWdJ
bmZvKHRtcCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHByb2Nlc3NCbG9jaygpCisg
ICAgeworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgIFByb2Nl
c3NpbmcgYmxvY2sgIiwgKm1fYmxvY2ssICJcbiIpOworICAgICAgICBtX3N0YXRlID0gbV9hdEhl
YWRbbV9ibG9ja107CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fc3RhdGUuaXNTZXR0bGVkKTsK
KworICAgICAgICBmb3IgKG1faW5zdEluZGV4ID0gMDsgbV9pbnN0SW5kZXggPCBtX2Jsb2NrLT5z
aXplKCk7ICsrbV9pbnN0SW5kZXgpIHsKKyAgICAgICAgICAgIEluc3QmIGluc3QgPSBtX2Jsb2Nr
LT5hdChtX2luc3RJbmRleCk7CisgICAgICAgICAgICBwcm9jZXNzSW5zdChpbnN0KTsKKyAgICAg
ICAgICAgIHByb3BhZ2F0ZVZhbHVlcyhpbnN0KTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wg
anVtcHNJbnRvSG90ID0gZmFsc2U7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29y
IDogbV9ibG9jay0+c3VjY2Vzc29yQmxvY2tzKCkpCisgICAgICAgICAgICBqdW1wc0ludG9Ib3Qg
fD0gc3VjY2Vzc29yLT5mcmVxdWVuY3koKSA+IG1fYmxvY2stPmZyZXF1ZW5jeSgpOworICAgICAg
ICBpZiAoanVtcHNJbnRvSG90KQorICAgICAgICAgICAgcHJlU3BpbGwobV9ibG9jay0+c2l6ZSgp
IC0gMSk7CisKKyAgICAgICAgaWYgKG1fYmxvY2stPm51bVN1Y2Nlc3NvcnMoKSA+IDEpIHsKKyAg
ICAgICAgICAgIHJlYmFzZShtX2Jsb2NrLT5zaXplKCkgLSAxKTsKKyAgICAgICAgICAgIGZvciAo
QmFzaWNCbG9jayogc3VjY2Vzc29yIDogbV9ibG9jay0+c3VjY2Vzc29yQmxvY2tzKCkpCisgICAg
ICAgICAgICAgICAgYm9vdEJsb2NrKHN1Y2Nlc3Nvcik7CisgICAgICAgIH0gZWxzZSBpZiAobV9i
bG9jay0+bnVtU3VjY2Vzc29ycygpID09IDEpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIHN1
Y2Nlc3NvciA9IG1fYmxvY2stPnN1Y2Nlc3NvckJsb2NrKDApOworICAgICAgICAgICAgaWYgKG1f
YXRIZWFkW3N1Y2Nlc3Nvcl0uaXNTZXR0bGVkKQorICAgICAgICAgICAgICAgIGNvbmZvcm1Ubyhz
dWNjZXNzb3IpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcmViYXNlKG1f
YmxvY2stPnNpemUoKSAtIDEpOworICAgICAgICAgICAgICAgIGJvb3RCbG9jayhzdWNjZXNzb3Ip
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2luc2VydGlv
blNldC5leGVjdXRlKG1fYmxvY2spOworICAgIH0KKworICAgIHZvaWQgcHJvY2Vzc0luc3QoSW5z
dCYgaW5zdCkKKyAgICB7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxv
ZygiICAgICAgUHJvY2Vzc2luZyAiLCBpbnN0LCAiXG4iKTsKKyAgICAgICAgCisgICAgICAgIC8v
IE91ciBzdGF0ZSBtYXBwaW5nIHRlbGxzIHVzIHdoYXQgaXMgbGl2ZSBhdCBhbnkgZ2l2ZW4gbW9t
ZW50LiBXZSB1c2UgYSBzZXBhcmF0ZQorICAgICAgICAvLyBsaXZlbmVzcyBwYXNzIHRvIGNvbGxl
Y3QgdGhlIGtpbGwgbGlzdHMgZm9yIGFsbCBpbnN0cnVjdGlvbnMuIFRoZSBraWxsIGxpc3RzIHRl
bGwgdXMKKyAgICAgICAgLy8gYWJvdXQgdGhlIHdheXMgdGhhdCB0aGluZ3MgZGllIGF0IGFuIElu
c3QuIFRoZXJlIGFyZSBmb3VyIHdheXM6CisgICAgICAgIC8vIAorICAgICAgICAvLyAtIEFuIGVh
cmx5IGRlZiBjb3VsZCBkaWUgYWJvdmUgYW4gSW5zdC4KKyAgICAgICAgLy8gLSBBbiBlYXJseSB1
c2UgY291bGQga2lsbCBhYm92ZSBhbiBJbnN0LgorICAgICAgICAvLyAtIEEgbGF0ZSBkZWYgY291
bGQgZGllIGJlbG93IGFuIEluc3QuCisgICAgICAgIC8vIC0gQSBsYXRlIHVzZSBjb3VsZCBraWxs
IGJlbG93IGFuIEluc3QuCisgICAgICAgIC8vIAorICAgICAgICAvLyBPbmNlIHdlIGFyZSBhcm1l
ZCB3aXRoIG91ciBzdGF0ZSBtYXBwaW5nIGFuZCB0aGUga2lsbCBsaXN0cywgd2UgY2FuIHByb2Nl
c3MgdGhlIEluc3QKKyAgICAgICAgLy8gaW4gdGhlIG9yZGVyIG9mIGl0cyBleGVjdXRpb24gYW5k
IHVwZGF0ZSB0aGUgc3RhdGUgbWFwcGluZyBiYXNlZCBvbiBkZWZzIGFuZCBraWxsCisgICAgICAg
IC8vIGxpc3RzLgorICAgICAgICAvLyAKKyAgICAgICAgLy8gV2Ugc3RhcnQgYWJvdmUgdGhlIElu
c3Qgd2l0aCBhIHN0YXRlIHRoYXQgdGVsbHMgdXMgd2hhdCBpcyBsaXZlIGJlZm9yZSBpdC4gVGhp
cworICAgICAgICAvLyBpbmNsdWRlcyB0aGluZ3MgdGhhdCB3aWxsIGRpZSBhdCB0aGUgdG9wLiBX
ZSBjYW4gaGFuZGxlIGVhcmx5IHVzZXMgYW5kIGRlZnMgYnkgZ2l2aW5nCisgICAgICAgIC8vIHRo
ZW0gcmVnaXN0ZXJzIHRoYXQgYXJlIG5vdCBsaXZlLiBXZSBrbm93IHdoaWNoIHJlZ2lzdGVycyBi
ZWNvbWUgbGl2ZSBiZWNhdXNlIG91cgorICAgICAgICAvLyBtYXBwaW5nIHRlbGxzIHVzIHRoaXMu
IFRoZW4gd2UgY2FuIGFwcGx5IHRoZSBlYXJseSBkZWF0aHMuIFRoZW4gd2UgcHJvY2VzcyBsYXRl
IHVzZXMKKyAgICAgICAgLy8gYW5kIGRlZnMsIGFuZCB0aGVuIGFwcGx5IHRoZSBsYXRlIGRlYXRo
cy4KKyAgICAgICAgLy8gCisgICAgICAgIC8vIFRoaXMgYWxnb3JpdGhtIG11c3QgcHJvY2VlZCBp
biB0aGUgb3JkZXIgb2YgdGhlIEluc3QncyBleGVjdXRpb24uIFdlIGNhbiB1c2UgdGhlCisgICAg
ICAgIC8vIG5vdGlvbiBvZiBsb2NraW5nIGF0IGVhY2ggc3RhZ2UgLSBlYXJseSBhbmQgdGhlbiBs
YXRlIC0gdG8gaW5kaWNhdGUgd2hpY2ggcmVnaXN0ZXJzCisgICAgICAgIC8vIGhhdmUgYWxyZWFk
eSBiZWVuIHB1cnBvc2VkLiBBbGwgZWFybHkgdXNlcyB3aWxsIGhvbGQgdGhlIGxvY2sgd2hpbGUg
d2UgYXJlIHByb2Nlc3NpbmcKKyAgICAgICAgLy8gdGhlIGVhcmx5IHBhcnQgb2YgdGhlIGluc3Ry
dWN0aW9uLCBhbmQgdGhlbiByZWxlYXNlIGl0IGJlZm9yZSB3ZSBzdGFydCBwcm9jZXNzaW5nIHRo
ZQorICAgICAgICAvLyBsYXRlIHN0dWZmLiBJbiBiZXR3ZWVuIGVhcmx5IGFuZCBsYXRlLCBhZnRl
ciB3ZSBoYXZlIHVubG9ja2VkIHRoaW5ncyB1c2VkIGVhcmx5LCB3ZQorICAgICAgICAvLyBjYW4g
cGVyZm9ybSBlYXJseSBkZWF0aHMuIEFsbCBlYXJseSBkZWZzIHdpbGwgaG9sZCB0aGUgbG9jayBl
YXJseSBhbmQgdGhlbiByZWxlYXNlIGl0CisgICAgICAgIC8vIGFmdGVyIHdlIHByb2Nlc3MgbGF0
ZSB0aGluZ3MuIEFzIGEgc3BlY2lhbCBjYXNlLCBVc2VEZWYgd2lsbCBhbHNvIHJlbGVhc2UgdGhl
IGxvY2sKKyAgICAgICAgLy8gbGF0ZS4KKyAgICAgICAgLy8gCisgICAgICAgIC8vIFRoaW5ncyBn
ZXQgd2VpcmQgd2l0aCBVc2VEZWYuIEx1Y2t5IGZvciB1cywgSW5zdHMgd2lsbCBoYXZlIGEgc21h
bGwgbnVtYmVyIG9mIFVzZURlZnMsCisgICAgICAgIC8vIHNvIHRoZSBhbGdvcml0aG0gZG9lc24n
dCBoYXZlIHRvIGJlIGVmZmljaWVudCBhbmQgd2UgY2FuIGJlIHN1cmUgdGhhdCBpZiB3ZSBoYW5k
bGUKKyAgICAgICAgLy8gVXNlRGVmcyBlYXJseSwgdGhlbiB0aGUgZ3JlZWR5IGFwcHJvYWNoIHNo
b3VsZCBqdXN0IHdvcmsuIFRoZSBsb2NraW5nIHN0cmF0ZWd5IGVuc3VyZXMKKyAgICAgICAgLy8g
dGhhdCB3ZSB3b24ndCB0cnkgdG8gcmV1c2UgdGhlIHJlZ2lzdGVyIHdlIGFscmVhZHkgcGlja2Vk
LiBUaGUgb25seSBhZGRpdGlvbmFsIGxvZ2ljCisgICAgICAgIC8vIGZvciBVc2VEZWYgaXMgdGhh
dCB3aGVuIHdlIHBpY2sgYSByZWdpc3RlciBmb3IgaXQsIHdoaWNoIGhhcHBlbnMgZWFybHksIHdl
IGxvb2sgYWhlYWQKKyAgICAgICAgLy8gdG8gbWFrZSBzdXJlIHRoYXQgd2UgZGlkbid0IGFscmVh
ZHkgbG9jayB0aGUgcmVnaXN0ZXIgbGF0ZS4gVGhlIG9ubHkgcmVnaXN0ZXJzIHRoYXQgd2UKKyAg
ICAgICAgLy8gY291bGQgaGF2ZSBhbHJlYWR5IGxvY2tlZCBsYXRlIGFyZSB0aGUgb25lcyB0aGF0
IGFyZSBjbG9iYmVyZWQgbGF0ZSBvciBkZWZpbmVkIGxhdGUuCisgICAgICAgIC8vIAorICAgICAg
ICAvLyBPbmUgb2YgdGhlIGJlYXV0aWZ1bCB0aGluZ3MgYWJvdXQgdGhpcyBhcHByb2FjaCBpcyB0
aGF0IHdlIGNhbiBwcm9jZXNzIHRoZSBJbnN0CisgICAgICAgIC8vIGluLXBsYWNlLiBXZSB3b24n
dCBlZGl0IHRoZSB1c2VzIHVudGlsIHdlIGhhdmUgYWNjb3VudGVkIGZvciB0aGVtLiBXZSB3b24n
dCBlZGl0IHRoZQorICAgICAgICAvLyBkZWZzIHVudGlsIHdlIGhhdmUgYWNjb3VudGVkIGZvciB0
aGVtLiBTbywgd2UgY2FuIGNvbXB1dGUgZm9yd2FyZCBsaXZlbmVzcyB3aGlsZSBhbHNvCisgICAg
ICAgIC8vIGVkaXRpbmcgdGhlIGluc3RydWN0aW9uLgorCisgICAgICAgIC8vIFNwaWxsIGFuZCBs
b2NrIGFsbCBlYXJseSBjbG9iYmVycy4gU3BpbGwgYWxsIGxhdGUgY2xvYmJlcnMsIGJ1dCBkb24n
dCBsb2NrIHRob3NlIHlldC4KKyAgICAgICAgaWYgKGluc3Qub3Bjb2RlID09IFBhdGNoKSB7Cisg
ICAgICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAg
ICAgIENsb2JiZXJlZCBlYXJseTogIiwgaW5zdC5leHRyYUVhcmx5Q2xvYmJlcmVkUmVncygpLCAi
XG4iKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgICBDbG9iYmVyZWQgbGF0ZTog
IiwgaW5zdC5leHRyYUNsb2JiZXJlZFJlZ3MoKSwgIlxuIik7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGluc3QuZXh0cmFFYXJseUNsb2JiZXJlZFJlZ3MoKS5mb3JF
YWNoKAorICAgICAgICAgICAgICAgIFsmXSAoUmVnIHJlZykgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoQXJnKFRtcChyZWcpKS50eXBlKCkgIT0gdHlwZSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgc3BpbGwocmVnKTsKKyAgICAgICAgICAg
ICAgICAgICAgbG9jayhyZWcpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgd2UgbG9jayBhbHJlYWR5LWFsbG9jYXRlZCByZWdpc3Rl
cnMgdGhhdCBhcmUgbGl2ZSBlYXJseS4gVGhpcyBpbmNsdWRlcyBhbGwKKyAgICAgICAgLy8gZWFy
bHkgdXNlcywgZWFybHkgZGVmcywgYW5kIGxhdGUgdXNlcy4KKyAgICAgICAgaW5zdC5mb3JFYWNo
VG1wKAorICAgICAgICAgICAgWyZdIChUbXAmIHRtcCwgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlw
ZSB0bXBUeXBlLCBBcmc6OldpZHRoKSB7CisgICAgICAgICAgICAgICAgaWYgKHRtcFR5cGUgIT0g
dHlwZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGlmICgh
dG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICBpZiAoIUFyZzo6aXNFYXJseURlZihyb2xlKSAmJiAhQXJnOjppc0FueVVzZShyb2xlKSAmJiBy
b2xlICE9IEFyZzo6VXNlQWRkcikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGxvY2soZmlsbCh0bXAsIHJvbGUpKTsKKyAgICAg
ICAgICAgIH0pOworCisgICAgICAgIC8vIEFsbG9jYXRlIHJlZ2lzdGVycyB0byB0aG9zZSB0aGlu
Z3MgdGhhdCBkb24ndCBhZG1pdCBzdGFjay4KKyAgICAgICAgaW5zdC5mb3JFYWNoQXJnKAorICAg
ICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSBhcmdUeXBl
LCBBcmc6OldpZHRoIHdpZHRoKSB7CisgICAgICAgICAgICAgICAgaWYgKGFyZ1R5cGUgIT0gdHlw
ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGlmIChhcmcuaXNUbXAoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIUFy
Zzo6aXNFYXJseURlZihyb2xlKSAmJiAhQXJnOjppc0FueVVzZShyb2xlKSAmJiByb2xlICE9IEFy
Zzo6VXNlQWRkcikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAg
ICAgICAgICAgICBpZiAoYXJnLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0LmFkbWl0c1N0YWNrKGFyZykpCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIGFyZyA9IFRt
cChsb2NrKGZpbGwoYXJnLnRtcCgpLCByb2xlKSkpOworICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYXJnLmZvckVhY2hUbXAo
CisgICAgICAgICAgICAgICAgICAgIHJvbGUsIHR5cGUsIHdpZHRoLAorICAgICAgICAgICAgICAg
ICAgICBbJl0gKFRtcCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIHRtcFR5cGUsIEFy
Zzo6V2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXBUeXBlICE9IHR5cGUp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAg
ICAgICAgdG1wID0gVG1wKGxvY2soZmlsbCh0bXAsIHJvbGUpKSk7CisgICAgICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgLy8gQWxsb2NhdGUgcmVnaXN0ZXJz
IHRvIHRob3NlIHRoaW5ncyB0aGF0IGFkbWl0IHN0YWNrIGJ1dCBhcmUgbm90IGNvbGQuIEtlZXAg
dGhpcyB1cCBzbworICAgICAgICAvLyBsb25nIGFzIHdlIHN0aWxsIGhhdmUgcmVnaXN0ZXJzLgor
ICAgICAgICBpbnN0LmZvckVhY2hBcmcoCisgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6
OlJvbGUgcm9sZSwgQXJnOjpUeXBlIGFyZ1R5cGUsIEFyZzo6V2lkdGgpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoYXJnVHlwZSAhPSB0eXBlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgaWYgKCFBcmc6OmlzQW55VXNlKHJvbGUpICYmICFBcmc6OmlzRWFybHlE
ZWYocm9sZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBp
ZiAoQXJnOjppc0NvbGRVc2Uocm9sZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICBpZiAoIWFyZy5pc1RtcCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgaWYgKGFyZy5pc1JlZygpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgICAgICAgICBSZWcgcmVnID0gZmlsbChhcmcudG1wKCksIHJv
bGUsIERvbnRTcGlsbCk7CisgICAgICAgICAgICAgICAgaWYgKCFyZWcpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBhcmcgPSBUbXAobG9jayhyZWcpKTsKKyAg
ICAgICAgICAgIH0pOworCisgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hhdCB0byBkbyB3aXRoIGV2
ZXJ5dGhpbmcgZWxzZS4KKyAgICAgICAgaW5zdC5mb3JFYWNoQXJnKAorICAgICAgICAgICAgWyZd
IChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSBhcmdUeXBlLCBBcmc6OldpZHRo
IHdpZHRoKSB7CisgICAgICAgICAgICAgICAgaWYgKGFyZ1R5cGUgIT0gdHlwZSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGlmICghQXJnOjppc0FueVVzZShy
b2xlKSAmJiAhQXJnOjppc0Vhcmx5RGVmKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgaWYgKCFhcmcuaXNUbXAoKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGlmIChhcmcuaXNSZWcoKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAgICAgVG1wSW5mbyYgaW5mbyA9IGdldElu
Zm8oYXJnLnRtcCgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIGhhdmUgYSBjYXNlIGZvciBjb25zdGFudHMgaGVyZS4KKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBpZiAoaW5mby5oYXNTcGlsbCkgeworICAgICAgICAgICAg
ICAgICAgICBTdGFja1Nsb3QqIHNsb3QgPSBzcGlsbFNsb3QoYXJnLnRtcCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgZW5zdXJlV2lkdGgoc2xvdCwgd2lkdGgpOworICAgICAgICAgICAgICAgICAg
ICBhcmcgPSBBcmc6OnN0YWNrKHNsb3QpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYXJnID0gVG1wKGxvY2soaW5mby5y
ZWcpKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgIC8vIFVubG9jayBhbGwgb2YgdGhlIGVh
cmx5IGNsb2JiZXJlZCByZWdpc3RlcnMuCisgICAgICAgIGlmIChpbnN0Lm9wY29kZSA9PSBQYXRj
aCkgeworICAgICAgICAgICAgaW5zdC5leHRyYUVhcmx5Q2xvYmJlcmVkUmVncygpLmZvckVhY2go
CisgICAgICAgICAgICAgICAgWyZdIChSZWcgcmVnKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
IChBcmcoVG1wKHJlZykpLnR5cGUoKSAhPSB0eXBlKQorICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgICAgICAgICB1bmxvY2socmVnKTsKKyAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFVubG9jayBhbGwgb2YgdGhlIGVhcmx5IHVz
ZXMuIFRoaXMgcGVybWl0cyB0aG9zZSByZWdpc3RlcnMgdG8gYmUgdXNlZCBmb3Igb3RoZXIgdGhp
bmdzLgorICAgICAgICAvLyBJdCBldmVuIG1lYW5zIHRoYXQgd2UgbWlnaHQgc3BpbGwgdGhlIHVz
ZWQgcmVnaXN0ZXIgaW4gdGhlIHNodWZmbGUgZHVlIHRvIGEgbGF0ZSBkZWYgdGhhdAorICAgICAg
ICAvLyBjb3VsZCB1c2UgdGhhdCByZWdpc3Rlci4KKyAgICAgICAgVmVjdG9yPFJlZywgMT4gcmVn
c1RvUmVsb2NrOworICAgICAgICBpbnN0LmZvckVhY2hUbXAoCisgICAgICAgICAgICBbJl0gKFRt
cCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIGFyZ1R5cGUsIEFyZzo6V2lkdGgpIHsK
KyAgICAgICAgICAgICAgICBpZiAoYXJnVHlwZSAhPSB0eXBlKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgaWYgKCFBcmc6OmlzRWFybHlVc2Uocm9sZSkgJiYg
cm9sZSAhPSBBcmc6OlVzZUFkZHIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh0bXAuaXNSZWcoKSk7CisgICAgICAgICAgICAgICAg
aWYgKEFyZzo6aXNMYXRlRGVmKHJvbGUpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlZ3NUb1Jl
bG9jay5hcHBlbmQodG1wLnJlZygpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZygiICAgICAgICAgICAgVW5sb2NraW5nICIsIHRtcCwgIlxuIik7Cisg
ICAgICAgICAgICAgICAgdW5sb2NrKHRtcC5yZWcoKSk7CisgICAgICAgICAgICB9KTsKKworICAg
ICAgICAvLyBSZWxvY2sgdGhlIFVzZURlZnMuIFdlIGNvdWxkIGhhdmUgYSBVc2VEZWYgZm9yIHNv
bWUgcmVnaXN0ZXIgYW5kIGFsc28gYSBVc2UgZm9yIHRoYXQgc2FtZQorICAgICAgICAvLyByZWdp
c3Rlci4gV2hlbiB0aGF0IGhhcHBlbnMsIHdlIHdpbGwgaGF2ZSB1bmxvY2tlZCBpdCBhYm92ZSBk
dWUgdG8gdGhlIFVzZS4KKyAgICAgICAgZm9yIChSZWcgcmVnIDogcmVnc1RvUmVsb2NrKQorICAg
ICAgICAgICAgbG9jayhyZWcpOworCisgICAgICAgIC8vIEFwcGx5IGFsbCBvZiB0aGUgZWFybHkg
ZGVhdGhzLgorICAgICAgICBmb3IgKERlYXRoJiBkZWF0aCA6IG1fZGVhdGhzLmF0KG1fYmxvY2ss
IG1faW5zdEluZGV4KSkgeworICAgICAgICAgICAgaWYgKGRlYXRoLmRlYXRoTW9kZSA9PSBFYXJs
eURlYXRoKQorICAgICAgICAgICAgICAgIGtpbGwoZGVhdGgudG1wKTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIExvY2sgYWxsIG9mIHRoZSBsYXRlIGNsb2JiZXJlZCByZWdpc3RlcnMuCisgICAg
ICAgIGlmIChpbnN0Lm9wY29kZSA9PSBQYXRjaCkgeworICAgICAgICAgICAgaW5zdC5leHRyYUNs
b2JiZXJlZFJlZ3MoKS5mb3JFYWNoKAorICAgICAgICAgICAgICAgIFsmXSAoUmVnIHJlZykgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoQXJnKFRtcChyZWcpKS50eXBlKCkgIT0gdHlwZSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgc3BpbGwo
cmVnKTsKKyAgICAgICAgICAgICAgICAgICAgbG9jayhyZWcpOworICAgICAgICAgICAgICAgIH0p
OworICAgICAgICB9CisKKyAgICAgICAgLy8gRmlsbCBhbmQgbG9jayBhbGwgb2YgdGhlIGxhdGUg
ZGVmcy4KKyAgICAgICAgaW5zdC5mb3JFYWNoQXJnKAorICAgICAgICAgICAgWyZdIChBcmcmIGFy
ZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSBhcmdUeXBlLCBBcmc6OldpZHRoKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGFyZ1R5cGUgIT0gdHlwZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgIGlmICghQXJnOjppc0xhdGVEZWYocm9sZSkpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0Vhcmx5VXNl
KHJvbGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgaWYg
KCFhcmcuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgIGxvY2soZmlsbChhcmcudG1wKCksIHJvbGUpKTsKKyAgICAgICAgICAgIH0pOworCisgICAg
ICAgIC8vIEFzc2lnbiByZWdpc3RlcnMgdG8gbGF0ZSBkZWZzLiBBbHdheXMgcHV0IHRoZXNlIHRo
aW5ncyBpbnRvIHJlZ2lzdGVycyBmaXJzdC4KKyAgICAgICAgLy8gRklYTUU6IFJldmlzaXQgdGhh
dCBhcHByb2FjaC4gTWF5YmUgd2Ugd2FudCB0byBpZGVudGlmeSBkZWZzIHRoYXQgYXJlIHJlYWxs
eSB1c2VsZXNzIGFuZAorICAgICAgICAvLyBwdXQgdGhvc2UgZGlyZWN0bHkgaW50byB0aGUgc3Rh
Y2suCisgICAgICAgIGluc3QuZm9yRWFjaEFyZygKKyAgICAgICAgICAgIFsmXSAoQXJnJiBhcmcs
IEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgYXJnVHlwZSwgQXJnOjpXaWR0aCkgeworICAgICAg
ICAgICAgICAgIGlmIChhcmdUeXBlICE9IHR5cGUpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICBpZiAoIUFyZzo6aXNMYXRlRGVmKHJvbGUpKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNFYXJseVVzZShy
b2xlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGlmICgh
YXJnLmlzVG1wKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICBpZiAoYXJnLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICBhcmcgPSBUbXAobG9jayhmaWxsKGFyZy50bXAoKSwgcm9sZSkpKTsKKyAgICAgICAg
ICAgIH0pOworCisgICAgICAgIHVubG9ja0FsbCgpOworCisgICAgICAgIC8vIEFwcGx5IHRoZSBs
YXRlIGRlYXRocy4KKyAgICAgICAgZm9yIChEZWF0aCYgZGVhdGggOiBtX2RlYXRocy5hdChtX2Js
b2NrLCBtX2luc3RJbmRleCkpIHsKKyAgICAgICAgICAgIGlmIChkZWF0aC5kZWF0aE1vZGUgPT0g
TGF0ZURlYXRoKQorICAgICAgICAgICAgICAgIGtpbGwoZGVhdGgudG1wKTsKKyAgICAgICAgfQor
CisgICAgICAgIGVtaXRTaHVmZmxlKG1faW5zdEluZGV4KTsKKyAgICB9CisKKyAgICB2b2lkIHBy
ZVNwaWxsKHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgICAgICBkYXRhTG9nKCIgICAgICBQcmUtc3BpbGxpbmcgaW4gIiwgKm1fYmxvY2ssICJcbiIp
OworICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9zdGF0ZS5tYXBwaW5nKSB7CisgICAgICAg
ICAgICBpZiAoZW50cnkudmFsdWUuaGFzU3BpbGwpIHsKKyAgICAgICAgICAgICAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICAgICAgQWxyZWFkeSBoYXMg
c3BpbGw6ICIsIGVudHJ5LmtleSwgIlxuIik7CisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBTdGFja1Nsb3QqIHNsb3QgPSBzcGlsbFNsb3QoZW50
cnkua2V5KTsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFM
b2coIiAgICAgICAgIENvbnNpZGVyaW5nICIsIGVudHJ5LmtleSwgIlxuIik7CisgICAgICAgICAg
ICBpZiAoZW50cnkudmFsdWUucmVnKSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgIFNwaWxsaW5nIGZyb20gIiwgZW50
cnkudmFsdWUucmVnLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBtX3NodWZmbGVQYWlycy5hcHBl
bmQoCisgICAgICAgICAgICAgICAgICAgIFNodWZmbGVQYWlyKFRtcChlbnRyeS52YWx1ZS5yZWcp
LCBBcmc6OnN0YWNrKHNsb3QpLCB3aWR0aChzbG90KSkpOworICAgICAgICAgICAgICAgIGVudHJ5
LnZhbHVlLmhhc1NwaWxsID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZW50cnkudmFs
dWUuaGFzQ29uc3RhbnQpIHsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZygiICAgICAgICAgU3BpbGxpbmcgZnJvbSBjb25zdGFudCAiLCBl
bnRyeS52YWx1ZS5jb25zdGFudCwgIlxuIik7CisgICAgICAgICAgICAgICAgbV9zaHVmZmxlUGFp
cnMuYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICBTaHVmZmxlUGFpcihBcmc6OmltbTY0KGVu
dHJ5LnZhbHVlLmNvbnN0YW50KSwgQXJnOjpzdGFjayhzbG90KSwgd2lkdGgoc2xvdCkpKTsKKyAg
ICAgICAgICAgICAgICBlbnRyeS52YWx1ZS5oYXNTcGlsbCA9IHRydWU7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBlbWl0U2h1ZmZsZShpbmRleCk7CisgICAgfQorCisgICAg
dm9pZCByZWJhc2UodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBSZWdpc3RlclNldCBz
ZXQ7CisgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBtX3N0YXRlLm1hcHBpbmcpIHsKKyAgICAg
ICAgICAgIGlmIChlbnRyeS5rZXkuaXNSZWcoKSAmJiAoZW50cnkudmFsdWUuaGFzQ29uc3RhbnQg
fHwgZW50cnkudmFsdWUuaGFzU3BpbGwpKQorICAgICAgICAgICAgICAgIHNldC5zZXQoZW50cnku
a2V5LnJlZygpKTsKKyAgICAgICAgfQorCisgICAgICAgIHNldC5mb3JFYWNoKAorICAgICAgICAg
ICAgWyZdIChSZWcgcmVnKSB7CisgICAgICAgICAgICAgICAgZmlsbChUbXAocmVnKSwgQXJnOjpV
c2UpOworICAgICAgICAgICAgfSk7CisgICAgICAgIGVtaXRTaHVmZmxlKGluZGV4KTsKKyAgICB9
CisKKyAgICB2b2lkIGJvb3RCbG9jayhCYXNpY0Jsb2NrKiBibG9jaykKKyAgICB7CisgICAgICAg
IFN0YXRlJiBkc3RTdGF0ZSA9IG1fYXRIZWFkW2Jsb2NrXTsKKworICAgICAgICBmb3IgKGF1dG8m
IGVudHJ5IDogZHN0U3RhdGUubWFwcGluZykgeworICAgICAgICAgICAgVG1wSW5mbyYgc3JjSW5m
byA9IGdldEluZm8oZW50cnkua2V5KTsKKyAgICAgICAgICAgIFRtcEluZm8mIGRzdEluZm8gPSBl
bnRyeS52YWx1ZTsKKyAgICAgICAgICAgIGRzdEluZm8ucmVnID0gc3JjSW5mby5yZWc7CisgICAg
ICAgICAgICBkc3RJbmZvLmhhc1NwaWxsID0gc3JjSW5mby5oYXNTcGlsbDsKKyAgICAgICAgICAg
IGlmIChzcmNJbmZvLnJlZykKKyAgICAgICAgICAgICAgICBkc3RTdGF0ZS5yZXZlcnNlTWFwcGlu
Z1tzcmNJbmZvLnJlZ10udG1wID0gZW50cnkua2V5OworICAgICAgICB9CisKKyAgICAgICAgZHN0
U3RhdGUuaXNTZXR0bGVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICB2b2lkIGNvbmZvcm1UbyhCYXNp
Y0Jsb2NrKiBibG9jaykKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fYmxvY2stPmxh
c3QoKS5vcGNvZGUgPT0gSnVtcCk7CisgICAgICAgIAorICAgICAgICBTdGF0ZSYgZHN0U3RhdGUg
PSBtX2F0SGVhZFtibG9ja107CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGRzdFN0YXRlLmlzU2V0
dGxlZCk7CisKKyAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IGRzdFN0YXRlLm1hcHBpbmcpIHsK
KyAgICAgICAgICAgIFRtcEluZm8mIHNyY0luZm8gPSBnZXRJbmZvKGVudHJ5LmtleSk7CisgICAg
ICAgICAgICBUbXBJbmZvJiBkc3RJbmZvID0gZW50cnkudmFsdWU7CisKKyAgICAgICAgICAgIGlm
IChkc3RJbmZvLnJlZyAmJiBkc3RJbmZvLnJlZyAhPSBzcmNJbmZvLnJlZykgeworICAgICAgICAg
ICAgICAgIFNodWZmbGVQYWlyIHBhaXI7CisgICAgICAgICAgICAgICAgaWYgKHNyY0luZm8ucmVn
KSB7CisgICAgICAgICAgICAgICAgICAgIHBhaXIgPSBTaHVmZmxlUGFpcigKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFRtcChzcmNJbmZvLnJlZyksIFRtcChkc3RJbmZvLnJlZyksIG1fdG1wV2lk
dGgud2lkdGgoZW50cnkua2V5KSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzcmNJbmZv
Lmhhc0NvbnN0YW50KSB7CisgICAgICAgICAgICAgICAgICAgIHBhaXIgPSBTaHVmZmxlUGFpcigK
KyAgICAgICAgICAgICAgICAgICAgICAgIEFyZzo6aW1tNjQoc3JjSW5mby5jb25zdGFudCksIFRt
cChkc3RJbmZvLnJlZyksIG1fdG1wV2lkdGgud2lkdGgoZW50cnkua2V5KSk7CisgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3JjSW5m
by5oYXNTcGlsbCk7CisgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc2xvdCA9IHNwaWxs
U2xvdChlbnRyeS5rZXkpOworICAgICAgICAgICAgICAgICAgICBwYWlyID0gU2h1ZmZsZVBhaXIo
QXJnOjpzdGFjayhzbG90KSwgVG1wKGRzdEluZm8ucmVnKSwgd2lkdGgoc2xvdCkpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX3NodWZmbGVQYWlycy5hcHBlbmQocGFpcik7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChkc3RJbmZvLmhhc1NwaWxsICYmICFz
cmNJbmZvLmhhc1NwaWxsKSB7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3JjSW5m
by5yZWcpOworICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc2xvdCA9IHNwaWxsU2xvdChlbnRy
eS5rZXkpOworICAgICAgICAgICAgICAgIG1fc2h1ZmZsZVBhaXJzLmFwcGVuZChTaHVmZmxlUGFp
cihUbXAoc3JjSW5mby5yZWcpLCBBcmc6OnN0YWNrKHNsb3QpLCB3aWR0aChzbG90KSkpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZW1pdFNodWZmbGUobV9ibG9jay0+c2l6
ZSgpIC0gMSk7CisgICAgfQorCisgICAgVG1wSW5mbyYgZ2V0SW5mbyhUbXAgdG1wKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fc3RhdGUubWFwcGluZy5hZGQodG1wLCBUbXBJbmZvKCkpLml0ZXJh
dG9yLT52YWx1ZTsKKyAgICB9CisKKyAgICBlbnVtIEZpbGxFZmZvcnQgeworICAgICAgICBNdXN0
RmlsbCwKKyAgICAgICAgRG9udFNwaWxsCisgICAgfTsKKworICAgIFJlZyBmaWxsKFRtcCB0bXAs
IEFyZzo6Um9sZSByb2xlLCBGaWxsRWZmb3J0IGZpbGxFZmZvcnQgPSBNdXN0RmlsbCkKKyAgICB7
CisgICAgICAgIGlmIChyb2xlID09IEFyZzo6VXNlRGVmIHx8IEFyZzo6aXNFYXJseURlZihyb2xl
KSkgeworICAgICAgICAgICAgSW5zdCYgaW5zdCA9IG1fYmxvY2stPmF0KG1faW5zdEluZGV4KTsK
KyAgICAgICAgICAgIHJldHVybiBmaWxsKAorICAgICAgICAgICAgICAgIHRtcCwgcm9sZSwgZmls
bEVmZm9ydCwKKyAgICAgICAgICAgICAgICBbJl0gKFJlZyBjYW5kaWRhdGUpIC0+IGJvb2wgewor
ICAgICAgICAgICAgICAgICAgICAvLyBVc2VEZWYgYW5kIGVhcmx5IERlZiByZXF1aXJlcyB1cyB0
byBsb29rIGFoZWFkIGFuZCBzZWUgaWYgdGhlIGNhbmRpZGF0ZQorICAgICAgICAgICAgICAgICAg
ICAvLyByZWdpc3RlciBpcyBhY2NlcHRhYmxlIHRvIHRoZSBsYXRlIGRlZnMsIGxhdGUgdXNlcywg
YW5kIGxhdGUgY2xvYmJlcnMuIEFuIGVhc3kKKyAgICAgICAgICAgICAgICAgICAgLy8gd2F5IHRv
IGRvIHRoaXMgaXMganVzdCB0byBzZWUgaWYgdGhlIHJlZ2lzdGVyIGFwcGVhcnMgYW55d2hlcmUg
aW4gdGhlIGFyZ3VtZW50CisgICAgICAgICAgICAgICAgICAgIC8vIGxpc3QuIE5vdGUgdGhhdCB3
ZSBkb24ndCBoYXZlIHRvIGNvbnNpZGVyIG5vbi1UbXAgQXJncywgYmVjYXVzZSB0aG9zZSB3b3Vs
ZAorICAgICAgICAgICAgICAgICAgICAvLyBhbGwgaGF2ZSBlYXJseSB1c2VzLgorICAgICAgICAg
ICAgICAgICAgICBmb3IgKEFyZyYgYXJnIDogaW5zdC5hcmdzKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoYXJnLmlzUmVnKCkgJiYgYXJnLnJlZygpID09IGNhbmRpZGF0ZSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICAvLyBPZiBjb3Vyc2UsIHRoZXJlIGlzIHRoZSBhbm5v
eWluZyBQYXRjaCBpbnN0cnVjdGlvbiBhbmQgaXRzIGNsb2JiZXJlZAorICAgICAgICAgICAgICAg
ICAgICAvLyByZWdpc3RlcnMuCisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0Lm9wY29kZSA9
PSBQYXRjaCAmJiBpbnN0LmV4dHJhQ2xvYmJlcmVkUmVncygpLmdldChjYW5kaWRhdGUpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIGZpbGwodG1wLCByb2xlLCBmaWxsRWZmb3J0LCBbXSAoUmVnKSAtPiBib29sIHsgcmV0
dXJuIHRydWU7IH0pOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9y
PgorICAgIFJlZyBmaWxsKFRtcCB0bXAsIEFyZzo6Um9sZSByb2xlLCBGaWxsRWZmb3J0IGZpbGxF
ZmZvcnQsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBpZiAodmVyYm9z
ZSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgIEZpbGxpbmcgIiwgdG1wLCAiIGZvciAi
LCByb2xlLCAiXG4iKTsKKyAgICAgICAgCisgICAgICAgIFRtcEluZm8mIGluZm8gPSBnZXRJbmZv
KHRtcCk7CisKKyAgICAgICAgLy8gRm9yIG1vc3QgRGVmcywgd2UgaW5zaXN0IHRoYXQgdGhleSBh
cmUgZGVhZC4gV2UgbWFrZSBhbiBleGNlcHRpb24gZm9yIFVzZURlZiwgd2hpY2ggZ2V0cworICAg
ICAgICAvLyBmaWxsZWQgYXMgYSB1c2UuCisgICAgICAgIGlmIChBcmc6OmlzQW55RGVmKHJvbGUp
ICYmICFBcmc6OmlzRWFybHlVc2Uocm9sZSkpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KCFpbmZvLmhhc1NwaWxsKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFpbmZvLmhhc0Nv
bnN0YW50KTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFpbmZvLnJlZyk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGlmIChpbmZvLnJlZykgeworICAgICAgICAgICAgaWYgKHZl
cmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICAgICAgICAgQWxyZWFkeSBpbiAi
LCBpbmZvLnJlZywgIlxuIik7CisgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkpCisgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQodG1wLnJlZygpID09IGluZm8ucmVnKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgcmV0dXJuIGluZm8ucmVnOworICAgICAgICB9CisKKyAgICAgICAg
UmVnIHJlZzsKKyAgICAgICAgaWYgKHRtcC5pc1JlZygpKSB7CisgICAgICAgICAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgICAgICBNdXN0IHVzZSAiLCB0
bXAucmVnKCksICJcbiIpOworICAgICAgICAgICAgcmVnID0gdG1wLnJlZygpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgZm9yIChSZWcgY2FuZGlkYXRlIDogcmVnc0luUHJpb3JpdHlP
cmRlcih0eXBlKSkgeworICAgICAgICAgICAgICAgIFJlZ0luZm8mIHJlZ0luZm8gPSBtX3N0YXRl
LnJldmVyc2VNYXBwaW5nW2NhbmRpZGF0ZV07CisgICAgICAgICAgICAgICAgaWYgKHJlZ0luZm8u
aXNMb2NrZWQgfHwgcmVnSW5mby50bXAgfHwgIWZ1bmN0b3IoY2FuZGlkYXRlKSkKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgcmVnID0gY2FuZGlkYXRlOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
IXJlZykgeworICAgICAgICAgICAgICAgIGlmIChmaWxsRWZmb3J0ID09IERvbnRTcGlsbCkgewor
ICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coIiAgICAgICAgICAgIEdpdmluZyB1cCBkdWUgdG8gZWZmb3J0LlxuIik7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBSZWcoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gTmVlZCB0byBzcGlsbCBzb21ldGhpbmcuIFNw
aWxsIHRoZSByZWcgdGhhdCBob2xkcyB0aGUgdG1wIHRoYXQgaGFzIHRoZSBsZWFzdCB3YXJtCisg
ICAgICAgICAgICAgICAgLy8gdXNlcy4gV2UgYXBwbHkgdHdvIG11bHRpcGxpZXJzOgorICAgICAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gLSBjb25zdGFudCBtdWx0aXBsaWVyOiBp
ZiBhIHJlZ2lzdGVyIGhhcyBhIGNvbnN0YW50LCB3ZSBhcmUgbW9yZSBsaWtlbHkgdG8gdXNlIGl0
LgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gLSByZWcgbXVsdGlwbGll
cjogaWYgYSBUbXAgaXNSZWcsIHdlIGFyZSBsZXNzIGxpa2VseSB0byB1c2UgaXQuCisgICAgICAg
ICAgICAgICAgLy9kb3VibGUgY29uc3RhbnRNdWx0aXBsaWVyID0gMC4xOworICAgICAgICAgICAg
ICAgIGRvdWJsZSByZWdNdWx0aXBsaWVyID0gMTAwMDsKKyAgICAgICAgICAgICAgICBkb3VibGUg
bWluV2FybVVzZXMgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCk7Cisg
ICAgICAgICAgICAgICAgZm9yIChSZWcgY2FuZGlkYXRlIDogcmVnc0luUHJpb3JpdHlPcmRlcih0
eXBlKSkgeworICAgICAgICAgICAgICAgICAgICBSZWdJbmZvJiByZWdJbmZvID0gbV9zdGF0ZS5y
ZXZlcnNlTWFwcGluZ1tjYW5kaWRhdGVdOworICAgICAgICAgICAgICAgICAgICBpZiAocmVnSW5m
by5pc0xvY2tlZCB8fCAhZnVuY3RvcihjYW5kaWRhdGUpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBudW1XYXJtVXNlcyA9IG1f
dXNlQ291bnRzW3JlZ0luZm8udG1wXS5udW1XYXJtVXNlczsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHJlZ0luZm8udG1wID09IFRtcChjYW5kaWRhdGUpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgbnVtV2FybVVzZXMgKj0gcmVnTXVsdGlwbGllcjsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KG51bVdhcm1Vc2VzIDwgbWluV2FybVVzZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
ZyA9IGNhbmRpZGF0ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1pbldhcm1Vc2VzID0gbnVt
V2FybVVzZXM7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgCisg
ICAgICAgICAgICAgICAgaWYgKCFyZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJv
c2UpCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgICAgICBSYW4gb3V0
IG9mIHJlZ2lzdGVycy5cbiIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVnKCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgICAgICBVc2luZyAiLCByZWcs
ICJcbiIpOworCisgICAgICAgIHNwaWxsKHJlZyk7CisgICAgICAgIGlmIChBcmc6OmlzQW55VXNl
KHJvbGUpICYmIHJvbGUgIT0gQXJnOjpTY3JhdGNoKSB7CisgICAgICAgICAgICBTdGFja1Nsb3Qq
IHNsb3QgPSBzcGlsbFNsb3QodG1wKTsKKyAgICAgICAgICAgIGlmIChpbmZvLmhhc0NvbnN0YW50
KSB7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQodHlwZSA9PSBBcmc6OkdQKTsKKyAg
ICAgICAgICAgICAgICBhZGRNb3ZlKFNodWZmbGVQYWlyKEFyZzo6aW1tNjQoaW5mby5jb25zdGFu
dCksIFRtcChyZWcpLCB3aWR0aChzbG90KSkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpbmZvLmhhc1NwaWxsKTsKKyAgICAgICAgICAgICAg
ICBhZGRNb3ZlKFNodWZmbGVQYWlyKEFyZzo6c3RhY2soc2xvdCksIFRtcChyZWcpLCB3aWR0aChz
bG90KSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1fc3RhdGUucmV2ZXJz
ZU1hcHBpbmdbcmVnXS50bXAgPSB0bXA7CisgICAgICAgIGluZm8ucmVnID0gcmVnOworICAgICAg
ICByZXR1cm4gcmVnOworICAgIH0KKworICAgIHZvaWQgc3BpbGwoUmVnIHJlZykKKyAgICB7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlZyk7CisgICAgICAgIFJlZ0luZm8mIHJlZ0luZm8gPSBt
X3N0YXRlLnJldmVyc2VNYXBwaW5nW3JlZ107CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFyZWdJ
bmZvLmlzTG9ja2VkKTsKKyAgICAgICAgaWYgKCFyZWdJbmZvLnRtcCkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAg
ICBTcGlsbGluZyAiLCByZWcsICJcbiIpOworICAgICAgICAKKyAgICAgICAgVG1wSW5mbyYgdG1w
SW5mbyA9IGdldEluZm8ocmVnSW5mby50bXApOworCisgICAgICAgIGlmICghdG1wSW5mby5oYXNT
cGlsbCkgeworICAgICAgICAgICAgU3RhY2tTbG90KiBzbG90ID0gc3BpbGxTbG90KHJlZ0luZm8u
dG1wKTsKKyAgICAgICAgICAgIGFkZE1vdmUoU2h1ZmZsZVBhaXIoVG1wKHJlZyksIEFyZzo6c3Rh
Y2soc2xvdCksIHdpZHRoKHNsb3QpKSk7CisgICAgICAgICAgICB0bXBJbmZvLmhhc1NwaWxsID0g
dHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZWdJbmZvLnRtcCA9IFRtcCgpOworICAgICAgICB0
bXBJbmZvLnJlZyA9IFJlZygpOworICAgIH0KKworICAgIHZvaWQga2lsbChUbXAgdG1wKQorICAg
IHsKKyAgICAgICAgVG1wSW5mbyYgdG1wSW5mbyA9IGdldEluZm8odG1wKTsKKyAgICAgICAgaWYg
KHRtcEluZm8ucmVnKSB7CisgICAgICAgICAgICBSZWdJbmZvJiByZWdJbmZvID0gbV9zdGF0ZS5y
ZXZlcnNlTWFwcGluZ1t0bXBJbmZvLnJlZ107CisgICAgICAgICAgICBpZiAocmVnSW5mby5pc0xv
Y2tlZCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB0bXBJbmZvLnJlZyA9
IFJlZygpOworICAgICAgICAgICAgcmVnSW5mby50bXAgPSBUbXAoKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiICAgICAgICAgS2lsbGlu
ZyAiLCB0bXAsICJcbiIpOworICAgICAgICAKKyAgICAgICAgdG1wSW5mby5oYXNDb25zdGFudCA9
IGZhbHNlOworICAgICAgICB0bXBJbmZvLmhhc1NwaWxsID0gZmFsc2U7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBSZWcgbG9jayhSZWcgcmVnKQorICAgIHsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQocmVnKTsKKyAgICAgICAgYm9vbCYgaXNMb2NrZWQgPSBtX3N0YXRlLnJldmVyc2VN
YXBwaW5nW3JlZ10uaXNMb2NrZWQ7CisgICAgICAgIGlmICghaXNMb2NrZWQpIHsKKyAgICAgICAg
ICAgIGlzTG9ja2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIG1fbG9ja2VkLmFwcGVuZChyZWcpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiByZWc7CisgICAgfQorCisgICAgdm9pZCB1bmxvY2so
UmVnIHJlZykKKyAgICB7CisgICAgICAgIG1fc3RhdGUucmV2ZXJzZU1hcHBpbmdbcmVnXS5pc0xv
Y2tlZCA9IGZhbHNlOworICAgIH0KKworICAgIHZvaWQgdW5sb2NrQWxsKCkKKyAgICB7CisgICAg
ICAgIGZvciAoUmVnIHJlZyA6IG1fbG9ja2VkKQorICAgICAgICAgICAgdW5sb2NrKHJlZyk7Cisg
ICAgICAgIG1fbG9ja2VkLnJlc2l6ZSgwKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZE1vdmUoY29u
c3QgU2h1ZmZsZVBhaXImIHBhaXIpCisgICAgeworICAgICAgICBtX3NodWZmbGVQYWlycy5yZW1v
dmVBbGxNYXRjaGluZygKKyAgICAgICAgICAgIFsmXSAoY29uc3QgU2h1ZmZsZVBhaXImIG90aGVy
UGFpcikgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG90aGVyUGFpci5kc3QoKSA9
PSBwYWlyLmRzdCgpOworICAgICAgICAgICAgfSk7CisgICAgICAgIGZvciAoU2h1ZmZsZVBhaXIm
IG90aGVyUGFpciA6IG1fc2h1ZmZsZVBhaXJzKSB7CisgICAgICAgICAgICBpZiAob3RoZXJQYWly
LmRzdCgpID09IHBhaXIuc3JjKCkpIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChv
dGhlclBhaXIud2lkdGgoKSA9PSBwYWlyLndpZHRoKCkpOworICAgICAgICAgICAgICAgIG1fc2h1
ZmZsZVBhaXJzLmFwcGVuZChTaHVmZmxlUGFpcihvdGhlclBhaXIuc3JjKCksIHBhaXIuZHN0KCks
IHBhaXIud2lkdGgoKSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBtX3NodWZmbGVQYWlycy5hcHBlbmQocGFpcik7CisgICAgfQor
CisgICAgdm9pZCBlbWl0U2h1ZmZsZSh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIGlm
IChtX3NodWZmbGVQYWlycy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IG1faW5zZXJ0aW9uU2V0Lmluc2VydChpbmRleCwgY3JlYXRlU2h1ZmZsZShtX2Jsb2NrLT5hdChp
bmRleCkub3JpZ2luLCBtX3NodWZmbGVQYWlycykpOworICAgICAgICBtX3NodWZmbGVQYWlycy5y
ZXNpemUoMCk7CisgICAgfQorCisgICAgQXJnOjpXaWR0aCB3aWR0aChTdGFja1Nsb3QqIHNsb3Qp
CisgICAgeworICAgICAgICByZXR1cm4gQXJnOjp3aWR0aEZvckJ5dGVzKHNsb3QtPmJ5dGVTaXpl
KCkpOworICAgIH0KKworICAgIC8vIFdlIG1heSBjaG9vc2UgdG8gZG8gYSBmdWxsd2lkdGggZGVm
IG9yIHVzZSBvbiBhIHN1YndpZHRoIHNwaWxsIHNsb3QuIFdoZW4gdGhpcyBoYXBwZW5zLCB3ZQor
ICAgIC8vIG5lZWQgdG8gaW5jcmVhc2UgdGhlIHdpZHRoIG9mIHRoZSBzbG90LiBOb3RlIHRoYXQg
d2UgcmVseSBvbiBzcGlsbCBzbG90cyBoYXZpbmcgWkRlZgorICAgIC8vIHNlbWFudGljcy4KKyAg
ICB2b2lkIGVuc3VyZVdpZHRoKFN0YWNrU2xvdCogc2xvdCwgQXJnOjpXaWR0aCB3aWR0aCkKKyAg
ICB7CisgICAgICAgIHNsb3QtPmVuc3VyZVNpemUoQXJnOjpieXRlcyh3aWR0aCkpOworICAgIH0K
KyAgICAKKyAgICBTdGFja1Nsb3QqIHNwaWxsU2xvdChUbXAgdG1wKQorICAgIHsKKyAgICAgICAg
U3RhY2tTbG90KiYgcmVzdWx0ID0gbV9zcGlsbFNsb3RzLmFkZCh0bXAsIG51bGxwdHIpLml0ZXJh
dG9yLT52YWx1ZTsKKyAgICAgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9
IG1fY29kZS5hZGRTdGFja1Nsb3QoCisgICAgICAgICAgICAgICAgbV90bXBXaWR0aC53aWR0aCh0
bXApIDw9IEFyZzo6V2lkdGgzMiA/IDQgOiA4LAorICAgICAgICAgICAgICAgIFN0YWNrU2xvdEtp
bmQ6OkFub255bW91cyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBjbGFzcyBSZWdNYXAgeworICAg
IHB1YmxpYzoKKyAgICAgICAgUmVnTWFwKCkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgICAgICAgICBjYXNlIEFyZzo6R1A6CisgICAgICAgICAgICAgICAgbV92
ZWN0b3IuZmlsbChUKCksIE1hY3JvQXNzZW1ibGVyOjpudW1iZXJPZlJlZ2lzdGVycygpKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXJnOjpGUDoKKyAgICAgICAg
ICAgICAgICBtX3ZlY3Rvci5maWxsKFQoKSwgTWFjcm9Bc3NlbWJsZXI6Om51bWJlck9mRlBSZWdp
c3RlcnMoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBUJiBvcGVyYXRvcltdKFJlZyByZWcpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICAgICAgY2FzZSBBcmc6OkdQOgorICAgICAgICAg
ICAgICAgIHJldHVybiBtX3ZlY3RvcltNYWNyb0Fzc2VtYmxlcjo6cmVnaXN0ZXJJbmRleChyZWcu
Z3ByKCkpXTsKKyAgICAgICAgICAgIGNhc2UgQXJnOjpGUDoKKyAgICAgICAgICAgICAgICByZXR1
cm4gbV92ZWN0b3JbTWFjcm9Bc3NlbWJsZXI6OmZwUmVnaXN0ZXJJbmRleChyZWcuZnByKCkpXTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAg
ICBWZWN0b3I8VD4gbV92ZWN0b3I7CisgICAgfTsKKworICAgIHN0cnVjdCBTdGF0ZSB7CisgICAg
ICAgIEhhc2hNYXA8VG1wLCBUbXBJbmZvPiBtYXBwaW5nOyAvLyBJZiB0aGUgb3JpZ2luYWwgcHJv
Z3JhbSBhc2tzIGZvciB0aGlzIHRtcCwgd2hlcmUgaXMgaXQ/CisgICAgICAgIFJlZ01hcDxSZWdJ
bmZvPiByZXZlcnNlTWFwcGluZzsgLy8gV2hhdCB0bXAgZG9lcyB0aGlzIHJlZ2lzdGVyIGhvbGQg
cmlnaHQgbm93PworICAgICAgICBib29sIHZpc2l0ZWRCeVByb3BhZ2F0aW9uIHsgZmFsc2UgfTsK
KyAgICAgICAgYm9vbCBpc1NldHRsZWQgeyBmYWxzZSB9OworICAgIH07CisKKyAgICBlbnVtIERl
YXRoTW9kZSB7CisgICAgICAgIEVhcmx5RGVhdGgsCisgICAgICAgIExhdGVEZWF0aAorICAgIH07
CisKKyAgICBzdHJ1Y3QgRGVhdGggeworICAgICAgICBEZWF0aCgpCisgICAgICAgIHsKKyAgICAg
ICAgfQorCisgICAgICAgIERlYXRoKFRtcCB0bXAsIERlYXRoTW9kZSBkZWF0aE1vZGUpCisgICAg
ICAgICAgICA6IHRtcCh0bXApCisgICAgICAgICAgICAsIGRlYXRoTW9kZShkZWF0aE1vZGUpCisg
ICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgVG1wIHRtcDsKKyAgICAgICAg
RGVhdGhNb2RlIGRlYXRoTW9kZSB7IEVhcmx5RGVhdGggfTsKKyAgICB9OworICAgIAorICAgIENv
ZGUmIG1fY29kZTsKKyAgICBUbXBMaXZlbmVzczx0eXBlPiBtX2xpdmVuZXNzOworICAgIEluc3RN
YXA8VmVjdG9yPERlYXRoPj4gbV9kZWF0aHM7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgU3Rh
dGU+IG1fYXRIZWFkOworICAgIFN0YXRlIG1fc3RhdGU7CisgICAgVmVjdG9yPFJlZz4gbV9sb2Nr
ZWQ7CisgICAgVXNlQ291bnRzPFRtcD4gbV91c2VDb3VudHM7CisgICAgVG1wV2lkdGggbV90bXBX
aWR0aDsKKyAgICBIYXNoTWFwPFRtcCwgU3RhY2tTbG90Kj4gbV9zcGlsbFNsb3RzOworICAgIEJh
c2ljQmxvY2sqIG1fYmxvY2sgeyBudWxscHRyIH07CisgICAgdW5zaWduZWQgbV9pbnN0SW5kZXgg
eyAwIH07CisgICAgVmVjdG9yPFNodWZmbGVQYWlyPiBtX3NodWZmbGVQYWlyczsKKyAgICBJbnNl
cnRpb25TZXQgbV9pbnNlcnRpb25TZXQ7CisgICAgYm9vbCBtX2NoYW5nZWQgeyBmYWxzZSB9Owor
fTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgc2NhdmVuZ2VSZWdpc3RlcnMo
Q29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgInNjYXZlbmdl
UmVnaXN0ZXJzIik7CisKKyAgICBicmVha0NyaXRpY2FsRWRnZXMoY29kZSk7CisKKyAgICB7Cisg
ICAgICAgIFNjYXZlbmdlUmVnaXN0ZXJzPEFyZzo6RlA+IHNjYXZlbmdlUmVnaXN0ZXJzKGNvZGUp
OworICAgICAgICBzY2F2ZW5nZVJlZ2lzdGVycy5ydW4oKTsKKyAgICB9CisgICAgeworICAgICAg
ICBTY2F2ZW5nZVJlZ2lzdGVyczxBcmc6OkdQPiBzY2F2ZW5nZVJlZ2lzdGVycyhjb2RlKTsKKyAg
ICAgICAgc2NhdmVuZ2VSZWdpc3RlcnMucnVuKCk7CisgICAgfQorfQorCit9IH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNjYXZlbmdlUmVnaXN0ZXJzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTY2F2ZW5nZVJlZ2lzdGVy
cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTY2F2
ZW5nZVJlZ2lzdGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEFpclNjYXZlbmdl
UmVnaXN0ZXJzX2gKKyNkZWZpbmUgQWlyU2NhdmVuZ2VSZWdpc3RlcnNfaAorCisjaWYgRU5BQkxF
KEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIg
eworCitjbGFzcyBDb2RlOworCisvLyBUaGlzIGFsbG9jYXRlcyB0ZW1wb3JhcmllcyB0byByZWdp
c3RlcnMgb3Igc3RhY2sgbG9jYXRpb25zIGJhc2VkIG9uIGZvcndhcmQgZmxvdy4gSXQgd2lsbCBo
YXBwaWx5CisvLyBjaGFuZ2UgdGhlIGxvY2F0aW9uIG9mIGEgdGVtcG9yYXJ5IGluIGNhc2UgdGhl
IHJlZ2lzdGVyIGl0IGhhZCBwaWNrZWQgYmVjb21lcyB1bmF2YWlsYWJsZSBvciBpbgorLy8gY2Fz
ZSB3ZSBuZWVkIHRoZSB2YWx1ZSBhbmQgaXQncyBjdXJyZW50bHkgb24gdGhlIHN0YWNrLiBJdCBh
bHNvIHBlcmZvcm1zIG1hdGVyaWFsaXphdGlvbiBvZgorLy8gY29uc3RhbnRzOiBpZiBhIHRlbXBv
cmFyeSdzIHZhbHVlIGlzIGFsd2F5cyBhIGNvbnN0YW50IHRoZW4gaW5zdGVhZCBvZiBzcGlsbGlu
ZyB3ZSB3aWxsIHNpbXBseQorLy8gcmVtYXRlcmlhbGl6ZS4KKy8vCisvLyBUaGlzIHBoYXNlIGlz
IG1lYW50IHRvIHJ1biBhZnRlciB0aGUgcHJpbWFyeSByZWdpc3RlciBhbGxvY2F0b3IuIFRoZSBw
cmltYXJ5IHJlZ2lzdGVyIGFsbG9jYXRvcgorLy8gaXMgYmVzdCBvZmYgaGFuZGxpbmcgc3BpbGxz
IGJ5IHNpbXBseSBsZWF2aW5nIHNwaWxsZWQgVG1wcyBhbG9uZS4gVGhpcyBwaGFzZSB3aWxsIGVt
aXQgcHJvcGVyCisvLyBzcGlsbCBjb2RlLCBhbmQgaXQgd2lsbCBkbyBpdCBtb3JlIGVmZmljaWVu
dGx5IHRoYW4gY2xhc3NpY2FsIHNwaWxsaW5nIGFsZ29yaXRobXMuCit2b2lkIHNjYXZlbmdlUmVn
aXN0ZXJzKENvZGUmKTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpclNjYXZlbmdlUmVnaXN0ZXJzX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxF
dmVyeXRoaW5nLmNwcAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsy
OSw2IEBACiAjaWYgRU5BQkxFKEIzX0pJVCkKIAogI2luY2x1ZGUgIkFpckNvZGUuaCIKLSNpbmNs
dWRlICJBaXJGaXhTcGlsbFNsb3RaRGVmLmgiCiAjaW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0Lmgi
CiAjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKICNpbmNsdWRlICJBaXJMaXZlbmVzcy5oIgpA
QCAtODQsNyArODMsNiBAQCB2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJiBjb2RlKQogCiAgICAg
Ly8gQWxsb2NhdGUgYSBzdGFjayBzbG90IGZvciBlYWNoIHRtcC4KICAgICBWZWN0b3I8U3RhY2tT
bG90Kj4gYWxsU3RhY2tTbG90c1tBcmc6Om51bVR5cGVzXTsKLSAgICB1bnNpZ25lZCBuZXdTdGFj
a1Nsb3RUaHJlc2hvbGQgPSBjb2RlLnN0YWNrU2xvdHMoKS5zaXplKCk7CiAgICAgZm9yICh1bnNp
Z25lZCB0eXBlSW5kZXggPSAwOyB0eXBlSW5kZXggPCBBcmc6Om51bVR5cGVzOyArK3R5cGVJbmRl
eCkgewogICAgICAgICBWZWN0b3I8U3RhY2tTbG90Kj4mIHN0YWNrU2xvdHMgPSBhbGxTdGFja1Ns
b3RzW3R5cGVJbmRleF07CiAgICAgICAgIEFyZzo6VHlwZSB0eXBlID0gc3RhdGljX2Nhc3Q8QXJn
OjpUeXBlPih0eXBlSW5kZXgpOwpAQCAtMTMwLDcgKzEyOCw2IEBAIHZvaWQgc3BpbGxFdmVyeXRo
aW5nKENvZGUmIGNvZGUpCiAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocm9sZSkgewogICAg
ICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6VXNlOgogICAgICAgICAgICAgICAgICAgICBjYXNl
IEFyZzo6Q29sZFVzZToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkVhcmx5RGVmOgog
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogcmVnc0luUHJpb3JpdHlPcmRl
cih0eXBlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2V0QmVmb3JlLmdl
dChyZWcpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEJlZm9yZS5zZXQo
cmVnKTsKQEAgLTE1NCw2ICsxNTEsNyBAQCB2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJiBjb2Rl
KQogICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6TGF0ZVVzZToKICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBBcmc6OkxhdGVDb2xkVXNlOgogICAgICAgICAgICAgICAgICAgICBjYXNlIEFy
Zzo6U2NyYXRjaDoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkVhcmx5RGVmOgogICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogcmVnc0luUHJpb3JpdHlPcmRlcih0
eXBlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2V0QmVmb3JlLmdldChy
ZWcpICYmICFzZXRBZnRlci5nZXQocmVnKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZXRBZnRlci5zZXQocmVnKTsKQEAgLTE4MiwxMiArMTgwLDYgQEAgdm9pZCBzcGlsbEV2
ZXJ5dGhpbmcoQ29kZSYgY29kZSkKICAgICAgICAgfQogICAgICAgICBpbnNlcnRpb25TZXQuZXhl
Y3V0ZShibG9jayk7CiAgICAgfQotCi0gICAgZml4U3BpbGxTbG90WkRlZigKLSAgICAgICAgY29k
ZSwKLSAgICAgICAgWyZdIChTdGFja1Nsb3QqIHN0YWNrU2xvdCkgLT4gYm9vbCB7Ci0gICAgICAg
ICAgICByZXR1cm4gc3RhY2tTbG90LT5pbmRleCgpID49IG5ld1N0YWNrU2xvdFRocmVzaG9sZDsK
LSAgICAgICAgfSk7CiB9CiAKIH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuaAkocmV2aXNpb24g
MTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuaAko
d29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsMTIgQEAgcHVibGljOgogICAgIGJvb2wgaXNMb2Nr
ZWQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQgPT0gU3RhY2tTbG90S2luZDo6TG9ja2VkOyB9CiAg
ICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CiAKKyAgICB2b2lk
IGVuc3VyZVNpemUodW5zaWduZWQgcmVxdWVzdGVkU2l6ZSkKKyAgICB7CisgICAgICAgIEFTU0VS
VCghbV9vZmZzZXRGcm9tRlApOworICAgICAgICBtX2J5dGVTaXplID0gc3RkOjptYXgobV9ieXRl
U2l6ZSwgcmVxdWVzdGVkU2l6ZSk7CisgICAgfQorCiAgICAgdW5zaWduZWQgYWxpZ25tZW50KCkg
Y29uc3QKICAgICB7CiAgICAgICAgIGlmIChieXRlU2l6ZSgpIDw9IDEpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZhbGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZhbGlkYXRlLmNwcAkocmV2aXNpb24gMTk1MTc2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJWYWxpZGF0ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTgyLDYgKzgyLDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAg
VkFMSURBVEUoaXNUZXJtaW5hbChpbnN0Lm9wY29kZSksICgiQXQgIiwgaW5zdCwgIiBpbiAiLCAq
YmxvY2spKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIFZBTElE
QVRFKCFpc1Rlcm1pbmFsKGluc3Qub3Bjb2RlKSwgKCJBdCAiLCBpbnN0LCAiIGluICIsICpibG9j
aykpOworCisgICAgICAgICAgICAgICAgLy8gZm9yRWFjaEFyZyBtdXN0IHJldHVybiBBcmcmJ3Mg
dGhhdCBwb2ludCBpbnRvIHRoZSBhcmdzIGFycmF5LgorICAgICAgICAgICAgICAgIGluc3QuZm9y
RWFjaEFyZygKKyAgICAgICAgICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlLCBB
cmc6OlR5cGUsIEFyZzo6V2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRF
KCZhcmcgPj0gJmluc3QuYXJnc1swXSwgKCJBdCAiLCBhcmcsICIgaW4gIiwgaW5zdCwgIiBpbiAi
LCAqYmxvY2spKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKCZhcmcgPD0gJmlu
c3QuYXJncy5sYXN0KCksICgiQXQgIiwgYXJnLCAiIGluICIsIGluc3QsICIgaW4gIiwgKmJsb2Nr
KSk7CisgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
Zm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29yQmxvY2tzKCkpCiAg
ICAgICAgICAgICAgICAgVkFMSURBVEUodmFsaWRCbG9ja3MuY29udGFpbnMoc3VjY2Vzc29yKSwg
KCJJbiAiLCAqYmxvY2spKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29t
bW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24u
aAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21t
b24uaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiAvLyBXZSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbiBleHBlcmltZW50YWwg
dHJhbnNpdGlvbiBmcm9tIExMVk0gdG8gQjMgYXMgdGhlIGJhY2tlbmQgZm9yIHRoZSBGVEwuIFdl
IGRvbid0CiAvLyB5ZXQga25vdyBob3cgaXQgd2lsbCB0dXJuIG91dC4gRm9yIG5vdywgdGhpcyBm
bGFnIHdpbGwgY29udHJvbCB3aGV0aGVyIEZUTCB1c2VzIEIzLiBSZW1lbWJlciB0byBzZXQgdGhp
cwogLy8gdG8gMCBiZWZvcmUgY29tbWl0dGluZyEKLSNkZWZpbmUgRlRMX1VTRVNfQjMgMAorI2Rl
ZmluZSBGVExfVVNFU19CMyAxCiAKIHN0cnVjdCBOb2RlOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2
LDcgQEAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAogICAgIGlmICghT3B0
aW9uczo6Ynl0ZWNvZGVSYW5nZVRvREZHQ29tcGlsZSgpLmlzSW5SYW5nZShjb2RlQmxvY2stPmlu
c3RydWN0aW9uQ291bnQoKSkKICAgICAgICAgfHwgIUZ1bmN0aW9uV2hpdGVsaXN0OjplbnN1cmVH
bG9iYWxXaGl0ZWxpc3QoKS5jb250YWlucyhjb2RlQmxvY2spKQogICAgICAgICByZXR1cm4gQ29t
cGlsYXRpb25GYWlsZWQ7Ci0gICAgCisKICAgICBudW1Db21waWxhdGlvbnMrKzsKICAgICAKICAg
ICBBU1NFUlQoY29kZUJsb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
QjNDb21waWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEIzQ29tcGlsZS5jcHAJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQjNDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAog
CiAjaWYgRU5BQkxFKEZUTF9KSVQpICYmIEZUTF9VU0VTX0IzCiAKKyNpbmNsdWRlICJBaXJDb2Rl
LmgiCiAjaW5jbHVkZSAiQjNHZW5lcmF0ZS5oIgogI2luY2x1ZGUgIkIzUHJvY2VkdXJlSW5saW5l
cy5oIgogI2luY2x1ZGUgIkIzU3RhY2tTbG90VmFsdWUuaCIKQEAgLTU3LDcgKzU4LDcgQEAgdm9p
ZCBjb21waWxlKFN0YXRlJiBzdGF0ZSwgU2FmZXBvaW50OjpSZQogICAgIEdyYXBoJiBncmFwaCA9
IHN0YXRlLmdyYXBoOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZ3JhcGgubV9jb2RlQmxv
Y2s7CiAgICAgVk0mIHZtID0gZ3JhcGgubV92bTsKLSAgICAKKwogICAgIHsKICAgICAgICAgR3Jh
cGhTYWZlcG9pbnQgc2FmZXBvaW50KHN0YXRlLmdyYXBoLCBzYWZlcG9pbnRSZXN1bHQpOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNw
cAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
ckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NTgsOCArMTg1OCw4IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgICAgIG1fb3V0Lm5vdFplcm8zMihyZXN1bHQpLCB1c3VhbGx5
KGNvbnRpbnVhdGlvbiksIHJhcmVseShzbG93Q2FzZSkpOwogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oc2xvd0Nh
c2UsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAgICAgTFZhbHVlIGNvbmQgPSBtX291dC5i
aXRPcihtX291dC5sZXNzVGhhbihsZWZ0LCBtX291dC5pbnQzMlplcm8pLCBtX291dC5sZXNzVGhh
bihyaWdodCwgbV9vdXQuaW50MzJaZXJvKSk7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRlKE5l
Z2F0aXZlWmVybywgbm9WYWx1ZSgpLCAwLCBjb25kKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxh
dGUoTmVnYXRpdmVaZXJvLCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0Lmxlc3NUaGFuKGxlZnQs
IG1fb3V0LmludDMyWmVybykpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShOZWdhdGl2ZVpl
cm8sIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQubGVzc1RoYW4ocmlnaHQsIG1fb3V0LmludDMy
WmVybykpOwogICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAg
ICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKICAgICAg
ICAgICAgIH0KQEAgLTE4OTAsOCArMTg5MCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
ICAgIG1fb3V0Lm5vdFplcm82NChyZXN1bHQpLCB1c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJhcmVs
eShzbG93Q2FzZSkpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIExCYXNpY0Js
b2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlvbik7Ci0g
ICAgICAgICAgICAgICAgTFZhbHVlIGNvbmQgPSBtX291dC5iaXRPcihtX291dC5sZXNzVGhhbihs
ZWZ0LCBtX291dC5pbnQ2NFplcm8pLCBtX291dC5sZXNzVGhhbihyaWdodCwgbV9vdXQuaW50NjRa
ZXJvKSk7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRlKE5lZ2F0aXZlWmVybywgbm9WYWx1ZSgp
LCAwLCBjb25kKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoTmVnYXRpdmVaZXJvLCBub1Zh
bHVlKCksIG51bGxwdHIsIG1fb3V0Lmxlc3NUaGFuKGxlZnQsIG1fb3V0LmludDY0WmVybykpOwor
ICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShOZWdhdGl2ZVplcm8sIG5vVmFsdWUoKSwgbnVsbHB0
ciwgbV9vdXQubGVzc1RoYW4ocmlnaHQsIG1fb3V0LmludDY0WmVybykpOwogICAgICAgICAgICAg
ICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgICAgICAgICBtX291dC5hcHBl
bmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKICAgICAgICAgICAgIH0KQEAgLTE5NTcsOCAr
MTk1Nyw4IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4
dCA9IG1fb3V0LmFwcGVuZFRvKHVuc2FmZURlbm9taW5hdG9yLCBjb250aW51YXRpb24pOwogICAg
ICAgICAgICAgICAgIExWYWx1ZSBuZWcyVG9UaGUzMSA9IG1fb3V0LmNvbnN0SW50MzIoLTIxNDc0
ODM2NDctMSk7Ci0gICAgICAgICAgICAgICAgTFZhbHVlIGNvbmQgPSBtX291dC5iaXRPcihtX291
dC5pc1plcm8zMihkZW5vbWluYXRvciksIG1fb3V0LmVxdWFsKG51bWVyYXRvciwgbmVnMlRvVGhl
MzEpKTsKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIG5vVmFsdWUoKSwgMCwg
Y29uZCk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCBub1ZhbHVlKCksIG51
bGxwdHIsIG1fb3V0LmlzWmVybzMyKGRlbm9taW5hdG9yKSk7CisgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRlKE92ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0LmVxdWFsKG51bWVyYXRv
ciwgbmVnMlRvVGhlMzEpKTsKICAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7CiAKICAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3RO
ZXh0KTsKQEAgLTIwMTMsOCArMjAxMyw4IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAgICBM
QmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHVuc2FmZURlbm9taW5hdG9yLCBj
b250aW51YXRpb24pOwogICAgICAgICAgICAgICAgIExWYWx1ZSBuZWcyVG9UaGUzMSA9IG1fb3V0
LmNvbnN0SW50MzIoLTIxNDc0ODM2NDctMSk7Ci0gICAgICAgICAgICAgICAgTFZhbHVlIGNvbmQg
PSBtX291dC5iaXRPcihtX291dC5pc1plcm8zMihkZW5vbWluYXRvciksIG1fb3V0LmVxdWFsKG51
bWVyYXRvciwgbmVnMlRvVGhlMzEpKTsKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGUoT3ZlcmZs
b3csIG5vVmFsdWUoKSwgMCwgY29uZCk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJm
bG93LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0LmlzWmVybzMyKGRlbm9taW5hdG9yKSk7Cisg
ICAgICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsIG1f
b3V0LmVxdWFsKG51bWVyYXRvciwgbmVnMlRvVGhlMzEpKTsKICAgICAgICAgICAgICAgICBtX291
dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhj
b250aW51YXRpb24sIGxhc3ROZXh0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVnaXN0ZXJTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Jl
Z2lzdGVyU2V0LmgJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUmVnaXN0ZXJTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtOTEsNiArOTEsMTMgQEAgcHVibGlj
OgogICAgICAgICBBU1NFUlQoISFyZWcpOwogICAgICAgICByZXR1cm4gbV92ZWN0b3IuZ2V0KHJl
Zy5pbmRleCgpKTsKICAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYWJsZT4KKyAg
ICB2b2lkIHNldEFsbChjb25zdCBJdGVyYWJsZSYgaXRlcmFibGUpCisgICAgeworICAgICAgICBm
b3IgKFJlZyByZWcgOiBpdGVyYWJsZSkKKyAgICAgICAgICAgIHNldChyZWcpOworICAgIH0KICAg
ICAKICAgICB2b2lkIG1lcmdlKGNvbnN0IFJlZ2lzdGVyU2V0JiBvdGhlcikgeyBtX3ZlY3Rvci5t
ZXJnZShvdGhlci5tX3ZlY3Rvcik7IH0KICAgICB2b2lkIGZpbHRlcihjb25zdCBSZWdpc3RlclNl
dCYgb3RoZXIpIHsgbV92ZWN0b3IuZmlsdGVyKG90aGVyLm1fdmVjdG9yKTsgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMTk1MTc2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNDMsNiArMzQzLDggQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAg
dihib29sLCBsb2dCM1BoYXNlVGltZXMsIGZhbHNlLCBudWxscHRyKSBcCiAgICAgdihkb3VibGUs
IHJhcmVCbG9ja1BlbmFsdHksIDAuMDAxLCBudWxscHRyKSBcCiAgICAgdihib29sLCBhaXJTcGls
bHNFdmVyeXRoaW5nLCBmYWxzZSwgbnVsbHB0cikgXAorICAgIHYoYm9vbCwgYWlyVXNlc1JDUlMs
IGZhbHNlLCBudWxscHRyKSBcCisgICAgdihib29sLCBsb2dBaXJSZWdpc3RlclByZXNzdXJlLCBm
YWxzZSwgbnVsbHB0cikgXAogICAgIFwKICAgICB2KGJvb2wsIHVzZURvbGxhclZNLCBmYWxzZSwg
Imluc3RhbGxzIHRoZSAkdm0gZGVidWdnaW5nIHRvb2wgaW4gZ2xvYmFsIG9iamVjdHMiKSBcCiAg
ICAgdihvcHRpb25TdHJpbmcsIGZ1bmN0aW9uT3ZlcnJpZGVzLCBudWxscHRyLCAiZmlsZSB3aXRo
IGRlYnVnZ2luZyBvdmVycmlkZXMgZm9yIGZ1bmN0aW9uIGJvZGllcyIpIFwKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL0luZGV4U3BhcnNlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
SW5kZXhTcGFyc2VTZXQuaAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL1dURi93dGYvSW5k
ZXhTcGFyc2VTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsOCArNDcsOCBAQCBjbGFzcyBJbmRl
eFNwYXJzZVNldCB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgSW5kZXhTcGFyc2VTZXQodW5zaWdu
ZWQgbWF4VmFsdWUpOwogCi0gICAgdm9pZCBhZGQodW5zaWduZWQpOwotICAgIHZvaWQgcmVtb3Zl
KHVuc2lnbmVkKTsKKyAgICBib29sIGFkZCh1bnNpZ25lZCk7CisgICAgYm9vbCByZW1vdmUodW5z
aWduZWQpOwogICAgIHZvaWQgY2xlYXIoKTsKIAogICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdDsK
QEAgLTcxLDI5ICs3MSwzMyBAQCBpbmxpbmUgSW5kZXhTcGFyc2VTZXQ8T3ZlcmZsb3dIYW5kbGVy
Pjo6CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KLWlubGluZSB2b2lk
IEluZGV4U3BhcnNlU2V0PE92ZXJmbG93SGFuZGxlcj46OmFkZCh1bnNpZ25lZCB2YWx1ZSkKK2lu
bGluZSBib29sIEluZGV4U3BhcnNlU2V0PE92ZXJmbG93SGFuZGxlcj46OmFkZCh1bnNpZ25lZCB2
YWx1ZSkKIHsKICAgICBpZiAoY29udGFpbnModmFsdWUpKQotICAgICAgICByZXR1cm47CisgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIHVuc2lnbmVkIG5ld1Bvc2l0aW9uID0gbV92YWx1ZXMu
c2l6ZSgpOwogICAgIG1fdmFsdWVzLmFwcGVuZCh2YWx1ZSk7CiAgICAgbV9tYXBbdmFsdWVdID0g
bmV3UG9zaXRpb247CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE92
ZXJmbG93SGFuZGxlcj4KLWlubGluZSB2b2lkIEluZGV4U3BhcnNlU2V0PE92ZXJmbG93SGFuZGxl
cj46OnJlbW92ZSh1bnNpZ25lZCB2YWx1ZSkKK2lubGluZSBib29sIEluZGV4U3BhcnNlU2V0PE92
ZXJmbG93SGFuZGxlcj46OnJlbW92ZSh1bnNpZ25lZCB2YWx1ZSkKIHsKICAgICB1bnNpZ25lZCBw
b3NpdGlvbiA9IG1fbWFwW3ZhbHVlXTsKICAgICBpZiAocG9zaXRpb24gPj0gbV92YWx1ZXMuc2l6
ZSgpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICht
X3ZhbHVlc1twb3NpdGlvbl0gPT0gdmFsdWUpIHsKICAgICAgICAgdW5zaWduZWQgbGFzdFZhbHVl
ID0gbV92YWx1ZXMubGFzdCgpOwogICAgICAgICBtX3ZhbHVlc1twb3NpdGlvbl0gPSBsYXN0VmFs
dWU7CiAgICAgICAgIG1fbWFwW2xhc3RWYWx1ZV0gPSBwb3NpdGlvbjsKICAgICAgICAgbV92YWx1
ZXMucmVtb3ZlTGFzdCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CisKKyAgICByZXR1
cm4gZmFsc2U7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL1N0cmluZ1ByaW50U3RyZWFtLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvU3RyaW5nUHJpbnRTdHJlYW0uaAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNl
L1dURi93dGYvU3RyaW5nUHJpbnRTdHJlYW0uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsNiArMzgsOCBA
QCBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgflN0cmluZ1ByaW50U3Ry
ZWFtKCk7CiAgICAgCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgdm9pZCB2cHJpbnRm
KGNvbnN0IGNoYXIqIGZvcm1hdCwgdmFfbGlzdCkgb3ZlcnJpZGUgV1RGX0FUVFJJQlVURV9QUklO
VEYoMiwgMCk7CisKKyAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9uZXh0OyB9
CiAgICAgCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIENTdHJpbmcgdG9DU3RyaW5nKCk7CiAgICAg
V1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyB0b1N0cmluZygpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269196</attachid>
            <date>2016-01-17 13:08:45 -0800</date>
            <delta_ts>2016-01-17 13:09:22 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>96942</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk1MTgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1MyBA
QAorMjAxNi0wMS0xNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEFpciBzaG91bGQgZml4IHNwaWxsIGNvZGUgZW1pdHRlZCBieSBJUkMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MzExMworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjZXMgYSBwaGFzZSBjYWxs
ZWQgZml4T2J2aW91c1NwaWxscygpIHRoYXQgZml4ZXMgcGF0dGVybnMgbGlrZToKKworICAgICAg
ICBTdG9yZSByZWdpc3RlciB0byBzdGFjayBzbG90IGFuZCB0aGVuIHVzZSBzdGFjayBzbG90Ogor
ICAgICAgICAgICAgTW92ZSAlcmN4LCAoc3RhY2s0MikKKyAgICAgICAgICAgIEZvbyB1c2U6KHN0
YWNrNDIpIC8vIHJlcGxhY2UgKHN0YWNrNDIpIHdpdGggJXJjeCBoZXJlLgorCisgICAgICAgIExv
YWQgc3RhY2sgc2xvdCBpbnRvIHJlZ2lzdGVyIGFuZCB0aGVuIHVzZSBzdGFjayBzbG90OgorICAg
ICAgICAgICAgTW92ZSAoc3RhY2s0MiksICVyY3gKKyAgICAgICAgICAgIEZvbyB1c2U6KHN0YWNr
NDIpIC8vIHJlcGxhY2UgKHN0YWNrNDIpIHdpdGggJXJjeCBoZXJlLgorCisgICAgICAgIFN0b3Jl
IGNvbnN0YW50IGludG8gc3RhY2sgc2xvdCBhbmQgdGhlbiB1c2Ugc3RhY2sgc2xvdDoKKyAgICAg
ICAgICAgIE1vdmUgJDQyLCAlcmN4CisgICAgICAgICAgICBNb3ZlICVyY3gsIChzdGFjazQyKQor
ICAgICAgICAgICAgQmFyIGRlZjolcmN4IC8vICVyY3ggaXNuJ3QgYXZhaWxhYmxlIGFueW1vcmUs
IGJ1dCB3ZSBzdGlsbCBrbm93IHRoYXQgKHN0YWNrNDIpIGlzICQ0MgorICAgICAgICAgICAgRm9v
IHVzZTooc3RhY2s0MikgLy8gcmVwbGFjZSAoc3RhY2s0Mikgd2l0aCAkNDIgaGVyZS4KKworICAg
ICAgICBUaGlzIHBoYXNlcyBkb2VzIHRoZXNlIGZpeHVwcyBieSBkb2luZyBhIGdsb2JhbCBmb3J3
YXJkIGZsb3cgdGhhdCBwcm9wYWdhdGVzIHNldHMgb2YKKyAgICAgICAgbXVzdC1hbGlhc2VzLgor
CisgICAgICAgIEFsc28gYWRkZWQgYSBwaGFzZSB0byByZXBvcnQgcmVnaXN0ZXIgcHJlc3N1cmUu
IEl0IHByZXR0eS1wcmludHMgY29kZSBhbG9uZ3NpZGUgdGhlIHNldCBvZgorICAgICAgICBpbi11
c2UgcmVnaXN0ZXJzIGFib3ZlIGVhY2ggaW5zdHJ1Y3Rpb24uCisKKyAgICAgICAgQWxzbyBmaXhl
ZCBzb21lIEZUTCBjb2RlZ2VuIHBhdGhvbG9naWVzLiBXZSB3ZXJlIHVzaW5nIGJpdE9yIHdoZXJl
IHdlIG1lYW50IHRvIHVzZSBhCisgICAgICAgIGNvbmRpdGlvbmFsIG9yLiBMTFZNIGxpa2VzIHRv
IGNhbm9uaWNhbGl6ZSBib29sZWFuIGV4cHJlc3Npb25zIHRoaXMgd2F5LiBCMywgb24gdGhlIG90
aGVyCisgICAgICAgIGhhbmQsIGRvZXNuJ3QgZG8gdGhpcyBjYW5vbmljYWxpemF0aW9uIGFuZCBk
b2Vzbid0IGhhdmUgbG9naWMgdG8gZGVjb21wb3NlIGl0IGludG8gc2VxdWVuY2VzCisgICAgICAg
IG9mIGJyYW5jaGVzLgorCisgICAgICAgIEZpbmFsbHksIHRoaXMgZml4ZXMgc29tZSBidWdzIHdp
dGggaG93IHdlIHdlcmUgaGFuZGxpbmcgc3Vid2lkdGggc3BpbGwgc2xvdHMuIFRoZSByZWdpc3Rl
cgorICAgICAgICBhbGxvY2F0b3Igd2FzIG1ha2luZyB0d28gbWlzdGFrZXMuIEZpcnN0LCBpdCBt
aWdodCBjYXVzZSBhIFdpZHRoNjQgZGVmIG9yIHVzZSBvZiBhIDQtYnl0ZQorICAgICAgICBzcGls
bCBzbG90LiBJbiB0aGF0IGNhc2UsIGl0IHdvdWxkIGV4dGVuZCB0aGUgc2l6ZSBvZiB0aGUgc3Bp
bGwgc2xvdCB0byBlbnN1cmUgdGhhdCB0aGUgdXNlCisgICAgICAgIG9yIGRlZiBpcyBzYWZlLiBT
ZWNvbmQsIGl0IGVtdWxhdGVzIFpEZWYgb24gVG1wIGJlaGF2aW9yIGJ5IGVtaXR0aW5nIGEgTW92
ZTMyIHRvIGluaXRpYWxpemUKKyAgICAgICAgdGhlIGhpZ2ggYml0cyBvZiBhIHNwaWxsIHNsb3Qu
IEJ1dCB0aGlzIGlzIHVuc291bmQgYmVjYXVzZSBvZiB0aGUgbGl2ZW5lc3Mgc2VtYW50aWNzIG9m
IHNwaWxsCisgICAgICAgIHNsb3RzLiBUaGV5IGNhbm5vdCBoYXZlIG1vcmUgdGhhbiBvbmUgZGVm
IHRvIGluaXRpYWxpemUgdGhlaXIgdmFsdWUuIEkgZml4ZWQgdGhhdCBieSBtYWtpbmcKKyAgICAg
ICAgYWxsb2NhdGVTdGFjaygpIGJlIHRoZSB0aGluZyB0aGF0IGZpeGVzIFpEZWZzLiBUaGF0J3Mg
YSBjaGFuZ2UgdG8gWkRlZiBzZW1hbnRpY3M6IG5vdywgWkRlZgorICAgICAgICBvbiBhbiBhbm9u
eW1vdXMgc3RhY2sgc2xvdCBtZWFucyB0aGF0IHRoZSBoaWdoIGJpdHMgYXJlIHplcm8tZmlsbGVk
LiBJIHdhc24ndCBhYmxlIHRvCisgICAgICAgIGNvbnN0cnVjdCBhIHRlc3QgZm9yIHRoaXMuIEl0
IG1pZ2h0IGJlIGEgaHlwb3RoZXRpY2FsIGJ1ZywgYnV0IHN0aWxsLCBJIGxpa2UgaG93IHRoaXMK
KyAgICAgICAgc2ltcGxpZmllcyB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yLgorCisgICAgICAgIFRo
aXMgaXMgYSB+MC43JSBzcGVlZC11cCBvbiBPY3RhbmUuCisKKyAgICAgICAgKiBDTWFrZUxpc3Rz
LnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIGIzL0IzQ2hlY2tTcGVjaWFsLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkNo
ZWNrU3BlY2lhbDo6aGlkZGVuQnJhbmNoKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lh
bDo6Zm9yRWFjaEFyZyk6CisgICAgICAgIChKU0M6OkIzOjpDaGVja1NwZWNpYWw6OmNvbW1pdEhp
ZGRlbkJyYW5jaCk6IERlbGV0ZWQuCisgICAgICAgICogYjMvQjNDaGVja1NwZWNpYWwuaDoKKyAg
ICAgICAgKiBiMy9CM0xvd2VyVG9BaXIuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dl
clRvQWlyOjpmaWxsU3RhY2ttYXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWly
Ojpsb3dlcik6CisgICAgICAgICogYjMvQjNTdGFja21hcFZhbHVlLmg6CisgICAgICAgICogYjMv
YWlyL0FpckFsbG9jYXRlU3RhY2suY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjphbGxvY2F0
ZVN0YWNrKToKKyAgICAgICAgKiBiMy9haXIvQWlyQWxsb2NhdGVTdGFjay5oOgorICAgICAgICAq
IGIzL2Fpci9BaXJBcmcuaDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpjYWxsQXJnKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpzdGFja0FkZHIpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpBcmc6OmlzVmFsaWRTY2FsZSk6CisgICAgICAgICogYjMvYWlyL0FpckJhc2ljQmxv
Y2suY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpkZWVwRHVtcCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OmR1bXBIZWFkZXIpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpkdW1wRm9vdGVyKToKKyAgICAgICAgKiBiMy9haXIv
QWlyQmFzaWNCbG9jay5oOgorICAgICAgICAqIGIzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuY3BwOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbFNwZWNpYWw6OkNDYWxsU3BlY2lhbCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6fkNDYWxsU3BlY2lhbCk6CisgICAgICAg
ICogYjMvYWlyL0FpckNvZGUuaDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6bGFzdFBo
YXNlTmFtZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OnNldEVuYWJsZVJDUlMpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjplbmFibGVSQ1JTKToKKyAgICAgICAgKiBiMy9h
aXIvQWlyQ3VzdG9tLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6UGF0Y2hDdXN0b206Omlz
VmFsaWRGb3JtKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxDdXN0b206OmlzVmFsaWRG
b3JtKToKKyAgICAgICAgKiBiMy9haXIvQWlyQ3VzdG9tLmg6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OlBhdGNoQ3VzdG9tOjppc1ZhbGlkRm9ybVN0YXRpYyk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OlBhdGNoQ3VzdG9tOjphZG1pdHNTdGFjayk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlBh
dGNoQ3VzdG9tOjppc1ZhbGlkRm9ybSk6IERlbGV0ZWQuCisgICAgICAgICogYjMvYWlyL0FpckVt
aXRTaHVmZmxlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U2h1ZmZsZVBhaXI6OmR1bXAp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpjcmVhdGVTaHVmZmxlKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6ZW1pdFNodWZmbGUpOgorICAgICAgICAqIGIzL2Fpci9BaXJFbWl0U2h1ZmZsZS5o
OgorICAgICAgICAqIGIzL2Fpci9BaXJGaXhPYnZpb3VzU3BpbGxzLmNwcDogQWRkZWQuCisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OmZpeE9idmlvdXNTcGlsbHMpOgorICAgICAgICAqIGIzL2Fpci9B
aXJGaXhPYnZpb3VzU3BpbGxzLmg6IEFkZGVkLgorICAgICAgICAqIGIzL2Fpci9BaXJGaXhTcGls
bFNsb3RaRGVmLmg6IFJlbW92ZWQuCisgICAgICAgICogYjMvYWlyL0FpckdlbmVyYXRlLmNwcDoK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6cHJlcGFyZUZvckdlbmVyYXRpb24pOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpnZW5lcmF0ZSk6CisgICAgICAgICogYjMvYWlyL0FpckhhbmRsZUNhbGxl
ZVNhdmVzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6aGFuZGxlQ2FsbGVlU2F2ZXMpOgor
ICAgICAgICAqIGIzL2Fpci9BaXJJbnN0Lmg6CisgICAgICAgICogYjMvYWlyL0Fpckluc3RJbmxp
bmVzLmg6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6OnJlcG9ydFVzZWRSZWdpc3RlcnMp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnN0OjphZG1pdHNTdGFjayk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OmlzU2hpZnRWYWxpZCk6CisgICAgICAgICogYjMvYWlyL0Fpckl0ZXJhdGVk
UmVnaXN0ZXJDb2FsZXNjaW5nLmNwcDoKKyAgICAgICAgKiBiMy9haXIvQWlyTGl2ZW5lc3MuaDoK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QWJzdHJhY3RMaXZlbmVzczo6QWJzdHJhY3RMaXZlbmVz
cyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFic3RyYWN0TGl2ZW5lc3M6OkxvY2FsQ2FsYzo6
SXRlcmFibGU6OmJlZ2luKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QWJzdHJhY3RMaXZlbmVz
czo6TG9jYWxDYWxjOjpJdGVyYWJsZTo6ZW5kKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QWJz
dHJhY3RMaXZlbmVzczo6TG9jYWxDYWxjOjpJdGVyYWJsZTo6Y29udGFpbnMpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpBYnN0cmFjdExpdmVuZXNzOjpMb2NhbENhbGM6OmxpdmUpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpBYnN0cmFjdExpdmVuZXNzOjpMb2NhbENhbGM6OmlzTGl2ZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkFic3RyYWN0TGl2ZW5lc3M6OkxvY2FsQ2FsYzo6ZXhlY3V0
ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFic3RyYWN0TGl2ZW5lc3M6OnJhd0xpdmVBdEhl
YWQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBYnN0cmFjdExpdmVuZXNzOjpJdGVyYWJsZTo6
YmVnaW4pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBYnN0cmFjdExpdmVuZXNzOjpJdGVyYWJs
ZTo6ZW5kKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QWJzdHJhY3RMaXZlbmVzczo6SXRlcmFi
bGU6OmNvbnRhaW5zKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QWJzdHJhY3RMaXZlbmVzczo6
bGl2ZUF0VGFpbCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFic3RyYWN0TGl2ZW5lc3M6Ondv
cmtzZXQpOgorICAgICAgICAqIGIzL2Fpci9BaXJMb2dSZWdpc3RlclByZXNzdXJlLmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OmxvZ1JlZ2lzdGVyUHJlc3N1cmUpOgorICAgICAg
ICAqIGIzL2Fpci9BaXJMb2dSZWdpc3RlclByZXNzdXJlLmg6IEFkZGVkLgorICAgICAgICAqIGIz
L2Fpci9BaXJPcHRpbWl6ZUJsb2NrT3JkZXIuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpi
bG9ja3NJbk9wdGltaXplZE9yZGVyKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6b3B0aW1pemVC
bG9ja09yZGVyKToKKyAgICAgICAgKiBiMy9haXIvQWlyT3B0aW1pemVCbG9ja09yZGVyLmg6Cisg
ICAgICAgICogYjMvYWlyL0FpclJlcG9ydFVzZWRSZWdpc3RlcnMuY3BwOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpyZXBvcnRVc2VkUmVnaXN0ZXJzKToKKyAgICAgICAgKiBiMy9haXIvQWlyUmVw
b3J0VXNlZFJlZ2lzdGVycy5oOgorICAgICAgICAqIGIzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcu
Y3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpzcGlsbEV2ZXJ5dGhpbmcpOgorICAgICAgICAq
IGIzL2Fpci9BaXJTdGFja1Nsb3QuaDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90
Ojppc0xvY2tlZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6aW5kZXgpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpTdGFja1Nsb3Q6OmVuc3VyZVNpemUpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpTdGFja1Nsb3Q6OmFsaWdubWVudCk6CisgICAgICAgICogYjMvYWlyL0Fp
clZhbGlkYXRlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHQ29tbW9uLmg6CisgICAgICAgICogZnRs
L0ZUTEIzQ29tcGlsZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZSk6CisgICAgICAg
ICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9MTFZNOjpjb21waWxlQXJpdGhNdWwpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0xMVk06OmNvbXBpbGVBcml0aERpdik6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRoTW9kKToKKyAgICAgICAgKiBqaXQvUmVnaXN0
ZXJTZXQuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6OmdldCk6CisgICAgICAgIChKU0M6
OlJlZ2lzdGVyU2V0OjpzZXRBbGwpOgorICAgICAgICAoSlNDOjpSZWdpc3RlclNldDo6bWVyZ2Up
OgorICAgICAgICAoSlNDOjpSZWdpc3RlclNldDo6ZmlsdGVyKToKKyAgICAgICAgKiBydW50aW1l
L09wdGlvbnMuaDoKKwogMjAxNi0wMS0xNyAgSnVsaWVuIEJyaWFuY2VhdSAgPGpicmlhbmNlQGNp
c2NvLmNvbT4KIAogICAgICAgICBbbWlwc10gRml4IHJlZ1QyIGFuZCByZWdUMyB0cmFtcGxpbmcg
aW4gTWFjcm9Bc3NlbWJsZXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJ
KHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09V
UkNFUwogICAgIGIzL2Fpci9BaXJDdXN0b20uY3BwCiAgICAgYjMvYWlyL0FpckVsaW1pbmF0ZURl
YWRDb2RlLmNwcAogICAgIGIzL2Fpci9BaXJFbWl0U2h1ZmZsZS5jcHAKKyAgICBiMy9haXIvQWly
Rml4T2J2aW91c1NwaWxscy5jcHAKICAgICBiMy9haXIvQWlyRml4UGFydGlhbFJlZ2lzdGVyU3Rh
bGxzLmNwcAogICAgIGIzL2Fpci9BaXJHZW5lcmF0ZS5jcHAKICAgICBiMy9haXIvQWlyR2VuZXJh
dGVkLmNwcApAQCAtODUsNiArODYsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAg
IGIzL2Fpci9BaXJJbnNlcnRpb25TZXQuY3BwCiAgICAgYjMvYWlyL0Fpckluc3QuY3BwCiAgICAg
YjMvYWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcAorICAgIGIzL2Fpci9BaXJM
b2dSZWdpc3RlclByZXNzdXJlLmNwcAogICAgIGIzL2Fpci9BaXJMb3dlckFmdGVyUmVnQWxsb2Mu
Y3BwCiAgICAgYjMvYWlyL0Fpckxvd2VyTWFjcm9zLmNwcAogICAgIGIzL2Fpci9BaXJPcHRpbWl6
ZUJsb2NrT3JkZXIuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM3OSw3ICszNzksOCBAQAog
CQkwRjQ5M0FGQTE2RDBDQUQzMDA4NDUwOEIgLyogU291cmNlUHJvdmlkZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0OTNBRjgxNkQwQ0FEMTAw
ODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCAqLzsgfTsKIAkJMEY0Qjk0REMxN0I5RjA3NTAw
REQwM0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRCOTREQjE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRBcnJh
eUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjRDOTE2NjFDMjlGNEYyMDA0MzQxQTYgLyogQjNPcmlnaW5EdW1wLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRDOTE2NTFDMjlGNEYyMDA0
MzQxQTYgLyogQjNPcmlnaW5EdW1wLmggKi87IH07Ci0JCTBGNEM5MTY4MUMyQjNENjgwMDQzNDFB
NiAvKiBBaXJGaXhTcGlsbFNsb3RaRGVmLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjRDOTE2NzFDMkIzRDY4MDA0MzQxQTYgLyogQWlyRml4U3BpbGxT
bG90WkRlZi5oICovOyB9OworCQkwRjRERTFDRTFDNEMxQjU0MDA0RDZDMTEgLyogQWlyRml4T2J2
aW91c1NwaWxscy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjRERTFDQzFDNEMxQjU0MDA0RDZDMTEgLyogQWlyRml4T2J2aW91c1NwaWxscy5jcHAg
Ki87IH07CisJCTBGNERFMUNGMUM0QzFCNTQwMDRENkMxMSAvKiBBaXJGaXhPYnZpb3VzU3BpbGxz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRERTFD
RDFDNEMxQjU0MDA0RDZDMTEgLyogQWlyRml4T2J2aW91c1NwaWxscy5oICovOyB9OwogCQkwRjRG
MjlERjE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9u
UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY0RjI5REQxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1h
dGlvblBoYXNlLmNwcCAqLzsgfTsKIAkJMEY0RjI5RTAxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0
YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRGMjlERTE4QjZBRDFDMDA1N0JDMTUgLyogREZH
U3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCAqLzsgfTsKIAkJMEY1MEFGM0Mx
OTNFOEIzOTAwNjc0RUU4IC8qIERGR1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1MEFGM0IxOTNFOEIzOTAwNjc0
RUU4IC8qIERGR1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oICovOyB9OwpAQCAtNzI0LDYgKzcyNSw4
IEBACiAJCTBGRTIyOEVFMTQzNkFCMkMwMDE5NkM0OCAvKiBPcHRpb25zLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTIyOEVBMTQzNkFCMjMwMDE5
NkM0OCAvKiBPcHRpb25zLmNwcCAqLzsgfTsKIAkJMEZFMjU0RjYxQUJEREQyMjAwQTdDNkQyIC8q
IERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFMjU0RjQxQUJEREQyMjAwQTdDNkQyIC8qIERGR1ZhcmFy
Z3NGb3J3YXJkaW5nUGhhc2UuY3BwICovOyB9OwogCQkwRkUyNTRGNzFBQkRERDIyMDBBN0M2RDIg
LyogREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFMjU0RjUxQUJEREQyMjAwQTdDNkQyIC8qIERGR1ZhcmFy
Z3NGb3J3YXJkaW5nUGhhc2UuaCAqLzsgfTsKKwkJMEZFMzRDMTkxQzRCMzlBRTAwMDNBNTEyIC8q
IEFpckxvZ1JlZ2lzdGVyUHJlc3N1cmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFMzRDMTcxQzRCMzlBRTAwMDNBNTEyIC8qIEFpckxvZ1JlZ2lz
dGVyUHJlc3N1cmUuY3BwICovOyB9OworCQkwRkUzNEMxQTFDNEIzOUFFMDAwM0E1MTIgLyogQWly
TG9nUmVnaXN0ZXJQcmVzc3VyZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFMzRDMTgxQzRCMzlBRTAwMDNBNTEyIC8qIEFpckxvZ1JlZ2lzdGVyUHJl
c3N1cmUuaCAqLzsgfTsKIAkJMEZFNzIxMUQxOTNCOUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRp
b24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
NzIxMUIxOTNCOUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24uY3BwICovOyB9OwogCQkwRkU3
MjExRTE5M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNpdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNzIxMUMxOTNCOUM1OTAwMzFGNkVEIC8q
IERGR1RyYW5zaXRpb24uaCAqLzsgfTsKIAkJMEZFODM0MTcxQTZFRjk3QjAwRDA0ODQ3IC8qIFBv
bHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTgzNDE1MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9ycGhp
Y0NhbGxTdHViUm91dGluZS5jcHAgKi87IH07CkBAIC0yNTQyLDcgKzI1NDUsOCBAQAogCQkwRjQ5
M0FGODE2RDBDQUQxMDA4NDUwOEIgLyogU291cmNlUHJvdmlkZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU291cmNlUHJvdmlkZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjRCOTREQjE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRBcnJheUlu
bGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRBcnJheUlubGlu
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0QzkxNjUxQzI5RjRGMjAwNDM0
MUE2IC8qIEIzT3JpZ2luRHVtcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBC
M09yaWdpbkR1bXAuaDsgcGF0aCA9IGIzL0IzT3JpZ2luRHVtcC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkwRjRDOTE2NzFDMkIzRDY4MDA0MzQxQTYgLyogQWlyRml4U3BpbGxTbG90
WkRlZi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJGaXhTcGlsbFNsb3Ra
RGVmLmg7IHBhdGggPSBiMy9haXIvQWlyRml4U3BpbGxTbG90WkRlZi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjRERTFDQzFDNEMxQjU0MDA0RDZDMTEgLyogQWlyRml4T2J2aW91
c1NwaWxscy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJGaXhP
YnZpb3VzU3BpbGxzLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJGaXhPYnZpb3VzU3BpbGxzLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0REUxQ0QxQzRDMUI1NDAwNEQ2QzExIC8q
IEFpckZpeE9idmlvdXNTcGlsbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QWlyRml4T2J2aW91c1NwaWxscy5oOyBwYXRoID0gYjMvYWlyL0FpckZpeE9idmlvdXNTcGlsbHMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0RjI5REQxOEI2QUQxQzAwNTdCQzE1
IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1h
dGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRp
b25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEYyOURFMThCNkFE
MUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVz
dGltYXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1h
dGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTBBRjNCMTkzRThC
MzkwMDY3NEVFOCAvKiBERkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmg7IHBhdGggPSBkZmcv
REZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0yOTAwLDYgKzI5MDQsOCBAQAogCQkwRkUyMjhFQjE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9u
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPcHRpb25zLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTI1NEY0MUFCREREMjIwMEE3QzZEMiAvKiBERkdWYXJh
cmdzRm9yd2FyZGluZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR1ZhcmFyZ3NG
b3J3YXJkaW5nUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkUyNTRG
NTFBQkRERDIyMDBBN0M2RDIgLyogREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmg7IHBh
dGggPSBkZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkUzNEMxNzFDNEIzOUFFMDAwM0E1MTIgLyogQWlyTG9nUmVnaXN0ZXJQcmVz
c3VyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJMb2dSZWdp
c3RlclByZXNzdXJlLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJMb2dSZWdpc3RlclByZXNzdXJlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFMzRDMTgxQzRCMzlBRTAwMDNBNTEy
IC8qIEFpckxvZ1JlZ2lzdGVyUHJlc3N1cmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5oOyBwYXRoID0gYjMvYWlyL0FpckxvZ1JlZ2lz
dGVyUHJlc3N1cmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFNzIxMUIxOTNC
OUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gREZHVHJhbnNpdGlvbi5jcHA7IHBhdGggPSBkZmcvREZHVHJhbnNpdGlv
bi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTcyMTFDMTkzQjlDNTkwMDMx
RjZFRCAvKiBERkdUcmFuc2l0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR1RyYW5zaXRpb24uaDsgcGF0aCA9IGRmZy9ERkdUcmFuc2l0aW9uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGRTgzNDE1MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9ycGhp
Y0NhbGxTdHViUm91dGluZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC00ODU5LDkgKzQ4NjUsMTAgQEAKIAkJCQkwRjQ1NzAzNzFCRTQ0QzkxMDA2MkE2Mjkg
LyogQWlyRWxpbWluYXRlRGVhZENvZGUuaCAqLywKIAkJCQkwRjYxODMyMzFDNDVCRjA3MDA3MjQ1
MEIgLyogQWlyRW1pdFNodWZmbGUuY3BwICovLAogCQkJCTBGNjE4MzI0MUM0NUJGMDcwMDcyNDUw
QiAvKiBBaXJFbWl0U2h1ZmZsZS5oICovLAorCQkJCTBGNERFMUNDMUM0QzFCNTQwMDRENkMxMSAv
KiBBaXJGaXhPYnZpb3VzU3BpbGxzLmNwcCAqLywKKwkJCQkwRjRERTFDRDFDNEMxQjU0MDA0RDZD
MTEgLyogQWlyRml4T2J2aW91c1NwaWxscy5oICovLAogCQkJCTI2MkQ4NUI0MUMwRDY1MEYwMDZB
Q0I2MSAvKiBBaXJGaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMuY3BwICovLAogCQkJCTI2MkQ4NUI1
MUMwRDY1MEYwMDZBQ0I2MSAvKiBBaXJGaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMuaCAqLywKLQkJ
CQkwRjRDOTE2NzFDMkIzRDY4MDA0MzQxQTYgLyogQWlyRml4U3BpbGxTbG90WkRlZi5oICovLAog
CQkJCTBGRUM4NTUyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCAqLywK
IAkJCQkwRkVDODU1MzFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGUuY3BwICovLAogCQkJ
CTBGRUM4NTU0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5oICovLApAQCAtNDg3Nyw2
ICs0ODg0LDggQEAKIAkJCQkyNjcxOEJBMjFCRTk5Rjc4MDA1MjAxN0IgLyogQWlySXRlcmF0ZWRS
ZWdpc3RlckNvYWxlc2NpbmcuY3BwICovLAogCQkJCTI2NzE4QkEzMUJFOTlGNzgwMDUyMDE3QiAv
KiBBaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5oICovLAogCQkJCTI2ODRENDM3MUMwMDE2
MUMwMDgxRDY2MyAvKiBBaXJMaXZlbmVzcy5oICovLAorCQkJCTBGRTM0QzE3MUM0QjM5QUUwMDAz
QTUxMiAvKiBBaXJMb2dSZWdpc3RlclByZXNzdXJlLmNwcCAqLywKKwkJCQkwRkUzNEMxODFDNEIz
OUFFMDAwM0E1MTIgLyogQWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5oICovLAogCQkJCTBGNjE4MzI1
MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwICovLAogCQkJCTBG
NjE4MzI2MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dlckFmdGVyUmVnQWxsb2MuaCAqLywKIAkJ
CQkwRjYxODMyNzFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3MuY3BwICovLApAQCAt
NzMyNiw3ICs3MzM1LDYgQEAKIAkJCQlEQzAwMDM5MzE5RDhCRTZGMDAwMjNFQjAgLyogREZHUHJl
Y2lzZUxvY2FsQ2xvYmJlcml6ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCRTBGNzUxNkMxREIw
QjAwODJDNUU4IC8qIERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZGRkM5NUUxNEVGOTBCNzAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjRDOTE2ODFDMkIzRDY4MDA0MzQxQTYgLyog
QWlyRml4U3BpbGxTbG90WkRlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzRTAxQUIxOUQzNTNB
NTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MkI5Q0VEMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZGQzkyMTYxQjk0RkIzRTAwNzFERDY2IC8qIERGR1Byb3BlcnR5VHlw
ZUtleS5oIGluIEhlYWRlcnMgKi8sCkBAIC03MzU3LDYgKzczNjUsNyBAQAogCQkJCTcwQjc5MTk5
MUMwMjRBMjkwMDI0ODFFMiAvKiBHZW5lcmF0b3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGQzA5N0EyMTQ2QjI4Q0MwMENGMjQ0MiAvKiBERkdUaHVua3MuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGRDhBMzI4MTdENTFGNTcwMENBMkM0MCAvKiBERkdUaWVyVXBDaGVja0luamVjdGlv
blBoYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkUzNEMxQTFDNEIzOUFFMDAwM0E1MTIgLyog
QWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEOEEzMkExN0Q1
MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkQ4QTMyQzE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExGb3JP
U1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RkUzQTA2QjQxQzEwQ0I5MzAwMzkwRkREIC8qIEpJVEJpdFhvckdlbmVyYXRvci5oIGluIEhlYWRl
cnMgKi8sCkBAIC03NDAyLDYgKzc0MTEsNyBAQAogCQkJCTBGM0FDNzU0MTg4RTVFQzgwMDMyMDI5
RiAvKiBFeGl0aW5nSklUVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMTA1ODYxNjc1NDgx
MjAwRjhBQjZFIC8qIEV4aXRLaW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCODNBQjE0QkNG
NUJCMDA4ODVCNEYgLyogRXhwcmVzc2lvblJhbmdlSW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEY0REUxQ0YxQzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE3QThBRjM4MTdBREI1RjMwMDVBQjE3NCAvKiBGbG9hdDMyQXJyYXkuaCBp
biBIZWFkZXJzICovLAogCQkJCUE3QThBRjM5MTdBREI1RjMwMDVBQjE3NCAvKiBGbG9hdDY0QXJy
YXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjRFNTQzMTdFQTlGNTkwMEFCQjIxNyAvKiBGUFJJ
bmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTg2NzYsNiArODY4Niw3IEBACiAJCQkJMEZFQzg1NkQx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNDM0MjJBNjYxQzE2MjY3NTAwRTJFQjk4IC8qIEIzUmVkdWNlRG91YmxlVG9GbG9hdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkVDODU2RjFCREFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGNERFMUNFMUM0QzFCNTQwMDRENkMxMSAvKiBBaXJGaXhP
YnZpb3VzU3BpbGxzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUM4NTcxMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUM4NTczMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZFQzg1NzUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC05MDkxLDYgKzkxMDIsNyBAQAogCQkJCUE1OTNDRjgyMTg0MDM3NzEwMEJGQ0UyNyAvKiBJbnNw
ZWN0b3JWYWx1ZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5Q0YxMDdFQzM3NjAwNDI3
QTQ4IC8qIEludGVybmFsRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyOUQ3RDQw
RUQyMTI4MjAwQjg5NjE5IC8qIEludGVycHJldGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
RTM0QzE5MUM0QjM5QUUwMDAzQTUxMiAvKiBBaXJMb2dSZWdpc3RlclByZXNzdXJlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUExQjlFMjM5MUI0RTBENjcwMEJDN0ZFRCAvKiBJbnRsQ29sbGF0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTFCOUUyM0IxQjRFMEQ2NzAwQkM3RkVEIC8qIEludGxD
b2xsYXRvckNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExQjlFMjNEMUI0RTBE
NjcwMEJDN0ZFRCAvKiBJbnRsQ29sbGF0b3JQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5jcHAJKHJldmlz
aW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSwxOSArMTA1LDE0IEBAIEluc3QgQ2hlY2tTcGVjaWFs
OjpoaWRkZW5CcmFuY2goY29uc3QgSW4KICAgICByZXR1cm4gaGlkZGVuQnJhbmNoOwogfQogCi12
b2lkIENoZWNrU3BlY2lhbDo6Y29tbWl0SGlkZGVuQnJhbmNoKEluc3QmIG9yaWdpbmFsLCBJbnN0
JiBoaWRkZW5CcmFuY2gpCi17Ci0gICAgQVNTRVJUKGhpZGRlbkJyYW5jaC5hcmdzLnNpemUoKSA9
PSBtX251bUNoZWNrQXJncyk7Ci0gICAgQVNTRVJUKGhpZGRlbkJyYW5jaC5vcGNvZGUgPSBtX2No
ZWNrT3Bjb2RlKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9udW1DaGVja0FyZ3M7
ICsraSkKLSAgICAgICAgb3JpZ2luYWwuYXJnc1tpICsgMV0gPSBoaWRkZW5CcmFuY2guYXJnc1tp
XTsKLX0KLQogdm9pZCBDaGVja1NwZWNpYWw6OmZvckVhY2hBcmcoSW5zdCYgaW5zdCwgY29uc3Qg
U2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mIGNhbGxiYWNrKQogewogICAgIElu
c3QgaGlkZGVuID0gaGlkZGVuQnJhbmNoKGluc3QpOwotICAgIGhpZGRlbi5mb3JFYWNoQXJnKGNh
bGxiYWNrKTsKLSAgICBjb21taXRIaWRkZW5CcmFuY2goaW5zdCwgaGlkZGVuKTsKKyAgICBoaWRk
ZW4uZm9yRWFjaEFyZygKKyAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFy
Zzo6VHlwZSB0eXBlLCBBcmc6OldpZHRoIHdpZHRoKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBp
bmRleCA9ICZhcmcgLSAmaGlkZGVuLmFyZ3NbMF07CisgICAgICAgICAgICBjYWxsYmFjayhpbnN0
LmFyZ3NbMSArIGluZGV4XSwgcm9sZSwgdHlwZSwgd2lkdGgpOworICAgICAgICB9KTsKICAgICBm
b3JFYWNoQXJnSW1wbChudW1CM0FyZ3MoaW5zdCksIG1fbnVtQ2hlY2tBcmdzICsgMSwgaW5zdCwg
bV9zdGFja21hcFJvbGUsIGNhbGxiYWNrKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmgJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsOSAr
MTIzLDYgQEAgcHJvdGVjdGVkOgogICAgIC8vIENvbnN0cnVjdHMgYW5kIHJldHVybnMgdGhlIElu
c3QgcmVwcmVzZW50aW5nIHRoZSBicmFuY2ggdGhhdCB0aGlzIHdpbGwgdXNlLgogICAgIEFpcjo6
SW5zdCBoaWRkZW5CcmFuY2goY29uc3QgQWlyOjpJbnN0JikgY29uc3Q7CiAKLSAgICAvLyBJZiB3
ZSBlZGl0ZWQgdGhlIGhpZGRlbiBicmFuY2gsIHRoaXMgaW5zdGFsbHMgdGhlIGVkaXRzIGludG8g
dGhlIGdpdmVuIGluc3QuCi0gICAgdm9pZCBjb21taXRIaWRkZW5CcmFuY2goQWlyOjpJbnN0JiBv
cmlnaW5hbCwgQWlyOjpJbnN0JiBoaWRkZW5CcmFuY2gpOwotCiAgICAgdm9pZCBmb3JFYWNoQXJn
KEFpcjo6SW5zdCYsIGNvbnN0IFNjb3BlZExhbWJkYTxBaXI6Okluc3Q6OkVhY2hBcmdDYWxsYmFj
az4mKSBvdmVycmlkZTsKICAgICBib29sIGlzVmFsaWQoQWlyOjpJbnN0Jikgb3ZlcnJpZGU7CiAg
ICAgYm9vbCBhZG1pdHNTdGFjayhBaXI6Okluc3QmLCB1bnNpZ25lZCBhcmdJbmRleCkgb3ZlcnJp
ZGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2
aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTg3MSw2ICs4NzEsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIGFyZyA9IHRtcCh2YWx1ZS52YWx1ZSgpKTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlJlZ2lzdGVyOgorICAgICAgICAgICAgICAgIHN0
YWNrbWFwLT5lYXJseUNsb2JiZXJlZCgpLmNsZWFyKHZhbHVlLnJlcCgpLnJlZygpKTsKICAgICAg
ICAgICAgICAgICBhcmcgPSBUbXAodmFsdWUucmVwKCkucmVnKCkpOwogICAgICAgICAgICAgICAg
IGFwcGVuZChNb3ZlLCBpbW1PclRtcCh2YWx1ZS52YWx1ZSgpKSwgYXJnKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKQEAgLTE5NzMsNiArMTk3NCw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZpbGxTdGFja21hcChpbnN0LCBwYXRjaHBvaW50
VmFsdWUsIDApOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAocGF0Y2hwb2ludFZhbHVl
LT5yZXN1bHRDb25zdHJhaW50LmlzUmVnKCkpCisgICAgICAgICAgICAgICAgcGF0Y2hwb2ludFZh
bHVlLT5sYXRlQ2xvYmJlcmVkKCkuY2xlYXIocGF0Y2hwb2ludFZhbHVlLT5yZXN1bHRDb25zdHJh
aW50LnJlZygpKTsKIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gcGF0Y2hwb2ludFZh
bHVlLT5udW1HUFNjcmF0Y2hSZWdpc3RlcnM7IGktLTspCiAgICAgICAgICAgICAgICAgaW5zdC5h
cmdzLmFwcGVuZChtX2NvZGUubmV3VG1wKEFyZzo6R1ApKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1N0YWNrbWFwVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNTdGFja21hcFZhbHVlLmgJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAt
MTg3LDYgKzE4Nyw4IEBAIHB1YmxpYzoKICAgICAgICAgY2xvYmJlckxhdGUoc2V0KTsKICAgICB9
CiAKKyAgICBSZWdpc3RlclNldCYgZWFybHlDbG9iYmVyZWQoKSB7IHJldHVybiBtX2Vhcmx5Q2xv
YmJlcmVkOyB9CisgICAgUmVnaXN0ZXJTZXQmIGxhdGVDbG9iYmVyZWQoKSB7IHJldHVybiBtX2xh
dGVDbG9iYmVyZWQ7IH0KICAgICBjb25zdCBSZWdpc3RlclNldCYgZWFybHlDbG9iYmVyZWQoKSBj
b25zdCB7IHJldHVybiBtX2Vhcmx5Q2xvYmJlcmVkOyB9CiAgICAgY29uc3QgUmVnaXN0ZXJTZXQm
IGxhdGVDbG9iYmVyZWQoKSBjb25zdCB7IHJldHVybiBtX2xhdGVDbG9iYmVyZWQ7IH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2su
Y3BwCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckFsbG9jYXRlU3RhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYg
RU5BQkxFKEIzX0pJVCkKIAogI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJJbnNl
cnRpb25TZXQuaCIKICNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkFpckxp
dmVuZXNzLmgiCiAjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgpAQCAtMTY2LDggKzE2Nyw0NyBA
QCB2b2lkIGFsbG9jYXRlU3RhY2soQ29kZSYgY29kZSkKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
bnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTspIHsKICAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIkFuYWx5emluZzogIiwgYmxvY2st
PmF0KGluc3RJbmRleCksICJcbiIpOworCisgICAgICAgICAgICAvLyBLaWxsIGRlYWQgc3RvcmVz
LiBGb3Igc2ltcGxpY2l0eSB3ZSBzYXkgdGhhdCBhIHN0b3JlIGlzIGtpbGxhYmxlIGlmIGl0IGhh
cyBvbmx5IGxhdGUKKyAgICAgICAgICAgIC8vIGRlZnMgYW5kIHRob3NlIGxhdGUgZGVmcyBhcmUg
dG8gdGhpbmdzIHRoYXQgYXJlIGRlYWQgcmlnaHQgbm93LiBXZSBvbmx5IGRvIHRoYXQKKyAgICAg
ICAgICAgIC8vIGJlY2F1c2UgdGhhdCdzIHRoZSBvbmx5IGtpbmQgb2YgZGVhZCBzdGFjayBzdG9y
ZSB3ZSB3aWxsIHNlZSBoZXJlLgorICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChp
bnN0SW5kZXgpOworICAgICAgICAgICAgaWYgKCFpbnN0Lmhhc05vbkFyZ0VmZmVjdHMoKSkgewor
ICAgICAgICAgICAgICAgIGJvb2wgb2sgPSB0cnVlOworICAgICAgICAgICAgICAgIGluc3QuZm9y
RWFjaEFyZygKKyAgICAgICAgICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJv
bGUsIEFyZzo6VHlwZSwgQXJnOjpXaWR0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KEFyZzo6aXNFYXJseURlZihyb2xlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9r
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcmc6OmlzTGF0
ZURlZihyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIWFyZy5pc1N0YWNrKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvayA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIFN0
YWNrU2xvdCogc2xvdCA9IGFyZy5zdGFja1Nsb3QoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChzbG90LT5raW5kKCkgIT0gU3RhY2tTbG90S2luZDo6QW5vbnltb3VzKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChsb2NhbENhbGMuaXNMaXZlKHNsb3QpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgICAgIGlmIChvaykKKyAgICAgICAgICAgICAgICAgICAgaW5zdCA9IEluc3Qo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICAgICAgaW50ZXJmZXJlKGlu
c3RJbmRleCk7CiAgICAgICAgICAgICBsb2NhbENhbGMuZXhlY3V0ZShpbnN0SW5kZXgpOworCisg
ICAgICAgICAgICBibG9jay0+aW5zdHMoKS5yZW1vdmVBbGxNYXRjaGluZygKKyAgICAgICAgICAg
ICAgICBbJl0gKGNvbnN0IEluc3QmIGluc3QpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gIWluc3Q7CisgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KICAgICAgICAg
aW50ZXJmZXJlKC0xKTsKICAgICB9CkBAIC0yMzIsMzMgKzI3Miw0MyBAQCB2b2lkIGFsbG9jYXRl
U3RhY2soQ29kZSYgY29kZSkKICAgICAvLyBXZSB3b3VsZCBoYXZlIHRvIHNjYXZlbmdlIGZvciB0
ZW1wb3JhcmllcyBpZiB0aGlzIGhhcHBlbmVkLiBGb3J0dW5hdGVseSwgdGhpcyBjYXNlIHdpbGwg
YmUKICAgICAvLyBleHRyZW1lbHkgcmFyZSBzbyB3ZSBjYW4gZG8gY3JhenkgdGhpbmdzIHdoZW4g
aXQgYXJpc2VzLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTI1MzAKLSAgICAKKworICAgIEluc2VydGlvblNldCBpbnNlcnRpb25TZXQoY29kZSk7CiAg
ICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKLSAgICAgICAgZm9yIChJbnN0JiBp
bnN0IDogKmJsb2NrKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gMDsgaW5z
dEluZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbnN0SW5kZXgpIHsKKyAgICAgICAgICAgIEluc3Qm
IGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKICAgICAgICAgICAgIGluc3QuZm9yRWFjaEFy
ZygKLSAgICAgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUsIEFyZzo6VHlwZSwg
QXJnOjpXaWR0aCB3aWR0aCkKLSAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgWyZd
IChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSwgQXJnOjpXaWR0aCB3aWR0aCkg
eworICAgICAgICAgICAgICAgICAgICBhdXRvIHN0YWNrQWRkciA9IFsmXSAoaW50MzJfdCBvZmZz
ZXQpIC0+IEFyZyB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQXJnOjpzdGFja0Fk
ZHIob2Zmc2V0LCBjb2RlLmZyYW1lU2l6ZSgpLCB3aWR0aCk7CisgICAgICAgICAgICAgICAgICAg
IH07CisgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGFy
Zy5raW5kKCkpIHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OlN0YWNrOiB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBhcmcgPSBBcmc6OmFkZHIoCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhcmcub2Zmc2V0KCkgKyBhcmcuc3RhY2tTbG90KCktPm9mZnNldEZyb21G
UCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlzVmFsaWRGb3JtKHdpZHRo
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IEFyZzo6YWRkcigKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVG1wKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50
ZXJSZWdpc3RlciksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZy5vZmZzZXQo
KSArIGNvZGUuZnJhbWVTaXplKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90
KiBzbG90ID0gYXJnLnN0YWNrU2xvdCgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFy
Zzo6aXNaRGVmKHJvbGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2xvdC0+a2lu
ZCgpID09IFN0YWNrU2xvdEtpbmQ6OkFub255bW91cworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICYmIHNsb3QtPmJ5dGVTaXplKCkgPiBBcmc6OmJ5dGVzKHdpZHRoKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEN1cnJlbnRseSB3ZSBvbmx5IGhhbmRsZSB0aGlzIHNpbXBs
ZSBjYXNlIGJlY2F1c2UgaXQncyB0aGUgb25seSBvbmUKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyB0aGF0IGFyaXNlczogWkRlZidzIGFyZSBvbmx5IDMyLWJpdCByaWdodCBub3cuIFNv
LCB3aGVuIHdlIGhpdCB0aGVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzc2Vy
dGlvbnMgaXQgbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIGltcGxlbWVudCB0aG9zZSBvdGhlciBraW5k
cyBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHplcm8gZmlsbHMuCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvdC0+Ynl0ZVNpemUoKSA9PSA4
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh3aWR0aCA9PSBB
cmc6OldpZHRoMzIpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgcmVseSBv
biB0aGUgZmFjdCB0aGF0IHRoZXJlIG11c3QgYmUgc29tZSB3YXkgdG8gbW92ZSB6ZXJvIHRvIGEK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtZW1vcnkgbG9jYXRpb24gd2l0aG91dCBm
aXJzdCBidXJuaW5nIGEgcmVnaXN0ZXIuIE9uIEFSTSwgd2Ugd291bGQgZG8KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyB0aGlzIHVzaW5nIHpyLgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzVmFsaWRGb3JtKE1vdmUzMiwgQXJnOjpJbW0sIEFyZzo6
QWRkcikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQo
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RJbmRleCArIDEsIE1vdmUzMiwg
aW5zdC5vcmlnaW4sIEFyZzo6aW1tKDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGFja0FkZHIoYXJnLm9mZnNldCgpICsgNCArIHNsb3QtPm9mZnNldEZyb21GUCgpKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBz
dGFja0FkZHIoYXJnLm9mZnNldCgpICsgc2xvdC0+b2Zmc2V0RnJvbUZQKCkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgY2FzZSBBcmc6OkNhbGxBcmc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcmcg
PSBBcmc6OmFkZHIoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVG1wKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcub2Zmc2V0
KCkgLSBjb2RlLmZyYW1lU2l6ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXJn
LmlzVmFsaWRGb3JtKHdpZHRoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9
IEFyZzo6YWRkcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG1wKE1hY3JvQXNz
ZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFyZy5vZmZzZXQoKSArIGNvZGUuZnJhbWVTaXplKCkpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gc3RhY2tBZGRyKGFyZy5v
ZmZzZXQoKSAtIGNvZGUuZnJhbWVTaXplKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKQEAgLTI2Niw2ICszMTYsNyBAQCB2b2lkIGFsbG9jYXRlU3RhY2soQ29kZSYgY29k
ZSkKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICApOwogICAgICAgICB9CisgICAgICAg
IGluc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5oCShyZXZpc2lvbiAx
OTUxNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2su
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zMyw3ICszMyw5IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeyBuYW1lc3BhY2UKIGNsYXNzIENvZGU7CiAKIC8vIFRoaXMgYWxsb2NhdGVzIFN0YWNrU2xv
dHMgdG8gcGxhY2VzIG9uIHRoZSBzdGFjay4gSXQgZmlyc3QgYWxsb2NhdGVzIHRoZSBwaW5uZWQg
b25lcyBpbiBpbmRleAotLy8gb3JkZXIgYW5kIHRoZW4gaXQgYWxsb2NhdGVzIHRoZSByZXN0IHVz
aW5nIGZpcnN0IGZpdC4KKy8vIG9yZGVyIGFuZCB0aGVuIGl0IGFsbG9jYXRlcyB0aGUgcmVzdCB1
c2luZyBmaXJzdCBmaXQuIFRha2VzIHRoZSBvcHBvcnR1bml0eSB0byBraWxsIGRlYWQKKy8vIGFz
c2lnbm1lbnRzIHRvIHN0YWNrIHNsb3RzLCBzaW5jZSBpdCBrbm93cyB3aGljaCBvbmVzIGFyZSBs
aXZlLiBBbHNvIGZpeGVzIFpEZWZzIHRvIGFub255bW91cworLy8gc3RhY2sgc2xvdHMuCiAKIHZv
aWQgYWxsb2NhdGVTdGFjayhDb2RlJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQXJnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJBcmcuaAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJBcmcuaAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDYgKzEyNiw3IEBAIHB1YmxpYzoK
ICAgICAgICAgLy8gZGVwZW5kaW5nIG9uIHRoZSBraW5kIG9mIHRoZSBhcmd1bWVudDoKICAgICAg
ICAgLy8KICAgICAgICAgLy8gRm9yIHJlZ2lzdGVyOiB0aGUgdXBwZXIgYml0cyBhcmUgemVyby1m
aWxsZWQuCisgICAgICAgIC8vIEZvciBhbm9ueW1vdXMgc3RhY2sgc2xvdDogdGhlIHVwcGVyIGJp
dHMgYXJlIHplcm8tZmlsbGVkLgogICAgICAgICAvLyBGb3IgYWRkcmVzczogdGhlIHVwcGVyIGJp
dHMgYXJlIG5vdCB0b3VjaGVkIChpLmUuIHdlIGRvIGEgMzItYml0IHN0b3JlIGluIG91ciBleGFt
cGxlKS4KICAgICAgICAgLy8gRm9yIHRtcDogZWl0aGVyIHRoZSB1cHBlciBiaXRzIGFyZSBub3Qg
dG91Y2hlZCBvciB0aGV5IGFyZSB6ZXJvLWZpbGxlZCwgYW5kIHdlIHdvbid0IGtub3cKICAgICAg
ICAgLy8gd2hpY2ggdW50aWwgd2UgbG93ZXIgdGhlIHRtcCB0byBlaXRoZXIgYSBTdGFja1Nsb3Qg
b3IgYSBSZWcuCkBAIC01MTMsNiArNTE0LDE3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9CiAKKyAgICBzdGF0aWMgQXJnIHN0YWNrQWRkcihpbnQzMl90IG9mZnNldEZy
b21GUCwgdW5zaWduZWQgZnJhbWVTaXplLCBXaWR0aCB3aWR0aCkKKyAgICB7CisgICAgICAgIEFy
ZyByZXN1bHQgPSBBcmc6OmFkZHIoQWlyOjpUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIp
LCBvZmZzZXRGcm9tRlApOworICAgICAgICBpZiAoIXJlc3VsdC5pc1ZhbGlkRm9ybSh3aWR0aCkp
IHsKKyAgICAgICAgICAgIHJlc3VsdCA9IEFyZzo6YWRkcigKKyAgICAgICAgICAgICAgICBBaXI6
OlRtcChNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpLAorICAgICAgICAgICAg
ICAgIG9mZnNldEZyb21GUCArIGZyYW1lU2l6ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisKICAgICAvLyBJZiB5b3UgZG9uJ3QgcGFzcyBhIFdpZHRoLCB0aGlz
IG9wdGltaXN0aWNhbGx5IGFzc3VtZXMgdGhhdCB5b3UncmUgdXNpbmcgdGhlIHJpZ2h0IHdpZHRo
LgogICAgIHN0YXRpYyBib29sIGlzVmFsaWRTY2FsZSh1bnNpZ25lZCBzY2FsZSwgT3B0aW9uYWw8
V2lkdGg+IHdpZHRoID0gTnVsbG9wdCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckJhc2ljQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5jcHAJKHJldmlzaW9uIDE5NTE3NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU3LDExICs1NywyMSBAQCB2b2lkIEJhc2ljQmxvY2s6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgCiAKIHZvaWQgQmFzaWNCbG9jazo6ZGVlcER1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKIHsKKyAgICBkdW1wSGVhZGVyKG91dCk7CisgICAgZm9yIChjb25zdCBJbnN0JiBpbnN0IDog
KnRoaXMpCisgICAgICAgIG91dC5wcmludCgiICAgICIsIGluc3QsICJcbiIpOworICAgIGR1bXBG
b290ZXIob3V0KTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpkdW1wSGVhZGVyKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0Cit7CiAgICAgb3V0LnByaW50KCJCQiIsICp0aGlzLCAiOiA7IGZyZXF1ZW5j
eSA9ICIsIG1fZnJlcXVlbmN5LCAiXG4iKTsKICAgICBpZiAocHJlZGVjZXNzb3JzKCkuc2l6ZSgp
KQogICAgICAgICBvdXQucHJpbnQoIiAgUHJlZGVjZXNzb3JzOiAiLCBwb2ludGVyTGlzdER1bXAo
cHJlZGVjZXNzb3JzKCkpLCAiXG4iKTsKLSAgICBmb3IgKGNvbnN0IEluc3QmIGluc3QgOiAqdGhp
cykKLSAgICAgICAgb3V0LnByaW50KCIgICAgIiwgaW5zdCwgIlxuIik7Cit9CisKK3ZvaWQgQmFz
aWNCbG9jazo6ZHVtcEZvb3RlcihQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewogICAgIGlmIChz
dWNjZXNzb3JzKCkuc2l6ZSgpKQogICAgICAgICBvdXQucHJpbnQoIiAgU3VjY2Vzc29yczogIiwg
bGlzdER1bXAoc3VjY2Vzc29ycygpKSwgIlxuIik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAkocmV2aXNpb24gMTk1MTc2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM2LDYgKzM2LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVz
cGFjZSBBaXIgewogCitjbGFzcyBCbG9ja0luc2VydGlvblNldDsKIGNsYXNzIENvZGU7CiBjbGFz
cyBJbnNlcnRpb25TZXQ7CiAKQEAgLTEyNiw3ICsxMjcsMTEgQEAgcHVibGljOgogICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIHZvaWQgZGVlcER1bXAoUHJpbnRTdHJlYW0m
KSBjb25zdDsKIAorICAgIHZvaWQgZHVtcEhlYWRlcihQcmludFN0cmVhbSYpIGNvbnN0OworICAg
IHZvaWQgZHVtcEZvb3RlcihQcmludFN0cmVhbSYpIGNvbnN0OworCiBwcml2YXRlOgorICAgIGZy
aWVuZCBjbGFzcyBCbG9ja0luc2VydGlvblNldDsKICAgICBmcmllbmQgY2xhc3MgQ29kZTsKICAg
ICBmcmllbmQgY2xhc3MgSW5zZXJ0aW9uU2V0OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmNwcAkocmV2aXNpb24gMTk1MTc2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw5IEBAIENDYWxsU3BlY2lhbDo6Q0NhbGxTcGVjaWFs
KCkKICAgICBtX2Nsb2JiZXJlZFJlZ3MuZXhjbHVkZShSZWdpc3RlclNldDo6c3RhY2tSZWdpc3Rl
cnMoKSk7CiAgICAgbV9jbG9iYmVyZWRSZWdzLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnJlc2VydmVk
SGFyZHdhcmVSZWdpc3RlcnMoKSk7CiAgICAgbV9jbG9iYmVyZWRSZWdzLmV4Y2x1ZGUoUmVnaXN0
ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CisgICAgbV9jbG9iYmVyZWRSZWdzLmNsZWFy
KEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICBtX2Nsb2JiZXJlZFJlZ3MuY2xlYXIoR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKKyAgICBtX2Nsb2JiZXJlZFJlZ3MuY2xlYXIoRlBSSW5m
bzo6cmV0dXJuVmFsdWVGUFIpOwogfQogCiBDQ2FsbFNwZWNpYWw6On5DQ2FsbFNwZWNpYWwoKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHJldmlzaW9uIDE5NTE3
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Niw2ICs0Niw3IEBAIGNsYXNzIFByb2NlZHVyZTsKIAogbmFtZXNwYWNlIEFpciB7
CiAKK2NsYXNzIEJsb2NrSW5zZXJ0aW9uU2V0OwogY2xhc3MgQ0NhbGxTcGVjaWFsOwogCiAvLyBU
aGlzIGlzIGFuIElSIHRoYXQgaXMgdmVyeSBjbG9zZSB0byB0aGUgYmFyZSBtZXRhbC4gSXQgcmVx
dWlyZXMgYWJvdXQgNDB4IG1vcmUgYnl0ZXMgdGhhbiB0aGUKQEAgLTMyNCw2ICszMjUsNyBAQCBw
dWJsaWM6CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIDo6SlNDOjpCMzo6UHJvY2VkdXJl
OworICAgIGZyaWVuZCBjbGFzcyBCbG9ja0luc2VydGlvblNldDsKICAgICAKICAgICBDb2RlKFBy
b2NlZHVyZSYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0
b20uY3BwCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDExICsyOCwzNSBAQAogCiAjaWYg
RU5BQkxFKEIzX0pJVCkKIAorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
QjNDQ2FsbFZhbHVlLmgiCiAjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKIAogbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewogCitib29sIFBhdGNoQ3VzdG9t
Ojppc1ZhbGlkRm9ybShJbnN0JiBpbnN0KQoreworICAgIGlmIChpbnN0LmFyZ3Muc2l6ZSgpIDwg
MSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghaW5zdC5hcmdzWzBdLmlzU3BlY2lh
bCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFpbnN0LmFyZ3NbMF0uc3BlY2lh
bCgpLT5pc1ZhbGlkKGluc3QpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgUmVnaXN0ZXJT
ZXQgY2xvYmJlcmVkRWFybHkgPSBpbnN0LmV4dHJhRWFybHlDbG9iYmVyZWRSZWdzKCk7CisgICAg
UmVnaXN0ZXJTZXQgY2xvYmJlcmVkTGF0ZSA9IGluc3QuZXh0cmFDbG9iYmVyZWRSZWdzKCk7Cisg
ICAgYm9vbCBvayA9IHRydWU7CisgICAgaW5zdC5mb3JFYWNoVG1wKAorICAgICAgICBbJl0gKFRt
cCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlLCBBcmc6OldpZHRoKSB7CisgICAgICAg
ICAgICBpZiAoIXRtcC5pc1JlZygpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIGlmIChBcmc6OmlzTGF0ZURlZihyb2xlKSB8fCBBcmc6OmlzTGF0ZVVzZShyb2xlKSkKKyAg
ICAgICAgICAgICAgICBvayAmPSAhY2xvYmJlcmVkTGF0ZS5nZXQodG1wLnJlZygpKTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBvayAmPSAhY2xvYmJlcmVkRWFybHkuZ2V0KHRt
cC5yZWcoKSk7CisgICAgICAgIH0pOworICAgIHJldHVybiBvazsKK30KKwogYm9vbCBDQ2FsbEN1
c3RvbTo6aXNWYWxpZEZvcm0oSW5zdCYgaW5zdCkKIHsKICAgICBDQ2FsbFZhbHVlKiB2YWx1ZSA9
IGluc3Qub3JpZ2luLT5hczxDQ2FsbFZhbHVlPigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJDdXN0b20uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckN1c3RvbS5oCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckN1c3RvbS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSwxNCArNzEs
NyBAQCBzdHJ1Y3QgUGF0Y2hDdXN0b20gewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
Ci0gICAgc3RhdGljIGJvb2wgaXNWYWxpZEZvcm0oSW5zdCYgaW5zdCkKLSAgICB7Ci0gICAgICAg
IGlmIChpbnN0LmFyZ3Muc2l6ZSgpIDwgMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgaWYgKCFpbnN0LmFyZ3NbMF0uaXNTcGVjaWFsKCkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIHJldHVybiBpbnN0LmFyZ3NbMF0uc3BlY2lhbCgpLT5pc1ZhbGlkKGlu
c3QpOwotICAgIH0KKyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkRm9ybShJbnN0JiBpbnN0KTsKIAog
ICAgIHN0YXRpYyBib29sIGFkbWl0c1N0YWNrKEluc3QmIGluc3QsIHVuc2lnbmVkIGFyZ0luZGV4
KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZm
bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1p
dFNodWZmbGUuY3BwCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckVtaXRTaHVmZmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNiArNzAsMTQg
QEAgdm9pZCBTaHVmZmxlUGFpcjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KQogICAgIG91dC5wcmlu
dCh3aWR0aCgpLCAiOiIsIHNyYygpLCAiPT4iLCBkc3QoKSk7CiB9CiAKK0luc3QgY3JlYXRlU2h1
ZmZsZShWYWx1ZSogb3JpZ2luLCBjb25zdCBWZWN0b3I8U2h1ZmZsZVBhaXI+JiBwYWlycykKK3sK
KyAgICBJbnN0IHJlc3VsdChTaHVmZmxlLCBvcmlnaW4pOworICAgIGZvciAoY29uc3QgU2h1ZmZs
ZVBhaXImIHBhaXIgOiBwYWlycykKKyAgICAgICAgcmVzdWx0LmFwcGVuZChwYWlyLnNyYygpLCBw
YWlyLmRzdCgpLCBBcmc6OndpZHRoQXJnKHBhaXIud2lkdGgoKSkpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKIFZlY3RvcjxJbnN0PiBlbWl0U2h1ZmZsZSgKICAgICBWZWN0b3I8U2h1ZmZsZVBh
aXI+IHBhaXJzLCBzdGQ6OmFycmF5PEFyZywgMj4gc2NyYXRjaGVzLCBBcmc6OlR5cGUgdHlwZSwg
VmFsdWUqIG9yaWdpbikKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
RW1pdFNodWZmbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckVtaXRTaHVmZmxlLmgJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYs
OSBAQCBwcml2YXRlOgogICAgIEFyZzo6V2lkdGggbV93aWR0aCB7IEFyZzo6V2lkdGg4IH07CiB9
OwogCisvLyBDcmVhdGUgYSBTaHVmZmxlIGluc3RydWN0aW9uLgorSW5zdCBjcmVhdGVTaHVmZmxl
KFZhbHVlKiBvcmlnaW4sIGNvbnN0IFZlY3RvcjxTaHVmZmxlUGFpcj4mKTsKKwogLy8gUGVyZm9y
bSBhIHNodWZmbGUgb2YgYSBnaXZlbiB0eXBlLiBUaGUgc2NyYXRjaCBhcmd1bWVudCBpcyBtYW5k
YXRvcnkuIFlvdSBzaG91bGQgcGFzcyBpdCBhcwogLy8gZm9sbG93czogSWYgeW91IGtub3cgdGhh
dCB5b3UgaGF2ZSBzY3JhdGNoIHJlZ2lzdGVycyBvciB0ZW1wb3JhcmllcyBhdmFpbGFibGUgLSB0
aGF0IGlzLCB0aGV5J3JlCiAvLyByZWdpc3RlcnMgdGhhdCBhcmUgbm90IG1lbnRpb25lZCBpbiB0
aGUgc2h1ZmZsZSwgaGF2ZSB0aGUgc2FtZSB0eXBlIGFzIHRoZSBzaHVmZmxlLCBhbmQgYXJlIG5v
dApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhPYnZpb3VzU3BpbGxz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeE9i
dmlvdXNTcGlsbHMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJGaXhPYnZpb3VzU3BpbGxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUx
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJGaXhPYnZpb3VzU3BpbGxzLmgiCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckluc3RJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgorI2luY2x1ZGUgIkIzSW5kZXhN
YXAuaCIKKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCituYW1lc3BhY2UgeworCitib29sIHZlcmJvc2Ug
PSBmYWxzZTsKKworY2xhc3MgRml4T2J2aW91c1NwaWxscyB7CitwdWJsaWM6CisgICAgRml4T2J2
aW91c1NwaWxscyhDb2RlJiBjb2RlKQorICAgICAgICA6IG1fY29kZShjb2RlKQorICAgICAgICAs
IG1fYXRIZWFkKGNvZGUuc2l6ZSgpKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHJ1bigpCisg
ICAgeworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIkNvZGUgYmVm
b3JlIGZpeE9idmlvdXNTcGlsbHM6XG4iLCBtX2NvZGUpOworICAgICAgICAKKyAgICAgICAgY29t
cHV0ZUFsaWFzZXMoKTsKKyAgICAgICAgZml4Q29kZSgpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICB2b2lkIGNvbXB1dGVBbGlhc2VzKCkKKyAgICB7CisgICAgICAgIG1fYXRIZWFkW21fY29kZVsw
XV0ud2FzVmlzaXRlZCA9IHRydWU7CisgICAgICAgIAorICAgICAgICBib29sIGNoYW5nZWQgPSB0
cnVlOworICAgICAgICB3aGlsZSAoY2hhbmdlZCkgeworICAgICAgICAgICAgY2hhbmdlZCA9IGZh
bHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDog
bV9jb2RlKSB7CisgICAgICAgICAgICAgICAgbV9ibG9jayA9IGJsb2NrOworICAgICAgICAgICAg
ICAgIG1fc3RhdGUgPSBtX2F0SGVhZFtibG9ja107CisgICAgICAgICAgICAgICAgaWYgKCFtX3N0
YXRlLndhc1Zpc2l0ZWQpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkV4ZWN1
dGluZyBibG9jayAiLCAqbV9ibG9jaywgIjogIiwgbV9zdGF0ZSwgIlxuIik7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgZm9yIChtX2luc3RJbmRleCA9IDA7IG1faW5zdEluZGV4
IDwgYmxvY2stPnNpemUoKTsgKyttX2luc3RJbmRleCkKKyAgICAgICAgICAgICAgICAgICAgZXhl
Y3V0ZUluc3QoKTsKKworICAgICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29y
IDogYmxvY2stPnN1Y2Nlc3NvckJsb2NrcygpKSB7CisgICAgICAgICAgICAgICAgICAgIFN0YXRl
JiB0b1N0YXRlID0gbV9hdEhlYWRbc3VjY2Vzc29yXTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHRvU3RhdGUud2FzVmlzaXRlZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0g
dG9TdGF0ZS5tZXJnZShtX3N0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICB0b1N0YXRlID0gbV9zdGF0ZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBmaXhD
b2RlKCkKKyAgICB7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsK
KyAgICAgICAgICAgIG1fYmxvY2sgPSBibG9jazsKKyAgICAgICAgICAgIG1fc3RhdGUgPSBtX2F0
SGVhZFtibG9ja107CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3N0YXRlLndhc1Zpc2l0
ZWQpOworCisgICAgICAgICAgICBmb3IgKG1faW5zdEluZGV4ID0gMDsgbV9pbnN0SW5kZXggPCBi
bG9jay0+c2l6ZSgpOyArK21faW5zdEluZGV4KSB7CisgICAgICAgICAgICAgICAgZml4SW5zdCgp
OworICAgICAgICAgICAgICAgIGV4ZWN1dGVJbnN0KCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICB2b2lkIGV4ZWN1dGVJbnN0KCkKKyAgICB7CisgICAgICAgIEluc3Qm
IGluc3QgPSBtX2Jsb2NrLT5hdChtX2luc3RJbmRleCk7CisKKyAgICAgICAgaWYgKHZlcmJvc2Up
CisgICAgICAgICAgICBkYXRhTG9nKCIgICAgRXhlY3V0aW5nICIsIGluc3QsICI6ICIsIG1fc3Rh
dGUsICJcbiIpOworCisgICAgICAgIEluc3Q6OmZvckVhY2hEZWZXaXRoRXh0cmFDbG9iYmVyZWRS
ZWdzPEFyZz4oCisgICAgICAgICAgICAmaW5zdCwgJmluc3QsCisgICAgICAgICAgICBbJl0gKGNv
bnN0IEFyZyYgYXJnLCBBcmc6OlJvbGUsIEFyZzo6VHlwZSwgQXJnOjpXaWR0aCkgeworICAgICAg
ICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAg
ICAgIENsb2JiZXJpbmcgIiwgYXJnLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBtX3N0YXRlLmNs
b2JiZXIoYXJnKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgIHN3aXRjaCAoaW5zdC5vcGNv
ZGUpIHsKKyAgICAgICAgY2FzZSBNb3ZlOgorICAgICAgICAgICAgaWYgKGluc3QuYXJnc1swXS5p
c1NvbWVJbW0oKSkgeworICAgICAgICAgICAgICAgIGlmIChpbnN0LmFyZ3NbMV0uaXNSZWcoKSkK
KyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5hZGRBbGlhcyhSZWdDb25zdChpbnN0LmFyZ3Nb
MV0ucmVnKCksIGluc3QuYXJnc1swXS52YWx1ZSgpKSk7CisgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoaXNTcGlsbFNsb3QoaW5zdC5hcmdzWzFdKSkKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0
ZS5hZGRBbGlhcyhTbG90Q29uc3QoaW5zdC5hcmdzWzFdLnN0YWNrU2xvdCgpLCBpbnN0LmFyZ3Nb
MF0udmFsdWUoKSkpOworICAgICAgICAgICAgfSBlbHNlIGlmIChpc1NwaWxsU2xvdChpbnN0LmFy
Z3NbMF0pICYmIGluc3QuYXJnc1sxXS5pc1JlZygpKSB7CisgICAgICAgICAgICAgICAgaWYgKE9w
dGlvbmFsPGludDY0X3Q+IGNvbnN0YW50ID0gbV9zdGF0ZS5jb25zdGFudEZvcihpbnN0LmFyZ3Nb
MF0pKQorICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLmFkZEFsaWFzKFJlZ0NvbnN0KGluc3Qu
YXJnc1sxXS5yZWcoKSwgKmNvbnN0YW50KSk7CisgICAgICAgICAgICAgICAgbV9zdGF0ZS5hZGRB
bGlhcygKKyAgICAgICAgICAgICAgICAgICAgUmVnU2xvdChpbnN0LmFyZ3NbMV0ucmVnKCksIGlu
c3QuYXJnc1swXS5zdGFja1Nsb3QoKSwgUmVnU2xvdDo6QWxsQml0cykpOworICAgICAgICAgICAg
fSBlbHNlIGlmIChpbnN0LmFyZ3NbMF0uaXNSZWcoKSAmJiBpc1NwaWxsU2xvdChpbnN0LmFyZ3Nb
MV0pKSB7CisgICAgICAgICAgICAgICAgaWYgKE9wdGlvbmFsPGludDY0X3Q+IGNvbnN0YW50ID0g
bV9zdGF0ZS5jb25zdGFudEZvcihpbnN0LmFyZ3NbMF0pKQorICAgICAgICAgICAgICAgICAgICBt
X3N0YXRlLmFkZEFsaWFzKFNsb3RDb25zdChpbnN0LmFyZ3NbMV0uc3RhY2tTbG90KCksICpjb25z
dGFudCkpOworICAgICAgICAgICAgICAgIG1fc3RhdGUuYWRkQWxpYXMoCisgICAgICAgICAgICAg
ICAgICAgIFJlZ1Nsb3QoaW5zdC5hcmdzWzBdLnJlZygpLCBpbnN0LmFyZ3NbMV0uc3RhY2tTbG90
KCksIFJlZ1Nsb3Q6OkFsbEJpdHMpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgIGNhc2UgTW92ZTMyOgorICAgICAgICAgICAgaWYgKGluc3QuYXJnc1swXS5p
c1NvbWVJbW0oKSkgeworICAgICAgICAgICAgICAgIGlmIChpbnN0LmFyZ3NbMV0uaXNSZWcoKSkK
KyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5hZGRBbGlhcyhSZWdDb25zdChpbnN0LmFyZ3Nb
MV0ucmVnKCksIHN0YXRpY19jYXN0PHVpbnQzMl90PihpbnN0LmFyZ3NbMF0udmFsdWUoKSkpKTsK
KyAgICAgICAgICAgICAgICBlbHNlIGlmIChpc1NwaWxsU2xvdChpbnN0LmFyZ3NbMV0pKQorICAg
ICAgICAgICAgICAgICAgICBtX3N0YXRlLmFkZEFsaWFzKFNsb3RDb25zdChpbnN0LmFyZ3NbMV0u
c3RhY2tTbG90KCksIHN0YXRpY19jYXN0PHVpbnQzMl90PihpbnN0LmFyZ3NbMF0udmFsdWUoKSkp
KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNTcGlsbFNsb3QoaW5zdC5hcmdzWzBdKSAmJiBp
bnN0LmFyZ3NbMV0uaXNSZWcoKSkgeworICAgICAgICAgICAgICAgIGlmIChPcHRpb25hbDxpbnQ2
NF90PiBjb25zdGFudCA9IG1fc3RhdGUuY29uc3RhbnRGb3IoaW5zdC5hcmdzWzBdKSkKKyAgICAg
ICAgICAgICAgICAgICAgbV9zdGF0ZS5hZGRBbGlhcyhSZWdDb25zdChpbnN0LmFyZ3NbMV0ucmVn
KCksIHN0YXRpY19jYXN0PHVpbnQzMl90PigqY29uc3RhbnQpKSk7CisgICAgICAgICAgICAgICAg
bV9zdGF0ZS5hZGRBbGlhcygKKyAgICAgICAgICAgICAgICAgICAgUmVnU2xvdChpbnN0LmFyZ3Nb
MV0ucmVnKCksIGluc3QuYXJnc1swXS5zdGFja1Nsb3QoKSwgUmVnU2xvdDo6WkV4dDMyKSk7Cisg
ICAgICAgICAgICB9IGVsc2UgaWYgKGluc3QuYXJnc1swXS5pc1JlZygpICYmIGlzU3BpbGxTbG90
KGluc3QuYXJnc1sxXSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoT3B0aW9uYWw8aW50NjRfdD4g
Y29uc3RhbnQgPSBtX3N0YXRlLmNvbnN0YW50Rm9yKGluc3QuYXJnc1swXSkpCisgICAgICAgICAg
ICAgICAgICAgIG1fc3RhdGUuYWRkQWxpYXMoU2xvdENvbnN0KGluc3QuYXJnc1sxXS5zdGFja1Ns
b3QoKSwgc3RhdGljX2Nhc3Q8aW50MzJfdD4oKmNvbnN0YW50KSkpOworICAgICAgICAgICAgICAg
IG1fc3RhdGUuYWRkQWxpYXMoCisgICAgICAgICAgICAgICAgICAgIFJlZ1Nsb3QoaW5zdC5hcmdz
WzBdLnJlZygpLCBpbnN0LmFyZ3NbMV0uc3RhY2tTbG90KCksIFJlZ1Nsb3Q6Ok1hdGNoMzIpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgZml4SW5zdCgp
CisgICAgeworICAgICAgICBJbnN0JiBpbnN0ID0gbV9ibG9jay0+YXQobV9pbnN0SW5kZXgpOwor
CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiRml4aW5nIGluc3Qg
IiwgaW5zdCwgIjogIiwgbV9zdGF0ZSwgIlxuIik7CisKKyAgICAgICAgLy8gQ3JlYXRlIGEgY29w
eSBpbiBjYXNlIHdlIGludmFsaWRhdGUgdGhlIGluc3RydWN0aW9uLiBUaGF0IGRvZXNuJ3QgaGFw
cGVuIG9mdGVuLgorICAgICAgICBJbnN0IGluc3RDb3B5ID0gaW5zdDsKKworICAgICAgICAvLyBU
aGUgZ29hbCBpcyB0byByZXBsYWNlIHJlZmVyZW5jZXMgdG8gc3RhY2sgc2xvdHMuIFdlIG9ubHkg
Y2FyZSBhYm91dCBlYXJseSB1c2VzLiBXZSBjYW4ndAorICAgICAgICAvLyBoYW5kbGUgVXNlRGVm
cy4gV2UgY291bGQgdGVhY2ggdGhpcyB0byBoYW5kbGUgVXNlRGVmcyBpZiB3ZSBpbnNlcnRlZCBh
IHN0b3JlIGluc3RydWN0aW9uCisgICAgICAgIC8vIGFmdGVyIGFuZCB3ZSBwcm92ZWQgdGhhdCB0
aGUgcmVnaXN0ZXIgYWxpYXNlZCB0byB0aGUgc3RhY2sgc2xvdCBkaWVzIGhlcmUuIFdlIGNhbiBn
ZXQgdGhhdAorICAgICAgICAvLyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBsaXZlbmVzcyBhbmFseXNp
cy4gV2UgYWxzbyBjYW4ndCBoYW5kbGUgbGF0ZSB1c2VzLCBiZWNhdXNlIHdlIGRvbid0CisgICAg
ICAgIC8vIGxvb2sgYXQgbGF0ZSBjbG9iYmVycyB3aGVuIGRvaW5nIHRoaXMuCisgICAgICAgIGJv
b2wgZGlkVGhpbmdzID0gZmFsc2U7CisgICAgICAgIGF1dG8gaGFuZGxlQXJnID0gWyZdIChBcmcm
IGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSwgQXJnOjpXaWR0aCB3aWR0aCkgeworICAg
ICAgICAgICAgaWYgKCFpc1NwaWxsU2xvdChhcmcpKQorICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIGlmICghQXJnOjppc0Vhcmx5VXNlKHJvbGUpKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIGlmIChBcmc6OmlzQW55RGVmKHJvbGUpKQorICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVHJ5IHRvIGdldCBh
IHJlZ2lzdGVyIGlmIGF0IGFsbCBwb3NzaWJsZS4KKyAgICAgICAgICAgIGlmIChjb25zdCBSZWdT
bG90KiBhbGlhcyA9IG1fc3RhdGUuZ2V0UmVnU2xvdChhcmcuc3RhY2tTbG90KCkpKSB7CisgICAg
ICAgICAgICAgICAgc3dpdGNoICh3aWR0aCkgeworICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpX
aWR0aDY0OgorICAgICAgICAgICAgICAgICAgICBpZiAoYWxpYXMtPm1vZGUgIT0gUmVnU2xvdDo6
QWxsQml0cykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAg
UmVwbGFjaW5nICIsIGFyZywgIiB3aXRoICIsIGFsaWFzLT5yZWcsICJcbiIpOworICAgICAgICAg
ICAgICAgICAgICBhcmcgPSBUbXAoYWxpYXMtPnJlZyk7CisgICAgICAgICAgICAgICAgICAgIGRp
ZFRoaW5ncyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICBjYXNlIEFyZzo6V2lkdGgzMjoKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2Up
CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgUmVwbGFjaW5nICIsIGFyZywg
IiB3aXRoICIsIGFsaWFzLT5yZWcsICIgKHN1YndpZHRoIGNhc2UpXG4iKTsKKyAgICAgICAgICAg
ICAgICAgICAgYXJnID0gVG1wKGFsaWFzLT5yZWcpOworICAgICAgICAgICAgICAgICAgICBkaWRU
aGluZ3MgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gUmV2ZXJ0IHRvIGltbWVkaWF0ZSBp
ZiB0aGF0IGRpZG4ndCB3b3JrLgorICAgICAgICAgICAgaWYgKGNvbnN0IFNsb3RDb25zdCogYWxp
YXMgPSBtX3N0YXRlLmdldFNsb3RDb25zdChhcmcuc3RhY2tTbG90KCkpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBSZXBs
YWNpbmcgIiwgYXJnLCAiIHdpdGggY29uc3RhbnQgIiwgYWxpYXMtPmNvbnN0YW50LCAiXG4iKTsK
KyAgICAgICAgICAgICAgICBpZiAoQXJnOjppc1ZhbGlkSW1tRm9ybShhbGlhcy0+Y29uc3RhbnQp
KQorICAgICAgICAgICAgICAgICAgICBhcmcgPSBBcmc6OmltbShhbGlhcy0+Y29uc3RhbnQpOwor
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYXJnID0gQXJnOjppbW02
NChhbGlhcy0+Y29uc3RhbnQpOworICAgICAgICAgICAgICAgIGRpZFRoaW5ncyA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgICAg
ICAKKyAgICAgICAgaW5zdC5mb3JFYWNoQXJnKGhhbmRsZUFyZyk7CisgICAgICAgIGlmICghZGlk
VGhpbmdzIHx8IGluc3QuaXNWYWxpZEZvcm0oKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgCisgICAgICAgIC8vIFdlIGludHJvZHVjZWQgc29tZXRoaW5nIGludmFsaWQgYWxvbmcgdGhl
IHdheS4gQmFjayB1cCBhbmQgY2FyZWZ1bGx5IGhhbmRsZSBlYWNoIGFyZ3VtZW50LgorICAgICAg
ICBpbnN0ID0gaW5zdENvcHk7CisgICAgICAgIEFTU0VSVChpbnN0LmlzVmFsaWRGb3JtKCkpOwor
ICAgICAgICBpbnN0LmZvckVhY2hBcmcoCisgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6
OlJvbGUgcm9sZSwgQXJnOjpUeXBlIHR5cGUsIEFyZzo6V2lkdGggd2lkdGgpIHsKKyAgICAgICAg
ICAgICAgICBBcmcgYXJnQ29weSA9IGFyZzsKKyAgICAgICAgICAgICAgICBoYW5kbGVBcmcoYXJn
LCByb2xlLCB0eXBlLCB3aWR0aCk7CisgICAgICAgICAgICAgICAgaWYgKCFpbnN0LmlzVmFsaWRG
b3JtKCkpCisgICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZ0NvcHk7CisgICAgICAgICAgICB9
KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGJvb2wgaXNTcGlsbFNsb3QoY29uc3QgQXJnJiBh
cmcpCisgICAgeworICAgICAgICByZXR1cm4gYXJnLmlzU3RhY2soKSAmJiAhYXJnLnN0YWNrU2xv
dCgpLT5pc0xvY2tlZCgpOworICAgIH0KKyAgICAKKyAgICBzdHJ1Y3QgUmVnQ29uc3QgeworICAg
ICAgICBSZWdDb25zdCgpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
UmVnQ29uc3QoUmVnIHJlZywgaW50NjRfdCBjb25zdGFudCkKKyAgICAgICAgICAgIDogcmVnKHJl
ZykKKyAgICAgICAgICAgICwgY29uc3RhbnQoY29uc3RhbnQpCisgICAgICAgIHsKKyAgICAgICAg
fQorCisgICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdAorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gISFyZWc7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgb3V0LnByaW50
KHJlZywgIi0+IiwgY29uc3RhbnQpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBSZWcg
cmVnOworICAgICAgICBpbnQ2NF90IGNvbnN0YW50IHsgMCB9OworICAgIH07CisKKyAgICBzdHJ1
Y3QgUmVnU2xvdCB7CisgICAgICAgIGVudW0gTW9kZSA6IGludDhfdCB7CisgICAgICAgICAgICBB
bGxCaXRzLAorICAgICAgICAgICAgWkV4dDMyLCAvLyBSZWdpc3RlciBjb250YWlucyB6ZXJvLWV4
dGVuZGVkIGNvbnRlbnRzIG9mIHN0YWNrIHNsb3QuCisgICAgICAgICAgICBNYXRjaDMyIC8vIExv
dyAzMiBiaXRzIG9mIHJlZ2lzdGVyIG1hdGNoIGxvdyAzMiBiaXRzIG9mIHN0YWNrIHNsb3QuCisg
ICAgICAgIH07CisgICAgICAgIAorICAgICAgICBSZWdTbG90KCkKKyAgICAgICAgeworICAgICAg
ICB9CisKKyAgICAgICAgUmVnU2xvdChSZWcgcmVnLCBTdGFja1Nsb3QqIHNsb3QsIE1vZGUgbW9k
ZSkKKyAgICAgICAgICAgIDogc2xvdChzbG90KQorICAgICAgICAgICAgLCByZWcocmVnKQorICAg
ICAgICAgICAgLCBtb2RlKG1vZGUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGV4
cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gc2xvdCAmJiByZWc7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgb3V0LnByaW50KHBvaW50ZXJE
dW1wKHNsb3QpLCAiLT4iLCByZWcpOworICAgICAgICAgICAgc3dpdGNoIChtb2RlKSB7CisgICAg
ICAgICAgICBjYXNlIEFsbEJpdHM6CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCIoQWxsQml0
cykiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgWkV4dDMyOgor
ICAgICAgICAgICAgICAgIG91dC5wcmludCgiKFpFeHQzMikiKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgTWF0Y2gzMjoKKyAgICAgICAgICAgICAgICBvdXQucHJp
bnQoIihNYXRjaDMyKSIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBTdGFja1Nsb3QqIHNsb3QgeyBudWxscHRyIH07
CisgICAgICAgIFJlZyByZWc7CisgICAgICAgIE1vZGUgbW9kZSB7IEFsbEJpdHMgfTsKKyAgICB9
OworCisgICAgc3RydWN0IFNsb3RDb25zdCB7CisgICAgICAgIFNsb3RDb25zdCgpCisgICAgICAg
IHsKKyAgICAgICAgfQorCisgICAgICAgIFNsb3RDb25zdChTdGFja1Nsb3QqIHNsb3QsIGludDY0
X3QgY29uc3RhbnQpCisgICAgICAgICAgICA6IHNsb3Qoc2xvdCkKKyAgICAgICAgICAgICwgY29u
c3RhbnQoY29uc3RhbnQpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGV4cGxpY2l0
IG9wZXJhdG9yIGJvb2woKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc2xv
dDsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAorICAgICAgICB7CisgICAgICAgICAgICBvdXQucHJpbnQocG9pbnRlckR1bXAoc2xvdCksICIt
PiIsIGNvbnN0YW50KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgU3RhY2tTbG90KiBz
bG90IHsgbnVsbHB0ciB9OworICAgICAgICBpbnQ2NF90IGNvbnN0YW50IHsgMCB9OworICAgIH07
CisKKyAgICBzdHJ1Y3QgU3RhdGUgeworICAgICAgICB2b2lkIGFkZEFsaWFzKGNvbnN0IFJlZ0Nv
bnN0JiBuZXdBbGlhcykKKyAgICAgICAgeworICAgICAgICAgICAgcmVnQ29uc3QuYXBwZW5kKG5l
d0FsaWFzKTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIGFkZEFsaWFzKGNvbnN0IFJlZ1Nsb3Qm
IG5ld0FsaWFzKQorICAgICAgICB7CisgICAgICAgICAgICByZWdTbG90LmFwcGVuZChuZXdBbGlh
cyk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBhZGRBbGlhcyhjb25zdCBTbG90Q29uc3QmIG5l
d0FsaWFzKQorICAgICAgICB7CisgICAgICAgICAgICBzbG90Q29uc3QuYXBwZW5kKG5ld0FsaWFz
KTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFJlZ0NvbnN0KiBnZXRSZWdDb25zdChSZWcg
cmVnKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGNvbnN0IFJlZ0NvbnN0JiBh
bGlhcyA6IHJlZ0NvbnN0KSB7CisgICAgICAgICAgICAgICAgaWYgKGFsaWFzLnJlZyA9PSByZWcp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAmYWxpYXM7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFJlZ1Ns
b3QqIGdldFJlZ1Nsb3QoUmVnIHJlZykgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgZm9y
IChjb25zdCBSZWdTbG90JiBhbGlhcyA6IHJlZ1Nsb3QpIHsKKyAgICAgICAgICAgICAgICBpZiAo
YWxpYXMucmVnID09IHJlZykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICZhbGlhczsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisKKyAg
ICAgICAgY29uc3QgUmVnU2xvdCogZ2V0UmVnU2xvdChTdGFja1Nsb3QqIHNsb3QpIGNvbnN0Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoY29uc3QgUmVnU2xvdCYgYWxpYXMgOiByZWdTbG90
KSB7CisgICAgICAgICAgICAgICAgaWYgKGFsaWFzLnNsb3QgPT0gc2xvdCkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuICZhbGlhczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgUmVnU2xvdCogZ2V0UmVnU2xv
dChSZWcgcmVnLCBTdGFja1Nsb3QqIHNsb3QpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAg
IGZvciAoY29uc3QgUmVnU2xvdCYgYWxpYXMgOiByZWdTbG90KSB7CisgICAgICAgICAgICAgICAg
aWYgKGFsaWFzLnJlZyA9PSByZWcgJiYgYWxpYXMuc2xvdCA9PSBzbG90KQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gJmFsaWFzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBTbG90Q29uc3QqIGdldFNsb3RD
b25zdChTdGFja1Nsb3QqIHNsb3QpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAo
Y29uc3QgU2xvdENvbnN0JiBhbGlhcyA6IHNsb3RDb25zdCkgeworICAgICAgICAgICAgICAgIGlm
IChhbGlhcy5zbG90ID09IHNsb3QpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAmYWxpYXM7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQor
CisgICAgICAgIE9wdGlvbmFsPGludDY0X3Q+IGNvbnN0YW50Rm9yKGNvbnN0IEFyZyYgYXJnKQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAoYXJnLmlzUmVnKCkpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoY29uc3QgUmVnQ29uc3QqIGFsaWFzID0gZ2V0UmVnQ29uc3QoYXJnLnJlZygpKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGFsaWFzLT5jb25zdGFudDsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gTnVsbG9wdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChhcmcuaXNT
dGFjaygpKSB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnN0IFNsb3RDb25zdCogYWxpYXMgPSBn
ZXRTbG90Q29uc3QoYXJnLnN0YWNrU2xvdCgpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGFsaWFzLT5jb25zdGFudDsKKyAgICAgICAgICAgICAgICByZXR1cm4gTnVsbG9wdDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBOdWxsb3B0OworICAgICAgICB9CisKKyAgICAg
ICAgdm9pZCBjbG9iYmVyKGNvbnN0IEFyZyYgYXJnKQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAoYXJnLmlzUmVnKCkpIHsKKyAgICAgICAgICAgICAgICByZWdDb25zdC5yZW1vdmVBbGxNYXRj
aGluZygKKyAgICAgICAgICAgICAgICAgICAgWyZdIChjb25zdCBSZWdDb25zdCYgYWxpYXMpIC0+
IGJvb2wgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFsaWFzLnJlZyA9PSBhcmcu
cmVnKCk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHJlZ1Nsb3Qu
cmVtb3ZlQWxsTWF0Y2hpbmcoCisgICAgICAgICAgICAgICAgICAgIFsmXSAoY29uc3QgUmVnU2xv
dCYgYWxpYXMpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFsaWFz
LnJlZyA9PSBhcmcucmVnKCk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChhcmcuaXNTdGFjaygp
KSB7CisgICAgICAgICAgICAgICAgc2xvdENvbnN0LnJlbW92ZUFsbE1hdGNoaW5nKAorICAgICAg
ICAgICAgICAgICAgICBbJl0gKGNvbnN0IFNsb3RDb25zdCYgYWxpYXMpIC0+IGJvb2wgeworICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFsaWFzLnNsb3QgPT0gYXJnLnN0YWNrU2xvdCgp
OworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICByZWdTbG90LnJlbW92
ZUFsbE1hdGNoaW5nKAorICAgICAgICAgICAgICAgICAgICBbJl0gKGNvbnN0IFJlZ1Nsb3QmIGFs
aWFzKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhbGlhcy5zbG90
ID09IGFyZy5zdGFja1Nsb3QoKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBib29sIG1lcmdlKGNvbnN0IFN0YXRlJiBvdGhlcikK
KyAgICAgICAgeworICAgICAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gISFyZWdDb25zdC5yZW1vdmVBbGxNYXRjaGluZygK
KyAgICAgICAgICAgICAgICBbJl0gKFJlZ0NvbnN0JiBhbGlhcykgLT4gYm9vbCB7CisgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFJlZ0NvbnN0KiBvdGhlckFsaWFzID0gb3RoZXIuZ2V0UmVnQ29u
c3QoYWxpYXMucmVnKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFvdGhlckFsaWFzKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgIGlm
IChhbGlhcy5jb25zdGFudCAhPSBvdGhlckFsaWFzLT5jb25zdGFudCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gISFzbG90Q29u
c3QucmVtb3ZlQWxsTWF0Y2hpbmcoCisgICAgICAgICAgICAgICAgWyZdIChTbG90Q29uc3QmIGFs
aWFzKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgU2xvdENvbnN0KiBvdGhl
ckFsaWFzID0gb3RoZXIuZ2V0U2xvdENvbnN0KGFsaWFzLnNsb3QpOworICAgICAgICAgICAgICAg
ICAgICBpZiAoIW90aGVyQWxpYXMpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFsaWFzLmNvbnN0YW50ICE9IG90aGVyQWxpYXMt
PmNvbnN0YW50KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAg
ICAgICAgY2hhbmdlZCB8PSAhIXJlZ1Nsb3QucmVtb3ZlQWxsTWF0Y2hpbmcoCisgICAgICAgICAg
ICAgICAgWyZdIChSZWdTbG90JiBhbGlhcykgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFJlZ1Nsb3QqIG90aGVyQWxpYXMgPSBvdGhlci5nZXRSZWdTbG90KGFsaWFzLnJlZywg
YWxpYXMuc2xvdCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghb3RoZXJBbGlhcykKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICBpZiAo
YWxpYXMubW9kZSAhPSBSZWdTbG90OjpNYXRjaDMyICYmIGFsaWFzLm1vZGUgIT0gb3RoZXJBbGlh
cy0+bW9kZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYWxpYXMubW9kZSA9IFJlZ1Nsb3Q6
Ok1hdGNoMzI7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIHJldHVybiBjaGFuZ2VkOworICAgICAgICB9
CisKKyAgICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgICAgIHsK
KyAgICAgICAgICAgIG91dC5wcmludCgKKyAgICAgICAgICAgICAgICAie3JlZ0NvbnN0ID0gWyIs
IGxpc3REdW1wKHJlZ0NvbnN0KSwgIl0sIHNsb3RDb25zdCA9IFsiLCBsaXN0RHVtcChzbG90Q29u
c3QpLAorICAgICAgICAgICAgICAgICJdLCByZWdTbG90ID0gWyIsIGxpc3REdW1wKHJlZ1Nsb3Qp
LCAiXSwgd2FzVmlzaXRlZCA9ICIsIHdhc1Zpc2l0ZWQsICJ9Iik7CisgICAgICAgIH0KKworICAg
ICAgICBWZWN0b3I8UmVnQ29uc3Q+IHJlZ0NvbnN0OworICAgICAgICBWZWN0b3I8U2xvdENvbnN0
PiBzbG90Q29uc3Q7CisgICAgICAgIFZlY3RvcjxSZWdTbG90PiByZWdTbG90OworICAgICAgICBi
b29sIHdhc1Zpc2l0ZWQgeyBmYWxzZSB9OworICAgIH07CisKKyAgICBDb2RlJiBtX2NvZGU7Cisg
ICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgU3RhdGU+IG1fYXRIZWFkOworICAgIFN0YXRlIG1fc3Rh
dGU7CisgICAgQmFzaWNCbG9jayogbV9ibG9jayB7IG51bGxwdHIgfTsKKyAgICB1bnNpZ25lZCBt
X2luc3RJbmRleCB7IDAgfTsKK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lk
IGZpeE9idmlvdXNTcGlsbHMoQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2Nv
cGUoY29kZSwgImZpeE9idmlvdXNTcGlsbHMiKTsKKworICAgIEZpeE9idmlvdXNTcGlsbHMgZml4
T2J2aW91c1NwaWxscyhjb2RlKTsKKyAgICBmaXhPYnZpb3VzU3BpbGxzLnJ1bigpOworfQorCit9
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeE9idmlvdXNTcGls
bHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeE9i
dmlvdXNTcGlsbHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyRml4T2J2aW91c1NwaWxscy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEFp
ckZpeE9idmlvdXNTcGlsbHNfaAorI2RlZmluZSBBaXJGaXhPYnZpb3VzU3BpbGxzX2gKKworI2lm
IEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3Bh
Y2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKworLy8gVGhpcyBpcyBhIGZvcndhcmQgZmxvdyBwaGFz
ZSB0aGF0IHRyYWNrcyBlcXVpdmFsZW5jZSBiZXR3ZWVuIHNwaWxscyBzbG90cyBhbmQgcmVnaXN0
ZXJzLiBJdAorLy8gcmVtb3ZlcyBsb2FkcyBmcm9tIHNwaWxsIHNsb3RzIGluIGNhc2VzIHdoZW4g
dGhlIGNvbnRlbnRzIG9mIHRoZSBzcGlsbCBzbG90IGNhbiBiZSBmb3VuZCBpbiAob3IKKy8vIGNv
bXB1dGVkIGZyb20pIGEgcmVnaXN0ZXIuCit2b2lkIGZpeE9idmlvdXNTcGlsbHMoQ29kZSYpOwor
Cit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQorCisjZW5kaWYgLy8gQWlyRml4T2J2aW91c1NwaWxsc19oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4U3BpbGxTbG90WkRlZi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4U3BpbGxTbG90WkRlZi5oCShyZXZp
c2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeFNwaWxs
U2xvdFpEZWYuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3OCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgQWlyRml4U3BpbGxTbG90
WkRlZl9oCi0jZGVmaW5lIEFpckZpeFNwaWxsU2xvdFpEZWZfaAotCi0jaW5jbHVkZSAiQWlyQ29k
ZS5oIgotI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgotI2luY2x1ZGUgIkFpckluc3RJbmxp
bmVzLmgiCi0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgSXNTcGlsbFNsb3Q+Ci12b2lkIGZpeFNwaWxsU2xvdFpEZWYo
Q29kZSYgY29kZSwgY29uc3QgSXNTcGlsbFNsb3QmIGlzU3BpbGxTbG90KQotewotICAgIC8vIFdl
IGNvdWxkIGhhdmUgaW50cm9kdWNlZCBaRGVmJ3MgdG8gU3RhY2tTbG90cyB0aGF0IGFyZSB3aWRl
ciB0aGFuIHRoZSBkZWYuIEluIHRoYXQgY2FzZSwgd2UKLSAgICAvLyBuZWVkIHRvIGVtaXQgY29k
ZSB0byB6ZXJvLWZpbGwgdGhlIHRvcCBiaXRzIG9mIHRoZSBTdGFja1Nsb3QuCi0gICAgSW5zZXJ0
aW9uU2V0IGluc2VydGlvblNldChjb2RlKTsKLSAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDog
Y29kZSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IDA7IGluc3RJbmRleCA8
IGJsb2NrLT5zaXplKCk7ICsraW5zdEluZGV4KSB7Ci0gICAgICAgICAgICBJbnN0JiBpbnN0ID0g
YmxvY2stPmF0KGluc3RJbmRleCk7Ci0KLSAgICAgICAgICAgIGluc3QuZm9yRWFjaEFyZygKLSAg
ICAgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlLCBB
cmc6OldpZHRoIHdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghQXJnOjppc1pEZWYo
cm9sZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICghYXJnLmlzU3RhY2soKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1NwaWxsU2xvdChhcmcuc3RhY2tTbG90KCkpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICBpZiAo
YXJnLnN0YWNrU2xvdCgpLT5ieXRlU2l6ZSgpID09IEFyZzo6Ynl0ZXMod2lkdGgpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIEN1cnJl
bnRseSB3ZSBvbmx5IGhhbmRsZSB0aGlzIHNpbXBsZSBjYXNlIGJlY2F1c2UgaXQncyB0aGUgb25s
eSBvbmUgdGhhdAotICAgICAgICAgICAgICAgICAgICAvLyBhcmlzZXM6IFpEZWYncyBhcmUgb25s
eSAzMi1iaXQgcmlnaHQgbm93LiBTbywgd2hlbiB3ZSBoaXQgdGhlc2UKLSAgICAgICAgICAgICAg
ICAgICAgLy8gYXNzZXJ0aW9ucyBpdCBtZWFucyB0aGF0IHdlIG5lZWQgdG8gaW1wbGVtZW50IHRo
b3NlIG90aGVyIGtpbmRzIG9mIHplcm8KLSAgICAgICAgICAgICAgICAgICAgLy8gZmlsbHMuCi0g
ICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFyZy5zdGFja1Nsb3QoKS0+Ynl0ZVNp
emUoKSA9PSA4KTsKLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQod2lkdGggPT0g
QXJnOjpXaWR0aDMyKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBXZSByZWx5IG9uIHRoZSBm
YWN0IHRoYXQgdGhlcmUgbXVzdCBiZSBzb21lIHdheSB0byBtb3ZlIHplcm8gdG8gYSBtZW1vcnkK
LSAgICAgICAgICAgICAgICAgICAgLy8gbG9jYXRpb24gd2l0aG91dCBmaXJzdCBidXJuaW5nIGEg
cmVnaXN0ZXIuIE9uIEFSTSwgd2Ugd291bGQgZG8gdGhpcyB1c2luZwotICAgICAgICAgICAgICAg
ICAgICAvLyB6ci4KLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNWYWxpZEZv
cm0oTW92ZTMyLCBBcmc6OkltbSwgQXJnOjpTdGFjaykpOwotICAgICAgICAgICAgICAgICAgICBp
bnNlcnRpb25TZXQuaW5zZXJ0KAotICAgICAgICAgICAgICAgICAgICAgICAgaW5zdEluZGV4ICsg
MSwgTW92ZTMyLCBpbnN0Lm9yaWdpbiwgQXJnOjppbW0oMCksIGFyZy53aXRoT2Zmc2V0KDQpKTsK
LSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgfQotICAgICAgICBpbnNlcnRpb25TZXQuZXhl
Y3V0ZShibG9jayk7Ci0gICAgfQotfQotCi19IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWly
Ci0KLSNlbmRpZiAvLyBBaXJGaXhTcGlsbFNsb3RaRGVmX2gKLQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAJKHJldmlzaW9uIDE5NTE3NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMSwxMCArMzEsMTIgQEAKICNpbmNsdWRlICJBaXJBbGxvY2F0ZVN0YWNrLmgiCiAj
aW5jbHVkZSAiQWlyQ29kZS5oIgogI2luY2x1ZGUgIkFpckVsaW1pbmF0ZURlYWRDb2RlLmgiCisj
aW5jbHVkZSAiQWlyRml4T2J2aW91c1NwaWxscy5oIgogI2luY2x1ZGUgIkFpckZpeFBhcnRpYWxS
ZWdpc3RlclN0YWxscy5oIgogI2luY2x1ZGUgIkFpckdlbmVyYXRpb25Db250ZXh0LmgiCiAjaW5j
bHVkZSAiQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCIKICNpbmNsdWRlICJBaXJJdGVyYXRlZFJlZ2lz
dGVyQ29hbGVzY2luZy5oIgorI2luY2x1ZGUgIkFpckxvZ1JlZ2lzdGVyUHJlc3N1cmUuaCIKICNp
bmNsdWRlICJBaXJMb3dlckFmdGVyUmVnQWxsb2MuaCIKICNpbmNsdWRlICJBaXJMb3dlck1hY3Jv
cy5oIgogI2luY2x1ZGUgIkFpck9wY29kZVV0aWxzLmgiCkBAIC04NCw2ICs4NiwxNiBAQCB2b2lk
IHByZXBhcmVGb3JHZW5lcmF0aW9uKENvZGUmIGNvZGUpCiAgICAgZWxzZQogICAgICAgICBpdGVy
YXRlZFJlZ2lzdGVyQ29hbGVzY2luZyhjb2RlKTsKIAorICAgIGlmIChPcHRpb25zOjpsb2dBaXJS
ZWdpc3RlclByZXNzdXJlKCkpIHsKKyAgICAgICAgZGF0YUxvZygiUmVnaXN0ZXIgcHJlc3N1cmUg
YWZ0ZXIgcmVnaXN0ZXIgYWxsb2NhdGlvbjpcbiIpOworICAgICAgICBsb2dSZWdpc3RlclByZXNz
dXJlKGNvZGUpOworICAgIH0KKworICAgIC8vIFRoaXMgcmVwbGFjZXMgdXNlcyBvZiBzcGlsbCBz
bG90cyB3aXRoIHJlZ2lzdGVycyBvciBjb25zdGFudHMgaWYgcG9zc2libGUuIEl0IGRvZXMgdGhp
cyBieQorICAgIC8vIG1pbmltaXppbmcgdGhlIGFtb3VudCB0aGF0IHdlIHBlcnR1cmIgdGhlIGFs
cmVhZHktY2hvc2VuIHJlZ2lzdGVyIGFsbG9jYXRpb24uIEl0IG1heSBleHRlbmQKKyAgICAvLyB0
aGUgbGl2ZSByYW5nZXMgb2YgcmVnaXN0ZXJzIHRob3VnaC4KKyAgICBmaXhPYnZpb3VzU3BpbGxz
KGNvZGUpOworCiAgICAgbG93ZXJBZnRlclJlZ0FsbG9jKGNvZGUpOwogCiAgICAgLy8gUHJpb3Ig
dG8gdGhpcyBwb2ludCB0aGUgcHJvbG9ndWUgYW5kIGVwaWxvZ3VlIGlzIGltcGxpY2l0LiBUaGlz
IG1ha2VzIGl0IGV4cGxpY2l0LiBJdCBhbHNvCkBAIC0xMzIsNiArMTQ0LDE3IEBAIHZvaWQgZ2Vu
ZXJhdGUoQ29kZSYgY29kZSwgQ0NhbGxIZWxwZXJzJiAKICAgICBpZiAoY29kZS5mcmFtZVNpemUo
KSkKICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtY29kZS5m
cmFtZVNpemUoKSksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKKyAg
ICBhdXRvIGFyZ0ZvciA9IFsmXSAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgZW50cnkpIC0+IEND
YWxsSGVscGVyczo6QWRkcmVzcyB7CisgICAgICAgIHJldHVybiBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGVudHJ5Lm9mZnNldCgpKTsKKyAgICB9Owor
ICAgIAorICAgIGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgZW50cnkgOiBjb2RlLmNhbGxl
ZVNhdmVSZWdpc3RlcnMoKSkgeworICAgICAgICBpZiAoZW50cnkucmVnKCkuaXNHUFIoKSkKKyAg
ICAgICAgICAgIGppdC5zdG9yZVB0cihlbnRyeS5yZWcoKS5ncHIoKSwgYXJnRm9yKGVudHJ5KSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGppdC5zdG9yZURvdWJsZShlbnRyeS5yZWcoKS5m
cHIoKSwgYXJnRm9yKGVudHJ5KSk7CisgICAgfQorCiAgICAgR2VuZXJhdGlvbkNvbnRleHQgY29u
dGV4dDsKICAgICBjb250ZXh0LmNvZGUgPSAmY29kZTsKICAgICBJbmRleE1hcDxCYXNpY0Jsb2Nr
LCBDQ2FsbEhlbHBlcnM6OkxhYmVsPiBibG9ja0xhYmVscyhjb2RlLnNpemUoKSk7CkBAIC0xNjIs
OSArMTg1LDE1IEBAIHZvaWQgZ2VuZXJhdGUoQ29kZSYgY29kZSwgQ0NhbGxIZWxwZXJzJiAKICAg
ICAgICAgaWYgKGlzUmV0dXJuKGJsb2NrLT5sYXN0KCkub3Bjb2RlKSkgewogICAgICAgICAgICAg
Ly8gV2UgY3VycmVudGx5IGRvbid0IHJlcHJlc2VudCB0aGUgZnVsbCBwcm9sb2d1ZS9lcGlsb2d1
ZSBpbiBBaXIsIHNvIHdlIG5lZWQgdG8KICAgICAgICAgICAgIC8vIGhhdmUgdGhpcyBvdmVycmlk
ZS4KLSAgICAgICAgICAgIGlmIChjb2RlLmZyYW1lU2l6ZSgpKQorICAgICAgICAgICAgaWYgKGNv
ZGUuZnJhbWVTaXplKCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRP
ZmZzZXQmIGVudHJ5IDogY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGVudHJ5LnJlZygpLmlzR1BSKCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICBqaXQubG9hZFB0cihhcmdGb3IoZW50cnkpLCBlbnRyeS5yZWcoKS5ncHIoKSk7CisgICAgICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkRG91Ymxl
KGFyZ0ZvcihlbnRyeSksIGVudHJ5LnJlZygpLmZwcigpKTsKKyAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7Ci0gICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9u
RXBpbG9ndWVXaXRoRW1wdHlGcmFtZSgpOwogICAgICAgICAgICAgaml0LnJldCgpOwogICAgICAg
ICAgICAgY29udGludWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckhh
bmRsZUNhbGxlZVNhdmVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmNwcAkocmV2aXNpb24gMTk1MTc2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDcgKzI5LDYgQEAKICNpZiBFTkFCTEUoQjNfSklUKQogCiAjaW5jbHVk
ZSAiQWlyQ29kZS5oIgotI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgogI2luY2x1ZGUgIkFp
ckluc3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgogCkBAIC03MSwzNCAr
NzAsNiBAQCB2b2lkIGhhbmRsZUNhbGxlZVNhdmVzKENvZGUmIGNvZGUpCiAgICAgLy8gVGhpcyBp
cyBhIGJpdCB3ZWlyZCBzaW5jZSB3ZSBjb3VsZCBoYXZlIGFscmVhZHkgcGlubmVkIGEgZGlmZmVy
ZW50IHN0YWNrIHNsb3QgdG8gdGhpcwogICAgIC8vIGFyZWEuIEFsc28sIG91ciBydW50aW1lIGRv
ZXMgbm90IHJlcXVpcmUgdXMgdG8gcGluIHRoZSBzYXZlcyBhcmVhLiBNYXliZSB3ZSBzaG91bGRu
J3QgcGluIGl0PwogICAgIHNhdmVzQXJlYS0+c2V0T2Zmc2V0RnJvbUZQKC1ieXRlU2l6ZSk7Ci0K
LSAgICBhdXRvIGFyZ0ZvciA9IFsmXSAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgZW50cnkpIC0+
IEFyZyB7Ci0gICAgICAgIHJldHVybiBBcmc6OnN0YWNrKHNhdmVzQXJlYSwgZW50cnkub2Zmc2V0
KCkgKyBieXRlU2l6ZSk7Ci0gICAgfTsKLQotICAgIEluc2VydGlvblNldCBpbnNlcnRpb25TZXQo
Y29kZSk7Ci0gICAgCi0gICAgLy8gRmlyc3QgaW5zZXJ0IHNhdmluZyBjb2RlIGluIHRoZSBwcm9s
b2d1ZS4KLSAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5IDogY29kZS5jYWxs
ZWVTYXZlUmVnaXN0ZXJzKCkpIHsKLSAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgKLSAgICAg
ICAgICAgIDAsIGVudHJ5LnJlZygpLmlzR1BSKCkgPyBNb3ZlIDogTW92ZURvdWJsZSwgY29kZVsw
XS0+YXQoMCkub3JpZ2luLAotICAgICAgICAgICAgVG1wKGVudHJ5LnJlZygpKSwgYXJnRm9yKGVu
dHJ5KSk7Ci0gICAgfQotICAgIGluc2VydGlvblNldC5leGVjdXRlKGNvZGVbMF0pOwotCi0gICAg
Ly8gTm93IGluc2VydCByZXN0b3JlIGNvZGUgYXQgZXBpbG9ndWVzLgotICAgIGZvciAoQmFzaWNC
bG9jayogYmxvY2sgOiBjb2RlKSB7Ci0gICAgICAgIEluc3QmIGxhc3QgPSBibG9jay0+bGFzdCgp
OwotICAgICAgICBpZiAoIWlzUmV0dXJuKGxhc3Qub3Bjb2RlKSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgIGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgZW50cnkgOiBjb2Rl
LmNhbGxlZVNhdmVSZWdpc3RlcnMoKSkgewotICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2Vy
dCgKLSAgICAgICAgICAgICAgICBibG9jay0+c2l6ZSgpIC0gMSwgZW50cnkucmVnKCkuaXNHUFIo
KSA/IE1vdmUgOiBNb3ZlRG91YmxlLCBsYXN0Lm9yaWdpbiwKLSAgICAgICAgICAgICAgICBhcmdG
b3IoZW50cnkpLCBUbXAoZW50cnkucmVnKCkpKTsKLSAgICAgICAgfQotICAgICAgICBpbnNlcnRp
b25TZXQuZXhlY3V0ZShibG9jayk7Ci0gICAgfQogfQogCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMzo6QWlyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAkocmV2
aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE2Miw2ICsxNjIsNyBAQCBwdWJsaWM6CiAgICAgLy8KICAgICAv
LyBUaGlzIGZ1bmN0aW9uIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IG9wY29kZV9nZW5lcmF0b3IucmIu
CiAgICAgYm9vbCBhZG1pdHNTdGFjayh1bnNpZ25lZCBhcmdJbmRleCk7CisgICAgYm9vbCBhZG1p
dHNTdGFjayhBcmcmKTsKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGluc3RydWN0aW9u
IGNhbiBoYXZlIGFueSBlZmZlY3RzIG90aGVyIHRoYW4gY29udHJvbCBmbG93IG9yIGFyZ3VtZW50
cy4KICAgICBib29sIGhhc05vbkFyZ05vbkNvbnRyb2xFZmZlY3RzKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCShyZXZpc2lvbiAxOTUx
NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE1OCw2ICsxNTgsMTEgQEAgaW5saW5lIHZvaWQgSW5zdDo6cmVwb3J0
VXNlZFJlZ2lzdGVycyhjbwogICAgIGFyZ3NbMF0uc3BlY2lhbCgpLT5yZXBvcnRVc2VkUmVnaXN0
ZXJzKCp0aGlzLCB1c2VkUmVnaXN0ZXJzKTsKIH0KIAoraW5saW5lIGJvb2wgSW5zdDo6YWRtaXRz
U3RhY2soQXJnJiBhcmcpCit7CisgICAgcmV0dXJuIGFkbWl0c1N0YWNrKCZhcmcgLSAmYXJnc1sw
XSk7Cit9CisKIGlubGluZSBib29sIGlzU2hpZnRWYWxpZChjb25zdCBJbnN0JiBpbnN0KQogewog
I2lmIENQVShYODYpIHx8IENQVShYODZfNjQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5n
LmNwcAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcg
KzI5LDYgQEAKICNpZiBFTkFCTEUoQjNfSklUKQogCiAjaW5jbHVkZSAiQWlyQ29kZS5oIgotI2lu
Y2x1ZGUgIkFpckZpeFNwaWxsU2xvdFpEZWYuaCIKICNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQu
aCIKICNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgi
CkBAIC0xMTI0LDExICsxMTIzLDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgLy8gY29t
cGxldGUgcmVnaXN0ZXIgYWxsb2NhdGlvbi4gU28sIHdlIHJlY29yZCB0aGlzIGJlZm9yZSBzdGFy
dGluZy4KICAgICAgICAgICAgICAgICBib29sIG1heUJlQ29hbGVzY2FibGUgPSBhbGxvY2F0b3Iu
bWF5QmVDb2FsZXNjYWJsZShpbnN0KTsKIAotICAgICAgICAgICAgICAgIC8vIE9uIFg4Nl82NCwg
TW92ZTMyIGlzIGNoZWFwZXIgaWYgd2Uga25vdyB0aGF0IGl0J3MgZXF1aXZhbGVudCB0byBhIE1v
dmUuIEl0J3MKKyAgICAgICAgICAgICAgICAvLyBNb3ZlMzIgaXMgY2hlYXBlciBpZiB3ZSBrbm93
IHRoYXQgaXQncyBlcXVpdmFsZW50IHRvIGEgTW92ZS4gSXQncwogICAgICAgICAgICAgICAgIC8v
IGVxdWl2YWxlbnQgaWYgdGhlIGRlc3RpbmF0aW9uJ3MgaGlnaCBiaXRzIGFyZSBub3Qgb2JzZXJ2
YWJsZSBvciBpZiB0aGUgc291cmNlJ3MgaGlnaAogICAgICAgICAgICAgICAgIC8vIGJpdHMgYXJl
IGFsbCB6ZXJvLiBOb3RlIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0aGUgb3Bwb3NpdGUgb3B0aW1pemF0
aW9uIGZvciBvdGhlcgogICAgICAgICAgICAgICAgIC8vIGFyY2hpdGVjdHVyZXMsIHdoaWNoIG1h
eSBwcmVmZXIgTW92ZSBvdmVyIE1vdmUzMiwgYmVjYXVzZSBNb3ZlIGlzIGNhbm9uaWNhbCBhbHJl
YWR5LgotICAgICAgICAgICAgICAgIGlmICh0eXBlID09IEFyZzo6R1AgJiYgb3B0aW1pemVGb3JY
ODZfNjQoKSAmJiBpbnN0Lm9wY29kZSA9PSBNb3ZlCisgICAgICAgICAgICAgICAgaWYgKHR5cGUg
PT0gQXJnOjpHUCAmJiBpbnN0Lm9wY29kZSA9PSBNb3ZlCiAgICAgICAgICAgICAgICAgICAgICYm
IGluc3QuYXJnc1swXS5pc1RtcCgpICYmIGluc3QuYXJnc1sxXS5pc1RtcCgpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChtX3RtcFdpZHRoLnVzZVdpZHRoKGluc3QuYXJnc1sxXS50bXAoKSkg
PD0gQXJnOjpXaWR0aDMyCiAgICAgICAgICAgICAgICAgICAgICAgICB8fCBtX3RtcFdpZHRoLmRl
ZldpZHRoKGluc3QuYXJnc1swXS50bXAoKSkgPD0gQXJnOjpXaWR0aDMyKQpAQCAtMTE2OCw3ICsx
MTY3LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFkZFNwaWxsQW5kRmlsbChjb25zdCBDb2xvcmlu
Z0FsbG9jYXRvcjx0eXBlPiYgYWxsb2NhdG9yLCBIYXNoU2V0PHVuc2lnbmVkPiYgdW5zcGlsbGFi
bGVUbXBzKQogICAgIHsKICAgICAgICAgSGFzaE1hcDxUbXAsIFN0YWNrU2xvdCo+IHN0YWNrU2xv
dHM7Ci0gICAgICAgIHVuc2lnbmVkIG5ld1N0YWNrU2xvdFRocmVzaG9sZCA9IG1fY29kZS5zdGFj
a1Nsb3RzKCkuc2l6ZSgpOwogICAgICAgICBmb3IgKFRtcCB0bXAgOiBhbGxvY2F0b3Iuc3BpbGxl
ZFRtcHMoKSkgewogICAgICAgICAgICAgLy8gQWxsIHRoZSBzcGlsbGVkIHZhbHVlcyBiZWNvbWUg
dW5zcGlsbGFibGUuCiAgICAgICAgICAgICB1bnNwaWxsYWJsZVRtcHMuYWRkKEFic29sdXRlVG1w
TWFwcGVyPHR5cGU+OjphYnNvbHV0ZUluZGV4KHRtcCkpOwpAQCAtMTIwMiwxNiArMTIwMCwxOSBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIC8vIFRyeSB0
byByZXBsYWNlIHRoZSByZWdpc3RlciB1c2UgYnkgbWVtb3J5IHVzZSB3aGVuIHBvc3NpYmxlLgot
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgQXJnJiBhcmcgPSBpbnN0LmFyZ3NbaV07Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChhcmcuaXNUbXAoKSAmJiBhcmcudHlwZSgpID09IHR5cGUg
JiYgIWFyZy5pc1JlZygpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHN0YWNrU2xv
dEVudHJ5ID0gc3RhY2tTbG90cy5maW5kKGFyZy50bXAoKSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoc3RhY2tTbG90RW50cnkgIT0gc3RhY2tTbG90cy5lbmQoKSAmJiBpbnN0LmFkbWl0
c1N0YWNrKGkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gQXJnOjpzdGFj
ayhzdGFja1Nsb3RFbnRyeS0+dmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRp
ZFNwaWxsID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpbnN0LmZvckVhY2hBcmcoCisgICAgICAg
ICAgICAgICAgICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSwgQXJnOjpUeXBlIGFyZ1R5cGUs
IEFyZzo6V2lkdGggd2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmcuaXNU
bXAoKSAmJiBhcmdUeXBlID09IHR5cGUgJiYgIWFyZy5pc1JlZygpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYXV0byBzdGFja1Nsb3RFbnRyeSA9IHN0YWNrU2xvdHMuZmluZChhcmcu
dG1wKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFja1Nsb3RFbnRyeSAh
PSBzdGFja1Nsb3RzLmVuZCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGlu
c3QuYWRtaXRzU3RhY2soYXJnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGFja1Nsb3RFbnRyeS0+dmFsdWUtPmVuc3VyZVNpemUoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3JjZU1vdmUzMklmRGlkU3BpbGwgPyA0IDogQXJnOjpieXRlcyh3aWR0
aCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBBcmc6OnN0YWNrKHN0
YWNrU2xvdEVudHJ5LT52YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRp
ZFNwaWxsID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIH0pOwogCiAgICAgICAgICAgICAgICAgaWYgKGRpZFNwaWxs
ICYmIGZvcmNlTW92ZTMySWZEaWRTcGlsbCkKICAgICAgICAgICAgICAgICAgICAgaW5zdC5vcGNv
ZGUgPSBNb3ZlMzI7CkBAIC0xMjYyLDEyICsxMjYzLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICB9KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotCi0gICAgICAgIGZpeFNwaWxsU2xv
dFpEZWYoCi0gICAgICAgICAgICBtX2NvZGUsCi0gICAgICAgICAgICBbJl0gKFN0YWNrU2xvdCog
c3RhY2tTbG90KSAtPiBib29sIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RhY2tTbG90LT5p
bmRleCgpID49IG5ld1N0YWNrU2xvdFRocmVzaG9sZDsKLSAgICAgICAgICAgIH0pOwogICAgIH0K
IAogICAgIENvZGUmIG1fY29kZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyTGl2ZW5lc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckxpdmVuZXNzLmgJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAog
I2lmIEVOQUJMRShCM19KSVQpCiAKICNpbmNsdWRlICJBaXJCYXNpY0Jsb2NrLmgiCisjaW5jbHVk
ZSAiQWlyQ29kZS5oIgogI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQWly
VG1wSW5saW5lcy5oIgogI2luY2x1ZGUgIkIzSW5kZXhNYXAuaCIKQEAgLTkzLDkgKzk0LDExIEBA
IHN0cnVjdCBSZWdMaXZlbmVzc0FkYXB0ZXIgewogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgQWRh
cHRlcj4KLWNsYXNzIEFic3RyYWN0TGl2ZW5lc3MgOiBwcml2YXRlIEFkYXB0ZXIgeworY2xhc3Mg
QWJzdHJhY3RMaXZlbmVzcyA6IHB1YmxpYyBBZGFwdGVyIHsKICAgICBzdHJ1Y3QgV29ya3NldDsK
IHB1YmxpYzoKKyAgICB0eXBlZGVmIHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nIFRoaW5nOworICAg
IAogICAgIEFic3RyYWN0TGl2ZW5lc3MoQ29kZSYgY29kZSkKICAgICAgICAgOiBBZGFwdGVyKGNv
ZGUpCiAgICAgICAgICwgbV93b3Jrc2V0KEFkYXB0ZXI6Om1heEluZGV4KGNvZGUpKQpAQCAtMjIy
LDYgKzIyNSwxMSBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgIEl0ZXJhdG9yIGJlZ2luKCkgY29u
c3QgeyByZXR1cm4gSXRlcmF0b3IobV9saXZlbmVzcywgbV9saXZlbmVzcy5tX3dvcmtzZXQuYmVn
aW4oKSk7IH0KICAgICAgICAgICAgIEl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIEl0ZXJh
dG9yKG1fbGl2ZW5lc3MsIG1fbGl2ZW5lc3MubV93b3Jrc2V0LmVuZCgpKTsgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICBib29sIGNvbnRhaW5zKGNvbnN0IHR5cGVuYW1lIEFkYXB0ZXI6OlRo
aW5nJiB0aGluZykgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
bV9saXZlbmVzcy5tX3dvcmtzZXQuY29udGFpbnMoQWRhcHRlcjo6dmFsdWVUb0luZGV4KHRoaW5n
KSk7CisgICAgICAgICAgICB9CiAKICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgIEFic3Ry
YWN0TGl2ZW5lc3MmIG1fbGl2ZW5lc3M7CkBAIC0yMzIsNiArMjQwLDExIEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIHJldHVybiBJdGVyYWJsZShtX2xpdmVuZXNzKTsKICAgICAgICAgfQogCisgICAg
ICAgIGJvb2wgaXNMaXZlKGNvbnN0IHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nJiB0aGluZykgY29u
c3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGxpdmUoKS5jb250YWlucyh0aGluZyk7
CisgICAgICAgIH0KKwogICAgICAgICB2b2lkIGV4ZWN1dGUodW5zaWduZWQgaW5zdEluZGV4KQog
ICAgICAgICB7CiAgICAgICAgICAgICBJbnN0JiBpbnN0ID0gbV9ibG9jay0+YXQoaW5zdEluZGV4
KTsKQEAgLTI3Nyw2ICsyOTAsMTEgQEAgcHVibGljOgogICAgICAgICBCYXNpY0Jsb2NrKiBtX2Js
b2NrOwogICAgIH07CiAKKyAgICBjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiByYXdMaXZlQXRIZWFk
KEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbGl2ZUF0SGVhZFti
bG9ja107CisgICAgfQorCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVW5kZXJseWluZ0l0ZXJhYmxl
PgogICAgIGNsYXNzIEl0ZXJhYmxlIHsKICAgICBwdWJsaWM6CkBAIC0zMzAsNiArMzQ4LDExIEBA
IHB1YmxpYzoKICAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRv
cihtX2xpdmVuZXNzLCBtX2l0ZXJhYmxlLmJlZ2luKCkpOyB9CiAgICAgICAgIGl0ZXJhdG9yIGVu
ZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKG1fbGl2ZW5lc3MsIG1faXRlcmFibGUuZW5kKCkp
OyB9CiAKKyAgICAgICAgYm9vbCBjb250YWlucyhjb25zdCB0eXBlbmFtZSBBZGFwdGVyOjpUaGlu
ZyYgdGhpbmcpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2xpdmVuZXNz
Lm1fd29ya3NldC5jb250YWlucyhBZGFwdGVyOjp2YWx1ZVRvSW5kZXgodGhpbmcpKTsKKyAgICAg
ICAgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgQWJzdHJhY3RMaXZlbmVzcyYgbV9saXZlbmVz
czsKICAgICAgICAgY29uc3QgVW5kZXJseWluZ0l0ZXJhYmxlJiBtX2l0ZXJhYmxlOwpAQCAtMzQ1
LDYgKzM2OCw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEl0ZXJhYmxlPHR5cGVuYW1lIEFk
YXB0ZXI6OkluZGV4U2V0PigqdGhpcywgbV9saXZlQXRUYWlsW2Jsb2NrXSk7CiAgICAgfQogCisg
ICAgSW5kZXhTcGFyc2VTZXQ8VW5zYWZlVmVjdG9yT3ZlcmZsb3c+JiB3b3Jrc2V0KCkgeyByZXR1
cm4gbV93b3Jrc2V0OyB9CisKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExvY2FsQ2FsYzsK
ICAgICBmcmllbmQgc3RydWN0IExvY2FsQ2FsYzo6SXRlcmFibGU7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckxvZ1JlZ2lzdGVyUHJlc3N1cmUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxvZ1Jl
Z2lzdGVyUHJlc3N1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkFpckxvZ1JlZ2lzdGVyUHJlc3N1cmUuaCIKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlySW5zdElubGluZXMu
aCIKKyNpbmNsdWRlICJBaXJMaXZlbmVzcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgbG9nUmVnaXN0ZXJQcmVzc3VyZShDb2RlJiBj
b2RlKQoreworICAgIGNvbnN0IHVuc2lnbmVkIHRvdGFsQ29sdW1ucyA9IDIwMDsKKyAgICBjb25z
dCB1bnNpZ25lZCByZWdpc3RlckNvbHVtbnMgPSAxMDA7CisgICAgCisgICAgUmVnTGl2ZW5lc3Mg
bGl2ZW5lc3MoY29kZSk7CisKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgewor
ICAgICAgICBSZWdMaXZlbmVzczo6TG9jYWxDYWxjIGxvY2FsQ2FsYyhsaXZlbmVzcywgYmxvY2sp
OworCisgICAgICAgIGJsb2NrLT5kdW1wSGVhZGVyKFdURjo6ZGF0YUZpbGUoKSk7CisKKyAgICAg
ICAgVmVjdG9yPENTdHJpbmc+IGluc3REdW1wczsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0
SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTspIHsKKyAgICAgICAgICAgIEluc3Qm
IGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKKyAgICAgICAgICAgIEluc3QqIHByZXZJbnN0
ID0gYmxvY2stPmdldChpbnN0SW5kZXggLSAxKTsKKworICAgICAgICAgICAgbG9jYWxDYWxjLmV4
ZWN1dGUoaW5zdEluZGV4KTsKKworICAgICAgICAgICAgUmVnaXN0ZXJTZXQgc2V0OworICAgICAg
ICAgICAgc2V0LnNldEFsbChsb2NhbENhbGMubGl2ZSgpKTsKKyAgICAgICAgICAgIEluc3Q6OmZv
ckVhY2hEZWZXaXRoRXh0cmFDbG9iYmVyZWRSZWdzPFJlZz4oCisgICAgICAgICAgICAgICAgcHJl
dkluc3QsICZpbnN0LAorICAgICAgICAgICAgICAgIFsmXSAoUmVnIHJlZywgQXJnOjpSb2xlLCBB
cmc6OlR5cGUsIEFyZzo6V2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgc2V0LnNldChyZWcp
OworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBTdHJpbmdQcmludFN0cmVhbSBp
bnN0T3V0OworICAgICAgICAgICAgU3RyaW5nUHJpbnRTdHJlYW0gbGluZU91dDsKKyAgICAgICAg
ICAgIGxpbmVPdXQucHJpbnQoIiAgICIpOworICAgICAgICAgICAgaWYgKHNldC5udW1iZXJPZlNl
dFJlZ2lzdGVycygpKSB7CisgICAgICAgICAgICAgICAgc2V0LmZvckVhY2goCisgICAgICAgICAg
ICAgICAgICAgIFsmXSAoUmVnIHJlZykgeworICAgICAgICAgICAgICAgICAgICAgICAgQ1N0cmlu
ZyB0ZXh0ID0gdG9DU3RyaW5nKCIgIiwgcmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh0ZXh0Lmxlbmd0aCgpICsgbGluZU91dC5sZW5ndGgoKSA+IHRvdGFsQ29sdW1ucykgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RPdXQucHJpbnQobGluZU91dC50b0NTdHJpbmco
KSwgIlxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZU91dC5yZXNldCgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVPdXQucHJpbnQoIiAgICAgICAiKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVPdXQu
cHJpbnQodGV4dCk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIGxp
bmVPdXQucHJpbnQoIjoiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChsaW5lT3V0
Lmxlbmd0aCgpID4gcmVnaXN0ZXJDb2x1bW5zKSB7CisgICAgICAgICAgICAgICAgaW5zdE91dC5w
cmludChsaW5lT3V0LnRvQ1N0cmluZygpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBsaW5lT3V0
LnJlc2V0KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aGlsZSAobGluZU91dC5sZW5n
dGgoKSA8IHJlZ2lzdGVyQ29sdW1ucykKKyAgICAgICAgICAgICAgICBsaW5lT3V0LnByaW50KCIg
Iik7CisgICAgICAgICAgICBsaW5lT3V0LnByaW50KCIgIik7CisgICAgICAgICAgICBsaW5lT3V0
LnByaW50KGluc3QpOworICAgICAgICAgICAgaW5zdE91dC5wcmludChsaW5lT3V0LnRvQ1N0cmlu
ZygpLCAiXG4iKTsKKyAgICAgICAgICAgIGluc3REdW1wcy5hcHBlbmQoaW5zdE91dC50b0NTdHJp
bmcoKSk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBpbnN0RHVtcHMu
c2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgZGF0YUxvZyhpbnN0RHVtcHNbaV0pOworICAgICAg
ICAKKyAgICAgICAgYmxvY2stPmR1bXBGb290ZXIoV1RGOjpkYXRhRmlsZSgpKTsKKyAgICB9Cit9
CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG9nUmVnaXN0
ZXJQcmVzc3VyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJMb2dSZWdpc3RlclByZXNzdXJlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgQWlyTG9nUmVnaXN0ZXJQcmVzc3VyZV9oCisjZGVmaW5lIEFpckxvZ1JlZ2lz
dGVyUHJlc3N1cmVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCisvLyBEdW1wcyB0
aGUgcmVnaXN0ZXJzIHRoYXQgYXJlIHVzZWQgYXQgZWFjaCBpbnN0cnVjdGlvbi4KK3ZvaWQgbG9n
UmVnaXN0ZXJQcmVzc3VyZShDb2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpB
aXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJMb2dSZWdpc3Rl
clByZXNzdXJlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcHRp
bWl6ZUJsb2NrT3JkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyT3B0aW1pemVCbG9ja09yZGVyLmNwcAkocmV2aXNpb24gMTk1MTc2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcHRpbWl6ZUJsb2NrT3JkZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTczLDEwICs3Myw4IEBAIHByaXZhdGU6CiAKIH0gLy8gYW5vbnltb3VzIG5hbWVz
cGFjZQogCi12b2lkIG9wdGltaXplQmxvY2tPcmRlcihDb2RlJiBjb2RlKQorVmVjdG9yPEJhc2lj
QmxvY2sqPiBibG9ja3NJbk9wdGltaXplZE9yZGVyKENvZGUmIGNvZGUpCiB7Ci0gICAgUGhhc2VT
Y29wZSBwaGFzZVNjb3BlKGNvZGUsICJvcHRpbWl6ZUJsb2NrT3JkZXIiKTsKLQogICAgIFZlY3Rv
cjxCYXNpY0Jsb2NrKj4gYmxvY2tzSW5PcmRlcjsKIAogICAgIEJsb2NrV29ya2xpc3QgZmFzdFdv
cmtsaXN0OwpAQCAtMTEzLDYgKzExMSwxNSBAQCB2b2lkIG9wdGltaXplQmxvY2tPcmRlcihDb2Rl
JiBjb2RlKQogICAgIEFTU0VSVChmYXN0V29ya2xpc3QuaXNFbXB0eSgpKTsKICAgICBBU1NFUlQo
c2xvd1dvcmtsaXN0LmlzRW1wdHkoKSk7CiAKKyAgICByZXR1cm4gYmxvY2tzSW5PcmRlcjsKK30K
Kwordm9pZCBvcHRpbWl6ZUJsb2NrT3JkZXIoQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3Bl
IHBoYXNlU2NvcGUoY29kZSwgIm9wdGltaXplQmxvY2tPcmRlciIpOworCisgICAgVmVjdG9yPEJh
c2ljQmxvY2sqPiBibG9ja3NJbk9yZGVyID0gYmxvY2tzSW5PcHRpbWl6ZWRPcmRlcihjb2RlKTsK
KyAgICAKICAgICAvLyBQbGFjZSBibG9ja3MgaW50byBDb2RlJ3MgYmxvY2sgbGlzdCBhY2NvcmRp
bmcgdG8gdGhlIG9yZGVyaW5nIGluIGJsb2Nrc0luT3JkZXIuIFdlIGRvIHRoaXMgYnkgbGVha2lu
ZwogICAgIC8vIGFsbCBvZiB0aGUgYmxvY2tzIGFuZCB0aGVuIHJlYWRvcHRpbmcgdGhlbS4KICAg
ICBmb3IgKGF1dG8mIGVudHJ5IDogY29kZS5ibG9ja0xpc3QoKSkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyT3B0aW1pemVCbG9ja09yZGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcHRpbWl6ZUJsb2NrT3JkZXIuaAkocmV2
aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcHRpbWl6
ZUJsb2NrT3JkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCwxMCArMjgsMTggQEAKIAogI2lmIEVOQUJM
RShCM19KSVQpCiAKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKIAorY2xhc3MgQmFzaWNCbG9jazsKIGNsYXNz
IENvZGU7CiAKKy8vIFJldHVybnMgYSBsaXN0IG9mIGJsb2NrcyBzb3J0ZWQgYWNjb3JkaW5nIHRv
IHdoYXQgd291bGQgYmUgdGhlIGN1cnJlbnQgb3B0aW1hbCBvcmRlci4gVGhpcyBzaGFyZXMKKy8v
IHNvbWUgcHJvcGVydGllcyB3aXRoIGEgcHJlLW9yZGVyIHRyYXZlcnNhbC4gSW4gcGFydGljdWxh
ciwgZWFjaCBibG9jayB3aWxsIGFwcGVhciBhZnRlciBhdCBsZWFzdAorLy8gb25lIG9mIGl0cyBw
cmVkZWNlc3NvcnMuCitWZWN0b3I8QmFzaWNCbG9jayo+IGJsb2Nrc0luT3B0aW1pemVkT3JkZXIo
Q29kZSYpOworCiAvLyBSZW9yZGVycyB0aGUgYmFzaWMgYmxvY2tzIHRvIGtlZXAgaG90IGJsb2Nr
cyBhdCB0aGUgdG9wLCBhbmQgbWF4aW1pemUgdGhlIGxpa2VsaWhvb2QgdGhhdCBhIGZyZXF1ZW50
bHkKIC8vIHRha2VuIGVkZ2UgaXMganVzdCBhIGZhbGwtdGhyb3VnaC4KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZXBvcnRVc2VkUmVnaXN0ZXJzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlcG9ydFVzZWRSZWdpc3Rl
cnMuY3BwCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpclJlcG9ydFVzZWRSZWdpc3RlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niwz
MiBAQCB2b2lkIHJlcG9ydFVzZWRSZWdpc3RlcnMoQ29kZSYgY29kZSkKIAogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykgewogICAg
ICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOworCisgICAgICAgICAg
ICAvLyBLaWxsIGRlYWQgYXNzaWdubWVudHMgdG8gcmVnaXN0ZXJzLiBGb3Igc2ltcGxpY2l0eSB3
ZSBzYXkgdGhhdCBhIHN0b3JlIGlzIGtpbGxhYmxlIGlmCisgICAgICAgICAgICAvLyBpdCBoYXMg
b25seSBsYXRlIGRlZnMgYW5kIHRob3NlIGxhdGUgZGVmcyBhcmUgdG8gcmVnaXN0ZXJzIHRoYXQg
YXJlIGRlYWQgcmlnaHQgbm93LgorICAgICAgICAgICAgaWYgKCFpbnN0Lmhhc05vbkFyZ0VmZmVj
dHMoKSkgeworICAgICAgICAgICAgICAgIGJvb2wgY2FuRGVsZXRlID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICBpbnN0LmZvckVhY2hBcmcoCisgICAgICAgICAgICAgICAgICAgIFsmXSAoQXJnJiBh
cmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUsIEFyZzo6V2lkdGgpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChBcmc6OmlzRWFybHlEZWYocm9sZSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjYW5EZWxldGUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIUFyZzo6aXNMYXRlRGVmKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlzUmVnKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5EZWxldGUgPSBmYWxzZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9jYWxDYWxjLmlzTGl2ZShhcmcucmVnKCkp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuRGVsZXRlID0gZmFsc2U7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBpZiAoY2FuRGVsZXRl
KQorICAgICAgICAgICAgICAgICAgICBpbnN0ID0gSW5zdCgpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCiAgICAgICAgICAgICBpZiAoaW5zdC5vcGNvZGUgPT0gUGF0Y2gpIHsKICAgICAg
ICAgICAgICAgICBSZWdpc3RlclNldCByZWdpc3RlclNldDsKICAgICAgICAgICAgICAgICBmb3Ig
KFJlZyByZWcgOiBsb2NhbENhbGMubGl2ZSgpKQpAQCAtNTQsNiArODAsMTEgQEAgdm9pZCByZXBv
cnRVc2VkUmVnaXN0ZXJzKENvZGUmIGNvZGUpCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBs
b2NhbENhbGMuZXhlY3V0ZShpbnN0SW5kZXgpOwogICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBibG9jay0+aW5zdHMoKS5yZW1vdmVBbGxNYXRjaGluZygKKyAgICAgICAgICAgIFsmXSAoY29u
c3QgSW5zdCYgaW5zdCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgcmV0dXJuICFpbnN0Owor
ICAgICAgICAgICAgfSk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpclJlcG9ydFVzZWRSZWdpc3RlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlcG9ydFVzZWRSZWdpc3RlcnMuaAkocmV2aXNpb24gMTk1
MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZXBvcnRVc2VkUmVnaXN0
ZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsNyArMzIsOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsgbmFtZXNwYWNlCiAKIGNsYXNzIENvZGU7CiAKLS8vIFBlcmZvcm1zIGEgbGl2ZW5l
c3MgYW5hbHlzaXMgb3ZlciByZWdpc3RlcnMgYW5kIHJlcG9ydHMgdGhlIGxpdmUgcmVnaXN0ZXJz
IHRvIGV2ZXJ5IFNwZWNpYWwuCisvLyBQZXJmb3JtcyBhIGxpdmVuZXNzIGFuYWx5c2lzIG92ZXIg
cmVnaXN0ZXJzIGFuZCByZXBvcnRzIHRoZSBsaXZlIHJlZ2lzdGVycyB0byBldmVyeSBTcGVjaWFs
LiBUYWtlcworLy8gdGhlIG9wcG9ydHVuaXR5IHRvIGtpbGwgZGVhZCBhc3NpZ25tZW50cyB0byBy
ZWdpc3RlcnMsIHNpbmNlIGl0IGhhcyBhY2Nlc3MgdG8gcmVnaXN0ZXIgbGl2ZW5lc3MuCiAKIHZv
aWQgcmVwb3J0VXNlZFJlZ2lzdGVycyhDb2RlJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAJKHJldmlzaW9uIDE5
NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5n
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAogI2lmIEVOQUJMRShCM19KSVQp
CiAKICNpbmNsdWRlICJBaXJDb2RlLmgiCi0jaW5jbHVkZSAiQWlyRml4U3BpbGxTbG90WkRlZi5o
IgogI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgogI2luY2x1ZGUgIkFpckluc3RJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQWlyTGl2ZW5lc3MuaCIKQEAgLTg0LDcgKzgzLDYgQEAgdm9pZCBzcGls
bEV2ZXJ5dGhpbmcoQ29kZSYgY29kZSkKIAogICAgIC8vIEFsbG9jYXRlIGEgc3RhY2sgc2xvdCBm
b3IgZWFjaCB0bXAuCiAgICAgVmVjdG9yPFN0YWNrU2xvdCo+IGFsbFN0YWNrU2xvdHNbQXJnOjpu
dW1UeXBlc107Ci0gICAgdW5zaWduZWQgbmV3U3RhY2tTbG90VGhyZXNob2xkID0gY29kZS5zdGFj
a1Nsb3RzKCkuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgdHlwZUluZGV4ID0gMDsgdHlwZUlu
ZGV4IDwgQXJnOjpudW1UeXBlczsgKyt0eXBlSW5kZXgpIHsKICAgICAgICAgVmVjdG9yPFN0YWNr
U2xvdCo+JiBzdGFja1Nsb3RzID0gYWxsU3RhY2tTbG90c1t0eXBlSW5kZXhdOwogICAgICAgICBB
cmc6OlR5cGUgdHlwZSA9IHN0YXRpY19jYXN0PEFyZzo6VHlwZT4odHlwZUluZGV4KTsKQEAgLTEz
MCw3ICsxMjgsNiBAQCB2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJiBjb2RlKQogICAgICAgICAg
ICAgICAgICAgICBzd2l0Y2ggKHJvbGUpIHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6
OlVzZToKICAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkNvbGRVc2U6Ci0gICAgICAgICAg
ICAgICAgICAgIGNhc2UgQXJnOjpFYXJseURlZjoKICAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAoUmVnIHJlZyA6IHJlZ3NJblByaW9yaXR5T3JkZXIodHlwZSkpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIXNldEJlZm9yZS5nZXQocmVnKSkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZXRCZWZvcmUuc2V0KHJlZyk7CkBAIC0xNTQsNiArMTUxLDcgQEAg
dm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYgY29kZSkKICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBBcmc6OkxhdGVVc2U6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpMYXRlQ29sZFVz
ZToKICAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OlNjcmF0Y2g6CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgQXJnOjpFYXJseURlZjoKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAo
UmVnIHJlZyA6IHJlZ3NJblByaW9yaXR5T3JkZXIodHlwZSkpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIXNldEJlZm9yZS5nZXQocmVnKSAmJiAhc2V0QWZ0ZXIuZ2V0KHJlZykp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QWZ0ZXIuc2V0KHJlZyk7CkBA
IC0xODIsMTIgKzE4MCw2IEBAIHZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUmIGNvZGUpCiAgICAg
ICAgIH0KICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOwogICAgIH0KLQotICAg
IGZpeFNwaWxsU2xvdFpEZWYoCi0gICAgICAgIGNvZGUsCi0gICAgICAgIFsmXSAoU3RhY2tTbG90
KiBzdGFja1Nsb3QpIC0+IGJvb2wgewotICAgICAgICAgICAgcmV0dXJuIHN0YWNrU2xvdC0+aW5k
ZXgoKSA+PSBuZXdTdGFja1Nsb3RUaHJlc2hvbGQ7Ci0gICAgICAgIH0pOwogfQogCiB9IH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpclN0YWNrU2xvdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyU3RhY2tTbG90LmgJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4
LDEyIEBAIHB1YmxpYzoKICAgICBib29sIGlzTG9ja2VkKCkgY29uc3QgeyByZXR1cm4gbV9raW5k
ID09IFN0YWNrU2xvdEtpbmQ6OkxvY2tlZDsgfQogICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3Qg
eyByZXR1cm4gbV9pbmRleDsgfQogCisgICAgdm9pZCBlbnN1cmVTaXplKHVuc2lnbmVkIHJlcXVl
c3RlZFNpemUpCisgICAgeworICAgICAgICBBU1NFUlQoIW1fb2Zmc2V0RnJvbUZQKTsKKyAgICAg
ICAgbV9ieXRlU2l6ZSA9IHN0ZDo6bWF4KG1fYnl0ZVNpemUsIHJlcXVlc3RlZFNpemUpOworICAg
IH0KKwogICAgIHVuc2lnbmVkIGFsaWdubWVudCgpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAo
Ynl0ZVNpemUoKSA8PSAxKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJW
YWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw2ICs4MiwxMyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKGlzVGVybWluYWwoaW5zdC5v
cGNvZGUpLCAoIkF0ICIsIGluc3QsICIgaW4gIiwgKmJsb2NrKSk7CiAgICAgICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgICAgICBWQUxJREFURSghaXNUZXJtaW5hbChpbnN0Lm9wY29k
ZSksICgiQXQgIiwgaW5zdCwgIiBpbiAiLCAqYmxvY2spKTsKKworICAgICAgICAgICAgICAgIC8v
IGZvckVhY2hBcmcgbXVzdCByZXR1cm4gQXJnJidzIHRoYXQgcG9pbnQgaW50byB0aGUgYXJncyBh
cnJheS4KKyAgICAgICAgICAgICAgICBpbnN0LmZvckVhY2hBcmcoCisgICAgICAgICAgICAgICAg
ICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSwgQXJnOjpUeXBlLCBBcmc6OldpZHRoKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgmYXJnID49ICZpbnN0LmFyZ3NbMF0sICgi
QXQgIiwgYXJnLCAiIGluICIsIGluc3QsICIgaW4gIiwgKmJsb2NrKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBWQUxJREFURSgmYXJnIDw9ICZpbnN0LmFyZ3MubGFzdCgpLCAoIkF0ICIsIGFy
ZywgIiBpbiAiLCBpbnN0LCAiIGluICIsICpibG9jaykpOworICAgICAgICAgICAgICAgICAgICB9
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29y
IDogYmxvY2stPnN1Y2Nlc3NvckJsb2NrcygpKQogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZh
bGlkQmxvY2tzLmNvbnRhaW5zKHN1Y2Nlc3NvciksICgiSW4gIiwgKmJsb2NrKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHJldmlzaW9uIDE5NTE3NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4
LDcgKzM4LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogLy8gV2UgYXJlIGlu
IHRoZSBtaWRkbGUgb2YgYW4gZXhwZXJpbWVudGFsIHRyYW5zaXRpb24gZnJvbSBMTFZNIHRvIEIz
IGFzIHRoZSBiYWNrZW5kIGZvciB0aGUgRlRMLiBXZSBkb24ndAogLy8geWV0IGtub3cgaG93IGl0
IHdpbGwgdHVybiBvdXQuIEZvciBub3csIHRoaXMgZmxhZyB3aWxsIGNvbnRyb2wgd2hldGhlciBG
VEwgdXNlcyBCMy4gUmVtZW1iZXIgdG8gc2V0IHRoaXMKIC8vIHRvIDAgYmVmb3JlIGNvbW1pdHRp
bmchCi0jZGVmaW5lIEZUTF9VU0VTX0IzIDAKKyNkZWZpbmUgRlRMX1VTRVNfQjMgMQogCiBzdHJ1
Y3QgTm9kZTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExCM0NvbXBpbGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQjNDb21waWxl
LmNwcAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExC
M0NvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFC
TEUoRlRMX0pJVCkgJiYgRlRMX1VTRVNfQjMKIAorI2luY2x1ZGUgIkFpckNvZGUuaCIKICNpbmNs
dWRlICJCM0dlbmVyYXRlLmgiCiAjaW5jbHVkZSAiQjNQcm9jZWR1cmVJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiQjNTdGFja1Nsb3RWYWx1ZS5oIgpAQCAtNTcsNyArNTgsNyBAQCB2b2lkIGNvbXBpbGUo
U3RhdGUmIHN0YXRlLCBTYWZlcG9pbnQ6OlJlCiAgICAgR3JhcGgmIGdyYXBoID0gc3RhdGUuZ3Jh
cGg7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBncmFwaC5tX2NvZGVCbG9jazsKICAgICBW
TSYgdm0gPSBncmFwaC5tX3ZtOwotICAgIAorCiAgICAgewogICAgICAgICBHcmFwaFNhZmVwb2lu
dCBzYWZlcG9pbnQoc3RhdGUuZ3JhcGgsIHNhZmVwb2ludFJlc3VsdCk7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lv
biAxOTUxNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZN
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg1OCw4ICsxODU4LDggQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICAgICAgbV9vdXQubm90WmVybzMyKHJlc3VsdCksIHVzdWFsbHkoY29udGludWF0
aW9uKSwgcmFyZWx5KHNsb3dDYXNlKSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGlu
dWF0aW9uKTsKLSAgICAgICAgICAgICAgICBMVmFsdWUgY29uZCA9IG1fb3V0LmJpdE9yKG1fb3V0
Lmxlc3NUaGFuKGxlZnQsIG1fb3V0LmludDMyWmVybyksIG1fb3V0Lmxlc3NUaGFuKHJpZ2h0LCBt
X291dC5pbnQzMlplcm8pKTsKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGUoTmVnYXRpdmVaZXJv
LCBub1ZhbHVlKCksIDAsIGNvbmQpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShOZWdhdGl2
ZVplcm8sIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQubGVzc1RoYW4obGVmdCwgbV9vdXQuaW50
MzJaZXJvKSk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKE5lZ2F0aXZlWmVybywgbm9WYWx1
ZSgpLCBudWxscHRyLCBtX291dC5sZXNzVGhhbihyaWdodCwgbV9vdXQuaW50MzJaZXJvKSk7CiAg
ICAgICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwogICAgICAgICAgICAgfQpA
QCAtMTg5MCw4ICsxODkwLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgbV9vdXQu
bm90WmVybzY0KHJlc3VsdCksIHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFyZWx5KHNsb3dDYXNl
KSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5l
eHQgPSBtX291dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0aW9uKTsKLSAgICAgICAgICAg
ICAgICBMVmFsdWUgY29uZCA9IG1fb3V0LmJpdE9yKG1fb3V0Lmxlc3NUaGFuKGxlZnQsIG1fb3V0
LmludDY0WmVybyksIG1fb3V0Lmxlc3NUaGFuKHJpZ2h0LCBtX291dC5pbnQ2NFplcm8pKTsKLSAg
ICAgICAgICAgICAgICBzcGVjdWxhdGUoTmVnYXRpdmVaZXJvLCBub1ZhbHVlKCksIDAsIGNvbmQp
OworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShOZWdhdGl2ZVplcm8sIG5vVmFsdWUoKSwgbnVs
bHB0ciwgbV9vdXQubGVzc1RoYW4obGVmdCwgbV9vdXQuaW50NjRaZXJvKSk7CisgICAgICAgICAg
ICAgICAgc3BlY3VsYXRlKE5lZ2F0aXZlWmVybywgbm9WYWx1ZSgpLCBudWxscHRyLCBtX291dC5s
ZXNzVGhhbihyaWdodCwgbV9vdXQuaW50NjRaZXJvKSk7CiAgICAgICAgICAgICAgICAgbV9vdXQu
anVtcChjb250aW51YXRpb24pOwogICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRp
bnVhdGlvbiwgbGFzdE5leHQpOwogICAgICAgICAgICAgfQpAQCAtMTk1Nyw4ICsxOTU3LDggQEAg
cHJpdmF0ZToKIAogICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQu
YXBwZW5kVG8odW5zYWZlRGVub21pbmF0b3IsIGNvbnRpbnVhdGlvbik7CiAgICAgICAgICAgICAg
ICAgTFZhbHVlIG5lZzJUb1RoZTMxID0gbV9vdXQuY29uc3RJbnQzMigtMjE0NzQ4MzY0Ny0xKTsK
LSAgICAgICAgICAgICAgICBMVmFsdWUgY29uZCA9IG1fb3V0LmJpdE9yKG1fb3V0LmlzWmVybzMy
KGRlbm9taW5hdG9yKSwgbV9vdXQuZXF1YWwobnVtZXJhdG9yLCBuZWcyVG9UaGUzMSkpOwotICAg
ICAgICAgICAgICAgIHNwZWN1bGF0ZShPdmVyZmxvdywgbm9WYWx1ZSgpLCAwLCBjb25kKTsKKyAg
ICAgICAgICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9v
dXQuaXNaZXJvMzIoZGVub21pbmF0b3IpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoT3Zl
cmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQuZXF1YWwobnVtZXJhdG9yLCBuZWcyVG9U
aGUzMSkpOwogICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAogICAg
ICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwpAQCAt
MjAxMyw4ICsyMDEzLDggQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8odW5zYWZlRGVub21pbmF0b3IsIGNvbnRpbnVhdGlv
bik7CiAgICAgICAgICAgICAgICAgTFZhbHVlIG5lZzJUb1RoZTMxID0gbV9vdXQuY29uc3RJbnQz
MigtMjE0NzQ4MzY0Ny0xKTsKLSAgICAgICAgICAgICAgICBMVmFsdWUgY29uZCA9IG1fb3V0LmJp
dE9yKG1fb3V0LmlzWmVybzMyKGRlbm9taW5hdG9yKSwgbV9vdXQuZXF1YWwobnVtZXJhdG9yLCBu
ZWcyVG9UaGUzMSkpOwotICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShPdmVyZmxvdywgbm9WYWx1
ZSgpLCAwLCBjb25kKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIG5vVmFs
dWUoKSwgbnVsbHB0ciwgbV9vdXQuaXNaZXJvMzIoZGVub21pbmF0b3IpKTsKKyAgICAgICAgICAg
ICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQuZXF1YWwo
bnVtZXJhdG9yLCBuZWcyVG9UaGUzMSkpOwogICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKIAogICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlv
biwgbGFzdE5leHQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNl
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQu
aAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rl
clNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MSw2ICs5MSwxMyBAQCBwdWJsaWM6CiAgICAgICAg
IEFTU0VSVCghIXJlZyk7CiAgICAgICAgIHJldHVybiBtX3ZlY3Rvci5nZXQocmVnLmluZGV4KCkp
OwogICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhYmxlPgorICAgIHZvaWQgc2V0
QWxsKGNvbnN0IEl0ZXJhYmxlJiBpdGVyYWJsZSkKKyAgICB7CisgICAgICAgIGZvciAoUmVnIHJl
ZyA6IGl0ZXJhYmxlKQorICAgICAgICAgICAgc2V0KHJlZyk7CisgICAgfQogICAgIAogICAgIHZv
aWQgbWVyZ2UoY29uc3QgUmVnaXN0ZXJTZXQmIG90aGVyKSB7IG1fdmVjdG9yLm1lcmdlKG90aGVy
Lm1fdmVjdG9yKTsgfQogICAgIHZvaWQgZmlsdGVyKGNvbnN0IFJlZ2lzdGVyU2V0JiBvdGhlcikg
eyBtX3ZlY3Rvci5maWx0ZXIob3RoZXIubV92ZWN0b3IpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0Myw2ICsz
NDMsNyBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2KGJvb2wsIGxv
Z0IzUGhhc2VUaW1lcywgZmFsc2UsIG51bGxwdHIpIFwKICAgICB2KGRvdWJsZSwgcmFyZUJsb2Nr
UGVuYWx0eSwgMC4wMDEsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGFpclNwaWxsc0V2ZXJ5dGhp
bmcsIGZhbHNlLCBudWxscHRyKSBcCisgICAgdihib29sLCBsb2dBaXJSZWdpc3RlclByZXNzdXJl
LCBmYWxzZSwgbnVsbHB0cikgXAogICAgIFwKICAgICB2KGJvb2wsIHVzZURvbGxhclZNLCBmYWxz
ZSwgImluc3RhbGxzIHRoZSAkdm0gZGVidWdnaW5nIHRvb2wgaW4gZ2xvYmFsIG9iamVjdHMiKSBc
CiAgICAgdihvcHRpb25TdHJpbmcsIGZ1bmN0aW9uT3ZlcnJpZGVzLCBudWxscHRyLCAiZmlsZSB3
aXRoIGRlYnVnZ2luZyBvdmVycmlkZXMgZm9yIGZ1bmN0aW9uIGJvZGllcyIpIFwKSW5kZXg6IFNv
dXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE3IEBACisyMDE2LTAxLTE3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgQWlyIHNob3VsZCBmaXggc3BpbGwgY29kZSBlbWl0dGVkIGJ5IElSQwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUzMTEzCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvSW5k
ZXhTcGFyc2VTZXQuaDoKKyAgICAgICAgKFdURjo6SW5kZXhTcGFyc2VTZXQ8T3ZlcmZsb3dIYW5k
bGVyPjo6SW5kZXhTcGFyc2VTZXQpOgorICAgICAgICAoV1RGOjpJbmRleFNwYXJzZVNldDxPdmVy
Zmxvd0hhbmRsZXI+OjphZGQpOgorICAgICAgICAoV1RGOjpJbmRleFNwYXJzZVNldDxPdmVyZmxv
d0hhbmRsZXI+OjpyZW1vdmUpOgorICAgICAgICAqIHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oOgor
ICAgICAgICAoV1RGOjpTdHJpbmdQcmludFN0cmVhbTo6bGVuZ3RoKToKKwogMjAxNi0wMS0xNSAg
U2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQga2Rl
YnVnX3RyYWNlIHNpZ25wb3N0cyBmb3IgYSBmZXcgV2ViQ29yZSBvcGVyYXRpb25zCkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9JbmRleFNwYXJzZVNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL0luZGV4U3BhcnNlU2V0LmgJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9XVEYvd3Rm
L0luZGV4U3BhcnNlU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDggKzQ3LDggQEAgY2xhc3Mg
SW5kZXhTcGFyc2VTZXQgewogcHVibGljOgogICAgIGV4cGxpY2l0IEluZGV4U3BhcnNlU2V0KHVu
c2lnbmVkIG1heFZhbHVlKTsKIAotICAgIHZvaWQgYWRkKHVuc2lnbmVkKTsKLSAgICB2b2lkIHJl
bW92ZSh1bnNpZ25lZCk7CisgICAgYm9vbCBhZGQodW5zaWduZWQpOworICAgIGJvb2wgcmVtb3Zl
KHVuc2lnbmVkKTsKICAgICB2b2lkIGNsZWFyKCk7CiAKICAgICB1bnNpZ25lZCBzaXplKCkgY29u
c3Q7CkBAIC03MSwyOSArNzEsMzMgQEAgaW5saW5lIEluZGV4U3BhcnNlU2V0PE92ZXJmbG93SGFu
ZGxlcj46OgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+Ci1pbmxpbmUg
dm9pZCBJbmRleFNwYXJzZVNldDxPdmVyZmxvd0hhbmRsZXI+OjphZGQodW5zaWduZWQgdmFsdWUp
CitpbmxpbmUgYm9vbCBJbmRleFNwYXJzZVNldDxPdmVyZmxvd0hhbmRsZXI+OjphZGQodW5zaWdu
ZWQgdmFsdWUpCiB7CiAgICAgaWYgKGNvbnRhaW5zKHZhbHVlKSkKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICB1bnNpZ25lZCBuZXdQb3NpdGlvbiA9IG1fdmFs
dWVzLnNpemUoKTsKICAgICBtX3ZhbHVlcy5hcHBlbmQodmFsdWUpOwogICAgIG1fbWFwW3ZhbHVl
XSA9IG5ld1Bvc2l0aW9uOworICAgIHJldHVybiB0cnVlOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPdmVyZmxvd0hhbmRsZXI+Ci1pbmxpbmUgdm9pZCBJbmRleFNwYXJzZVNldDxPdmVyZmxvd0hh
bmRsZXI+OjpyZW1vdmUodW5zaWduZWQgdmFsdWUpCitpbmxpbmUgYm9vbCBJbmRleFNwYXJzZVNl
dDxPdmVyZmxvd0hhbmRsZXI+OjpyZW1vdmUodW5zaWduZWQgdmFsdWUpCiB7CiAgICAgdW5zaWdu
ZWQgcG9zaXRpb24gPSBtX21hcFt2YWx1ZV07CiAgICAgaWYgKHBvc2l0aW9uID49IG1fdmFsdWVz
LnNpemUoKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBp
ZiAobV92YWx1ZXNbcG9zaXRpb25dID09IHZhbHVlKSB7CiAgICAgICAgIHVuc2lnbmVkIGxhc3RW
YWx1ZSA9IG1fdmFsdWVzLmxhc3QoKTsKICAgICAgICAgbV92YWx1ZXNbcG9zaXRpb25dID0gbGFz
dFZhbHVlOwogICAgICAgICBtX21hcFtsYXN0VmFsdWVdID0gcG9zaXRpb247CiAgICAgICAgIG1f
dmFsdWVzLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQorCisgICAg
cmV0dXJuIGZhbHNlOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+Cklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9TdHJpbmdQcmludFN0cmVhbS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL1N0cmluZ1ByaW50U3RyZWFtLmgJKHJldmlzaW9uIDE5NTE3NikKKysrIFNv
dXJjZS9XVEYvd3RmL1N0cmluZ1ByaW50U3RyZWFtLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDYgKzM4
LDggQEAgcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5TdHJpbmdQcmlu
dFN0cmVhbSgpOwogICAgIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIHZvaWQgdnBy
aW50Zihjb25zdCBjaGFyKiBmb3JtYXQsIHZhX2xpc3QpIG92ZXJyaWRlIFdURl9BVFRSSUJVVEVf
UFJJTlRGKDIsIDApOworCisgICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbmV4
dDsgfQogICAgIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSBDU3RyaW5nIHRvQ1N0cmluZygpOwog
ICAgIFdURl9FWFBPUlRfUFJJVkFURSBTdHJpbmcgdG9TdHJpbmcoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269197</attachid>
            <date>2016-01-17 13:09:22 -0800</date>
            <delta_ts>2016-01-17 14:08:50 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>96325</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk1MTgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1MiBA
QAorMjAxNi0wMS0xNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEFpciBzaG91bGQgZml4IHNwaWxsIGNvZGUgZW1pdHRlZCBieSBJUkMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MzExMworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjZXMgYSBwaGFzZSBjYWxs
ZWQgZml4T2J2aW91c1NwaWxscygpIHRoYXQgZml4ZXMgcGF0dGVybnMgbGlrZToKKworICAgICAg
ICBTdG9yZSByZWdpc3RlciB0byBzdGFjayBzbG90IGFuZCB0aGVuIHVzZSBzdGFjayBzbG90Ogor
ICAgICAgICAgICAgTW92ZSAlcmN4LCAoc3RhY2s0MikKKyAgICAgICAgICAgIEZvbyB1c2U6KHN0
YWNrNDIpIC8vIHJlcGxhY2UgKHN0YWNrNDIpIHdpdGggJXJjeCBoZXJlLgorCisgICAgICAgIExv
YWQgc3RhY2sgc2xvdCBpbnRvIHJlZ2lzdGVyIGFuZCB0aGVuIHVzZSBzdGFjayBzbG90OgorICAg
ICAgICAgICAgTW92ZSAoc3RhY2s0MiksICVyY3gKKyAgICAgICAgICAgIEZvbyB1c2U6KHN0YWNr
NDIpIC8vIHJlcGxhY2UgKHN0YWNrNDIpIHdpdGggJXJjeCBoZXJlLgorCisgICAgICAgIFN0b3Jl
IGNvbnN0YW50IGludG8gc3RhY2sgc2xvdCBhbmQgdGhlbiB1c2Ugc3RhY2sgc2xvdDoKKyAgICAg
ICAgICAgIE1vdmUgJDQyLCAlcmN4CisgICAgICAgICAgICBNb3ZlICVyY3gsIChzdGFjazQyKQor
ICAgICAgICAgICAgQmFyIGRlZjolcmN4IC8vICVyY3ggaXNuJ3QgYXZhaWxhYmxlIGFueW1vcmUs
IGJ1dCB3ZSBzdGlsbCBrbm93IHRoYXQgKHN0YWNrNDIpIGlzICQ0MgorICAgICAgICAgICAgRm9v
IHVzZTooc3RhY2s0MikgLy8gcmVwbGFjZSAoc3RhY2s0Mikgd2l0aCAkNDIgaGVyZS4KKworICAg
ICAgICBUaGlzIHBoYXNlcyBkb2VzIHRoZXNlIGZpeHVwcyBieSBkb2luZyBhIGdsb2JhbCBmb3J3
YXJkIGZsb3cgdGhhdCBwcm9wYWdhdGVzIHNldHMgb2YKKyAgICAgICAgbXVzdC1hbGlhc2VzLgor
CisgICAgICAgIEFsc28gYWRkZWQgYSBwaGFzZSB0byByZXBvcnQgcmVnaXN0ZXIgcHJlc3N1cmUu
IEl0IHByZXR0eS1wcmludHMgY29kZSBhbG9uZ3NpZGUgdGhlIHNldCBvZgorICAgICAgICBpbi11
c2UgcmVnaXN0ZXJzIGFib3ZlIGVhY2ggaW5zdHJ1Y3Rpb24uCisKKyAgICAgICAgQWxzbyBmaXhl
ZCBzb21lIEZUTCBjb2RlZ2VuIHBhdGhvbG9naWVzLiBXZSB3ZXJlIHVzaW5nIGJpdE9yIHdoZXJl
IHdlIG1lYW50IHRvIHVzZSBhCisgICAgICAgIGNvbmRpdGlvbmFsIG9yLiBMTFZNIGxpa2VzIHRv
IGNhbm9uaWNhbGl6ZSBib29sZWFuIGV4cHJlc3Npb25zIHRoaXMgd2F5LiBCMywgb24gdGhlIG90
aGVyCisgICAgICAgIGhhbmQsIGRvZXNuJ3QgZG8gdGhpcyBjYW5vbmljYWxpemF0aW9uIGFuZCBk
b2Vzbid0IGhhdmUgbG9naWMgdG8gZGVjb21wb3NlIGl0IGludG8gc2VxdWVuY2VzCisgICAgICAg
IG9mIGJyYW5jaGVzLgorCisgICAgICAgIEZpbmFsbHksIHRoaXMgZml4ZXMgc29tZSBidWdzIHdp
dGggaG93IHdlIHdlcmUgaGFuZGxpbmcgc3Vid2lkdGggc3BpbGwgc2xvdHMuIFRoZSByZWdpc3Rl
cgorICAgICAgICBhbGxvY2F0b3Igd2FzIG1ha2luZyB0d28gbWlzdGFrZXMuIEZpcnN0LCBpdCBt
aWdodCBjYXVzZSBhIFdpZHRoNjQgZGVmIG9yIHVzZSBvZiBhIDQtYnl0ZQorICAgICAgICBzcGls
bCBzbG90LiBJbiB0aGF0IGNhc2UsIGl0IHdvdWxkIGV4dGVuZCB0aGUgc2l6ZSBvZiB0aGUgc3Bp
bGwgc2xvdCB0byBlbnN1cmUgdGhhdCB0aGUgdXNlCisgICAgICAgIG9yIGRlZiBpcyBzYWZlLiBT
ZWNvbmQsIGl0IGVtdWxhdGVzIFpEZWYgb24gVG1wIGJlaGF2aW9yIGJ5IGVtaXR0aW5nIGEgTW92
ZTMyIHRvIGluaXRpYWxpemUKKyAgICAgICAgdGhlIGhpZ2ggYml0cyBvZiBhIHNwaWxsIHNsb3Qu
IEJ1dCB0aGlzIGlzIHVuc291bmQgYmVjYXVzZSBvZiB0aGUgbGl2ZW5lc3Mgc2VtYW50aWNzIG9m
IHNwaWxsCisgICAgICAgIHNsb3RzLiBUaGV5IGNhbm5vdCBoYXZlIG1vcmUgdGhhbiBvbmUgZGVm
IHRvIGluaXRpYWxpemUgdGhlaXIgdmFsdWUuIEkgZml4ZWQgdGhhdCBieSBtYWtpbmcKKyAgICAg
ICAgYWxsb2NhdGVTdGFjaygpIGJlIHRoZSB0aGluZyB0aGF0IGZpeGVzIFpEZWZzLiBUaGF0J3Mg
YSBjaGFuZ2UgdG8gWkRlZiBzZW1hbnRpY3M6IG5vdywgWkRlZgorICAgICAgICBvbiBhbiBhbm9u
eW1vdXMgc3RhY2sgc2xvdCBtZWFucyB0aGF0IHRoZSBoaWdoIGJpdHMgYXJlIHplcm8tZmlsbGVk
LiBJIHdhc24ndCBhYmxlIHRvCisgICAgICAgIGNvbnN0cnVjdCBhIHRlc3QgZm9yIHRoaXMuIEl0
IG1pZ2h0IGJlIGEgaHlwb3RoZXRpY2FsIGJ1ZywgYnV0IHN0aWxsLCBJIGxpa2UgaG93IHRoaXMK
KyAgICAgICAgc2ltcGxpZmllcyB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yLgorCisgICAgICAgIFRo
aXMgaXMgYSB+MC43JSBzcGVlZC11cCBvbiBPY3RhbmUuCisKKyAgICAgICAgKiBDTWFrZUxpc3Rz
LnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIGIzL0IzQ2hlY2tTcGVjaWFsLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkNo
ZWNrU3BlY2lhbDo6aGlkZGVuQnJhbmNoKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lh
bDo6Zm9yRWFjaEFyZyk6CisgICAgICAgIChKU0M6OkIzOjpDaGVja1NwZWNpYWw6OmNvbW1pdEhp
ZGRlbkJyYW5jaCk6IERlbGV0ZWQuCisgICAgICAgICogYjMvQjNDaGVja1NwZWNpYWwuaDoKKyAg
ICAgICAgKiBiMy9CM0xvd2VyVG9BaXIuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dl
clRvQWlyOjpmaWxsU3RhY2ttYXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWly
Ojpsb3dlcik6CisgICAgICAgICogYjMvQjNTdGFja21hcFZhbHVlLmg6CisgICAgICAgICogYjMv
YWlyL0FpckFsbG9jYXRlU3RhY2suY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjphbGxvY2F0
ZVN0YWNrKToKKyAgICAgICAgKiBiMy9haXIvQWlyQWxsb2NhdGVTdGFjay5oOgorICAgICAgICAq
IGIzL2Fpci9BaXJBcmcuaDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpjYWxsQXJnKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpzdGFja0FkZHIpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpBcmc6OmlzVmFsaWRTY2FsZSk6CisgICAgICAgICogYjMvYWlyL0FpckJhc2ljQmxv
Y2suY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpkZWVwRHVtcCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OmR1bXBIZWFkZXIpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpkdW1wRm9vdGVyKToKKyAgICAgICAgKiBiMy9haXIv
QWlyQmFzaWNCbG9jay5oOgorICAgICAgICAqIGIzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuY3BwOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbFNwZWNpYWw6OkNDYWxsU3BlY2lhbCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6fkNDYWxsU3BlY2lhbCk6CisgICAgICAg
ICogYjMvYWlyL0FpckNvZGUuaDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6bGFzdFBo
YXNlTmFtZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OnNldEVuYWJsZVJDUlMpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjplbmFibGVSQ1JTKToKKyAgICAgICAgKiBiMy9h
aXIvQWlyQ3VzdG9tLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6UGF0Y2hDdXN0b206Omlz
VmFsaWRGb3JtKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxDdXN0b206OmlzVmFsaWRG
b3JtKToKKyAgICAgICAgKiBiMy9haXIvQWlyQ3VzdG9tLmg6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OlBhdGNoQ3VzdG9tOjppc1ZhbGlkRm9ybVN0YXRpYyk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OlBhdGNoQ3VzdG9tOjphZG1pdHNTdGFjayk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlBh
dGNoQ3VzdG9tOjppc1ZhbGlkRm9ybSk6IERlbGV0ZWQuCisgICAgICAgICogYjMvYWlyL0FpckVt
aXRTaHVmZmxlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U2h1ZmZsZVBhaXI6OmR1bXAp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpjcmVhdGVTaHVmZmxlKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6ZW1pdFNodWZmbGUpOgorICAgICAgICAqIGIzL2Fpci9BaXJFbWl0U2h1ZmZsZS5o
OgorICAgICAgICAqIGIzL2Fpci9BaXJGaXhPYnZpb3VzU3BpbGxzLmNwcDogQWRkZWQuCisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OmZpeE9idmlvdXNTcGlsbHMpOgorICAgICAgICAqIGIzL2Fpci9B
aXJGaXhPYnZpb3VzU3BpbGxzLmg6IEFkZGVkLgorICAgICAgICAqIGIzL2Fpci9BaXJGaXhTcGls
bFNsb3RaRGVmLmg6IFJlbW92ZWQuCisgICAgICAgICogYjMvYWlyL0FpckdlbmVyYXRlLmNwcDoK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6cHJlcGFyZUZvckdlbmVyYXRpb24pOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpnZW5lcmF0ZSk6CisgICAgICAgICogYjMvYWlyL0FpckhhbmRsZUNhbGxl
ZVNhdmVzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6aGFuZGxlQ2FsbGVlU2F2ZXMpOgor
ICAgICAgICAqIGIzL2Fpci9BaXJJbnN0Lmg6CisgICAgICAgICogYjMvYWlyL0Fpckluc3RJbmxp
bmVzLmg6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6OnJlcG9ydFVzZWRSZWdpc3RlcnMp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnN0OjphZG1pdHNTdGFjayk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OmlzU2hpZnRWYWxpZCk6CisgICAgICAgICogYjMvYWlyL0Fpckl0ZXJhdGVk
UmVnaXN0ZXJDb2FsZXNjaW5nLmNwcDoKKyAgICAgICAgKiBiMy9haXIvQWlyTGl2ZW5lc3MuaDoK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QWJzdHJhY3RMaXZlbmVzczo6QWJzdHJhY3RMaXZlbmVz
cyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFic3RyYWN0TGl2ZW5lc3M6OkxvY2FsQ2FsYzo6
SXRlcmFibGU6OmJlZ2luKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QWJzdHJhY3RMaXZlbmVz
czo6TG9jYWxDYWxjOjpJdGVyYWJsZTo6ZW5kKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QWJz
dHJhY3RMaXZlbmVzczo6TG9jYWxDYWxjOjpJdGVyYWJsZTo6Y29udGFpbnMpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpBYnN0cmFjdExpdmVuZXNzOjpMb2NhbENhbGM6OmxpdmUpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpBYnN0cmFjdExpdmVuZXNzOjpMb2NhbENhbGM6OmlzTGl2ZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkFic3RyYWN0TGl2ZW5lc3M6OkxvY2FsQ2FsYzo6ZXhlY3V0
ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFic3RyYWN0TGl2ZW5lc3M6OnJhd0xpdmVBdEhl
YWQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBYnN0cmFjdExpdmVuZXNzOjpJdGVyYWJsZTo6
YmVnaW4pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBYnN0cmFjdExpdmVuZXNzOjpJdGVyYWJs
ZTo6ZW5kKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QWJzdHJhY3RMaXZlbmVzczo6SXRlcmFi
bGU6OmNvbnRhaW5zKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QWJzdHJhY3RMaXZlbmVzczo6
bGl2ZUF0VGFpbCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFic3RyYWN0TGl2ZW5lc3M6Ondv
cmtzZXQpOgorICAgICAgICAqIGIzL2Fpci9BaXJMb2dSZWdpc3RlclByZXNzdXJlLmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OmxvZ1JlZ2lzdGVyUHJlc3N1cmUpOgorICAgICAg
ICAqIGIzL2Fpci9BaXJMb2dSZWdpc3RlclByZXNzdXJlLmg6IEFkZGVkLgorICAgICAgICAqIGIz
L2Fpci9BaXJPcHRpbWl6ZUJsb2NrT3JkZXIuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpi
bG9ja3NJbk9wdGltaXplZE9yZGVyKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6b3B0aW1pemVC
bG9ja09yZGVyKToKKyAgICAgICAgKiBiMy9haXIvQWlyT3B0aW1pemVCbG9ja09yZGVyLmg6Cisg
ICAgICAgICogYjMvYWlyL0FpclJlcG9ydFVzZWRSZWdpc3RlcnMuY3BwOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpyZXBvcnRVc2VkUmVnaXN0ZXJzKToKKyAgICAgICAgKiBiMy9haXIvQWlyUmVw
b3J0VXNlZFJlZ2lzdGVycy5oOgorICAgICAgICAqIGIzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcu
Y3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpzcGlsbEV2ZXJ5dGhpbmcpOgorICAgICAgICAq
IGIzL2Fpci9BaXJTdGFja1Nsb3QuaDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90
Ojppc0xvY2tlZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6aW5kZXgpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpTdGFja1Nsb3Q6OmVuc3VyZVNpemUpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpTdGFja1Nsb3Q6OmFsaWdubWVudCk6CisgICAgICAgICogYjMvYWlyL0Fp
clZhbGlkYXRlLmNwcDoKKyAgICAgICAgKiBmdGwvRlRMQjNDb21waWxlLmNwcDoKKyAgICAgICAg
KEpTQzo6RlRMOjpjb21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3Bw
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVBcml0aE11
bCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRo
RGl2KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQXJp
dGhNb2QpOgorICAgICAgICAqIGppdC9SZWdpc3RlclNldC5oOgorICAgICAgICAoSlNDOjpSZWdp
c3RlclNldDo6Z2V0KToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6OnNldEFsbCk6CisgICAg
ICAgIChKU0M6OlJlZ2lzdGVyU2V0OjptZXJnZSk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0
OjpmaWx0ZXIpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgorCiAyMDE2LTAxLTE3ICBK
dWxpZW4gQnJpYW5jZWF1ICA8amJyaWFuY2VAY2lzY28uY29tPgogCiAgICAgICAgIFttaXBzXSBG
aXggcmVnVDIgYW5kIHJlZ1QzIHRyYW1wbGluZyBpbiBNYWNyb0Fzc2VtYmxlcgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC03OCw2ICs3
OCw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYjMvYWlyL0FpckN1c3RvbS5j
cHAKICAgICBiMy9haXIvQWlyRWxpbWluYXRlRGVhZENvZGUuY3BwCiAgICAgYjMvYWlyL0FpckVt
aXRTaHVmZmxlLmNwcAorICAgIGIzL2Fpci9BaXJGaXhPYnZpb3VzU3BpbGxzLmNwcAogICAgIGIz
L2Fpci9BaXJGaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMuY3BwCiAgICAgYjMvYWlyL0FpckdlbmVy
YXRlLmNwcAogICAgIGIzL2Fpci9BaXJHZW5lcmF0ZWQuY3BwCkBAIC04NSw2ICs4Niw3IEBAIHNl
dChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYjMvYWlyL0Fpckluc2VydGlvblNldC5jcHAK
ICAgICBiMy9haXIvQWlySW5zdC5jcHAKICAgICBiMy9haXIvQWlySXRlcmF0ZWRSZWdpc3RlckNv
YWxlc2NpbmcuY3BwCisgICAgYjMvYWlyL0FpckxvZ1JlZ2lzdGVyUHJlc3N1cmUuY3BwCiAgICAg
YjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAKICAgICBiMy9haXIvQWlyTG93ZXJNYWNy
b3MuY3BwCiAgICAgYjMvYWlyL0Fpck9wdGltaXplQmxvY2tPcmRlci5jcHAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMzc5LDcgKzM3OSw4IEBACiAJCTBGNDkzQUZBMTZEMENBRDMwMDg0NTA4QiAv
KiBTb3VyY2VQcm92aWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjQ5M0FGODE2RDBDQUQxMDA4NDUwOEIgLyogU291cmNlUHJvdmlkZXIuY3Bw
ICovOyB9OwogCQkwRjRCOTREQzE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRBcnJheUlubGluZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEI5NERC
MTdCOUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNEM5MTY2MUMyOUY0RjIwMDQzNDFB
NiAvKiBCM09yaWdpbkR1bXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNEM5MTY1MUMyOUY0RjIwMDQzNDFBNiAvKiBCM09yaWdpbkR1bXAuaCAqLzsg
fTsKLQkJMEY0QzkxNjgxQzJCM0Q2ODAwNDM0MUE2IC8qIEFpckZpeFNwaWxsU2xvdFpEZWYuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEM5MTY3MUMy
QjNENjgwMDQzNDFBNiAvKiBBaXJGaXhTcGlsbFNsb3RaRGVmLmggKi87IH07CisJCTBGNERFMUNF
MUM0QzFCNTQwMDRENkMxMSAvKiBBaXJGaXhPYnZpb3VzU3BpbGxzLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNERFMUNDMUM0QzFCNTQwMDRENkMx
MSAvKiBBaXJGaXhPYnZpb3VzU3BpbGxzLmNwcCAqLzsgfTsKKwkJMEY0REUxQ0YxQzRDMUI1NDAw
NEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNERFMUNEMUM0QzFCNTQwMDRENkMxMSAvKiBBaXJGaXhP
YnZpb3VzU3BpbGxzLmggKi87IH07CiAJCTBGNEYyOURGMThCNkFEMUMwMDU3QkMxNSAvKiBERkdT
dGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRGMjlERDE4QjZBRDFDMDA1N0JDMTUgLyog
REZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwICovOyB9OwogCQkwRjRG
MjlFMDE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9u
UGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NEYyOURFMThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRp
b25QaGFzZS5oICovOyB9OwogCQkwRjUwQUYzQzE5M0U4QjM5MDA2NzRFRTggLyogREZHU3RydWN0
dXJlQ2xvYmJlclN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjUwQUYzQjE5M0U4QjM5MDA2NzRFRTggLyogREZHU3RydWN0dXJlQ2xvYmJlclN0
YXRlLmggKi87IH07CkBAIC03MjQsNiArNzI1LDggQEAKIAkJMEZFMjI4RUUxNDM2QUIyQzAwMTk2
QzQ4IC8qIE9wdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFMjI4RUExNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuY3BwICovOyB9Owog
CQkwRkUyNTRGNjFBQkRERDIyMDBBN0M2RDIgLyogREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUyNTRG
NDFBQkRERDIyMDBBN0M2RDIgLyogREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAgKi87IH07
CiAJCTBGRTI1NEY3MUFCREREMjIwMEE3QzZEMiAvKiBERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUyNTRG
NTFBQkRERDIyMDBBN0M2RDIgLyogREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5oICovOyB9Owor
CQkwRkUzNEMxOTFDNEIzOUFFMDAwM0E1MTIgLyogQWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUzNEMxNzFD
NEIzOUFFMDAwM0E1MTIgLyogQWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5jcHAgKi87IH07CisJCTBG
RTM0QzFBMUM0QjM5QUUwMDAzQTUxMiAvKiBBaXJMb2dSZWdpc3RlclByZXNzdXJlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUzNEMxODFDNEIzOUFF
MDAwM0E1MTIgLyogQWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5oICovOyB9OwogCQkwRkU3MjExRDE5
M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNpdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU3MjExQjE5M0I5QzU5MDAzMUY2RUQgLyogREZH
VHJhbnNpdGlvbi5jcHAgKi87IH07CiAJCTBGRTcyMTFFMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdU
cmFuc2l0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkU3MjExQzE5M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNpdGlvbi5oICovOyB9OwogCQkw
RkU4MzQxNzFBNkVGOTdCMDBEMDQ4NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFODM0MTUx
QTZFRjk3QjAwRDA0ODQ3IC8qIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcCAqLzsgfTsK
QEAgLTI1NDIsNyArMjU0NSw4IEBACiAJCTBGNDkzQUY4MTZEMENBRDEwMDg0NTA4QiAvKiBTb3Vy
Y2VQcm92aWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTb3Vy
Y2VQcm92aWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEI5NERCMTdC
OUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBUeXBlZEFycmF5SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjRDOTE2NTFDMjlGNEYyMDA0MzQxQTYgLyogQjNPcmlnaW5EdW1wLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzT3JpZ2luRHVtcC5oOyBwYXRoID0gYjMvQjNP
cmlnaW5EdW1wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNEM5MTY3MUMyQjNE
NjgwMDQzNDFBNiAvKiBBaXJGaXhTcGlsbFNsb3RaRGVmLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEFpckZpeFNwaWxsU2xvdFpEZWYuaDsgcGF0aCA9IGIzL2Fpci9BaXJGaXhT
cGlsbFNsb3RaRGVmLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNERFMUNDMUM0
QzFCNTQwMDRENkMxMSAvKiBBaXJGaXhPYnZpb3VzU3BpbGxzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckZpeE9idmlvdXNTcGlsbHMuY3BwOyBwYXRoID0gYjMv
YWlyL0FpckZpeE9idmlvdXNTcGlsbHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjRERTFDRDFDNEMxQjU0MDA0RDZDMTEgLyogQWlyRml4T2J2aW91c1NwaWxscy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJGaXhPYnZpb3VzU3BpbGxzLmg7IHBhdGgg
PSBiMy9haXIvQWlyRml4T2J2aW91c1NwaWxscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjRGMjlERDE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRF
c3RpbWF0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
REZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RG
R1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY0RjI5REUxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1
dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmg7IHBhdGggPSBkZmcv
REZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY1MEFGM0IxOTNFOEIzOTAwNjc0RUU4IC8qIERGR1N0cnVjdHVyZUNs
b2JiZXJTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTdHJ1Y3R1
cmVDbG9iYmVyU3RhdGUuaDsgcGF0aCA9IGRmZy9ERkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI5MDAsNiArMjkwNCw4IEBACiAJCTBGRTIy
OEVCMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE9wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFMjU0
RjQxQUJEREQyMjAwQTdDNkQyIC8qIERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFz
ZS5jcHA7IHBhdGggPSBkZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTI1NEY1MUFCREREMjIwMEE3QzZEMiAvKiBERkdWYXJh
cmdzRm9yd2FyZGluZ1BoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdWYXJhcmdzRm9yd2FyZGlu
Z1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTM0QzE3MUM0QjM5QUUw
MDAzQTUxMiAvKiBBaXJMb2dSZWdpc3RlclByZXNzdXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IEFpckxvZ1JlZ2lzdGVyUHJlc3N1cmUuY3BwOyBwYXRoID0gYjMv
YWlyL0FpckxvZ1JlZ2lzdGVyUHJlc3N1cmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkUzNEMxODFDNEIzOUFFMDAwM0E1MTIgLyogQWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJMb2dSZWdpc3RlclByZXNzdXJl
Lmg7IHBhdGggPSBiMy9haXIvQWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkU3MjExQjE5M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNpdGlv
bi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdUcmFuc2l0aW9u
LmNwcDsgcGF0aCA9IGRmZy9ERkdUcmFuc2l0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZFNzIxMUMxOTNCOUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVHJhbnNpdGlvbi5oOyBwYXRoID0gZGZn
L0RGR1RyYW5zaXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFODM0MTUx
QTZFRjk3QjAwRDA0ODQ3IC8qIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5l
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ4NTksOSArNDg2NSwxMCBAQAog
CQkJCTBGNDU3MDM3MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJFbGltaW5hdGVEZWFkQ29kZS5oICov
LAogCQkJCTBGNjE4MzIzMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJFbWl0U2h1ZmZsZS5jcHAgKi8s
CiAJCQkJMEY2MTgzMjQxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmggKi8sCisJ
CQkJMEY0REUxQ0MxQzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuY3BwICov
LAorCQkJCTBGNERFMUNEMUM0QzFCNTQwMDRENkMxMSAvKiBBaXJGaXhPYnZpb3VzU3BpbGxzLmgg
Ki8sCiAJCQkJMjYyRDg1QjQxQzBENjUwRjAwNkFDQjYxIC8qIEFpckZpeFBhcnRpYWxSZWdpc3Rl
clN0YWxscy5jcHAgKi8sCiAJCQkJMjYyRDg1QjUxQzBENjUwRjAwNkFDQjYxIC8qIEFpckZpeFBh
cnRpYWxSZWdpc3RlclN0YWxscy5oICovLAotCQkJCTBGNEM5MTY3MUMyQjNENjgwMDQzNDFBNiAv
KiBBaXJGaXhTcGlsbFNsb3RaRGVmLmggKi8sCiAJCQkJMEZFQzg1NTIxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckZyZXF1ZW50ZWRCbG9jay5oICovLAogCQkJCTBGRUM4NTUzMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJHZW5lcmF0ZS5jcHAgKi8sCiAJCQkJMEZFQzg1NTQxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckdlbmVyYXRlLmggKi8sCkBAIC00ODc3LDYgKzQ4ODQsOCBAQAogCQkJCTI2NzE4QkEyMUJF
OTlGNzgwMDUyMDE3QiAvKiBBaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHAgKi8sCiAJ
CQkJMjY3MThCQTMxQkU5OUY3ODAwNTIwMTdCIC8qIEFpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNj
aW5nLmggKi8sCiAJCQkJMjY4NEQ0MzcxQzAwMTYxQzAwODFENjYzIC8qIEFpckxpdmVuZXNzLmgg
Ki8sCisJCQkJMEZFMzRDMTcxQzRCMzlBRTAwMDNBNTEyIC8qIEFpckxvZ1JlZ2lzdGVyUHJlc3N1
cmUuY3BwICovLAorCQkJCTBGRTM0QzE4MUM0QjM5QUUwMDAzQTUxMiAvKiBBaXJMb2dSZWdpc3Rl
clByZXNzdXJlLmggKi8sCiAJCQkJMEY2MTgzMjUxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2Vy
QWZ0ZXJSZWdBbGxvYy5jcHAgKi8sCiAJCQkJMEY2MTgzMjYxQzQ1QkYwNzAwNzI0NTBCIC8qIEFp
ckxvd2VyQWZ0ZXJSZWdBbGxvYy5oICovLAogCQkJCTBGNjE4MzI3MUM0NUJGMDcwMDcyNDUwQiAv
KiBBaXJMb3dlck1hY3Jvcy5jcHAgKi8sCkBAIC03MzI2LDcgKzczMzUsNiBAQAogCQkJCURDMDAw
MzkzMTlEOEJFNkYwMDAyM0VCMCAvKiBERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkJFMEY3NTE2QzFEQjBCMDA4MkM1RTggLyogREZHUHJlZGljdGlvbklu
amVjdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZGQzk1RTE0RUY5MEI3MDBDNzI1
MzIgLyogREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTBGNEM5MTY4MUMyQjNENjgwMDQzNDFBNiAvKiBBaXJGaXhTcGlsbFNsb3RaRGVmLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjNFMDFBQjE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJl
cmluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjlDRUQxOUQwQkE3RDAwQjFEMUI1IC8qIERG
R1Byb21vdGVkSGVhcExvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZDOTIxNjFCOTRG
QjNFMDA3MURENjYgLyogREZHUHJvcGVydHlUeXBlS2V5LmggaW4gSGVhZGVycyAqLywKQEAgLTcz
NTcsNiArNzM2NSw3IEBACiAJCQkJNzBCNzkxOTkxQzAyNEEyOTAwMjQ4MUUyIC8qIEdlbmVyYXRv
clByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDMDk3QTIxNDZCMjhDQzAwQ0YyNDQy
IC8qIERGR1RodW5rcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEOEEzMjgxN0Q1MUY1NzAwQ0Ey
QzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGRTM0QzFBMUM0QjM5QUUwMDAzQTUxMiAvKiBBaXJMb2dSZWdpc3RlclByZXNzdXJlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkQ4QTMyQTE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDhBMzJDMTdE
NTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTNBMDZCNDFDMTBDQjkzMDAzOTBGREQgLyog
SklUQml0WG9yR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTc0MDIsNiArNzQxMSw3IEBA
CiAJCQkJMEYzQUM3NTQxODhFNUVDODAwMzIwMjlGIC8qIEV4aXRpbmdKSVRUeXBlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkIxMDU4NjE2NzU0ODEyMDBGOEFCNkUgLyogRXhpdEtpbmQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMEI4M0FCMTRCQ0Y1QkIwMDg4NUI0RiAvKiBFeHByZXNzaW9uUmFu
Z2VJbmZvLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjRERTFDRjFDNEMxQjU0MDA0RDZDMTEgLyog
QWlyRml4T2J2aW91c1NwaWxscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGMzgxN0FEQjVG
MzAwNUFCMTc0IC8qIEZsb2F0MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGMzkx
N0FEQjVGMzAwNUFCMTc0IC8qIEZsb2F0NjRBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
NEU1NDMxN0VBOUY1OTAwQUJCMjE3IC8qIEZQUkluZm8uaCBpbiBIZWFkZXJzICovLApAQCAtODY3
Niw2ICs4Njg2LDcgQEAKIAkJCQkwRkVDODU2RDFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxsb2Nh
dGVTdGFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MzQyMkE2NjFDMTYyNjc1MDBFMkVCOTgg
LyogQjNSZWR1Y2VEb3VibGVUb0Zsb2F0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUM4NTZG
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY0REUx
Q0UxQzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZFQzg1NzExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZFQzg1NzMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3Bl
Y2lhbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVDODU3NTFCREFDREM3MDA4MEZGNzQgLyog
QWlyQ29kZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTkwOTEsNiArOTEwMiw3IEBACiAJCQkJQTU5
M0NGODIxODQwMzc3MTAwQkZDRTI3IC8qIEluc3BlY3RvclZhbHVlcy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxNDdGMzlDRjEwN0VDMzc2MDA0MjdBNDggLyogSW50ZXJuYWxGdW5jdGlvbi5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDI5RDdENDBFRDIxMjgyMDBCODk2MTkgLyogSW50ZXJwcmV0
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFMzRDMTkxQzRCMzlBRTAwMDNBNTEyIC8qIEFp
ckxvZ1JlZ2lzdGVyUHJlc3N1cmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTFCOUUyMzkxQjRF
MEQ2NzAwQkM3RkVEIC8qIEludGxDb2xsYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMUI5
RTIzQjFCNEUwRDY3MDBCQzdGRUQgLyogSW50bENvbGxhdG9yQ29uc3RydWN0b3IuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTFCOUUyM0QxQjRFMEQ2NzAwQkM3RkVEIC8qIEludGxDb2xsYXRvclBy
b3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0NoZWNrU3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ2hlY2tTcGVjaWFsLmNwcAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDE5
ICsxMDUsMTQgQEAgSW5zdCBDaGVja1NwZWNpYWw6OmhpZGRlbkJyYW5jaChjb25zdCBJbgogICAg
IHJldHVybiBoaWRkZW5CcmFuY2g7CiB9CiAKLXZvaWQgQ2hlY2tTcGVjaWFsOjpjb21taXRIaWRk
ZW5CcmFuY2goSW5zdCYgb3JpZ2luYWwsIEluc3QmIGhpZGRlbkJyYW5jaCkKLXsKLSAgICBBU1NF
UlQoaGlkZGVuQnJhbmNoLmFyZ3Muc2l6ZSgpID09IG1fbnVtQ2hlY2tBcmdzKTsKLSAgICBBU1NF
UlQoaGlkZGVuQnJhbmNoLm9wY29kZSA9IG1fY2hlY2tPcGNvZGUpOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX251bUNoZWNrQXJnczsgKytpKQotICAgICAgICBvcmlnaW5hbC5hcmdz
W2kgKyAxXSA9IGhpZGRlbkJyYW5jaC5hcmdzW2ldOwotfQotCiB2b2lkIENoZWNrU3BlY2lhbDo6
Zm9yRWFjaEFyZyhJbnN0JiBpbnN0LCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0Nh
bGxiYWNrPiYgY2FsbGJhY2spCiB7CiAgICAgSW5zdCBoaWRkZW4gPSBoaWRkZW5CcmFuY2goaW5z
dCk7Ci0gICAgaGlkZGVuLmZvckVhY2hBcmcoY2FsbGJhY2spOwotICAgIGNvbW1pdEhpZGRlbkJy
YW5jaChpbnN0LCBoaWRkZW4pOworICAgIGhpZGRlbi5mb3JFYWNoQXJnKAorICAgICAgICBbJl0g
KEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIHR5cGUsIEFyZzo6V2lkdGggd2lk
dGgpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gJmFyZyAtICZoaWRkZW4uYXJnc1sw
XTsKKyAgICAgICAgICAgIGNhbGxiYWNrKGluc3QuYXJnc1sxICsgaW5kZXhdLCByb2xlLCB0eXBl
LCB3aWR0aCk7CisgICAgICAgIH0pOwogICAgIGZvckVhY2hBcmdJbXBsKG51bUIzQXJncyhpbnN0
KSwgbV9udW1DaGVja0FyZ3MgKyAxLCBpbnN0LCBtX3N0YWNrbWFwUm9sZSwgY2FsbGJhY2spOwog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuaAkocmV2
aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFs
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMyw5ICsxMjMsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8g
Q29uc3RydWN0cyBhbmQgcmV0dXJucyB0aGUgSW5zdCByZXByZXNlbnRpbmcgdGhlIGJyYW5jaCB0
aGF0IHRoaXMgd2lsbCB1c2UuCiAgICAgQWlyOjpJbnN0IGhpZGRlbkJyYW5jaChjb25zdCBBaXI6
Okluc3QmKSBjb25zdDsKIAotICAgIC8vIElmIHdlIGVkaXRlZCB0aGUgaGlkZGVuIGJyYW5jaCwg
dGhpcyBpbnN0YWxscyB0aGUgZWRpdHMgaW50byB0aGUgZ2l2ZW4gaW5zdC4KLSAgICB2b2lkIGNv
bW1pdEhpZGRlbkJyYW5jaChBaXI6Okluc3QmIG9yaWdpbmFsLCBBaXI6Okluc3QmIGhpZGRlbkJy
YW5jaCk7Ci0KICAgICB2b2lkIGZvckVhY2hBcmcoQWlyOjpJbnN0JiwgY29uc3QgU2NvcGVkTGFt
YmRhPEFpcjo6SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYpIG92ZXJyaWRlOwogICAgIGJvb2wgaXNW
YWxpZChBaXI6Okluc3QmKSBvdmVycmlkZTsKICAgICBib29sIGFkbWl0c1N0YWNrKEFpcjo6SW5z
dCYsIHVuc2lnbmVkIGFyZ0luZGV4KSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcxLDYg
Kzg3MSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYXJnID0gdG1wKHZhbHVlLnZhbHVl
KCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6
UmVnaXN0ZXI6CisgICAgICAgICAgICAgICAgc3RhY2ttYXAtPmVhcmx5Q2xvYmJlcmVkKCkuY2xl
YXIodmFsdWUucmVwKCkucmVnKCkpOwogICAgICAgICAgICAgICAgIGFyZyA9IFRtcCh2YWx1ZS5y
ZXAoKS5yZWcoKSk7CiAgICAgICAgICAgICAgICAgYXBwZW5kKE1vdmUsIGltbU9yVG1wKHZhbHVl
LnZhbHVlKCkpLCBhcmcpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTk3Myw2ICsxOTc0
LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAg
ZmlsbFN0YWNrbWFwKGluc3QsIHBhdGNocG9pbnRWYWx1ZSwgMCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmIChwYXRjaHBvaW50VmFsdWUtPnJlc3VsdENvbnN0cmFpbnQuaXNSZWcoKSkK
KyAgICAgICAgICAgICAgICBwYXRjaHBvaW50VmFsdWUtPmxhdGVDbG9iYmVyZWQoKS5jbGVhcihw
YXRjaHBvaW50VmFsdWUtPnJlc3VsdENvbnN0cmFpbnQucmVnKCkpOwogCiAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBwYXRjaHBvaW50VmFsdWUtPm51bUdQU2NyYXRjaFJlZ2lzdGVyczsg
aS0tOykKICAgICAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKG1fY29kZS5uZXdUbXAoQXJn
OjpHUCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBWYWx1ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwVmFsdWUu
aAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tt
YXBWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODcsNiArMTg3LDggQEAgcHVibGljOgogICAg
ICAgICBjbG9iYmVyTGF0ZShzZXQpOwogICAgIH0KIAorICAgIFJlZ2lzdGVyU2V0JiBlYXJseUNs
b2JiZXJlZCgpIHsgcmV0dXJuIG1fZWFybHlDbG9iYmVyZWQ7IH0KKyAgICBSZWdpc3RlclNldCYg
bGF0ZUNsb2JiZXJlZCgpIHsgcmV0dXJuIG1fbGF0ZUNsb2JiZXJlZDsgfQogICAgIGNvbnN0IFJl
Z2lzdGVyU2V0JiBlYXJseUNsb2JiZXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZWFybHlDbG9iYmVy
ZWQ7IH0KICAgICBjb25zdCBSZWdpc3RlclNldCYgbGF0ZUNsb2JiZXJlZCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGF0ZUNsb2JiZXJlZDsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckFsbG9jYXRlU3RhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAJKHJldmlzaW9uIDE5NTE3NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoQjNfSklUKQogCiAjaW5jbHVkZSAi
QWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgogI2luY2x1ZGUgIkFpcklu
c3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQWlyTGl2ZW5lc3MuaCIKICNpbmNsdWRlICJBaXJQaGFz
ZVNjb3BlLmgiCkBAIC0xNjYsOCArMTY3LDQ3IEBAIHZvaWQgYWxsb2NhdGVTdGFjayhDb2RlJiBj
b2RlKQogICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGlu
c3RJbmRleC0tOykgewogICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAg
ZGF0YUxvZygiQW5hbHl6aW5nOiAiLCBibG9jay0+YXQoaW5zdEluZGV4KSwgIlxuIik7CisKKyAg
ICAgICAgICAgIC8vIEtpbGwgZGVhZCBzdG9yZXMuIEZvciBzaW1wbGljaXR5IHdlIHNheSB0aGF0
IGEgc3RvcmUgaXMga2lsbGFibGUgaWYgaXQgaGFzIG9ubHkgbGF0ZQorICAgICAgICAgICAgLy8g
ZGVmcyBhbmQgdGhvc2UgbGF0ZSBkZWZzIGFyZSB0byB0aGluZ3MgdGhhdCBhcmUgZGVhZCByaWdo
dCBub3cuIFdlIG9ubHkgZG8gdGhhdAorICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGF0J3MgdGhl
IG9ubHkga2luZCBvZiBkZWFkIHN0YWNrIHN0b3JlIHdlIHdpbGwgc2VlIGhlcmUuCisgICAgICAg
ICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7CisgICAgICAgICAgICBpZiAo
IWluc3QuaGFzTm9uQXJnRWZmZWN0cygpKSB7CisgICAgICAgICAgICAgICAgYm9vbCBvayA9IHRy
dWU7CisgICAgICAgICAgICAgICAgaW5zdC5mb3JFYWNoQXJnKAorICAgICAgICAgICAgICAgICAg
ICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlLCBBcmc6OldpZHRoKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0Vhcmx5RGVmKHJvbGUpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIUFyZzo6aXNMYXRlRGVmKHJvbGUpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlz
U3RhY2soKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9rID0gZmFsc2U7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzbG90ID0gYXJnLnN0YWNrU2xv
dCgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNsb3QtPmtpbmQoKSAhPSBTdGFja1Ns
b3RLaW5kOjpBbm9ueW1vdXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvayA9IGZh
bHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2FsQ2FsYy5pc0xp
dmUoc2xvdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvayA9IGZhbHNlOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgaWYgKG9rKQorICAg
ICAgICAgICAgICAgICAgICBpbnN0ID0gSW5zdCgpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCiAgICAgICAgICAgICBpbnRlcmZlcmUoaW5zdEluZGV4KTsKICAgICAgICAgICAgIGxvY2Fs
Q2FsYy5leGVjdXRlKGluc3RJbmRleCk7CisKKyAgICAgICAgICAgIGJsb2NrLT5pbnN0cygpLnJl
bW92ZUFsbE1hdGNoaW5nKAorICAgICAgICAgICAgICAgIFsmXSAoY29uc3QgSW5zdCYgaW5zdCkg
LT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAhaW5zdDsKKyAgICAgICAgICAg
ICAgICB9KTsKICAgICAgICAgfQogICAgICAgICBpbnRlcmZlcmUoLTEpOwogICAgIH0KQEAgLTIz
MiwzMyArMjcyLDQzIEBAIHZvaWQgYWxsb2NhdGVTdGFjayhDb2RlJiBjb2RlKQogICAgIC8vIFdl
IHdvdWxkIGhhdmUgdG8gc2NhdmVuZ2UgZm9yIHRlbXBvcmFyaWVzIGlmIHRoaXMgaGFwcGVuZWQu
IEZvcnR1bmF0ZWx5LCB0aGlzIGNhc2Ugd2lsbCBiZQogICAgIC8vIGV4dHJlbWVseSByYXJlIHNv
IHdlIGNhbiBkbyBjcmF6eSB0aGluZ3Mgd2hlbiBpdCBhcmlzZXMuCiAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjUzMAotICAgIAorCisgICAgSW5zZXJ0
aW9uU2V0IGluc2VydGlvblNldChjb2RlKTsKICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDog
Y29kZSkgewotICAgICAgICBmb3IgKEluc3QmIGluc3QgOiAqYmxvY2spIHsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbnN0SW5kZXggPSAwOyBpbnN0SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK2lu
c3RJbmRleCkgeworICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgp
OwogICAgICAgICAgICAgaW5zdC5mb3JFYWNoQXJnKAotICAgICAgICAgICAgICAgIFsmXSAoQXJn
JiBhcmcsIEFyZzo6Um9sZSwgQXJnOjpUeXBlLCBBcmc6OldpZHRoIHdpZHRoKQotICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwg
QXJnOjpUeXBlLCBBcmc6OldpZHRoIHdpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8g
c3RhY2tBZGRyID0gWyZdIChpbnQzMl90IG9mZnNldCkgLT4gQXJnIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBBcmc6OnN0YWNrQWRkcihvZmZzZXQsIGNvZGUuZnJhbWVTaXplKCks
IHdpZHRoKTsKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYXJnLmtpbmQoKSkgewogICAgICAgICAgICAgICAg
ICAgICBjYXNlIEFyZzo6U3RhY2s6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IEFy
Zzo6YWRkcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUbXAoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZy5vZmZzZXQoKSAr
IGFyZy5zdGFja1Nsb3QoKS0+b2Zmc2V0RnJvbUZQKCkpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFhcmcuaXNWYWxpZEZvcm0od2lkdGgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYXJnID0gQXJnOjphZGRyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU
bXAoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXJnLm9mZnNldCgpICsgY29kZS5mcmFtZVNpemUoKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHNsb3QgPSBhcmcuc3RhY2tTbG90KCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc1pEZWYocm9sZSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmJiBzbG90LT5raW5kKCkgPT0gU3RhY2tTbG90S2luZDo6QW5vbnlt
b3VzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2xvdC0+Ynl0ZVNpemUoKSA+IEFy
Zzo6Ynl0ZXMod2lkdGgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ3VycmVu
dGx5IHdlIG9ubHkgaGFuZGxlIHRoaXMgc2ltcGxlIGNhc2UgYmVjYXVzZSBpdCdzIHRoZSBvbmx5
IG9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgYXJpc2VzOiBaRGVmJ3Mg
YXJlIG9ubHkgMzItYml0IHJpZ2h0IG5vdy4gU28sIHdoZW4gd2UgaGl0IHRoZXNlCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gYXNzZXJ0aW9ucyBpdCBtZWFucyB0aGF0IHdlIG5lZWQg
dG8gaW1wbGVtZW50IHRob3NlIG90aGVyIGtpbmRzIG9mCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gemVybyBmaWxscy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChzbG90LT5ieXRlU2l6ZSgpID09IDgpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHdpZHRoID09IEFyZzo6V2lkdGgzMik7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBXZSByZWx5IG9uIHRoZSBmYWN0IHRoYXQgdGhlcmUgbXVzdCBi
ZSBzb21lIHdheSB0byBtb3ZlIHplcm8gdG8gYQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIG1lbW9yeSBsb2NhdGlvbiB3aXRob3V0IGZpcnN0IGJ1cm5pbmcgYSByZWdpc3Rlci4gT24g
QVJNLCB3ZSB3b3VsZCBkbworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgdXNp
bmcgenIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNWYWxp
ZEZvcm0oTW92ZTMyLCBBcmc6OkltbSwgQXJnOjpBZGRyKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5zdEluZGV4ICsgMSwgTW92ZTMyLCBpbnN0Lm9yaWdpbiwgQXJnOjppbW0oMCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrQWRkcihhcmcub2Zmc2V0KCkgKyA0
ICsgc2xvdC0+b2Zmc2V0RnJvbUZQKCkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IHN0YWNrQWRkcihhcmcub2Zmc2V0KCkgKyBzbG90
LT5vZmZzZXRGcm9tRlAoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6Q2FsbEFyZzoK
LSAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IEFyZzo6YWRkcigKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFyZy5vZmZzZXQoKSAtIGNvZGUuZnJhbWVTaXplKCkpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmcuaXNWYWxpZEZvcm0od2lkdGgpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gQXJnOjphZGRyKAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBUbXAoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVy
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnLm9mZnNldCgpICsgY29kZS5m
cmFtZVNpemUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICBhcmcgPSBzdGFja0FkZHIoYXJnLm9mZnNldCgpIC0gY29kZS5mcmFtZVNpemUoKSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjY2LDYgKzMxNiw3IEBA
IHZvaWQgYWxsb2NhdGVTdGFjayhDb2RlJiBjb2RlKQogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICk7CiAgICAgICAgIH0KKyAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2sp
OwogICAgIH0KIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxv
Y2F0ZVN0YWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJBbGxvY2F0ZVN0YWNrLmgJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDcgKzMzLDkg
QEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZQogY2xhc3MgQ29kZTsK
IAogLy8gVGhpcyBhbGxvY2F0ZXMgU3RhY2tTbG90cyB0byBwbGFjZXMgb24gdGhlIHN0YWNrLiBJ
dCBmaXJzdCBhbGxvY2F0ZXMgdGhlIHBpbm5lZCBvbmVzIGluIGluZGV4Ci0vLyBvcmRlciBhbmQg
dGhlbiBpdCBhbGxvY2F0ZXMgdGhlIHJlc3QgdXNpbmcgZmlyc3QgZml0LgorLy8gb3JkZXIgYW5k
IHRoZW4gaXQgYWxsb2NhdGVzIHRoZSByZXN0IHVzaW5nIGZpcnN0IGZpdC4gVGFrZXMgdGhlIG9w
cG9ydHVuaXR5IHRvIGtpbGwgZGVhZAorLy8gYXNzaWdubWVudHMgdG8gc3RhY2sgc2xvdHMsIHNp
bmNlIGl0IGtub3dzIHdoaWNoIG9uZXMgYXJlIGxpdmUuIEFsc28gZml4ZXMgWkRlZnMgdG8gYW5v
bnltb3VzCisvLyBzdGFjayBzbG90cy4KIAogdm9pZCBhbGxvY2F0ZVN0YWNrKENvZGUmKTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCShyZXZpc2lvbiAxOTUxNzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjYsNiArMTI2LDcgQEAgcHVibGljOgogICAgICAgICAvLyBkZXBlbmRpbmcgb24gdGhl
IGtpbmQgb2YgdGhlIGFyZ3VtZW50OgogICAgICAgICAvLwogICAgICAgICAvLyBGb3IgcmVnaXN0
ZXI6IHRoZSB1cHBlciBiaXRzIGFyZSB6ZXJvLWZpbGxlZC4KKyAgICAgICAgLy8gRm9yIGFub255
bW91cyBzdGFjayBzbG90OiB0aGUgdXBwZXIgYml0cyBhcmUgemVyby1maWxsZWQuCiAgICAgICAg
IC8vIEZvciBhZGRyZXNzOiB0aGUgdXBwZXIgYml0cyBhcmUgbm90IHRvdWNoZWQgKGkuZS4gd2Ug
ZG8gYSAzMi1iaXQgc3RvcmUgaW4gb3VyIGV4YW1wbGUpLgogICAgICAgICAvLyBGb3IgdG1wOiBl
aXRoZXIgdGhlIHVwcGVyIGJpdHMgYXJlIG5vdCB0b3VjaGVkIG9yIHRoZXkgYXJlIHplcm8tZmls
bGVkLCBhbmQgd2Ugd29uJ3Qga25vdwogICAgICAgICAvLyB3aGljaCB1bnRpbCB3ZSBsb3dlciB0
aGUgdG1wIHRvIGVpdGhlciBhIFN0YWNrU2xvdCBvciBhIFJlZy4KQEAgLTUxMyw2ICs1MTQsMTcg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAorICAgIHN0YXRpYyBB
cmcgc3RhY2tBZGRyKGludDMyX3Qgb2Zmc2V0RnJvbUZQLCB1bnNpZ25lZCBmcmFtZVNpemUsIFdp
ZHRoIHdpZHRoKQorICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdCA9IEFyZzo6YWRkcihBaXI6OlRt
cChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciksIG9mZnNldEZyb21GUCk7CisgICAgICAgIGlm
ICghcmVzdWx0LmlzVmFsaWRGb3JtKHdpZHRoKSkgeworICAgICAgICAgICAgcmVzdWx0ID0gQXJn
OjphZGRyKAorICAgICAgICAgICAgICAgIEFpcjo6VG1wKE1hY3JvQXNzZW1ibGVyOjpzdGFja1Bv
aW50ZXJSZWdpc3RlciksCisgICAgICAgICAgICAgICAgb2Zmc2V0RnJvbUZQICsgZnJhbWVTaXpl
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwogICAgIC8vIElm
IHlvdSBkb24ndCBwYXNzIGEgV2lkdGgsIHRoaXMgb3B0aW1pc3RpY2FsbHkgYXNzdW1lcyB0aGF0
IHlvdSdyZSB1c2luZyB0aGUgcmlnaHQgd2lkdGguCiAgICAgc3RhdGljIGJvb2wgaXNWYWxpZFNj
YWxlKHVuc2lnbmVkIHNjYWxlLCBPcHRpb25hbDxXaWR0aD4gd2lkdGggPSBOdWxsb3B0KQogICAg
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2Nr
LmNwcAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsMTEgKzU3LDIxIEBAIHZvaWQg
QmFzaWNCbG9jazo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSAKIAogdm9pZCBCYXNpY0Jsb2NrOjpk
ZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogeworICAgIGR1bXBIZWFkZXIob3V0KTsK
KyAgICBmb3IgKGNvbnN0IEluc3QmIGluc3QgOiAqdGhpcykKKyAgICAgICAgb3V0LnByaW50KCIg
ICAgIiwgaW5zdCwgIlxuIik7CisgICAgZHVtcEZvb3RlcihvdXQpOworfQorCit2b2lkIEJhc2lj
QmxvY2s6OmR1bXBIZWFkZXIoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKICAgICBvdXQucHJp
bnQoIkJCIiwgKnRoaXMsICI6IDsgZnJlcXVlbmN5ID0gIiwgbV9mcmVxdWVuY3ksICJcbiIpOwog
ICAgIGlmIChwcmVkZWNlc3NvcnMoKS5zaXplKCkpCiAgICAgICAgIG91dC5wcmludCgiICBQcmVk
ZWNlc3NvcnM6ICIsIHBvaW50ZXJMaXN0RHVtcChwcmVkZWNlc3NvcnMoKSksICJcbiIpOwotICAg
IGZvciAoY29uc3QgSW5zdCYgaW5zdCA6ICp0aGlzKQotICAgICAgICBvdXQucHJpbnQoIiAgICAi
LCBpbnN0LCAiXG4iKTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpkdW1wRm9vdGVyKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Cit7CiAgICAgaWYgKHN1Y2Nlc3NvcnMoKS5zaXplKCkpCiAgICAgICAg
IG91dC5wcmludCgiICBTdWNjZXNzb3JzOiAiLCBsaXN0RHVtcChzdWNjZXNzb3JzKCkpLCAiXG4i
KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9j
ay5oCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckJhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CiAKK2NsYXNzIEJsb2NrSW5z
ZXJ0aW9uU2V0OwogY2xhc3MgQ29kZTsKIGNsYXNzIEluc2VydGlvblNldDsKIApAQCAtMTI2LDcg
KzEyNywxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAg
ICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogCisgICAgdm9pZCBkdW1wSGVh
ZGVyKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkdW1wRm9vdGVyKFByaW50U3RyZWFt
JikgY29uc3Q7CisKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEJsb2NrSW5zZXJ0aW9uU2V0
OwogICAgIGZyaWVuZCBjbGFzcyBDb2RlOwogICAgIGZyaWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7
CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsU3BlY2lh
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2Fs
bFNwZWNpYWwuY3BwCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckNDYWxsU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDkg
QEAgQ0NhbGxTcGVjaWFsOjpDQ2FsbFNwZWNpYWwoKQogICAgIG1fY2xvYmJlcmVkUmVncy5leGNs
dWRlKFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpKTsKICAgICBtX2Nsb2JiZXJlZFJlZ3Mu
ZXhjbHVkZShSZWdpc3RlclNldDo6cmVzZXJ2ZWRIYXJkd2FyZVJlZ2lzdGVycygpKTsKICAgICBt
X2Nsb2JiZXJlZFJlZ3MuZXhjbHVkZShSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygp
KTsKKyAgICBtX2Nsb2JiZXJlZFJlZ3MuY2xlYXIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwor
ICAgIG1fY2xvYmJlcmVkUmVncy5jbGVhcihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOworICAg
IG1fY2xvYmJlcmVkUmVncy5jbGVhcihGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7CiB9CiAKIEND
YWxsU3BlY2lhbDo6fkNDYWxsU3BlY2lhbCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckNvZGUuaAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAgY2xhc3Mg
UHJvY2VkdXJlOwogCiBuYW1lc3BhY2UgQWlyIHsKIAorY2xhc3MgQmxvY2tJbnNlcnRpb25TZXQ7
CiBjbGFzcyBDQ2FsbFNwZWNpYWw7CiAKIC8vIFRoaXMgaXMgYW4gSVIgdGhhdCBpcyB2ZXJ5IGNs
b3NlIHRvIHRoZSBiYXJlIG1ldGFsLiBJdCByZXF1aXJlcyBhYm91dCA0MHggbW9yZSBieXRlcyB0
aGFuIHRoZQpAQCAtMzI0LDYgKzMyNSw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBmcmll
bmQgY2xhc3MgOjpKU0M6OkIzOjpQcm9jZWR1cmU7CisgICAgZnJpZW5kIGNsYXNzIEJsb2NrSW5z
ZXJ0aW9uU2V0OwogICAgIAogICAgIENvZGUoUHJvY2VkdXJlJik7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckN1c3RvbS5jcHAJKHJldmlzaW9uIDE5NTE3NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjgsMTEgKzI4LDM1IEBACiAKICNpZiBFTkFCTEUoQjNfSklUKQogCisjaW5jbHVkZSAi
QWlySW5zdElubGluZXMuaCIKICNpbmNsdWRlICJCM0NDYWxsVmFsdWUuaCIKICNpbmNsdWRlICJC
M1ZhbHVlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNw
YWNlIEFpciB7CiAKK2Jvb2wgUGF0Y2hDdXN0b206OmlzVmFsaWRGb3JtKEluc3QmIGluc3QpCit7
CisgICAgaWYgKGluc3QuYXJncy5zaXplKCkgPCAxKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKCFpbnN0LmFyZ3NbMF0uaXNTcGVjaWFsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAoIWluc3QuYXJnc1swXS5zcGVjaWFsKCktPmlzVmFsaWQoaW5zdCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBSZWdpc3RlclNldCBjbG9iYmVyZWRFYXJseSA9IGluc3QuZXh0
cmFFYXJseUNsb2JiZXJlZFJlZ3MoKTsKKyAgICBSZWdpc3RlclNldCBjbG9iYmVyZWRMYXRlID0g
aW5zdC5leHRyYUNsb2JiZXJlZFJlZ3MoKTsKKyAgICBib29sIG9rID0gdHJ1ZTsKKyAgICBpbnN0
LmZvckVhY2hUbXAoCisgICAgICAgIFsmXSAoVG1wJiB0bXAsIEFyZzo6Um9sZSByb2xlLCBBcmc6
OlR5cGUsIEFyZzo6V2lkdGgpIHsKKyAgICAgICAgICAgIGlmICghdG1wLmlzUmVnKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKEFyZzo6aXNMYXRlRGVmKHJvbGUp
IHx8IEFyZzo6aXNMYXRlVXNlKHJvbGUpKQorICAgICAgICAgICAgICAgIG9rICY9ICFjbG9iYmVy
ZWRMYXRlLmdldCh0bXAucmVnKCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IG9rICY9ICFjbG9iYmVyZWRFYXJseS5nZXQodG1wLnJlZygpKTsKKyAgICAgICAgfSk7CisgICAg
cmV0dXJuIG9rOworfQorCiBib29sIENDYWxsQ3VzdG9tOjppc1ZhbGlkRm9ybShJbnN0JiBpbnN0
KQogewogICAgIENDYWxsVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW4tPmFzPENDYWxsVmFsdWU+
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckN1c3RvbS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ3VzdG9tLmgJKHJldmlz
aW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ3VzdG9tLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTcxLDE0ICs3MSw3IEBAIHN0cnVjdCBQYXRjaEN1c3RvbSB7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkRm9y
bShJbnN0JiBpbnN0KQotICAgIHsKLSAgICAgICAgaWYgKGluc3QuYXJncy5zaXplKCkgPCAxKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIWluc3QuYXJnc1swXS5pc1Nw
ZWNpYWwoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIGluc3Qu
YXJnc1swXS5zcGVjaWFsKCktPmlzVmFsaWQoaW5zdCk7Ci0gICAgfQorICAgIHN0YXRpYyBib29s
IGlzVmFsaWRGb3JtKEluc3QmIGluc3QpOwogCiAgICAgc3RhdGljIGJvb2wgYWRtaXRzU3RhY2so
SW5zdCYgaW5zdCwgdW5zaWduZWQgYXJnSW5kZXgpCiAgICAgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJFbWl0U2h1ZmZsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbWl0U2h1ZmZsZS5jcHAJKHJldmlzaW9uIDE5NTE3
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCwxNCBAQCB2b2lkIFNodWZmbGVQYWlyOjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpCiAgICAgb3V0LnByaW50KHdpZHRoKCksICI6Iiwgc3JjKCksICI9PiIs
IGRzdCgpKTsKIH0KIAorSW5zdCBjcmVhdGVTaHVmZmxlKFZhbHVlKiBvcmlnaW4sIGNvbnN0IFZl
Y3RvcjxTaHVmZmxlUGFpcj4mIHBhaXJzKQoreworICAgIEluc3QgcmVzdWx0KFNodWZmbGUsIG9y
aWdpbik7CisgICAgZm9yIChjb25zdCBTaHVmZmxlUGFpciYgcGFpciA6IHBhaXJzKQorICAgICAg
ICByZXN1bHQuYXBwZW5kKHBhaXIuc3JjKCksIHBhaXIuZHN0KCksIEFyZzo6d2lkdGhBcmcocGFp
ci53aWR0aCgpKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogVmVjdG9yPEluc3Q+IGVtaXRT
aHVmZmxlKAogICAgIFZlY3RvcjxTaHVmZmxlUGFpcj4gcGFpcnMsIHN0ZDo6YXJyYXk8QXJnLCAy
PiBzY3JhdGNoZXMsIEFyZzo6VHlwZSB0eXBlLCBWYWx1ZSogb3JpZ2luKQogewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbWl0U2h1ZmZsZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuaAkocmV2aXNpb24g
MTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbWl0U2h1ZmZsZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2Niw5IEBAIHByaXZhdGU6CiAgICAgQXJnOjpXaWR0
aCBtX3dpZHRoIHsgQXJnOjpXaWR0aDggfTsKIH07CiAKKy8vIENyZWF0ZSBhIFNodWZmbGUgaW5z
dHJ1Y3Rpb24uCitJbnN0IGNyZWF0ZVNodWZmbGUoVmFsdWUqIG9yaWdpbiwgY29uc3QgVmVjdG9y
PFNodWZmbGVQYWlyPiYpOworCiAvLyBQZXJmb3JtIGEgc2h1ZmZsZSBvZiBhIGdpdmVuIHR5cGUu
IFRoZSBzY3JhdGNoIGFyZ3VtZW50IGlzIG1hbmRhdG9yeS4gWW91IHNob3VsZCBwYXNzIGl0IGFz
CiAvLyBmb2xsb3dzOiBJZiB5b3Uga25vdyB0aGF0IHlvdSBoYXZlIHNjcmF0Y2ggcmVnaXN0ZXJz
IG9yIHRlbXBvcmFyaWVzIGF2YWlsYWJsZSAtIHRoYXQgaXMsIHRoZXkncmUKIC8vIHJlZ2lzdGVy
cyB0aGF0IGFyZSBub3QgbWVudGlvbmVkIGluIHRoZSBzaHVmZmxlLCBoYXZlIHRoZSBzYW1lIHR5
cGUgYXMgdGhlIHNodWZmbGUsIGFuZCBhcmUgbm90CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckZpeE9idmlvdXNTcGlsbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4T2J2aW91c1NwaWxscy5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeE9idmlvdXNTcGlsbHMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFp
ckZpeE9idmlvdXNTcGlsbHMuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJB
aXJDb2RlLmgiCisjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKKyNpbmNsdWRlICJBaXJQaGFz
ZVNjb3BlLmgiCisjaW5jbHVkZSAiQjNJbmRleE1hcC5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVt
cC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisK
K25hbWVzcGFjZSB7CisKK2Jvb2wgdmVyYm9zZSA9IGZhbHNlOworCitjbGFzcyBGaXhPYnZpb3Vz
U3BpbGxzIHsKK3B1YmxpYzoKKyAgICBGaXhPYnZpb3VzU3BpbGxzKENvZGUmIGNvZGUpCisgICAg
ICAgIDogbV9jb2RlKGNvZGUpCisgICAgICAgICwgbV9hdEhlYWQoY29kZS5zaXplKCkpCisgICAg
eworICAgIH0KKworICAgIHZvaWQgcnVuKCkKKyAgICB7CisgICAgICAgIGlmICh2ZXJib3NlKQor
ICAgICAgICAgICAgZGF0YUxvZygiQ29kZSBiZWZvcmUgZml4T2J2aW91c1NwaWxsczpcbiIsIG1f
Y29kZSk7CisgICAgICAgIAorICAgICAgICBjb21wdXRlQWxpYXNlcygpOworICAgICAgICBmaXhD
b2RlKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgY29tcHV0ZUFsaWFzZXMoKQorICAg
IHsKKyAgICAgICAgbV9hdEhlYWRbbV9jb2RlWzBdXS53YXNWaXNpdGVkID0gdHJ1ZTsKKyAgICAg
ICAgCisgICAgICAgIGJvb2wgY2hhbmdlZCA9IHRydWU7CisgICAgICAgIHdoaWxlIChjaGFuZ2Vk
KSB7CisgICAgICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsKKyAgICAgICAgICAgICAgICBt
X2Jsb2NrID0gYmxvY2s7CisgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IG1fYXRIZWFkW2Jsb2Nr
XTsKKyAgICAgICAgICAgICAgICBpZiAoIW1fc3RhdGUud2FzVmlzaXRlZCkKKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiRXhlY3V0aW5nIGJsb2NrICIsICptX2Jsb2NrLCAiOiAi
LCBtX3N0YXRlLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3Ig
KG1faW5zdEluZGV4ID0gMDsgbV9pbnN0SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK21faW5zdElu
ZGV4KQorICAgICAgICAgICAgICAgICAgICBleGVjdXRlSW5zdCgpOworCisgICAgICAgICAgICAg
ICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29yQmxvY2tzKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgU3RhdGUmIHRvU3RhdGUgPSBtX2F0SGVhZFtzdWNjZXNz
b3JdOworICAgICAgICAgICAgICAgICAgICBpZiAodG9TdGF0ZS53YXNWaXNpdGVkKQorICAgICAg
ICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSB0b1N0YXRlLm1lcmdlKG1fc3RhdGUpOworICAg
ICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvU3RhdGUg
PSBtX3N0YXRlOworICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGZpeENvZGUoKQorICAgIHsKKyAgICAgICAgZm9yIChC
YXNpY0Jsb2NrKiBibG9jayA6IG1fY29kZSkgeworICAgICAgICAgICAgbV9ibG9jayA9IGJsb2Nr
OworICAgICAgICAgICAgbV9zdGF0ZSA9IG1fYXRIZWFkW2Jsb2NrXTsKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKG1fc3RhdGUud2FzVmlzaXRlZCk7CisKKyAgICAgICAgICAgIGZvciAobV9p
bnN0SW5kZXggPSAwOyBtX2luc3RJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbV9pbnN0SW5kZXgp
IHsKKyAgICAgICAgICAgICAgICBmaXhJbnN0KCk7CisgICAgICAgICAgICAgICAgZXhlY3V0ZUlu
c3QoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgZXhlY3V0
ZUluc3QoKQorICAgIHsKKyAgICAgICAgSW5zdCYgaW5zdCA9IG1fYmxvY2stPmF0KG1faW5zdElu
ZGV4KTsKKworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICBF
eGVjdXRpbmcgIiwgaW5zdCwgIjogIiwgbV9zdGF0ZSwgIlxuIik7CisKKyAgICAgICAgSW5zdDo6
Zm9yRWFjaERlZldpdGhFeHRyYUNsb2JiZXJlZFJlZ3M8QXJnPigKKyAgICAgICAgICAgICZpbnN0
LCAmaW5zdCwKKyAgICAgICAgICAgIFsmXSAoY29uc3QgQXJnJiBhcmcsIEFyZzo6Um9sZSwgQXJn
OjpUeXBlLCBBcmc6OldpZHRoKSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgQ2xvYmJlcmluZyAiLCBhcmcsICJcbiIp
OworICAgICAgICAgICAgICAgIG1fc3RhdGUuY2xvYmJlcihhcmcpOworICAgICAgICAgICAgfSk7
CisKKyAgICAgICAgc3dpdGNoIChpbnN0Lm9wY29kZSkgeworICAgICAgICBjYXNlIE1vdmU6Cisg
ICAgICAgICAgICBpZiAoaW5zdC5hcmdzWzBdLmlzU29tZUltbSgpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGluc3QuYXJnc1sxXS5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICBtX3N0YXRl
LmFkZEFsaWFzKFJlZ0NvbnN0KGluc3QuYXJnc1sxXS5yZWcoKSwgaW5zdC5hcmdzWzBdLnZhbHVl
KCkpKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChpc1NwaWxsU2xvdChpbnN0LmFyZ3NbMV0p
KQorICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLmFkZEFsaWFzKFNsb3RDb25zdChpbnN0LmFy
Z3NbMV0uc3RhY2tTbG90KCksIGluc3QuYXJnc1swXS52YWx1ZSgpKSk7CisgICAgICAgICAgICB9
IGVsc2UgaWYgKGlzU3BpbGxTbG90KGluc3QuYXJnc1swXSkgJiYgaW5zdC5hcmdzWzFdLmlzUmVn
KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoT3B0aW9uYWw8aW50NjRfdD4gY29uc3RhbnQgPSBt
X3N0YXRlLmNvbnN0YW50Rm9yKGluc3QuYXJnc1swXSkpCisgICAgICAgICAgICAgICAgICAgIG1f
c3RhdGUuYWRkQWxpYXMoUmVnQ29uc3QoaW5zdC5hcmdzWzFdLnJlZygpLCAqY29uc3RhbnQpKTsK
KyAgICAgICAgICAgICAgICBtX3N0YXRlLmFkZEFsaWFzKAorICAgICAgICAgICAgICAgICAgICBS
ZWdTbG90KGluc3QuYXJnc1sxXS5yZWcoKSwgaW5zdC5hcmdzWzBdLnN0YWNrU2xvdCgpLCBSZWdT
bG90OjpBbGxCaXRzKSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGluc3QuYXJnc1swXS5pc1Jl
ZygpICYmIGlzU3BpbGxTbG90KGluc3QuYXJnc1sxXSkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
T3B0aW9uYWw8aW50NjRfdD4gY29uc3RhbnQgPSBtX3N0YXRlLmNvbnN0YW50Rm9yKGluc3QuYXJn
c1swXSkpCisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuYWRkQWxpYXMoU2xvdENvbnN0KGlu
c3QuYXJnc1sxXS5zdGFja1Nsb3QoKSwgKmNvbnN0YW50KSk7CisgICAgICAgICAgICAgICAgbV9z
dGF0ZS5hZGRBbGlhcygKKyAgICAgICAgICAgICAgICAgICAgUmVnU2xvdChpbnN0LmFyZ3NbMF0u
cmVnKCksIGluc3QuYXJnc1sxXS5zdGFja1Nsb3QoKSwgUmVnU2xvdDo6QWxsQml0cykpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBNb3ZlMzI6Cisg
ICAgICAgICAgICBpZiAoaW5zdC5hcmdzWzBdLmlzU29tZUltbSgpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGluc3QuYXJnc1sxXS5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICBtX3N0YXRl
LmFkZEFsaWFzKFJlZ0NvbnN0KGluc3QuYXJnc1sxXS5yZWcoKSwgc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KGluc3QuYXJnc1swXS52YWx1ZSgpKSkpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlz
U3BpbGxTbG90KGluc3QuYXJnc1sxXSkpCisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuYWRk
QWxpYXMoU2xvdENvbnN0KGluc3QuYXJnc1sxXS5zdGFja1Nsb3QoKSwgc3RhdGljX2Nhc3Q8dWlu
dDMyX3Q+KGluc3QuYXJnc1swXS52YWx1ZSgpKSkpOworICAgICAgICAgICAgfSBlbHNlIGlmIChp
c1NwaWxsU2xvdChpbnN0LmFyZ3NbMF0pICYmIGluc3QuYXJnc1sxXS5pc1JlZygpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKE9wdGlvbmFsPGludDY0X3Q+IGNvbnN0YW50ID0gbV9zdGF0ZS5jb25z
dGFudEZvcihpbnN0LmFyZ3NbMF0pKQorICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLmFkZEFs
aWFzKFJlZ0NvbnN0KGluc3QuYXJnc1sxXS5yZWcoKSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KCpj
b25zdGFudCkpKTsKKyAgICAgICAgICAgICAgICBtX3N0YXRlLmFkZEFsaWFzKAorICAgICAgICAg
ICAgICAgICAgICBSZWdTbG90KGluc3QuYXJnc1sxXS5yZWcoKSwgaW5zdC5hcmdzWzBdLnN0YWNr
U2xvdCgpLCBSZWdTbG90OjpaRXh0MzIpKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5zdC5h
cmdzWzBdLmlzUmVnKCkgJiYgaXNTcGlsbFNsb3QoaW5zdC5hcmdzWzFdKSkgeworICAgICAgICAg
ICAgICAgIGlmIChPcHRpb25hbDxpbnQ2NF90PiBjb25zdGFudCA9IG1fc3RhdGUuY29uc3RhbnRG
b3IoaW5zdC5hcmdzWzBdKSkKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5hZGRBbGlhcyhT
bG90Q29uc3QoaW5zdC5hcmdzWzFdLnN0YWNrU2xvdCgpLCBzdGF0aWNfY2FzdDxpbnQzMl90Pigq
Y29uc3RhbnQpKSk7CisgICAgICAgICAgICAgICAgbV9zdGF0ZS5hZGRBbGlhcygKKyAgICAgICAg
ICAgICAgICAgICAgUmVnU2xvdChpbnN0LmFyZ3NbMF0ucmVnKCksIGluc3QuYXJnc1sxXS5zdGFj
a1Nsb3QoKSwgUmVnU2xvdDo6TWF0Y2gzMikpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgfQorCisgICAgdm9pZCBmaXhJbnN0KCkKKyAgICB7CisgICAgICAgIEluc3QmIGluc3Qg
PSBtX2Jsb2NrLT5hdChtX2luc3RJbmRleCk7CisKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgICAgICBkYXRhTG9nKCJGaXhpbmcgaW5zdCAiLCBpbnN0LCAiOiAiLCBtX3N0YXRlLCAiXG4i
KTsKKworICAgICAgICAvLyBDcmVhdGUgYSBjb3B5IGluIGNhc2Ugd2UgaW52YWxpZGF0ZSB0aGUg
aW5zdHJ1Y3Rpb24uIFRoYXQgZG9lc24ndCBoYXBwZW4gb2Z0ZW4uCisgICAgICAgIEluc3QgaW5z
dENvcHkgPSBpbnN0OworCisgICAgICAgIC8vIFRoZSBnb2FsIGlzIHRvIHJlcGxhY2UgcmVmZXJl
bmNlcyB0byBzdGFjayBzbG90cy4gV2Ugb25seSBjYXJlIGFib3V0IGVhcmx5IHVzZXMuIFdlIGNh
bid0CisgICAgICAgIC8vIGhhbmRsZSBVc2VEZWZzLiBXZSBjb3VsZCB0ZWFjaCB0aGlzIHRvIGhh
bmRsZSBVc2VEZWZzIGlmIHdlIGluc2VydGVkIGEgc3RvcmUgaW5zdHJ1Y3Rpb24KKyAgICAgICAg
Ly8gYWZ0ZXIgYW5kIHdlIHByb3ZlZCB0aGF0IHRoZSByZWdpc3RlciBhbGlhc2VkIHRvIHRoZSBz
dGFjayBzbG90IGRpZXMgaGVyZS4gV2UgY2FuIGdldCB0aGF0CisgICAgICAgIC8vIGluZm9ybWF0
aW9uIGZyb20gdGhlIGxpdmVuZXNzIGFuYWx5c2lzLiBXZSBhbHNvIGNhbid0IGhhbmRsZSBsYXRl
IHVzZXMsIGJlY2F1c2Ugd2UgZG9uJ3QKKyAgICAgICAgLy8gbG9vayBhdCBsYXRlIGNsb2JiZXJz
IHdoZW4gZG9pbmcgdGhpcy4KKyAgICAgICAgYm9vbCBkaWRUaGluZ3MgPSBmYWxzZTsKKyAgICAg
ICAgYXV0byBoYW5kbGVBcmcgPSBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpU
eXBlLCBBcmc6OldpZHRoIHdpZHRoKSB7CisgICAgICAgICAgICBpZiAoIWlzU3BpbGxTbG90KGFy
ZykpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKCFBcmc6OmlzRWFy
bHlVc2Uocm9sZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKEFy
Zzo6aXNBbnlEZWYocm9sZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
CisgICAgICAgICAgICAvLyBUcnkgdG8gZ2V0IGEgcmVnaXN0ZXIgaWYgYXQgYWxsIHBvc3NpYmxl
LgorICAgICAgICAgICAgaWYgKGNvbnN0IFJlZ1Nsb3QqIGFsaWFzID0gbV9zdGF0ZS5nZXRSZWdT
bG90KGFyZy5zdGFja1Nsb3QoKSkpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHdpZHRoKSB7
CisgICAgICAgICAgICAgICAgY2FzZSBBcmc6OldpZHRoNjQ6CisgICAgICAgICAgICAgICAgICAg
IGlmIChhbGlhcy0+bW9kZSAhPSBSZWdTbG90OjpBbGxCaXRzKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBSZXBsYWNpbmcgIiwgYXJnLCAiIHdpdGggIiwg
YWxpYXMtPnJlZywgIlxuIik7CisgICAgICAgICAgICAgICAgICAgIGFyZyA9IFRtcChhbGlhcy0+
cmVnKTsKKyAgICAgICAgICAgICAgICAgICAgZGlkVGhpbmdzID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDMyOgorICAg
ICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGFMb2coIiAgICBSZXBsYWNpbmcgIiwgYXJnLCAiIHdpdGggIiwgYWxpYXMtPnJlZywgIiAoc3Vi
d2lkdGggY2FzZSlcbiIpOworICAgICAgICAgICAgICAgICAgICBhcmcgPSBUbXAoYWxpYXMtPnJl
Zyk7CisgICAgICAgICAgICAgICAgICAgIGRpZFRoaW5ncyA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAvLyBSZXZlcnQgdG8gaW1tZWRpYXRlIGlmIHRoYXQgZGlkbid0IHdvcmsuCisgICAgICAg
ICAgICBpZiAoY29uc3QgU2xvdENvbnN0KiBhbGlhcyA9IG1fc3RhdGUuZ2V0U2xvdENvbnN0KGFy
Zy5zdGFja1Nsb3QoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZygiICAgIFJlcGxhY2luZyAiLCBhcmcsICIgd2l0aCBjb25zdGFu
dCAiLCBhbGlhcy0+Y29uc3RhbnQsICJcbiIpOworICAgICAgICAgICAgICAgIGlmIChBcmc6Omlz
VmFsaWRJbW1Gb3JtKGFsaWFzLT5jb25zdGFudCkpCisgICAgICAgICAgICAgICAgICAgIGFyZyA9
IEFyZzo6aW1tKGFsaWFzLT5jb25zdGFudCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICAgICBhcmcgPSBBcmc6OmltbTY0KGFsaWFzLT5jb25zdGFudCk7CisgICAgICAg
ICAgICAgICAgZGlkVGhpbmdzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICBpbnN0LmZvckVhY2hBcmco
aGFuZGxlQXJnKTsKKyAgICAgICAgaWYgKCFkaWRUaGluZ3MgfHwgaW5zdC5pc1ZhbGlkRm9ybSgp
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgLy8gV2UgaW50cm9kdWNl
ZCBzb21ldGhpbmcgaW52YWxpZCBhbG9uZyB0aGUgd2F5LiBCYWNrIHVwIGFuZCBjYXJlZnVsbHkg
aGFuZGxlIGVhY2ggYXJndW1lbnQuCisgICAgICAgIGluc3QgPSBpbnN0Q29weTsKKyAgICAgICAg
QVNTRVJUKGluc3QuaXNWYWxpZEZvcm0oKSk7CisgICAgICAgIGluc3QuZm9yRWFjaEFyZygKKyAg
ICAgICAgICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgdHlwZSwg
QXJnOjpXaWR0aCB3aWR0aCkgeworICAgICAgICAgICAgICAgIEFyZyBhcmdDb3B5ID0gYXJnOwor
ICAgICAgICAgICAgICAgIGhhbmRsZUFyZyhhcmcsIHJvbGUsIHR5cGUsIHdpZHRoKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIWluc3QuaXNWYWxpZEZvcm0oKSkKKyAgICAgICAgICAgICAgICAgICAg
YXJnID0gYXJnQ29weTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
Ym9vbCBpc1NwaWxsU2xvdChjb25zdCBBcmcmIGFyZykKKyAgICB7CisgICAgICAgIHJldHVybiBh
cmcuaXNTdGFjaygpICYmICFhcmcuc3RhY2tTbG90KCktPmlzTG9ja2VkKCk7CisgICAgfQorICAg
IAorICAgIHN0cnVjdCBSZWdDb25zdCB7CisgICAgICAgIFJlZ0NvbnN0KCkKKyAgICAgICAgewor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBSZWdDb25zdChSZWcgcmVnLCBpbnQ2NF90IGNv
bnN0YW50KQorICAgICAgICAgICAgOiByZWcocmVnKQorICAgICAgICAgICAgLCBjb25zdGFudChj
b25zdGFudCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgZXhwbGljaXQgb3BlcmF0
b3IgYm9vbCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhIXJlZzsKKyAg
ICAgICAgfQorCisgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAg
ICAgICB7CisgICAgICAgICAgICBvdXQucHJpbnQocmVnLCAiLT4iLCBjb25zdGFudCk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIFJlZyByZWc7CisgICAgICAgIGludDY0X3QgY29uc3Rh
bnQgeyAwIH07CisgICAgfTsKKworICAgIHN0cnVjdCBSZWdTbG90IHsKKyAgICAgICAgZW51bSBN
b2RlIDogaW50OF90IHsKKyAgICAgICAgICAgIEFsbEJpdHMsCisgICAgICAgICAgICBaRXh0MzIs
IC8vIFJlZ2lzdGVyIGNvbnRhaW5zIHplcm8tZXh0ZW5kZWQgY29udGVudHMgb2Ygc3RhY2sgc2xv
dC4KKyAgICAgICAgICAgIE1hdGNoMzIgLy8gTG93IDMyIGJpdHMgb2YgcmVnaXN0ZXIgbWF0Y2gg
bG93IDMyIGJpdHMgb2Ygc3RhY2sgc2xvdC4KKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAg
IFJlZ1Nsb3QoKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBSZWdTbG90KFJlZyBy
ZWcsIFN0YWNrU2xvdCogc2xvdCwgTW9kZSBtb2RlKQorICAgICAgICAgICAgOiBzbG90KHNsb3Qp
CisgICAgICAgICAgICAsIHJlZyhyZWcpCisgICAgICAgICAgICAsIG1vZGUobW9kZSkKKyAgICAg
ICAgeworICAgICAgICB9CisKKyAgICAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzbG90ICYmIHJlZzsKKyAgICAgICAgfQor
CisgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgICAgICB7Cisg
ICAgICAgICAgICBvdXQucHJpbnQocG9pbnRlckR1bXAoc2xvdCksICItPiIsIHJlZyk7CisgICAg
ICAgICAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICAgICAgICAgIGNhc2UgQWxsQml0czoKKyAgICAg
ICAgICAgICAgICBvdXQucHJpbnQoIihBbGxCaXRzKSIpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBaRXh0MzI6CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCIo
WkV4dDMyKSIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBNYXRj
aDMyOgorICAgICAgICAgICAgICAgIG91dC5wcmludCgiKE1hdGNoMzIpIik7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IFN0YWNrU2xvdCogc2xvdCB7IG51bGxwdHIgfTsKKyAgICAgICAgUmVnIHJlZzsKKyAgICAgICAg
TW9kZSBtb2RlIHsgQWxsQml0cyB9OworICAgIH07CisKKyAgICBzdHJ1Y3QgU2xvdENvbnN0IHsK
KyAgICAgICAgU2xvdENvbnN0KCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgU2xv
dENvbnN0KFN0YWNrU2xvdCogc2xvdCwgaW50NjRfdCBjb25zdGFudCkKKyAgICAgICAgICAgIDog
c2xvdChzbG90KQorICAgICAgICAgICAgLCBjb25zdGFudChjb25zdGFudCkKKyAgICAgICAgewor
ICAgICAgICB9CisKKyAgICAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzbG90OworICAgICAgICB9CisKKyAgICAgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIG91
dC5wcmludChwb2ludGVyRHVtcChzbG90KSwgIi0+IiwgY29uc3RhbnQpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBTdGFja1Nsb3QqIHNsb3QgeyBudWxscHRyIH07CisgICAgICAgIGlu
dDY0X3QgY29uc3RhbnQgeyAwIH07CisgICAgfTsKKworICAgIHN0cnVjdCBTdGF0ZSB7CisgICAg
ICAgIHZvaWQgYWRkQWxpYXMoY29uc3QgUmVnQ29uc3QmIG5ld0FsaWFzKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZWdDb25zdC5hcHBlbmQobmV3QWxpYXMpOworICAgICAgICB9CisgICAgICAg
IHZvaWQgYWRkQWxpYXMoY29uc3QgUmVnU2xvdCYgbmV3QWxpYXMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJlZ1Nsb3QuYXBwZW5kKG5ld0FsaWFzKTsKKyAgICAgICAgfQorICAgICAgICB2b2lk
IGFkZEFsaWFzKGNvbnN0IFNsb3RDb25zdCYgbmV3QWxpYXMpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHNsb3RDb25zdC5hcHBlbmQobmV3QWxpYXMpOworICAgICAgICB9CisKKyAgICAgICAgY29u
c3QgUmVnQ29uc3QqIGdldFJlZ0NvbnN0KFJlZyByZWcpIGNvbnN0CisgICAgICAgIHsKKyAgICAg
ICAgICAgIGZvciAoY29uc3QgUmVnQ29uc3QmIGFsaWFzIDogcmVnQ29uc3QpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoYWxpYXMucmVnID09IHJlZykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
ICZhbGlhczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICB9CisKKyAgICAgICAgY29uc3QgUmVnU2xvdCogZ2V0UmVnU2xvdChSZWcgcmVnKSBjb25z
dAorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGNvbnN0IFJlZ1Nsb3QmIGFsaWFzIDogcmVn
U2xvdCkgeworICAgICAgICAgICAgICAgIGlmIChhbGlhcy5yZWcgPT0gcmVnKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gJmFsaWFzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBSZWdTbG90KiBnZXRSZWdT
bG90KFN0YWNrU2xvdCogc2xvdCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChj
b25zdCBSZWdTbG90JiBhbGlhcyA6IHJlZ1Nsb3QpIHsKKyAgICAgICAgICAgICAgICBpZiAoYWxp
YXMuc2xvdCA9PSBzbG90KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gJmFsaWFzOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKworICAg
ICAgICBjb25zdCBSZWdTbG90KiBnZXRSZWdTbG90KFJlZyByZWcsIFN0YWNrU2xvdCogc2xvdCkg
Y29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChjb25zdCBSZWdTbG90JiBhbGlhcyA6
IHJlZ1Nsb3QpIHsKKyAgICAgICAgICAgICAgICBpZiAoYWxpYXMucmVnID09IHJlZyAmJiBhbGlh
cy5zbG90ID09IHNsb3QpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAmYWxpYXM7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAg
ICAgIGNvbnN0IFNsb3RDb25zdCogZ2V0U2xvdENvbnN0KFN0YWNrU2xvdCogc2xvdCkgY29uc3QK
KyAgICAgICAgeworICAgICAgICAgICAgZm9yIChjb25zdCBTbG90Q29uc3QmIGFsaWFzIDogc2xv
dENvbnN0KSB7CisgICAgICAgICAgICAgICAgaWYgKGFsaWFzLnNsb3QgPT0gc2xvdCkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuICZhbGlhczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgT3B0aW9uYWw8aW50NjRfdD4g
Y29uc3RhbnRGb3IoY29uc3QgQXJnJiBhcmcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChh
cmcuaXNSZWcoKSkgeworICAgICAgICAgICAgICAgIGlmIChjb25zdCBSZWdDb25zdCogYWxpYXMg
PSBnZXRSZWdDb25zdChhcmcucmVnKCkpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWxp
YXMtPmNvbnN0YW50OworICAgICAgICAgICAgICAgIHJldHVybiBOdWxsb3B0OworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKGFyZy5pc1N0YWNrKCkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoY29uc3QgU2xvdENvbnN0KiBhbGlhcyA9IGdldFNsb3RDb25zdChhcmcuc3RhY2tTbG90KCkp
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWxpYXMtPmNvbnN0YW50OworICAgICAgICAg
ICAgICAgIHJldHVybiBOdWxsb3B0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IE51bGxvcHQ7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGNsb2JiZXIoY29uc3QgQXJnJiBh
cmcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChhcmcuaXNSZWcoKSkgeworICAgICAgICAg
ICAgICAgIHJlZ0NvbnN0LnJlbW92ZUFsbE1hdGNoaW5nKAorICAgICAgICAgICAgICAgICAgICBb
Jl0gKGNvbnN0IFJlZ0NvbnN0JiBhbGlhcykgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gYWxpYXMucmVnID09IGFyZy5yZWcoKTsKKyAgICAgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICAgICAgcmVnU2xvdC5yZW1vdmVBbGxNYXRjaGluZygKKyAgICAgICAg
ICAgICAgICAgICAgWyZdIChjb25zdCBSZWdTbG90JiBhbGlhcykgLT4gYm9vbCB7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gYWxpYXMucmVnID09IGFyZy5yZWcoKTsKKyAgICAgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKGFyZy5pc1N0YWNrKCkpIHsKKyAgICAgICAgICAgICAgICBzbG90Q29u
c3QucmVtb3ZlQWxsTWF0Y2hpbmcoCisgICAgICAgICAgICAgICAgICAgIFsmXSAoY29uc3QgU2xv
dENvbnN0JiBhbGlhcykgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
YWxpYXMuc2xvdCA9PSBhcmcuc3RhY2tTbG90KCk7CisgICAgICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgICAgIHJlZ1Nsb3QucmVtb3ZlQWxsTWF0Y2hpbmcoCisgICAgICAgICAgICAg
ICAgICAgIFsmXSAoY29uc3QgUmVnU2xvdCYgYWxpYXMpIC0+IGJvb2wgeworICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGFsaWFzLnNsb3QgPT0gYXJnLnN0YWNrU2xvdCgpOworICAgICAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGJv
b2wgbWVyZ2UoY29uc3QgU3RhdGUmIG90aGVyKQorICAgICAgICB7CisgICAgICAgICAgICBib29s
IGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgY2hhbmdlZCB8PSAh
IXJlZ0NvbnN0LnJlbW92ZUFsbE1hdGNoaW5nKAorICAgICAgICAgICAgICAgIFsmXSAoUmVnQ29u
c3QmIGFsaWFzKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVnQ29uc3Qq
IG90aGVyQWxpYXMgPSBvdGhlci5nZXRSZWdDb25zdChhbGlhcy5yZWcpOworICAgICAgICAgICAg
ICAgICAgICBpZiAoIW90aGVyQWxpYXMpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFsaWFzLmNvbnN0YW50ICE9IG90aGVyQWxp
YXMtPmNvbnN0YW50KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAg
ICAgICAgICAgY2hhbmdlZCB8PSAhIXNsb3RDb25zdC5yZW1vdmVBbGxNYXRjaGluZygKKyAgICAg
ICAgICAgICAgICBbJl0gKFNsb3RDb25zdCYgYWxpYXMpIC0+IGJvb2wgeworICAgICAgICAgICAg
ICAgICAgICBjb25zdCBTbG90Q29uc3QqIG90aGVyQWxpYXMgPSBvdGhlci5nZXRTbG90Q29uc3Qo
YWxpYXMuc2xvdCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghb3RoZXJBbGlhcykKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICBpZiAo
YWxpYXMuY29uc3RhbnQgIT0gb3RoZXJBbGlhcy0+Y29uc3RhbnQpCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBjaGFuZ2VkIHw9ICEhcmVnU2xvdC5y
ZW1vdmVBbGxNYXRjaGluZygKKyAgICAgICAgICAgICAgICBbJl0gKFJlZ1Nsb3QmIGFsaWFzKSAt
PiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVnU2xvdCogb3RoZXJBbGlhcyA9
IG90aGVyLmdldFJlZ1Nsb3QoYWxpYXMucmVnLCBhbGlhcy5zbG90KTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFvdGhlckFsaWFzKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICAgICAgICAgIGlmIChhbGlhcy5tb2RlICE9IFJlZ1Nsb3Q6Ok1hdGNo
MzIgJiYgYWxpYXMubW9kZSAhPSBvdGhlckFsaWFzLT5tb2RlKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBhbGlhcy5tb2RlID0gUmVnU2xvdDo6TWF0Y2gzMjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAg
ICAgcmV0dXJuIGNoYW5nZWQ7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgb3V0LnByaW50KAorICAg
ICAgICAgICAgICAgICJ7cmVnQ29uc3QgPSBbIiwgbGlzdER1bXAocmVnQ29uc3QpLCAiXSwgc2xv
dENvbnN0ID0gWyIsIGxpc3REdW1wKHNsb3RDb25zdCksCisgICAgICAgICAgICAgICAgIl0sIHJl
Z1Nsb3QgPSBbIiwgbGlzdER1bXAocmVnU2xvdCksICJdLCB3YXNWaXNpdGVkID0gIiwgd2FzVmlz
aXRlZCwgIn0iKTsKKyAgICAgICAgfQorCisgICAgICAgIFZlY3RvcjxSZWdDb25zdD4gcmVnQ29u
c3Q7CisgICAgICAgIFZlY3RvcjxTbG90Q29uc3Q+IHNsb3RDb25zdDsKKyAgICAgICAgVmVjdG9y
PFJlZ1Nsb3Q+IHJlZ1Nsb3Q7CisgICAgICAgIGJvb2wgd2FzVmlzaXRlZCB7IGZhbHNlIH07Cisg
ICAgfTsKKworICAgIENvZGUmIG1fY29kZTsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBTdGF0
ZT4gbV9hdEhlYWQ7CisgICAgU3RhdGUgbV9zdGF0ZTsKKyAgICBCYXNpY0Jsb2NrKiBtX2Jsb2Nr
IHsgbnVsbHB0ciB9OworICAgIHVuc2lnbmVkIG1faW5zdEluZGV4IHsgMCB9OworfTsKKworfSAv
LyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgZml4T2J2aW91c1NwaWxscyhDb2RlJiBjb2Rl
KQoreworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAiZml4T2J2aW91c1NwaWxscyIp
OworCisgICAgRml4T2J2aW91c1NwaWxscyBmaXhPYnZpb3VzU3BpbGxzKGNvZGUpOworICAgIGZp
eE9idmlvdXNTcGlsbHMucnVuKCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpB
aXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyRml4T2J2aW91c1NwaWxscy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4T2J2aW91c1NwaWxscy5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhPYnZpb3VzU3BpbGxzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQWlyRml4T2J2aW91c1NwaWxsc19oCisjZGVmaW5l
IEFpckZpeE9idmlvdXNTcGlsbHNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCisv
LyBUaGlzIGlzIGEgZm9yd2FyZCBmbG93IHBoYXNlIHRoYXQgdHJhY2tzIGVxdWl2YWxlbmNlIGJl
dHdlZW4gc3BpbGxzIHNsb3RzIGFuZCByZWdpc3RlcnMuIEl0CisvLyByZW1vdmVzIGxvYWRzIGZy
b20gc3BpbGwgc2xvdHMgaW4gY2FzZXMgd2hlbiB0aGUgY29udGVudHMgb2YgdGhlIHNwaWxsIHNs
b3QgY2FuIGJlIGZvdW5kIGluIChvcgorLy8gY29tcHV0ZWQgZnJvbSkgYSByZWdpc3Rlci4KK3Zv
aWQgZml4T2J2aW91c1NwaWxscyhDb2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
OjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJGaXhPYnZp
b3VzU3BpbGxzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhT
cGlsbFNsb3RaRGVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJGaXhTcGlsbFNsb3RaRGVmLmgJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyRml4U3BpbGxTbG90WkRlZi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDc4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2lmbmRlZiBBaXJGaXhTcGlsbFNsb3RaRGVmX2gKLSNkZWZpbmUgQWlyRml4U3BpbGxT
bG90WkRlZl9oCi0KLSNpbmNsdWRlICJBaXJDb2RlLmgiCi0jaW5jbHVkZSAiQWlySW5zZXJ0aW9u
U2V0LmgiCi0jaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKLQotbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBJc1NwaWxs
U2xvdD4KLXZvaWQgZml4U3BpbGxTbG90WkRlZihDb2RlJiBjb2RlLCBjb25zdCBJc1NwaWxsU2xv
dCYgaXNTcGlsbFNsb3QpCi17Ci0gICAgLy8gV2UgY291bGQgaGF2ZSBpbnRyb2R1Y2VkIFpEZWYn
cyB0byBTdGFja1Nsb3RzIHRoYXQgYXJlIHdpZGVyIHRoYW4gdGhlIGRlZi4gSW4gdGhhdCBjYXNl
LCB3ZQotICAgIC8vIG5lZWQgdG8gZW1pdCBjb2RlIHRvIHplcm8tZmlsbCB0aGUgdG9wIGJpdHMg
b2YgdGhlIFN0YWNrU2xvdC4KLSAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KGNvZGUpOwot
ICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaW5zdEluZGV4ID0gMDsgaW5zdEluZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbnN0SW5kZXgp
IHsKLSAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKLQotICAg
ICAgICAgICAgaW5zdC5mb3JFYWNoQXJnKAotICAgICAgICAgICAgICAgIFsmXSAoQXJnJiBhcmcs
IEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUsIEFyZzo6V2lkdGggd2lkdGgpIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCFBcmc6OmlzWkRlZihyb2xlKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmcuaXNTdGFjaygpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWlz
U3BpbGxTbG90KGFyZy5zdGFja1Nsb3QoKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhcmcuc3RhY2tTbG90KCktPmJ5dGVTaXplKCkg
PT0gQXJnOjpieXRlcyh3aWR0aCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgICAgICAgICAgICAgLy8gQ3VycmVudGx5IHdlIG9ubHkgaGFuZGxlIHRoaXMgc2lt
cGxlIGNhc2UgYmVjYXVzZSBpdCdzIHRoZSBvbmx5IG9uZSB0aGF0Ci0gICAgICAgICAgICAgICAg
ICAgIC8vIGFyaXNlczogWkRlZidzIGFyZSBvbmx5IDMyLWJpdCByaWdodCBub3cuIFNvLCB3aGVu
IHdlIGhpdCB0aGVzZQotICAgICAgICAgICAgICAgICAgICAvLyBhc3NlcnRpb25zIGl0IG1lYW5z
IHRoYXQgd2UgbmVlZCB0byBpbXBsZW1lbnQgdGhvc2Ugb3RoZXIga2luZHMgb2YgemVybwotICAg
ICAgICAgICAgICAgICAgICAvLyBmaWxscy4KLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoYXJnLnN0YWNrU2xvdCgpLT5ieXRlU2l6ZSgpID09IDgpOwotICAgICAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVCh3aWR0aCA9PSBBcmc6OldpZHRoMzIpOwotCi0gICAgICAgICAg
ICAgICAgICAgIC8vIFdlIHJlbHkgb24gdGhlIGZhY3QgdGhhdCB0aGVyZSBtdXN0IGJlIHNvbWUg
d2F5IHRvIG1vdmUgemVybyB0byBhIG1lbW9yeQotICAgICAgICAgICAgICAgICAgICAvLyBsb2Nh
dGlvbiB3aXRob3V0IGZpcnN0IGJ1cm5pbmcgYSByZWdpc3Rlci4gT24gQVJNLCB3ZSB3b3VsZCBk
byB0aGlzIHVzaW5nCi0gICAgICAgICAgICAgICAgICAgIC8vIHpyLgotICAgICAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChpc1ZhbGlkRm9ybShNb3ZlMzIsIEFyZzo6SW1tLCBBcmc6OlN0
YWNrKSk7Ci0gICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoCi0gICAgICAg
ICAgICAgICAgICAgICAgICBpbnN0SW5kZXggKyAxLCBNb3ZlMzIsIGluc3Qub3JpZ2luLCBBcmc6
OmltbSgwKSwgYXJnLndpdGhPZmZzZXQoNCkpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAg
ICB9Ci0gICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKLSAgICB9Ci19Ci0KLX0g
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKLQotI2VuZGlmIC8vIEFpckZpeFNwaWxsU2xv
dFpEZWZfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVy
YXRlLmNwcAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJHZW5lcmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDEwICszMSwxMiBAQAogI2lu
Y2x1ZGUgIkFpckFsbG9jYXRlU3RhY2suaCIKICNpbmNsdWRlICJBaXJDb2RlLmgiCiAjaW5jbHVk
ZSAiQWlyRWxpbWluYXRlRGVhZENvZGUuaCIKKyNpbmNsdWRlICJBaXJGaXhPYnZpb3VzU3BpbGxz
LmgiCiAjaW5jbHVkZSAiQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmgiCiAjaW5jbHVkZSAi
QWlyR2VuZXJhdGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJBaXJIYW5kbGVDYWxsZWVTYXZlcy5o
IgogI2luY2x1ZGUgIkFpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmgiCisjaW5jbHVkZSAi
QWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5oIgogI2luY2x1ZGUgIkFpckxvd2VyQWZ0ZXJSZWdBbGxv
Yy5oIgogI2luY2x1ZGUgIkFpckxvd2VyTWFjcm9zLmgiCiAjaW5jbHVkZSAiQWlyT3Bjb2RlVXRp
bHMuaCIKQEAgLTg0LDYgKzg2LDE2IEBAIHZvaWQgcHJlcGFyZUZvckdlbmVyYXRpb24oQ29kZSYg
Y29kZSkKICAgICBlbHNlCiAgICAgICAgIGl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nKGNvZGUp
OwogCisgICAgaWYgKE9wdGlvbnM6OmxvZ0FpclJlZ2lzdGVyUHJlc3N1cmUoKSkgeworICAgICAg
ICBkYXRhTG9nKCJSZWdpc3RlciBwcmVzc3VyZSBhZnRlciByZWdpc3RlciBhbGxvY2F0aW9uOlxu
Iik7CisgICAgICAgIGxvZ1JlZ2lzdGVyUHJlc3N1cmUoY29kZSk7CisgICAgfQorCisgICAgLy8g
VGhpcyByZXBsYWNlcyB1c2VzIG9mIHNwaWxsIHNsb3RzIHdpdGggcmVnaXN0ZXJzIG9yIGNvbnN0
YW50cyBpZiBwb3NzaWJsZS4gSXQgZG9lcyB0aGlzIGJ5CisgICAgLy8gbWluaW1pemluZyB0aGUg
YW1vdW50IHRoYXQgd2UgcGVydHVyYiB0aGUgYWxyZWFkeS1jaG9zZW4gcmVnaXN0ZXIgYWxsb2Nh
dGlvbi4gSXQgbWF5IGV4dGVuZAorICAgIC8vIHRoZSBsaXZlIHJhbmdlcyBvZiByZWdpc3RlcnMg
dGhvdWdoLgorICAgIGZpeE9idmlvdXNTcGlsbHMoY29kZSk7CisKICAgICBsb3dlckFmdGVyUmVn
QWxsb2MoY29kZSk7CiAKICAgICAvLyBQcmlvciB0byB0aGlzIHBvaW50IHRoZSBwcm9sb2d1ZSBh
bmQgZXBpbG9ndWUgaXMgaW1wbGljaXQuIFRoaXMgbWFrZXMgaXQgZXhwbGljaXQuIEl0IGFsc28K
QEAgLTEzMiw2ICsxNDQsMTcgQEAgdm9pZCBnZW5lcmF0ZShDb2RlJiBjb2RlLCBDQ2FsbEhlbHBl
cnMmIAogICAgIGlmIChjb2RlLmZyYW1lU2l6ZSgpKQogICAgICAgICBqaXQuYWRkUHRyKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKC1jb2RlLmZyYW1lU2l6ZSgpKSwgTWFjcm9Bc3NlbWJsZXI6
OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAorICAgIGF1dG8gYXJnRm9yID0gWyZdIChjb25zdCBS
ZWdpc3RlckF0T2Zmc2V0JiBlbnRyeSkgLT4gQ0NhbGxIZWxwZXJzOjpBZGRyZXNzIHsKKyAgICAg
ICAgcmV0dXJuIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgZW50cnkub2Zmc2V0KCkpOworICAgIH07CisgICAgCisgICAgZm9yIChjb25zdCBSZWdpc3Rl
ckF0T2Zmc2V0JiBlbnRyeSA6IGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVycygpKSB7CisgICAgICAg
IGlmIChlbnRyeS5yZWcoKS5pc0dQUigpKQorICAgICAgICAgICAgaml0LnN0b3JlUHRyKGVudHJ5
LnJlZygpLmdwcigpLCBhcmdGb3IoZW50cnkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
aml0LnN0b3JlRG91YmxlKGVudHJ5LnJlZygpLmZwcigpLCBhcmdGb3IoZW50cnkpKTsKKyAgICB9
CisKICAgICBHZW5lcmF0aW9uQ29udGV4dCBjb250ZXh0OwogICAgIGNvbnRleHQuY29kZSA9ICZj
b2RlOwogICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIENDYWxsSGVscGVyczo6TGFiZWw+IGJsb2Nr
TGFiZWxzKGNvZGUuc2l6ZSgpKTsKQEAgLTE2Miw5ICsxODUsMTUgQEAgdm9pZCBnZW5lcmF0ZShD
b2RlJiBjb2RlLCBDQ2FsbEhlbHBlcnMmIAogICAgICAgICBpZiAoaXNSZXR1cm4oYmxvY2stPmxh
c3QoKS5vcGNvZGUpKSB7CiAgICAgICAgICAgICAvLyBXZSBjdXJyZW50bHkgZG9uJ3QgcmVwcmVz
ZW50IHRoZSBmdWxsIHByb2xvZ3VlL2VwaWxvZ3VlIGluIEFpciwgc28gd2UgbmVlZCB0bwogICAg
ICAgICAgICAgLy8gaGF2ZSB0aGlzIG92ZXJyaWRlLgotICAgICAgICAgICAgaWYgKGNvZGUuZnJh
bWVTaXplKCkpCisgICAgICAgICAgICBpZiAoY29kZS5mcmFtZVNpemUoKSkgeworICAgICAgICAg
ICAgICAgIGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgZW50cnkgOiBjb2RlLmNhbGxlZVNh
dmVSZWdpc3RlcnMoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoZW50cnkucmVnKCkuaXNH
UFIoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKGFyZ0ZvcihlbnRyeSks
IGVudHJ5LnJlZygpLmdwcigpKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICAgICAgaml0LmxvYWREb3VibGUoYXJnRm9yKGVudHJ5KSwgZW50cnkucmVnKCku
ZnByKCkpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0
aW9uRXBpbG9ndWUoKTsKLSAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIH0gZWxzZQogICAg
ICAgICAgICAgICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZVdpdGhFbXB0eUZyYW1lKCk7CiAg
ICAgICAgICAgICBqaXQucmV0KCk7CiAgICAgICAgICAgICBjb250aW51ZTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMu
Y3BwCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckhhbmRsZUNhbGxlZVNhdmVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAog
I2lmIEVOQUJMRShCM19KSVQpCiAKICNpbmNsdWRlICJBaXJDb2RlLmgiCi0jaW5jbHVkZSAiQWly
SW5zZXJ0aW9uU2V0LmgiCiAjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKICNpbmNsdWRlICJB
aXJQaGFzZVNjb3BlLmgiCiAKQEAgLTcxLDM0ICs3MCw2IEBAIHZvaWQgaGFuZGxlQ2FsbGVlU2F2
ZXMoQ29kZSYgY29kZSkKICAgICAvLyBUaGlzIGlzIGEgYml0IHdlaXJkIHNpbmNlIHdlIGNvdWxk
IGhhdmUgYWxyZWFkeSBwaW5uZWQgYSBkaWZmZXJlbnQgc3RhY2sgc2xvdCB0byB0aGlzCiAgICAg
Ly8gYXJlYS4gQWxzbywgb3VyIHJ1bnRpbWUgZG9lcyBub3QgcmVxdWlyZSB1cyB0byBwaW4gdGhl
IHNhdmVzIGFyZWEuIE1heWJlIHdlIHNob3VsZG4ndCBwaW4gaXQ/CiAgICAgc2F2ZXNBcmVhLT5z
ZXRPZmZzZXRGcm9tRlAoLWJ5dGVTaXplKTsKLQotICAgIGF1dG8gYXJnRm9yID0gWyZdIChjb25z
dCBSZWdpc3RlckF0T2Zmc2V0JiBlbnRyeSkgLT4gQXJnIHsKLSAgICAgICAgcmV0dXJuIEFyZzo6
c3RhY2soc2F2ZXNBcmVhLCBlbnRyeS5vZmZzZXQoKSArIGJ5dGVTaXplKTsKLSAgICB9OwotCi0g
ICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChjb2RlKTsKLSAgICAKLSAgICAvLyBGaXJzdCBp
bnNlcnQgc2F2aW5nIGNvZGUgaW4gdGhlIHByb2xvZ3VlLgotICAgIGZvciAoY29uc3QgUmVnaXN0
ZXJBdE9mZnNldCYgZW50cnkgOiBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlcnMoKSkgewotICAgICAg
ICBpbnNlcnRpb25TZXQuaW5zZXJ0KAotICAgICAgICAgICAgMCwgZW50cnkucmVnKCkuaXNHUFIo
KSA/IE1vdmUgOiBNb3ZlRG91YmxlLCBjb2RlWzBdLT5hdCgwKS5vcmlnaW4sCi0gICAgICAgICAg
ICBUbXAoZW50cnkucmVnKCkpLCBhcmdGb3IoZW50cnkpKTsKLSAgICB9Ci0gICAgaW5zZXJ0aW9u
U2V0LmV4ZWN1dGUoY29kZVswXSk7Ci0KLSAgICAvLyBOb3cgaW5zZXJ0IHJlc3RvcmUgY29kZSBh
dCBlcGlsb2d1ZXMuCi0gICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKLSAgICAg
ICAgSW5zdCYgbGFzdCA9IGJsb2NrLT5sYXN0KCk7Ci0gICAgICAgIGlmICghaXNSZXR1cm4obGFz
dC5vcGNvZGUpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgZm9yIChjb25zdCBS
ZWdpc3RlckF0T2Zmc2V0JiBlbnRyeSA6IGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVycygpKSB7Ci0g
ICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KAotICAgICAgICAgICAgICAgIGJsb2NrLT5z
aXplKCkgLSAxLCBlbnRyeS5yZWcoKS5pc0dQUigpID8gTW92ZSA6IE1vdmVEb3VibGUsIGxhc3Qu
b3JpZ2luLAotICAgICAgICAgICAgICAgIGFyZ0ZvcihlbnRyeSksIFRtcChlbnRyeS5yZWcoKSkp
OwotICAgICAgICB9Ci0gICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKLSAgICB9
CiB9CiAKIH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTYyLDYgKzE2
Miw3IEBAIHB1YmxpYzoKICAgICAvLwogICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgYXV0by1nZW5l
cmF0ZWQgYnkgb3Bjb2RlX2dlbmVyYXRvci5yYi4KICAgICBib29sIGFkbWl0c1N0YWNrKHVuc2ln
bmVkIGFyZ0luZGV4KTsKKyAgICBib29sIGFkbWl0c1N0YWNrKEFyZyYpOwogCiAgICAgLy8gUmV0
dXJucyB0cnVlIGlmIHRoaXMgaW5zdHJ1Y3Rpb24gY2FuIGhhdmUgYW55IGVmZmVjdHMgb3RoZXIg
dGhhbiBjb250cm9sIGZsb3cgb3IgYXJndW1lbnRzLgogICAgIGJvb2wgaGFzTm9uQXJnTm9uQ29u
dHJvbEVmZmVjdHMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5z
dElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckluc3RJbmxpbmVzLmgJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlySW5zdElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTU4LDYgKzE1OCwx
MSBAQCBpbmxpbmUgdm9pZCBJbnN0OjpyZXBvcnRVc2VkUmVnaXN0ZXJzKGNvCiAgICAgYXJnc1sw
XS5zcGVjaWFsKCktPnJlcG9ydFVzZWRSZWdpc3RlcnMoKnRoaXMsIHVzZWRSZWdpc3RlcnMpOwog
fQogCitpbmxpbmUgYm9vbCBJbnN0OjphZG1pdHNTdGFjayhBcmcmIGFyZykKK3sKKyAgICByZXR1
cm4gYWRtaXRzU3RhY2soJmFyZyAtICZhcmdzWzBdKTsKK30KKwogaW5saW5lIGJvb2wgaXNTaGlm
dFZhbGlkKGNvbnN0IEluc3QmIGluc3QpCiB7CiAjaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySXRlcmF0ZWRSZWdpc3RlckNv
YWxlc2NpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuY3BwCShyZXZpc2lvbiAxOTUxNzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5n
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAogI2lmIEVOQUJMRShCM19KSVQp
CiAKICNpbmNsdWRlICJBaXJDb2RlLmgiCi0jaW5jbHVkZSAiQWlyRml4U3BpbGxTbG90WkRlZi5o
IgogI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgogI2luY2x1ZGUgIkFpckluc3RJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQWlyTGl2ZW5lc3MuaCIKQEAgLTExMjQsMTEgKzExMjMsMTEgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAvLyBjb21wbGV0ZSByZWdpc3RlciBhbGxvY2F0aW9uLiBT
bywgd2UgcmVjb3JkIHRoaXMgYmVmb3JlIHN0YXJ0aW5nLgogICAgICAgICAgICAgICAgIGJvb2wg
bWF5QmVDb2FsZXNjYWJsZSA9IGFsbG9jYXRvci5tYXlCZUNvYWxlc2NhYmxlKGluc3QpOwogCi0g
ICAgICAgICAgICAgICAgLy8gT24gWDg2XzY0LCBNb3ZlMzIgaXMgY2hlYXBlciBpZiB3ZSBrbm93
IHRoYXQgaXQncyBlcXVpdmFsZW50IHRvIGEgTW92ZS4gSXQncworICAgICAgICAgICAgICAgIC8v
IE1vdmUzMiBpcyBjaGVhcGVyIGlmIHdlIGtub3cgdGhhdCBpdCdzIGVxdWl2YWxlbnQgdG8gYSBN
b3ZlLiBJdCdzCiAgICAgICAgICAgICAgICAgLy8gZXF1aXZhbGVudCBpZiB0aGUgZGVzdGluYXRp
b24ncyBoaWdoIGJpdHMgYXJlIG5vdCBvYnNlcnZhYmxlIG9yIGlmIHRoZSBzb3VyY2UncyBoaWdo
CiAgICAgICAgICAgICAgICAgLy8gYml0cyBhcmUgYWxsIHplcm8uIE5vdGUgdGhhdCB3ZSBkb24n
dCBoYXZlIHRoZSBvcHBvc2l0ZSBvcHRpbWl6YXRpb24gZm9yIG90aGVyCiAgICAgICAgICAgICAg
ICAgLy8gYXJjaGl0ZWN0dXJlcywgd2hpY2ggbWF5IHByZWZlciBNb3ZlIG92ZXIgTW92ZTMyLCBi
ZWNhdXNlIE1vdmUgaXMgY2Fub25pY2FsIGFscmVhZHkuCi0gICAgICAgICAgICAgICAgaWYgKHR5
cGUgPT0gQXJnOjpHUCAmJiBvcHRpbWl6ZUZvclg4Nl82NCgpICYmIGluc3Qub3Bjb2RlID09IE1v
dmUKKyAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBBcmc6OkdQICYmIGluc3Qub3Bjb2RlID09
IE1vdmUKICAgICAgICAgICAgICAgICAgICAgJiYgaW5zdC5hcmdzWzBdLmlzVG1wKCkgJiYgaW5z
dC5hcmdzWzFdLmlzVG1wKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKG1fdG1wV2lkdGgu
dXNlV2lkdGgoaW5zdC5hcmdzWzFdLnRtcCgpKSA8PSBBcmc6OldpZHRoMzIKICAgICAgICAgICAg
ICAgICAgICAgICAgIHx8IG1fdG1wV2lkdGguZGVmV2lkdGgoaW5zdC5hcmdzWzBdLnRtcCgpKSA8
PSBBcmc6OldpZHRoMzIpCkBAIC0xMTY4LDcgKzExNjcsNiBAQCBwcml2YXRlOgogICAgIHZvaWQg
YWRkU3BpbGxBbmRGaWxsKGNvbnN0IENvbG9yaW5nQWxsb2NhdG9yPHR5cGU+JiBhbGxvY2F0b3Is
IEhhc2hTZXQ8dW5zaWduZWQ+JiB1bnNwaWxsYWJsZVRtcHMpCiAgICAgewogICAgICAgICBIYXNo
TWFwPFRtcCwgU3RhY2tTbG90Kj4gc3RhY2tTbG90czsKLSAgICAgICAgdW5zaWduZWQgbmV3U3Rh
Y2tTbG90VGhyZXNob2xkID0gbV9jb2RlLnN0YWNrU2xvdHMoKS5zaXplKCk7CiAgICAgICAgIGZv
ciAoVG1wIHRtcCA6IGFsbG9jYXRvci5zcGlsbGVkVG1wcygpKSB7CiAgICAgICAgICAgICAvLyBB
bGwgdGhlIHNwaWxsZWQgdmFsdWVzIGJlY29tZSB1bnNwaWxsYWJsZS4KICAgICAgICAgICAgIHVu
c3BpbGxhYmxlVG1wcy5hZGQoQWJzb2x1dGVUbXBNYXBwZXI8dHlwZT46OmFic29sdXRlSW5kZXgo
dG1wKSk7CkBAIC0xMjAyLDE2ICsxMjAwLDE5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICAgICAgLy8gVHJ5IHRvIHJlcGxhY2UgdGhlIHJlZ2lzdGVyIHVzZSBi
eSBtZW1vcnkgdXNlIHdoZW4gcG9zc2libGUuCi0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGluc3QuYXJncy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgICAg
ICBBcmcmIGFyZyA9IGluc3QuYXJnc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFyZy5p
c1RtcCgpICYmIGFyZy50eXBlKCkgPT0gdHlwZSAmJiAhYXJnLmlzUmVnKCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGF1dG8gc3RhY2tTbG90RW50cnkgPSBzdGFja1Nsb3RzLmZpbmQoYXJn
LnRtcCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFja1Nsb3RFbnRyeSAhPSBz
dGFja1Nsb3RzLmVuZCgpICYmIGluc3QuYWRtaXRzU3RhY2soaSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhcmcgPSBBcmc6OnN0YWNrKHN0YWNrU2xvdEVudHJ5LT52YWx1ZSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkU3BpbGwgPSB0cnVlOworICAgICAgICAgICAg
ICAgIGluc3QuZm9yRWFjaEFyZygKKyAgICAgICAgICAgICAgICAgICAgWyZdIChBcmcmIGFyZywg
QXJnOjpSb2xlLCBBcmc6OlR5cGUgYXJnVHlwZSwgQXJnOjpXaWR0aCB3aWR0aCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGFyZy5pc1RtcCgpICYmIGFyZ1R5cGUgPT0gdHlwZSAmJiAh
YXJnLmlzUmVnKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHN0YWNrU2xv
dEVudHJ5ID0gc3RhY2tTbG90cy5maW5kKGFyZy50bXAoKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHN0YWNrU2xvdEVudHJ5ICE9IHN0YWNrU2xvdHMuZW5kKCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJiYgaW5zdC5hZG1pdHNTdGFjayhhcmcpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrU2xvdEVudHJ5LT52YWx1ZS0+ZW5zdXJl
U2l6ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlTW92ZTMySWZE
aWRTcGlsbCA/IDQgOiBBcmc6OmJ5dGVzKHdpZHRoKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFyZyA9IEFyZzo6c3RhY2soc3RhY2tTbG90RW50cnktPnZhbHVlKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkU3BpbGwgPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSk7CiAK
ICAgICAgICAgICAgICAgICBpZiAoZGlkU3BpbGwgJiYgZm9yY2VNb3ZlMzJJZkRpZFNwaWxsKQog
ICAgICAgICAgICAgICAgICAgICBpbnN0Lm9wY29kZSA9IE1vdmUzMjsKQEAgLTEyNjIsMTIgKzEy
NjMsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfQogICAg
ICAgICB9Ci0KLSAgICAgICAgZml4U3BpbGxTbG90WkRlZigKLSAgICAgICAgICAgIG1fY29kZSwK
LSAgICAgICAgICAgIFsmXSAoU3RhY2tTbG90KiBzdGFja1Nsb3QpIC0+IGJvb2wgewotICAgICAg
ICAgICAgICAgIHJldHVybiBzdGFja1Nsb3QtPmluZGV4KCkgPj0gbmV3U3RhY2tTbG90VGhyZXNo
b2xkOwotICAgICAgICAgICAgfSk7CiAgICAgfQogCiAgICAgQ29kZSYgbV9jb2RlOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAkocmV2aXNpb24gMTk1
MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKEIzX0pJVCkKIAogI2luY2x1
ZGUgIkFpckJhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJBaXJDb2RlLmgiCiAjaW5jbHVkZSAiQWly
SW5zdElubGluZXMuaCIKICNpbmNsdWRlICJBaXJUbXBJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNJ
bmRleE1hcC5oIgpAQCAtOTMsOSArOTQsMTEgQEAgc3RydWN0IFJlZ0xpdmVuZXNzQWRhcHRlciB7
CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdGVyPgotY2xhc3MgQWJzdHJhY3RMaXZlbmVz
cyA6IHByaXZhdGUgQWRhcHRlciB7CitjbGFzcyBBYnN0cmFjdExpdmVuZXNzIDogcHVibGljIEFk
YXB0ZXIgewogICAgIHN0cnVjdCBXb3Jrc2V0OwogcHVibGljOgorICAgIHR5cGVkZWYgdHlwZW5h
bWUgQWRhcHRlcjo6VGhpbmcgVGhpbmc7CisgICAgCiAgICAgQWJzdHJhY3RMaXZlbmVzcyhDb2Rl
JiBjb2RlKQogICAgICAgICA6IEFkYXB0ZXIoY29kZSkKICAgICAgICAgLCBtX3dvcmtzZXQoQWRh
cHRlcjo6bWF4SW5kZXgoY29kZSkpCkBAIC0yMjIsNiArMjI1LDExIEBAIHB1YmxpYzoKIAogICAg
ICAgICAgICAgSXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBJdGVyYXRvcihtX2xpdmVu
ZXNzLCBtX2xpdmVuZXNzLm1fd29ya3NldC5iZWdpbigpKTsgfQogICAgICAgICAgICAgSXRlcmF0
b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gSXRlcmF0b3IobV9saXZlbmVzcywgbV9saXZlbmVzcy5t
X3dvcmtzZXQuZW5kKCkpOyB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJvb2wgY29udGFp
bnMoY29uc3QgdHlwZW5hbWUgQWRhcHRlcjo6VGhpbmcmIHRoaW5nKSBjb25zdAorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2xpdmVuZXNzLm1fd29ya3NldC5jb250YWlu
cyhBZGFwdGVyOjp2YWx1ZVRvSW5kZXgodGhpbmcpKTsKKyAgICAgICAgICAgIH0KIAogICAgICAg
ICBwcml2YXRlOgogICAgICAgICAgICAgQWJzdHJhY3RMaXZlbmVzcyYgbV9saXZlbmVzczsKQEAg
LTIzMiw2ICsyNDAsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIEl0ZXJhYmxlKG1f
bGl2ZW5lc3MpOwogICAgICAgICB9CiAKKyAgICAgICAgYm9vbCBpc0xpdmUoY29uc3QgdHlwZW5h
bWUgQWRhcHRlcjo6VGhpbmcmIHRoaW5nKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gbGl2ZSgpLmNvbnRhaW5zKHRoaW5nKTsKKyAgICAgICAgfQorCiAgICAgICAgIHZvaWQg
ZXhlY3V0ZSh1bnNpZ25lZCBpbnN0SW5kZXgpCiAgICAgICAgIHsKICAgICAgICAgICAgIEluc3Qm
IGluc3QgPSBtX2Jsb2NrLT5hdChpbnN0SW5kZXgpOwpAQCAtMjc3LDYgKzI5MCwxMSBAQCBwdWJs
aWM6CiAgICAgICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CiAgICAgfTsKIAorICAgIGNvbnN0IFZl
Y3Rvcjx1bnNpZ25lZD4mIHJhd0xpdmVBdEhlYWQoQmFzaWNCbG9jayogYmxvY2spCisgICAgewor
ICAgICAgICByZXR1cm4gbV9saXZlQXRIZWFkW2Jsb2NrXTsKKyAgICB9CisKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVbmRlcmx5aW5nSXRlcmFibGU+CiAgICAgY2xhc3MgSXRlcmFibGUgewogICAg
IHB1YmxpYzoKQEAgLTMzMCw2ICszNDgsMTEgQEAgcHVibGljOgogICAgICAgICBpdGVyYXRvciBi
ZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKG1fbGl2ZW5lc3MsIG1faXRlcmFibGUuYmVn
aW4oKSk7IH0KICAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3Io
bV9saXZlbmVzcywgbV9pdGVyYWJsZS5lbmQoKSk7IH0KIAorICAgICAgICBib29sIGNvbnRhaW5z
KGNvbnN0IHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nJiB0aGluZykgY29uc3QKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIG1fbGl2ZW5lc3MubV93b3Jrc2V0LmNvbnRhaW5zKEFkYXB0ZXI6
OnZhbHVlVG9JbmRleCh0aGluZykpOworICAgICAgICB9CisKICAgICBwcml2YXRlOgogICAgICAg
ICBBYnN0cmFjdExpdmVuZXNzJiBtX2xpdmVuZXNzOwogICAgICAgICBjb25zdCBVbmRlcmx5aW5n
SXRlcmFibGUmIG1faXRlcmFibGU7CkBAIC0zNDUsNiArMzY4LDggQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gSXRlcmFibGU8dHlwZW5hbWUgQWRhcHRlcjo6SW5kZXhTZXQ+KCp0aGlzLCBtX2xp
dmVBdFRhaWxbYmxvY2tdKTsKICAgICB9CiAKKyAgICBJbmRleFNwYXJzZVNldDxVbnNhZmVWZWN0
b3JPdmVyZmxvdz4mIHdvcmtzZXQoKSB7IHJldHVybiBtX3dvcmtzZXQ7IH0KKwogcHJpdmF0ZToK
ICAgICBmcmllbmQgY2xhc3MgTG9jYWxDYWxjOwogICAgIGZyaWVuZCBzdHJ1Y3QgTG9jYWxDYWxj
OjpJdGVyYWJsZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG9nUmVn
aXN0ZXJQcmVzc3VyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJMb2dSZWdpc3RlclByZXNzdXJlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyTG9nUmVnaXN0
ZXJQcmVzc3VyZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNvZGUu
aCIKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgorI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9p
ZCBsb2dSZWdpc3RlclByZXNzdXJlKENvZGUmIGNvZGUpCit7CisgICAgY29uc3QgdW5zaWduZWQg
dG90YWxDb2x1bW5zID0gMjAwOworICAgIGNvbnN0IHVuc2lnbmVkIHJlZ2lzdGVyQ29sdW1ucyA9
IDEwMDsKKyAgICAKKyAgICBSZWdMaXZlbmVzcyBsaXZlbmVzcyhjb2RlKTsKKworICAgIGZvciAo
QmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIFJlZ0xpdmVuZXNzOjpMb2NhbENh
bGMgbG9jYWxDYWxjKGxpdmVuZXNzLCBibG9jayk7CisKKyAgICAgICAgYmxvY2stPmR1bXBIZWFk
ZXIoV1RGOjpkYXRhRmlsZSgpKTsKKworICAgICAgICBWZWN0b3I8Q1N0cmluZz4gaW5zdER1bXBz
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJ
bmRleC0tOykgeworICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgp
OworICAgICAgICAgICAgSW5zdCogcHJldkluc3QgPSBibG9jay0+Z2V0KGluc3RJbmRleCAtIDEp
OworCisgICAgICAgICAgICBsb2NhbENhbGMuZXhlY3V0ZShpbnN0SW5kZXgpOworCisgICAgICAg
ICAgICBSZWdpc3RlclNldCBzZXQ7CisgICAgICAgICAgICBzZXQuc2V0QWxsKGxvY2FsQ2FsYy5s
aXZlKCkpOworICAgICAgICAgICAgSW5zdDo6Zm9yRWFjaERlZldpdGhFeHRyYUNsb2JiZXJlZFJl
Z3M8UmVnPigKKyAgICAgICAgICAgICAgICBwcmV2SW5zdCwgJmluc3QsCisgICAgICAgICAgICAg
ICAgWyZdIChSZWcgcmVnLCBBcmc6OlJvbGUsIEFyZzo6VHlwZSwgQXJnOjpXaWR0aCkgeworICAg
ICAgICAgICAgICAgICAgICBzZXQuc2V0KHJlZyk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAg
ICAgICAgICAgIFN0cmluZ1ByaW50U3RyZWFtIGluc3RPdXQ7CisgICAgICAgICAgICBTdHJpbmdQ
cmludFN0cmVhbSBsaW5lT3V0OworICAgICAgICAgICAgbGluZU91dC5wcmludCgiICAgIik7Cisg
ICAgICAgICAgICBpZiAoc2V0Lm51bWJlck9mU2V0UmVnaXN0ZXJzKCkpIHsKKyAgICAgICAgICAg
ICAgICBzZXQuZm9yRWFjaCgKKyAgICAgICAgICAgICAgICAgICAgWyZdIChSZWcgcmVnKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBDU3RyaW5nIHRleHQgPSB0b0NTdHJpbmcoIiAiLCByZWcp
OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHQubGVuZ3RoKCkgKyBsaW5lT3V0Lmxl
bmd0aCgpID4gdG90YWxDb2x1bW5zKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5z
dE91dC5wcmludChsaW5lT3V0LnRvQ1N0cmluZygpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsaW5lT3V0LnJlc2V0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGluZU91dC5wcmludCgiICAgICAgICIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgbGluZU91dC5wcmludCh0ZXh0KTsKKyAgICAgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICAgICAgbGluZU91dC5wcmludCgiOiIpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKGxpbmVPdXQubGVuZ3RoKCkgPiByZWdpc3RlckNvbHVtbnMp
IHsKKyAgICAgICAgICAgICAgICBpbnN0T3V0LnByaW50KGxpbmVPdXQudG9DU3RyaW5nKCksICJc
biIpOworICAgICAgICAgICAgICAgIGxpbmVPdXQucmVzZXQoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHdoaWxlIChsaW5lT3V0Lmxlbmd0aCgpIDwgcmVnaXN0ZXJDb2x1bW5zKQorICAg
ICAgICAgICAgICAgIGxpbmVPdXQucHJpbnQoIiAiKTsKKyAgICAgICAgICAgIGxpbmVPdXQucHJp
bnQoIiAiKTsKKyAgICAgICAgICAgIGxpbmVPdXQucHJpbnQoaW5zdCk7CisgICAgICAgICAgICBp
bnN0T3V0LnByaW50KGxpbmVPdXQudG9DU3RyaW5nKCksICJcbiIpOworICAgICAgICAgICAgaW5z
dER1bXBzLmFwcGVuZChpbnN0T3V0LnRvQ1N0cmluZygpKTsKKyAgICAgICAgfQorCisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IGluc3REdW1wcy5zaXplKCk7IGktLTspCisgICAgICAgICAgICBk
YXRhTG9nKGluc3REdW1wc1tpXSk7CisgICAgICAgIAorICAgICAgICBibG9jay0+ZHVtcEZvb3Rl
cihXVEY6OmRhdGFGaWxlKCkpOworICAgIH0KK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJMb2dSZWdpc3RlclByZXNzdXJlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb2dSZWdpc3RlclByZXNzdXJlLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxvZ1JlZ2lzdGVy
UHJlc3N1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBBaXJMb2dSZWdpc3RlclBy
ZXNzdXJlX2gKKyNkZWZpbmUgQWlyTG9nUmVnaXN0ZXJQcmVzc3VyZV9oCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7
CisKK2NsYXNzIENvZGU7CisKKy8vIER1bXBzIHRoZSByZWdpc3RlcnMgdGhhdCBhcmUgdXNlZCBh
dCBlYWNoIGluc3RydWN0aW9uLgordm9pZCBsb2dSZWdpc3RlclByZXNzdXJlKENvZGUmKTsKKwor
fSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKworI2VuZGlmIC8vIEFpckxvZ1JlZ2lzdGVyUHJlc3N1cmVfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wdGltaXplQmxvY2tPcmRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcHRpbWl6ZUJsb2NrT3JkZXIu
Y3BwCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ck9wdGltaXplQmxvY2tPcmRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzMsMTAgKzczLDggQEAgcHJp
dmF0ZToKIAogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKLXZvaWQgb3B0aW1pemVCbG9ja09y
ZGVyKENvZGUmIGNvZGUpCitWZWN0b3I8QmFzaWNCbG9jayo+IGJsb2Nrc0luT3B0aW1pemVkT3Jk
ZXIoQ29kZSYgY29kZSkKIHsKLSAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgIm9wdGlt
aXplQmxvY2tPcmRlciIpOwotCiAgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBibG9ja3NJbk9yZGVy
OwogCiAgICAgQmxvY2tXb3JrbGlzdCBmYXN0V29ya2xpc3Q7CkBAIC0xMTMsNiArMTExLDE1IEBA
IHZvaWQgb3B0aW1pemVCbG9ja09yZGVyKENvZGUmIGNvZGUpCiAgICAgQVNTRVJUKGZhc3RXb3Jr
bGlzdC5pc0VtcHR5KCkpOwogICAgIEFTU0VSVChzbG93V29ya2xpc3QuaXNFbXB0eSgpKTsKIAor
ICAgIHJldHVybiBibG9ja3NJbk9yZGVyOworfQorCit2b2lkIG9wdGltaXplQmxvY2tPcmRlcihD
b2RlJiBjb2RlKQoreworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAib3B0aW1pemVC
bG9ja09yZGVyIik7CisKKyAgICBWZWN0b3I8QmFzaWNCbG9jayo+IGJsb2Nrc0luT3JkZXIgPSBi
bG9ja3NJbk9wdGltaXplZE9yZGVyKGNvZGUpOworICAgIAogICAgIC8vIFBsYWNlIGJsb2NrcyBp
bnRvIENvZGUncyBibG9jayBsaXN0IGFjY29yZGluZyB0byB0aGUgb3JkZXJpbmcgaW4gYmxvY2tz
SW5PcmRlci4gV2UgZG8gdGhpcyBieSBsZWFraW5nCiAgICAgLy8gYWxsIG9mIHRoZSBibG9ja3Mg
YW5kIHRoZW4gcmVhZG9wdGluZyB0aGVtLgogICAgIGZvciAoYXV0byYgZW50cnkgOiBjb2RlLmJs
b2NrTGlzdCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcHRpbWl6
ZUJsb2NrT3JkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0Fpck9wdGltaXplQmxvY2tPcmRlci5oCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wdGltaXplQmxvY2tPcmRlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI4LDEwICsyOCwxOCBAQAogCiAjaWYgRU5BQkxFKEIzX0pJVCkKIAorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKwogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIg
ewogCitjbGFzcyBCYXNpY0Jsb2NrOwogY2xhc3MgQ29kZTsKIAorLy8gUmV0dXJucyBhIGxpc3Qg
b2YgYmxvY2tzIHNvcnRlZCBhY2NvcmRpbmcgdG8gd2hhdCB3b3VsZCBiZSB0aGUgY3VycmVudCBv
cHRpbWFsIG9yZGVyLiBUaGlzIHNoYXJlcworLy8gc29tZSBwcm9wZXJ0aWVzIHdpdGggYSBwcmUt
b3JkZXIgdHJhdmVyc2FsLiBJbiBwYXJ0aWN1bGFyLCBlYWNoIGJsb2NrIHdpbGwgYXBwZWFyIGFm
dGVyIGF0IGxlYXN0CisvLyBvbmUgb2YgaXRzIHByZWRlY2Vzc29ycy4KK1ZlY3RvcjxCYXNpY0Js
b2NrKj4gYmxvY2tzSW5PcHRpbWl6ZWRPcmRlcihDb2RlJik7CisKIC8vIFJlb3JkZXJzIHRoZSBi
YXNpYyBibG9ja3MgdG8ga2VlcCBob3QgYmxvY2tzIGF0IHRoZSB0b3AsIGFuZCBtYXhpbWl6ZSB0
aGUgbGlrZWxpaG9vZCB0aGF0IGEgZnJlcXVlbnRseQogLy8gdGFrZW4gZWRnZSBpcyBqdXN0IGEg
ZmFsbC10aHJvdWdoLgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJl
cG9ydFVzZWRSZWdpc3RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyUmVwb3J0VXNlZFJlZ2lzdGVycy5jcHAJKHJldmlzaW9uIDE5NTE3NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVwb3J0VXNlZFJlZ2lzdGVycy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDMyIEBAIHZvaWQgcmVwb3J0VXNlZFJlZ2lzdGVy
cyhDb2RlJiBjb2RlKQogCiAgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gYmxvY2st
PnNpemUoKTsgaW5zdEluZGV4LS07KSB7CiAgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2st
PmF0KGluc3RJbmRleCk7CisKKyAgICAgICAgICAgIC8vIEtpbGwgZGVhZCBhc3NpZ25tZW50cyB0
byByZWdpc3RlcnMuIEZvciBzaW1wbGljaXR5IHdlIHNheSB0aGF0IGEgc3RvcmUgaXMga2lsbGFi
bGUgaWYKKyAgICAgICAgICAgIC8vIGl0IGhhcyBvbmx5IGxhdGUgZGVmcyBhbmQgdGhvc2UgbGF0
ZSBkZWZzIGFyZSB0byByZWdpc3RlcnMgdGhhdCBhcmUgZGVhZCByaWdodCBub3cuCisgICAgICAg
ICAgICBpZiAoIWluc3QuaGFzTm9uQXJnRWZmZWN0cygpKSB7CisgICAgICAgICAgICAgICAgYm9v
bCBjYW5EZWxldGUgPSB0cnVlOworICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaEFyZygKKyAg
ICAgICAgICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlw
ZSwgQXJnOjpXaWR0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNFYXJs
eURlZihyb2xlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbkRlbGV0ZSA9IGZh
bHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJnOjppc0xhdGVEZWYo
cm9sZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFhcmcuaXNSZWcoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNhbkRlbGV0ZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChsb2NhbENhbGMuaXNMaXZlKGFyZy5yZWcoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjYW5EZWxldGUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgICAgIGlmIChjYW5EZWxldGUpCisgICAgICAgICAgICAgICAgICAgIGluc3Qg
PSBJbnN0KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChp
bnN0Lm9wY29kZSA9PSBQYXRjaCkgewogICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHJlZ2lz
dGVyU2V0OwogICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IGxvY2FsQ2FsYy5saXZlKCkp
CkBAIC01NCw2ICs4MCwxMSBAQCB2b2lkIHJlcG9ydFVzZWRSZWdpc3RlcnMoQ29kZSYgY29kZSkK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxvY2FsQ2FsYy5leGVjdXRlKGluc3RJbmRleCk7
CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJsb2NrLT5pbnN0cygpLnJlbW92ZUFsbE1h
dGNoaW5nKAorICAgICAgICAgICAgWyZdIChjb25zdCBJbnN0JiBpbnN0KSAtPiBib29sIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gIWluc3Q7CisgICAgICAgICAgICB9KTsKICAgICB9CiB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVwb3J0VXNlZFJlZ2lzdGVy
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVwb3J0
VXNlZFJlZ2lzdGVycy5oCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclJlcG9ydFVzZWRSZWdpc3RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiw3ICsz
Miw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UKIAogY2xhc3Mg
Q29kZTsKIAotLy8gUGVyZm9ybXMgYSBsaXZlbmVzcyBhbmFseXNpcyBvdmVyIHJlZ2lzdGVycyBh
bmQgcmVwb3J0cyB0aGUgbGl2ZSByZWdpc3RlcnMgdG8gZXZlcnkgU3BlY2lhbC4KKy8vIFBlcmZv
cm1zIGEgbGl2ZW5lc3MgYW5hbHlzaXMgb3ZlciByZWdpc3RlcnMgYW5kIHJlcG9ydHMgdGhlIGxp
dmUgcmVnaXN0ZXJzIHRvIGV2ZXJ5IFNwZWNpYWwuIFRha2VzCisvLyB0aGUgb3Bwb3J0dW5pdHkg
dG8ga2lsbCBkZWFkIGFzc2lnbm1lbnRzIHRvIHJlZ2lzdGVycywgc2luY2UgaXQgaGFzIGFjY2Vz
cyB0byByZWdpc3RlciBsaXZlbmVzcy4KIAogdm9pZCByZXBvcnRVc2VkUmVnaXN0ZXJzKENvZGUm
KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhp
bmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3Bp
bGxFdmVyeXRoaW5nLmNwcAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3
ICsyOSw2IEBACiAjaWYgRU5BQkxFKEIzX0pJVCkKIAogI2luY2x1ZGUgIkFpckNvZGUuaCIKLSNp
bmNsdWRlICJBaXJGaXhTcGlsbFNsb3RaRGVmLmgiCiAjaW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0
LmgiCiAjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKICNpbmNsdWRlICJBaXJMaXZlbmVzcy5o
IgpAQCAtODQsNyArODMsNiBAQCB2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJiBjb2RlKQogCiAg
ICAgLy8gQWxsb2NhdGUgYSBzdGFjayBzbG90IGZvciBlYWNoIHRtcC4KICAgICBWZWN0b3I8U3Rh
Y2tTbG90Kj4gYWxsU3RhY2tTbG90c1tBcmc6Om51bVR5cGVzXTsKLSAgICB1bnNpZ25lZCBuZXdT
dGFja1Nsb3RUaHJlc2hvbGQgPSBjb2RlLnN0YWNrU2xvdHMoKS5zaXplKCk7CiAgICAgZm9yICh1
bnNpZ25lZCB0eXBlSW5kZXggPSAwOyB0eXBlSW5kZXggPCBBcmc6Om51bVR5cGVzOyArK3R5cGVJ
bmRleCkgewogICAgICAgICBWZWN0b3I8U3RhY2tTbG90Kj4mIHN0YWNrU2xvdHMgPSBhbGxTdGFj
a1Nsb3RzW3R5cGVJbmRleF07CiAgICAgICAgIEFyZzo6VHlwZSB0eXBlID0gc3RhdGljX2Nhc3Q8
QXJnOjpUeXBlPih0eXBlSW5kZXgpOwpAQCAtMTMwLDcgKzEyOCw2IEBAIHZvaWQgc3BpbGxFdmVy
eXRoaW5nKENvZGUmIGNvZGUpCiAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocm9sZSkgewog
ICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6VXNlOgogICAgICAgICAgICAgICAgICAgICBj
YXNlIEFyZzo6Q29sZFVzZToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkVhcmx5RGVm
OgogICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogcmVnc0luUHJpb3JpdHlP
cmRlcih0eXBlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2V0QmVmb3Jl
LmdldChyZWcpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEJlZm9yZS5z
ZXQocmVnKTsKQEAgLTE1NCw2ICsxNTEsNyBAQCB2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJiBj
b2RlKQogICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6TGF0ZVVzZToKICAgICAgICAgICAg
ICAgICAgICAgY2FzZSBBcmc6OkxhdGVDb2xkVXNlOgogICAgICAgICAgICAgICAgICAgICBjYXNl
IEFyZzo6U2NyYXRjaDoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkVhcmx5RGVmOgog
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogcmVnc0luUHJpb3JpdHlPcmRl
cih0eXBlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2V0QmVmb3JlLmdl
dChyZWcpICYmICFzZXRBZnRlci5nZXQocmVnKSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZXRBZnRlci5zZXQocmVnKTsKQEAgLTE4MiwxMiArMTgwLDYgQEAgdm9pZCBzcGls
bEV2ZXJ5dGhpbmcoQ29kZSYgY29kZSkKICAgICAgICAgfQogICAgICAgICBpbnNlcnRpb25TZXQu
ZXhlY3V0ZShibG9jayk7CiAgICAgfQotCi0gICAgZml4U3BpbGxTbG90WkRlZigKLSAgICAgICAg
Y29kZSwKLSAgICAgICAgWyZdIChTdGFja1Nsb3QqIHN0YWNrU2xvdCkgLT4gYm9vbCB7Ci0gICAg
ICAgICAgICByZXR1cm4gc3RhY2tTbG90LT5pbmRleCgpID49IG5ld1N0YWNrU2xvdFRocmVzaG9s
ZDsKLSAgICAgICAgfSk7CiB9CiAKIH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuaAkocmV2aXNp
b24gMTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsMTIgQEAgcHVibGljOgogICAgIGJvb2wgaXNM
b2NrZWQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQgPT0gU3RhY2tTbG90S2luZDo6TG9ja2VkOyB9
CiAgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CiAKKyAgICB2
b2lkIGVuc3VyZVNpemUodW5zaWduZWQgcmVxdWVzdGVkU2l6ZSkKKyAgICB7CisgICAgICAgIEFT
U0VSVCghbV9vZmZzZXRGcm9tRlApOworICAgICAgICBtX2J5dGVTaXplID0gc3RkOjptYXgobV9i
eXRlU2l6ZSwgcmVxdWVzdGVkU2l6ZSk7CisgICAgfQorCiAgICAgdW5zaWduZWQgYWxpZ25tZW50
KCkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChieXRlU2l6ZSgpIDw9IDEpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZhbGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZhbGlkYXRlLmNwcAkocmV2aXNpb24gMTk1
MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJWYWxpZGF0ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgyLDYgKzgyLDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAg
ICAgVkFMSURBVEUoaXNUZXJtaW5hbChpbnN0Lm9wY29kZSksICgiQXQgIiwgaW5zdCwgIiBpbiAi
LCAqYmxvY2spKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIFZB
TElEQVRFKCFpc1Rlcm1pbmFsKGluc3Qub3Bjb2RlKSwgKCJBdCAiLCBpbnN0LCAiIGluICIsICpi
bG9jaykpOworCisgICAgICAgICAgICAgICAgLy8gZm9yRWFjaEFyZyBtdXN0IHJldHVybiBBcmcm
J3MgdGhhdCBwb2ludCBpbnRvIHRoZSBhcmdzIGFycmF5LgorICAgICAgICAgICAgICAgIGluc3Qu
Zm9yRWFjaEFyZygKKyAgICAgICAgICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xl
LCBBcmc6OlR5cGUsIEFyZzo6V2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElE
QVRFKCZhcmcgPj0gJmluc3QuYXJnc1swXSwgKCJBdCAiLCBhcmcsICIgaW4gIiwgaW5zdCwgIiBp
biAiLCAqYmxvY2spKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKCZhcmcgPD0g
Jmluc3QuYXJncy5sYXN0KCksICgiQXQgIiwgYXJnLCAiIGluICIsIGluc3QsICIgaW4gIiwgKmJs
b2NrKSk7CisgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29yQmxvY2tzKCkp
CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsaWRCbG9ja3MuY29udGFpbnMoc3VjY2Vzc29y
KSwgKCJJbiAiLCAqYmxvY2spKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
QjNDb21waWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEIzQ29tcGlsZS5jcHAJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQjNDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAog
CiAjaWYgRU5BQkxFKEZUTF9KSVQpICYmIEZUTF9VU0VTX0IzCiAKKyNpbmNsdWRlICJBaXJDb2Rl
LmgiCiAjaW5jbHVkZSAiQjNHZW5lcmF0ZS5oIgogI2luY2x1ZGUgIkIzUHJvY2VkdXJlSW5saW5l
cy5oIgogI2luY2x1ZGUgIkIzU3RhY2tTbG90VmFsdWUuaCIKQEAgLTU3LDcgKzU4LDcgQEAgdm9p
ZCBjb21waWxlKFN0YXRlJiBzdGF0ZSwgU2FmZXBvaW50OjpSZQogICAgIEdyYXBoJiBncmFwaCA9
IHN0YXRlLmdyYXBoOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZ3JhcGgubV9jb2RlQmxv
Y2s7CiAgICAgVk0mIHZtID0gZ3JhcGgubV92bTsKLSAgICAKKwogICAgIHsKICAgICAgICAgR3Jh
cGhTYWZlcG9pbnQgc2FmZXBvaW50KHN0YXRlLmdyYXBoLCBzYWZlcG9pbnRSZXN1bHQpOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNw
cAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
ckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NTgsOCArMTg1OCw4IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgICAgIG1fb3V0Lm5vdFplcm8zMihyZXN1bHQpLCB1c3VhbGx5
KGNvbnRpbnVhdGlvbiksIHJhcmVseShzbG93Q2FzZSkpOwogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oc2xvd0Nh
c2UsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAgICAgTFZhbHVlIGNvbmQgPSBtX291dC5i
aXRPcihtX291dC5sZXNzVGhhbihsZWZ0LCBtX291dC5pbnQzMlplcm8pLCBtX291dC5sZXNzVGhh
bihyaWdodCwgbV9vdXQuaW50MzJaZXJvKSk7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRlKE5l
Z2F0aXZlWmVybywgbm9WYWx1ZSgpLCAwLCBjb25kKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxh
dGUoTmVnYXRpdmVaZXJvLCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0Lmxlc3NUaGFuKGxlZnQs
IG1fb3V0LmludDMyWmVybykpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShOZWdhdGl2ZVpl
cm8sIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQubGVzc1RoYW4ocmlnaHQsIG1fb3V0LmludDMy
WmVybykpOwogICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAg
ICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKICAgICAg
ICAgICAgIH0KQEAgLTE4OTAsOCArMTg5MCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
ICAgIG1fb3V0Lm5vdFplcm82NChyZXN1bHQpLCB1c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJhcmVs
eShzbG93Q2FzZSkpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIExCYXNpY0Js
b2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlvbik7Ci0g
ICAgICAgICAgICAgICAgTFZhbHVlIGNvbmQgPSBtX291dC5iaXRPcihtX291dC5sZXNzVGhhbihs
ZWZ0LCBtX291dC5pbnQ2NFplcm8pLCBtX291dC5sZXNzVGhhbihyaWdodCwgbV9vdXQuaW50NjRa
ZXJvKSk7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRlKE5lZ2F0aXZlWmVybywgbm9WYWx1ZSgp
LCAwLCBjb25kKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoTmVnYXRpdmVaZXJvLCBub1Zh
bHVlKCksIG51bGxwdHIsIG1fb3V0Lmxlc3NUaGFuKGxlZnQsIG1fb3V0LmludDY0WmVybykpOwor
ICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShOZWdhdGl2ZVplcm8sIG5vVmFsdWUoKSwgbnVsbHB0
ciwgbV9vdXQubGVzc1RoYW4ocmlnaHQsIG1fb3V0LmludDY0WmVybykpOwogICAgICAgICAgICAg
ICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgICAgICAgICBtX291dC5hcHBl
bmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKICAgICAgICAgICAgIH0KQEAgLTE5NTcsOCAr
MTk1Nyw4IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4
dCA9IG1fb3V0LmFwcGVuZFRvKHVuc2FmZURlbm9taW5hdG9yLCBjb250aW51YXRpb24pOwogICAg
ICAgICAgICAgICAgIExWYWx1ZSBuZWcyVG9UaGUzMSA9IG1fb3V0LmNvbnN0SW50MzIoLTIxNDc0
ODM2NDctMSk7Ci0gICAgICAgICAgICAgICAgTFZhbHVlIGNvbmQgPSBtX291dC5iaXRPcihtX291
dC5pc1plcm8zMihkZW5vbWluYXRvciksIG1fb3V0LmVxdWFsKG51bWVyYXRvciwgbmVnMlRvVGhl
MzEpKTsKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIG5vVmFsdWUoKSwgMCwg
Y29uZCk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCBub1ZhbHVlKCksIG51
bGxwdHIsIG1fb3V0LmlzWmVybzMyKGRlbm9taW5hdG9yKSk7CisgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRlKE92ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0LmVxdWFsKG51bWVyYXRv
ciwgbmVnMlRvVGhlMzEpKTsKICAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7CiAKICAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3RO
ZXh0KTsKQEAgLTIwMTMsOCArMjAxMyw4IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAgICBM
QmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHVuc2FmZURlbm9taW5hdG9yLCBj
b250aW51YXRpb24pOwogICAgICAgICAgICAgICAgIExWYWx1ZSBuZWcyVG9UaGUzMSA9IG1fb3V0
LmNvbnN0SW50MzIoLTIxNDc0ODM2NDctMSk7Ci0gICAgICAgICAgICAgICAgTFZhbHVlIGNvbmQg
PSBtX291dC5iaXRPcihtX291dC5pc1plcm8zMihkZW5vbWluYXRvciksIG1fb3V0LmVxdWFsKG51
bWVyYXRvciwgbmVnMlRvVGhlMzEpKTsKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGUoT3ZlcmZs
b3csIG5vVmFsdWUoKSwgMCwgY29uZCk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJm
bG93LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0LmlzWmVybzMyKGRlbm9taW5hdG9yKSk7Cisg
ICAgICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsIG1f
b3V0LmVxdWFsKG51bWVyYXRvciwgbmVnMlRvVGhlMzEpKTsKICAgICAgICAgICAgICAgICBtX291
dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhj
b250aW51YXRpb24sIGxhc3ROZXh0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVnaXN0ZXJTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Jl
Z2lzdGVyU2V0LmgJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUmVnaXN0ZXJTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtOTEsNiArOTEsMTMgQEAgcHVibGlj
OgogICAgICAgICBBU1NFUlQoISFyZWcpOwogICAgICAgICByZXR1cm4gbV92ZWN0b3IuZ2V0KHJl
Zy5pbmRleCgpKTsKICAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYWJsZT4KKyAg
ICB2b2lkIHNldEFsbChjb25zdCBJdGVyYWJsZSYgaXRlcmFibGUpCisgICAgeworICAgICAgICBm
b3IgKFJlZyByZWcgOiBpdGVyYWJsZSkKKyAgICAgICAgICAgIHNldChyZWcpOworICAgIH0KICAg
ICAKICAgICB2b2lkIG1lcmdlKGNvbnN0IFJlZ2lzdGVyU2V0JiBvdGhlcikgeyBtX3ZlY3Rvci5t
ZXJnZShvdGhlci5tX3ZlY3Rvcik7IH0KICAgICB2b2lkIGZpbHRlcihjb25zdCBSZWdpc3RlclNl
dCYgb3RoZXIpIHsgbV92ZWN0b3IuZmlsdGVyKG90aGVyLm1fdmVjdG9yKTsgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMTk1MTc2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNDMsNiArMzQzLDcgQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAg
dihib29sLCBsb2dCM1BoYXNlVGltZXMsIGZhbHNlLCBudWxscHRyKSBcCiAgICAgdihkb3VibGUs
IHJhcmVCbG9ja1BlbmFsdHksIDAuMDAxLCBudWxscHRyKSBcCiAgICAgdihib29sLCBhaXJTcGls
bHNFdmVyeXRoaW5nLCBmYWxzZSwgbnVsbHB0cikgXAorICAgIHYoYm9vbCwgbG9nQWlyUmVnaXN0
ZXJQcmVzc3VyZSwgZmFsc2UsIG51bGxwdHIpIFwKICAgICBcCiAgICAgdihib29sLCB1c2VEb2xs
YXJWTSwgZmFsc2UsICJpbnN0YWxscyB0aGUgJHZtIGRlYnVnZ2luZyB0b29sIGluIGdsb2JhbCBv
YmplY3RzIikgXAogICAgIHYob3B0aW9uU3RyaW5nLCBmdW5jdGlvbk92ZXJyaWRlcywgbnVsbHB0
ciwgImZpbGUgd2l0aCBkZWJ1Z2dpbmcgb3ZlcnJpZGVzIGZvciBmdW5jdGlvbiBib2RpZXMiKSBc
CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0No
YW5nZUxvZwkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxNi0wMS0xNyAgRmlsaXAgUGl6bG8gIDxmcGl6
bG9AYXBwbGUuY29tPgorCisgICAgICAgIEFpciBzaG91bGQgZml4IHNwaWxsIGNvZGUgZW1pdHRl
ZCBieSBJUkMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1MzExMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogd3RmL0luZGV4U3BhcnNlU2V0Lmg6CisgICAgICAgIChXVEY6OkluZGV4U3BhcnNlU2V0PE92
ZXJmbG93SGFuZGxlcj46OkluZGV4U3BhcnNlU2V0KToKKyAgICAgICAgKFdURjo6SW5kZXhTcGFy
c2VTZXQ8T3ZlcmZsb3dIYW5kbGVyPjo6YWRkKToKKyAgICAgICAgKFdURjo6SW5kZXhTcGFyc2VT
ZXQ8T3ZlcmZsb3dIYW5kbGVyPjo6cmVtb3ZlKToKKyAgICAgICAgKiB3dGYvU3RyaW5nUHJpbnRT
dHJlYW0uaDoKKyAgICAgICAgKFdURjo6U3RyaW5nUHJpbnRTdHJlYW06Omxlbmd0aCk6CisKIDIw
MTYtMDEtMTUgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAg
ICAgQWRkIGtkZWJ1Z190cmFjZSBzaWducG9zdHMgZm9yIGEgZmV3IFdlYkNvcmUgb3BlcmF0aW9u
cwpJbmRleDogU291cmNlL1dURi93dGYvSW5kZXhTcGFyc2VTZXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9JbmRleFNwYXJzZVNldC5oCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9JbmRleFNwYXJzZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw4ICs0Nyw4
IEBAIGNsYXNzIEluZGV4U3BhcnNlU2V0IHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBJbmRleFNw
YXJzZVNldCh1bnNpZ25lZCBtYXhWYWx1ZSk7CiAKLSAgICB2b2lkIGFkZCh1bnNpZ25lZCk7Ci0g
ICAgdm9pZCByZW1vdmUodW5zaWduZWQpOworICAgIGJvb2wgYWRkKHVuc2lnbmVkKTsKKyAgICBi
b29sIHJlbW92ZSh1bnNpZ25lZCk7CiAgICAgdm9pZCBjbGVhcigpOwogCiAgICAgdW5zaWduZWQg
c2l6ZSgpIGNvbnN0OwpAQCAtNzEsMjkgKzcxLDMzIEBAIGlubGluZSBJbmRleFNwYXJzZVNldDxP
dmVyZmxvd0hhbmRsZXI+OjoKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVy
PgotaW5saW5lIHZvaWQgSW5kZXhTcGFyc2VTZXQ8T3ZlcmZsb3dIYW5kbGVyPjo6YWRkKHVuc2ln
bmVkIHZhbHVlKQoraW5saW5lIGJvb2wgSW5kZXhTcGFyc2VTZXQ8T3ZlcmZsb3dIYW5kbGVyPjo6
YWRkKHVuc2lnbmVkIHZhbHVlKQogewogICAgIGlmIChjb250YWlucyh2YWx1ZSkpCi0gICAgICAg
IHJldHVybjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgdW5zaWduZWQgbmV3UG9zaXRp
b24gPSBtX3ZhbHVlcy5zaXplKCk7CiAgICAgbV92YWx1ZXMuYXBwZW5kKHZhbHVlKTsKICAgICBt
X21hcFt2YWx1ZV0gPSBuZXdQb3NpdGlvbjsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgotaW5saW5lIHZvaWQgSW5kZXhTcGFyc2VTZXQ8
T3ZlcmZsb3dIYW5kbGVyPjo6cmVtb3ZlKHVuc2lnbmVkIHZhbHVlKQoraW5saW5lIGJvb2wgSW5k
ZXhTcGFyc2VTZXQ8T3ZlcmZsb3dIYW5kbGVyPjo6cmVtb3ZlKHVuc2lnbmVkIHZhbHVlKQogewog
ICAgIHVuc2lnbmVkIHBvc2l0aW9uID0gbV9tYXBbdmFsdWVdOwogICAgIGlmIChwb3NpdGlvbiA+
PSBtX3ZhbHVlcy5zaXplKCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgaWYgKG1fdmFsdWVzW3Bvc2l0aW9uXSA9PSB2YWx1ZSkgewogICAgICAgICB1bnNp
Z25lZCBsYXN0VmFsdWUgPSBtX3ZhbHVlcy5sYXN0KCk7CiAgICAgICAgIG1fdmFsdWVzW3Bvc2l0
aW9uXSA9IGxhc3RWYWx1ZTsKICAgICAgICAgbV9tYXBbbGFzdFZhbHVlXSA9IHBvc2l0aW9uOwog
ICAgICAgICBtX3ZhbHVlcy5yZW1vdmVMYXN0KCk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KKworICAgIHJldHVybiBmYWxzZTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3ZlcmZsb3dI
YW5kbGVyPgpJbmRleDogU291cmNlL1dURi93dGYvU3RyaW5nUHJpbnRTdHJlYW0uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TdHJpbmdQcmludFN0cmVhbS5oCShyZXZpc2lvbiAxOTUx
NzYpCisrKyBTb3VyY2UvV1RGL3d0Zi9TdHJpbmdQcmludFN0cmVhbS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zOCw2ICszOCw4IEBAIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+
U3RyaW5nUHJpbnRTdHJlYW0oKTsKICAgICAKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdmlydHVh
bCB2b2lkIHZwcmludGYoY29uc3QgY2hhciogZm9ybWF0LCB2YV9saXN0KSBvdmVycmlkZSBXVEZf
QVRUUklCVVRFX1BSSU5URigyLCAwKTsKKworICAgIHNpemVfdCBsZW5ndGgoKSBjb25zdCB7IHJl
dHVybiBtX25leHQ7IH0KICAgICAKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgQ1N0cmluZyB0b0NT
dHJpbmcoKTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIHRvU3RyaW5nKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269198</attachid>
            <date>2016-01-17 14:08:50 -0800</date>
            <delta_ts>2016-01-17 15:01:24 -0800</delta_ts>
            <desc>did more things</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>106550</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk1MTgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1MyBA
QAorMjAxNi0wMS0xNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEFpciBzaG91bGQgZml4IHNwaWxsIGNvZGUgZW1pdHRlZCBieSBJUkMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MzExMworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjZXMgYSBwaGFzZSBjYWxs
ZWQgZml4T2J2aW91c1NwaWxscygpIHRoYXQgZml4ZXMgcGF0dGVybnMgbGlrZToKKworICAgICAg
ICBTdG9yZSByZWdpc3RlciB0byBzdGFjayBzbG90IGFuZCB0aGVuIHVzZSBzdGFjayBzbG90Ogor
ICAgICAgICAgICAgTW92ZSAlcmN4LCAoc3RhY2s0MikKKyAgICAgICAgICAgIEZvbyB1c2U6KHN0
YWNrNDIpIC8vIHJlcGxhY2UgKHN0YWNrNDIpIHdpdGggJXJjeCBoZXJlLgorCisgICAgICAgIExv
YWQgc3RhY2sgc2xvdCBpbnRvIHJlZ2lzdGVyIGFuZCB0aGVuIHVzZSBzdGFjayBzbG90OgorICAg
ICAgICAgICAgTW92ZSAoc3RhY2s0MiksICVyY3gKKyAgICAgICAgICAgIEZvbyB1c2U6KHN0YWNr
NDIpIC8vIHJlcGxhY2UgKHN0YWNrNDIpIHdpdGggJXJjeCBoZXJlLgorCisgICAgICAgIFN0b3Jl
IGNvbnN0YW50IGludG8gc3RhY2sgc2xvdCBhbmQgdGhlbiB1c2Ugc3RhY2sgc2xvdDoKKyAgICAg
ICAgICAgIE1vdmUgJDQyLCAlcmN4CisgICAgICAgICAgICBNb3ZlICVyY3gsIChzdGFjazQyKQor
ICAgICAgICAgICAgQmFyIGRlZjolcmN4IC8vICVyY3ggaXNuJ3QgYXZhaWxhYmxlIGFueW1vcmUs
IGJ1dCB3ZSBzdGlsbCBrbm93IHRoYXQgKHN0YWNrNDIpIGlzICQ0MgorICAgICAgICAgICAgRm9v
IHVzZTooc3RhY2s0MikgLy8gcmVwbGFjZSAoc3RhY2s0Mikgd2l0aCAkNDIgaGVyZS4KKworICAg
ICAgICBUaGlzIHBoYXNlcyBkb2VzIHRoZXNlIGZpeHVwcyBieSBkb2luZyBhIGdsb2JhbCBmb3J3
YXJkIGZsb3cgdGhhdCBwcm9wYWdhdGVzIHNldHMgb2YKKyAgICAgICAgbXVzdC1hbGlhc2VzLgor
CisgICAgICAgIEFsc28gYWRkZWQgYSBwaGFzZSB0byByZXBvcnQgcmVnaXN0ZXIgcHJlc3N1cmUu
IEl0IHByZXR0eS1wcmludHMgY29kZSBhbG9uZ3NpZGUgdGhlIHNldCBvZgorICAgICAgICBpbi11
c2UgcmVnaXN0ZXJzIGFib3ZlIGVhY2ggaW5zdHJ1Y3Rpb24uCisKKyAgICAgICAgQWxzbyBmaXhl
ZCBzb21lIEZUTCBjb2RlZ2VuIHBhdGhvbG9naWVzLiBXZSB3ZXJlIHVzaW5nIGJpdE9yIHdoZXJl
IHdlIG1lYW50IHRvIHVzZSBhCisgICAgICAgIGNvbmRpdGlvbmFsIG9yLiBMTFZNIGxpa2VzIHRv
IGNhbm9uaWNhbGl6ZSBib29sZWFuIGV4cHJlc3Npb25zIHRoaXMgd2F5LiBCMywgb24gdGhlIG90
aGVyCisgICAgICAgIGhhbmQsIGRvZXNuJ3QgZG8gdGhpcyBjYW5vbmljYWxpemF0aW9uIGFuZCBk
b2Vzbid0IGhhdmUgbG9naWMgdG8gZGVjb21wb3NlIGl0IGludG8gc2VxdWVuY2VzCisgICAgICAg
IG9mIGJyYW5jaGVzLgorCisgICAgICAgIEZpbmFsbHksIHRoaXMgZml4ZXMgc29tZSBidWdzIHdp
dGggaG93IHdlIHdlcmUgaGFuZGxpbmcgc3Vid2lkdGggc3BpbGwgc2xvdHMuIFRoZSByZWdpc3Rl
cgorICAgICAgICBhbGxvY2F0b3Igd2FzIG1ha2luZyB0d28gbWlzdGFrZXMuIEZpcnN0LCBpdCBt
aWdodCBjYXVzZSBhIFdpZHRoNjQgZGVmIG9yIHVzZSBvZiBhIDQtYnl0ZQorICAgICAgICBzcGls
bCBzbG90LiBJbiB0aGF0IGNhc2UsIGl0IHdvdWxkIGV4dGVuZCB0aGUgc2l6ZSBvZiB0aGUgc3Bp
bGwgc2xvdCB0byBlbnN1cmUgdGhhdCB0aGUgdXNlCisgICAgICAgIG9yIGRlZiBpcyBzYWZlLiBT
ZWNvbmQsIGl0IGVtdWxhdGVzIFpEZWYgb24gVG1wIGJlaGF2aW9yIGJ5IGVtaXR0aW5nIGEgTW92
ZTMyIHRvIGluaXRpYWxpemUKKyAgICAgICAgdGhlIGhpZ2ggYml0cyBvZiBhIHNwaWxsIHNsb3Qu
IEJ1dCB0aGlzIGlzIHVuc291bmQgYmVjYXVzZSBvZiB0aGUgbGl2ZW5lc3Mgc2VtYW50aWNzIG9m
IHNwaWxsCisgICAgICAgIHNsb3RzLiBUaGV5IGNhbm5vdCBoYXZlIG1vcmUgdGhhbiBvbmUgZGVm
IHRvIGluaXRpYWxpemUgdGhlaXIgdmFsdWUuIEkgZml4ZWQgdGhhdCBieSBtYWtpbmcKKyAgICAg
ICAgYWxsb2NhdGVTdGFjaygpIGJlIHRoZSB0aGluZyB0aGF0IGZpeGVzIFpEZWZzLiBUaGF0J3Mg
YSBjaGFuZ2UgdG8gWkRlZiBzZW1hbnRpY3M6IG5vdywgWkRlZgorICAgICAgICBvbiBhbiBhbm9u
eW1vdXMgc3RhY2sgc2xvdCBtZWFucyB0aGF0IHRoZSBoaWdoIGJpdHMgYXJlIHplcm8tZmlsbGVk
LiBJIHdhc24ndCBhYmxlIHRvCisgICAgICAgIGNvbnN0cnVjdCBhIHRlc3QgZm9yIHRoaXMuIEl0
IG1pZ2h0IGJlIGEgaHlwb3RoZXRpY2FsIGJ1ZywgYnV0IHN0aWxsLCBJIGxpa2UgaG93IHRoaXMK
KyAgICAgICAgc2ltcGxpZmllcyB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yLgorCisgICAgICAgIFRo
aXMgaXMgYSB+MC43JSBzcGVlZC11cCBvbiBPY3RhbmUuCisKKyAgICAgICAgKiBDTWFrZUxpc3Rz
LnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIGIzL0IzQ2hlY2tTcGVjaWFsLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkNo
ZWNrU3BlY2lhbDo6aGlkZGVuQnJhbmNoKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lh
bDo6Zm9yRWFjaEFyZyk6CisgICAgICAgIChKU0M6OkIzOjpDaGVja1NwZWNpYWw6OmNvbW1pdEhp
ZGRlbkJyYW5jaCk6IERlbGV0ZWQuCisgICAgICAgICogYjMvQjNDaGVja1NwZWNpYWwuaDoKKyAg
ICAgICAgKiBiMy9CM0xvd2VyVG9BaXIuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dl
clRvQWlyOjpmaWxsU3RhY2ttYXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWly
Ojpsb3dlcik6CisgICAgICAgICogYjMvQjNTdGFja21hcFZhbHVlLmg6CisgICAgICAgICogYjMv
YWlyL0FpckFsbG9jYXRlU3RhY2suY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjphbGxvY2F0
ZVN0YWNrKToKKyAgICAgICAgKiBiMy9haXIvQWlyQWxsb2NhdGVTdGFjay5oOgorICAgICAgICAq
IGIzL2Fpci9BaXJBcmcuaDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpjYWxsQXJnKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpzdGFja0FkZHIpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpBcmc6OmlzVmFsaWRTY2FsZSk6CisgICAgICAgICogYjMvYWlyL0FpckJhc2ljQmxv
Y2suY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpkZWVwRHVtcCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OmR1bXBIZWFkZXIpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpkdW1wRm9vdGVyKToKKyAgICAgICAgKiBiMy9haXIv
QWlyQmFzaWNCbG9jay5oOgorICAgICAgICAqIGIzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuY3BwOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbFNwZWNpYWw6OkNDYWxsU3BlY2lhbCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6fkNDYWxsU3BlY2lhbCk6CisgICAgICAg
ICogYjMvYWlyL0FpckNvZGUuaDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6bGFzdFBo
YXNlTmFtZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OnNldEVuYWJsZVJDUlMpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjplbmFibGVSQ1JTKToKKyAgICAgICAgKiBiMy9h
aXIvQWlyQ3VzdG9tLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6UGF0Y2hDdXN0b206Omlz
VmFsaWRGb3JtKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxDdXN0b206OmlzVmFsaWRG
b3JtKToKKyAgICAgICAgKiBiMy9haXIvQWlyQ3VzdG9tLmg6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OlBhdGNoQ3VzdG9tOjppc1ZhbGlkRm9ybVN0YXRpYyk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OlBhdGNoQ3VzdG9tOjphZG1pdHNTdGFjayk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlBh
dGNoQ3VzdG9tOjppc1ZhbGlkRm9ybSk6IERlbGV0ZWQuCisgICAgICAgICogYjMvYWlyL0FpckVt
aXRTaHVmZmxlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U2h1ZmZsZVBhaXI6OmR1bXAp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpjcmVhdGVTaHVmZmxlKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6ZW1pdFNodWZmbGUpOgorICAgICAgICAqIGIzL2Fpci9BaXJFbWl0U2h1ZmZsZS5o
OgorICAgICAgICAqIGIzL2Fpci9BaXJGaXhPYnZpb3VzU3BpbGxzLmNwcDogQWRkZWQuCisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OmZpeE9idmlvdXNTcGlsbHMpOgorICAgICAgICAqIGIzL2Fpci9B
aXJGaXhPYnZpb3VzU3BpbGxzLmg6IEFkZGVkLgorICAgICAgICAqIGIzL2Fpci9BaXJGaXhTcGls
bFNsb3RaRGVmLmg6IFJlbW92ZWQuCisgICAgICAgICogYjMvYWlyL0FpckdlbmVyYXRlLmNwcDoK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6cHJlcGFyZUZvckdlbmVyYXRpb24pOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpnZW5lcmF0ZSk6CisgICAgICAgICogYjMvYWlyL0FpckhhbmRsZUNhbGxl
ZVNhdmVzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6aGFuZGxlQ2FsbGVlU2F2ZXMpOgor
ICAgICAgICAqIGIzL2Fpci9BaXJJbnN0Lmg6CisgICAgICAgICogYjMvYWlyL0Fpckluc3RJbmxp
bmVzLmg6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6OnJlcG9ydFVzZWRSZWdpc3RlcnMp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnN0OjphZG1pdHNTdGFjayk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OmlzU2hpZnRWYWxpZCk6CisgICAgICAgICogYjMvYWlyL0Fpckl0ZXJhdGVk
UmVnaXN0ZXJDb2FsZXNjaW5nLmNwcDoKKyAgICAgICAgKiBiMy9haXIvQWlyTGl2ZW5lc3MuaDoK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QWJzdHJhY3RMaXZlbmVzczo6QWJzdHJhY3RMaXZlbmVz
cyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFic3RyYWN0TGl2ZW5lc3M6OkxvY2FsQ2FsYzo6
SXRlcmFibGU6OmJlZ2luKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QWJzdHJhY3RMaXZlbmVz
czo6TG9jYWxDYWxjOjpJdGVyYWJsZTo6ZW5kKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QWJz
dHJhY3RMaXZlbmVzczo6TG9jYWxDYWxjOjpJdGVyYWJsZTo6Y29udGFpbnMpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpBYnN0cmFjdExpdmVuZXNzOjpMb2NhbENhbGM6OmxpdmUpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpBYnN0cmFjdExpdmVuZXNzOjpMb2NhbENhbGM6OmlzTGl2ZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkFic3RyYWN0TGl2ZW5lc3M6OkxvY2FsQ2FsYzo6ZXhlY3V0
ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFic3RyYWN0TGl2ZW5lc3M6OnJhd0xpdmVBdEhl
YWQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBYnN0cmFjdExpdmVuZXNzOjpJdGVyYWJsZTo6
YmVnaW4pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBYnN0cmFjdExpdmVuZXNzOjpJdGVyYWJs
ZTo6ZW5kKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QWJzdHJhY3RMaXZlbmVzczo6SXRlcmFi
bGU6OmNvbnRhaW5zKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QWJzdHJhY3RMaXZlbmVzczo6
bGl2ZUF0VGFpbCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFic3RyYWN0TGl2ZW5lc3M6Ondv
cmtzZXQpOgorICAgICAgICAqIGIzL2Fpci9BaXJMb2dSZWdpc3RlclByZXNzdXJlLmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OmxvZ1JlZ2lzdGVyUHJlc3N1cmUpOgorICAgICAg
ICAqIGIzL2Fpci9BaXJMb2dSZWdpc3RlclByZXNzdXJlLmg6IEFkZGVkLgorICAgICAgICAqIGIz
L2Fpci9BaXJPcHRpbWl6ZUJsb2NrT3JkZXIuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpi
bG9ja3NJbk9wdGltaXplZE9yZGVyKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6b3B0aW1pemVC
bG9ja09yZGVyKToKKyAgICAgICAgKiBiMy9haXIvQWlyT3B0aW1pemVCbG9ja09yZGVyLmg6Cisg
ICAgICAgICogYjMvYWlyL0FpclJlcG9ydFVzZWRSZWdpc3RlcnMuY3BwOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpyZXBvcnRVc2VkUmVnaXN0ZXJzKToKKyAgICAgICAgKiBiMy9haXIvQWlyUmVw
b3J0VXNlZFJlZ2lzdGVycy5oOgorICAgICAgICAqIGIzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcu
Y3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpzcGlsbEV2ZXJ5dGhpbmcpOgorICAgICAgICAq
IGIzL2Fpci9BaXJTdGFja1Nsb3QuaDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90
Ojppc0xvY2tlZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6aW5kZXgpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpTdGFja1Nsb3Q6OmVuc3VyZVNpemUpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpTdGFja1Nsb3Q6OmFsaWdubWVudCk6CisgICAgICAgICogYjMvYWlyL0Fp
clZhbGlkYXRlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHQ29tbW9uLmg6CisgICAgICAgICogZnRs
L0ZUTEIzQ29tcGlsZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZSk6CisgICAgICAg
ICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9MTFZNOjpjb21waWxlQXJpdGhNdWwpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0xMVk06OmNvbXBpbGVBcml0aERpdik6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRoTW9kKToKKyAgICAgICAgKiBqaXQvUmVnaXN0
ZXJTZXQuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6OmdldCk6CisgICAgICAgIChKU0M6
OlJlZ2lzdGVyU2V0OjpzZXRBbGwpOgorICAgICAgICAoSlNDOjpSZWdpc3RlclNldDo6bWVyZ2Up
OgorICAgICAgICAoSlNDOjpSZWdpc3RlclNldDo6ZmlsdGVyKToKKyAgICAgICAgKiBydW50aW1l
L09wdGlvbnMuaDoKKwogMjAxNi0wMS0xNyAgSnVsaWVuIEJyaWFuY2VhdSAgPGpicmlhbmNlQGNp
c2NvLmNvbT4KIAogICAgICAgICBbbWlwc10gRml4IHJlZ1QyIGFuZCByZWdUMyB0cmFtcGxpbmcg
aW4gTWFjcm9Bc3NlbWJsZXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJ
KHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09V
UkNFUwogICAgIGIzL2Fpci9BaXJDdXN0b20uY3BwCiAgICAgYjMvYWlyL0FpckVsaW1pbmF0ZURl
YWRDb2RlLmNwcAogICAgIGIzL2Fpci9BaXJFbWl0U2h1ZmZsZS5jcHAKKyAgICBiMy9haXIvQWly
Rml4T2J2aW91c1NwaWxscy5jcHAKICAgICBiMy9haXIvQWlyRml4UGFydGlhbFJlZ2lzdGVyU3Rh
bGxzLmNwcAogICAgIGIzL2Fpci9BaXJHZW5lcmF0ZS5jcHAKICAgICBiMy9haXIvQWlyR2VuZXJh
dGVkLmNwcApAQCAtODUsNiArODYsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAg
IGIzL2Fpci9BaXJJbnNlcnRpb25TZXQuY3BwCiAgICAgYjMvYWlyL0Fpckluc3QuY3BwCiAgICAg
YjMvYWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcAorICAgIGIzL2Fpci9BaXJM
b2dSZWdpc3RlclByZXNzdXJlLmNwcAogICAgIGIzL2Fpci9BaXJMb3dlckFmdGVyUmVnQWxsb2Mu
Y3BwCiAgICAgYjMvYWlyL0Fpckxvd2VyTWFjcm9zLmNwcAogICAgIGIzL2Fpci9BaXJPcHRpbWl6
ZUJsb2NrT3JkZXIuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM3OSw3ICszNzksOCBAQAog
CQkwRjQ5M0FGQTE2RDBDQUQzMDA4NDUwOEIgLyogU291cmNlUHJvdmlkZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0OTNBRjgxNkQwQ0FEMTAw
ODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCAqLzsgfTsKIAkJMEY0Qjk0REMxN0I5RjA3NTAw
REQwM0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRCOTREQjE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRBcnJh
eUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjRDOTE2NjFDMjlGNEYyMDA0MzQxQTYgLyogQjNPcmlnaW5EdW1wLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRDOTE2NTFDMjlGNEYyMDA0
MzQxQTYgLyogQjNPcmlnaW5EdW1wLmggKi87IH07Ci0JCTBGNEM5MTY4MUMyQjNENjgwMDQzNDFB
NiAvKiBBaXJGaXhTcGlsbFNsb3RaRGVmLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjRDOTE2NzFDMkIzRDY4MDA0MzQxQTYgLyogQWlyRml4U3BpbGxT
bG90WkRlZi5oICovOyB9OworCQkwRjRERTFDRTFDNEMxQjU0MDA0RDZDMTEgLyogQWlyRml4T2J2
aW91c1NwaWxscy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjRERTFDQzFDNEMxQjU0MDA0RDZDMTEgLyogQWlyRml4T2J2aW91c1NwaWxscy5jcHAg
Ki87IH07CisJCTBGNERFMUNGMUM0QzFCNTQwMDRENkMxMSAvKiBBaXJGaXhPYnZpb3VzU3BpbGxz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRERTFD
RDFDNEMxQjU0MDA0RDZDMTEgLyogQWlyRml4T2J2aW91c1NwaWxscy5oICovOyB9OwogCQkwRjRG
MjlERjE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9u
UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY0RjI5REQxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1h
dGlvblBoYXNlLmNwcCAqLzsgfTsKIAkJMEY0RjI5RTAxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0
YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRGMjlERTE4QjZBRDFDMDA1N0JDMTUgLyogREZH
U3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCAqLzsgfTsKIAkJMEY1MEFGM0Mx
OTNFOEIzOTAwNjc0RUU4IC8qIERGR1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1MEFGM0IxOTNFOEIzOTAwNjc0
RUU4IC8qIERGR1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oICovOyB9OwpAQCAtNzI0LDYgKzcyNSw4
IEBACiAJCTBGRTIyOEVFMTQzNkFCMkMwMDE5NkM0OCAvKiBPcHRpb25zLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTIyOEVBMTQzNkFCMjMwMDE5
NkM0OCAvKiBPcHRpb25zLmNwcCAqLzsgfTsKIAkJMEZFMjU0RjYxQUJEREQyMjAwQTdDNkQyIC8q
IERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFMjU0RjQxQUJEREQyMjAwQTdDNkQyIC8qIERGR1ZhcmFy
Z3NGb3J3YXJkaW5nUGhhc2UuY3BwICovOyB9OwogCQkwRkUyNTRGNzFBQkRERDIyMDBBN0M2RDIg
LyogREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFMjU0RjUxQUJEREQyMjAwQTdDNkQyIC8qIERGR1ZhcmFy
Z3NGb3J3YXJkaW5nUGhhc2UuaCAqLzsgfTsKKwkJMEZFMzRDMTkxQzRCMzlBRTAwMDNBNTEyIC8q
IEFpckxvZ1JlZ2lzdGVyUHJlc3N1cmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFMzRDMTcxQzRCMzlBRTAwMDNBNTEyIC8qIEFpckxvZ1JlZ2lz
dGVyUHJlc3N1cmUuY3BwICovOyB9OworCQkwRkUzNEMxQTFDNEIzOUFFMDAwM0E1MTIgLyogQWly
TG9nUmVnaXN0ZXJQcmVzc3VyZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFMzRDMTgxQzRCMzlBRTAwMDNBNTEyIC8qIEFpckxvZ1JlZ2lzdGVyUHJl
c3N1cmUuaCAqLzsgfTsKIAkJMEZFNzIxMUQxOTNCOUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRp
b24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
NzIxMUIxOTNCOUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24uY3BwICovOyB9OwogCQkwRkU3
MjExRTE5M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNpdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNzIxMUMxOTNCOUM1OTAwMzFGNkVEIC8q
IERGR1RyYW5zaXRpb24uaCAqLzsgfTsKIAkJMEZFODM0MTcxQTZFRjk3QjAwRDA0ODQ3IC8qIFBv
bHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTgzNDE1MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9ycGhp
Y0NhbGxTdHViUm91dGluZS5jcHAgKi87IH07CkBAIC0yNTQyLDcgKzI1NDUsOCBAQAogCQkwRjQ5
M0FGODE2RDBDQUQxMDA4NDUwOEIgLyogU291cmNlUHJvdmlkZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU291cmNlUHJvdmlkZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjRCOTREQjE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRBcnJheUlu
bGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRBcnJheUlubGlu
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0QzkxNjUxQzI5RjRGMjAwNDM0
MUE2IC8qIEIzT3JpZ2luRHVtcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBC
M09yaWdpbkR1bXAuaDsgcGF0aCA9IGIzL0IzT3JpZ2luRHVtcC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkwRjRDOTE2NzFDMkIzRDY4MDA0MzQxQTYgLyogQWlyRml4U3BpbGxTbG90
WkRlZi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJGaXhTcGlsbFNsb3Ra
RGVmLmg7IHBhdGggPSBiMy9haXIvQWlyRml4U3BpbGxTbG90WkRlZi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjRERTFDQzFDNEMxQjU0MDA0RDZDMTEgLyogQWlyRml4T2J2aW91
c1NwaWxscy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJGaXhP
YnZpb3VzU3BpbGxzLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJGaXhPYnZpb3VzU3BpbGxzLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0REUxQ0QxQzRDMUI1NDAwNEQ2QzExIC8q
IEFpckZpeE9idmlvdXNTcGlsbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QWlyRml4T2J2aW91c1NwaWxscy5oOyBwYXRoID0gYjMvYWlyL0FpckZpeE9idmlvdXNTcGlsbHMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0RjI5REQxOEI2QUQxQzAwNTdCQzE1
IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1h
dGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRp
b25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEYyOURFMThCNkFE
MUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVz
dGltYXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1h
dGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTBBRjNCMTkzRThC
MzkwMDY3NEVFOCAvKiBERkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmg7IHBhdGggPSBkZmcv
REZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0yOTAwLDYgKzI5MDQsOCBAQAogCQkwRkUyMjhFQjE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9u
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPcHRpb25zLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTI1NEY0MUFCREREMjIwMEE3QzZEMiAvKiBERkdWYXJh
cmdzRm9yd2FyZGluZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR1ZhcmFyZ3NG
b3J3YXJkaW5nUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkUyNTRG
NTFBQkRERDIyMDBBN0M2RDIgLyogREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmg7IHBh
dGggPSBkZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkUzNEMxNzFDNEIzOUFFMDAwM0E1MTIgLyogQWlyTG9nUmVnaXN0ZXJQcmVz
c3VyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJMb2dSZWdp
c3RlclByZXNzdXJlLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJMb2dSZWdpc3RlclByZXNzdXJlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFMzRDMTgxQzRCMzlBRTAwMDNBNTEy
IC8qIEFpckxvZ1JlZ2lzdGVyUHJlc3N1cmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5oOyBwYXRoID0gYjMvYWlyL0FpckxvZ1JlZ2lz
dGVyUHJlc3N1cmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFNzIxMUIxOTNC
OUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gREZHVHJhbnNpdGlvbi5jcHA7IHBhdGggPSBkZmcvREZHVHJhbnNpdGlv
bi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTcyMTFDMTkzQjlDNTkwMDMx
RjZFRCAvKiBERkdUcmFuc2l0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR1RyYW5zaXRpb24uaDsgcGF0aCA9IGRmZy9ERkdUcmFuc2l0aW9uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGRTgzNDE1MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9ycGhp
Y0NhbGxTdHViUm91dGluZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC00ODU5LDkgKzQ4NjUsMTAgQEAKIAkJCQkwRjQ1NzAzNzFCRTQ0QzkxMDA2MkE2Mjkg
LyogQWlyRWxpbWluYXRlRGVhZENvZGUuaCAqLywKIAkJCQkwRjYxODMyMzFDNDVCRjA3MDA3MjQ1
MEIgLyogQWlyRW1pdFNodWZmbGUuY3BwICovLAogCQkJCTBGNjE4MzI0MUM0NUJGMDcwMDcyNDUw
QiAvKiBBaXJFbWl0U2h1ZmZsZS5oICovLAorCQkJCTBGNERFMUNDMUM0QzFCNTQwMDRENkMxMSAv
KiBBaXJGaXhPYnZpb3VzU3BpbGxzLmNwcCAqLywKKwkJCQkwRjRERTFDRDFDNEMxQjU0MDA0RDZD
MTEgLyogQWlyRml4T2J2aW91c1NwaWxscy5oICovLAogCQkJCTI2MkQ4NUI0MUMwRDY1MEYwMDZB
Q0I2MSAvKiBBaXJGaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMuY3BwICovLAogCQkJCTI2MkQ4NUI1
MUMwRDY1MEYwMDZBQ0I2MSAvKiBBaXJGaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMuaCAqLywKLQkJ
CQkwRjRDOTE2NzFDMkIzRDY4MDA0MzQxQTYgLyogQWlyRml4U3BpbGxTbG90WkRlZi5oICovLAog
CQkJCTBGRUM4NTUyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCAqLywK
IAkJCQkwRkVDODU1MzFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGUuY3BwICovLAogCQkJ
CTBGRUM4NTU0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5oICovLApAQCAtNDg3Nyw2
ICs0ODg0LDggQEAKIAkJCQkyNjcxOEJBMjFCRTk5Rjc4MDA1MjAxN0IgLyogQWlySXRlcmF0ZWRS
ZWdpc3RlckNvYWxlc2NpbmcuY3BwICovLAogCQkJCTI2NzE4QkEzMUJFOTlGNzgwMDUyMDE3QiAv
KiBBaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5oICovLAogCQkJCTI2ODRENDM3MUMwMDE2
MUMwMDgxRDY2MyAvKiBBaXJMaXZlbmVzcy5oICovLAorCQkJCTBGRTM0QzE3MUM0QjM5QUUwMDAz
QTUxMiAvKiBBaXJMb2dSZWdpc3RlclByZXNzdXJlLmNwcCAqLywKKwkJCQkwRkUzNEMxODFDNEIz
OUFFMDAwM0E1MTIgLyogQWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5oICovLAogCQkJCTBGNjE4MzI1
MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwICovLAogCQkJCTBG
NjE4MzI2MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dlckFmdGVyUmVnQWxsb2MuaCAqLywKIAkJ
CQkwRjYxODMyNzFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3MuY3BwICovLApAQCAt
NzMyNiw3ICs3MzM1LDYgQEAKIAkJCQlEQzAwMDM5MzE5RDhCRTZGMDAwMjNFQjAgLyogREZHUHJl
Y2lzZUxvY2FsQ2xvYmJlcml6ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCRTBGNzUxNkMxREIw
QjAwODJDNUU4IC8qIERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZGRkM5NUUxNEVGOTBCNzAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjRDOTE2ODFDMkIzRDY4MDA0MzQxQTYgLyog
QWlyRml4U3BpbGxTbG90WkRlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzRTAxQUIxOUQzNTNB
NTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MkI5Q0VEMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZGQzkyMTYxQjk0RkIzRTAwNzFERDY2IC8qIERGR1Byb3BlcnR5VHlw
ZUtleS5oIGluIEhlYWRlcnMgKi8sCkBAIC03MzU3LDYgKzczNjUsNyBAQAogCQkJCTcwQjc5MTk5
MUMwMjRBMjkwMDI0ODFFMiAvKiBHZW5lcmF0b3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGQzA5N0EyMTQ2QjI4Q0MwMENGMjQ0MiAvKiBERkdUaHVua3MuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGRDhBMzI4MTdENTFGNTcwMENBMkM0MCAvKiBERkdUaWVyVXBDaGVja0luamVjdGlv
blBoYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkUzNEMxQTFDNEIzOUFFMDAwM0E1MTIgLyog
QWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEOEEzMkExN0Q1
MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkQ4QTMyQzE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExGb3JP
U1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RkUzQTA2QjQxQzEwQ0I5MzAwMzkwRkREIC8qIEpJVEJpdFhvckdlbmVyYXRvci5oIGluIEhlYWRl
cnMgKi8sCkBAIC03NDAyLDYgKzc0MTEsNyBAQAogCQkJCTBGM0FDNzU0MTg4RTVFQzgwMDMyMDI5
RiAvKiBFeGl0aW5nSklUVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMTA1ODYxNjc1NDgx
MjAwRjhBQjZFIC8qIEV4aXRLaW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCODNBQjE0QkNG
NUJCMDA4ODVCNEYgLyogRXhwcmVzc2lvblJhbmdlSW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEY0REUxQ0YxQzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE3QThBRjM4MTdBREI1RjMwMDVBQjE3NCAvKiBGbG9hdDMyQXJyYXkuaCBp
biBIZWFkZXJzICovLAogCQkJCUE3QThBRjM5MTdBREI1RjMwMDVBQjE3NCAvKiBGbG9hdDY0QXJy
YXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjRFNTQzMTdFQTlGNTkwMEFCQjIxNyAvKiBGUFJJ
bmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTg2NzYsNiArODY4Niw3IEBACiAJCQkJMEZFQzg1NkQx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNDM0MjJBNjYxQzE2MjY3NTAwRTJFQjk4IC8qIEIzUmVkdWNlRG91YmxlVG9GbG9hdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkVDODU2RjFCREFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGNERFMUNFMUM0QzFCNTQwMDRENkMxMSAvKiBBaXJGaXhP
YnZpb3VzU3BpbGxzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUM4NTcxMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUM4NTczMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZFQzg1NzUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC05MDkxLDYgKzkxMDIsNyBAQAogCQkJCUE1OTNDRjgyMTg0MDM3NzEwMEJGQ0UyNyAvKiBJbnNw
ZWN0b3JWYWx1ZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5Q0YxMDdFQzM3NjAwNDI3
QTQ4IC8qIEludGVybmFsRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyOUQ3RDQw
RUQyMTI4MjAwQjg5NjE5IC8qIEludGVycHJldGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
RTM0QzE5MUM0QjM5QUUwMDAzQTUxMiAvKiBBaXJMb2dSZWdpc3RlclByZXNzdXJlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUExQjlFMjM5MUI0RTBENjcwMEJDN0ZFRCAvKiBJbnRsQ29sbGF0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTFCOUUyM0IxQjRFMEQ2NzAwQkM3RkVEIC8qIEludGxD
b2xsYXRvckNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExQjlFMjNEMUI0RTBE
NjcwMEJDN0ZFRCAvKiBJbnRsQ29sbGF0b3JQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5jcHAJKHJldmlz
aW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSwxOSArMTA1LDE0IEBAIEluc3QgQ2hlY2tTcGVjaWFs
OjpoaWRkZW5CcmFuY2goY29uc3QgSW4KICAgICByZXR1cm4gaGlkZGVuQnJhbmNoOwogfQogCi12
b2lkIENoZWNrU3BlY2lhbDo6Y29tbWl0SGlkZGVuQnJhbmNoKEluc3QmIG9yaWdpbmFsLCBJbnN0
JiBoaWRkZW5CcmFuY2gpCi17Ci0gICAgQVNTRVJUKGhpZGRlbkJyYW5jaC5hcmdzLnNpemUoKSA9
PSBtX251bUNoZWNrQXJncyk7Ci0gICAgQVNTRVJUKGhpZGRlbkJyYW5jaC5vcGNvZGUgPSBtX2No
ZWNrT3Bjb2RlKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9udW1DaGVja0FyZ3M7
ICsraSkKLSAgICAgICAgb3JpZ2luYWwuYXJnc1tpICsgMV0gPSBoaWRkZW5CcmFuY2guYXJnc1tp
XTsKLX0KLQogdm9pZCBDaGVja1NwZWNpYWw6OmZvckVhY2hBcmcoSW5zdCYgaW5zdCwgY29uc3Qg
U2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mIGNhbGxiYWNrKQogewogICAgIElu
c3QgaGlkZGVuID0gaGlkZGVuQnJhbmNoKGluc3QpOwotICAgIGhpZGRlbi5mb3JFYWNoQXJnKGNh
bGxiYWNrKTsKLSAgICBjb21taXRIaWRkZW5CcmFuY2goaW5zdCwgaGlkZGVuKTsKKyAgICBoaWRk
ZW4uZm9yRWFjaEFyZygKKyAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFy
Zzo6VHlwZSB0eXBlLCBBcmc6OldpZHRoIHdpZHRoKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBp
bmRleCA9ICZhcmcgLSAmaGlkZGVuLmFyZ3NbMF07CisgICAgICAgICAgICBjYWxsYmFjayhpbnN0
LmFyZ3NbMSArIGluZGV4XSwgcm9sZSwgdHlwZSwgd2lkdGgpOworICAgICAgICB9KTsKICAgICBm
b3JFYWNoQXJnSW1wbChudW1CM0FyZ3MoaW5zdCksIG1fbnVtQ2hlY2tBcmdzICsgMSwgaW5zdCwg
bV9zdGFja21hcFJvbGUsIGNhbGxiYWNrKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmgJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsOSAr
MTIzLDYgQEAgcHJvdGVjdGVkOgogICAgIC8vIENvbnN0cnVjdHMgYW5kIHJldHVybnMgdGhlIElu
c3QgcmVwcmVzZW50aW5nIHRoZSBicmFuY2ggdGhhdCB0aGlzIHdpbGwgdXNlLgogICAgIEFpcjo6
SW5zdCBoaWRkZW5CcmFuY2goY29uc3QgQWlyOjpJbnN0JikgY29uc3Q7CiAKLSAgICAvLyBJZiB3
ZSBlZGl0ZWQgdGhlIGhpZGRlbiBicmFuY2gsIHRoaXMgaW5zdGFsbHMgdGhlIGVkaXRzIGludG8g
dGhlIGdpdmVuIGluc3QuCi0gICAgdm9pZCBjb21taXRIaWRkZW5CcmFuY2goQWlyOjpJbnN0JiBv
cmlnaW5hbCwgQWlyOjpJbnN0JiBoaWRkZW5CcmFuY2gpOwotCiAgICAgdm9pZCBmb3JFYWNoQXJn
KEFpcjo6SW5zdCYsIGNvbnN0IFNjb3BlZExhbWJkYTxBaXI6Okluc3Q6OkVhY2hBcmdDYWxsYmFj
az4mKSBvdmVycmlkZTsKICAgICBib29sIGlzVmFsaWQoQWlyOjpJbnN0Jikgb3ZlcnJpZGU7CiAg
ICAgYm9vbCBhZG1pdHNTdGFjayhBaXI6Okluc3QmLCB1bnNpZ25lZCBhcmdJbmRleCkgb3ZlcnJp
ZGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2
aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTg3MSw2ICs4NzEsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIGFyZyA9IHRtcCh2YWx1ZS52YWx1ZSgpKTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlJlZ2lzdGVyOgorICAgICAgICAgICAgICAgIHN0
YWNrbWFwLT5lYXJseUNsb2JiZXJlZCgpLmNsZWFyKHZhbHVlLnJlcCgpLnJlZygpKTsKICAgICAg
ICAgICAgICAgICBhcmcgPSBUbXAodmFsdWUucmVwKCkucmVnKCkpOwogICAgICAgICAgICAgICAg
IGFwcGVuZChNb3ZlLCBpbW1PclRtcCh2YWx1ZS52YWx1ZSgpKSwgYXJnKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKQEAgLTE5NzMsNiArMTk3NCw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZpbGxTdGFja21hcChpbnN0LCBwYXRjaHBvaW50
VmFsdWUsIDApOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAocGF0Y2hwb2ludFZhbHVl
LT5yZXN1bHRDb25zdHJhaW50LmlzUmVnKCkpCisgICAgICAgICAgICAgICAgcGF0Y2hwb2ludFZh
bHVlLT5sYXRlQ2xvYmJlcmVkKCkuY2xlYXIocGF0Y2hwb2ludFZhbHVlLT5yZXN1bHRDb25zdHJh
aW50LnJlZygpKTsKIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gcGF0Y2hwb2ludFZh
bHVlLT5udW1HUFNjcmF0Y2hSZWdpc3RlcnM7IGktLTspCiAgICAgICAgICAgICAgICAgaW5zdC5h
cmdzLmFwcGVuZChtX2NvZGUubmV3VG1wKEFyZzo6R1ApKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHJldmlzaW9uIDE5NTE3NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODQsNiArODQsMTc1IEBAIG5hbWVzcGFjZSB7CiAKIGJvb2wgdmVyYm9zZSA9IGZh
bHNlOwogCitjbGFzcyBJbnRSYW5nZSB7CitwdWJsaWM6CisgICAgSW50UmFuZ2UoKQorICAgIHsK
KyAgICB9CisKKyAgICBJbnRSYW5nZShpbnQ2NF90IG1pbiwgaW50NjRfdCBtYXgpCisgICAgICAg
IDogbV9taW4obWluKQorICAgICAgICAsIG1fbWF4KG1heCkKKyAgICB7CisgICAgfQorCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgSW50UmFuZ2UgdG9wKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBJbnRSYW5nZShzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptaW4oKSwgc3Rk
OjpudW1lcmljX2xpbWl0czxUPjo6bWF4KCkpOworICAgIH0KKworICAgIHN0YXRpYyBJbnRSYW5n
ZSB0b3AoVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAg
IGNhc2UgSW50MzI6CisgICAgICAgICAgICByZXR1cm4gdG9wPGludDMyX3Q+KCk7CisgICAgICAg
IGNhc2UgSW50NjQ6CisgICAgICAgICAgICByZXR1cm4gdG9wPGludDY0X3Q+KCk7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgcmV0dXJuIEludFJhbmdlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0YXRpYyBJbnRSYW5nZSByYW5nZUZvck1hc2soVCBtYXNr
KQorICAgIHsKKyAgICAgICAgaWYgKCEobWFzayArIDEpKQorICAgICAgICAgICAgcmV0dXJuIHRv
cDxUPigpOworICAgICAgICByZXR1cm4gSW50UmFuZ2UoMCwgbWFzayk7CisgICAgfQorCisgICAg
c3RhdGljIEludFJhbmdlIHJhbmdlRm9yTWFzayhpbnQ2NF90IG1hc2ssIFR5cGUgdHlwZSkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEludDMyOgorICAgICAg
ICAgICAgcmV0dXJuIHJhbmdlRm9yTWFzazxpbnQzMl90PihzdGF0aWNfY2FzdDxpbnQzMl90Piht
YXNrKSk7CisgICAgICAgIGNhc2UgSW50NjQ6CisgICAgICAgICAgICByZXR1cm4gcmFuZ2VGb3JN
YXNrPGludDY0X3Q+KG1hc2spOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBJbnRSYW5nZSgpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMg
SW50UmFuZ2UgcmFuZ2VGb3JaU2hyKGludDMyX3Qgc2hpZnRBbW91bnQpCisgICAgeworICAgICAg
ICB0eXBlbmFtZSBzdGQ6Om1ha2VfdW5zaWduZWQ8VD46OnR5cGUgbWFzayA9IDA7CisgICAgICAg
IG1hc2stLTsKKyAgICAgICAgbWFzayA+Pj0gc2hpZnRBbW91bnQ7CisgICAgICAgIHJldHVybiBy
YW5nZUZvck1hc2s8VD4oc3RhdGljX2Nhc3Q8VD4obWFzaykpOworICAgIH0KKworICAgIHN0YXRp
YyBJbnRSYW5nZSByYW5nZUZvclpTaHIoaW50MzJfdCBzaGlmdEFtb3VudCwgVHlwZSB0eXBlKQor
ICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgSW50MzI6CisgICAg
ICAgICAgICByZXR1cm4gcmFuZ2VGb3JaU2hyPGludDMyX3Q+KHNoaWZ0QW1vdW50KTsKKyAgICAg
ICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgICAgIHJldHVybiByYW5nZUZvclpTaHI8aW50NjRfdD4o
c2hpZnRBbW91bnQpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBJbnRSYW5nZSgpOworICAgICAg
ICB9CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgSW50UmFu
Z2UgcmFuZ2VGb3JTU2hyKGludDMyX3Qgc2hpZnRBbW91bnQpCisgICAgeworICAgICAgICByZXR1
cm4gSW50UmFuZ2UodG9wPFQ+KCkubWluKCkgPj4gc2hpZnRBbW91bnQsIHRvcDxUPigpLm1heCgp
ID4+IHNoaWZ0QW1vdW50KTsKKyAgICB9CisKKyAgICBzdGF0aWMgSW50UmFuZ2UgcmFuZ2VGb3JT
U2hyKGludDMyX3Qgc2hpZnRBbW91bnQsIFR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRj
aCAodHlwZSkgeworICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgcmV0dXJuIHJhbmdl
Rm9yU1NocjxpbnQzMl90PihzaGlmdEFtb3VudCk7CisgICAgICAgIGNhc2UgSW50NjQ6CisgICAg
ICAgICAgICByZXR1cm4gcmFuZ2VGb3JTU2hyPGludDY0X3Q+KHNoaWZ0QW1vdW50KTsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICByZXR1cm4gSW50UmFuZ2UoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlu
dDY0X3QgbWluKCkgY29uc3QgeyByZXR1cm4gbV9taW47IH0KKyAgICBpbnQ2NF90IG1heCgpIGNv
bnN0IHsgcmV0dXJuIG1fbWF4OyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKKyAgICB7CisgICAgICAgIG91dC5wcmludCgiWyIsIG1fbWluLCAiLCIsIG1fbWF4LCAi
XSIpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgYm9vbCBjb3VsZE92
ZXJmbG93QWRkKGNvbnN0IEludFJhbmdlJiBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiBz
dW1PdmVyZmxvd3M8VD4obV9taW4sIG90aGVyLm1fbWluKQorICAgICAgICAgICAgfHwgc3VtT3Zl
cmZsb3dzPFQ+KG1fbWluLCBvdGhlci5tX21heCkKKyAgICAgICAgICAgIHx8IHN1bU92ZXJmbG93
czxUPihtX21heCwgb3RoZXIubV9taW4pCisgICAgICAgICAgICB8fCBzdW1PdmVyZmxvd3M8VD4o
bV9tYXgsIG90aGVyLm1fbWF4KTsKKyAgICB9CisKKyAgICBib29sIGNvdWxkT3ZlcmZsb3dBZGQo
Y29uc3QgSW50UmFuZ2UmIG90aGVyLCBUeXBlIHR5cGUpCisgICAgeworICAgICAgICBzd2l0Y2gg
KHR5cGUpIHsKKyAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgIHJldHVybiBjb3VsZE92
ZXJmbG93QWRkPGludDMyX3Q+KG90aGVyKTsKKyAgICAgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAg
ICAgIHJldHVybiBjb3VsZE92ZXJmbG93QWRkPGludDY0X3Q+KG90aGVyKTsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBib29sIGNvdWxkT3ZlcmZsb3dTdWIoY29uc3QgSW50
UmFuZ2UmIG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRpZmZlcmVuY2VPdmVyZmxvd3M8
VD4obV9taW4sIG90aGVyLm1fbWluKQorICAgICAgICAgICAgfHwgZGlmZmVyZW5jZU92ZXJmbG93
czxUPihtX21pbiwgb3RoZXIubV9tYXgpCisgICAgICAgICAgICB8fCBkaWZmZXJlbmNlT3ZlcmZs
b3dzPFQ+KG1fbWF4LCBvdGhlci5tX21pbikKKyAgICAgICAgICAgIHx8IGRpZmZlcmVuY2VPdmVy
Zmxvd3M8VD4obV9tYXgsIG90aGVyLm1fbWF4KTsKKyAgICB9CisKKyAgICBib29sIGNvdWxkT3Zl
cmZsb3dTdWIoY29uc3QgSW50UmFuZ2UmIG90aGVyLCBUeXBlIHR5cGUpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgIHJldHVy
biBjb3VsZE92ZXJmbG93U3ViPGludDMyX3Q+KG90aGVyKTsKKyAgICAgICAgY2FzZSBJbnQ2NDoK
KyAgICAgICAgICAgIHJldHVybiBjb3VsZE92ZXJmbG93U3ViPGludDY0X3Q+KG90aGVyKTsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAg
fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBib29sIGNvdWxkT3ZlcmZsb3dNdWwo
Y29uc3QgSW50UmFuZ2UmIG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHByb2R1Y3RPdmVy
Zmxvd3M8VD4obV9taW4sIG90aGVyLm1fbWluKQorICAgICAgICAgICAgfHwgcHJvZHVjdE92ZXJm
bG93czxUPihtX21pbiwgb3RoZXIubV9tYXgpCisgICAgICAgICAgICB8fCBwcm9kdWN0T3ZlcmZs
b3dzPFQ+KG1fbWF4LCBvdGhlci5tX21pbikKKyAgICAgICAgICAgIHx8IHByb2R1Y3RPdmVyZmxv
d3M8VD4obV9tYXgsIG90aGVyLm1fbWF4KTsKKyAgICB9CisKKyAgICBib29sIGNvdWxkT3ZlcmZs
b3dNdWwoY29uc3QgSW50UmFuZ2UmIG90aGVyLCBUeXBlIHR5cGUpCisgICAgeworICAgICAgICBz
d2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgIHJldHVybiBj
b3VsZE92ZXJmbG93TXVsPGludDMyX3Q+KG90aGVyKTsKKyAgICAgICAgY2FzZSBJbnQ2NDoKKyAg
ICAgICAgICAgIHJldHVybiBjb3VsZE92ZXJmbG93TXVsPGludDY0X3Q+KG90aGVyKTsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQor
Citwcml2YXRlOgorICAgIGludDY0X3QgbV9taW4geyAwIH07CisgICAgaW50NjRfdCBtX21heCB7
IDAgfTsKK307CisKIGNsYXNzIFJlZHVjZVN0cmVuZ3RoIHsKIHB1YmxpYzoKICAgICBSZWR1Y2VT
dHJlbmd0aChQcm9jZWR1cmUmIHByb2MpCkBAIC0xMDkxLDcgKzEyNjAsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgxKS0+ZXF1YWxPclVub3JkZXJlZENv
bnN0YW50KG1fdmFsdWUtPmNoaWxkKDApKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAg
ICAgY2FzZSBDaGVja0FkZDoKKyAgICAgICAgY2FzZSBDaGVja0FkZDogewogICAgICAgICAgICAg
aWYgKHJlcGxhY2VXaXRoTmV3VmFsdWUobV92YWx1ZS0+Y2hpbGQoMCktPmNoZWNrQWRkQ29uc3Rh
bnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgxKSkpKQogICAgICAgICAgICAgICAgIGJyZWFrOwog
CkBAIC0xMTAyLDkgKzEyNzEsMTggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBtX2NoYW5n
ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBJbnRSYW5nZSBsZWZ0UmFuZ2UgPSByYW5nZUZvcihtX3ZhbHVlLT5jaGlsZCgwKSk7
CisgICAgICAgICAgICBJbnRSYW5nZSByaWdodFJhbmdlID0gcmFuZ2VGb3IobV92YWx1ZS0+Y2hp
bGQoMSkpOworICAgICAgICAgICAgaWYgKCFsZWZ0UmFuZ2UuY291bGRPdmVyZmxvd0FkZChyaWdo
dFJhbmdlLCBtX3ZhbHVlLT50eXBlKCkpKSB7CisgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhO
ZXdWYWx1ZSgKKyAgICAgICAgICAgICAgICAgICAgbV9wcm9jLmFkZDxWYWx1ZT4oQWRkLCBtX3Zh
bHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxkKDEpKSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQogCi0gICAgICAgIGNhc2UgQ2hlY2tTdWI6CisgICAgICAgIGNhc2UgQ2hlY2tT
dWI6IHsKICAgICAgICAgICAgIGlmIChyZXBsYWNlV2l0aE5ld1ZhbHVlKG1fdmFsdWUtPmNoaWxk
KDApLT5jaGVja1N1YkNvbnN0YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMSkpKSkKICAgICAg
ICAgICAgICAgICBicmVhazsKIApAQCAtMTEyMSw5ICsxMjk5LDE4IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgSW50UmFuZ2UgbGVmdFJhbmdlID0gcmFuZ2VGb3Io
bV92YWx1ZS0+Y2hpbGQoMCkpOworICAgICAgICAgICAgSW50UmFuZ2UgcmlnaHRSYW5nZSA9IHJh
bmdlRm9yKG1fdmFsdWUtPmNoaWxkKDEpKTsKKyAgICAgICAgICAgIGlmICghbGVmdFJhbmdlLmNv
dWxkT3ZlcmZsb3dTdWIocmlnaHRSYW5nZSwgbV92YWx1ZS0+dHlwZSgpKSkgeworICAgICAgICAg
ICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoCisgICAgICAgICAgICAgICAgICAgIG1fcHJvYy5h
ZGQ8VmFsdWU+KFN1YiwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApLCBtX3Zh
bHVlLT5jaGlsZCgxKSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQog
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KIAotICAgICAgICBjYXNlIENoZWNrTXVsOgor
ICAgICAgICBjYXNlIENoZWNrTXVsOiB7CiAgICAgICAgICAgICBpZiAocmVwbGFjZVdpdGhOZXdW
YWx1ZShtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hlY2tNdWxDb25zdGFudChtX3Byb2MsIG1fdmFsdWUt
PmNoaWxkKDEpKSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKQEAgLTExNTEsNyArMTMzOCwx
NiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGlmIChtb2RpZmllZCkKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEludFJhbmdlIGxl
ZnRSYW5nZSA9IHJhbmdlRm9yKG1fdmFsdWUtPmNoaWxkKDApKTsKKyAgICAgICAgICAgIEludFJh
bmdlIHJpZ2h0UmFuZ2UgPSByYW5nZUZvcihtX3ZhbHVlLT5jaGlsZCgxKSk7CisgICAgICAgICAg
ICBpZiAoIWxlZnRSYW5nZS5jb3VsZE92ZXJmbG93TXVsKHJpZ2h0UmFuZ2UsIG1fdmFsdWUtPnR5
cGUoKSkpIHsKKyAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAorICAgICAgICAg
ICAgICAgICAgICBtX3Byb2MuYWRkPFZhbHVlPihNdWwsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3Zh
bHVlLT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQoMSkpKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAKICAgICAg
ICAgY2FzZSBDaGVjazogewogICAgICAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2tWYWx1ZSA9IG1f
dmFsdWUtPmFzPENoZWNrVmFsdWU+KCk7CkBAIC0xMjk0LDYgKzE0OTAsMzcgQEAgcHJpdmF0ZToK
ICAgICAgICAgfQogICAgIH0KIAorICAgIEludFJhbmdlIHJhbmdlRm9yKFZhbHVlKiB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHN3aXRjaCAodmFsdWUtPm9wY29kZSgpKSB7CisgICAgICAgIGNhc2Ug
Q29uc3QzMjoKKyAgICAgICAgY2FzZSBDb25zdDY0OiB7CisgICAgICAgICAgICBpbnQ2NF90IGlu
dFZhbHVlID0gdmFsdWUtPmFzSW50KCk7CisgICAgICAgICAgICByZXR1cm4gSW50UmFuZ2UoaW50
VmFsdWUsIGludFZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgQml0QW5kOgorICAg
ICAgICAgICAgaWYgKHZhbHVlLT5jaGlsZCgxKS0+aGFzSW50KCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIEludFJhbmdlOjpyYW5nZUZvck1hc2sodmFsdWUtPmNoaWxkKDEpLT5hc0ludCgpLCB2
YWx1ZS0+dHlwZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1NocjoK
KyAgICAgICAgICAgIGlmICh2YWx1ZS0+Y2hpbGQoMSktPmhhc0ludDMyKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIEludFJhbmdlOjpyYW5nZUZvclNTaHIodmFsdWUtPmNoaWxkKDEpLT5hc0lu
dDMyKCksIHZhbHVlLT50eXBlKCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2Fz
ZSBaU2hyOgorICAgICAgICAgICAgaWYgKHZhbHVlLT5jaGlsZCgxKS0+aGFzSW50MzIoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gSW50UmFuZ2U6OnJhbmdlRm9yWlNocih2YWx1ZS0+Y2hpbGQo
MSktPmFzSW50MzIoKSwgdmFsdWUtPnR5cGUoKSk7CisgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gSW50UmFuZ2U6OnRvcCh2YWx1ZS0+dHlwZSgpKTsKKyAgICB9CisKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KICAgICB2b2lkIHJl
cGxhY2VXaXRoTmV3KEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCiAgICAgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwVmFsdWUuaAkocmV2aXNpb24gMTk1MTc2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBWYWx1ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xODcsNiArMTg3LDggQEAgcHVibGljOgogICAgICAgICBjbG9iYmVyTGF0ZShzZXQp
OwogICAgIH0KIAorICAgIFJlZ2lzdGVyU2V0JiBlYXJseUNsb2JiZXJlZCgpIHsgcmV0dXJuIG1f
ZWFybHlDbG9iYmVyZWQ7IH0KKyAgICBSZWdpc3RlclNldCYgbGF0ZUNsb2JiZXJlZCgpIHsgcmV0
dXJuIG1fbGF0ZUNsb2JiZXJlZDsgfQogICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBlYXJseUNsb2Ji
ZXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZWFybHlDbG9iYmVyZWQ7IH0KICAgICBjb25zdCBSZWdp
c3RlclNldCYgbGF0ZUNsb2JiZXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF0ZUNsb2JiZXJlZDsg
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2Nh
dGVTdGFjay5jcHAJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcg
QEAKICNpZiBFTkFCTEUoQjNfSklUKQogCiAjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUg
IkFpckluc2VydGlvblNldC5oIgogI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiQWlyTGl2ZW5lc3MuaCIKICNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCkBAIC0xNjYsOCAr
MTY3LDQ3IEBAIHZvaWQgYWxsb2NhdGVTdGFjayhDb2RlJiBjb2RlKQogICAgICAgICBmb3IgKHVu
c2lnbmVkIGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykgewogICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiQW5hbHl6aW5nOiAi
LCBibG9jay0+YXQoaW5zdEluZGV4KSwgIlxuIik7CisKKyAgICAgICAgICAgIC8vIEtpbGwgZGVh
ZCBzdG9yZXMuIEZvciBzaW1wbGljaXR5IHdlIHNheSB0aGF0IGEgc3RvcmUgaXMga2lsbGFibGUg
aWYgaXQgaGFzIG9ubHkgbGF0ZQorICAgICAgICAgICAgLy8gZGVmcyBhbmQgdGhvc2UgbGF0ZSBk
ZWZzIGFyZSB0byB0aGluZ3MgdGhhdCBhcmUgZGVhZCByaWdodCBub3cuIFdlIG9ubHkgZG8gdGhh
dAorICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGF0J3MgdGhlIG9ubHkga2luZCBvZiBkZWFkIHN0
YWNrIHN0b3JlIHdlIHdpbGwgc2VlIGhlcmUuCisgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxv
Y2stPmF0KGluc3RJbmRleCk7CisgICAgICAgICAgICBpZiAoIWluc3QuaGFzTm9uQXJnRWZmZWN0
cygpKSB7CisgICAgICAgICAgICAgICAgYm9vbCBvayA9IHRydWU7CisgICAgICAgICAgICAgICAg
aW5zdC5mb3JFYWNoQXJnKAorICAgICAgICAgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6
OlJvbGUgcm9sZSwgQXJnOjpUeXBlLCBBcmc6OldpZHRoKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoQXJnOjppc0Vhcmx5RGVmKHJvbGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb2sgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFy
Zzo6aXNMYXRlRGVmKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlzU3RhY2soKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG9rID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgU3RhY2tTbG90KiBzbG90ID0gYXJnLnN0YWNrU2xvdCgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHNsb3QtPmtpbmQoKSAhPSBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXMpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvayA9IGZhbHNlOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGxvY2FsQ2FsYy5pc0xpdmUoc2xvdCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvayA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICAgICAgaWYgKG9rKQorICAgICAgICAgICAgICAgICAgICBpbnN0
ID0gSW5zdCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAgICBpbnRl
cmZlcmUoaW5zdEluZGV4KTsKICAgICAgICAgICAgIGxvY2FsQ2FsYy5leGVjdXRlKGluc3RJbmRl
eCk7CisKKyAgICAgICAgICAgIGJsb2NrLT5pbnN0cygpLnJlbW92ZUFsbE1hdGNoaW5nKAorICAg
ICAgICAgICAgICAgIFsmXSAoY29uc3QgSW5zdCYgaW5zdCkgLT4gYm9vbCB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAhaW5zdDsKKyAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgfQog
ICAgICAgICBpbnRlcmZlcmUoLTEpOwogICAgIH0KQEAgLTIzMiwzMyArMjcyLDQzIEBAIHZvaWQg
YWxsb2NhdGVTdGFjayhDb2RlJiBjb2RlKQogICAgIC8vIFdlIHdvdWxkIGhhdmUgdG8gc2NhdmVu
Z2UgZm9yIHRlbXBvcmFyaWVzIGlmIHRoaXMgaGFwcGVuZWQuIEZvcnR1bmF0ZWx5LCB0aGlzIGNh
c2Ugd2lsbCBiZQogICAgIC8vIGV4dHJlbWVseSByYXJlIHNvIHdlIGNhbiBkbyBjcmF6eSB0aGlu
Z3Mgd2hlbiBpdCBhcmlzZXMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1MjUzMAotICAgIAorCisgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChj
b2RlKTsKICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgewotICAgICAgICBmb3Ig
KEluc3QmIGluc3QgOiAqYmxvY2spIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXgg
PSAwOyBpbnN0SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK2luc3RJbmRleCkgeworICAgICAgICAg
ICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOwogICAgICAgICAgICAgaW5zdC5m
b3JFYWNoQXJnKAotICAgICAgICAgICAgICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSwgQXJn
OjpUeXBlLCBBcmc6OldpZHRoIHdpZHRoKQotICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlLCBBcmc6OldpZHRo
IHdpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gc3RhY2tBZGRyID0gWyZdIChpbnQz
Ml90IG9mZnNldCkgLT4gQXJnIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBcmc6
OnN0YWNrQWRkcihvZmZzZXQsIGNvZGUuZnJhbWVTaXplKCksIHdpZHRoKTsKKyAgICAgICAgICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIHN3
aXRjaCAoYXJnLmtpbmQoKSkgewogICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6U3RhY2s6
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IEFyZzo6YWRkcigKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFyZy5vZmZzZXQoKSArIGFyZy5zdGFja1Nsb3QoKS0+b2Zm
c2V0RnJvbUZQKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmcuaXNWYWxpZEZv
cm0od2lkdGgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gQXJnOjphZGRy
KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUbXAoTWFjcm9Bc3NlbWJsZXI6OnN0
YWNrUG9pbnRlclJlZ2lzdGVyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJn
Lm9mZnNldCgpICsgY29kZS5mcmFtZVNpemUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBT
dGFja1Nsb3QqIHNsb3QgPSBhcmcuc3RhY2tTbG90KCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoQXJnOjppc1pEZWYocm9sZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBz
bG90LT5raW5kKCkgPT0gU3RhY2tTbG90S2luZDo6QW5vbnltb3VzCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJiYgc2xvdC0+Ynl0ZVNpemUoKSA+IEFyZzo6Ynl0ZXMod2lkdGgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ3VycmVudGx5IHdlIG9ubHkgaGFuZGxlIHRo
aXMgc2ltcGxlIGNhc2UgYmVjYXVzZSBpdCdzIHRoZSBvbmx5IG9uZQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIHRoYXQgYXJpc2VzOiBaRGVmJ3MgYXJlIG9ubHkgMzItYml0IHJpZ2h0
IG5vdy4gU28sIHdoZW4gd2UgaGl0IHRoZXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gYXNzZXJ0aW9ucyBpdCBtZWFucyB0aGF0IHdlIG5lZWQgdG8gaW1wbGVtZW50IHRob3NlIG90
aGVyIGtpbmRzIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gemVybyBmaWxscy4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG90LT5ieXRlU2l6
ZSgpID09IDgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHdp
ZHRoID09IEFyZzo6V2lkdGgzMik7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBX
ZSByZWx5IG9uIHRoZSBmYWN0IHRoYXQgdGhlcmUgbXVzdCBiZSBzb21lIHdheSB0byBtb3ZlIHpl
cm8gdG8gYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1lbW9yeSBsb2NhdGlvbiB3
aXRob3V0IGZpcnN0IGJ1cm5pbmcgYSByZWdpc3Rlci4gT24gQVJNLCB3ZSB3b3VsZCBkbworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgdXNpbmcgenIuCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNWYWxpZEZvcm0oTW92ZTMyLCBBcmc6Oklt
bSwgQXJnOjpBZGRyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0
Lmluc2VydCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdEluZGV4ICsgMSwg
TW92ZTMyLCBpbnN0Lm9yaWdpbiwgQXJnOjppbW0oMCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YWNrQWRkcihhcmcub2Zmc2V0KCkgKyA0ICsgc2xvdC0+b2Zmc2V0RnJvbUZQ
KCkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IGFyZyA9IHN0YWNrQWRkcihhcmcub2Zmc2V0KCkgKyBzbG90LT5vZmZzZXRGcm9tRlAoKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6Q2FsbEFyZzoKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGFyZyA9IEFyZzo6YWRkcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUbXAoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFy
Zy5vZmZzZXQoKSAtIGNvZGUuZnJhbWVTaXplKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCFhcmcuaXNWYWxpZEZvcm0od2lkdGgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYXJnID0gQXJnOjphZGRyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUbXAo
TWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYXJnLm9mZnNldCgpICsgY29kZS5mcmFtZVNpemUoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBzdGFja0Fk
ZHIoYXJnLm9mZnNldCgpIC0gY29kZS5mcmFtZVNpemUoKSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtMjY2LDYgKzMxNiw3IEBAIHZvaWQgYWxsb2NhdGVTdGFjayhD
b2RlJiBjb2RlKQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICk7CiAgICAgICAgIH0K
KyAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOwogICAgIH0KIH0KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmgJKHJl
dmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2Nh
dGVTdGFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDcgKzMzLDkgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7IG5hbWVzcGFjZQogY2xhc3MgQ29kZTsKIAogLy8gVGhpcyBhbGxvY2F0ZXMg
U3RhY2tTbG90cyB0byBwbGFjZXMgb24gdGhlIHN0YWNrLiBJdCBmaXJzdCBhbGxvY2F0ZXMgdGhl
IHBpbm5lZCBvbmVzIGluIGluZGV4Ci0vLyBvcmRlciBhbmQgdGhlbiBpdCBhbGxvY2F0ZXMgdGhl
IHJlc3QgdXNpbmcgZmlyc3QgZml0LgorLy8gb3JkZXIgYW5kIHRoZW4gaXQgYWxsb2NhdGVzIHRo
ZSByZXN0IHVzaW5nIGZpcnN0IGZpdC4gVGFrZXMgdGhlIG9wcG9ydHVuaXR5IHRvIGtpbGwgZGVh
ZAorLy8gYXNzaWdubWVudHMgdG8gc3RhY2sgc2xvdHMsIHNpbmNlIGl0IGtub3dzIHdoaWNoIG9u
ZXMgYXJlIGxpdmUuIEFsc28gZml4ZXMgWkRlZnMgdG8gYW5vbnltb3VzCisvLyBzdGFjayBzbG90
cy4KIAogdm9pZCBhbGxvY2F0ZVN0YWNrKENvZGUmKTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJBcmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckFyZy5oCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckFyZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNiArMTI2LDcgQEAg
cHVibGljOgogICAgICAgICAvLyBkZXBlbmRpbmcgb24gdGhlIGtpbmQgb2YgdGhlIGFyZ3VtZW50
OgogICAgICAgICAvLwogICAgICAgICAvLyBGb3IgcmVnaXN0ZXI6IHRoZSB1cHBlciBiaXRzIGFy
ZSB6ZXJvLWZpbGxlZC4KKyAgICAgICAgLy8gRm9yIGFub255bW91cyBzdGFjayBzbG90OiB0aGUg
dXBwZXIgYml0cyBhcmUgemVyby1maWxsZWQuCiAgICAgICAgIC8vIEZvciBhZGRyZXNzOiB0aGUg
dXBwZXIgYml0cyBhcmUgbm90IHRvdWNoZWQgKGkuZS4gd2UgZG8gYSAzMi1iaXQgc3RvcmUgaW4g
b3VyIGV4YW1wbGUpLgogICAgICAgICAvLyBGb3IgdG1wOiBlaXRoZXIgdGhlIHVwcGVyIGJpdHMg
YXJlIG5vdCB0b3VjaGVkIG9yIHRoZXkgYXJlIHplcm8tZmlsbGVkLCBhbmQgd2Ugd29uJ3Qga25v
dwogICAgICAgICAvLyB3aGljaCB1bnRpbCB3ZSBsb3dlciB0aGUgdG1wIHRvIGVpdGhlciBhIFN0
YWNrU2xvdCBvciBhIFJlZy4KQEAgLTUxMyw2ICs1MTQsMTcgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KIAorICAgIHN0YXRpYyBBcmcgc3RhY2tBZGRyKGludDMyX3Qg
b2Zmc2V0RnJvbUZQLCB1bnNpZ25lZCBmcmFtZVNpemUsIFdpZHRoIHdpZHRoKQorICAgIHsKKyAg
ICAgICAgQXJnIHJlc3VsdCA9IEFyZzo6YWRkcihBaXI6OlRtcChHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciksIG9mZnNldEZyb21GUCk7CisgICAgICAgIGlmICghcmVzdWx0LmlzVmFsaWRGb3Jt
KHdpZHRoKSkgeworICAgICAgICAgICAgcmVzdWx0ID0gQXJnOjphZGRyKAorICAgICAgICAgICAg
ICAgIEFpcjo6VG1wKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciksCisgICAg
ICAgICAgICAgICAgb2Zmc2V0RnJvbUZQICsgZnJhbWVTaXplKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKwogICAgIC8vIElmIHlvdSBkb24ndCBwYXNzIGEgV2lk
dGgsIHRoaXMgb3B0aW1pc3RpY2FsbHkgYXNzdW1lcyB0aGF0IHlvdSdyZSB1c2luZyB0aGUgcmln
aHQgd2lkdGguCiAgICAgc3RhdGljIGJvb2wgaXNWYWxpZFNjYWxlKHVuc2lnbmVkIHNjYWxlLCBP
cHRpb25hbDxXaWR0aD4gd2lkdGggPSBOdWxsb3B0KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMTk1MTc2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTcsMTEgKzU3LDIxIEBAIHZvaWQgQmFzaWNCbG9jazo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSAKIAogdm9pZCBCYXNpY0Jsb2NrOjpkZWVwRHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAogeworICAgIGR1bXBIZWFkZXIob3V0KTsKKyAgICBmb3IgKGNvbnN0IEluc3Qm
IGluc3QgOiAqdGhpcykKKyAgICAgICAgb3V0LnByaW50KCIgICAgIiwgaW5zdCwgIlxuIik7Cisg
ICAgZHVtcEZvb3RlcihvdXQpOworfQorCit2b2lkIEJhc2ljQmxvY2s6OmR1bXBIZWFkZXIoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKICAgICBvdXQucHJpbnQoIkJCIiwgKnRoaXMsICI6IDsg
ZnJlcXVlbmN5ID0gIiwgbV9mcmVxdWVuY3ksICJcbiIpOwogICAgIGlmIChwcmVkZWNlc3NvcnMo
KS5zaXplKCkpCiAgICAgICAgIG91dC5wcmludCgiICBQcmVkZWNlc3NvcnM6ICIsIHBvaW50ZXJM
aXN0RHVtcChwcmVkZWNlc3NvcnMoKSksICJcbiIpOwotICAgIGZvciAoY29uc3QgSW5zdCYgaW5z
dCA6ICp0aGlzKQotICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBpbnN0LCAiXG4iKTsKK30KKwor
dm9pZCBCYXNpY0Jsb2NrOjpkdW1wRm9vdGVyKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CiAg
ICAgaWYgKHN1Y2Nlc3NvcnMoKS5zaXplKCkpCiAgICAgICAgIG91dC5wcmludCgiICBTdWNjZXNz
b3JzOiAiLCBsaXN0RHVtcChzdWNjZXNzb3JzKCkpLCAiXG4iKTsKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCShyZXZpc2lvbiAxOTUxNzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsgbmFtZXNwYWNlIEFpciB7CiAKK2NsYXNzIEJsb2NrSW5zZXJ0aW9uU2V0OwogY2xhc3MgQ29k
ZTsKIGNsYXNzIEluc2VydGlvblNldDsKIApAQCAtMTI2LDcgKzEyNywxMSBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgdm9pZCBkZWVwRHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0OwogCisgICAgdm9pZCBkdW1wSGVhZGVyKFByaW50U3RyZWFtJikgY29u
c3Q7CisgICAgdm9pZCBkdW1wRm9vdGVyKFByaW50U3RyZWFtJikgY29uc3Q7CisKIHByaXZhdGU6
CisgICAgZnJpZW5kIGNsYXNzIEJsb2NrSW5zZXJ0aW9uU2V0OwogICAgIGZyaWVuZCBjbGFzcyBD
b2RlOwogICAgIGZyaWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7CiAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuY3BwCShyZXZpc2lv
biAxOTUxNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsU3BlY2lh
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDkgQEAgQ0NhbGxTcGVjaWFsOjpDQ2Fs
bFNwZWNpYWwoKQogICAgIG1fY2xvYmJlcmVkUmVncy5leGNsdWRlKFJlZ2lzdGVyU2V0OjpzdGFj
a1JlZ2lzdGVycygpKTsKICAgICBtX2Nsb2JiZXJlZFJlZ3MuZXhjbHVkZShSZWdpc3RlclNldDo6
cmVzZXJ2ZWRIYXJkd2FyZVJlZ2lzdGVycygpKTsKICAgICBtX2Nsb2JiZXJlZFJlZ3MuZXhjbHVk
ZShSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKyAgICBtX2Nsb2JiZXJlZFJl
Z3MuY2xlYXIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgIG1fY2xvYmJlcmVkUmVncy5j
bGVhcihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOworICAgIG1fY2xvYmJlcmVkUmVncy5jbGVh
cihGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7CiB9CiAKIENDYWxsU3BlY2lhbDo6fkNDYWxsU3Bl
Y2lhbCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkocmV2aXNp
b24gMTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAgY2xhc3MgUHJvY2VkdXJlOwogCiBuYW1lc3Bh
Y2UgQWlyIHsKIAorY2xhc3MgQmxvY2tJbnNlcnRpb25TZXQ7CiBjbGFzcyBDQ2FsbFNwZWNpYWw7
CiAKIC8vIFRoaXMgaXMgYW4gSVIgdGhhdCBpcyB2ZXJ5IGNsb3NlIHRvIHRoZSBiYXJlIG1ldGFs
LiBJdCByZXF1aXJlcyBhYm91dCA0MHggbW9yZSBieXRlcyB0aGFuIHRoZQpAQCAtMzI0LDYgKzMy
NSw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgOjpKU0M6OkIzOjpQ
cm9jZWR1cmU7CisgICAgZnJpZW5kIGNsYXNzIEJsb2NrSW5zZXJ0aW9uU2V0OwogICAgIAogICAg
IENvZGUoUHJvY2VkdXJlJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckN1c3RvbS5jcHAJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTEgKzI4LDM1IEBA
CiAKICNpZiBFTkFCTEUoQjNfSklUKQogCisjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKICNp
bmNsdWRlICJCM0NDYWxsVmFsdWUuaCIKICNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgogCiBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CiAKK2Jvb2wgUGF0
Y2hDdXN0b206OmlzVmFsaWRGb3JtKEluc3QmIGluc3QpCit7CisgICAgaWYgKGluc3QuYXJncy5z
aXplKCkgPCAxKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFpbnN0LmFyZ3NbMF0u
aXNTcGVjaWFsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWluc3QuYXJnc1sw
XS5zcGVjaWFsKCktPmlzVmFsaWQoaW5zdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBS
ZWdpc3RlclNldCBjbG9iYmVyZWRFYXJseSA9IGluc3QuZXh0cmFFYXJseUNsb2JiZXJlZFJlZ3Mo
KTsKKyAgICBSZWdpc3RlclNldCBjbG9iYmVyZWRMYXRlID0gaW5zdC5leHRyYUNsb2JiZXJlZFJl
Z3MoKTsKKyAgICBib29sIG9rID0gdHJ1ZTsKKyAgICBpbnN0LmZvckVhY2hUbXAoCisgICAgICAg
IFsmXSAoVG1wJiB0bXAsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUsIEFyZzo6V2lkdGgpIHsK
KyAgICAgICAgICAgIGlmICghdG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgaWYgKEFyZzo6aXNMYXRlRGVmKHJvbGUpIHx8IEFyZzo6aXNMYXRlVXNlKHJv
bGUpKQorICAgICAgICAgICAgICAgIG9rICY9ICFjbG9iYmVyZWRMYXRlLmdldCh0bXAucmVnKCkp
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG9rICY9ICFjbG9iYmVyZWRFYXJs
eS5nZXQodG1wLnJlZygpKTsKKyAgICAgICAgfSk7CisgICAgcmV0dXJuIG9rOworfQorCiBib29s
IENDYWxsQ3VzdG9tOjppc1ZhbGlkRm9ybShJbnN0JiBpbnN0KQogewogICAgIENDYWxsVmFsdWUq
IHZhbHVlID0gaW5zdC5vcmlnaW4tPmFzPENDYWxsVmFsdWU+KCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckN1c3RvbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQ3VzdG9tLmgJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ3VzdG9tLmgJKHdvcmtpbmcgY29weSkKQEAgLTcx
LDE0ICs3MSw3IEBAIHN0cnVjdCBQYXRjaEN1c3RvbSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAKLSAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkRm9ybShJbnN0JiBpbnN0KQotICAgIHsK
LSAgICAgICAgaWYgKGluc3QuYXJncy5zaXplKCkgPCAxKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICBpZiAoIWluc3QuYXJnc1swXS5pc1NwZWNpYWwoKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIGluc3QuYXJnc1swXS5zcGVjaWFsKCktPmlz
VmFsaWQoaW5zdCk7Ci0gICAgfQorICAgIHN0YXRpYyBib29sIGlzVmFsaWRGb3JtKEluc3QmIGlu
c3QpOwogCiAgICAgc3RhdGljIGJvb2wgYWRtaXRzU3RhY2soSW5zdCYgaW5zdCwgdW5zaWduZWQg
YXJnSW5kZXgpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJF
bWl0U2h1ZmZsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJFbWl0U2h1ZmZsZS5jcHAJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2
ICs3MCwxNCBAQCB2b2lkIFNodWZmbGVQYWlyOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiAgICAg
b3V0LnByaW50KHdpZHRoKCksICI6Iiwgc3JjKCksICI9PiIsIGRzdCgpKTsKIH0KIAorSW5zdCBj
cmVhdGVTaHVmZmxlKFZhbHVlKiBvcmlnaW4sIGNvbnN0IFZlY3RvcjxTaHVmZmxlUGFpcj4mIHBh
aXJzKQoreworICAgIEluc3QgcmVzdWx0KFNodWZmbGUsIG9yaWdpbik7CisgICAgZm9yIChjb25z
dCBTaHVmZmxlUGFpciYgcGFpciA6IHBhaXJzKQorICAgICAgICByZXN1bHQuYXBwZW5kKHBhaXIu
c3JjKCksIHBhaXIuZHN0KCksIEFyZzo6d2lkdGhBcmcocGFpci53aWR0aCgpKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwogVmVjdG9yPEluc3Q+IGVtaXRTaHVmZmxlKAogICAgIFZlY3RvcjxT
aHVmZmxlUGFpcj4gcGFpcnMsIHN0ZDo6YXJyYXk8QXJnLCAyPiBzY3JhdGNoZXMsIEFyZzo6VHlw
ZSB0eXBlLCBWYWx1ZSogb3JpZ2luKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJFbWl0U2h1ZmZsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuaAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbWl0U2h1ZmZsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02
Niw2ICs2Niw5IEBAIHByaXZhdGU6CiAgICAgQXJnOjpXaWR0aCBtX3dpZHRoIHsgQXJnOjpXaWR0
aDggfTsKIH07CiAKKy8vIENyZWF0ZSBhIFNodWZmbGUgaW5zdHJ1Y3Rpb24uCitJbnN0IGNyZWF0
ZVNodWZmbGUoVmFsdWUqIG9yaWdpbiwgY29uc3QgVmVjdG9yPFNodWZmbGVQYWlyPiYpOworCiAv
LyBQZXJmb3JtIGEgc2h1ZmZsZSBvZiBhIGdpdmVuIHR5cGUuIFRoZSBzY3JhdGNoIGFyZ3VtZW50
IGlzIG1hbmRhdG9yeS4gWW91IHNob3VsZCBwYXNzIGl0IGFzCiAvLyBmb2xsb3dzOiBJZiB5b3Ug
a25vdyB0aGF0IHlvdSBoYXZlIHNjcmF0Y2ggcmVnaXN0ZXJzIG9yIHRlbXBvcmFyaWVzIGF2YWls
YWJsZSAtIHRoYXQgaXMsIHRoZXkncmUKIC8vIHJlZ2lzdGVycyB0aGF0IGFyZSBub3QgbWVudGlv
bmVkIGluIHRoZSBzaHVmZmxlLCBoYXZlIHRoZSBzYW1lIHR5cGUgYXMgdGhlIHNodWZmbGUsIGFu
ZCBhcmUgbm90CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeE9idmlv
dXNTcGlsbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyRml4T2J2aW91c1NwaWxscy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckZpeE9idmlvdXNTcGlsbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckZpeE9idmlvdXNTcGlsbHMuaCIK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAi
QWlySW5zdElubGluZXMuaCIKKyNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCisjaW5jbHVkZSAi
QjNJbmRleE1hcC5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK25hbWVzcGFjZSB7CisKK2Jvb2wg
dmVyYm9zZSA9IGZhbHNlOworCitjbGFzcyBGaXhPYnZpb3VzU3BpbGxzIHsKK3B1YmxpYzoKKyAg
ICBGaXhPYnZpb3VzU3BpbGxzKENvZGUmIGNvZGUpCisgICAgICAgIDogbV9jb2RlKGNvZGUpCisg
ICAgICAgICwgbV9hdEhlYWQoY29kZS5zaXplKCkpCisgICAgeworICAgIH0KKworICAgIHZvaWQg
cnVuKCkKKyAgICB7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygi
Q29kZSBiZWZvcmUgZml4T2J2aW91c1NwaWxsczpcbiIsIG1fY29kZSk7CisgICAgICAgIAorICAg
ICAgICBjb21wdXRlQWxpYXNlcygpOworICAgICAgICBmaXhDb2RlKCk7CisgICAgfQorCitwcml2
YXRlOgorICAgIHZvaWQgY29tcHV0ZUFsaWFzZXMoKQorICAgIHsKKyAgICAgICAgbV9hdEhlYWRb
bV9jb2RlWzBdXS53YXNWaXNpdGVkID0gdHJ1ZTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgY2hh
bmdlZCA9IHRydWU7CisgICAgICAgIHdoaWxlIChjaGFuZ2VkKSB7CisgICAgICAgICAgICBjaGFu
Z2VkID0gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayog
YmxvY2sgOiBtX2NvZGUpIHsKKyAgICAgICAgICAgICAgICBtX2Jsb2NrID0gYmxvY2s7CisgICAg
ICAgICAgICAgICAgbV9zdGF0ZSA9IG1fYXRIZWFkW2Jsb2NrXTsKKyAgICAgICAgICAgICAgICBp
ZiAoIW1fc3RhdGUud2FzVmlzaXRlZCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiRXhlY3V0aW5nIGJsb2NrICIsICptX2Jsb2NrLCAiOiAiLCBtX3N0YXRlLCAiXG4iKTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKG1faW5zdEluZGV4ID0gMDsgbV9p
bnN0SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK21faW5zdEluZGV4KQorICAgICAgICAgICAgICAg
ICAgICBleGVjdXRlSW5zdCgpOworCisgICAgICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBz
dWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29yQmxvY2tzKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgU3RhdGUmIHRvU3RhdGUgPSBtX2F0SGVhZFtzdWNjZXNzb3JdOworICAgICAgICAgICAgICAg
ICAgICBpZiAodG9TdGF0ZS53YXNWaXNpdGVkKQorICAgICAgICAgICAgICAgICAgICAgICAgY2hh
bmdlZCB8PSB0b1N0YXRlLm1lcmdlKG1fc3RhdGUpOworICAgICAgICAgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvU3RhdGUgPSBtX3N0YXRlOworICAgICAgICAg
ICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2
b2lkIGZpeENvZGUoKQorICAgIHsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1f
Y29kZSkgeworICAgICAgICAgICAgbV9ibG9jayA9IGJsb2NrOworICAgICAgICAgICAgbV9zdGF0
ZSA9IG1fYXRIZWFkW2Jsb2NrXTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fc3RhdGUu
d2FzVmlzaXRlZCk7CisKKyAgICAgICAgICAgIGZvciAobV9pbnN0SW5kZXggPSAwOyBtX2luc3RJ
bmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbV9pbnN0SW5kZXgpIHsKKyAgICAgICAgICAgICAgICBm
aXhJbnN0KCk7CisgICAgICAgICAgICAgICAgZXhlY3V0ZUluc3QoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgZXhlY3V0ZUluc3QoKQorICAgIHsKKyAgICAg
ICAgSW5zdCYgaW5zdCA9IG1fYmxvY2stPmF0KG1faW5zdEluZGV4KTsKKworICAgICAgICBpZiAo
dmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICBFeGVjdXRpbmcgIiwgaW5zdCwgIjog
IiwgbV9zdGF0ZSwgIlxuIik7CisKKyAgICAgICAgSW5zdDo6Zm9yRWFjaERlZldpdGhFeHRyYUNs
b2JiZXJlZFJlZ3M8QXJnPigKKyAgICAgICAgICAgICZpbnN0LCAmaW5zdCwKKyAgICAgICAgICAg
IFsmXSAoY29uc3QgQXJnJiBhcmcsIEFyZzo6Um9sZSwgQXJnOjpUeXBlLCBBcmc6OldpZHRoKSB7
CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2coIiAgICAgICAgQ2xvYmJlcmluZyAiLCBhcmcsICJcbiIpOworICAgICAgICAgICAgICAgIG1f
c3RhdGUuY2xvYmJlcihhcmcpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgc3dpdGNoIChp
bnN0Lm9wY29kZSkgeworICAgICAgICBjYXNlIE1vdmU6CisgICAgICAgICAgICBpZiAoaW5zdC5h
cmdzWzBdLmlzU29tZUltbSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGluc3QuYXJnc1sxXS5p
c1JlZygpKQorICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLmFkZEFsaWFzKFJlZ0NvbnN0KGlu
c3QuYXJnc1sxXS5yZWcoKSwgaW5zdC5hcmdzWzBdLnZhbHVlKCkpKTsKKyAgICAgICAgICAgICAg
ICBlbHNlIGlmIChpc1NwaWxsU2xvdChpbnN0LmFyZ3NbMV0pKQorICAgICAgICAgICAgICAgICAg
ICBtX3N0YXRlLmFkZEFsaWFzKFNsb3RDb25zdChpbnN0LmFyZ3NbMV0uc3RhY2tTbG90KCksIGlu
c3QuYXJnc1swXS52YWx1ZSgpKSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlzU3BpbGxTbG90
KGluc3QuYXJnc1swXSkgJiYgaW5zdC5hcmdzWzFdLmlzUmVnKCkpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoT3B0aW9uYWw8aW50NjRfdD4gY29uc3RhbnQgPSBtX3N0YXRlLmNvbnN0YW50Rm9yKGlu
c3QuYXJnc1swXSkpCisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuYWRkQWxpYXMoUmVnQ29u
c3QoaW5zdC5hcmdzWzFdLnJlZygpLCAqY29uc3RhbnQpKTsKKyAgICAgICAgICAgICAgICBtX3N0
YXRlLmFkZEFsaWFzKAorICAgICAgICAgICAgICAgICAgICBSZWdTbG90KGluc3QuYXJnc1sxXS5y
ZWcoKSwgaW5zdC5hcmdzWzBdLnN0YWNrU2xvdCgpLCBSZWdTbG90OjpBbGxCaXRzKSk7CisgICAg
ICAgICAgICB9IGVsc2UgaWYgKGluc3QuYXJnc1swXS5pc1JlZygpICYmIGlzU3BpbGxTbG90KGlu
c3QuYXJnc1sxXSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoT3B0aW9uYWw8aW50NjRfdD4gY29u
c3RhbnQgPSBtX3N0YXRlLmNvbnN0YW50Rm9yKGluc3QuYXJnc1swXSkpCisgICAgICAgICAgICAg
ICAgICAgIG1fc3RhdGUuYWRkQWxpYXMoU2xvdENvbnN0KGluc3QuYXJnc1sxXS5zdGFja1Nsb3Qo
KSwgKmNvbnN0YW50KSk7CisgICAgICAgICAgICAgICAgbV9zdGF0ZS5hZGRBbGlhcygKKyAgICAg
ICAgICAgICAgICAgICAgUmVnU2xvdChpbnN0LmFyZ3NbMF0ucmVnKCksIGluc3QuYXJnc1sxXS5z
dGFja1Nsb3QoKSwgUmVnU2xvdDo6QWxsQml0cykpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBNb3ZlMzI6CisgICAgICAgICAgICBpZiAoaW5zdC5h
cmdzWzBdLmlzU29tZUltbSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGluc3QuYXJnc1sxXS5p
c1JlZygpKQorICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLmFkZEFsaWFzKFJlZ0NvbnN0KGlu
c3QuYXJnc1sxXS5yZWcoKSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGluc3QuYXJnc1swXS52YWx1
ZSgpKSkpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzU3BpbGxTbG90KGluc3QuYXJnc1sx
XSkpCisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuYWRkQWxpYXMoU2xvdENvbnN0KGluc3Qu
YXJnc1sxXS5zdGFja1Nsb3QoKSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGluc3QuYXJnc1swXS52
YWx1ZSgpKSkpOworICAgICAgICAgICAgfSBlbHNlIGlmIChpc1NwaWxsU2xvdChpbnN0LmFyZ3Nb
MF0pICYmIGluc3QuYXJnc1sxXS5pc1JlZygpKSB7CisgICAgICAgICAgICAgICAgaWYgKE9wdGlv
bmFsPGludDY0X3Q+IGNvbnN0YW50ID0gbV9zdGF0ZS5jb25zdGFudEZvcihpbnN0LmFyZ3NbMF0p
KQorICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLmFkZEFsaWFzKFJlZ0NvbnN0KGluc3QuYXJn
c1sxXS5yZWcoKSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KCpjb25zdGFudCkpKTsKKyAgICAgICAg
ICAgICAgICBtX3N0YXRlLmFkZEFsaWFzKAorICAgICAgICAgICAgICAgICAgICBSZWdTbG90KGlu
c3QuYXJnc1sxXS5yZWcoKSwgaW5zdC5hcmdzWzBdLnN0YWNrU2xvdCgpLCBSZWdTbG90OjpaRXh0
MzIpKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5zdC5hcmdzWzBdLmlzUmVnKCkgJiYgaXNT
cGlsbFNsb3QoaW5zdC5hcmdzWzFdKSkgeworICAgICAgICAgICAgICAgIGlmIChPcHRpb25hbDxp
bnQ2NF90PiBjb25zdGFudCA9IG1fc3RhdGUuY29uc3RhbnRGb3IoaW5zdC5hcmdzWzBdKSkKKyAg
ICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5hZGRBbGlhcyhTbG90Q29uc3QoaW5zdC5hcmdzWzFd
LnN0YWNrU2xvdCgpLCBzdGF0aWNfY2FzdDxpbnQzMl90PigqY29uc3RhbnQpKSk7CisgICAgICAg
ICAgICAgICAgbV9zdGF0ZS5hZGRBbGlhcygKKyAgICAgICAgICAgICAgICAgICAgUmVnU2xvdChp
bnN0LmFyZ3NbMF0ucmVnKCksIGluc3QuYXJnc1sxXS5zdGFja1Nsb3QoKSwgUmVnU2xvdDo6TWF0
Y2gzMikpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBm
aXhJbnN0KCkKKyAgICB7CisgICAgICAgIEluc3QmIGluc3QgPSBtX2Jsb2NrLT5hdChtX2luc3RJ
bmRleCk7CisKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCJGaXhp
bmcgaW5zdCAiLCBpbnN0LCAiOiAiLCBtX3N0YXRlLCAiXG4iKTsKKworICAgICAgICAvLyBDcmVh
dGUgYSBjb3B5IGluIGNhc2Ugd2UgaW52YWxpZGF0ZSB0aGUgaW5zdHJ1Y3Rpb24uIFRoYXQgZG9l
c24ndCBoYXBwZW4gb2Z0ZW4uCisgICAgICAgIEluc3QgaW5zdENvcHkgPSBpbnN0OworCisgICAg
ICAgIC8vIFRoZSBnb2FsIGlzIHRvIHJlcGxhY2UgcmVmZXJlbmNlcyB0byBzdGFjayBzbG90cy4g
V2Ugb25seSBjYXJlIGFib3V0IGVhcmx5IHVzZXMuIFdlIGNhbid0CisgICAgICAgIC8vIGhhbmRs
ZSBVc2VEZWZzLiBXZSBjb3VsZCB0ZWFjaCB0aGlzIHRvIGhhbmRsZSBVc2VEZWZzIGlmIHdlIGlu
c2VydGVkIGEgc3RvcmUgaW5zdHJ1Y3Rpb24KKyAgICAgICAgLy8gYWZ0ZXIgYW5kIHdlIHByb3Zl
ZCB0aGF0IHRoZSByZWdpc3RlciBhbGlhc2VkIHRvIHRoZSBzdGFjayBzbG90IGRpZXMgaGVyZS4g
V2UgY2FuIGdldCB0aGF0CisgICAgICAgIC8vIGluZm9ybWF0aW9uIGZyb20gdGhlIGxpdmVuZXNz
IGFuYWx5c2lzLiBXZSBhbHNvIGNhbid0IGhhbmRsZSBsYXRlIHVzZXMsIGJlY2F1c2Ugd2UgZG9u
J3QKKyAgICAgICAgLy8gbG9vayBhdCBsYXRlIGNsb2JiZXJzIHdoZW4gZG9pbmcgdGhpcy4KKyAg
ICAgICAgYm9vbCBkaWRUaGluZ3MgPSBmYWxzZTsKKyAgICAgICAgYXV0byBoYW5kbGVBcmcgPSBb
Jl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlLCBBcmc6OldpZHRoIHdpZHRo
KSB7CisgICAgICAgICAgICBpZiAoIWlzU3BpbGxTbG90KGFyZykpCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgaWYgKCFBcmc6OmlzRWFybHlVc2Uocm9sZSkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlEZWYocm9sZSkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUcnkg
dG8gZ2V0IGEgcmVnaXN0ZXIgaWYgYXQgYWxsIHBvc3NpYmxlLgorICAgICAgICAgICAgaWYgKGNv
bnN0IFJlZ1Nsb3QqIGFsaWFzID0gbV9zdGF0ZS5nZXRSZWdTbG90KGFyZy5zdGFja1Nsb3QoKSkp
IHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHdpZHRoKSB7CisgICAgICAgICAgICAgICAgY2Fz
ZSBBcmc6OldpZHRoNjQ6CisgICAgICAgICAgICAgICAgICAgIGlmIChhbGlhcy0+bW9kZSAhPSBS
ZWdTbG90OjpBbGxCaXRzKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2coIiAgICBSZXBsYWNpbmcgIiwgYXJnLCAiIHdpdGggIiwgYWxpYXMtPnJlZywgIlxuIik7Cisg
ICAgICAgICAgICAgICAgICAgIGFyZyA9IFRtcChhbGlhcy0+cmVnKTsKKyAgICAgICAgICAgICAg
ICAgICAgZGlkVGhpbmdzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDMyOgorICAgICAgICAgICAgICAgICAgICBpZiAo
dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBSZXBsYWNpbmcg
IiwgYXJnLCAiIHdpdGggIiwgYWxpYXMtPnJlZywgIiAoc3Vid2lkdGggY2FzZSlcbiIpOworICAg
ICAgICAgICAgICAgICAgICBhcmcgPSBUbXAoYWxpYXMtPnJlZyk7CisgICAgICAgICAgICAgICAg
ICAgIGRpZFRoaW5ncyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBSZXZlcnQgdG8gaW1t
ZWRpYXRlIGlmIHRoYXQgZGlkbid0IHdvcmsuCisgICAgICAgICAgICBpZiAoY29uc3QgU2xvdENv
bnN0KiBhbGlhcyA9IG1fc3RhdGUuZ2V0U2xvdENvbnN0KGFyZy5zdGFja1Nsb3QoKSkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygi
ICAgIFJlcGxhY2luZyAiLCBhcmcsICIgd2l0aCBjb25zdGFudCAiLCBhbGlhcy0+Y29uc3RhbnQs
ICJcbiIpOworICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzVmFsaWRJbW1Gb3JtKGFsaWFzLT5j
b25zdGFudCkpCisgICAgICAgICAgICAgICAgICAgIGFyZyA9IEFyZzo6aW1tKGFsaWFzLT5jb25z
dGFudCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBhcmcgPSBB
cmc6OmltbTY0KGFsaWFzLT5jb25zdGFudCk7CisgICAgICAgICAgICAgICAgZGlkVGhpbmdzID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH07
CisgICAgICAgIAorICAgICAgICBpbnN0LmZvckVhY2hBcmcoaGFuZGxlQXJnKTsKKyAgICAgICAg
aWYgKCFkaWRUaGluZ3MgfHwgaW5zdC5pc1ZhbGlkRm9ybSgpKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAKKyAgICAgICAgLy8gV2UgaW50cm9kdWNlZCBzb21ldGhpbmcgaW52YWxpZCBh
bG9uZyB0aGUgd2F5LiBCYWNrIHVwIGFuZCBjYXJlZnVsbHkgaGFuZGxlIGVhY2ggYXJndW1lbnQu
CisgICAgICAgIGluc3QgPSBpbnN0Q29weTsKKyAgICAgICAgQVNTRVJUKGluc3QuaXNWYWxpZEZv
cm0oKSk7CisgICAgICAgIGluc3QuZm9yRWFjaEFyZygKKyAgICAgICAgICAgIFsmXSAoQXJnJiBh
cmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgdHlwZSwgQXJnOjpXaWR0aCB3aWR0aCkgewor
ICAgICAgICAgICAgICAgIEFyZyBhcmdDb3B5ID0gYXJnOworICAgICAgICAgICAgICAgIGhhbmRs
ZUFyZyhhcmcsIHJvbGUsIHR5cGUsIHdpZHRoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWluc3Qu
aXNWYWxpZEZvcm0oKSkKKyAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJnQ29weTsKKyAgICAg
ICAgICAgIH0pOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCBpc1NwaWxsU2xvdChjb25z
dCBBcmcmIGFyZykKKyAgICB7CisgICAgICAgIHJldHVybiBhcmcuaXNTdGFjaygpICYmICFhcmcu
c3RhY2tTbG90KCktPmlzTG9ja2VkKCk7CisgICAgfQorICAgIAorICAgIHN0cnVjdCBSZWdDb25z
dCB7CisgICAgICAgIFJlZ0NvbnN0KCkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBSZWdDb25zdChSZWcgcmVnLCBpbnQ2NF90IGNvbnN0YW50KQorICAgICAgICAgICAg
OiByZWcocmVnKQorICAgICAgICAgICAgLCBjb25zdGFudChjb25zdGFudCkKKyAgICAgICAgewor
ICAgICAgICB9CisKKyAgICAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhIXJlZzsKKyAgICAgICAgfQorCisgICAgICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBv
dXQucHJpbnQocmVnLCAiLT4iLCBjb25zdGFudCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIFJlZyByZWc7CisgICAgICAgIGludDY0X3QgY29uc3RhbnQgeyAwIH07CisgICAgfTsKKwor
ICAgIHN0cnVjdCBSZWdTbG90IHsKKyAgICAgICAgZW51bSBNb2RlIDogaW50OF90IHsKKyAgICAg
ICAgICAgIEFsbEJpdHMsCisgICAgICAgICAgICBaRXh0MzIsIC8vIFJlZ2lzdGVyIGNvbnRhaW5z
IHplcm8tZXh0ZW5kZWQgY29udGVudHMgb2Ygc3RhY2sgc2xvdC4KKyAgICAgICAgICAgIE1hdGNo
MzIgLy8gTG93IDMyIGJpdHMgb2YgcmVnaXN0ZXIgbWF0Y2ggbG93IDMyIGJpdHMgb2Ygc3RhY2sg
c2xvdC4KKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIFJlZ1Nsb3QoKQorICAgICAgICB7
CisgICAgICAgIH0KKworICAgICAgICBSZWdTbG90KFJlZyByZWcsIFN0YWNrU2xvdCogc2xvdCwg
TW9kZSBtb2RlKQorICAgICAgICAgICAgOiBzbG90KHNsb3QpCisgICAgICAgICAgICAsIHJlZyhy
ZWcpCisgICAgICAgICAgICAsIG1vZGUobW9kZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAg
ICAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBzbG90ICYmIHJlZzsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBvdXQucHJpbnQo
cG9pbnRlckR1bXAoc2xvdCksICItPiIsIHJlZyk7CisgICAgICAgICAgICBzd2l0Y2ggKG1vZGUp
IHsKKyAgICAgICAgICAgIGNhc2UgQWxsQml0czoKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQo
IihBbGxCaXRzKSIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBa
RXh0MzI6CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCIoWkV4dDMyKSIpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBNYXRjaDMyOgorICAgICAgICAgICAgICAg
IG91dC5wcmludCgiKE1hdGNoMzIpIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFN0YWNrU2xvdCogc2xvdCB7IG51
bGxwdHIgfTsKKyAgICAgICAgUmVnIHJlZzsKKyAgICAgICAgTW9kZSBtb2RlIHsgQWxsQml0cyB9
OworICAgIH07CisKKyAgICBzdHJ1Y3QgU2xvdENvbnN0IHsKKyAgICAgICAgU2xvdENvbnN0KCkK
KyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgU2xvdENvbnN0KFN0YWNrU2xvdCogc2xv
dCwgaW50NjRfdCBjb25zdGFudCkKKyAgICAgICAgICAgIDogc2xvdChzbG90KQorICAgICAgICAg
ICAgLCBjb25zdGFudChjb25zdGFudCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAg
ZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBzbG90OworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIG91dC5wcmludChwb2ludGVyRHVtcChz
bG90KSwgIi0+IiwgY29uc3RhbnQpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBTdGFj
a1Nsb3QqIHNsb3QgeyBudWxscHRyIH07CisgICAgICAgIGludDY0X3QgY29uc3RhbnQgeyAwIH07
CisgICAgfTsKKworICAgIHN0cnVjdCBTdGF0ZSB7CisgICAgICAgIHZvaWQgYWRkQWxpYXMoY29u
c3QgUmVnQ29uc3QmIG5ld0FsaWFzKQorICAgICAgICB7CisgICAgICAgICAgICByZWdDb25zdC5h
cHBlbmQobmV3QWxpYXMpOworICAgICAgICB9CisgICAgICAgIHZvaWQgYWRkQWxpYXMoY29uc3Qg
UmVnU2xvdCYgbmV3QWxpYXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlZ1Nsb3QuYXBwZW5k
KG5ld0FsaWFzKTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIGFkZEFsaWFzKGNvbnN0IFNsb3RD
b25zdCYgbmV3QWxpYXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNsb3RDb25zdC5hcHBlbmQo
bmV3QWxpYXMpOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgUmVnQ29uc3QqIGdldFJlZ0Nv
bnN0KFJlZyByZWcpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoY29uc3QgUmVn
Q29uc3QmIGFsaWFzIDogcmVnQ29uc3QpIHsKKyAgICAgICAgICAgICAgICBpZiAoYWxpYXMucmVn
ID09IHJlZykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICZhbGlhczsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgY29u
c3QgUmVnU2xvdCogZ2V0UmVnU2xvdChSZWcgcmVnKSBjb25zdAorICAgICAgICB7CisgICAgICAg
ICAgICBmb3IgKGNvbnN0IFJlZ1Nsb3QmIGFsaWFzIDogcmVnU2xvdCkgeworICAgICAgICAgICAg
ICAgIGlmIChhbGlhcy5yZWcgPT0gcmVnKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gJmFs
aWFzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
IH0KKworICAgICAgICBjb25zdCBSZWdTbG90KiBnZXRSZWdTbG90KFN0YWNrU2xvdCogc2xvdCkg
Y29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChjb25zdCBSZWdTbG90JiBhbGlhcyA6
IHJlZ1Nsb3QpIHsKKyAgICAgICAgICAgICAgICBpZiAoYWxpYXMuc2xvdCA9PSBzbG90KQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gJmFsaWFzOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBSZWdTbG90KiBn
ZXRSZWdTbG90KFJlZyByZWcsIFN0YWNrU2xvdCogc2xvdCkgY29uc3QKKyAgICAgICAgeworICAg
ICAgICAgICAgZm9yIChjb25zdCBSZWdTbG90JiBhbGlhcyA6IHJlZ1Nsb3QpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoYWxpYXMucmVnID09IHJlZyAmJiBhbGlhcy5zbG90ID09IHNsb3QpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAmYWxpYXM7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFNsb3RDb25zdCog
Z2V0U2xvdENvbnN0KFN0YWNrU2xvdCogc2xvdCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAg
ICAgZm9yIChjb25zdCBTbG90Q29uc3QmIGFsaWFzIDogc2xvdENvbnN0KSB7CisgICAgICAgICAg
ICAgICAgaWYgKGFsaWFzLnNsb3QgPT0gc2xvdCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
ICZhbGlhczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICB9CisKKyAgICAgICAgT3B0aW9uYWw8aW50NjRfdD4gY29uc3RhbnRGb3IoY29uc3QgQXJn
JiBhcmcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChhcmcuaXNSZWcoKSkgeworICAgICAg
ICAgICAgICAgIGlmIChjb25zdCBSZWdDb25zdCogYWxpYXMgPSBnZXRSZWdDb25zdChhcmcucmVn
KCkpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWxpYXMtPmNvbnN0YW50OworICAgICAg
ICAgICAgICAgIHJldHVybiBOdWxsb3B0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KGFyZy5pc1N0YWNrKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoY29uc3QgU2xvdENvbnN0KiBh
bGlhcyA9IGdldFNsb3RDb25zdChhcmcuc3RhY2tTbG90KCkpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gYWxpYXMtPmNvbnN0YW50OworICAgICAgICAgICAgICAgIHJldHVybiBOdWxsb3B0
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CisgICAgICAgIH0K
KworICAgICAgICB2b2lkIGNsb2JiZXIoY29uc3QgQXJnJiBhcmcpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChhcmcuaXNSZWcoKSkgeworICAgICAgICAgICAgICAgIHJlZ0NvbnN0LnJlbW92
ZUFsbE1hdGNoaW5nKAorICAgICAgICAgICAgICAgICAgICBbJl0gKGNvbnN0IFJlZ0NvbnN0JiBh
bGlhcykgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWxpYXMucmVn
ID09IGFyZy5yZWcoKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAg
cmVnU2xvdC5yZW1vdmVBbGxNYXRjaGluZygKKyAgICAgICAgICAgICAgICAgICAgWyZdIChjb25z
dCBSZWdTbG90JiBhbGlhcykgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gYWxpYXMucmVnID09IGFyZy5yZWcoKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGFyZy5p
c1N0YWNrKCkpIHsKKyAgICAgICAgICAgICAgICBzbG90Q29uc3QucmVtb3ZlQWxsTWF0Y2hpbmco
CisgICAgICAgICAgICAgICAgICAgIFsmXSAoY29uc3QgU2xvdENvbnN0JiBhbGlhcykgLT4gYm9v
bCB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWxpYXMuc2xvdCA9PSBhcmcuc3Rh
Y2tTbG90KCk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHJlZ1Ns
b3QucmVtb3ZlQWxsTWF0Y2hpbmcoCisgICAgICAgICAgICAgICAgICAgIFsmXSAoY29uc3QgUmVn
U2xvdCYgYWxpYXMpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFs
aWFzLnNsb3QgPT0gYXJnLnN0YWNrU2xvdCgpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgbWVyZ2UoY29uc3QgU3RhdGUm
IG90aGVyKQorICAgICAgICB7CisgICAgICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgY2hhbmdlZCB8PSAhIXJlZ0NvbnN0LnJlbW92ZUFsbE1h
dGNoaW5nKAorICAgICAgICAgICAgICAgIFsmXSAoUmVnQ29uc3QmIGFsaWFzKSAtPiBib29sIHsK
KyAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVnQ29uc3QqIG90aGVyQWxpYXMgPSBvdGhlci5n
ZXRSZWdDb25zdChhbGlhcy5yZWcpOworICAgICAgICAgICAgICAgICAgICBpZiAoIW90aGVyQWxp
YXMpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGFsaWFzLmNvbnN0YW50ICE9IG90aGVyQWxpYXMtPmNvbnN0YW50KQorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgY2hhbmdlZCB8PSAh
IXNsb3RDb25zdC5yZW1vdmVBbGxNYXRjaGluZygKKyAgICAgICAgICAgICAgICBbJl0gKFNsb3RD
b25zdCYgYWxpYXMpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBTbG90Q29u
c3QqIG90aGVyQWxpYXMgPSBvdGhlci5nZXRTbG90Q29uc3QoYWxpYXMuc2xvdCk7CisgICAgICAg
ICAgICAgICAgICAgIGlmICghb3RoZXJBbGlhcykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICBpZiAoYWxpYXMuY29uc3RhbnQgIT0gb3Ro
ZXJBbGlhcy0+Y29uc3RhbnQpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0pOwor
CisgICAgICAgICAgICBjaGFuZ2VkIHw9ICEhcmVnU2xvdC5yZW1vdmVBbGxNYXRjaGluZygKKyAg
ICAgICAgICAgICAgICBbJl0gKFJlZ1Nsb3QmIGFsaWFzKSAtPiBib29sIHsKKyAgICAgICAgICAg
ICAgICAgICAgY29uc3QgUmVnU2xvdCogb3RoZXJBbGlhcyA9IG90aGVyLmdldFJlZ1Nsb3QoYWxp
YXMucmVnLCBhbGlhcy5zbG90KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFvdGhlckFsaWFz
KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChhbGlhcy5tb2RlICE9IFJlZ1Nsb3Q6Ok1hdGNoMzIgJiYgYWxpYXMubW9kZSAhPSBv
dGhlckFsaWFzLT5tb2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhbGlhcy5tb2RlID0g
UmVnU2xvdDo6TWF0Y2gzMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVl
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7Cisg
ICAgICAgIH0KKworICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAg
ICAgICAgeworICAgICAgICAgICAgb3V0LnByaW50KAorICAgICAgICAgICAgICAgICJ7cmVnQ29u
c3QgPSBbIiwgbGlzdER1bXAocmVnQ29uc3QpLCAiXSwgc2xvdENvbnN0ID0gWyIsIGxpc3REdW1w
KHNsb3RDb25zdCksCisgICAgICAgICAgICAgICAgIl0sIHJlZ1Nsb3QgPSBbIiwgbGlzdER1bXAo
cmVnU2xvdCksICJdLCB3YXNWaXNpdGVkID0gIiwgd2FzVmlzaXRlZCwgIn0iKTsKKyAgICAgICAg
fQorCisgICAgICAgIFZlY3RvcjxSZWdDb25zdD4gcmVnQ29uc3Q7CisgICAgICAgIFZlY3RvcjxT
bG90Q29uc3Q+IHNsb3RDb25zdDsKKyAgICAgICAgVmVjdG9yPFJlZ1Nsb3Q+IHJlZ1Nsb3Q7Cisg
ICAgICAgIGJvb2wgd2FzVmlzaXRlZCB7IGZhbHNlIH07CisgICAgfTsKKworICAgIENvZGUmIG1f
Y29kZTsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBTdGF0ZT4gbV9hdEhlYWQ7CisgICAgU3Rh
dGUgbV9zdGF0ZTsKKyAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrIHsgbnVsbHB0ciB9OworICAgIHVu
c2lnbmVkIG1faW5zdEluZGV4IHsgMCB9OworfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNl
CisKK3ZvaWQgZml4T2J2aW91c1NwaWxscyhDb2RlJiBjb2RlKQoreworICAgIFBoYXNlU2NvcGUg
cGhhc2VTY29wZShjb2RlLCAiZml4T2J2aW91c1NwaWxscyIpOworCisgICAgRml4T2J2aW91c1Nw
aWxscyBmaXhPYnZpb3VzU3BpbGxzKGNvZGUpOworICAgIGZpeE9idmlvdXNTcGlsbHMucnVuKCk7
Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4T2J2
aW91c1NwaWxscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyRml4T2J2aW91c1NwaWxscy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJGaXhPYnZpb3VzU3BpbGxzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgQWlyRml4T2J2aW91c1NwaWxsc19oCisjZGVmaW5lIEFpckZpeE9idmlvdXNTcGlsbHNf
aAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCisvLyBUaGlzIGlzIGEgZm9yd2FyZCBm
bG93IHBoYXNlIHRoYXQgdHJhY2tzIGVxdWl2YWxlbmNlIGJldHdlZW4gc3BpbGxzIHNsb3RzIGFu
ZCByZWdpc3RlcnMuIEl0CisvLyByZW1vdmVzIGxvYWRzIGZyb20gc3BpbGwgc2xvdHMgaW4gY2Fz
ZXMgd2hlbiB0aGUgY29udGVudHMgb2YgdGhlIHNwaWxsIHNsb3QgY2FuIGJlIGZvdW5kIGluIChv
cgorLy8gY29tcHV0ZWQgZnJvbSkgYSByZWdpc3Rlci4KK3ZvaWQgZml4T2J2aW91c1NwaWxscyhD
b2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJGaXhPYnZpb3VzU3BpbGxzX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhTcGlsbFNsb3RaRGVmLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhTcGlsbFNsb3RaRGVm
LmgJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
Rml4U3BpbGxTbG90WkRlZi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc4ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBBaXJGaXhT
cGlsbFNsb3RaRGVmX2gKLSNkZWZpbmUgQWlyRml4U3BpbGxTbG90WkRlZl9oCi0KLSNpbmNsdWRl
ICJBaXJDb2RlLmgiCi0jaW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0LmgiCi0jaW5jbHVkZSAiQWly
SW5zdElubGluZXMuaCIKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFj
ZSBBaXIgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBJc1NwaWxsU2xvdD4KLXZvaWQgZml4U3BpbGxT
bG90WkRlZihDb2RlJiBjb2RlLCBjb25zdCBJc1NwaWxsU2xvdCYgaXNTcGlsbFNsb3QpCi17Ci0g
ICAgLy8gV2UgY291bGQgaGF2ZSBpbnRyb2R1Y2VkIFpEZWYncyB0byBTdGFja1Nsb3RzIHRoYXQg
YXJlIHdpZGVyIHRoYW4gdGhlIGRlZi4gSW4gdGhhdCBjYXNlLCB3ZQotICAgIC8vIG5lZWQgdG8g
ZW1pdCBjb2RlIHRvIHplcm8tZmlsbCB0aGUgdG9wIGJpdHMgb2YgdGhlIFN0YWNrU2xvdC4KLSAg
ICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KGNvZGUpOwotICAgIGZvciAoQmFzaWNCbG9jayog
YmxvY2sgOiBjb2RlKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gMDsgaW5z
dEluZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbnN0SW5kZXgpIHsKLSAgICAgICAgICAgIEluc3Qm
IGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKLQotICAgICAgICAgICAgaW5zdC5mb3JFYWNo
QXJnKAotICAgICAgICAgICAgICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6
OlR5cGUsIEFyZzo6V2lkdGggd2lkdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFBcmc6
OmlzWkRlZihyb2xlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCFhcmcuaXNTdGFjaygpKQotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWlzU3BpbGxTbG90KGFyZy5zdGFja1Ns
b3QoKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChhcmcuc3RhY2tTbG90KCktPmJ5dGVTaXplKCkgPT0gQXJnOjpieXRlcyh3aWR0aCkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgICAgICAgICAg
Ly8gQ3VycmVudGx5IHdlIG9ubHkgaGFuZGxlIHRoaXMgc2ltcGxlIGNhc2UgYmVjYXVzZSBpdCdz
IHRoZSBvbmx5IG9uZSB0aGF0Ci0gICAgICAgICAgICAgICAgICAgIC8vIGFyaXNlczogWkRlZidz
IGFyZSBvbmx5IDMyLWJpdCByaWdodCBub3cuIFNvLCB3aGVuIHdlIGhpdCB0aGVzZQotICAgICAg
ICAgICAgICAgICAgICAvLyBhc3NlcnRpb25zIGl0IG1lYW5zIHRoYXQgd2UgbmVlZCB0byBpbXBs
ZW1lbnQgdGhvc2Ugb3RoZXIga2luZHMgb2YgemVybwotICAgICAgICAgICAgICAgICAgICAvLyBm
aWxscy4KLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYXJnLnN0YWNrU2xvdCgp
LT5ieXRlU2l6ZSgpID09IDgpOwotICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh3
aWR0aCA9PSBBcmc6OldpZHRoMzIpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIFdlIHJlbHkg
b24gdGhlIGZhY3QgdGhhdCB0aGVyZSBtdXN0IGJlIHNvbWUgd2F5IHRvIG1vdmUgemVybyB0byBh
IG1lbW9yeQotICAgICAgICAgICAgICAgICAgICAvLyBsb2NhdGlvbiB3aXRob3V0IGZpcnN0IGJ1
cm5pbmcgYSByZWdpc3Rlci4gT24gQVJNLCB3ZSB3b3VsZCBkbyB0aGlzIHVzaW5nCi0gICAgICAg
ICAgICAgICAgICAgIC8vIHpyLgotICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChp
c1ZhbGlkRm9ybShNb3ZlMzIsIEFyZzo6SW1tLCBBcmc6OlN0YWNrKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnN0
SW5kZXggKyAxLCBNb3ZlMzIsIGluc3Qub3JpZ2luLCBBcmc6OmltbSgwKSwgYXJnLndpdGhPZmZz
ZXQoNCkpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0gICAgICAgIGluc2VydGlv
blNldC5leGVjdXRlKGJsb2NrKTsKLSAgICB9Ci19Ci0KLX0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzOjpBaXIKLQotI2VuZGlmIC8vIEFpckZpeFNwaWxsU2xvdFpEZWZfaAotCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkocmV2aXNpb24gMTk1
MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDEwICszMSwxMiBAQAogI2luY2x1ZGUgIkFpckFsbG9jYXRlU3Rh
Y2suaCIKICNpbmNsdWRlICJBaXJDb2RlLmgiCiAjaW5jbHVkZSAiQWlyRWxpbWluYXRlRGVhZENv
ZGUuaCIKKyNpbmNsdWRlICJBaXJGaXhPYnZpb3VzU3BpbGxzLmgiCiAjaW5jbHVkZSAiQWlyRml4
UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmgiCiAjaW5jbHVkZSAiQWlyR2VuZXJhdGlvbkNvbnRleHQu
aCIKICNpbmNsdWRlICJBaXJIYW5kbGVDYWxsZWVTYXZlcy5oIgogI2luY2x1ZGUgIkFpckl0ZXJh
dGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmgiCisjaW5jbHVkZSAiQWlyTG9nUmVnaXN0ZXJQcmVzc3Vy
ZS5oIgogI2luY2x1ZGUgIkFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oIgogI2luY2x1ZGUgIkFpckxv
d2VyTWFjcm9zLmgiCiAjaW5jbHVkZSAiQWlyT3Bjb2RlVXRpbHMuaCIKQEAgLTg0LDYgKzg2LDE2
IEBAIHZvaWQgcHJlcGFyZUZvckdlbmVyYXRpb24oQ29kZSYgY29kZSkKICAgICBlbHNlCiAgICAg
ICAgIGl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nKGNvZGUpOwogCisgICAgaWYgKE9wdGlvbnM6
OmxvZ0FpclJlZ2lzdGVyUHJlc3N1cmUoKSkgeworICAgICAgICBkYXRhTG9nKCJSZWdpc3RlciBw
cmVzc3VyZSBhZnRlciByZWdpc3RlciBhbGxvY2F0aW9uOlxuIik7CisgICAgICAgIGxvZ1JlZ2lz
dGVyUHJlc3N1cmUoY29kZSk7CisgICAgfQorCisgICAgLy8gVGhpcyByZXBsYWNlcyB1c2VzIG9m
IHNwaWxsIHNsb3RzIHdpdGggcmVnaXN0ZXJzIG9yIGNvbnN0YW50cyBpZiBwb3NzaWJsZS4gSXQg
ZG9lcyB0aGlzIGJ5CisgICAgLy8gbWluaW1pemluZyB0aGUgYW1vdW50IHRoYXQgd2UgcGVydHVy
YiB0aGUgYWxyZWFkeS1jaG9zZW4gcmVnaXN0ZXIgYWxsb2NhdGlvbi4gSXQgbWF5IGV4dGVuZAor
ICAgIC8vIHRoZSBsaXZlIHJhbmdlcyBvZiByZWdpc3RlcnMgdGhvdWdoLgorICAgIGZpeE9idmlv
dXNTcGlsbHMoY29kZSk7CisKICAgICBsb3dlckFmdGVyUmVnQWxsb2MoY29kZSk7CiAKICAgICAv
LyBQcmlvciB0byB0aGlzIHBvaW50IHRoZSBwcm9sb2d1ZSBhbmQgZXBpbG9ndWUgaXMgaW1wbGlj
aXQuIFRoaXMgbWFrZXMgaXQgZXhwbGljaXQuIEl0IGFsc28KQEAgLTEzMiw2ICsxNDQsMTcgQEAg
dm9pZCBnZW5lcmF0ZShDb2RlJiBjb2RlLCBDQ2FsbEhlbHBlcnMmIAogICAgIGlmIChjb2RlLmZy
YW1lU2l6ZSgpKQogICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KC1jb2RlLmZyYW1lU2l6ZSgpKSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKIAorICAgIGF1dG8gYXJnRm9yID0gWyZdIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiBlbnRy
eSkgLT4gQ0NhbGxIZWxwZXJzOjpBZGRyZXNzIHsKKyAgICAgICAgcmV0dXJuIENDYWxsSGVscGVy
czo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZW50cnkub2Zmc2V0KCkpOwor
ICAgIH07CisgICAgCisgICAgZm9yIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiBlbnRyeSA6IGNv
ZGUuY2FsbGVlU2F2ZVJlZ2lzdGVycygpKSB7CisgICAgICAgIGlmIChlbnRyeS5yZWcoKS5pc0dQ
UigpKQorICAgICAgICAgICAgaml0LnN0b3JlUHRyKGVudHJ5LnJlZygpLmdwcigpLCBhcmdGb3Io
ZW50cnkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaml0LnN0b3JlRG91YmxlKGVudHJ5
LnJlZygpLmZwcigpLCBhcmdGb3IoZW50cnkpKTsKKyAgICB9CisKICAgICBHZW5lcmF0aW9uQ29u
dGV4dCBjb250ZXh0OwogICAgIGNvbnRleHQuY29kZSA9ICZjb2RlOwogICAgIEluZGV4TWFwPEJh
c2ljQmxvY2ssIENDYWxsSGVscGVyczo6TGFiZWw+IGJsb2NrTGFiZWxzKGNvZGUuc2l6ZSgpKTsK
QEAgLTE2Miw5ICsxODUsMTUgQEAgdm9pZCBnZW5lcmF0ZShDb2RlJiBjb2RlLCBDQ2FsbEhlbHBl
cnMmIAogICAgICAgICBpZiAoaXNSZXR1cm4oYmxvY2stPmxhc3QoKS5vcGNvZGUpKSB7CiAgICAg
ICAgICAgICAvLyBXZSBjdXJyZW50bHkgZG9uJ3QgcmVwcmVzZW50IHRoZSBmdWxsIHByb2xvZ3Vl
L2VwaWxvZ3VlIGluIEFpciwgc28gd2UgbmVlZCB0bwogICAgICAgICAgICAgLy8gaGF2ZSB0aGlz
IG92ZXJyaWRlLgotICAgICAgICAgICAgaWYgKGNvZGUuZnJhbWVTaXplKCkpCisgICAgICAgICAg
ICBpZiAoY29kZS5mcmFtZVNpemUoKSkgeworICAgICAgICAgICAgICAgIGZvciAoY29uc3QgUmVn
aXN0ZXJBdE9mZnNldCYgZW50cnkgOiBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlcnMoKSkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoZW50cnkucmVnKCkuaXNHUFIoKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGppdC5sb2FkUHRyKGFyZ0ZvcihlbnRyeSksIGVudHJ5LnJlZygpLmdwcigpKTsK
KyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgaml0Lmxv
YWREb3VibGUoYXJnRm9yKGVudHJ5KSwgZW50cnkucmVnKCkuZnByKCkpOworICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKLSAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIGppdC5lbWl0
RnVuY3Rpb25FcGlsb2d1ZVdpdGhFbXB0eUZyYW1lKCk7CiAgICAgICAgICAgICBqaXQucmV0KCk7
CiAgICAgICAgICAgICBjb250aW51ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwCShyZXZpc2lvbiAxOTUxNzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAogI2lmIEVOQUJMRShCM19KSVQpCiAK
ICNpbmNsdWRlICJBaXJDb2RlLmgiCi0jaW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0LmgiCiAjaW5j
bHVkZSAiQWlySW5zdElubGluZXMuaCIKICNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCiAKQEAg
LTcxLDM0ICs3MCw2IEBAIHZvaWQgaGFuZGxlQ2FsbGVlU2F2ZXMoQ29kZSYgY29kZSkKICAgICAv
LyBUaGlzIGlzIGEgYml0IHdlaXJkIHNpbmNlIHdlIGNvdWxkIGhhdmUgYWxyZWFkeSBwaW5uZWQg
YSBkaWZmZXJlbnQgc3RhY2sgc2xvdCB0byB0aGlzCiAgICAgLy8gYXJlYS4gQWxzbywgb3VyIHJ1
bnRpbWUgZG9lcyBub3QgcmVxdWlyZSB1cyB0byBwaW4gdGhlIHNhdmVzIGFyZWEuIE1heWJlIHdl
IHNob3VsZG4ndCBwaW4gaXQ/CiAgICAgc2F2ZXNBcmVhLT5zZXRPZmZzZXRGcm9tRlAoLWJ5dGVT
aXplKTsKLQotICAgIGF1dG8gYXJnRm9yID0gWyZdIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiBl
bnRyeSkgLT4gQXJnIHsKLSAgICAgICAgcmV0dXJuIEFyZzo6c3RhY2soc2F2ZXNBcmVhLCBlbnRy
eS5vZmZzZXQoKSArIGJ5dGVTaXplKTsKLSAgICB9OwotCi0gICAgSW5zZXJ0aW9uU2V0IGluc2Vy
dGlvblNldChjb2RlKTsKLSAgICAKLSAgICAvLyBGaXJzdCBpbnNlcnQgc2F2aW5nIGNvZGUgaW4g
dGhlIHByb2xvZ3VlLgotICAgIGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgZW50cnkgOiBj
b2RlLmNhbGxlZVNhdmVSZWdpc3RlcnMoKSkgewotICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0
KAotICAgICAgICAgICAgMCwgZW50cnkucmVnKCkuaXNHUFIoKSA/IE1vdmUgOiBNb3ZlRG91Ymxl
LCBjb2RlWzBdLT5hdCgwKS5vcmlnaW4sCi0gICAgICAgICAgICBUbXAoZW50cnkucmVnKCkpLCBh
cmdGb3IoZW50cnkpKTsKLSAgICB9Ci0gICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoY29kZVswXSk7
Ci0KLSAgICAvLyBOb3cgaW5zZXJ0IHJlc3RvcmUgY29kZSBhdCBlcGlsb2d1ZXMuCi0gICAgZm9y
IChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKLSAgICAgICAgSW5zdCYgbGFzdCA9IGJsb2Nr
LT5sYXN0KCk7Ci0gICAgICAgIGlmICghaXNSZXR1cm4obGFzdC5vcGNvZGUpKQotICAgICAgICAg
ICAgY29udGludWU7Ci0KLSAgICAgICAgZm9yIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiBlbnRy
eSA6IGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVycygpKSB7Ci0gICAgICAgICAgICBpbnNlcnRpb25T
ZXQuaW5zZXJ0KAotICAgICAgICAgICAgICAgIGJsb2NrLT5zaXplKCkgLSAxLCBlbnRyeS5yZWco
KS5pc0dQUigpID8gTW92ZSA6IE1vdmVEb3VibGUsIGxhc3Qub3JpZ2luLAotICAgICAgICAgICAg
ICAgIGFyZ0ZvcihlbnRyeSksIFRtcChlbnRyeS5yZWcoKSkpOwotICAgICAgICB9Ci0gICAgICAg
IGluc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKLSAgICB9CiB9CiAKIH0gfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzOjpBaXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
SW5zdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5z
dC5oCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckluc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTYyLDYgKzE2Miw3IEBAIHB1YmxpYzoKICAgICAv
LwogICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgYXV0by1nZW5lcmF0ZWQgYnkgb3Bjb2RlX2dlbmVy
YXRvci5yYi4KICAgICBib29sIGFkbWl0c1N0YWNrKHVuc2lnbmVkIGFyZ0luZGV4KTsKKyAgICBi
b29sIGFkbWl0c1N0YWNrKEFyZyYpOwogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgaW5z
dHJ1Y3Rpb24gY2FuIGhhdmUgYW55IGVmZmVjdHMgb3RoZXIgdGhhbiBjb250cm9sIGZsb3cgb3Ig
YXJndW1lbnRzLgogICAgIGJvb2wgaGFzTm9uQXJnTm9uQ29udHJvbEVmZmVjdHMoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdElubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxpbmVzLmgJKHJldmlz
aW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdElubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTU4LDYgKzE1OCwxMSBAQCBpbmxpbmUgdm9pZCBJbnN0
OjpyZXBvcnRVc2VkUmVnaXN0ZXJzKGNvCiAgICAgYXJnc1swXS5zcGVjaWFsKCktPnJlcG9ydFVz
ZWRSZWdpc3RlcnMoKnRoaXMsIHVzZWRSZWdpc3RlcnMpOwogfQogCitpbmxpbmUgYm9vbCBJbnN0
OjphZG1pdHNTdGFjayhBcmcmIGFyZykKK3sKKyAgICByZXR1cm4gYWRtaXRzU3RhY2soJmFyZyAt
ICZhcmdzWzBdKTsKK30KKwogaW5saW5lIGJvb2wgaXNTaGlmdFZhbGlkKGNvbnN0IEluc3QmIGlu
c3QpCiB7CiAjaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySXRlcmF0ZWRSZWdpc3RlckNv
YWxlc2NpbmcuY3BwCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjksNyArMjksNiBAQAogI2lmIEVOQUJMRShCM19KSVQpCiAKICNpbmNsdWRlICJBaXJDb2Rl
LmgiCi0jaW5jbHVkZSAiQWlyRml4U3BpbGxTbG90WkRlZi5oIgogI2luY2x1ZGUgIkFpckluc2Vy
dGlvblNldC5oIgogI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQWlyTGl2
ZW5lc3MuaCIKQEAgLTExMjQsMTEgKzExMjMsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAvLyBjb21wbGV0ZSByZWdpc3RlciBhbGxvY2F0aW9uLiBTbywgd2UgcmVjb3JkIHRoaXMgYmVm
b3JlIHN0YXJ0aW5nLgogICAgICAgICAgICAgICAgIGJvb2wgbWF5QmVDb2FsZXNjYWJsZSA9IGFs
bG9jYXRvci5tYXlCZUNvYWxlc2NhYmxlKGluc3QpOwogCi0gICAgICAgICAgICAgICAgLy8gT24g
WDg2XzY0LCBNb3ZlMzIgaXMgY2hlYXBlciBpZiB3ZSBrbm93IHRoYXQgaXQncyBlcXVpdmFsZW50
IHRvIGEgTW92ZS4gSXQncworICAgICAgICAgICAgICAgIC8vIE1vdmUzMiBpcyBjaGVhcGVyIGlm
IHdlIGtub3cgdGhhdCBpdCdzIGVxdWl2YWxlbnQgdG8gYSBNb3ZlLiBJdCdzCiAgICAgICAgICAg
ICAgICAgLy8gZXF1aXZhbGVudCBpZiB0aGUgZGVzdGluYXRpb24ncyBoaWdoIGJpdHMgYXJlIG5v
dCBvYnNlcnZhYmxlIG9yIGlmIHRoZSBzb3VyY2UncyBoaWdoCiAgICAgICAgICAgICAgICAgLy8g
Yml0cyBhcmUgYWxsIHplcm8uIE5vdGUgdGhhdCB3ZSBkb24ndCBoYXZlIHRoZSBvcHBvc2l0ZSBv
cHRpbWl6YXRpb24gZm9yIG90aGVyCiAgICAgICAgICAgICAgICAgLy8gYXJjaGl0ZWN0dXJlcywg
d2hpY2ggbWF5IHByZWZlciBNb3ZlIG92ZXIgTW92ZTMyLCBiZWNhdXNlIE1vdmUgaXMgY2Fub25p
Y2FsIGFscmVhZHkuCi0gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gQXJnOjpHUCAmJiBvcHRp
bWl6ZUZvclg4Nl82NCgpICYmIGluc3Qub3Bjb2RlID09IE1vdmUKKyAgICAgICAgICAgICAgICBp
ZiAodHlwZSA9PSBBcmc6OkdQICYmIGluc3Qub3Bjb2RlID09IE1vdmUKICAgICAgICAgICAgICAg
ICAgICAgJiYgaW5zdC5hcmdzWzBdLmlzVG1wKCkgJiYgaW5zdC5hcmdzWzFdLmlzVG1wKCkpIHsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKG1fdG1wV2lkdGgudXNlV2lkdGgoaW5zdC5hcmdzWzFd
LnRtcCgpKSA8PSBBcmc6OldpZHRoMzIKICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1fdG1w
V2lkdGguZGVmV2lkdGgoaW5zdC5hcmdzWzBdLnRtcCgpKSA8PSBBcmc6OldpZHRoMzIpCkBAIC0x
MTY4LDcgKzExNjcsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgYWRkU3BpbGxBbmRGaWxsKGNvbnN0
IENvbG9yaW5nQWxsb2NhdG9yPHR5cGU+JiBhbGxvY2F0b3IsIEhhc2hTZXQ8dW5zaWduZWQ+JiB1
bnNwaWxsYWJsZVRtcHMpCiAgICAgewogICAgICAgICBIYXNoTWFwPFRtcCwgU3RhY2tTbG90Kj4g
c3RhY2tTbG90czsKLSAgICAgICAgdW5zaWduZWQgbmV3U3RhY2tTbG90VGhyZXNob2xkID0gbV9j
b2RlLnN0YWNrU2xvdHMoKS5zaXplKCk7CiAgICAgICAgIGZvciAoVG1wIHRtcCA6IGFsbG9jYXRv
ci5zcGlsbGVkVG1wcygpKSB7CiAgICAgICAgICAgICAvLyBBbGwgdGhlIHNwaWxsZWQgdmFsdWVz
IGJlY29tZSB1bnNwaWxsYWJsZS4KICAgICAgICAgICAgIHVuc3BpbGxhYmxlVG1wcy5hZGQoQWJz
b2x1dGVUbXBNYXBwZXI8dHlwZT46OmFic29sdXRlSW5kZXgodG1wKSk7CkBAIC0xMjAyLDE2ICsx
MjAwLDE5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAg
Ly8gVHJ5IHRvIHJlcGxhY2UgdGhlIHJlZ2lzdGVyIHVzZSBieSBtZW1vcnkgdXNlIHdoZW4gcG9z
c2libGUuCi0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluc3QuYXJn
cy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgICAgICBBcmcmIGFyZyA9IGluc3QuYXJn
c1tpXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFyZy5pc1RtcCgpICYmIGFyZy50eXBlKCkg
PT0gdHlwZSAmJiAhYXJnLmlzUmVnKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8g
c3RhY2tTbG90RW50cnkgPSBzdGFja1Nsb3RzLmZpbmQoYXJnLnRtcCgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChzdGFja1Nsb3RFbnRyeSAhPSBzdGFja1Nsb3RzLmVuZCgpICYmIGlu
c3QuYWRtaXRzU3RhY2soaSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBB
cmc6OnN0YWNrKHN0YWNrU2xvdEVudHJ5LT52YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGlkU3BpbGwgPSB0cnVlOworICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaEFyZygK
KyAgICAgICAgICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlLCBBcmc6OlR5cGUg
YXJnVHlwZSwgQXJnOjpXaWR0aCB3aWR0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGFyZy5pc1RtcCgpICYmIGFyZ1R5cGUgPT0gdHlwZSAmJiAhYXJnLmlzUmVnKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHN0YWNrU2xvdEVudHJ5ID0gc3RhY2tTbG90cy5m
aW5kKGFyZy50bXAoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrU2xv
dEVudHJ5ICE9IHN0YWNrU2xvdHMuZW5kKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJiYgaW5zdC5hZG1pdHNTdGFjayhhcmcpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YWNrU2xvdEVudHJ5LT52YWx1ZS0+ZW5zdXJlU2l6ZSgKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvcmNlTW92ZTMySWZEaWRTcGlsbCA/IDQgOiBBcmc6OmJ5
dGVzKHdpZHRoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IEFyZzo6
c3RhY2soc3RhY2tTbG90RW50cnktPnZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGlkU3BpbGwgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSk7CiAKICAgICAgICAgICAgICAgICBpZiAo
ZGlkU3BpbGwgJiYgZm9yY2VNb3ZlMzJJZkRpZFNwaWxsKQogICAgICAgICAgICAgICAgICAgICBp
bnN0Lm9wY29kZSA9IE1vdmUzMjsKQEAgLTEyNjIsMTIgKzEyNjMsNiBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0KLSAgICAgICAgZml4
U3BpbGxTbG90WkRlZigKLSAgICAgICAgICAgIG1fY29kZSwKLSAgICAgICAgICAgIFsmXSAoU3Rh
Y2tTbG90KiBzdGFja1Nsb3QpIC0+IGJvb2wgewotICAgICAgICAgICAgICAgIHJldHVybiBzdGFj
a1Nsb3QtPmluZGV4KCkgPj0gbmV3U3RhY2tTbG90VGhyZXNob2xkOwotICAgICAgICAgICAgfSk7
CiAgICAgfQogCiAgICAgQ29kZSYgbV9jb2RlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJMaXZlbmVzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsy
OSw3IEBACiAjaWYgRU5BQkxFKEIzX0pJVCkKIAogI2luY2x1ZGUgIkFpckJhc2ljQmxvY2suaCIK
KyNpbmNsdWRlICJBaXJDb2RlLmgiCiAjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKICNpbmNs
dWRlICJBaXJUbXBJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNJbmRleE1hcC5oIgpAQCAtOTMsOSAr
OTQsMTEgQEAgc3RydWN0IFJlZ0xpdmVuZXNzQWRhcHRlciB7CiB9OwogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBBZGFwdGVyPgotY2xhc3MgQWJzdHJhY3RMaXZlbmVzcyA6IHByaXZhdGUgQWRhcHRlciB7
CitjbGFzcyBBYnN0cmFjdExpdmVuZXNzIDogcHVibGljIEFkYXB0ZXIgewogICAgIHN0cnVjdCBX
b3Jrc2V0OwogcHVibGljOgorICAgIHR5cGVkZWYgdHlwZW5hbWUgQWRhcHRlcjo6VGhpbmcgVGhp
bmc7CisgICAgCiAgICAgQWJzdHJhY3RMaXZlbmVzcyhDb2RlJiBjb2RlKQogICAgICAgICA6IEFk
YXB0ZXIoY29kZSkKICAgICAgICAgLCBtX3dvcmtzZXQoQWRhcHRlcjo6bWF4SW5kZXgoY29kZSkp
CkBAIC0yMjIsNiArMjI1LDExIEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgSXRlcmF0b3IgYmVn
aW4oKSBjb25zdCB7IHJldHVybiBJdGVyYXRvcihtX2xpdmVuZXNzLCBtX2xpdmVuZXNzLm1fd29y
a3NldC5iZWdpbigpKTsgfQogICAgICAgICAgICAgSXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1
cm4gSXRlcmF0b3IobV9saXZlbmVzcywgbV9saXZlbmVzcy5tX3dvcmtzZXQuZW5kKCkpOyB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGJvb2wgY29udGFpbnMoY29uc3QgdHlwZW5hbWUgQWRh
cHRlcjo6VGhpbmcmIHRoaW5nKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBtX2xpdmVuZXNzLm1fd29ya3NldC5jb250YWlucyhBZGFwdGVyOjp2YWx1ZVRvSW5k
ZXgodGhpbmcpKTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICBwcml2YXRlOgogICAgICAgICAg
ICAgQWJzdHJhY3RMaXZlbmVzcyYgbV9saXZlbmVzczsKQEAgLTIzMiw2ICsyNDAsMTEgQEAgcHVi
bGljOgogICAgICAgICAgICAgcmV0dXJuIEl0ZXJhYmxlKG1fbGl2ZW5lc3MpOwogICAgICAgICB9
CiAKKyAgICAgICAgYm9vbCBpc0xpdmUoY29uc3QgdHlwZW5hbWUgQWRhcHRlcjo6VGhpbmcmIHRo
aW5nKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbGl2ZSgpLmNvbnRhaW5z
KHRoaW5nKTsKKyAgICAgICAgfQorCiAgICAgICAgIHZvaWQgZXhlY3V0ZSh1bnNpZ25lZCBpbnN0
SW5kZXgpCiAgICAgICAgIHsKICAgICAgICAgICAgIEluc3QmIGluc3QgPSBtX2Jsb2NrLT5hdChp
bnN0SW5kZXgpOwpAQCAtMjc3LDYgKzI5MCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIEJhc2ljQmxv
Y2sqIG1fYmxvY2s7CiAgICAgfTsKIAorICAgIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHJhd0xp
dmVBdEhlYWQoQmFzaWNCbG9jayogYmxvY2spCisgICAgeworICAgICAgICByZXR1cm4gbV9saXZl
QXRIZWFkW2Jsb2NrXTsKKyAgICB9CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVbmRlcmx5aW5n
SXRlcmFibGU+CiAgICAgY2xhc3MgSXRlcmFibGUgewogICAgIHB1YmxpYzoKQEAgLTMzMCw2ICsz
NDgsMTEgQEAgcHVibGljOgogICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJu
IGl0ZXJhdG9yKG1fbGl2ZW5lc3MsIG1faXRlcmFibGUuYmVnaW4oKSk7IH0KICAgICAgICAgaXRl
cmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9saXZlbmVzcywgbV9pdGVyYWJs
ZS5lbmQoKSk7IH0KIAorICAgICAgICBib29sIGNvbnRhaW5zKGNvbnN0IHR5cGVuYW1lIEFkYXB0
ZXI6OlRoaW5nJiB0aGluZykgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1f
bGl2ZW5lc3MubV93b3Jrc2V0LmNvbnRhaW5zKEFkYXB0ZXI6OnZhbHVlVG9JbmRleCh0aGluZykp
OworICAgICAgICB9CisKICAgICBwcml2YXRlOgogICAgICAgICBBYnN0cmFjdExpdmVuZXNzJiBt
X2xpdmVuZXNzOwogICAgICAgICBjb25zdCBVbmRlcmx5aW5nSXRlcmFibGUmIG1faXRlcmFibGU7
CkBAIC0zNDUsNiArMzY4LDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gSXRlcmFibGU8dHlw
ZW5hbWUgQWRhcHRlcjo6SW5kZXhTZXQ+KCp0aGlzLCBtX2xpdmVBdFRhaWxbYmxvY2tdKTsKICAg
ICB9CiAKKyAgICBJbmRleFNwYXJzZVNldDxVbnNhZmVWZWN0b3JPdmVyZmxvdz4mIHdvcmtzZXQo
KSB7IHJldHVybiBtX3dvcmtzZXQ7IH0KKwogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTG9j
YWxDYWxjOwogICAgIGZyaWVuZCBzdHJ1Y3QgTG9jYWxDYWxjOjpJdGVyYWJsZTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb2dSZWdpc3RlclBy
ZXNzdXJlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5oIgorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJJbnN0
SW5saW5lcy5oIgorI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBsb2dSZWdpc3RlclByZXNzdXJl
KENvZGUmIGNvZGUpCit7CisgICAgY29uc3QgdW5zaWduZWQgdG90YWxDb2x1bW5zID0gMjAwOwor
ICAgIGNvbnN0IHVuc2lnbmVkIHJlZ2lzdGVyQ29sdW1ucyA9IDEwMDsKKyAgICAKKyAgICBSZWdM
aXZlbmVzcyBsaXZlbmVzcyhjb2RlKTsKKworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBj
b2RlKSB7CisgICAgICAgIFJlZ0xpdmVuZXNzOjpMb2NhbENhbGMgbG9jYWxDYWxjKGxpdmVuZXNz
LCBibG9jayk7CisKKyAgICAgICAgYmxvY2stPmR1bXBIZWFkZXIoV1RGOjpkYXRhRmlsZSgpKTsK
KworICAgICAgICBWZWN0b3I8Q1N0cmluZz4gaW5zdER1bXBzOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykgeworICAgICAgICAg
ICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOworICAgICAgICAgICAgSW5zdCog
cHJldkluc3QgPSBibG9jay0+Z2V0KGluc3RJbmRleCAtIDEpOworCisgICAgICAgICAgICBsb2Nh
bENhbGMuZXhlY3V0ZShpbnN0SW5kZXgpOworCisgICAgICAgICAgICBSZWdpc3RlclNldCBzZXQ7
CisgICAgICAgICAgICBzZXQuc2V0QWxsKGxvY2FsQ2FsYy5saXZlKCkpOworICAgICAgICAgICAg
SW5zdDo6Zm9yRWFjaERlZldpdGhFeHRyYUNsb2JiZXJlZFJlZ3M8UmVnPigKKyAgICAgICAgICAg
ICAgICBwcmV2SW5zdCwgJmluc3QsCisgICAgICAgICAgICAgICAgWyZdIChSZWcgcmVnLCBBcmc6
OlJvbGUsIEFyZzo6VHlwZSwgQXJnOjpXaWR0aCkgeworICAgICAgICAgICAgICAgICAgICBzZXQu
c2V0KHJlZyk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIFN0cmluZ1ByaW50
U3RyZWFtIGluc3RPdXQ7CisgICAgICAgICAgICBTdHJpbmdQcmludFN0cmVhbSBsaW5lT3V0Owor
ICAgICAgICAgICAgbGluZU91dC5wcmludCgiICAgIik7CisgICAgICAgICAgICBpZiAoc2V0Lm51
bWJlck9mU2V0UmVnaXN0ZXJzKCkpIHsKKyAgICAgICAgICAgICAgICBzZXQuZm9yRWFjaCgKKyAg
ICAgICAgICAgICAgICAgICAgWyZdIChSZWcgcmVnKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBDU3RyaW5nIHRleHQgPSB0b0NTdHJpbmcoIiAiLCByZWcpOworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHRleHQubGVuZ3RoKCkgKyBsaW5lT3V0Lmxlbmd0aCgpID4gdG90YWxDb2x1bW5z
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdE91dC5wcmludChsaW5lT3V0LnRv
Q1N0cmluZygpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lT3V0LnJl
c2V0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZU91dC5wcmludCgiICAgICAg
ICIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
bGluZU91dC5wcmludCh0ZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICAgICAgbGluZU91dC5wcmludCgiOiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KGxpbmVPdXQubGVuZ3RoKCkgPiByZWdpc3RlckNvbHVtbnMpIHsKKyAgICAgICAgICAgICAgICBp
bnN0T3V0LnByaW50KGxpbmVPdXQudG9DU3RyaW5nKCksICJcbiIpOworICAgICAgICAgICAgICAg
IGxpbmVPdXQucmVzZXQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdoaWxlIChsaW5l
T3V0Lmxlbmd0aCgpIDwgcmVnaXN0ZXJDb2x1bW5zKQorICAgICAgICAgICAgICAgIGxpbmVPdXQu
cHJpbnQoIiAiKTsKKyAgICAgICAgICAgIGxpbmVPdXQucHJpbnQoIiAiKTsKKyAgICAgICAgICAg
IGxpbmVPdXQucHJpbnQoaW5zdCk7CisgICAgICAgICAgICBpbnN0T3V0LnByaW50KGxpbmVPdXQu
dG9DU3RyaW5nKCksICJcbiIpOworICAgICAgICAgICAgaW5zdER1bXBzLmFwcGVuZChpbnN0T3V0
LnRvQ1N0cmluZygpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGlu
c3REdW1wcy5zaXplKCk7IGktLTspCisgICAgICAgICAgICBkYXRhTG9nKGluc3REdW1wc1tpXSk7
CisgICAgICAgIAorICAgICAgICBibG9jay0+ZHVtcEZvb3RlcihXVEY6OmRhdGFGaWxlKCkpOwor
ICAgIH0KK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJM
b2dSZWdpc3RlclByZXNzdXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJMb2dSZWdpc3RlclByZXNzdXJlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxvZ1JlZ2lzdGVyUHJlc3N1cmUuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBBaXJMb2dSZWdpc3RlclByZXNzdXJlX2gKKyNkZWZpbmUgQWly
TG9nUmVnaXN0ZXJQcmVzc3VyZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKKy8v
IER1bXBzIHRoZSByZWdpc3RlcnMgdGhhdCBhcmUgdXNlZCBhdCBlYWNoIGluc3RydWN0aW9uLgor
dm9pZCBsb2dSZWdpc3RlclByZXNzdXJlKENvZGUmKTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckxv
Z1JlZ2lzdGVyUHJlc3N1cmVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0Fpck9wdGltaXplQmxvY2tPcmRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJPcHRpbWl6ZUJsb2NrT3JkZXIuY3BwCShyZXZpc2lvbiAxOTUxNzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wdGltaXplQmxvY2tPcmRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNzMsMTAgKzczLDggQEAgcHJpdmF0ZToKIAogfSAvLyBhbm9ueW1v
dXMgbmFtZXNwYWNlCiAKLXZvaWQgb3B0aW1pemVCbG9ja09yZGVyKENvZGUmIGNvZGUpCitWZWN0
b3I8QmFzaWNCbG9jayo+IGJsb2Nrc0luT3B0aW1pemVkT3JkZXIoQ29kZSYgY29kZSkKIHsKLSAg
ICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgIm9wdGltaXplQmxvY2tPcmRlciIpOwotCiAg
ICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBibG9ja3NJbk9yZGVyOwogCiAgICAgQmxvY2tXb3JrbGlz
dCBmYXN0V29ya2xpc3Q7CkBAIC0xMTMsNiArMTExLDE1IEBAIHZvaWQgb3B0aW1pemVCbG9ja09y
ZGVyKENvZGUmIGNvZGUpCiAgICAgQVNTRVJUKGZhc3RXb3JrbGlzdC5pc0VtcHR5KCkpOwogICAg
IEFTU0VSVChzbG93V29ya2xpc3QuaXNFbXB0eSgpKTsKIAorICAgIHJldHVybiBibG9ja3NJbk9y
ZGVyOworfQorCit2b2lkIG9wdGltaXplQmxvY2tPcmRlcihDb2RlJiBjb2RlKQoreworICAgIFBo
YXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAib3B0aW1pemVCbG9ja09yZGVyIik7CisKKyAgICBW
ZWN0b3I8QmFzaWNCbG9jayo+IGJsb2Nrc0luT3JkZXIgPSBibG9ja3NJbk9wdGltaXplZE9yZGVy
KGNvZGUpOworICAgIAogICAgIC8vIFBsYWNlIGJsb2NrcyBpbnRvIENvZGUncyBibG9jayBsaXN0
IGFjY29yZGluZyB0byB0aGUgb3JkZXJpbmcgaW4gYmxvY2tzSW5PcmRlci4gV2UgZG8gdGhpcyBi
eSBsZWFraW5nCiAgICAgLy8gYWxsIG9mIHRoZSBibG9ja3MgYW5kIHRoZW4gcmVhZG9wdGluZyB0
aGVtLgogICAgIGZvciAoYXV0byYgZW50cnkgOiBjb2RlLmJsb2NrTGlzdCgpKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcHRpbWl6ZUJsb2NrT3JkZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wdGltaXplQmxvY2tPcmRl
ci5oCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ck9wdGltaXplQmxvY2tPcmRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDEwICsyOCwxOCBAQAogCiAj
aWYgRU5BQkxFKEIzX0pJVCkKIAorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwogbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewogCitjbGFzcyBCYXNpY0Jsb2Nr
OwogY2xhc3MgQ29kZTsKIAorLy8gUmV0dXJucyBhIGxpc3Qgb2YgYmxvY2tzIHNvcnRlZCBhY2Nv
cmRpbmcgdG8gd2hhdCB3b3VsZCBiZSB0aGUgY3VycmVudCBvcHRpbWFsIG9yZGVyLiBUaGlzIHNo
YXJlcworLy8gc29tZSBwcm9wZXJ0aWVzIHdpdGggYSBwcmUtb3JkZXIgdHJhdmVyc2FsLiBJbiBw
YXJ0aWN1bGFyLCBlYWNoIGJsb2NrIHdpbGwgYXBwZWFyIGFmdGVyIGF0IGxlYXN0CisvLyBvbmUg
b2YgaXRzIHByZWRlY2Vzc29ycy4KK1ZlY3RvcjxCYXNpY0Jsb2NrKj4gYmxvY2tzSW5PcHRpbWl6
ZWRPcmRlcihDb2RlJik7CisKIC8vIFJlb3JkZXJzIHRoZSBiYXNpYyBibG9ja3MgdG8ga2VlcCBo
b3QgYmxvY2tzIGF0IHRoZSB0b3AsIGFuZCBtYXhpbWl6ZSB0aGUgbGlrZWxpaG9vZCB0aGF0IGEg
ZnJlcXVlbnRseQogLy8gdGFrZW4gZWRnZSBpcyBqdXN0IGEgZmFsbC10aHJvdWdoLgogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlcG9ydFVzZWRSZWdpc3RlcnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVwb3J0VXNl
ZFJlZ2lzdGVycy5jcHAJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyUmVwb3J0VXNlZFJlZ2lzdGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2
LDYgKzQ2LDMyIEBAIHZvaWQgcmVwb3J0VXNlZFJlZ2lzdGVycyhDb2RlJiBjb2RlKQogCiAgICAg
ICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gYmxvY2stPnNpemUoKTsgaW5zdEluZGV4LS07
KSB7CiAgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7CisKKyAg
ICAgICAgICAgIC8vIEtpbGwgZGVhZCBhc3NpZ25tZW50cyB0byByZWdpc3RlcnMuIEZvciBzaW1w
bGljaXR5IHdlIHNheSB0aGF0IGEgc3RvcmUgaXMga2lsbGFibGUgaWYKKyAgICAgICAgICAgIC8v
IGl0IGhhcyBvbmx5IGxhdGUgZGVmcyBhbmQgdGhvc2UgbGF0ZSBkZWZzIGFyZSB0byByZWdpc3Rl
cnMgdGhhdCBhcmUgZGVhZCByaWdodCBub3cuCisgICAgICAgICAgICBpZiAoIWluc3QuaGFzTm9u
QXJnRWZmZWN0cygpKSB7CisgICAgICAgICAgICAgICAgYm9vbCBjYW5EZWxldGUgPSB0cnVlOwor
ICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaEFyZygKKyAgICAgICAgICAgICAgICAgICAgWyZd
IChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSwgQXJnOjpXaWR0aCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNFYXJseURlZihyb2xlKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhbkRlbGV0ZSA9IGZhbHNlOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghQXJnOjppc0xhdGVEZWYocm9sZSkpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmcu
aXNSZWcoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbkRlbGV0ZSA9IGZhbHNl
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2NhbENhbGMuaXNMaXZlKGFy
Zy5yZWcoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5EZWxldGUgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIGlmIChj
YW5EZWxldGUpCisgICAgICAgICAgICAgICAgICAgIGluc3QgPSBJbnN0KCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChpbnN0Lm9wY29kZSA9PSBQYXRjaCkg
ewogICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHJlZ2lzdGVyU2V0OwogICAgICAgICAgICAg
ICAgIGZvciAoUmVnIHJlZyA6IGxvY2FsQ2FsYy5saXZlKCkpCkBAIC01NCw2ICs4MCwxMSBAQCB2
b2lkIHJlcG9ydFVzZWRSZWdpc3RlcnMoQ29kZSYgY29kZSkKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGxvY2FsQ2FsYy5leGVjdXRlKGluc3RJbmRleCk7CiAgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGJsb2NrLT5pbnN0cygpLnJlbW92ZUFsbE1hdGNoaW5nKAorICAgICAgICAgICAg
WyZdIChjb25zdCBJbnN0JiBpbnN0KSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
IWluc3Q7CisgICAgICAgICAgICB9KTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyUmVwb3J0VXNlZFJlZ2lzdGVycy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVwb3J0VXNlZFJlZ2lzdGVycy5oCShyZXZp
c2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlcG9ydFVz
ZWRSZWdpc3RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiw3ICszMiw4IEBAIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UKIAogY2xhc3MgQ29kZTsKIAotLy8gUGVyZm9ybXMg
YSBsaXZlbmVzcyBhbmFseXNpcyBvdmVyIHJlZ2lzdGVycyBhbmQgcmVwb3J0cyB0aGUgbGl2ZSBy
ZWdpc3RlcnMgdG8gZXZlcnkgU3BlY2lhbC4KKy8vIFBlcmZvcm1zIGEgbGl2ZW5lc3MgYW5hbHlz
aXMgb3ZlciByZWdpc3RlcnMgYW5kIHJlcG9ydHMgdGhlIGxpdmUgcmVnaXN0ZXJzIHRvIGV2ZXJ5
IFNwZWNpYWwuIFRha2VzCisvLyB0aGUgb3Bwb3J0dW5pdHkgdG8ga2lsbCBkZWFkIGFzc2lnbm1l
bnRzIHRvIHJlZ2lzdGVycywgc2luY2UgaXQgaGFzIGFjY2VzcyB0byByZWdpc3RlciBsaXZlbmVz
cy4KIAogdm9pZCByZXBvcnRVc2VkUmVnaXN0ZXJzKENvZGUmKTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAkocmV2
aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2
ZXJ5dGhpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBACiAjaWYgRU5BQkxF
KEIzX0pJVCkKIAogI2luY2x1ZGUgIkFpckNvZGUuaCIKLSNpbmNsdWRlICJBaXJGaXhTcGlsbFNs
b3RaRGVmLmgiCiAjaW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0LmgiCiAjaW5jbHVkZSAiQWlySW5z
dElubGluZXMuaCIKICNpbmNsdWRlICJBaXJMaXZlbmVzcy5oIgpAQCAtODQsNyArODMsNiBAQCB2
b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJiBjb2RlKQogCiAgICAgLy8gQWxsb2NhdGUgYSBzdGFj
ayBzbG90IGZvciBlYWNoIHRtcC4KICAgICBWZWN0b3I8U3RhY2tTbG90Kj4gYWxsU3RhY2tTbG90
c1tBcmc6Om51bVR5cGVzXTsKLSAgICB1bnNpZ25lZCBuZXdTdGFja1Nsb3RUaHJlc2hvbGQgPSBj
b2RlLnN0YWNrU2xvdHMoKS5zaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCB0eXBlSW5kZXggPSAw
OyB0eXBlSW5kZXggPCBBcmc6Om51bVR5cGVzOyArK3R5cGVJbmRleCkgewogICAgICAgICBWZWN0
b3I8U3RhY2tTbG90Kj4mIHN0YWNrU2xvdHMgPSBhbGxTdGFja1Nsb3RzW3R5cGVJbmRleF07CiAg
ICAgICAgIEFyZzo6VHlwZSB0eXBlID0gc3RhdGljX2Nhc3Q8QXJnOjpUeXBlPih0eXBlSW5kZXgp
OwpAQCAtMTMwLDcgKzEyOCw2IEBAIHZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUmIGNvZGUpCiAg
ICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocm9sZSkgewogICAgICAgICAgICAgICAgICAgICBj
YXNlIEFyZzo6VXNlOgogICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6Q29sZFVzZToKLSAg
ICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkVhcmx5RGVmOgogICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yIChSZWcgcmVnIDogcmVnc0luUHJpb3JpdHlPcmRlcih0eXBlKSkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghc2V0QmVmb3JlLmdldChyZWcpKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNldEJlZm9yZS5zZXQocmVnKTsKQEAgLTE1NCw2ICsx
NTEsNyBAQCB2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJiBjb2RlKQogICAgICAgICAgICAgICAg
ICAgICBjYXNlIEFyZzo6TGF0ZVVzZToKICAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6Okxh
dGVDb2xkVXNlOgogICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6U2NyYXRjaDoKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSBBcmc6OkVhcmx5RGVmOgogICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yIChSZWcgcmVnIDogcmVnc0luUHJpb3JpdHlPcmRlcih0eXBlKSkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghc2V0QmVmb3JlLmdldChyZWcpICYmICFzZXRBZnRlci5n
ZXQocmVnKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBZnRlci5zZXQo
cmVnKTsKQEAgLTE4MiwxMiArMTgwLDYgQEAgdm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYgY29k
ZSkKICAgICAgICAgfQogICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CiAgICAg
fQotCi0gICAgZml4U3BpbGxTbG90WkRlZigKLSAgICAgICAgY29kZSwKLSAgICAgICAgWyZdIChT
dGFja1Nsb3QqIHN0YWNrU2xvdCkgLT4gYm9vbCB7Ci0gICAgICAgICAgICByZXR1cm4gc3RhY2tT
bG90LT5pbmRleCgpID49IG5ld1N0YWNrU2xvdFRocmVzaG9sZDsKLSAgICAgICAgfSk7CiB9CiAK
IH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuaAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuaAkod29ya2luZyBjb3B5KQpAQCAt
NDgsNiArNDgsMTIgQEAgcHVibGljOgogICAgIGJvb2wgaXNMb2NrZWQoKSBjb25zdCB7IHJldHVy
biBtX2tpbmQgPT0gU3RhY2tTbG90S2luZDo6TG9ja2VkOyB9CiAgICAgdW5zaWduZWQgaW5kZXgo
KSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CiAKKyAgICB2b2lkIGVuc3VyZVNpemUodW5zaWdu
ZWQgcmVxdWVzdGVkU2l6ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9vZmZzZXRGcm9tRlAp
OworICAgICAgICBtX2J5dGVTaXplID0gc3RkOjptYXgobV9ieXRlU2l6ZSwgcmVxdWVzdGVkU2l6
ZSk7CisgICAgfQorCiAgICAgdW5zaWduZWQgYWxpZ25tZW50KCkgY29uc3QKICAgICB7CiAgICAg
ICAgIGlmIChieXRlU2l6ZSgpIDw9IDEpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpclZhbGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpclZhbGlkYXRlLmNwcAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDYg
KzgyLDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoaXNUZXJtaW5h
bChpbnN0Lm9wY29kZSksICgiQXQgIiwgaW5zdCwgIiBpbiAiLCAqYmxvY2spKTsKICAgICAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKCFpc1Rlcm1pbmFsKGlu
c3Qub3Bjb2RlKSwgKCJBdCAiLCBpbnN0LCAiIGluICIsICpibG9jaykpOworCisgICAgICAgICAg
ICAgICAgLy8gZm9yRWFjaEFyZyBtdXN0IHJldHVybiBBcmcmJ3MgdGhhdCBwb2ludCBpbnRvIHRo
ZSBhcmdzIGFycmF5LgorICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaEFyZygKKyAgICAgICAg
ICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlLCBBcmc6OlR5cGUsIEFyZzo6V2lk
dGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKCZhcmcgPj0gJmluc3QuYXJn
c1swXSwgKCJBdCAiLCBhcmcsICIgaW4gIiwgaW5zdCwgIiBpbiAiLCAqYmxvY2spKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKCZhcmcgPD0gJmluc3QuYXJncy5sYXN0KCksICgi
QXQgIiwgYXJnLCAiIGluICIsIGluc3QsICIgaW4gIiwgKmJsb2NrKSk7CisgICAgICAgICAgICAg
ICAgICAgIH0pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBz
dWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29yQmxvY2tzKCkpCiAgICAgICAgICAgICAgICAgVkFM
SURBVEUodmFsaWRCbG9ja3MuY29udGFpbnMoc3VjY2Vzc29yKSwgKCJJbiAiLCAqYmxvY2spKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkocmV2aXNpb24gMTk1MTc2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAvLyBX
ZSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbiBleHBlcmltZW50YWwgdHJhbnNpdGlvbiBmcm9tIExM
Vk0gdG8gQjMgYXMgdGhlIGJhY2tlbmQgZm9yIHRoZSBGVEwuIFdlIGRvbid0CiAvLyB5ZXQga25v
dyBob3cgaXQgd2lsbCB0dXJuIG91dC4gRm9yIG5vdywgdGhpcyBmbGFnIHdpbGwgY29udHJvbCB3
aGV0aGVyIEZUTCB1c2VzIEIzLiBSZW1lbWJlciB0byBzZXQgdGhpcwogLy8gdG8gMCBiZWZvcmUg
Y29tbWl0dGluZyEKLSNkZWZpbmUgRlRMX1VTRVNfQjMgMAorI2RlZmluZSBGVExfVVNFU19CMyAx
CiAKIHN0cnVjdCBOb2RlOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEIz
Q29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExC
M0NvbXBpbGUuY3BwCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEIzQ29tcGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAog
I2lmIEVOQUJMRShGVExfSklUKSAmJiBGVExfVVNFU19CMwogCisjaW5jbHVkZSAiQWlyQ29kZS5o
IgogI2luY2x1ZGUgIkIzR2VuZXJhdGUuaCIKICNpbmNsdWRlICJCM1Byb2NlZHVyZUlubGluZXMu
aCIKICNpbmNsdWRlICJCM1N0YWNrU2xvdFZhbHVlLmgiCkBAIC01Nyw3ICs1OCw3IEBAIHZvaWQg
Y29tcGlsZShTdGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmUKICAgICBHcmFwaCYgZ3JhcGggPSBz
dGF0ZS5ncmFwaDsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGdyYXBoLm1fY29kZUJsb2Nr
OwogICAgIFZNJiB2bSA9IGdyYXBoLm1fdm07Ci0gICAgCisKICAgICB7CiAgICAgICAgIEdyYXBo
U2FmZXBvaW50IHNhZmVwb2ludChzdGF0ZS5ncmFwaCwgc2FmZXBvaW50UmVzdWx0KTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJ
KHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODU4LDggKzE4NTgsOCBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgICAgICBtX291dC5ub3RaZXJvMzIocmVzdWx0KSwgdXN1YWxseShj
b250aW51YXRpb24pLCByYXJlbHkoc2xvd0Nhc2UpKTsKICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHNsb3dDYXNl
LCBjb250aW51YXRpb24pOwotICAgICAgICAgICAgICAgIExWYWx1ZSBjb25kID0gbV9vdXQuYml0
T3IobV9vdXQubGVzc1RoYW4obGVmdCwgbV9vdXQuaW50MzJaZXJvKSwgbV9vdXQubGVzc1RoYW4o
cmlnaHQsIG1fb3V0LmludDMyWmVybykpOwotICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShOZWdh
dGl2ZVplcm8sIG5vVmFsdWUoKSwgMCwgY29uZCk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRl
KE5lZ2F0aXZlWmVybywgbm9WYWx1ZSgpLCBudWxscHRyLCBtX291dC5sZXNzVGhhbihsZWZ0LCBt
X291dC5pbnQzMlplcm8pKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoTmVnYXRpdmVaZXJv
LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0Lmxlc3NUaGFuKHJpZ2h0LCBtX291dC5pbnQzMlpl
cm8pKTsKICAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAg
ICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CiAgICAgICAg
ICAgICB9CkBAIC0xODkwLDggKzE4OTAsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAg
ICBtX291dC5ub3RaZXJvNjQocmVzdWx0KSwgdXN1YWxseShjb250aW51YXRpb24pLCByYXJlbHko
c2xvd0Nhc2UpKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBMQmFzaWNCbG9j
ayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHNsb3dDYXNlLCBjb250aW51YXRpb24pOwotICAg
ICAgICAgICAgICAgIExWYWx1ZSBjb25kID0gbV9vdXQuYml0T3IobV9vdXQubGVzc1RoYW4obGVm
dCwgbV9vdXQuaW50NjRaZXJvKSwgbV9vdXQubGVzc1RoYW4ocmlnaHQsIG1fb3V0LmludDY0WmVy
bykpOwotICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShOZWdhdGl2ZVplcm8sIG5vVmFsdWUoKSwg
MCwgY29uZCk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKE5lZ2F0aXZlWmVybywgbm9WYWx1
ZSgpLCBudWxscHRyLCBtX291dC5sZXNzVGhhbihsZWZ0LCBtX291dC5pbnQ2NFplcm8pKTsKKyAg
ICAgICAgICAgICAgICBzcGVjdWxhdGUoTmVnYXRpdmVaZXJvLCBub1ZhbHVlKCksIG51bGxwdHIs
IG1fb3V0Lmxlc3NUaGFuKHJpZ2h0LCBtX291dC5pbnQ2NFplcm8pKTsKICAgICAgICAgICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5k
VG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CiAgICAgICAgICAgICB9CkBAIC0xOTU3LDggKzE5
NTcsOCBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQg
PSBtX291dC5hcHBlbmRUbyh1bnNhZmVEZW5vbWluYXRvciwgY29udGludWF0aW9uKTsKICAgICAg
ICAgICAgICAgICBMVmFsdWUgbmVnMlRvVGhlMzEgPSBtX291dC5jb25zdEludDMyKC0yMTQ3NDgz
NjQ3LTEpOwotICAgICAgICAgICAgICAgIExWYWx1ZSBjb25kID0gbV9vdXQuYml0T3IobV9vdXQu
aXNaZXJvMzIoZGVub21pbmF0b3IpLCBtX291dC5lcXVhbChudW1lcmF0b3IsIG5lZzJUb1RoZTMx
KSk7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCBub1ZhbHVlKCksIDAsIGNv
bmQpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShPdmVyZmxvdywgbm9WYWx1ZSgpLCBudWxs
cHRyLCBtX291dC5pc1plcm8zMihkZW5vbWluYXRvcikpOworICAgICAgICAgICAgICAgIHNwZWN1
bGF0ZShPdmVyZmxvdywgbm9WYWx1ZSgpLCBudWxscHRyLCBtX291dC5lcXVhbChudW1lcmF0b3Is
IG5lZzJUb1RoZTMxKSk7CiAgICAgICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OwogCiAgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4
dCk7CkBAIC0yMDEzLDggKzIwMTMsOCBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICAgICAgTEJh
c2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyh1bnNhZmVEZW5vbWluYXRvciwgY29u
dGludWF0aW9uKTsKICAgICAgICAgICAgICAgICBMVmFsdWUgbmVnMlRvVGhlMzEgPSBtX291dC5j
b25zdEludDMyKC0yMTQ3NDgzNjQ3LTEpOwotICAgICAgICAgICAgICAgIExWYWx1ZSBjb25kID0g
bV9vdXQuYml0T3IobV9vdXQuaXNaZXJvMzIoZGVub21pbmF0b3IpLCBtX291dC5lcXVhbChudW1l
cmF0b3IsIG5lZzJUb1RoZTMxKSk7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93
LCBub1ZhbHVlKCksIDAsIGNvbmQpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShPdmVyZmxv
dywgbm9WYWx1ZSgpLCBudWxscHRyLCBtX291dC5pc1plcm8zMihkZW5vbWluYXRvcikpOworICAg
ICAgICAgICAgICAgIHNwZWN1bGF0ZShPdmVyZmxvdywgbm9WYWx1ZSgpLCBudWxscHRyLCBtX291
dC5lcXVhbChudW1lcmF0b3IsIG5lZzJUb1RoZTMxKSk7CiAgICAgICAgICAgICAgICAgbV9vdXQu
anVtcChjb250aW51YXRpb24pOwogCiAgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29u
dGludWF0aW9uLCBsYXN0TmV4dCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Jl
Z2lzdGVyU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdp
c3RlclNldC5oCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlZ2lzdGVyU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTkxLDYgKzkxLDEzIEBAIHB1YmxpYzoK
ICAgICAgICAgQVNTRVJUKCEhcmVnKTsKICAgICAgICAgcmV0dXJuIG1fdmVjdG9yLmdldChyZWcu
aW5kZXgoKSk7CiAgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmFibGU+CisgICAg
dm9pZCBzZXRBbGwoY29uc3QgSXRlcmFibGUmIGl0ZXJhYmxlKQorICAgIHsKKyAgICAgICAgZm9y
IChSZWcgcmVnIDogaXRlcmFibGUpCisgICAgICAgICAgICBzZXQocmVnKTsKKyAgICB9CiAgICAg
CiAgICAgdm9pZCBtZXJnZShjb25zdCBSZWdpc3RlclNldCYgb3RoZXIpIHsgbV92ZWN0b3IubWVy
Z2Uob3RoZXIubV92ZWN0b3IpOyB9CiAgICAgdm9pZCBmaWx0ZXIoY29uc3QgUmVnaXN0ZXJTZXQm
IG90aGVyKSB7IG1fdmVjdG9yLmZpbHRlcihvdGhlci5tX3ZlY3Rvcik7IH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDE5NTE3NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAt
MzQzLDYgKzM0Myw3IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYo
Ym9vbCwgbG9nQjNQaGFzZVRpbWVzLCBmYWxzZSwgbnVsbHB0cikgXAogICAgIHYoZG91YmxlLCBy
YXJlQmxvY2tQZW5hbHR5LCAwLjAwMSwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgYWlyU3BpbGxz
RXZlcnl0aGluZywgZmFsc2UsIG51bGxwdHIpIFwKKyAgICB2KGJvb2wsIGxvZ0FpclJlZ2lzdGVy
UHJlc3N1cmUsIGZhbHNlLCBudWxscHRyKSBcCiAgICAgXAogICAgIHYoYm9vbCwgdXNlRG9sbGFy
Vk0sIGZhbHNlLCAiaW5zdGFsbHMgdGhlICR2bSBkZWJ1Z2dpbmcgdG9vbCBpbiBnbG9iYWwgb2Jq
ZWN0cyIpIFwKICAgICB2KG9wdGlvblN0cmluZywgZnVuY3Rpb25PdmVycmlkZXMsIG51bGxwdHIs
ICJmaWxlIHdpdGggZGVidWdnaW5nIG92ZXJyaWRlcyBmb3IgZnVuY3Rpb24gYm9kaWVzIikgXApJ
bmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFu
Z2VMb2cJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTYtMDEtMTcgIEZpbGlwIFBpemxvICA8ZnBpemxv
QGFwcGxlLmNvbT4KKworICAgICAgICBBaXIgc2hvdWxkIGZpeCBzcGlsbCBjb2RlIGVtaXR0ZWQg
YnkgSVJDCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NTMxMTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IHd0Zi9JbmRleFNwYXJzZVNldC5oOgorICAgICAgICAoV1RGOjpJbmRleFNwYXJzZVNldDxPdmVy
Zmxvd0hhbmRsZXI+OjpJbmRleFNwYXJzZVNldCk6CisgICAgICAgIChXVEY6OkluZGV4U3BhcnNl
U2V0PE92ZXJmbG93SGFuZGxlcj46OmFkZCk6CisgICAgICAgIChXVEY6OkluZGV4U3BhcnNlU2V0
PE92ZXJmbG93SGFuZGxlcj46OnJlbW92ZSk6CisgICAgICAgICogd3RmL1N0cmluZ1ByaW50U3Ry
ZWFtLmg6CisgICAgICAgIChXVEY6OlN0cmluZ1ByaW50U3RyZWFtOjpsZW5ndGgpOgorCiAyMDE2
LTAxLTE1ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAg
IEFkZCBrZGVidWdfdHJhY2Ugc2lnbnBvc3RzIGZvciBhIGZldyBXZWJDb3JlIG9wZXJhdGlvbnMK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NoZWNrZWRBcml0aG1ldGljLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvQ2hlY2tlZEFyaXRobWV0aWMuaAkocmV2aXNpb24gMTk1MTc2KQorKysg
U291cmNlL1dURi93dGYvQ2hlY2tlZEFyaXRobWV0aWMuaAkod29ya2luZyBjb3B5KQpAQCAtODA2
LDYgKzgwNiwzMCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmdzPiBiCiAg
ICAgcmV0dXJuIGNoZWNrZWRTdW08VD4oYXJncy4uLikuaGFzT3ZlcmZsb3dlZCgpOwogfQogCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBib29sIGRpZmZlcmVuY2VPdmVyZmxvd3Mo
VSBsZWZ0LCBVIHJpZ2h0KQoreworICAgIHJldHVybiAoQ2hlY2tlZDxULCBSZWNvcmRPdmVyZmxv
dz4obGVmdCkgLSBDaGVja2VkPFQsIFJlY29yZE92ZXJmbG93PihyaWdodCkpLmhhc092ZXJmbG93
ZWQoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KK0NoZWNrZWQ8VCwg
UmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRQcm9kdWN0KFUgdmFsdWUpCit7CisgICAgcmV0dXJuIENo
ZWNrZWQ8VCwgUmVjb3JkT3ZlcmZsb3c+KHZhbHVlKTsKK30KK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFUsIHR5cGVuYW1lLi4uIEFyZ3M+CitDaGVja2VkPFQsIFJlY29yZE92ZXJmbG93
PiBjaGVja2VkUHJvZHVjdChVIHZhbHVlLCBBcmdzLi4uIGFyZ3MpCit7CisgICAgcmV0dXJuIENo
ZWNrZWQ8VCwgUmVjb3JkT3ZlcmZsb3c+KHZhbHVlKSAqIGNoZWNrZWRTdW08VD4oYXJncy4uLik7
Cit9CisKKy8vIFNvbWV0aW1lcywgeW91IGp1c3Qgd2FudCB0byBjaGVjayBpZiBzb21lIG1hdGgg
d291bGQgb3ZlcmZsb3cgLSB0aGUgY29kZSB0byBkbyB0aGUgbWF0aCBpcworLy8gYWxyZWFkeSBp
biBwbGFjZSwgYW5kIHlvdSB3YW50IHRvIGd1YXJkIGl0LgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZS4uLiBBcmdzPiBib29sIHByb2R1Y3RPdmVyZmxvd3MoQXJncy4uLiBhcmdzKQor
eworICAgIHJldHVybiBjaGVja2VkUHJvZHVjdDxUPihhcmdzLi4uKS5oYXNPdmVyZmxvd2VkKCk7
Cit9CisKIH0KIAogdXNpbmcgV1RGOjpDaGVja2VkOwpAQCAtODIxLDYgKzg0NSw4IEBAIHVzaW5n
IFdURjo6Q2hlY2tlZEludDY0OwogdXNpbmcgV1RGOjpDaGVja2VkVWludDY0OwogdXNpbmcgV1RG
OjpDaGVja2VkU2l6ZTsKIHVzaW5nIFdURjo6Y2hlY2tlZFN1bTsKK3VzaW5nIFdURjo6ZGlmZmVy
ZW5jZU92ZXJmbG93czsKK3VzaW5nIFdURjo6cHJvZHVjdE92ZXJmbG93czsKIHVzaW5nIFdURjo6
c3VtT3ZlcmZsb3dzOwogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0luZGV4U3BhcnNl
U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSW5kZXhTcGFyc2VTZXQuaAkocmV2
aXNpb24gMTk1MTc2KQorKysgU291cmNlL1dURi93dGYvSW5kZXhTcGFyc2VTZXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDcsOCArNDcsOCBAQCBjbGFzcyBJbmRleFNwYXJzZVNldCB7CiBwdWJsaWM6
CiAgICAgZXhwbGljaXQgSW5kZXhTcGFyc2VTZXQodW5zaWduZWQgbWF4VmFsdWUpOwogCi0gICAg
dm9pZCBhZGQodW5zaWduZWQpOwotICAgIHZvaWQgcmVtb3ZlKHVuc2lnbmVkKTsKKyAgICBib29s
IGFkZCh1bnNpZ25lZCk7CisgICAgYm9vbCByZW1vdmUodW5zaWduZWQpOwogICAgIHZvaWQgY2xl
YXIoKTsKIAogICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdDsKQEAgLTcxLDI5ICs3MSwzMyBAQCBp
bmxpbmUgSW5kZXhTcGFyc2VTZXQ8T3ZlcmZsb3dIYW5kbGVyPjo6CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KLWlubGluZSB2b2lkIEluZGV4U3BhcnNlU2V0PE92ZXJm
bG93SGFuZGxlcj46OmFkZCh1bnNpZ25lZCB2YWx1ZSkKK2lubGluZSBib29sIEluZGV4U3BhcnNl
U2V0PE92ZXJmbG93SGFuZGxlcj46OmFkZCh1bnNpZ25lZCB2YWx1ZSkKIHsKICAgICBpZiAoY29u
dGFpbnModmFsdWUpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIHVuc2lnbmVkIG5ld1Bvc2l0aW9uID0gbV92YWx1ZXMuc2l6ZSgpOwogICAgIG1fdmFsdWVz
LmFwcGVuZCh2YWx1ZSk7CiAgICAgbV9tYXBbdmFsdWVdID0gbmV3UG9zaXRpb247CisgICAgcmV0
dXJuIHRydWU7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KLWlubGlu
ZSB2b2lkIEluZGV4U3BhcnNlU2V0PE92ZXJmbG93SGFuZGxlcj46OnJlbW92ZSh1bnNpZ25lZCB2
YWx1ZSkKK2lubGluZSBib29sIEluZGV4U3BhcnNlU2V0PE92ZXJmbG93SGFuZGxlcj46OnJlbW92
ZSh1bnNpZ25lZCB2YWx1ZSkKIHsKICAgICB1bnNpZ25lZCBwb3NpdGlvbiA9IG1fbWFwW3ZhbHVl
XTsKICAgICBpZiAocG9zaXRpb24gPj0gbV92YWx1ZXMuc2l6ZSgpKQotICAgICAgICByZXR1cm47
CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChtX3ZhbHVlc1twb3NpdGlvbl0gPT0g
dmFsdWUpIHsKICAgICAgICAgdW5zaWduZWQgbGFzdFZhbHVlID0gbV92YWx1ZXMubGFzdCgpOwog
ICAgICAgICBtX3ZhbHVlc1twb3NpdGlvbl0gPSBsYXN0VmFsdWU7CiAgICAgICAgIG1fbWFwW2xh
c3RWYWx1ZV0gPSBwb3NpdGlvbjsKICAgICAgICAgbV92YWx1ZXMucmVtb3ZlTGFzdCgpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1N0cmlu
Z1ByaW50U3RyZWFtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU3RyaW5nUHJpbnRT
dHJlYW0uaAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL1dURi93dGYvU3RyaW5nUHJpbnRT
dHJlYW0uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEyLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsNiArMzgsOCBAQCBwdWJsaWM6CiAgICAgV1RGX0VY
UE9SVF9QUklWQVRFIHZpcnR1YWwgflN0cmluZ1ByaW50U3RyZWFtKCk7CiAgICAgCiAgICAgV1RG
X0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgdm9pZCB2cHJpbnRmKGNvbnN0IGNoYXIqIGZvcm1hdCwg
dmFfbGlzdCkgb3ZlcnJpZGUgV1RGX0FUVFJJQlVURV9QUklOVEYoMiwgMCk7CisKKyAgICBzaXpl
X3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9uZXh0OyB9CiAgICAgCiAgICAgV1RGX0VYUE9S
VF9QUklWQVRFIENTdHJpbmcgdG9DU3RyaW5nKCk7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIFN0
cmluZyB0b1N0cmluZygpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269201</attachid>
            <date>2016-01-17 15:01:24 -0800</date>
            <delta_ts>2016-01-18 23:18:25 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>108060</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk1MTgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2NiBA
QAorMjAxNi0wMS0xNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBCMyBzaG91bGQgYmUganVzdCBhcyBmYXN0IGFzIEZUTCBMTFZNIG9uIE9jdGFuZS9jcnlw
dG8KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MzEx
MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMg
aXMgdGhlIHJlc3VsdCBvZiBhIGhhY2tpbmcgcmFtcGFnZSB0byBjbG9zZSB0aGUgZ2FwIGJldHdl
ZW4gRlRMIEIzIGFuZCBGVEwgTExWTSBvbgorICAgICAgICBPY3RhbmUvY3J5cHRvLiBJdCB3YXMg
YSB2ZXJ5IHN1Y2Nlc3NmdWwgcmFtcGFnZS4KKworICAgICAgICBUaGUgYmlnZ2VzdCBjaGFuZ2Ug
aW4gdGhpcyBwYXRjaCBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGEgcGhhc2UgY2FsbGVkIGZpeE9i
dmlvdXNTcGlsbHMoKQorICAgICAgICB0aGF0IGZpeGVzIHBhdHRlcm5zIGxpa2U6CisKKyAgICAg
ICAgU3RvcmUgcmVnaXN0ZXIgdG8gc3RhY2sgc2xvdCBhbmQgdGhlbiB1c2Ugc3RhY2sgc2xvdDoK
KyAgICAgICAgICAgIE1vdmUgJXJjeCwgKHN0YWNrNDIpCisgICAgICAgICAgICBGb28gdXNlOihz
dGFjazQyKSAvLyByZXBsYWNlIChzdGFjazQyKSB3aXRoICVyY3ggaGVyZS4KKworICAgICAgICBM
b2FkIHN0YWNrIHNsb3QgaW50byByZWdpc3RlciBhbmQgdGhlbiB1c2Ugc3RhY2sgc2xvdDoKKyAg
ICAgICAgICAgIE1vdmUgKHN0YWNrNDIpLCAlcmN4CisgICAgICAgICAgICBGb28gdXNlOihzdGFj
azQyKSAvLyByZXBsYWNlIChzdGFjazQyKSB3aXRoICVyY3ggaGVyZS4KKworICAgICAgICBTdG9y
ZSBjb25zdGFudCBpbnRvIHN0YWNrIHNsb3QgYW5kIHRoZW4gdXNlIHN0YWNrIHNsb3Q6CisgICAg
ICAgICAgICBNb3ZlICQ0MiwgJXJjeAorICAgICAgICAgICAgTW92ZSAlcmN4LCAoc3RhY2s0MikK
KyAgICAgICAgICAgIEJhciBkZWY6JXJjeCAvLyAlcmN4IGlzbid0IGF2YWlsYWJsZSBhbnltb3Jl
LCBidXQgd2Ugc3RpbGwga25vdyB0aGF0IChzdGFjazQyKSBpcyAkNDIKKyAgICAgICAgICAgIEZv
byB1c2U6KHN0YWNrNDIpIC8vIHJlcGxhY2UgKHN0YWNrNDIpIHdpdGggJDQyIGhlcmUuCisKKyAg
ICAgICAgVGhpcyBwaGFzZXMgZG9lcyB0aGVzZSBmaXh1cHMgYnkgZG9pbmcgYSBnbG9iYWwgZm9y
d2FyZCBmbG93IHRoYXQgcHJvcGFnYXRlcyBzZXRzIG9mCisgICAgICAgIG11c3QtYWxpYXNlcy4K
KworICAgICAgICBBbHNvIGFkZGVkIGEgcGhhc2UgdG8gcmVwb3J0IHJlZ2lzdGVyIHByZXNzdXJl
LiBJdCBwcmV0dHktcHJpbnRzIGNvZGUgYWxvbmdzaWRlIHRoZSBzZXQgb2YKKyAgICAgICAgaW4t
dXNlIHJlZ2lzdGVycyBhYm92ZSBlYWNoIGluc3RydWN0aW9uLiBVc2luZyB0aGlzIHBoYXNlLCBJ
IGZvdW5kIHRoYXQgb3VyIHJlZ2lzdGVyCisgICAgICAgIGFsbG9jYXRvciBpcyBhY3R1YWxseSBk
b2luZyBhIHByZXR0eSBhd2Vzb21lIGpvYi4gSSBoYWQgcHJldmlvdXNseSBmZWFyZWQgdGhhdCB3
ZSdkIGhhdmUgdG8KKyAgICAgICAgbWFrZSBzdWJzdGFudGlhbCBjaGFuZ2VzIHRvIHJlZ2lzdGVy
IGFsbG9jYXRpb24uIEkgZG9uJ3QgaGF2ZSBzdWNoIGEgZmVhciBhbnltb3JlLCBhdCBsZWFzdAor
ICAgICAgICBmb3IgT2N0YW5lL2NyeXB0by4gSW4gdGhlIGZ1dHVyZSwgd2UgY2FuIGNoZWNrIGhv
dyB0aGUgcmVnYWxsb2MgaXMgcGVyZm9ybWluZyBqdXN0IGJ5CisgICAgICAgIGVuYWJsaW5nIGxv
Z0FpclJlZ2lzdGVyUHJlc3N1cmUuCisKKyAgICAgICAgQWxzbyBmaXhlZCBzb21lIEZUTCBjb2Rl
Z2VuIHBhdGhvbG9naWVzLiBXZSB3ZXJlIHVzaW5nIGJpdE9yIHdoZXJlIHdlIG1lYW50IHRvIHVz
ZSBhCisgICAgICAgIGNvbmRpdGlvbmFsIG9yLiBMTFZNIGxpa2VzIHRvIGNhbm9uaWNhbGl6ZSBi
b29sZWFuIGV4cHJlc3Npb25zIHRoaXMgd2F5LiBCMywgb24gdGhlIG90aGVyCisgICAgICAgIGhh
bmQsIGRvZXNuJ3QgZG8gdGhpcyBjYW5vbmljYWxpemF0aW9uIGFuZCBkb2Vzbid0IGhhdmUgbG9n
aWMgdG8gZGVjb21wb3NlIGl0IGludG8gc2VxdWVuY2VzCisgICAgICAgIG9mIGJyYW5jaGVzLgor
CisgICAgICAgIEFsc28gYWRkZWQgc3RyZW5ndGggcmVkdWN0aW9ucyBmb3IgY2hlY2tlZCBhcml0
aG1ldGljLiBJdCB0dXJucyBvdXQgdGhhdCBMTFZNIGxlYXJuZWQgaG93IHRvCisgICAgICAgIHJl
ZHVjZSBjaGVja2VkIG11bHRpcGx5IHRvIHVuY2hlY2tlZCBtdWx0aXBseSBpbiBzb21lIG9idmlv
dXMgY2FzZXMgdGhhdCBvdXIgZXhpc3RpbmcgREZHCisgICAgICAgIG9wdGltaXphdGlvbnMgbGFj
a2VkLiBJZGVhbGx5LCBvdXIgREZHIGludGVnZXIgcmFuZ2Ugb3B0aW1pemF0aW9uIHBoYXNlIHdv
dWxkIGNvdmVyIHRoaXMuIEJ1dAorICAgICAgICB0aGUgY2FzZXMgb2YgaW50ZXJlc3Qgd2VyZSBk
ZWFkIHNpbXBsZSAtIHRoZSBpbmNvbWluZyB2YWx1ZXMgdG8gdGhlIENoZWNrTXVsIHdlcmUgb2J2
aW91c2x5CisgICAgICAgIHRvbyBzbWFsbCB0byBjYXVzZSBvdmVyZmxvdy4gSSBhZGRlZCBzdWNo
IHJlYXNvbmluZyB0byBCMydzIHN0cmVuZ3RoIHJlZHVjdGlvbi4KKworICAgICAgICBGaW5hbGx5
LCB0aGlzIGZpeGVzIHNvbWUgYnVncyB3aXRoIGhvdyB3ZSB3ZXJlIGhhbmRsaW5nIHN1YndpZHRo
IHNwaWxsIHNsb3RzLiBUaGUgcmVnaXN0ZXIKKyAgICAgICAgYWxsb2NhdG9yIHdhcyBtYWtpbmcg
dHdvIG1pc3Rha2VzLiBGaXJzdCwgaXQgbWlnaHQgY2F1c2UgYSBXaWR0aDY0IGRlZiBvciB1c2Ug
b2YgYSA0LWJ5dGUKKyAgICAgICAgc3BpbGwgc2xvdC4gSW4gdGhhdCBjYXNlLCBpdCB3b3VsZCBl
eHRlbmQgdGhlIHNpemUgb2YgdGhlIHNwaWxsIHNsb3QgdG8gZW5zdXJlIHRoYXQgdGhlIHVzZQor
ICAgICAgICBvciBkZWYgaXMgc2FmZS4gU2Vjb25kLCBpdCBlbXVsYXRlcyBaRGVmIG9uIFRtcCBi
ZWhhdmlvciBieSBlbWl0dGluZyBhIE1vdmUzMiB0byBpbml0aWFsaXplCisgICAgICAgIHRoZSBo
aWdoIGJpdHMgb2YgYSBzcGlsbCBzbG90LiBCdXQgdGhpcyBpcyB1bnNvdW5kIGJlY2F1c2Ugb2Yg
dGhlIGxpdmVuZXNzIHNlbWFudGljcyBvZiBzcGlsbAorICAgICAgICBzbG90cy4gVGhleSBjYW5u
b3QgaGF2ZSBtb3JlIHRoYW4gb25lIGRlZiB0byBpbml0aWFsaXplIHRoZWlyIHZhbHVlLiBJIGZp
eGVkIHRoYXQgYnkgbWFraW5nCisgICAgICAgIGFsbG9jYXRlU3RhY2soKSBiZSB0aGUgdGhpbmcg
dGhhdCBmaXhlcyBaRGVmcy4gVGhhdCdzIGEgY2hhbmdlIHRvIFpEZWYgc2VtYW50aWNzOiBub3cs
IFpEZWYKKyAgICAgICAgb24gYW4gYW5vbnltb3VzIHN0YWNrIHNsb3QgbWVhbnMgdGhhdCB0aGUg
aGlnaCBiaXRzIGFyZSB6ZXJvLWZpbGxlZC4gSSB3YXNuJ3QgYWJsZSB0bworICAgICAgICBjb25z
dHJ1Y3QgYSB0ZXN0IGZvciB0aGlzLiBJdCBtaWdodCBiZSBhIGh5cG90aGV0aWNhbCBidWcsIGJ1
dCBzdGlsbCwgSSBsaWtlIGhvdyB0aGlzCisgICAgICAgIHNpbXBsaWZpZXMgdGhlIHJlZ2lzdGVy
IGFsbG9jYXRvci4KKworICAgICAgICBUaGlzIGlzIGEgfjAuNyUgc3BlZWQtdXAgb24gT2N0YW5l
LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiMy9CM0NoZWNrU3BlY2lhbC5j
cHA6CisgICAgICAgIChKU0M6OkIzOjpDaGVja1NwZWNpYWw6OmhpZGRlbkJyYW5jaCk6CisgICAg
ICAgIChKU0M6OkIzOjpDaGVja1NwZWNpYWw6OmZvckVhY2hBcmcpOgorICAgICAgICAoSlNDOjpC
Mzo6Q2hlY2tTcGVjaWFsOjpjb21taXRIaWRkZW5CcmFuY2gpOiBEZWxldGVkLgorICAgICAgICAq
IGIzL0IzQ2hlY2tTcGVjaWFsLmg6CisgICAgICAgICogYjMvQjNMb3dlclRvQWlyLmNwcDoKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6ZmlsbFN0YWNrbWFwKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6bG93ZXIpOgorICAgICAgICAqIGIzL0IzU3RhY2tt
YXBWYWx1ZS5oOgorICAgICAgICAqIGIzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcDoKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6YWxsb2NhdGVTdGFjayk6CisgICAgICAgICogYjMvYWlyL0FpckFs
bG9jYXRlU3RhY2suaDoKKyAgICAgICAgKiBiMy9haXIvQWlyQXJnLmg6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkFyZzo6Y2FsbEFyZyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6c3Rh
Y2tBZGRyKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1ZhbGlkU2NhbGUpOgorICAg
ICAgICAqIGIzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QmFzaWNCbG9jazo6ZGVlcER1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2Nr
OjpkdW1wSGVhZGVyKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6ZHVtcEZv
b3Rlcik6CisgICAgICAgICogYjMvYWlyL0FpckJhc2ljQmxvY2suaDoKKyAgICAgICAgKiBiMy9h
aXIvQWlyQ0NhbGxTcGVjaWFsLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxTcGVj
aWFsOjpDQ2FsbFNwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbFNwZWNpYWw6
On5DQ2FsbFNwZWNpYWwpOgorICAgICAgICAqIGIzL2Fpci9BaXJDb2RlLmg6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkNvZGU6Omxhc3RQaGFzZU5hbWUpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpDb2RlOjpzZXRFbmFibGVSQ1JTKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6ZW5h
YmxlUkNSUyk6CisgICAgICAgICogYjMvYWlyL0FpckN1c3RvbS5jcHA6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OlBhdGNoQ3VzdG9tOjppc1ZhbGlkRm9ybSk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkNDYWxsQ3VzdG9tOjppc1ZhbGlkRm9ybSk6CisgICAgICAgICogYjMvYWlyL0FpckN1c3Rv
bS5oOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpQYXRjaEN1c3RvbTo6aXNWYWxpZEZvcm1TdGF0
aWMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpQYXRjaEN1c3RvbTo6YWRtaXRzU3RhY2spOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpQYXRjaEN1c3RvbTo6aXNWYWxpZEZvcm0pOiBEZWxldGVk
LgorICAgICAgICAqIGIzL2Fpci9BaXJFbWl0U2h1ZmZsZS5jcHA6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OlNodWZmbGVQYWlyOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Y3JlYXRl
U2h1ZmZsZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OmVtaXRTaHVmZmxlKToKKyAgICAgICAg
KiBiMy9haXIvQWlyRW1pdFNodWZmbGUuaDoKKyAgICAgICAgKiBiMy9haXIvQWlyRml4T2J2aW91
c1NwaWxscy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpmaXhPYnZpb3VzU3Bp
bGxzKToKKyAgICAgICAgKiBiMy9haXIvQWlyRml4T2J2aW91c1NwaWxscy5oOiBBZGRlZC4KKyAg
ICAgICAgKiBiMy9haXIvQWlyRml4U3BpbGxTbG90WkRlZi5oOiBSZW1vdmVkLgorICAgICAgICAq
IGIzL2Fpci9BaXJHZW5lcmF0ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OnByZXBhcmVG
b3JHZW5lcmF0aW9uKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Z2VuZXJhdGUpOgorICAgICAg
ICAqIGIzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OmhhbmRsZUNhbGxlZVNhdmVzKToKKyAgICAgICAgKiBiMy9haXIvQWlySW5zdC5oOgorICAg
ICAgICAqIGIzL2Fpci9BaXJJbnN0SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJ
bnN0OjpyZXBvcnRVc2VkUmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zdDo6
YWRtaXRzU3RhY2spOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjppc1NoaWZ0VmFsaWQpOgorICAg
ICAgICAqIGIzL2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHA6CisgICAgICAg
ICogYjMvYWlyL0FpckxpdmVuZXNzLmg6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFic3RyYWN0
TGl2ZW5lc3M6OkFic3RyYWN0TGl2ZW5lc3MpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBYnN0
cmFjdExpdmVuZXNzOjpMb2NhbENhbGM6Okl0ZXJhYmxlOjpiZWdpbik6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkFic3RyYWN0TGl2ZW5lc3M6OkxvY2FsQ2FsYzo6SXRlcmFibGU6OmVuZCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkFic3RyYWN0TGl2ZW5lc3M6OkxvY2FsQ2FsYzo6SXRlcmFi
bGU6OmNvbnRhaW5zKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QWJzdHJhY3RMaXZlbmVzczo6
TG9jYWxDYWxjOjpsaXZlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QWJzdHJhY3RMaXZlbmVz
czo6TG9jYWxDYWxjOjppc0xpdmUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBYnN0cmFjdExp
dmVuZXNzOjpMb2NhbENhbGM6OmV4ZWN1dGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBYnN0
cmFjdExpdmVuZXNzOjpyYXdMaXZlQXRIZWFkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QWJz
dHJhY3RMaXZlbmVzczo6SXRlcmFibGU6OmJlZ2luKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QWJzdHJhY3RMaXZlbmVzczo6SXRlcmFibGU6OmVuZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkFic3RyYWN0TGl2ZW5lc3M6Okl0ZXJhYmxlOjpjb250YWlucyk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFic3RyYWN0TGl2ZW5lc3M6OmxpdmVBdFRhaWwpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpBYnN0cmFjdExpdmVuZXNzOjp3b3Jrc2V0KToKKyAgICAgICAgKiBiMy9haXIvQWlyTG9n
UmVnaXN0ZXJQcmVzc3VyZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpsb2dS
ZWdpc3RlclByZXNzdXJlKToKKyAgICAgICAgKiBiMy9haXIvQWlyTG9nUmVnaXN0ZXJQcmVzc3Vy
ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIvQWlyT3B0aW1pemVCbG9ja09yZGVyLmNwcDoK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6YmxvY2tzSW5PcHRpbWl6ZWRPcmRlcik6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6Om9wdGltaXplQmxvY2tPcmRlcik6CisgICAgICAgICogYjMvYWlyL0Fp
ck9wdGltaXplQmxvY2tPcmRlci5oOgorICAgICAgICAqIGIzL2Fpci9BaXJSZXBvcnRVc2VkUmVn
aXN0ZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6cmVwb3J0VXNlZFJlZ2lzdGVycyk6
CisgICAgICAgICogYjMvYWlyL0FpclJlcG9ydFVzZWRSZWdpc3RlcnMuaDoKKyAgICAgICAgKiBi
My9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6c3Bp
bGxFdmVyeXRoaW5nKToKKyAgICAgICAgKiBiMy9haXIvQWlyU3RhY2tTbG90Lmg6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6aXNMb2NrZWQpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpTdGFja1Nsb3Q6OmluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90
OjplbnN1cmVTaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90OjphbGlnbm1l
bnQpOgorICAgICAgICAqIGIzL2Fpci9BaXJWYWxpZGF0ZS5jcHA6CisgICAgICAgICogZnRsL0ZU
TEIzQ29tcGlsZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZSk6CisgICAgICAgICog
ZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2Vy
REZHVG9MTFZNOjpjb21waWxlQXJpdGhNdWwpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93
ZXJERkdUb0xMVk06OmNvbXBpbGVBcml0aERpdik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRoTW9kKToKKyAgICAgICAgKiBqaXQvUmVnaXN0ZXJT
ZXQuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6OmdldCk6CisgICAgICAgIChKU0M6OlJl
Z2lzdGVyU2V0OjpzZXRBbGwpOgorICAgICAgICAoSlNDOjpSZWdpc3RlclNldDo6bWVyZ2UpOgor
ICAgICAgICAoSlNDOjpSZWdpc3RlclNldDo6ZmlsdGVyKToKKyAgICAgICAgKiBydW50aW1lL09w
dGlvbnMuaDoKKwogMjAxNi0wMS0xNyAgSnVsaWVuIEJyaWFuY2VhdSAgPGpicmlhbmNlQGNpc2Nv
LmNvbT4KIAogICAgICAgICBbbWlwc10gRml4IHJlZ1QyIGFuZCByZWdUMyB0cmFtcGxpbmcgaW4g
TWFjcm9Bc3NlbWJsZXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJl
dmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNF
UwogICAgIGIzL2Fpci9BaXJDdXN0b20uY3BwCiAgICAgYjMvYWlyL0FpckVsaW1pbmF0ZURlYWRD
b2RlLmNwcAogICAgIGIzL2Fpci9BaXJFbWl0U2h1ZmZsZS5jcHAKKyAgICBiMy9haXIvQWlyRml4
T2J2aW91c1NwaWxscy5jcHAKICAgICBiMy9haXIvQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxz
LmNwcAogICAgIGIzL2Fpci9BaXJHZW5lcmF0ZS5jcHAKICAgICBiMy9haXIvQWlyR2VuZXJhdGVk
LmNwcApAQCAtODUsNiArODYsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGIz
L2Fpci9BaXJJbnNlcnRpb25TZXQuY3BwCiAgICAgYjMvYWlyL0Fpckluc3QuY3BwCiAgICAgYjMv
YWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcAorICAgIGIzL2Fpci9BaXJMb2dS
ZWdpc3RlclByZXNzdXJlLmNwcAogICAgIGIzL2Fpci9BaXJMb3dlckFmdGVyUmVnQWxsb2MuY3Bw
CiAgICAgYjMvYWlyL0Fpckxvd2VyTWFjcm9zLmNwcAogICAgIGIzL2Fpci9BaXJPcHRpbWl6ZUJs
b2NrT3JkZXIuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM3OSw3ICszNzksOCBAQAogCQkw
RjQ5M0FGQTE2RDBDQUQzMDA4NDUwOEIgLyogU291cmNlUHJvdmlkZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0OTNBRjgxNkQwQ0FEMTAwODQ1
MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCAqLzsgfTsKIAkJMEY0Qjk0REMxN0I5RjA3NTAwREQw
M0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjRCOTREQjE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRBcnJheUlu
bGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjRDOTE2NjFDMjlGNEYyMDA0MzQxQTYgLyogQjNPcmlnaW5EdW1wLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRDOTE2NTFDMjlGNEYyMDA0MzQx
QTYgLyogQjNPcmlnaW5EdW1wLmggKi87IH07Ci0JCTBGNEM5MTY4MUMyQjNENjgwMDQzNDFBNiAv
KiBBaXJGaXhTcGlsbFNsb3RaRGVmLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjRDOTE2NzFDMkIzRDY4MDA0MzQxQTYgLyogQWlyRml4U3BpbGxTbG90
WkRlZi5oICovOyB9OworCQkwRjRERTFDRTFDNEMxQjU0MDA0RDZDMTEgLyogQWlyRml4T2J2aW91
c1NwaWxscy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjRERTFDQzFDNEMxQjU0MDA0RDZDMTEgLyogQWlyRml4T2J2aW91c1NwaWxscy5jcHAgKi87
IH07CisJCTBGNERFMUNGMUM0QzFCNTQwMDRENkMxMSAvKiBBaXJGaXhPYnZpb3VzU3BpbGxzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRERTFDRDFD
NEMxQjU0MDA0RDZDMTEgLyogQWlyRml4T2J2aW91c1NwaWxscy5oICovOyB9OwogCQkwRjRGMjlE
RjE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhh
c2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0
RjI5REQxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlv
blBoYXNlLmNwcCAqLzsgfTsKIAkJMEY0RjI5RTAxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRp
Y0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRGMjlERTE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3Rh
dGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCAqLzsgfTsKIAkJMEY1MEFGM0MxOTNF
OEIzOTAwNjc0RUU4IC8qIERGR1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1MEFGM0IxOTNFOEIzOTAwNjc0RUU4
IC8qIERGR1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oICovOyB9OwpAQCAtNzI0LDYgKzcyNSw4IEBA
CiAJCTBGRTIyOEVFMTQzNkFCMkMwMDE5NkM0OCAvKiBPcHRpb25zLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTIyOEVBMTQzNkFCMjMwMDE5NkM0
OCAvKiBPcHRpb25zLmNwcCAqLzsgfTsKIAkJMEZFMjU0RjYxQUJEREQyMjAwQTdDNkQyIC8qIERG
R1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFMjU0RjQxQUJEREQyMjAwQTdDNkQyIC8qIERGR1ZhcmFyZ3NG
b3J3YXJkaW5nUGhhc2UuY3BwICovOyB9OwogCQkwRkUyNTRGNzFBQkRERDIyMDBBN0M2RDIgLyog
REZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFMjU0RjUxQUJEREQyMjAwQTdDNkQyIC8qIERGR1ZhcmFyZ3NG
b3J3YXJkaW5nUGhhc2UuaCAqLzsgfTsKKwkJMEZFMzRDMTkxQzRCMzlBRTAwMDNBNTEyIC8qIEFp
ckxvZ1JlZ2lzdGVyUHJlc3N1cmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFMzRDMTcxQzRCMzlBRTAwMDNBNTEyIC8qIEFpckxvZ1JlZ2lzdGVy
UHJlc3N1cmUuY3BwICovOyB9OworCQkwRkUzNEMxQTFDNEIzOUFFMDAwM0E1MTIgLyogQWlyTG9n
UmVnaXN0ZXJQcmVzc3VyZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFMzRDMTgxQzRCMzlBRTAwMDNBNTEyIC8qIEFpckxvZ1JlZ2lzdGVyUHJlc3N1
cmUuaCAqLzsgfTsKIAkJMEZFNzIxMUQxOTNCOUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNzIx
MUIxOTNCOUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24uY3BwICovOyB9OwogCQkwRkU3MjEx
RTE5M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNpdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNzIxMUMxOTNCOUM1OTAwMzFGNkVEIC8qIERG
R1RyYW5zaXRpb24uaCAqLzsgfTsKIAkJMEZFODM0MTcxQTZFRjk3QjAwRDA0ODQ3IC8qIFBvbHlt
b3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRTgzNDE1MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9ycGhpY0Nh
bGxTdHViUm91dGluZS5jcHAgKi87IH07CkBAIC0yNTQyLDcgKzI1NDUsOCBAQAogCQkwRjQ5M0FG
ODE2RDBDQUQxMDA4NDUwOEIgLyogU291cmNlUHJvdmlkZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU291cmNlUHJvdmlkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjRCOTREQjE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRBcnJheUlubGlu
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRBcnJheUlubGluZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0QzkxNjUxQzI5RjRGMjAwNDM0MUE2
IC8qIEIzT3JpZ2luRHVtcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM09y
aWdpbkR1bXAuaDsgcGF0aCA9IGIzL0IzT3JpZ2luRHVtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkwRjRDOTE2NzFDMkIzRDY4MDA0MzQxQTYgLyogQWlyRml4U3BpbGxTbG90WkRl
Zi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJGaXhTcGlsbFNsb3RaRGVm
Lmg7IHBhdGggPSBiMy9haXIvQWlyRml4U3BpbGxTbG90WkRlZi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjRERTFDQzFDNEMxQjU0MDA0RDZDMTEgLyogQWlyRml4T2J2aW91c1Nw
aWxscy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJGaXhPYnZp
b3VzU3BpbGxzLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJGaXhPYnZpb3VzU3BpbGxzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0REUxQ0QxQzRDMUI1NDAwNEQ2QzExIC8qIEFp
ckZpeE9idmlvdXNTcGlsbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWly
Rml4T2J2aW91c1NwaWxscy5oOyBwYXRoID0gYjMvYWlyL0FpckZpeE9idmlvdXNTcGlsbHMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0RjI5REQxOEI2QUQxQzAwNTdCQzE1IC8q
IERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlv
blBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25Q
aGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEYyOURFMThCNkFEMUMw
MDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGlt
YXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlv
blBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTBBRjNCMTkzRThCMzkw
MDY3NEVFOCAvKiBERkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmg7IHBhdGggPSBkZmcvREZH
U3RydWN0dXJlQ2xvYmJlclN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0y
OTAwLDYgKzI5MDQsOCBAQAogCQkwRkUyMjhFQjE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPcHRpb25zLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGRTI1NEY0MUFCREREMjIwMEE3QzZEMiAvKiBERkdWYXJhcmdz
Rm9yd2FyZGluZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR1ZhcmFyZ3NGb3J3
YXJkaW5nUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkUyNTRGNTFB
QkRERDIyMDBBN0M2RDIgLyogREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmg7IHBhdGgg
PSBkZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkUzNEMxNzFDNEIzOUFFMDAwM0E1MTIgLyogQWlyTG9nUmVnaXN0ZXJQcmVzc3Vy
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJMb2dSZWdpc3Rl
clByZXNzdXJlLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJMb2dSZWdpc3RlclByZXNzdXJlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFMzRDMTgxQzRCMzlBRTAwMDNBNTEyIC8q
IEFpckxvZ1JlZ2lzdGVyUHJlc3N1cmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gQWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5oOyBwYXRoID0gYjMvYWlyL0FpckxvZ1JlZ2lzdGVy
UHJlc3N1cmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFNzIxMUIxOTNCOUM1
OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gREZHVHJhbnNpdGlvbi5jcHA7IHBhdGggPSBkZmcvREZHVHJhbnNpdGlvbi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTcyMTFDMTkzQjlDNTkwMDMxRjZF
RCAvKiBERkdUcmFuc2l0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R1RyYW5zaXRpb24uaDsgcGF0aCA9IGRmZy9ERkdUcmFuc2l0aW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGRTgzNDE1MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9ycGhpY0Nh
bGxTdHViUm91dGluZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQ
b2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC00ODU5LDkgKzQ4NjUsMTAgQEAKIAkJCQkwRjQ1NzAzNzFCRTQ0QzkxMDA2MkE2MjkgLyog
QWlyRWxpbWluYXRlRGVhZENvZGUuaCAqLywKIAkJCQkwRjYxODMyMzFDNDVCRjA3MDA3MjQ1MEIg
LyogQWlyRW1pdFNodWZmbGUuY3BwICovLAogCQkJCTBGNjE4MzI0MUM0NUJGMDcwMDcyNDUwQiAv
KiBBaXJFbWl0U2h1ZmZsZS5oICovLAorCQkJCTBGNERFMUNDMUM0QzFCNTQwMDRENkMxMSAvKiBB
aXJGaXhPYnZpb3VzU3BpbGxzLmNwcCAqLywKKwkJCQkwRjRERTFDRDFDNEMxQjU0MDA0RDZDMTEg
LyogQWlyRml4T2J2aW91c1NwaWxscy5oICovLAogCQkJCTI2MkQ4NUI0MUMwRDY1MEYwMDZBQ0I2
MSAvKiBBaXJGaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMuY3BwICovLAogCQkJCTI2MkQ4NUI1MUMw
RDY1MEYwMDZBQ0I2MSAvKiBBaXJGaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMuaCAqLywKLQkJCQkw
RjRDOTE2NzFDMkIzRDY4MDA0MzQxQTYgLyogQWlyRml4U3BpbGxTbG90WkRlZi5oICovLAogCQkJ
CTBGRUM4NTUyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCAqLywKIAkJ
CQkwRkVDODU1MzFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGUuY3BwICovLAogCQkJCTBG
RUM4NTU0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5oICovLApAQCAtNDg3Nyw2ICs0
ODg0LDggQEAKIAkJCQkyNjcxOEJBMjFCRTk5Rjc4MDA1MjAxN0IgLyogQWlySXRlcmF0ZWRSZWdp
c3RlckNvYWxlc2NpbmcuY3BwICovLAogCQkJCTI2NzE4QkEzMUJFOTlGNzgwMDUyMDE3QiAvKiBB
aXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5oICovLAogCQkJCTI2ODRENDM3MUMwMDE2MUMw
MDgxRDY2MyAvKiBBaXJMaXZlbmVzcy5oICovLAorCQkJCTBGRTM0QzE3MUM0QjM5QUUwMDAzQTUx
MiAvKiBBaXJMb2dSZWdpc3RlclByZXNzdXJlLmNwcCAqLywKKwkJCQkwRkUzNEMxODFDNEIzOUFF
MDAwM0E1MTIgLyogQWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5oICovLAogCQkJCTBGNjE4MzI1MUM0
NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwICovLAogCQkJCTBGNjE4
MzI2MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dlckFmdGVyUmVnQWxsb2MuaCAqLywKIAkJCQkw
RjYxODMyNzFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3MuY3BwICovLApAQCAtNzMy
Niw3ICs3MzM1LDYgQEAKIAkJCQlEQzAwMDM5MzE5RDhCRTZGMDAwMjNFQjAgLyogREZHUHJlY2lz
ZUxvY2FsQ2xvYmJlcml6ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCRTBGNzUxNkMxREIwQjAw
ODJDNUU4IC8qIERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZGRkM5NUUxNEVGOTBCNzAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBo
YXNlLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjRDOTE2ODFDMkIzRDY4MDA0MzQxQTYgLyogQWly
Rml4U3BpbGxTbG90WkRlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzRTAxQUIxOUQzNTNBNTAw
RjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI5
Q0VEMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZGQzkyMTYxQjk0RkIzRTAwNzFERDY2IC8qIERGR1Byb3BlcnR5VHlwZUtl
eS5oIGluIEhlYWRlcnMgKi8sCkBAIC03MzU3LDYgKzczNjUsNyBAQAogCQkJCTcwQjc5MTk5MUMw
MjRBMjkwMDI0ODFFMiAvKiBHZW5lcmF0b3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGQzA5N0EyMTQ2QjI4Q0MwMENGMjQ0MiAvKiBERkdUaHVua3MuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRDhBMzI4MTdENTFGNTcwMENBMkM0MCAvKiBERkdUaWVyVXBDaGVja0luamVjdGlvblBo
YXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkUzNEMxQTFDNEIzOUFFMDAwM0E1MTIgLyogQWly
TG9nUmVnaXN0ZXJQcmVzc3VyZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEOEEzMkExN0Q1MUY1
NzAwQ0EyQzQwIC8qIERGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkQ4QTMyQzE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExGb3JPU1JF
bnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUz
QTA2QjQxQzEwQ0I5MzAwMzkwRkREIC8qIEpJVEJpdFhvckdlbmVyYXRvci5oIGluIEhlYWRlcnMg
Ki8sCkBAIC03NDAyLDYgKzc0MTEsNyBAQAogCQkJCTBGM0FDNzU0MTg4RTVFQzgwMDMyMDI5RiAv
KiBFeGl0aW5nSklUVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMTA1ODYxNjc1NDgxMjAw
RjhBQjZFIC8qIEV4aXRLaW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCODNBQjE0QkNGNUJC
MDA4ODVCNEYgLyogRXhwcmVzc2lvblJhbmdlSW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0
REUxQ0YxQzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3QThBRjM4MTdBREI1RjMwMDVBQjE3NCAvKiBGbG9hdDMyQXJyYXkuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3QThBRjM5MTdBREI1RjMwMDVBQjE3NCAvKiBGbG9hdDY0QXJyYXku
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjRFNTQzMTdFQTlGNTkwMEFCQjIxNyAvKiBGUFJJbmZv
LmggaW4gSGVhZGVycyAqLywKQEAgLTg2NzYsNiArODY4Niw3IEBACiAJCQkJMEZFQzg1NkQxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NDM0MjJBNjYxQzE2MjY3NTAwRTJFQjk4IC8qIEIzUmVkdWNlRG91YmxlVG9GbG9hdC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkVDODU2RjFCREFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGNERFMUNFMUM0QzFCNTQwMDRENkMxMSAvKiBBaXJGaXhPYnZp
b3VzU3BpbGxzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUM4NTcxMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJCYXNpY0Jsb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUM4NTczMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZF
Qzg1NzUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05
MDkxLDYgKzkxMDIsNyBAQAogCQkJCUE1OTNDRjgyMTg0MDM3NzEwMEJGQ0UyNyAvKiBJbnNwZWN0
b3JWYWx1ZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5Q0YxMDdFQzM3NjAwNDI3QTQ4
IC8qIEludGVybmFsRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyOUQ3RDQwRUQy
MTI4MjAwQjg5NjE5IC8qIEludGVycHJldGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTM0
QzE5MUM0QjM5QUUwMDAzQTUxMiAvKiBBaXJMb2dSZWdpc3RlclByZXNzdXJlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUExQjlFMjM5MUI0RTBENjcwMEJDN0ZFRCAvKiBJbnRsQ29sbGF0b3IuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTFCOUUyM0IxQjRFMEQ2NzAwQkM3RkVEIC8qIEludGxDb2xs
YXRvckNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExQjlFMjNEMUI0RTBENjcw
MEJDN0ZFRCAvKiBJbnRsQ29sbGF0b3JQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5jcHAJKHJldmlzaW9u
IDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEwNSwxOSArMTA1LDE0IEBAIEluc3QgQ2hlY2tTcGVjaWFsOjpo
aWRkZW5CcmFuY2goY29uc3QgSW4KICAgICByZXR1cm4gaGlkZGVuQnJhbmNoOwogfQogCi12b2lk
IENoZWNrU3BlY2lhbDo6Y29tbWl0SGlkZGVuQnJhbmNoKEluc3QmIG9yaWdpbmFsLCBJbnN0JiBo
aWRkZW5CcmFuY2gpCi17Ci0gICAgQVNTRVJUKGhpZGRlbkJyYW5jaC5hcmdzLnNpemUoKSA9PSBt
X251bUNoZWNrQXJncyk7Ci0gICAgQVNTRVJUKGhpZGRlbkJyYW5jaC5vcGNvZGUgPSBtX2NoZWNr
T3Bjb2RlKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9udW1DaGVja0FyZ3M7ICsr
aSkKLSAgICAgICAgb3JpZ2luYWwuYXJnc1tpICsgMV0gPSBoaWRkZW5CcmFuY2guYXJnc1tpXTsK
LX0KLQogdm9pZCBDaGVja1NwZWNpYWw6OmZvckVhY2hBcmcoSW5zdCYgaW5zdCwgY29uc3QgU2Nv
cGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mIGNhbGxiYWNrKQogewogICAgIEluc3Qg
aGlkZGVuID0gaGlkZGVuQnJhbmNoKGluc3QpOwotICAgIGhpZGRlbi5mb3JFYWNoQXJnKGNhbGxi
YWNrKTsKLSAgICBjb21taXRIaWRkZW5CcmFuY2goaW5zdCwgaGlkZGVuKTsKKyAgICBoaWRkZW4u
Zm9yRWFjaEFyZygKKyAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6
VHlwZSB0eXBlLCBBcmc6OldpZHRoIHdpZHRoKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBpbmRl
eCA9ICZhcmcgLSAmaGlkZGVuLmFyZ3NbMF07CisgICAgICAgICAgICBjYWxsYmFjayhpbnN0LmFy
Z3NbMSArIGluZGV4XSwgcm9sZSwgdHlwZSwgd2lkdGgpOworICAgICAgICB9KTsKICAgICBmb3JF
YWNoQXJnSW1wbChudW1CM0FyZ3MoaW5zdCksIG1fbnVtQ2hlY2tBcmdzICsgMSwgaW5zdCwgbV9z
dGFja21hcFJvbGUsIGNhbGxiYWNrKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ2hlY2tTcGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ2hlY2tTcGVjaWFsLmgJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsOSArMTIz
LDYgQEAgcHJvdGVjdGVkOgogICAgIC8vIENvbnN0cnVjdHMgYW5kIHJldHVybnMgdGhlIEluc3Qg
cmVwcmVzZW50aW5nIHRoZSBicmFuY2ggdGhhdCB0aGlzIHdpbGwgdXNlLgogICAgIEFpcjo6SW5z
dCBoaWRkZW5CcmFuY2goY29uc3QgQWlyOjpJbnN0JikgY29uc3Q7CiAKLSAgICAvLyBJZiB3ZSBl
ZGl0ZWQgdGhlIGhpZGRlbiBicmFuY2gsIHRoaXMgaW5zdGFsbHMgdGhlIGVkaXRzIGludG8gdGhl
IGdpdmVuIGluc3QuCi0gICAgdm9pZCBjb21taXRIaWRkZW5CcmFuY2goQWlyOjpJbnN0JiBvcmln
aW5hbCwgQWlyOjpJbnN0JiBoaWRkZW5CcmFuY2gpOwotCiAgICAgdm9pZCBmb3JFYWNoQXJnKEFp
cjo6SW5zdCYsIGNvbnN0IFNjb3BlZExhbWJkYTxBaXI6Okluc3Q6OkVhY2hBcmdDYWxsYmFjaz4m
KSBvdmVycmlkZTsKICAgICBib29sIGlzVmFsaWQoQWlyOjpJbnN0Jikgb3ZlcnJpZGU7CiAgICAg
Ym9vbCBhZG1pdHNTdGFjayhBaXI6Okluc3QmLCB1bnNpZ25lZCBhcmdJbmRleCkgb3ZlcnJpZGU7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2aXNp
b24gMTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg3MSw2ICs4NzEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIGFyZyA9IHRtcCh2YWx1ZS52YWx1ZSgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlJlZ2lzdGVyOgorICAgICAgICAgICAgICAgIHN0YWNr
bWFwLT5lYXJseUNsb2JiZXJlZCgpLmNsZWFyKHZhbHVlLnJlcCgpLnJlZygpKTsKICAgICAgICAg
ICAgICAgICBhcmcgPSBUbXAodmFsdWUucmVwKCkucmVnKCkpOwogICAgICAgICAgICAgICAgIGFw
cGVuZChNb3ZlLCBpbW1PclRtcCh2YWx1ZS52YWx1ZSgpKSwgYXJnKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKQEAgLTE5NzMsNiArMTk3NCw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIGZpbGxTdGFja21hcChpbnN0LCBwYXRjaHBvaW50VmFs
dWUsIDApOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAocGF0Y2hwb2ludFZhbHVlLT5y
ZXN1bHRDb25zdHJhaW50LmlzUmVnKCkpCisgICAgICAgICAgICAgICAgcGF0Y2hwb2ludFZhbHVl
LT5sYXRlQ2xvYmJlcmVkKCkuY2xlYXIocGF0Y2hwb2ludFZhbHVlLT5yZXN1bHRDb25zdHJhaW50
LnJlZygpKTsKIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gcGF0Y2hwb2ludFZhbHVl
LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnM7IGktLTspCiAgICAgICAgICAgICAgICAgaW5zdC5hcmdz
LmFwcGVuZChtX2NvZGUubmV3VG1wKEFyZzo6R1ApKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHJldmlzaW9uIDE5NTE3NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODQsNiArODQsMTc1IEBAIG5hbWVzcGFjZSB7CiAKIGJvb2wgdmVyYm9zZSA9IGZhbHNl
OwogCitjbGFzcyBJbnRSYW5nZSB7CitwdWJsaWM6CisgICAgSW50UmFuZ2UoKQorICAgIHsKKyAg
ICB9CisKKyAgICBJbnRSYW5nZShpbnQ2NF90IG1pbiwgaW50NjRfdCBtYXgpCisgICAgICAgIDog
bV9taW4obWluKQorICAgICAgICAsIG1fbWF4KG1heCkKKyAgICB7CisgICAgfQorCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgSW50UmFuZ2UgdG9wKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBJbnRSYW5nZShzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptaW4oKSwgc3RkOjpu
dW1lcmljX2xpbWl0czxUPjo6bWF4KCkpOworICAgIH0KKworICAgIHN0YXRpYyBJbnRSYW5nZSB0
b3AoVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNh
c2UgSW50MzI6CisgICAgICAgICAgICByZXR1cm4gdG9wPGludDMyX3Q+KCk7CisgICAgICAgIGNh
c2UgSW50NjQ6CisgICAgICAgICAgICByZXR1cm4gdG9wPGludDY0X3Q+KCk7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgcmV0dXJuIEludFJhbmdlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorICAgIHN0YXRpYyBJbnRSYW5nZSByYW5nZUZvck1hc2soVCBtYXNrKQor
ICAgIHsKKyAgICAgICAgaWYgKCEobWFzayArIDEpKQorICAgICAgICAgICAgcmV0dXJuIHRvcDxU
PigpOworICAgICAgICByZXR1cm4gSW50UmFuZ2UoMCwgbWFzayk7CisgICAgfQorCisgICAgc3Rh
dGljIEludFJhbmdlIHJhbmdlRm9yTWFzayhpbnQ2NF90IG1hc2ssIFR5cGUgdHlwZSkKKyAgICB7
CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAg
ICAgcmV0dXJuIHJhbmdlRm9yTWFzazxpbnQzMl90PihzdGF0aWNfY2FzdDxpbnQzMl90PihtYXNr
KSk7CisgICAgICAgIGNhc2UgSW50NjQ6CisgICAgICAgICAgICByZXR1cm4gcmFuZ2VGb3JNYXNr
PGludDY0X3Q+KG1hc2spOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBJbnRSYW5nZSgpOworICAg
ICAgICB9CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgSW50
UmFuZ2UgcmFuZ2VGb3JaU2hyKGludDMyX3Qgc2hpZnRBbW91bnQpCisgICAgeworICAgICAgICB0
eXBlbmFtZSBzdGQ6Om1ha2VfdW5zaWduZWQ8VD46OnR5cGUgbWFzayA9IDA7CisgICAgICAgIG1h
c2stLTsKKyAgICAgICAgbWFzayA+Pj0gc2hpZnRBbW91bnQ7CisgICAgICAgIHJldHVybiByYW5n
ZUZvck1hc2s8VD4oc3RhdGljX2Nhc3Q8VD4obWFzaykpOworICAgIH0KKworICAgIHN0YXRpYyBJ
bnRSYW5nZSByYW5nZUZvclpTaHIoaW50MzJfdCBzaGlmdEFtb3VudCwgVHlwZSB0eXBlKQorICAg
IHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAg
ICAgICByZXR1cm4gcmFuZ2VGb3JaU2hyPGludDMyX3Q+KHNoaWZ0QW1vdW50KTsKKyAgICAgICAg
Y2FzZSBJbnQ2NDoKKyAgICAgICAgICAgIHJldHVybiByYW5nZUZvclpTaHI8aW50NjRfdD4oc2hp
ZnRBbW91bnQpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBJbnRSYW5nZSgpOworICAgICAgICB9
CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgSW50UmFuZ2Ug
cmFuZ2VGb3JTU2hyKGludDMyX3Qgc2hpZnRBbW91bnQpCisgICAgeworICAgICAgICByZXR1cm4g
SW50UmFuZ2UodG9wPFQ+KCkubWluKCkgPj4gc2hpZnRBbW91bnQsIHRvcDxUPigpLm1heCgpID4+
IHNoaWZ0QW1vdW50KTsKKyAgICB9CisKKyAgICBzdGF0aWMgSW50UmFuZ2UgcmFuZ2VGb3JTU2hy
KGludDMyX3Qgc2hpZnRBbW91bnQsIFR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
dHlwZSkgeworICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgcmV0dXJuIHJhbmdlRm9y
U1NocjxpbnQzMl90PihzaGlmdEFtb3VudCk7CisgICAgICAgIGNhc2UgSW50NjQ6CisgICAgICAg
ICAgICByZXR1cm4gcmFuZ2VGb3JTU2hyPGludDY0X3Q+KHNoaWZ0QW1vdW50KTsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICByZXR1cm4gSW50UmFuZ2UoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGludDY0
X3QgbWluKCkgY29uc3QgeyByZXR1cm4gbV9taW47IH0KKyAgICBpbnQ2NF90IG1heCgpIGNvbnN0
IHsgcmV0dXJuIG1fbWF4OyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKKyAgICB7CisgICAgICAgIG91dC5wcmludCgiWyIsIG1fbWluLCAiLCIsIG1fbWF4LCAiXSIp
OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgYm9vbCBjb3VsZE92ZXJm
bG93QWRkKGNvbnN0IEludFJhbmdlJiBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiBzdW1P
dmVyZmxvd3M8VD4obV9taW4sIG90aGVyLm1fbWluKQorICAgICAgICAgICAgfHwgc3VtT3ZlcmZs
b3dzPFQ+KG1fbWluLCBvdGhlci5tX21heCkKKyAgICAgICAgICAgIHx8IHN1bU92ZXJmbG93czxU
PihtX21heCwgb3RoZXIubV9taW4pCisgICAgICAgICAgICB8fCBzdW1PdmVyZmxvd3M8VD4obV9t
YXgsIG90aGVyLm1fbWF4KTsKKyAgICB9CisKKyAgICBib29sIGNvdWxkT3ZlcmZsb3dBZGQoY29u
c3QgSW50UmFuZ2UmIG90aGVyLCBUeXBlIHR5cGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5
cGUpIHsKKyAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgIHJldHVybiBjb3VsZE92ZXJm
bG93QWRkPGludDMyX3Q+KG90aGVyKTsKKyAgICAgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgICAg
IHJldHVybiBjb3VsZE92ZXJmbG93QWRkPGludDY0X3Q+KG90aGVyKTsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4KKyAgICBib29sIGNvdWxkT3ZlcmZsb3dTdWIoY29uc3QgSW50UmFu
Z2UmIG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRpZmZlcmVuY2VPdmVyZmxvd3M8VD4o
bV9taW4sIG90aGVyLm1fbWluKQorICAgICAgICAgICAgfHwgZGlmZmVyZW5jZU92ZXJmbG93czxU
PihtX21pbiwgb3RoZXIubV9tYXgpCisgICAgICAgICAgICB8fCBkaWZmZXJlbmNlT3ZlcmZsb3dz
PFQ+KG1fbWF4LCBvdGhlci5tX21pbikKKyAgICAgICAgICAgIHx8IGRpZmZlcmVuY2VPdmVyZmxv
d3M8VD4obV9tYXgsIG90aGVyLm1fbWF4KTsKKyAgICB9CisKKyAgICBib29sIGNvdWxkT3ZlcmZs
b3dTdWIoY29uc3QgSW50UmFuZ2UmIG90aGVyLCBUeXBlIHR5cGUpCisgICAgeworICAgICAgICBz
d2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgIHJldHVybiBj
b3VsZE92ZXJmbG93U3ViPGludDMyX3Q+KG90aGVyKTsKKyAgICAgICAgY2FzZSBJbnQ2NDoKKyAg
ICAgICAgICAgIHJldHVybiBjb3VsZE92ZXJmbG93U3ViPGludDY0X3Q+KG90aGVyKTsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBib29sIGNvdWxkT3ZlcmZsb3dNdWwoY29u
c3QgSW50UmFuZ2UmIG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHByb2R1Y3RPdmVyZmxv
d3M8VD4obV9taW4sIG90aGVyLm1fbWluKQorICAgICAgICAgICAgfHwgcHJvZHVjdE92ZXJmbG93
czxUPihtX21pbiwgb3RoZXIubV9tYXgpCisgICAgICAgICAgICB8fCBwcm9kdWN0T3ZlcmZsb3dz
PFQ+KG1fbWF4LCBvdGhlci5tX21pbikKKyAgICAgICAgICAgIHx8IHByb2R1Y3RPdmVyZmxvd3M8
VD4obV9tYXgsIG90aGVyLm1fbWF4KTsKKyAgICB9CisKKyAgICBib29sIGNvdWxkT3ZlcmZsb3dN
dWwoY29uc3QgSW50UmFuZ2UmIG90aGVyLCBUeXBlIHR5cGUpCisgICAgeworICAgICAgICBzd2l0
Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgIHJldHVybiBjb3Vs
ZE92ZXJmbG93TXVsPGludDMyX3Q+KG90aGVyKTsKKyAgICAgICAgY2FzZSBJbnQ2NDoKKyAgICAg
ICAgICAgIHJldHVybiBjb3VsZE92ZXJmbG93TXVsPGludDY0X3Q+KG90aGVyKTsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCitw
cml2YXRlOgorICAgIGludDY0X3QgbV9taW4geyAwIH07CisgICAgaW50NjRfdCBtX21heCB7IDAg
fTsKK307CisKIGNsYXNzIFJlZHVjZVN0cmVuZ3RoIHsKIHB1YmxpYzoKICAgICBSZWR1Y2VTdHJl
bmd0aChQcm9jZWR1cmUmIHByb2MpCkBAIC0xMDkxLDcgKzEyNjAsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgxKS0+ZXF1YWxPclVub3JkZXJlZENvbnN0
YW50KG1fdmFsdWUtPmNoaWxkKDApKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAg
Y2FzZSBDaGVja0FkZDoKKyAgICAgICAgY2FzZSBDaGVja0FkZDogewogICAgICAgICAgICAgaWYg
KHJlcGxhY2VXaXRoTmV3VmFsdWUobV92YWx1ZS0+Y2hpbGQoMCktPmNoZWNrQWRkQ29uc3RhbnQo
bV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgxKSkpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogCkBA
IC0xMTAyLDkgKzEyNzEsMTggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBtX2NoYW5nZWQg
PSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBJbnRSYW5nZSBsZWZ0UmFuZ2UgPSByYW5nZUZvcihtX3ZhbHVlLT5jaGlsZCgwKSk7Cisg
ICAgICAgICAgICBJbnRSYW5nZSByaWdodFJhbmdlID0gcmFuZ2VGb3IobV92YWx1ZS0+Y2hpbGQo
MSkpOworICAgICAgICAgICAgaWYgKCFsZWZ0UmFuZ2UuY291bGRPdmVyZmxvd0FkZChyaWdodFJh
bmdlLCBtX3ZhbHVlLT50eXBlKCkpKSB7CisgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdW
YWx1ZSgKKyAgICAgICAgICAgICAgICAgICAgbV9wcm9jLmFkZDxWYWx1ZT4oQWRkLCBtX3ZhbHVl
LT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxkKDEpKSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQogCi0gICAgICAgIGNhc2UgQ2hlY2tTdWI6CisgICAgICAgIGNhc2UgQ2hlY2tTdWI6
IHsKICAgICAgICAgICAgIGlmIChyZXBsYWNlV2l0aE5ld1ZhbHVlKG1fdmFsdWUtPmNoaWxkKDAp
LT5jaGVja1N1YkNvbnN0YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMSkpKSkKICAgICAgICAg
ICAgICAgICBicmVhazsKIApAQCAtMTEyMSw5ICsxMjk5LDE4IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgSW50UmFuZ2UgbGVmdFJhbmdlID0gcmFuZ2VGb3IobV92
YWx1ZS0+Y2hpbGQoMCkpOworICAgICAgICAgICAgSW50UmFuZ2UgcmlnaHRSYW5nZSA9IHJhbmdl
Rm9yKG1fdmFsdWUtPmNoaWxkKDEpKTsKKyAgICAgICAgICAgIGlmICghbGVmdFJhbmdlLmNvdWxk
T3ZlcmZsb3dTdWIocmlnaHRSYW5nZSwgbV92YWx1ZS0+dHlwZSgpKSkgeworICAgICAgICAgICAg
ICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoCisgICAgICAgICAgICAgICAgICAgIG1fcHJvYy5hZGQ8
VmFsdWU+KFN1YiwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVl
LT5jaGlsZCgxKSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KIAotICAgICAgICBjYXNlIENoZWNrTXVsOgorICAg
ICAgICBjYXNlIENoZWNrTXVsOiB7CiAgICAgICAgICAgICBpZiAocmVwbGFjZVdpdGhOZXdWYWx1
ZShtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hlY2tNdWxDb25zdGFudChtX3Byb2MsIG1fdmFsdWUtPmNo
aWxkKDEpKSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKQEAgLTExNTEsNyArMTMzOCwxNiBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGlmIChtb2RpZmllZCkKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEludFJhbmdlIGxlZnRS
YW5nZSA9IHJhbmdlRm9yKG1fdmFsdWUtPmNoaWxkKDApKTsKKyAgICAgICAgICAgIEludFJhbmdl
IHJpZ2h0UmFuZ2UgPSByYW5nZUZvcihtX3ZhbHVlLT5jaGlsZCgxKSk7CisgICAgICAgICAgICBp
ZiAoIWxlZnRSYW5nZS5jb3VsZE92ZXJmbG93TXVsKHJpZ2h0UmFuZ2UsIG1fdmFsdWUtPnR5cGUo
KSkpIHsKKyAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAorICAgICAgICAgICAg
ICAgICAgICBtX3Byb2MuYWRkPFZhbHVlPihNdWwsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVl
LT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQoMSkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAKICAgICAgICAg
Y2FzZSBDaGVjazogewogICAgICAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2tWYWx1ZSA9IG1fdmFs
dWUtPmFzPENoZWNrVmFsdWU+KCk7CkBAIC0xMjk0LDYgKzE0OTAsMzcgQEAgcHJpdmF0ZToKICAg
ICAgICAgfQogICAgIH0KIAorICAgIEludFJhbmdlIHJhbmdlRm9yKFZhbHVlKiB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAodmFsdWUtPm9wY29kZSgpKSB7CisgICAgICAgIGNhc2UgQ29u
c3QzMjoKKyAgICAgICAgY2FzZSBDb25zdDY0OiB7CisgICAgICAgICAgICBpbnQ2NF90IGludFZh
bHVlID0gdmFsdWUtPmFzSW50KCk7CisgICAgICAgICAgICByZXR1cm4gSW50UmFuZ2UoaW50VmFs
dWUsIGludFZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgQml0QW5kOgorICAgICAg
ICAgICAgaWYgKHZhbHVlLT5jaGlsZCgxKS0+aGFzSW50KCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIEludFJhbmdlOjpyYW5nZUZvck1hc2sodmFsdWUtPmNoaWxkKDEpLT5hc0ludCgpLCB2YWx1
ZS0+dHlwZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1NocjoKKyAg
ICAgICAgICAgIGlmICh2YWx1ZS0+Y2hpbGQoMSktPmhhc0ludDMyKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIEludFJhbmdlOjpyYW5nZUZvclNTaHIodmFsdWUtPmNoaWxkKDEpLT5hc0ludDMy
KCksIHZhbHVlLT50eXBlKCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBa
U2hyOgorICAgICAgICAgICAgaWYgKHZhbHVlLT5jaGlsZCgxKS0+aGFzSW50MzIoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gSW50UmFuZ2U6OnJhbmdlRm9yWlNocih2YWx1ZS0+Y2hpbGQoMSkt
PmFzSW50MzIoKSwgdmFsdWUtPnR5cGUoKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4gSW50UmFuZ2U6OnRvcCh2YWx1ZS0+dHlwZSgpKTsKKyAgICB9CisKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KICAgICB2b2lkIHJlcGxh
Y2VXaXRoTmV3KEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCiAgICAgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwVmFsdWUuaAkocmV2aXNpb24gMTk1MTc2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBWYWx1ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xODcsNiArMTg3LDggQEAgcHVibGljOgogICAgICAgICBjbG9iYmVyTGF0ZShzZXQpOwog
ICAgIH0KIAorICAgIFJlZ2lzdGVyU2V0JiBlYXJseUNsb2JiZXJlZCgpIHsgcmV0dXJuIG1fZWFy
bHlDbG9iYmVyZWQ7IH0KKyAgICBSZWdpc3RlclNldCYgbGF0ZUNsb2JiZXJlZCgpIHsgcmV0dXJu
IG1fbGF0ZUNsb2JiZXJlZDsgfQogICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBlYXJseUNsb2JiZXJl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fZWFybHlDbG9iYmVyZWQ7IH0KICAgICBjb25zdCBSZWdpc3Rl
clNldCYgbGF0ZUNsb2JiZXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF0ZUNsb2JiZXJlZDsgfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVT
dGFjay5jcHAJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQWxsb2NhdGVTdGFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAK
ICNpZiBFTkFCTEUoQjNfSklUKQogCiAjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFp
ckluc2VydGlvblNldC5oIgogI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
QWlyTGl2ZW5lc3MuaCIKICNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCkBAIC0xNjYsOCArMTY3
LDQ3IEBAIHZvaWQgYWxsb2NhdGVTdGFjayhDb2RlJiBjb2RlKQogICAgICAgICBmb3IgKHVuc2ln
bmVkIGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykgewogICAgICAgICAg
ICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiQW5hbHl6aW5nOiAiLCBi
bG9jay0+YXQoaW5zdEluZGV4KSwgIlxuIik7CisKKyAgICAgICAgICAgIC8vIEtpbGwgZGVhZCBz
dG9yZXMuIEZvciBzaW1wbGljaXR5IHdlIHNheSB0aGF0IGEgc3RvcmUgaXMga2lsbGFibGUgaWYg
aXQgaGFzIG9ubHkgbGF0ZQorICAgICAgICAgICAgLy8gZGVmcyBhbmQgdGhvc2UgbGF0ZSBkZWZz
IGFyZSB0byB0aGluZ3MgdGhhdCBhcmUgZGVhZCByaWdodCBub3cuIFdlIG9ubHkgZG8gdGhhdAor
ICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGF0J3MgdGhlIG9ubHkga2luZCBvZiBkZWFkIHN0YWNr
IHN0b3JlIHdlIHdpbGwgc2VlIGhlcmUuCisgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2st
PmF0KGluc3RJbmRleCk7CisgICAgICAgICAgICBpZiAoIWluc3QuaGFzTm9uQXJnRWZmZWN0cygp
KSB7CisgICAgICAgICAgICAgICAgYm9vbCBvayA9IHRydWU7CisgICAgICAgICAgICAgICAgaW5z
dC5mb3JFYWNoQXJnKAorICAgICAgICAgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJv
bGUgcm9sZSwgQXJnOjpUeXBlLCBBcmc6OldpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoQXJnOjppc0Vhcmx5RGVmKHJvbGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb2sgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFyZzo6
aXNMYXRlRGVmKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlzU3RhY2soKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9rID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgU3RhY2tTbG90KiBzbG90ID0gYXJnLnN0YWNrU2xvdCgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHNsb3QtPmtpbmQoKSAhPSBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXMpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvayA9IGZhbHNlOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGxvY2FsQ2FsYy5pc0xpdmUoc2xvdCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvayA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICAgICAgaWYgKG9rKQorICAgICAgICAgICAgICAgICAgICBpbnN0ID0g
SW5zdCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAgICBpbnRlcmZl
cmUoaW5zdEluZGV4KTsKICAgICAgICAgICAgIGxvY2FsQ2FsYy5leGVjdXRlKGluc3RJbmRleCk7
CisKKyAgICAgICAgICAgIGJsb2NrLT5pbnN0cygpLnJlbW92ZUFsbE1hdGNoaW5nKAorICAgICAg
ICAgICAgICAgIFsmXSAoY29uc3QgSW5zdCYgaW5zdCkgLT4gYm9vbCB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiAhaW5zdDsKKyAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgfQogICAg
ICAgICBpbnRlcmZlcmUoLTEpOwogICAgIH0KQEAgLTIzMiwzMyArMjcyLDQzIEBAIHZvaWQgYWxs
b2NhdGVTdGFjayhDb2RlJiBjb2RlKQogICAgIC8vIFdlIHdvdWxkIGhhdmUgdG8gc2NhdmVuZ2Ug
Zm9yIHRlbXBvcmFyaWVzIGlmIHRoaXMgaGFwcGVuZWQuIEZvcnR1bmF0ZWx5LCB0aGlzIGNhc2Ug
d2lsbCBiZQogICAgIC8vIGV4dHJlbWVseSByYXJlIHNvIHdlIGNhbiBkbyBjcmF6eSB0aGluZ3Mg
d2hlbiBpdCBhcmlzZXMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1MjUzMAotICAgIAorCisgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChjb2Rl
KTsKICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgewotICAgICAgICBmb3IgKElu
c3QmIGluc3QgOiAqYmxvY2spIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSAw
OyBpbnN0SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK2luc3RJbmRleCkgeworICAgICAgICAgICAg
SW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOwogICAgICAgICAgICAgaW5zdC5mb3JF
YWNoQXJnKAotICAgICAgICAgICAgICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSwgQXJnOjpU
eXBlLCBBcmc6OldpZHRoIHdpZHRoKQotICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlLCBBcmc6OldpZHRoIHdp
ZHRoKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gc3RhY2tBZGRyID0gWyZdIChpbnQzMl90
IG9mZnNldCkgLT4gQXJnIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBcmc6OnN0
YWNrQWRkcihvZmZzZXQsIGNvZGUuZnJhbWVTaXplKCksIHdpZHRoKTsKKyAgICAgICAgICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIHN3aXRj
aCAoYXJnLmtpbmQoKSkgewogICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6U3RhY2s6IHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IEFyZzo6YWRkcigKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFyZy5vZmZzZXQoKSArIGFyZy5zdGFja1Nsb3QoKS0+b2Zmc2V0
RnJvbUZQKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmcuaXNWYWxpZEZvcm0o
d2lkdGgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gQXJnOjphZGRyKAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUbXAoTWFjcm9Bc3NlbWJsZXI6OnN0YWNr
UG9pbnRlclJlZ2lzdGVyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnLm9m
ZnNldCgpICsgY29kZS5mcmFtZVNpemUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBTdGFj
a1Nsb3QqIHNsb3QgPSBhcmcuc3RhY2tTbG90KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoQXJnOjppc1pEZWYocm9sZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBzbG90
LT5raW5kKCkgPT0gU3RhY2tTbG90S2luZDo6QW5vbnltb3VzCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJiYgc2xvdC0+Ynl0ZVNpemUoKSA+IEFyZzo6Ynl0ZXMod2lkdGgpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ3VycmVudGx5IHdlIG9ubHkgaGFuZGxlIHRoaXMg
c2ltcGxlIGNhc2UgYmVjYXVzZSBpdCdzIHRoZSBvbmx5IG9uZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIHRoYXQgYXJpc2VzOiBaRGVmJ3MgYXJlIG9ubHkgMzItYml0IHJpZ2h0IG5v
dy4gU28sIHdoZW4gd2UgaGl0IHRoZXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
YXNzZXJ0aW9ucyBpdCBtZWFucyB0aGF0IHdlIG5lZWQgdG8gaW1wbGVtZW50IHRob3NlIG90aGVy
IGtpbmRzIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gemVybyBmaWxscy4KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG90LT5ieXRlU2l6ZSgp
ID09IDgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHdpZHRo
ID09IEFyZzo6V2lkdGgzMik7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBy
ZWx5IG9uIHRoZSBmYWN0IHRoYXQgdGhlcmUgbXVzdCBiZSBzb21lIHdheSB0byBtb3ZlIHplcm8g
dG8gYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1lbW9yeSBsb2NhdGlvbiB3aXRo
b3V0IGZpcnN0IGJ1cm5pbmcgYSByZWdpc3Rlci4gT24gQVJNLCB3ZSB3b3VsZCBkbworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgdXNpbmcgenIuCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNWYWxpZEZvcm0oTW92ZTMyLCBBcmc6OkltbSwg
QXJnOjpBZGRyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmlu
c2VydCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdEluZGV4ICsgMSwgTW92
ZTMyLCBpbnN0Lm9yaWdpbiwgQXJnOjppbW0oMCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YWNrQWRkcihhcmcub2Zmc2V0KCkgKyA0ICsgc2xvdC0+b2Zmc2V0RnJvbUZQKCkp
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGFy
ZyA9IHN0YWNrQWRkcihhcmcub2Zmc2V0KCkgKyBzbG90LT5vZmZzZXRGcm9tRlAoKSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICBjYXNlIEFyZzo6Q2FsbEFyZzoKLSAgICAgICAgICAgICAgICAgICAgICAg
IGFyZyA9IEFyZzo6YWRkcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUbXAoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZy5v
ZmZzZXQoKSAtIGNvZGUuZnJhbWVTaXplKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFhcmcuaXNWYWxpZEZvcm0od2lkdGgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
YXJnID0gQXJnOjphZGRyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUbXAoTWFj
cm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYXJnLm9mZnNldCgpICsgY29kZS5mcmFtZVNpemUoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBzdGFja0FkZHIo
YXJnLm9mZnNldCgpIC0gY29kZS5mcmFtZVNpemUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtMjY2LDYgKzMxNiw3IEBAIHZvaWQgYWxsb2NhdGVTdGFjayhDb2Rl
JiBjb2RlKQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICk7CiAgICAgICAgIH0KKyAg
ICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOwogICAgIH0KIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmgJKHJldmlz
aW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVT
dGFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDcgKzMzLDkgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7IG5hbWVzcGFjZQogY2xhc3MgQ29kZTsKIAogLy8gVGhpcyBhbGxvY2F0ZXMgU3Rh
Y2tTbG90cyB0byBwbGFjZXMgb24gdGhlIHN0YWNrLiBJdCBmaXJzdCBhbGxvY2F0ZXMgdGhlIHBp
bm5lZCBvbmVzIGluIGluZGV4Ci0vLyBvcmRlciBhbmQgdGhlbiBpdCBhbGxvY2F0ZXMgdGhlIHJl
c3QgdXNpbmcgZmlyc3QgZml0LgorLy8gb3JkZXIgYW5kIHRoZW4gaXQgYWxsb2NhdGVzIHRoZSBy
ZXN0IHVzaW5nIGZpcnN0IGZpdC4gVGFrZXMgdGhlIG9wcG9ydHVuaXR5IHRvIGtpbGwgZGVhZAor
Ly8gYXNzaWdubWVudHMgdG8gc3RhY2sgc2xvdHMsIHNpbmNlIGl0IGtub3dzIHdoaWNoIG9uZXMg
YXJlIGxpdmUuIEFsc28gZml4ZXMgWkRlZnMgdG8gYW5vbnltb3VzCisvLyBzdGFjayBzbG90cy4K
IAogdm9pZCBhbGxvY2F0ZVN0YWNrKENvZGUmKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJBcmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckFyZy5oCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckFyZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNiArMTI2LDcgQEAgcHVi
bGljOgogICAgICAgICAvLyBkZXBlbmRpbmcgb24gdGhlIGtpbmQgb2YgdGhlIGFyZ3VtZW50Ogog
ICAgICAgICAvLwogICAgICAgICAvLyBGb3IgcmVnaXN0ZXI6IHRoZSB1cHBlciBiaXRzIGFyZSB6
ZXJvLWZpbGxlZC4KKyAgICAgICAgLy8gRm9yIGFub255bW91cyBzdGFjayBzbG90OiB0aGUgdXBw
ZXIgYml0cyBhcmUgemVyby1maWxsZWQuCiAgICAgICAgIC8vIEZvciBhZGRyZXNzOiB0aGUgdXBw
ZXIgYml0cyBhcmUgbm90IHRvdWNoZWQgKGkuZS4gd2UgZG8gYSAzMi1iaXQgc3RvcmUgaW4gb3Vy
IGV4YW1wbGUpLgogICAgICAgICAvLyBGb3IgdG1wOiBlaXRoZXIgdGhlIHVwcGVyIGJpdHMgYXJl
IG5vdCB0b3VjaGVkIG9yIHRoZXkgYXJlIHplcm8tZmlsbGVkLCBhbmQgd2Ugd29uJ3Qga25vdwog
ICAgICAgICAvLyB3aGljaCB1bnRpbCB3ZSBsb3dlciB0aGUgdG1wIHRvIGVpdGhlciBhIFN0YWNr
U2xvdCBvciBhIFJlZy4KQEAgLTUxMyw2ICs1MTQsMTcgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KIAorICAgIHN0YXRpYyBBcmcgc3RhY2tBZGRyKGludDMyX3Qgb2Zm
c2V0RnJvbUZQLCB1bnNpZ25lZCBmcmFtZVNpemUsIFdpZHRoIHdpZHRoKQorICAgIHsKKyAgICAg
ICAgQXJnIHJlc3VsdCA9IEFyZzo6YWRkcihBaXI6OlRtcChHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciksIG9mZnNldEZyb21GUCk7CisgICAgICAgIGlmICghcmVzdWx0LmlzVmFsaWRGb3JtKHdp
ZHRoKSkgeworICAgICAgICAgICAgcmVzdWx0ID0gQXJnOjphZGRyKAorICAgICAgICAgICAgICAg
IEFpcjo6VG1wKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciksCisgICAgICAg
ICAgICAgICAgb2Zmc2V0RnJvbUZQICsgZnJhbWVTaXplKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKwogICAgIC8vIElmIHlvdSBkb24ndCBwYXNzIGEgV2lkdGgs
IHRoaXMgb3B0aW1pc3RpY2FsbHkgYXNzdW1lcyB0aGF0IHlvdSdyZSB1c2luZyB0aGUgcmlnaHQg
d2lkdGguCiAgICAgc3RhdGljIGJvb2wgaXNWYWxpZFNjYWxlKHVuc2lnbmVkIHNjYWxlLCBPcHRp
b25hbDxXaWR0aD4gd2lkdGggPSBOdWxsb3B0KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMTk1MTc2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTcsMTEgKzU3LDIxIEBAIHZvaWQgQmFzaWNCbG9jazo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSAKIAogdm9pZCBCYXNpY0Jsb2NrOjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAogeworICAgIGR1bXBIZWFkZXIob3V0KTsKKyAgICBmb3IgKGNvbnN0IEluc3QmIGlu
c3QgOiAqdGhpcykKKyAgICAgICAgb3V0LnByaW50KCIgICAgIiwgaW5zdCwgIlxuIik7CisgICAg
ZHVtcEZvb3RlcihvdXQpOworfQorCit2b2lkIEJhc2ljQmxvY2s6OmR1bXBIZWFkZXIoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKK3sKICAgICBvdXQucHJpbnQoIkJCIiwgKnRoaXMsICI6IDsgZnJl
cXVlbmN5ID0gIiwgbV9mcmVxdWVuY3ksICJcbiIpOwogICAgIGlmIChwcmVkZWNlc3NvcnMoKS5z
aXplKCkpCiAgICAgICAgIG91dC5wcmludCgiICBQcmVkZWNlc3NvcnM6ICIsIHBvaW50ZXJMaXN0
RHVtcChwcmVkZWNlc3NvcnMoKSksICJcbiIpOwotICAgIGZvciAoY29uc3QgSW5zdCYgaW5zdCA6
ICp0aGlzKQotICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBpbnN0LCAiXG4iKTsKK30KKwordm9p
ZCBCYXNpY0Jsb2NrOjpkdW1wRm9vdGVyKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CiAgICAg
aWYgKHN1Y2Nlc3NvcnMoKS5zaXplKCkpCiAgICAgICAgIG91dC5wcmludCgiICBTdWNjZXNzb3Jz
OiAiLCBsaXN0RHVtcChzdWNjZXNzb3JzKCkpLCAiXG4iKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCShyZXZpc2lvbiAxOTUxNzYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAkod29ya2luZyBj
b3B5KQpAQCAtMzYsNiArMzYsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsg
bmFtZXNwYWNlIEFpciB7CiAKK2NsYXNzIEJsb2NrSW5zZXJ0aW9uU2V0OwogY2xhc3MgQ29kZTsK
IGNsYXNzIEluc2VydGlvblNldDsKIApAQCAtMTI2LDcgKzEyNywxMSBAQCBwdWJsaWM6CiAgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgdm9pZCBkZWVwRHVtcChQcmludFN0
cmVhbSYpIGNvbnN0OwogCisgICAgdm9pZCBkdW1wSGVhZGVyKFByaW50U3RyZWFtJikgY29uc3Q7
CisgICAgdm9pZCBkdW1wRm9vdGVyKFByaW50U3RyZWFtJikgY29uc3Q7CisKIHByaXZhdGU6Cisg
ICAgZnJpZW5kIGNsYXNzIEJsb2NrSW5zZXJ0aW9uU2V0OwogICAgIGZyaWVuZCBjbGFzcyBDb2Rl
OwogICAgIGZyaWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuY3BwCShyZXZpc2lvbiAx
OTUxNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDkgQEAgQ0NhbGxTcGVjaWFsOjpDQ2FsbFNw
ZWNpYWwoKQogICAgIG1fY2xvYmJlcmVkUmVncy5leGNsdWRlKFJlZ2lzdGVyU2V0OjpzdGFja1Jl
Z2lzdGVycygpKTsKICAgICBtX2Nsb2JiZXJlZFJlZ3MuZXhjbHVkZShSZWdpc3RlclNldDo6cmVz
ZXJ2ZWRIYXJkd2FyZVJlZ2lzdGVycygpKTsKICAgICBtX2Nsb2JiZXJlZFJlZ3MuZXhjbHVkZShS
ZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKyAgICBtX2Nsb2JiZXJlZFJlZ3Mu
Y2xlYXIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgIG1fY2xvYmJlcmVkUmVncy5jbGVh
cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOworICAgIG1fY2xvYmJlcmVkUmVncy5jbGVhcihG
UFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7CiB9CiAKIENDYWxsU3BlY2lhbDo6fkNDYWxsU3BlY2lh
bCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkocmV2aXNpb24g
MTk1MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAgY2xhc3MgUHJvY2VkdXJlOwogCiBuYW1lc3BhY2Ug
QWlyIHsKIAorY2xhc3MgQmxvY2tJbnNlcnRpb25TZXQ7CiBjbGFzcyBDQ2FsbFNwZWNpYWw7CiAK
IC8vIFRoaXMgaXMgYW4gSVIgdGhhdCBpcyB2ZXJ5IGNsb3NlIHRvIHRoZSBiYXJlIG1ldGFsLiBJ
dCByZXF1aXJlcyBhYm91dCA0MHggbW9yZSBieXRlcyB0aGFuIHRoZQpAQCAtMzI0LDYgKzMyNSw3
IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgOjpKU0M6OkIzOjpQcm9j
ZWR1cmU7CisgICAgZnJpZW5kIGNsYXNzIEJsb2NrSW5zZXJ0aW9uU2V0OwogICAgIAogICAgIENv
ZGUoUHJvY2VkdXJlJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckN1c3RvbS5jcHAJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTEgKzI4LDM1IEBACiAK
ICNpZiBFTkFCTEUoQjNfSklUKQogCisjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKICNpbmNs
dWRlICJCM0NDYWxsVmFsdWUuaCIKICNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgogCiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CiAKK2Jvb2wgUGF0Y2hD
dXN0b206OmlzVmFsaWRGb3JtKEluc3QmIGluc3QpCit7CisgICAgaWYgKGluc3QuYXJncy5zaXpl
KCkgPCAxKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFpbnN0LmFyZ3NbMF0uaXNT
cGVjaWFsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWluc3QuYXJnc1swXS5z
cGVjaWFsKCktPmlzVmFsaWQoaW5zdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBSZWdp
c3RlclNldCBjbG9iYmVyZWRFYXJseSA9IGluc3QuZXh0cmFFYXJseUNsb2JiZXJlZFJlZ3MoKTsK
KyAgICBSZWdpc3RlclNldCBjbG9iYmVyZWRMYXRlID0gaW5zdC5leHRyYUNsb2JiZXJlZFJlZ3Mo
KTsKKyAgICBib29sIG9rID0gdHJ1ZTsKKyAgICBpbnN0LmZvckVhY2hUbXAoCisgICAgICAgIFsm
XSAoVG1wJiB0bXAsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUsIEFyZzo6V2lkdGgpIHsKKyAg
ICAgICAgICAgIGlmICghdG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgaWYgKEFyZzo6aXNMYXRlRGVmKHJvbGUpIHx8IEFyZzo6aXNMYXRlVXNlKHJvbGUp
KQorICAgICAgICAgICAgICAgIG9rICY9ICFjbG9iYmVyZWRMYXRlLmdldCh0bXAucmVnKCkpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG9rICY9ICFjbG9iYmVyZWRFYXJseS5n
ZXQodG1wLnJlZygpKTsKKyAgICAgICAgfSk7CisgICAgcmV0dXJuIG9rOworfQorCiBib29sIEND
YWxsQ3VzdG9tOjppc1ZhbGlkRm9ybShJbnN0JiBpbnN0KQogewogICAgIENDYWxsVmFsdWUqIHZh
bHVlID0gaW5zdC5vcmlnaW4tPmFzPENDYWxsVmFsdWU+KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckN1c3RvbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQ3VzdG9tLmgJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ3VzdG9tLmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDE0
ICs3MSw3IEBAIHN0cnVjdCBQYXRjaEN1c3RvbSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkRm9ybShJbnN0JiBpbnN0KQotICAgIHsKLSAg
ICAgICAgaWYgKGluc3QuYXJncy5zaXplKCkgPCAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICBpZiAoIWluc3QuYXJnc1swXS5pc1NwZWNpYWwoKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIGluc3QuYXJnc1swXS5zcGVjaWFsKCktPmlzVmFs
aWQoaW5zdCk7Ci0gICAgfQorICAgIHN0YXRpYyBib29sIGlzVmFsaWRGb3JtKEluc3QmIGluc3Qp
OwogCiAgICAgc3RhdGljIGJvb2wgYWRtaXRzU3RhY2soSW5zdCYgaW5zdCwgdW5zaWduZWQgYXJn
SW5kZXgpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbWl0
U2h1ZmZsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJFbWl0U2h1ZmZsZS5jcHAJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3
MCwxNCBAQCB2b2lkIFNodWZmbGVQYWlyOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiAgICAgb3V0
LnByaW50KHdpZHRoKCksICI6Iiwgc3JjKCksICI9PiIsIGRzdCgpKTsKIH0KIAorSW5zdCBjcmVh
dGVTaHVmZmxlKFZhbHVlKiBvcmlnaW4sIGNvbnN0IFZlY3RvcjxTaHVmZmxlUGFpcj4mIHBhaXJz
KQoreworICAgIEluc3QgcmVzdWx0KFNodWZmbGUsIG9yaWdpbik7CisgICAgZm9yIChjb25zdCBT
aHVmZmxlUGFpciYgcGFpciA6IHBhaXJzKQorICAgICAgICByZXN1bHQuYXBwZW5kKHBhaXIuc3Jj
KCksIHBhaXIuZHN0KCksIEFyZzo6d2lkdGhBcmcocGFpci53aWR0aCgpKSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwogVmVjdG9yPEluc3Q+IGVtaXRTaHVmZmxlKAogICAgIFZlY3RvcjxTaHVm
ZmxlUGFpcj4gcGFpcnMsIHN0ZDo6YXJyYXk8QXJnLCAyPiBzY3JhdGNoZXMsIEFyZzo6VHlwZSB0
eXBlLCBWYWx1ZSogb3JpZ2luKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJFbWl0U2h1ZmZsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyRW1pdFNodWZmbGUuaAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJFbWl0U2h1ZmZsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2
ICs2Niw5IEBAIHByaXZhdGU6CiAgICAgQXJnOjpXaWR0aCBtX3dpZHRoIHsgQXJnOjpXaWR0aDgg
fTsKIH07CiAKKy8vIENyZWF0ZSBhIFNodWZmbGUgaW5zdHJ1Y3Rpb24uCitJbnN0IGNyZWF0ZVNo
dWZmbGUoVmFsdWUqIG9yaWdpbiwgY29uc3QgVmVjdG9yPFNodWZmbGVQYWlyPiYpOworCiAvLyBQ
ZXJmb3JtIGEgc2h1ZmZsZSBvZiBhIGdpdmVuIHR5cGUuIFRoZSBzY3JhdGNoIGFyZ3VtZW50IGlz
IG1hbmRhdG9yeS4gWW91IHNob3VsZCBwYXNzIGl0IGFzCiAvLyBmb2xsb3dzOiBJZiB5b3Uga25v
dyB0aGF0IHlvdSBoYXZlIHNjcmF0Y2ggcmVnaXN0ZXJzIG9yIHRlbXBvcmFyaWVzIGF2YWlsYWJs
ZSAtIHRoYXQgaXMsIHRoZXkncmUKIC8vIHJlZ2lzdGVycyB0aGF0IGFyZSBub3QgbWVudGlvbmVk
IGluIHRoZSBzaHVmZmxlLCBoYXZlIHRoZSBzYW1lIHR5cGUgYXMgdGhlIHNodWZmbGUsIGFuZCBh
cmUgbm90CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeE9idmlvdXNT
cGlsbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
Rml4T2J2aW91c1NwaWxscy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckZpeE9idmlvdXNTcGlsbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckZpeE9idmlvdXNTcGlsbHMuaCIKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWly
SW5zdElubGluZXMuaCIKKyNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCisjaW5jbHVkZSAiQjNJ
bmRleE1hcC5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK25hbWVzcGFjZSB7CisKK2Jvb2wgdmVy
Ym9zZSA9IGZhbHNlOworCitjbGFzcyBGaXhPYnZpb3VzU3BpbGxzIHsKK3B1YmxpYzoKKyAgICBG
aXhPYnZpb3VzU3BpbGxzKENvZGUmIGNvZGUpCisgICAgICAgIDogbV9jb2RlKGNvZGUpCisgICAg
ICAgICwgbV9hdEhlYWQoY29kZS5zaXplKCkpCisgICAgeworICAgIH0KKworICAgIHZvaWQgcnVu
KCkKKyAgICB7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiQ29k
ZSBiZWZvcmUgZml4T2J2aW91c1NwaWxsczpcbiIsIG1fY29kZSk7CisgICAgICAgIAorICAgICAg
ICBjb21wdXRlQWxpYXNlcygpOworICAgICAgICBmaXhDb2RlKCk7CisgICAgfQorCitwcml2YXRl
OgorICAgIHZvaWQgY29tcHV0ZUFsaWFzZXMoKQorICAgIHsKKyAgICAgICAgbV9hdEhlYWRbbV9j
b2RlWzBdXS53YXNWaXNpdGVkID0gdHJ1ZTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgY2hhbmdl
ZCA9IHRydWU7CisgICAgICAgIHdoaWxlIChjaGFuZ2VkKSB7CisgICAgICAgICAgICBjaGFuZ2Vk
ID0gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxv
Y2sgOiBtX2NvZGUpIHsKKyAgICAgICAgICAgICAgICBtX2Jsb2NrID0gYmxvY2s7CisgICAgICAg
ICAgICAgICAgbV9zdGF0ZSA9IG1fYXRIZWFkW2Jsb2NrXTsKKyAgICAgICAgICAgICAgICBpZiAo
IW1fc3RhdGUud2FzVmlzaXRlZCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygi
RXhlY3V0aW5nIGJsb2NrICIsICptX2Jsb2NrLCAiOiAiLCBtX3N0YXRlLCAiXG4iKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKG1faW5zdEluZGV4ID0gMDsgbV9pbnN0
SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK21faW5zdEluZGV4KQorICAgICAgICAgICAgICAgICAg
ICBleGVjdXRlSW5zdCgpOworCisgICAgICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNj
ZXNzb3IgOiBibG9jay0+c3VjY2Vzc29yQmxvY2tzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
U3RhdGUmIHRvU3RhdGUgPSBtX2F0SGVhZFtzdWNjZXNzb3JdOworICAgICAgICAgICAgICAgICAg
ICBpZiAodG9TdGF0ZS53YXNWaXNpdGVkKQorICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdl
ZCB8PSB0b1N0YXRlLm1lcmdlKG1fc3RhdGUpOworICAgICAgICAgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHRvU3RhdGUgPSBtX3N0YXRlOworICAgICAgICAgICAg
ICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lk
IGZpeENvZGUoKQorICAgIHsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fY29k
ZSkgeworICAgICAgICAgICAgbV9ibG9jayA9IGJsb2NrOworICAgICAgICAgICAgbV9zdGF0ZSA9
IG1fYXRIZWFkW2Jsb2NrXTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fc3RhdGUud2Fz
VmlzaXRlZCk7CisKKyAgICAgICAgICAgIGZvciAobV9pbnN0SW5kZXggPSAwOyBtX2luc3RJbmRl
eCA8IGJsb2NrLT5zaXplKCk7ICsrbV9pbnN0SW5kZXgpIHsKKyAgICAgICAgICAgICAgICBmaXhJ
bnN0KCk7CisgICAgICAgICAgICAgICAgZXhlY3V0ZUluc3QoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKworICAgIHZvaWQgZXhlY3V0ZUluc3QoKQorICAgIHsKKyAgICAgICAg
SW5zdCYgaW5zdCA9IG1fYmxvY2stPmF0KG1faW5zdEluZGV4KTsKKworICAgICAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICBFeGVjdXRpbmcgIiwgaW5zdCwgIjogIiwg
bV9zdGF0ZSwgIlxuIik7CisKKyAgICAgICAgSW5zdDo6Zm9yRWFjaERlZldpdGhFeHRyYUNsb2Ji
ZXJlZFJlZ3M8QXJnPigKKyAgICAgICAgICAgICZpbnN0LCAmaW5zdCwKKyAgICAgICAgICAgIFsm
XSAoY29uc3QgQXJnJiBhcmcsIEFyZzo6Um9sZSwgQXJnOjpUeXBlLCBBcmc6OldpZHRoKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2co
IiAgICAgICAgQ2xvYmJlcmluZyAiLCBhcmcsICJcbiIpOworICAgICAgICAgICAgICAgIG1fc3Rh
dGUuY2xvYmJlcihhcmcpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgc3dpdGNoIChpbnN0
Lm9wY29kZSkgeworICAgICAgICBjYXNlIE1vdmU6CisgICAgICAgICAgICBpZiAoaW5zdC5hcmdz
WzBdLmlzU29tZUltbSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGluc3QuYXJnc1sxXS5pc1Jl
ZygpKQorICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLmFkZEFsaWFzKFJlZ0NvbnN0KGluc3Qu
YXJnc1sxXS5yZWcoKSwgaW5zdC5hcmdzWzBdLnZhbHVlKCkpKTsKKyAgICAgICAgICAgICAgICBl
bHNlIGlmIChpc1NwaWxsU2xvdChpbnN0LmFyZ3NbMV0pKQorICAgICAgICAgICAgICAgICAgICBt
X3N0YXRlLmFkZEFsaWFzKFNsb3RDb25zdChpbnN0LmFyZ3NbMV0uc3RhY2tTbG90KCksIGluc3Qu
YXJnc1swXS52YWx1ZSgpKSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlzU3BpbGxTbG90KGlu
c3QuYXJnc1swXSkgJiYgaW5zdC5hcmdzWzFdLmlzUmVnKCkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoT3B0aW9uYWw8aW50NjRfdD4gY29uc3RhbnQgPSBtX3N0YXRlLmNvbnN0YW50Rm9yKGluc3Qu
YXJnc1swXSkpCisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuYWRkQWxpYXMoUmVnQ29uc3Qo
aW5zdC5hcmdzWzFdLnJlZygpLCAqY29uc3RhbnQpKTsKKyAgICAgICAgICAgICAgICBtX3N0YXRl
LmFkZEFsaWFzKAorICAgICAgICAgICAgICAgICAgICBSZWdTbG90KGluc3QuYXJnc1sxXS5yZWco
KSwgaW5zdC5hcmdzWzBdLnN0YWNrU2xvdCgpLCBSZWdTbG90OjpBbGxCaXRzKSk7CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKGluc3QuYXJnc1swXS5pc1JlZygpICYmIGlzU3BpbGxTbG90KGluc3Qu
YXJnc1sxXSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoT3B0aW9uYWw8aW50NjRfdD4gY29uc3Rh
bnQgPSBtX3N0YXRlLmNvbnN0YW50Rm9yKGluc3QuYXJnc1swXSkpCisgICAgICAgICAgICAgICAg
ICAgIG1fc3RhdGUuYWRkQWxpYXMoU2xvdENvbnN0KGluc3QuYXJnc1sxXS5zdGFja1Nsb3QoKSwg
KmNvbnN0YW50KSk7CisgICAgICAgICAgICAgICAgbV9zdGF0ZS5hZGRBbGlhcygKKyAgICAgICAg
ICAgICAgICAgICAgUmVnU2xvdChpbnN0LmFyZ3NbMF0ucmVnKCksIGluc3QuYXJnc1sxXS5zdGFj
a1Nsb3QoKSwgUmVnU2xvdDo6QWxsQml0cykpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgY2FzZSBNb3ZlMzI6CisgICAgICAgICAgICBpZiAoaW5zdC5hcmdz
WzBdLmlzU29tZUltbSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGluc3QuYXJnc1sxXS5pc1Jl
ZygpKQorICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLmFkZEFsaWFzKFJlZ0NvbnN0KGluc3Qu
YXJnc1sxXS5yZWcoKSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGluc3QuYXJnc1swXS52YWx1ZSgp
KSkpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzU3BpbGxTbG90KGluc3QuYXJnc1sxXSkp
CisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuYWRkQWxpYXMoU2xvdENvbnN0KGluc3QuYXJn
c1sxXS5zdGFja1Nsb3QoKSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGluc3QuYXJnc1swXS52YWx1
ZSgpKSkpOworICAgICAgICAgICAgfSBlbHNlIGlmIChpc1NwaWxsU2xvdChpbnN0LmFyZ3NbMF0p
ICYmIGluc3QuYXJnc1sxXS5pc1JlZygpKSB7CisgICAgICAgICAgICAgICAgaWYgKE9wdGlvbmFs
PGludDY0X3Q+IGNvbnN0YW50ID0gbV9zdGF0ZS5jb25zdGFudEZvcihpbnN0LmFyZ3NbMF0pKQor
ICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLmFkZEFsaWFzKFJlZ0NvbnN0KGluc3QuYXJnc1sx
XS5yZWcoKSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KCpjb25zdGFudCkpKTsKKyAgICAgICAgICAg
ICAgICBtX3N0YXRlLmFkZEFsaWFzKAorICAgICAgICAgICAgICAgICAgICBSZWdTbG90KGluc3Qu
YXJnc1sxXS5yZWcoKSwgaW5zdC5hcmdzWzBdLnN0YWNrU2xvdCgpLCBSZWdTbG90OjpaRXh0MzIp
KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5zdC5hcmdzWzBdLmlzUmVnKCkgJiYgaXNTcGls
bFNsb3QoaW5zdC5hcmdzWzFdKSkgeworICAgICAgICAgICAgICAgIGlmIChPcHRpb25hbDxpbnQ2
NF90PiBjb25zdGFudCA9IG1fc3RhdGUuY29uc3RhbnRGb3IoaW5zdC5hcmdzWzBdKSkKKyAgICAg
ICAgICAgICAgICAgICAgbV9zdGF0ZS5hZGRBbGlhcyhTbG90Q29uc3QoaW5zdC5hcmdzWzFdLnN0
YWNrU2xvdCgpLCBzdGF0aWNfY2FzdDxpbnQzMl90PigqY29uc3RhbnQpKSk7CisgICAgICAgICAg
ICAgICAgbV9zdGF0ZS5hZGRBbGlhcygKKyAgICAgICAgICAgICAgICAgICAgUmVnU2xvdChpbnN0
LmFyZ3NbMF0ucmVnKCksIGluc3QuYXJnc1sxXS5zdGFja1Nsb3QoKSwgUmVnU2xvdDo6TWF0Y2gz
MikpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBmaXhJ
bnN0KCkKKyAgICB7CisgICAgICAgIEluc3QmIGluc3QgPSBtX2Jsb2NrLT5hdChtX2luc3RJbmRl
eCk7CisKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCJGaXhpbmcg
aW5zdCAiLCBpbnN0LCAiOiAiLCBtX3N0YXRlLCAiXG4iKTsKKworICAgICAgICAvLyBDcmVhdGUg
YSBjb3B5IGluIGNhc2Ugd2UgaW52YWxpZGF0ZSB0aGUgaW5zdHJ1Y3Rpb24uIFRoYXQgZG9lc24n
dCBoYXBwZW4gb2Z0ZW4uCisgICAgICAgIEluc3QgaW5zdENvcHkgPSBpbnN0OworCisgICAgICAg
IC8vIFRoZSBnb2FsIGlzIHRvIHJlcGxhY2UgcmVmZXJlbmNlcyB0byBzdGFjayBzbG90cy4gV2Ug
b25seSBjYXJlIGFib3V0IGVhcmx5IHVzZXMuIFdlIGNhbid0CisgICAgICAgIC8vIGhhbmRsZSBV
c2VEZWZzLiBXZSBjb3VsZCB0ZWFjaCB0aGlzIHRvIGhhbmRsZSBVc2VEZWZzIGlmIHdlIGluc2Vy
dGVkIGEgc3RvcmUgaW5zdHJ1Y3Rpb24KKyAgICAgICAgLy8gYWZ0ZXIgYW5kIHdlIHByb3ZlZCB0
aGF0IHRoZSByZWdpc3RlciBhbGlhc2VkIHRvIHRoZSBzdGFjayBzbG90IGRpZXMgaGVyZS4gV2Ug
Y2FuIGdldCB0aGF0CisgICAgICAgIC8vIGluZm9ybWF0aW9uIGZyb20gdGhlIGxpdmVuZXNzIGFu
YWx5c2lzLiBXZSBhbHNvIGNhbid0IGhhbmRsZSBsYXRlIHVzZXMsIGJlY2F1c2Ugd2UgZG9uJ3QK
KyAgICAgICAgLy8gbG9vayBhdCBsYXRlIGNsb2JiZXJzIHdoZW4gZG9pbmcgdGhpcy4KKyAgICAg
ICAgYm9vbCBkaWRUaGluZ3MgPSBmYWxzZTsKKyAgICAgICAgYXV0byBoYW5kbGVBcmcgPSBbJl0g
KEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlLCBBcmc6OldpZHRoIHdpZHRoKSB7
CisgICAgICAgICAgICBpZiAoIWlzU3BpbGxTbG90KGFyZykpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgaWYgKCFBcmc6OmlzRWFybHlVc2Uocm9sZSkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlEZWYocm9sZSkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUcnkgdG8g
Z2V0IGEgcmVnaXN0ZXIgaWYgYXQgYWxsIHBvc3NpYmxlLgorICAgICAgICAgICAgaWYgKGNvbnN0
IFJlZ1Nsb3QqIGFsaWFzID0gbV9zdGF0ZS5nZXRSZWdTbG90KGFyZy5zdGFja1Nsb3QoKSkpIHsK
KyAgICAgICAgICAgICAgICBzd2l0Y2ggKHdpZHRoKSB7CisgICAgICAgICAgICAgICAgY2FzZSBB
cmc6OldpZHRoNjQ6CisgICAgICAgICAgICAgICAgICAgIGlmIChhbGlhcy0+bW9kZSAhPSBSZWdT
bG90OjpBbGxCaXRzKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2co
IiAgICBSZXBsYWNpbmcgIiwgYXJnLCAiIHdpdGggIiwgYWxpYXMtPnJlZywgIlxuIik7CisgICAg
ICAgICAgICAgICAgICAgIGFyZyA9IFRtcChhbGlhcy0+cmVnKTsKKyAgICAgICAgICAgICAgICAg
ICAgZGlkVGhpbmdzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDMyOgorICAgICAgICAgICAgICAgICAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBSZXBsYWNpbmcgIiwg
YXJnLCAiIHdpdGggIiwgYWxpYXMtPnJlZywgIiAoc3Vid2lkdGggY2FzZSlcbiIpOworICAgICAg
ICAgICAgICAgICAgICBhcmcgPSBUbXAoYWxpYXMtPnJlZyk7CisgICAgICAgICAgICAgICAgICAg
IGRpZFRoaW5ncyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBSZXZlcnQgdG8gaW1tZWRp
YXRlIGlmIHRoYXQgZGlkbid0IHdvcmsuCisgICAgICAgICAgICBpZiAoY29uc3QgU2xvdENvbnN0
KiBhbGlhcyA9IG1fc3RhdGUuZ2V0U2xvdENvbnN0KGFyZy5zdGFja1Nsb3QoKSkpIHsKKyAgICAg
ICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAg
IFJlcGxhY2luZyAiLCBhcmcsICIgd2l0aCBjb25zdGFudCAiLCBhbGlhcy0+Y29uc3RhbnQsICJc
biIpOworICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzVmFsaWRJbW1Gb3JtKGFsaWFzLT5jb25z
dGFudCkpCisgICAgICAgICAgICAgICAgICAgIGFyZyA9IEFyZzo6aW1tKGFsaWFzLT5jb25zdGFu
dCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBhcmcgPSBBcmc6
OmltbTY0KGFsaWFzLT5jb25zdGFudCk7CisgICAgICAgICAgICAgICAgZGlkVGhpbmdzID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH07Cisg
ICAgICAgIAorICAgICAgICBpbnN0LmZvckVhY2hBcmcoaGFuZGxlQXJnKTsKKyAgICAgICAgaWYg
KCFkaWRUaGluZ3MgfHwgaW5zdC5pc1ZhbGlkRm9ybSgpKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAKKyAgICAgICAgLy8gV2UgaW50cm9kdWNlZCBzb21ldGhpbmcgaW52YWxpZCBhbG9u
ZyB0aGUgd2F5LiBCYWNrIHVwIGFuZCBjYXJlZnVsbHkgaGFuZGxlIGVhY2ggYXJndW1lbnQuCisg
ICAgICAgIGluc3QgPSBpbnN0Q29weTsKKyAgICAgICAgQVNTRVJUKGluc3QuaXNWYWxpZEZvcm0o
KSk7CisgICAgICAgIGluc3QuZm9yRWFjaEFyZygKKyAgICAgICAgICAgIFsmXSAoQXJnJiBhcmcs
IEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgdHlwZSwgQXJnOjpXaWR0aCB3aWR0aCkgeworICAg
ICAgICAgICAgICAgIEFyZyBhcmdDb3B5ID0gYXJnOworICAgICAgICAgICAgICAgIGhhbmRsZUFy
ZyhhcmcsIHJvbGUsIHR5cGUsIHdpZHRoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWluc3QuaXNW
YWxpZEZvcm0oKSkKKyAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJnQ29weTsKKyAgICAgICAg
ICAgIH0pOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCBpc1NwaWxsU2xvdChjb25zdCBB
cmcmIGFyZykKKyAgICB7CisgICAgICAgIHJldHVybiBhcmcuaXNTdGFjaygpICYmICFhcmcuc3Rh
Y2tTbG90KCktPmlzTG9ja2VkKCk7CisgICAgfQorICAgIAorICAgIHN0cnVjdCBSZWdDb25zdCB7
CisgICAgICAgIFJlZ0NvbnN0KCkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBSZWdDb25zdChSZWcgcmVnLCBpbnQ2NF90IGNvbnN0YW50KQorICAgICAgICAgICAgOiBy
ZWcocmVnKQorICAgICAgICAgICAgLCBjb25zdGFudChjb25zdGFudCkKKyAgICAgICAgeworICAg
ICAgICB9CisKKyAgICAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiAhIXJlZzsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBvdXQu
cHJpbnQocmVnLCAiLT4iLCBjb25zdGFudCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IFJlZyByZWc7CisgICAgICAgIGludDY0X3QgY29uc3RhbnQgeyAwIH07CisgICAgfTsKKworICAg
IHN0cnVjdCBSZWdTbG90IHsKKyAgICAgICAgZW51bSBNb2RlIDogaW50OF90IHsKKyAgICAgICAg
ICAgIEFsbEJpdHMsCisgICAgICAgICAgICBaRXh0MzIsIC8vIFJlZ2lzdGVyIGNvbnRhaW5zIHpl
cm8tZXh0ZW5kZWQgY29udGVudHMgb2Ygc3RhY2sgc2xvdC4KKyAgICAgICAgICAgIE1hdGNoMzIg
Ly8gTG93IDMyIGJpdHMgb2YgcmVnaXN0ZXIgbWF0Y2ggbG93IDMyIGJpdHMgb2Ygc3RhY2sgc2xv
dC4KKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIFJlZ1Nsb3QoKQorICAgICAgICB7Cisg
ICAgICAgIH0KKworICAgICAgICBSZWdTbG90KFJlZyByZWcsIFN0YWNrU2xvdCogc2xvdCwgTW9k
ZSBtb2RlKQorICAgICAgICAgICAgOiBzbG90KHNsb3QpCisgICAgICAgICAgICAsIHJlZyhyZWcp
CisgICAgICAgICAgICAsIG1vZGUobW9kZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAg
ICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBzbG90ICYmIHJlZzsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBvdXQucHJpbnQocG9p
bnRlckR1bXAoc2xvdCksICItPiIsIHJlZyk7CisgICAgICAgICAgICBzd2l0Y2ggKG1vZGUpIHsK
KyAgICAgICAgICAgIGNhc2UgQWxsQml0czoKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIihB
bGxCaXRzKSIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBaRXh0
MzI6CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCIoWkV4dDMyKSIpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBNYXRjaDMyOgorICAgICAgICAgICAgICAgIG91
dC5wcmludCgiKE1hdGNoMzIpIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFN0YWNrU2xvdCogc2xvdCB7IG51bGxw
dHIgfTsKKyAgICAgICAgUmVnIHJlZzsKKyAgICAgICAgTW9kZSBtb2RlIHsgQWxsQml0cyB9Owor
ICAgIH07CisKKyAgICBzdHJ1Y3QgU2xvdENvbnN0IHsKKyAgICAgICAgU2xvdENvbnN0KCkKKyAg
ICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgU2xvdENvbnN0KFN0YWNrU2xvdCogc2xvdCwg
aW50NjRfdCBjb25zdGFudCkKKyAgICAgICAgICAgIDogc2xvdChzbG90KQorICAgICAgICAgICAg
LCBjb25zdGFudChjb25zdGFudCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgZXhw
bGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBzbG90OworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIG91dC5wcmludChwb2ludGVyRHVtcChzbG90
KSwgIi0+IiwgY29uc3RhbnQpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBTdGFja1Ns
b3QqIHNsb3QgeyBudWxscHRyIH07CisgICAgICAgIGludDY0X3QgY29uc3RhbnQgeyAwIH07Cisg
ICAgfTsKKworICAgIHN0cnVjdCBTdGF0ZSB7CisgICAgICAgIHZvaWQgYWRkQWxpYXMoY29uc3Qg
UmVnQ29uc3QmIG5ld0FsaWFzKQorICAgICAgICB7CisgICAgICAgICAgICByZWdDb25zdC5hcHBl
bmQobmV3QWxpYXMpOworICAgICAgICB9CisgICAgICAgIHZvaWQgYWRkQWxpYXMoY29uc3QgUmVn
U2xvdCYgbmV3QWxpYXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlZ1Nsb3QuYXBwZW5kKG5l
d0FsaWFzKTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIGFkZEFsaWFzKGNvbnN0IFNsb3RDb25z
dCYgbmV3QWxpYXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNsb3RDb25zdC5hcHBlbmQobmV3
QWxpYXMpOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgUmVnQ29uc3QqIGdldFJlZ0NvbnN0
KFJlZyByZWcpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoY29uc3QgUmVnQ29u
c3QmIGFsaWFzIDogcmVnQ29uc3QpIHsKKyAgICAgICAgICAgICAgICBpZiAoYWxpYXMucmVnID09
IHJlZykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICZhbGlhczsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgY29uc3Qg
UmVnU2xvdCogZ2V0UmVnU2xvdChSZWcgcmVnKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAg
ICBmb3IgKGNvbnN0IFJlZ1Nsb3QmIGFsaWFzIDogcmVnU2xvdCkgeworICAgICAgICAgICAgICAg
IGlmIChhbGlhcy5yZWcgPT0gcmVnKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gJmFsaWFz
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0K
KworICAgICAgICBjb25zdCBSZWdTbG90KiBnZXRSZWdTbG90KFN0YWNrU2xvdCogc2xvdCkgY29u
c3QKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChjb25zdCBSZWdTbG90JiBhbGlhcyA6IHJl
Z1Nsb3QpIHsKKyAgICAgICAgICAgICAgICBpZiAoYWxpYXMuc2xvdCA9PSBzbG90KQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gJmFsaWFzOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBSZWdTbG90KiBnZXRS
ZWdTbG90KFJlZyByZWcsIFN0YWNrU2xvdCogc2xvdCkgY29uc3QKKyAgICAgICAgeworICAgICAg
ICAgICAgZm9yIChjb25zdCBSZWdTbG90JiBhbGlhcyA6IHJlZ1Nsb3QpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoYWxpYXMucmVnID09IHJlZyAmJiBhbGlhcy5zbG90ID09IHNsb3QpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiAmYWxpYXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFNsb3RDb25zdCogZ2V0
U2xvdENvbnN0KFN0YWNrU2xvdCogc2xvdCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAg
Zm9yIChjb25zdCBTbG90Q29uc3QmIGFsaWFzIDogc2xvdENvbnN0KSB7CisgICAgICAgICAgICAg
ICAgaWYgKGFsaWFzLnNsb3QgPT0gc2xvdCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICZh
bGlhczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICB9CisKKyAgICAgICAgT3B0aW9uYWw8aW50NjRfdD4gY29uc3RhbnRGb3IoY29uc3QgQXJnJiBh
cmcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChhcmcuaXNSZWcoKSkgeworICAgICAgICAg
ICAgICAgIGlmIChjb25zdCBSZWdDb25zdCogYWxpYXMgPSBnZXRSZWdDb25zdChhcmcucmVnKCkp
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWxpYXMtPmNvbnN0YW50OworICAgICAgICAg
ICAgICAgIHJldHVybiBOdWxsb3B0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGFy
Zy5pc1N0YWNrKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoY29uc3QgU2xvdENvbnN0KiBhbGlh
cyA9IGdldFNsb3RDb25zdChhcmcuc3RhY2tTbG90KCkpKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gYWxpYXMtPmNvbnN0YW50OworICAgICAgICAgICAgICAgIHJldHVybiBOdWxsb3B0Owor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CisgICAgICAgIH0KKwor
ICAgICAgICB2b2lkIGNsb2JiZXIoY29uc3QgQXJnJiBhcmcpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChhcmcuaXNSZWcoKSkgeworICAgICAgICAgICAgICAgIHJlZ0NvbnN0LnJlbW92ZUFs
bE1hdGNoaW5nKAorICAgICAgICAgICAgICAgICAgICBbJl0gKGNvbnN0IFJlZ0NvbnN0JiBhbGlh
cykgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWxpYXMucmVnID09
IGFyZy5yZWcoKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgcmVn
U2xvdC5yZW1vdmVBbGxNYXRjaGluZygKKyAgICAgICAgICAgICAgICAgICAgWyZdIChjb25zdCBS
ZWdTbG90JiBhbGlhcykgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
YWxpYXMucmVnID09IGFyZy5yZWcoKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGFyZy5pc1N0
YWNrKCkpIHsKKyAgICAgICAgICAgICAgICBzbG90Q29uc3QucmVtb3ZlQWxsTWF0Y2hpbmcoCisg
ICAgICAgICAgICAgICAgICAgIFsmXSAoY29uc3QgU2xvdENvbnN0JiBhbGlhcykgLT4gYm9vbCB7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWxpYXMuc2xvdCA9PSBhcmcuc3RhY2tT
bG90KCk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHJlZ1Nsb3Qu
cmVtb3ZlQWxsTWF0Y2hpbmcoCisgICAgICAgICAgICAgICAgICAgIFsmXSAoY29uc3QgUmVnU2xv
dCYgYWxpYXMpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFsaWFz
LnNsb3QgPT0gYXJnLnN0YWNrU2xvdCgpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgbWVyZ2UoY29uc3QgU3RhdGUmIG90
aGVyKQorICAgICAgICB7CisgICAgICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgY2hhbmdlZCB8PSAhIXJlZ0NvbnN0LnJlbW92ZUFsbE1hdGNo
aW5nKAorICAgICAgICAgICAgICAgIFsmXSAoUmVnQ29uc3QmIGFsaWFzKSAtPiBib29sIHsKKyAg
ICAgICAgICAgICAgICAgICAgY29uc3QgUmVnQ29uc3QqIG90aGVyQWxpYXMgPSBvdGhlci5nZXRS
ZWdDb25zdChhbGlhcy5yZWcpOworICAgICAgICAgICAgICAgICAgICBpZiAoIW90aGVyQWxpYXMp
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGFsaWFzLmNvbnN0YW50ICE9IG90aGVyQWxpYXMtPmNvbnN0YW50KQorICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgY2hhbmdlZCB8PSAhIXNs
b3RDb25zdC5yZW1vdmVBbGxNYXRjaGluZygKKyAgICAgICAgICAgICAgICBbJl0gKFNsb3RDb25z
dCYgYWxpYXMpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBTbG90Q29uc3Qq
IG90aGVyQWxpYXMgPSBvdGhlci5nZXRTbG90Q29uc3QoYWxpYXMuc2xvdCk7CisgICAgICAgICAg
ICAgICAgICAgIGlmICghb3RoZXJBbGlhcykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgICAgICAgICAgICBpZiAoYWxpYXMuY29uc3RhbnQgIT0gb3RoZXJB
bGlhcy0+Y29uc3RhbnQpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0pOworCisg
ICAgICAgICAgICBjaGFuZ2VkIHw9ICEhcmVnU2xvdC5yZW1vdmVBbGxNYXRjaGluZygKKyAgICAg
ICAgICAgICAgICBbJl0gKFJlZ1Nsb3QmIGFsaWFzKSAtPiBib29sIHsKKyAgICAgICAgICAgICAg
ICAgICAgY29uc3QgUmVnU2xvdCogb3RoZXJBbGlhcyA9IG90aGVyLmdldFJlZ1Nsb3QoYWxpYXMu
cmVnLCBhbGlhcy5zbG90KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFvdGhlckFsaWFzKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAg
IGlmIChhbGlhcy5tb2RlICE9IFJlZ1Nsb3Q6Ok1hdGNoMzIgJiYgYWxpYXMubW9kZSAhPSBvdGhl
ckFsaWFzLT5tb2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhbGlhcy5tb2RlID0gUmVn
U2xvdDo6TWF0Y2gzMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CisgICAg
ICAgIH0KKworICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICAg
ICAgeworICAgICAgICAgICAgb3V0LnByaW50KAorICAgICAgICAgICAgICAgICJ7cmVnQ29uc3Qg
PSBbIiwgbGlzdER1bXAocmVnQ29uc3QpLCAiXSwgc2xvdENvbnN0ID0gWyIsIGxpc3REdW1wKHNs
b3RDb25zdCksCisgICAgICAgICAgICAgICAgIl0sIHJlZ1Nsb3QgPSBbIiwgbGlzdER1bXAocmVn
U2xvdCksICJdLCB3YXNWaXNpdGVkID0gIiwgd2FzVmlzaXRlZCwgIn0iKTsKKyAgICAgICAgfQor
CisgICAgICAgIFZlY3RvcjxSZWdDb25zdD4gcmVnQ29uc3Q7CisgICAgICAgIFZlY3RvcjxTbG90
Q29uc3Q+IHNsb3RDb25zdDsKKyAgICAgICAgVmVjdG9yPFJlZ1Nsb3Q+IHJlZ1Nsb3Q7CisgICAg
ICAgIGJvb2wgd2FzVmlzaXRlZCB7IGZhbHNlIH07CisgICAgfTsKKworICAgIENvZGUmIG1fY29k
ZTsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBTdGF0ZT4gbV9hdEhlYWQ7CisgICAgU3RhdGUg
bV9zdGF0ZTsKKyAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrIHsgbnVsbHB0ciB9OworICAgIHVuc2ln
bmVkIG1faW5zdEluZGV4IHsgMCB9OworfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisK
K3ZvaWQgZml4T2J2aW91c1NwaWxscyhDb2RlJiBjb2RlKQoreworICAgIFBoYXNlU2NvcGUgcGhh
c2VTY29wZShjb2RlLCAiZml4T2J2aW91c1NwaWxscyIpOworCisgICAgRml4T2J2aW91c1NwaWxs
cyBmaXhPYnZpb3VzU3BpbGxzKGNvZGUpOworICAgIGZpeE9idmlvdXNTcGlsbHMucnVuKCk7Cit9
CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4T2J2aW91
c1NwaWxscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
Rml4T2J2aW91c1NwaWxscy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJGaXhPYnZpb3VzU3BpbGxzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgQWlyRml4T2J2aW91c1NwaWxsc19oCisjZGVmaW5lIEFpckZpeE9idmlvdXNTcGlsbHNfaAor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5h
bWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCisvLyBUaGlzIGlzIGEgZm9yd2FyZCBmbG93
IHBoYXNlIHRoYXQgdHJhY2tzIGVxdWl2YWxlbmNlIGJldHdlZW4gc3BpbGxzIHNsb3RzIGFuZCBy
ZWdpc3RlcnMuIEl0CisvLyByZW1vdmVzIGxvYWRzIGZyb20gc3BpbGwgc2xvdHMgaW4gY2FzZXMg
d2hlbiB0aGUgY29udGVudHMgb2YgdGhlIHNwaWxsIHNsb3QgY2FuIGJlIGZvdW5kIGluIChvcgor
Ly8gY29tcHV0ZWQgZnJvbSkgYSByZWdpc3Rlci4KK3ZvaWQgZml4T2J2aW91c1NwaWxscyhDb2Rl
Jik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJGaXhPYnZpb3VzU3BpbGxzX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhTcGlsbFNsb3RaRGVmLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhTcGlsbFNsb3RaRGVmLmgJ
KHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4
U3BpbGxTbG90WkRlZi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc4ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBBaXJGaXhTcGls
bFNsb3RaRGVmX2gKLSNkZWZpbmUgQWlyRml4U3BpbGxTbG90WkRlZl9oCi0KLSNpbmNsdWRlICJB
aXJDb2RlLmgiCi0jaW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0LmgiCi0jaW5jbHVkZSAiQWlySW5z
dElubGluZXMuaCIKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBB
aXIgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBJc1NwaWxsU2xvdD4KLXZvaWQgZml4U3BpbGxTbG90
WkRlZihDb2RlJiBjb2RlLCBjb25zdCBJc1NwaWxsU2xvdCYgaXNTcGlsbFNsb3QpCi17Ci0gICAg
Ly8gV2UgY291bGQgaGF2ZSBpbnRyb2R1Y2VkIFpEZWYncyB0byBTdGFja1Nsb3RzIHRoYXQgYXJl
IHdpZGVyIHRoYW4gdGhlIGRlZi4gSW4gdGhhdCBjYXNlLCB3ZQotICAgIC8vIG5lZWQgdG8gZW1p
dCBjb2RlIHRvIHplcm8tZmlsbCB0aGUgdG9wIGJpdHMgb2YgdGhlIFN0YWNrU2xvdC4KLSAgICBJ
bnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KGNvZGUpOwotICAgIGZvciAoQmFzaWNCbG9jayogYmxv
Y2sgOiBjb2RlKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gMDsgaW5zdElu
ZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbnN0SW5kZXgpIHsKLSAgICAgICAgICAgIEluc3QmIGlu
c3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKLQotICAgICAgICAgICAgaW5zdC5mb3JFYWNoQXJn
KAotICAgICAgICAgICAgICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5
cGUsIEFyZzo6V2lkdGggd2lkdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFBcmc6Omlz
WkRlZihyb2xlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCFhcmcuaXNTdGFjaygpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWlzU3BpbGxTbG90KGFyZy5zdGFja1Nsb3Qo
KSkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChhcmcuc3RhY2tTbG90KCktPmJ5dGVTaXplKCkgPT0gQXJnOjpieXRlcyh3aWR0aCkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8g
Q3VycmVudGx5IHdlIG9ubHkgaGFuZGxlIHRoaXMgc2ltcGxlIGNhc2UgYmVjYXVzZSBpdCdzIHRo
ZSBvbmx5IG9uZSB0aGF0Ci0gICAgICAgICAgICAgICAgICAgIC8vIGFyaXNlczogWkRlZidzIGFy
ZSBvbmx5IDMyLWJpdCByaWdodCBub3cuIFNvLCB3aGVuIHdlIGhpdCB0aGVzZQotICAgICAgICAg
ICAgICAgICAgICAvLyBhc3NlcnRpb25zIGl0IG1lYW5zIHRoYXQgd2UgbmVlZCB0byBpbXBsZW1l
bnQgdGhvc2Ugb3RoZXIga2luZHMgb2YgemVybwotICAgICAgICAgICAgICAgICAgICAvLyBmaWxs
cy4KLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYXJnLnN0YWNrU2xvdCgpLT5i
eXRlU2l6ZSgpID09IDgpOwotICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh3aWR0
aCA9PSBBcmc6OldpZHRoMzIpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIFdlIHJlbHkgb24g
dGhlIGZhY3QgdGhhdCB0aGVyZSBtdXN0IGJlIHNvbWUgd2F5IHRvIG1vdmUgemVybyB0byBhIG1l
bW9yeQotICAgICAgICAgICAgICAgICAgICAvLyBsb2NhdGlvbiB3aXRob3V0IGZpcnN0IGJ1cm5p
bmcgYSByZWdpc3Rlci4gT24gQVJNLCB3ZSB3b3VsZCBkbyB0aGlzIHVzaW5nCi0gICAgICAgICAg
ICAgICAgICAgIC8vIHpyLgotICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpc1Zh
bGlkRm9ybShNb3ZlMzIsIEFyZzo6SW1tLCBBcmc6OlN0YWNrKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGluc2VydGlvblNldC5pbnNlcnQoCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnN0SW5k
ZXggKyAxLCBNb3ZlMzIsIGluc3Qub3JpZ2luLCBBcmc6OmltbSgwKSwgYXJnLndpdGhPZmZzZXQo
NCkpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0gICAgICAgIGluc2VydGlvblNl
dC5leGVjdXRlKGJsb2NrKTsKLSAgICB9Ci19Ci0KLX0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
OjpBaXIKLQotI2VuZGlmIC8vIEFpckZpeFNwaWxsU2xvdFpEZWZfaAotCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkocmV2aXNpb24gMTk1MTc2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDEwICszMSwxMiBAQAogI2luY2x1ZGUgIkFpckFsbG9jYXRlU3RhY2su
aCIKICNpbmNsdWRlICJBaXJDb2RlLmgiCiAjaW5jbHVkZSAiQWlyRWxpbWluYXRlRGVhZENvZGUu
aCIKKyNpbmNsdWRlICJBaXJGaXhPYnZpb3VzU3BpbGxzLmgiCiAjaW5jbHVkZSAiQWlyRml4UGFy
dGlhbFJlZ2lzdGVyU3RhbGxzLmgiCiAjaW5jbHVkZSAiQWlyR2VuZXJhdGlvbkNvbnRleHQuaCIK
ICNpbmNsdWRlICJBaXJIYW5kbGVDYWxsZWVTYXZlcy5oIgogI2luY2x1ZGUgIkFpckl0ZXJhdGVk
UmVnaXN0ZXJDb2FsZXNjaW5nLmgiCisjaW5jbHVkZSAiQWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5o
IgogI2luY2x1ZGUgIkFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oIgogI2luY2x1ZGUgIkFpckxvd2Vy
TWFjcm9zLmgiCiAjaW5jbHVkZSAiQWlyT3Bjb2RlVXRpbHMuaCIKQEAgLTg0LDYgKzg2LDE2IEBA
IHZvaWQgcHJlcGFyZUZvckdlbmVyYXRpb24oQ29kZSYgY29kZSkKICAgICBlbHNlCiAgICAgICAg
IGl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nKGNvZGUpOwogCisgICAgaWYgKE9wdGlvbnM6Omxv
Z0FpclJlZ2lzdGVyUHJlc3N1cmUoKSkgeworICAgICAgICBkYXRhTG9nKCJSZWdpc3RlciBwcmVz
c3VyZSBhZnRlciByZWdpc3RlciBhbGxvY2F0aW9uOlxuIik7CisgICAgICAgIGxvZ1JlZ2lzdGVy
UHJlc3N1cmUoY29kZSk7CisgICAgfQorCisgICAgLy8gVGhpcyByZXBsYWNlcyB1c2VzIG9mIHNw
aWxsIHNsb3RzIHdpdGggcmVnaXN0ZXJzIG9yIGNvbnN0YW50cyBpZiBwb3NzaWJsZS4gSXQgZG9l
cyB0aGlzIGJ5CisgICAgLy8gbWluaW1pemluZyB0aGUgYW1vdW50IHRoYXQgd2UgcGVydHVyYiB0
aGUgYWxyZWFkeS1jaG9zZW4gcmVnaXN0ZXIgYWxsb2NhdGlvbi4gSXQgbWF5IGV4dGVuZAorICAg
IC8vIHRoZSBsaXZlIHJhbmdlcyBvZiByZWdpc3RlcnMgdGhvdWdoLgorICAgIGZpeE9idmlvdXNT
cGlsbHMoY29kZSk7CisKICAgICBsb3dlckFmdGVyUmVnQWxsb2MoY29kZSk7CiAKICAgICAvLyBQ
cmlvciB0byB0aGlzIHBvaW50IHRoZSBwcm9sb2d1ZSBhbmQgZXBpbG9ndWUgaXMgaW1wbGljaXQu
IFRoaXMgbWFrZXMgaXQgZXhwbGljaXQuIEl0IGFsc28KQEAgLTEwMywxMyArMTE1LDE1IEBAIHZv
aWQgcHJlcGFyZUZvckdlbmVyYXRpb24oQ29kZSYgY29kZSkKICAgICAvLyBmcmVxdWVuY3kgc3Vj
Y2Vzc29yIGlzIGFsc28gdGhlIGZhbGwtdGhyb3VnaCB0YXJnZXQuCiAgICAgb3B0aW1pemVCbG9j
a09yZGVyKGNvZGUpOwogCi0gICAgLy8gQXR0ZW1wdCB0byByZW1vdmUgZmFsc2UgZGVwZW5kZW5j
aWVzIGJldHdlZW4gaW5zdHJ1Y3Rpb25zIGNyZWF0ZWQgYnkgcGFydGlhbCByZWdpc3RlciBjaGFu
Z2VzLgotICAgIC8vIFRoaXMgbXVzdCBiZSBleGVjdXRlZCBhcyBsYXRlIGFzIHBvc3NpYmxlIGFz
IGl0IGRlcGVuZHMgb24gdGhlIGluc3RydWN0aW9ucyBvcmRlciBhbmQgcmVnaXN0ZXIgdXNlLgot
ICAgIGZpeFBhcnRpYWxSZWdpc3RlclN0YWxscyhjb2RlKTsKLQogICAgIC8vIFRoaXMgaXMgbmVl
ZGVkIHRvIHNhdGlzZnkgYSByZXF1aXJlbWVudCBvZiBCMzo6U3RhY2ttYXBWYWx1ZS4KICAgICBy
ZXBvcnRVc2VkUmVnaXN0ZXJzKGNvZGUpOwogCisgICAgLy8gQXR0ZW1wdCB0byByZW1vdmUgZmFs
c2UgZGVwZW5kZW5jaWVzIGJldHdlZW4gaW5zdHJ1Y3Rpb25zIGNyZWF0ZWQgYnkgcGFydGlhbCBy
ZWdpc3RlciBjaGFuZ2VzLgorICAgIC8vIFRoaXMgbXVzdCBiZSBleGVjdXRlZCBhcyBsYXRlIGFz
IHBvc3NpYmxlIGFzIGl0IGRlcGVuZHMgb24gdGhlIGluc3RydWN0aW9ucyBvcmRlciBhbmQgcmVn
aXN0ZXIKKyAgICAvLyB1c2UuIFdlIF9tdXN0XyBydW4gdGhpcyBhZnRlciByZXBvcnRVc2VkUmVn
aXN0ZXJzKCksIHNpbmNlIHRoYXQga2lsbHMgdmFyaWFibGUgYXNzaWdubWVudHMKKyAgICAvLyB0
aGF0IHNlZW0gZGVhZC4gTHVja2lseSwgdGhpcyBwaGFzZSBkb2VzIG5vdCBjaGFuZ2UgcmVnaXN0
ZXIgbGl2ZW5lc3MsIHNvIHRoYXQncyBPSy4KKyAgICBmaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMo
Y29kZSk7CisKICAgICBpZiAoc2hvdWxkVmFsaWRhdGVJUigpKQogICAgICAgICB2YWxpZGF0ZShj
b2RlKTsKIApAQCAtMTMyLDYgKzE0NiwxNyBAQCB2b2lkIGdlbmVyYXRlKENvZGUmIGNvZGUsIEND
YWxsSGVscGVycyYgCiAgICAgaWYgKGNvZGUuZnJhbWVTaXplKCkpCiAgICAgICAgIGppdC5hZGRQ
dHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLWNvZGUuZnJhbWVTaXplKCkpLCBNYWNyb0Fz
c2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCisgICAgYXV0byBhcmdGb3IgPSBbJl0g
KGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5KSAtPiBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mg
eworICAgICAgICByZXR1cm4gQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBlbnRyeS5vZmZzZXQoKSk7CisgICAgfTsKKyAgICAKKyAgICBmb3IgKGNvbnN0
IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5IDogY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpIHsK
KyAgICAgICAgaWYgKGVudHJ5LnJlZygpLmlzR1BSKCkpCisgICAgICAgICAgICBqaXQuc3RvcmVQ
dHIoZW50cnkucmVnKCkuZ3ByKCksIGFyZ0ZvcihlbnRyeSkpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBqaXQuc3RvcmVEb3VibGUoZW50cnkucmVnKCkuZnByKCksIGFyZ0ZvcihlbnRyeSkp
OworICAgIH0KKwogICAgIEdlbmVyYXRpb25Db250ZXh0IGNvbnRleHQ7CiAgICAgY29udGV4dC5j
b2RlID0gJmNvZGU7CiAgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgQ0NhbGxIZWxwZXJzOjpMYWJl
bD4gYmxvY2tMYWJlbHMoY29kZS5zaXplKCkpOwpAQCAtMTYyLDkgKzE4NywxNSBAQCB2b2lkIGdl
bmVyYXRlKENvZGUmIGNvZGUsIENDYWxsSGVscGVycyYgCiAgICAgICAgIGlmIChpc1JldHVybihi
bG9jay0+bGFzdCgpLm9wY29kZSkpIHsKICAgICAgICAgICAgIC8vIFdlIGN1cnJlbnRseSBkb24n
dCByZXByZXNlbnQgdGhlIGZ1bGwgcHJvbG9ndWUvZXBpbG9ndWUgaW4gQWlyLCBzbyB3ZSBuZWVk
IHRvCiAgICAgICAgICAgICAvLyBoYXZlIHRoaXMgb3ZlcnJpZGUuCi0gICAgICAgICAgICBpZiAo
Y29kZS5mcmFtZVNpemUoKSkKKyAgICAgICAgICAgIGlmIChjb2RlLmZyYW1lU2l6ZSgpKSB7Cisg
ICAgICAgICAgICAgICAgZm9yIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiBlbnRyeSA6IGNvZGUu
Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChlbnRyeS5y
ZWcoKS5pc0dQUigpKQorICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoYXJnRm9y
KGVudHJ5KSwgZW50cnkucmVnKCkuZ3ByKCkpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZERvdWJsZShhcmdGb3IoZW50cnkpLCBlbnRy
eS5yZWcoKS5mcHIoKSk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGppdC5l
bWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwotICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgfSBl
bHNlCiAgICAgICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlV2l0aEVtcHR5RnJh
bWUoKTsKICAgICAgICAgICAgIGppdC5yZXQoKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxs
ZWVTYXZlcy5jcHAJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsy
OSw2IEBACiAjaWYgRU5BQkxFKEIzX0pJVCkKIAogI2luY2x1ZGUgIkFpckNvZGUuaCIKLSNpbmNs
dWRlICJBaXJJbnNlcnRpb25TZXQuaCIKICNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkFpclBoYXNlU2NvcGUuaCIKIApAQCAtNzEsMzQgKzcwLDYgQEAgdm9pZCBoYW5kbGVD
YWxsZWVTYXZlcyhDb2RlJiBjb2RlKQogICAgIC8vIFRoaXMgaXMgYSBiaXQgd2VpcmQgc2luY2Ug
d2UgY291bGQgaGF2ZSBhbHJlYWR5IHBpbm5lZCBhIGRpZmZlcmVudCBzdGFjayBzbG90IHRvIHRo
aXMKICAgICAvLyBhcmVhLiBBbHNvLCBvdXIgcnVudGltZSBkb2VzIG5vdCByZXF1aXJlIHVzIHRv
IHBpbiB0aGUgc2F2ZXMgYXJlYS4gTWF5YmUgd2Ugc2hvdWxkbid0IHBpbiBpdD8KICAgICBzYXZl
c0FyZWEtPnNldE9mZnNldEZyb21GUCgtYnl0ZVNpemUpOwotCi0gICAgYXV0byBhcmdGb3IgPSBb
Jl0gKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5KSAtPiBBcmcgewotICAgICAgICByZXR1
cm4gQXJnOjpzdGFjayhzYXZlc0FyZWEsIGVudHJ5Lm9mZnNldCgpICsgYnl0ZVNpemUpOwotICAg
IH07Ci0KLSAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KGNvZGUpOwotICAgIAotICAgIC8v
IEZpcnN0IGluc2VydCBzYXZpbmcgY29kZSBpbiB0aGUgcHJvbG9ndWUuCi0gICAgZm9yIChjb25z
dCBSZWdpc3RlckF0T2Zmc2V0JiBlbnRyeSA6IGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVycygpKSB7
Ci0gICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoCi0gICAgICAgICAgICAwLCBlbnRyeS5yZWco
KS5pc0dQUigpID8gTW92ZSA6IE1vdmVEb3VibGUsIGNvZGVbMF0tPmF0KDApLm9yaWdpbiwKLSAg
ICAgICAgICAgIFRtcChlbnRyeS5yZWcoKSksIGFyZ0ZvcihlbnRyeSkpOwotICAgIH0KLSAgICBp
bnNlcnRpb25TZXQuZXhlY3V0ZShjb2RlWzBdKTsKLQotICAgIC8vIE5vdyBpbnNlcnQgcmVzdG9y
ZSBjb2RlIGF0IGVwaWxvZ3Vlcy4KLSAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkg
ewotICAgICAgICBJbnN0JiBsYXN0ID0gYmxvY2stPmxhc3QoKTsKLSAgICAgICAgaWYgKCFpc1Jl
dHVybihsYXN0Lm9wY29kZSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBmb3Ig
KGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5IDogY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJz
KCkpIHsKLSAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoCi0gICAgICAgICAgICAgICAg
YmxvY2stPnNpemUoKSAtIDEsIGVudHJ5LnJlZygpLmlzR1BSKCkgPyBNb3ZlIDogTW92ZURvdWJs
ZSwgbGFzdC5vcmlnaW4sCi0gICAgICAgICAgICAgICAgYXJnRm9yKGVudHJ5KSwgVG1wKGVudHJ5
LnJlZygpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2sp
OwotICAgIH0KIH0KIAogfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgJKHJldmlzaW9uIDE5NTE3NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjIsNiArMTYyLDcgQEAgcHVibGljOgogICAgIC8vCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBh
dXRvLWdlbmVyYXRlZCBieSBvcGNvZGVfZ2VuZXJhdG9yLnJiLgogICAgIGJvb2wgYWRtaXRzU3Rh
Y2sodW5zaWduZWQgYXJnSW5kZXgpOworICAgIGJvb2wgYWRtaXRzU3RhY2soQXJnJik7CiAKICAg
ICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBpbnN0cnVjdGlvbiBjYW4gaGF2ZSBhbnkgZWZmZWN0
cyBvdGhlciB0aGFuIGNvbnRyb2wgZmxvdyBvciBhcmd1bWVudHMuCiAgICAgYm9vbCBoYXNOb25B
cmdOb25Db250cm9sRWZmZWN0cygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJJbnN0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlySW5zdElubGluZXMuaAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgs
NiArMTU4LDExIEBAIGlubGluZSB2b2lkIEluc3Q6OnJlcG9ydFVzZWRSZWdpc3RlcnMoY28KICAg
ICBhcmdzWzBdLnNwZWNpYWwoKS0+cmVwb3J0VXNlZFJlZ2lzdGVycygqdGhpcywgdXNlZFJlZ2lz
dGVycyk7CiB9CiAKK2lubGluZSBib29sIEluc3Q6OmFkbWl0c1N0YWNrKEFyZyYgYXJnKQorewor
ICAgIHJldHVybiBhZG1pdHNTdGFjaygmYXJnIC0gJmFyZ3NbMF0pOworfQorCiBpbmxpbmUgYm9v
bCBpc1NoaWZ0VmFsaWQoY29uc3QgSW5zdCYgaW5zdCkKIHsKICNpZiBDUFUoWDg2KSB8fCBDUFUo
WDg2XzY0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJdGVyYXRlZFJl
Z2lzdGVyQ29hbGVzY2luZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHAJKHJldmlzaW9uIDE5NTE3
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySXRlcmF0ZWRSZWdpc3RlckNv
YWxlc2NpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBACiAjaWYgRU5BQkxF
KEIzX0pJVCkKIAogI2luY2x1ZGUgIkFpckNvZGUuaCIKLSNpbmNsdWRlICJBaXJGaXhTcGlsbFNs
b3RaRGVmLmgiCiAjaW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0LmgiCiAjaW5jbHVkZSAiQWlySW5z
dElubGluZXMuaCIKICNpbmNsdWRlICJBaXJMaXZlbmVzcy5oIgpAQCAtMTEyNCwxMSArMTEyMywx
MSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIGNvbXBsZXRlIHJlZ2lzdGVyIGFsbG9j
YXRpb24uIFNvLCB3ZSByZWNvcmQgdGhpcyBiZWZvcmUgc3RhcnRpbmcuCiAgICAgICAgICAgICAg
ICAgYm9vbCBtYXlCZUNvYWxlc2NhYmxlID0gYWxsb2NhdG9yLm1heUJlQ29hbGVzY2FibGUoaW5z
dCk7CiAKLSAgICAgICAgICAgICAgICAvLyBPbiBYODZfNjQsIE1vdmUzMiBpcyBjaGVhcGVyIGlm
IHdlIGtub3cgdGhhdCBpdCdzIGVxdWl2YWxlbnQgdG8gYSBNb3ZlLiBJdCdzCisgICAgICAgICAg
ICAgICAgLy8gTW92ZTMyIGlzIGNoZWFwZXIgaWYgd2Uga25vdyB0aGF0IGl0J3MgZXF1aXZhbGVu
dCB0byBhIE1vdmUuIEl0J3MKICAgICAgICAgICAgICAgICAvLyBlcXVpdmFsZW50IGlmIHRoZSBk
ZXN0aW5hdGlvbidzIGhpZ2ggYml0cyBhcmUgbm90IG9ic2VydmFibGUgb3IgaWYgdGhlIHNvdXJj
ZSdzIGhpZ2gKICAgICAgICAgICAgICAgICAvLyBiaXRzIGFyZSBhbGwgemVyby4gTm90ZSB0aGF0
IHdlIGRvbid0IGhhdmUgdGhlIG9wcG9zaXRlIG9wdGltaXphdGlvbiBmb3Igb3RoZXIKICAgICAg
ICAgICAgICAgICAvLyBhcmNoaXRlY3R1cmVzLCB3aGljaCBtYXkgcHJlZmVyIE1vdmUgb3ZlciBN
b3ZlMzIsIGJlY2F1c2UgTW92ZSBpcyBjYW5vbmljYWwgYWxyZWFkeS4KLSAgICAgICAgICAgICAg
ICBpZiAodHlwZSA9PSBBcmc6OkdQICYmIG9wdGltaXplRm9yWDg2XzY0KCkgJiYgaW5zdC5vcGNv
ZGUgPT0gTW92ZQorICAgICAgICAgICAgICAgIGlmICh0eXBlID09IEFyZzo6R1AgJiYgaW5zdC5v
cGNvZGUgPT0gTW92ZQogICAgICAgICAgICAgICAgICAgICAmJiBpbnN0LmFyZ3NbMF0uaXNUbXAo
KSAmJiBpbnN0LmFyZ3NbMV0uaXNUbXAoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAobV90
bXBXaWR0aC51c2VXaWR0aChpbnN0LmFyZ3NbMV0udG1wKCkpIDw9IEFyZzo6V2lkdGgzMgogICAg
ICAgICAgICAgICAgICAgICAgICAgfHwgbV90bXBXaWR0aC5kZWZXaWR0aChpbnN0LmFyZ3NbMF0u
dG1wKCkpIDw9IEFyZzo6V2lkdGgzMikKQEAgLTExNjgsNyArMTE2Nyw2IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBhZGRTcGlsbEFuZEZpbGwoY29uc3QgQ29sb3JpbmdBbGxvY2F0b3I8dHlwZT4mIGFs
bG9jYXRvciwgSGFzaFNldDx1bnNpZ25lZD4mIHVuc3BpbGxhYmxlVG1wcykKICAgICB7CiAgICAg
ICAgIEhhc2hNYXA8VG1wLCBTdGFja1Nsb3QqPiBzdGFja1Nsb3RzOwotICAgICAgICB1bnNpZ25l
ZCBuZXdTdGFja1Nsb3RUaHJlc2hvbGQgPSBtX2NvZGUuc3RhY2tTbG90cygpLnNpemUoKTsKICAg
ICAgICAgZm9yIChUbXAgdG1wIDogYWxsb2NhdG9yLnNwaWxsZWRUbXBzKCkpIHsKICAgICAgICAg
ICAgIC8vIEFsbCB0aGUgc3BpbGxlZCB2YWx1ZXMgYmVjb21lIHVuc3BpbGxhYmxlLgogICAgICAg
ICAgICAgdW5zcGlsbGFibGVUbXBzLmFkZChBYnNvbHV0ZVRtcE1hcHBlcjx0eXBlPjo6YWJzb2x1
dGVJbmRleCh0bXApKTsKQEAgLTEyMDIsMTYgKzEyMDAsMTkgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAvLyBUcnkgdG8gcmVwbGFjZSB0aGUgcmVnaXN0
ZXIgdXNlIGJ5IG1lbW9yeSB1c2Ugd2hlbiBwb3NzaWJsZS4KLSAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5zdC5hcmdzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIEFyZyYgYXJnID0gaW5zdC5hcmdzW2ldOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoYXJnLmlzVG1wKCkgJiYgYXJnLnR5cGUoKSA9PSB0eXBlICYmICFhcmcuaXNSZWcoKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBzdGFja1Nsb3RFbnRyeSA9IHN0YWNrU2xvdHMu
ZmluZChhcmcudG1wKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrU2xvdEVu
dHJ5ICE9IHN0YWNrU2xvdHMuZW5kKCkgJiYgaW5zdC5hZG1pdHNTdGFjayhpKSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IEFyZzo6c3RhY2soc3RhY2tTbG90RW50cnktPnZh
bHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWRTcGlsbCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgaW5zdC5mb3JFYWNoQXJnKAorICAgICAgICAgICAgICAgICAgICBbJl0gKEFy
ZyYgYXJnLCBBcmc6OlJvbGUsIEFyZzo6VHlwZSBhcmdUeXBlLCBBcmc6OldpZHRoIHdpZHRoKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJnLmlzVG1wKCkgJiYgYXJnVHlwZSA9PSB0
eXBlICYmICFhcmcuaXNSZWcoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8g
c3RhY2tTbG90RW50cnkgPSBzdGFja1Nsb3RzLmZpbmQoYXJnLnRtcCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoc3RhY2tTbG90RW50cnkgIT0gc3RhY2tTbG90cy5lbmQoKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBpbnN0LmFkbWl0c1N0YWNrKGFyZykp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tTbG90RW50cnktPnZhbHVl
LT5lbnN1cmVTaXplKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2VN
b3ZlMzJJZkRpZFNwaWxsID8gNCA6IEFyZzo6Ynl0ZXMod2lkdGgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXJnID0gQXJnOjpzdGFjayhzdGFja1Nsb3RFbnRyeS0+dmFsdWUp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWRTcGlsbCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB9KTsKIAogICAgICAgICAgICAgICAgIGlmIChkaWRTcGlsbCAmJiBmb3JjZU1vdmUzMklmRGlk
U3BpbGwpCiAgICAgICAgICAgICAgICAgICAgIGluc3Qub3Bjb2RlID0gTW92ZTMyOwpAQCAtMTI2
MiwxMiArMTI2Myw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KLQotICAgICAgICBmaXhTcGlsbFNsb3RaRGVmKAotICAgICAgICAgICAg
bV9jb2RlLAotICAgICAgICAgICAgWyZdIChTdGFja1Nsb3QqIHN0YWNrU2xvdCkgLT4gYm9vbCB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHN0YWNrU2xvdC0+aW5kZXgoKSA+PSBuZXdTdGFja1Ns
b3RUaHJlc2hvbGQ7Ci0gICAgICAgICAgICB9KTsKICAgICB9CiAKICAgICBDb2RlJiBtX2NvZGU7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCShyZXZp
c2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoQjNfSklUKQog
CiAjaW5jbHVkZSAiQWlyQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkFpckNvZGUuaCIKICNpbmNs
dWRlICJBaXJJbnN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkFpclRtcElubGluZXMuaCIKICNpbmNs
dWRlICJCM0luZGV4TWFwLmgiCkBAIC05Myw5ICs5NCwxMSBAQCBzdHJ1Y3QgUmVnTGl2ZW5lc3NB
ZGFwdGVyIHsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0ZXI+Ci1jbGFzcyBBYnN0cmFj
dExpdmVuZXNzIDogcHJpdmF0ZSBBZGFwdGVyIHsKK2NsYXNzIEFic3RyYWN0TGl2ZW5lc3MgOiBw
dWJsaWMgQWRhcHRlciB7CiAgICAgc3RydWN0IFdvcmtzZXQ7CiBwdWJsaWM6CisgICAgdHlwZWRl
ZiB0eXBlbmFtZSBBZGFwdGVyOjpUaGluZyBUaGluZzsKKyAgICAKICAgICBBYnN0cmFjdExpdmVu
ZXNzKENvZGUmIGNvZGUpCiAgICAgICAgIDogQWRhcHRlcihjb2RlKQogICAgICAgICAsIG1fd29y
a3NldChBZGFwdGVyOjptYXhJbmRleChjb2RlKSkKQEAgLTIyMiw2ICsyMjUsMTEgQEAgcHVibGlj
OgogCiAgICAgICAgICAgICBJdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIEl0ZXJhdG9y
KG1fbGl2ZW5lc3MsIG1fbGl2ZW5lc3MubV93b3Jrc2V0LmJlZ2luKCkpOyB9CiAgICAgICAgICAg
ICBJdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBJdGVyYXRvcihtX2xpdmVuZXNzLCBtX2xp
dmVuZXNzLm1fd29ya3NldC5lbmQoKSk7IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgYm9v
bCBjb250YWlucyhjb25zdCB0eXBlbmFtZSBBZGFwdGVyOjpUaGluZyYgdGhpbmcpIGNvbnN0Cisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fbGl2ZW5lc3MubV93b3Jrc2V0
LmNvbnRhaW5zKEFkYXB0ZXI6OnZhbHVlVG9JbmRleCh0aGluZykpOworICAgICAgICAgICAgfQog
CiAgICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICBBYnN0cmFjdExpdmVuZXNzJiBtX2xpdmVu
ZXNzOwpAQCAtMjMyLDYgKzI0MCwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gSXRl
cmFibGUobV9saXZlbmVzcyk7CiAgICAgICAgIH0KIAorICAgICAgICBib29sIGlzTGl2ZShjb25z
dCB0eXBlbmFtZSBBZGFwdGVyOjpUaGluZyYgdGhpbmcpIGNvbnN0CisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBsaXZlKCkuY29udGFpbnModGhpbmcpOworICAgICAgICB9CisKICAgICAg
ICAgdm9pZCBleGVjdXRlKHVuc2lnbmVkIGluc3RJbmRleCkKICAgICAgICAgewogICAgICAgICAg
ICAgSW5zdCYgaW5zdCA9IG1fYmxvY2stPmF0KGluc3RJbmRleCk7CkBAIC0yNzcsNiArMjkwLDEx
IEBAIHB1YmxpYzoKICAgICAgICAgQmFzaWNCbG9jayogbV9ibG9jazsKICAgICB9OwogCisgICAg
Y29uc3QgVmVjdG9yPHVuc2lnbmVkPiYgcmF3TGl2ZUF0SGVhZChCYXNpY0Jsb2NrKiBibG9jaykK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2xpdmVBdEhlYWRbYmxvY2tdOworICAgIH0KKwogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFVuZGVybHlpbmdJdGVyYWJsZT4KICAgICBjbGFzcyBJdGVyYWJs
ZSB7CiAgICAgcHVibGljOgpAQCAtMzMwLDYgKzM0OCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIGl0
ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9saXZlbmVzcywgbV9pdGVy
YWJsZS5iZWdpbigpKTsgfQogICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBp
dGVyYXRvcihtX2xpdmVuZXNzLCBtX2l0ZXJhYmxlLmVuZCgpKTsgfQogCisgICAgICAgIGJvb2wg
Y29udGFpbnMoY29uc3QgdHlwZW5hbWUgQWRhcHRlcjo6VGhpbmcmIHRoaW5nKSBjb25zdAorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9saXZlbmVzcy5tX3dvcmtzZXQuY29udGFpbnMo
QWRhcHRlcjo6dmFsdWVUb0luZGV4KHRoaW5nKSk7CisgICAgICAgIH0KKwogICAgIHByaXZhdGU6
CiAgICAgICAgIEFic3RyYWN0TGl2ZW5lc3MmIG1fbGl2ZW5lc3M7CiAgICAgICAgIGNvbnN0IFVu
ZGVybHlpbmdJdGVyYWJsZSYgbV9pdGVyYWJsZTsKQEAgLTM0NSw2ICszNjgsOCBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBJdGVyYWJsZTx0eXBlbmFtZSBBZGFwdGVyOjpJbmRleFNldD4oKnRo
aXMsIG1fbGl2ZUF0VGFpbFtibG9ja10pOwogICAgIH0KIAorICAgIEluZGV4U3BhcnNlU2V0PFVu
c2FmZVZlY3Rvck92ZXJmbG93PiYgd29ya3NldCgpIHsgcmV0dXJuIG1fd29ya3NldDsgfQorCiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMb2NhbENhbGM7CiAgICAgZnJpZW5kIHN0cnVjdCBM
b2NhbENhbGM6Okl0ZXJhYmxlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJMb2dSZWdpc3RlclByZXNzdXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckxvZ1JlZ2lzdGVyUHJlc3N1cmUuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb2dSZWdpc3RlclByZXNzdXJlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJM
b2dSZWdpc3RlclByZXNzdXJlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
QWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisjaW5jbHVkZSAiQWlyTGl2
ZW5lc3MuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIg
eworCit2b2lkIGxvZ1JlZ2lzdGVyUHJlc3N1cmUoQ29kZSYgY29kZSkKK3sKKyAgICBjb25zdCB1
bnNpZ25lZCB0b3RhbENvbHVtbnMgPSAyMDA7CisgICAgY29uc3QgdW5zaWduZWQgcmVnaXN0ZXJD
b2x1bW5zID0gMTAwOworICAgIAorICAgIFJlZ0xpdmVuZXNzIGxpdmVuZXNzKGNvZGUpOworCisg
ICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgUmVnTGl2ZW5lc3M6
OkxvY2FsQ2FsYyBsb2NhbENhbGMobGl2ZW5lc3MsIGJsb2NrKTsKKworICAgICAgICBibG9jay0+
ZHVtcEhlYWRlcihXVEY6OmRhdGFGaWxlKCkpOworCisgICAgICAgIFZlY3RvcjxDU3RyaW5nPiBp
bnN0RHVtcHM7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gYmxvY2stPnNpemUo
KTsgaW5zdEluZGV4LS07KSB7CisgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGlu
c3RJbmRleCk7CisgICAgICAgICAgICBJbnN0KiBwcmV2SW5zdCA9IGJsb2NrLT5nZXQoaW5zdElu
ZGV4IC0gMSk7CisKKyAgICAgICAgICAgIGxvY2FsQ2FsYy5leGVjdXRlKGluc3RJbmRleCk7CisK
KyAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHNldDsKKyAgICAgICAgICAgIHNldC5zZXRBbGwobG9j
YWxDYWxjLmxpdmUoKSk7CisgICAgICAgICAgICBJbnN0Ojpmb3JFYWNoRGVmV2l0aEV4dHJhQ2xv
YmJlcmVkUmVnczxSZWc+KAorICAgICAgICAgICAgICAgIHByZXZJbnN0LCAmaW5zdCwKKyAgICAg
ICAgICAgICAgICBbJl0gKFJlZyByZWcsIEFyZzo6Um9sZSwgQXJnOjpUeXBlLCBBcmc6OldpZHRo
KSB7CisgICAgICAgICAgICAgICAgICAgIHNldC5zZXQocmVnKTsKKyAgICAgICAgICAgICAgICB9
KTsKKworICAgICAgICAgICAgU3RyaW5nUHJpbnRTdHJlYW0gaW5zdE91dDsKKyAgICAgICAgICAg
IFN0cmluZ1ByaW50U3RyZWFtIGxpbmVPdXQ7CisgICAgICAgICAgICBsaW5lT3V0LnByaW50KCIg
ICAiKTsKKyAgICAgICAgICAgIGlmIChzZXQubnVtYmVyT2ZTZXRSZWdpc3RlcnMoKSkgeworICAg
ICAgICAgICAgICAgIHNldC5mb3JFYWNoKAorICAgICAgICAgICAgICAgICAgICBbJl0gKFJlZyBy
ZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIENTdHJpbmcgdGV4dCA9IHRvQ1N0cmluZygi
ICIsIHJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4dC5sZW5ndGgoKSArIGxp
bmVPdXQubGVuZ3RoKCkgPiB0b3RhbENvbHVtbnMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnN0T3V0LnByaW50KGxpbmVPdXQudG9DU3RyaW5nKCksICJcbiIpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxpbmVPdXQucmVzZXQoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsaW5lT3V0LnByaW50KCIgICAgICAgIik7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lT3V0LnByaW50KHRleHQpOworICAgICAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBsaW5lT3V0LnByaW50KCI6Iik7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobGluZU91dC5sZW5ndGgoKSA+IHJlZ2lzdGVy
Q29sdW1ucykgeworICAgICAgICAgICAgICAgIGluc3RPdXQucHJpbnQobGluZU91dC50b0NTdHJp
bmcoKSwgIlxuIik7CisgICAgICAgICAgICAgICAgbGluZU91dC5yZXNldCgpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgd2hpbGUgKGxpbmVPdXQubGVuZ3RoKCkgPCByZWdpc3RlckNvbHVt
bnMpCisgICAgICAgICAgICAgICAgbGluZU91dC5wcmludCgiICIpOworICAgICAgICAgICAgbGlu
ZU91dC5wcmludCgiICIpOworICAgICAgICAgICAgbGluZU91dC5wcmludChpbnN0KTsKKyAgICAg
ICAgICAgIGluc3RPdXQucHJpbnQobGluZU91dC50b0NTdHJpbmcoKSwgIlxuIik7CisgICAgICAg
ICAgICBpbnN0RHVtcHMuYXBwZW5kKGluc3RPdXQudG9DU3RyaW5nKCkpOworICAgICAgICB9CisK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gaW5zdER1bXBzLnNpemUoKTsgaS0tOykKKyAgICAg
ICAgICAgIGRhdGFMb2coaW5zdER1bXBzW2ldKTsKKyAgICAgICAgCisgICAgICAgIGJsb2NrLT5k
dW1wRm9vdGVyKFdURjo6ZGF0YUZpbGUoKSk7CisgICAgfQorfQorCit9IH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxvZ1JlZ2lzdGVyUHJlc3N1cmUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxvZ1JlZ2lzdGVyUHJlc3N1
cmUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG9n
UmVnaXN0ZXJQcmVzc3VyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEFpckxvZ1Jl
Z2lzdGVyUHJlc3N1cmVfaAorI2RlZmluZSBBaXJMb2dSZWdpc3RlclByZXNzdXJlX2gKKworI2lm
IEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3Bh
Y2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKworLy8gRHVtcHMgdGhlIHJlZ2lzdGVycyB0aGF0IGFy
ZSB1c2VkIGF0IGVhY2ggaW5zdHJ1Y3Rpb24uCit2b2lkIGxvZ1JlZ2lzdGVyUHJlc3N1cmUoQ29k
ZSYpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyTG9nUmVnaXN0ZXJQcmVzc3VyZV9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3B0aW1pemVCbG9ja09yZGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wdGltaXplQmxv
Y2tPcmRlci5jcHAJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyT3B0aW1pemVCbG9ja09yZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MywxMCArNzMs
OCBAQCBwcml2YXRlOgogCiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UKIAotdm9pZCBvcHRpbWl6
ZUJsb2NrT3JkZXIoQ29kZSYgY29kZSkKK1ZlY3RvcjxCYXNpY0Jsb2NrKj4gYmxvY2tzSW5PcHRp
bWl6ZWRPcmRlcihDb2RlJiBjb2RlKQogewotICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2Rl
LCAib3B0aW1pemVCbG9ja09yZGVyIik7Ci0KICAgICBWZWN0b3I8QmFzaWNCbG9jayo+IGJsb2Nr
c0luT3JkZXI7CiAKICAgICBCbG9ja1dvcmtsaXN0IGZhc3RXb3JrbGlzdDsKQEAgLTExMyw2ICsx
MTEsMTUgQEAgdm9pZCBvcHRpbWl6ZUJsb2NrT3JkZXIoQ29kZSYgY29kZSkKICAgICBBU1NFUlQo
ZmFzdFdvcmtsaXN0LmlzRW1wdHkoKSk7CiAgICAgQVNTRVJUKHNsb3dXb3JrbGlzdC5pc0VtcHR5
KCkpOwogCisgICAgcmV0dXJuIGJsb2Nrc0luT3JkZXI7Cit9CisKK3ZvaWQgb3B0aW1pemVCbG9j
a09yZGVyKENvZGUmIGNvZGUpCit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJv
cHRpbWl6ZUJsb2NrT3JkZXIiKTsKKworICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gYmxvY2tzSW5P
cmRlciA9IGJsb2Nrc0luT3B0aW1pemVkT3JkZXIoY29kZSk7CisgICAgCiAgICAgLy8gUGxhY2Ug
YmxvY2tzIGludG8gQ29kZSdzIGJsb2NrIGxpc3QgYWNjb3JkaW5nIHRvIHRoZSBvcmRlcmluZyBp
biBibG9ja3NJbk9yZGVyLiBXZSBkbyB0aGlzIGJ5IGxlYWtpbmcKICAgICAvLyBhbGwgb2YgdGhl
IGJsb2NrcyBhbmQgdGhlbiByZWFkb3B0aW5nIHRoZW0uCiAgICAgZm9yIChhdXRvJiBlbnRyeSA6
IGNvZGUuYmxvY2tMaXN0KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ck9wdGltaXplQmxvY2tPcmRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyT3B0aW1pemVCbG9ja09yZGVyLmgJKHJldmlzaW9uIDE5NTE3NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3B0aW1pemVCbG9ja09yZGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjgsMTAgKzI4LDE4IEBACiAKICNpZiBFTkFCTEUoQjNfSklUKQogCisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNw
YWNlIEFpciB7CiAKK2NsYXNzIEJhc2ljQmxvY2s7CiBjbGFzcyBDb2RlOwogCisvLyBSZXR1cm5z
IGEgbGlzdCBvZiBibG9ja3Mgc29ydGVkIGFjY29yZGluZyB0byB3aGF0IHdvdWxkIGJlIHRoZSBj
dXJyZW50IG9wdGltYWwgb3JkZXIuIFRoaXMgc2hhcmVzCisvLyBzb21lIHByb3BlcnRpZXMgd2l0
aCBhIHByZS1vcmRlciB0cmF2ZXJzYWwuIEluIHBhcnRpY3VsYXIsIGVhY2ggYmxvY2sgd2lsbCBh
cHBlYXIgYWZ0ZXIgYXQgbGVhc3QKKy8vIG9uZSBvZiBpdHMgcHJlZGVjZXNzb3JzLgorVmVjdG9y
PEJhc2ljQmxvY2sqPiBibG9ja3NJbk9wdGltaXplZE9yZGVyKENvZGUmKTsKKwogLy8gUmVvcmRl
cnMgdGhlIGJhc2ljIGJsb2NrcyB0byBrZWVwIGhvdCBibG9ja3MgYXQgdGhlIHRvcCwgYW5kIG1h
eGltaXplIHRoZSBsaWtlbGlob29kIHRoYXQgYSBmcmVxdWVudGx5CiAvLyB0YWtlbiBlZGdlIGlz
IGp1c3QgYSBmYWxsLXRocm91Z2guCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyUmVwb3J0VXNlZFJlZ2lzdGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJSZXBvcnRVc2VkUmVnaXN0ZXJzLmNwcAkocmV2aXNpb24gMTk1
MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZXBvcnRVc2VkUmVnaXN0
ZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsMzIgQEAgdm9pZCByZXBvcnRVc2Vk
UmVnaXN0ZXJzKENvZGUmIGNvZGUpCiAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXgg
PSBibG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTspIHsKICAgICAgICAgICAgIEluc3QmIGluc3Qg
PSBibG9jay0+YXQoaW5zdEluZGV4KTsKKworICAgICAgICAgICAgLy8gS2lsbCBkZWFkIGFzc2ln
bm1lbnRzIHRvIHJlZ2lzdGVycy4gRm9yIHNpbXBsaWNpdHkgd2Ugc2F5IHRoYXQgYSBzdG9yZSBp
cyBraWxsYWJsZSBpZgorICAgICAgICAgICAgLy8gaXQgaGFzIG9ubHkgbGF0ZSBkZWZzIGFuZCB0
aG9zZSBsYXRlIGRlZnMgYXJlIHRvIHJlZ2lzdGVycyB0aGF0IGFyZSBkZWFkIHJpZ2h0IG5vdy4K
KyAgICAgICAgICAgIGlmICghaW5zdC5oYXNOb25BcmdFZmZlY3RzKCkpIHsKKyAgICAgICAgICAg
ICAgICBib29sIGNhbkRlbGV0ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgaW5zdC5mb3JFYWNo
QXJnKAorICAgICAgICAgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwg
QXJnOjpUeXBlLCBBcmc6OldpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJn
Ojppc0Vhcmx5RGVmKHJvbGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuRGVs
ZXRlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcmc6Omlz
TGF0ZURlZihyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZy5pc1JlZygpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2FuRGVsZXRlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGxvY2FsQ2FsYy5pc0xpdmUoYXJnLnJlZygpKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhbkRlbGV0ZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICAgICAgaWYgKGNhbkRlbGV0ZSkKKyAgICAgICAgICAgICAgICAg
ICAgaW5zdCA9IEluc3QoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICAg
ICAgaWYgKGluc3Qub3Bjb2RlID09IFBhdGNoKSB7CiAgICAgICAgICAgICAgICAgUmVnaXN0ZXJT
ZXQgcmVnaXN0ZXJTZXQ7CiAgICAgICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogbG9jYWxDYWxj
LmxpdmUoKSkKQEAgLTU0LDYgKzgwLDExIEBAIHZvaWQgcmVwb3J0VXNlZFJlZ2lzdGVycyhDb2Rl
JiBjb2RlKQogICAgICAgICAgICAgfQogICAgICAgICAgICAgbG9jYWxDYWxjLmV4ZWN1dGUoaW5z
dEluZGV4KTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYmxvY2stPmluc3RzKCkucmVt
b3ZlQWxsTWF0Y2hpbmcoCisgICAgICAgICAgICBbJl0gKGNvbnN0IEluc3QmIGluc3QpIC0+IGJv
b2wgeworICAgICAgICAgICAgICAgIHJldHVybiAhaW5zdDsKKyAgICAgICAgICAgIH0pOwogICAg
IH0KIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZXBvcnRVc2Vk
UmVnaXN0ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJSZXBvcnRVc2VkUmVnaXN0ZXJzLmgJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyUmVwb3J0VXNlZFJlZ2lzdGVycy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTMyLDcgKzMyLDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZQog
CiBjbGFzcyBDb2RlOwogCi0vLyBQZXJmb3JtcyBhIGxpdmVuZXNzIGFuYWx5c2lzIG92ZXIgcmVn
aXN0ZXJzIGFuZCByZXBvcnRzIHRoZSBsaXZlIHJlZ2lzdGVycyB0byBldmVyeSBTcGVjaWFsLgor
Ly8gUGVyZm9ybXMgYSBsaXZlbmVzcyBhbmFseXNpcyBvdmVyIHJlZ2lzdGVycyBhbmQgcmVwb3J0
cyB0aGUgbGl2ZSByZWdpc3RlcnMgdG8gZXZlcnkgU3BlY2lhbC4gVGFrZXMKKy8vIHRoZSBvcHBv
cnR1bml0eSB0byBraWxsIGRlYWQgYXNzaWdubWVudHMgdG8gcmVnaXN0ZXJzLCBzaW5jZSBpdCBo
YXMgYWNjZXNzIHRvIHJlZ2lzdGVyIGxpdmVuZXNzLgogCiB2b2lkIHJlcG9ydFVzZWRSZWdpc3Rl
cnMoQ29kZSYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxs
RXZlcnl0aGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI5LDcgKzI5LDYgQEAKICNpZiBFTkFCTEUoQjNfSklUKQogCiAjaW5jbHVkZSAiQWlyQ29k
ZS5oIgotI2luY2x1ZGUgIkFpckZpeFNwaWxsU2xvdFpEZWYuaCIKICNpbmNsdWRlICJBaXJJbnNl
cnRpb25TZXQuaCIKICNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkFpckxp
dmVuZXNzLmgiCkBAIC04NCw3ICs4Myw2IEBAIHZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUmIGNv
ZGUpCiAKICAgICAvLyBBbGxvY2F0ZSBhIHN0YWNrIHNsb3QgZm9yIGVhY2ggdG1wLgogICAgIFZl
Y3RvcjxTdGFja1Nsb3QqPiBhbGxTdGFja1Nsb3RzW0FyZzo6bnVtVHlwZXNdOwotICAgIHVuc2ln
bmVkIG5ld1N0YWNrU2xvdFRocmVzaG9sZCA9IGNvZGUuc3RhY2tTbG90cygpLnNpemUoKTsKICAg
ICBmb3IgKHVuc2lnbmVkIHR5cGVJbmRleCA9IDA7IHR5cGVJbmRleCA8IEFyZzo6bnVtVHlwZXM7
ICsrdHlwZUluZGV4KSB7CiAgICAgICAgIFZlY3RvcjxTdGFja1Nsb3QqPiYgc3RhY2tTbG90cyA9
IGFsbFN0YWNrU2xvdHNbdHlwZUluZGV4XTsKICAgICAgICAgQXJnOjpUeXBlIHR5cGUgPSBzdGF0
aWNfY2FzdDxBcmc6OlR5cGU+KHR5cGVJbmRleCk7CkBAIC0xMzAsNyArMTI4LDYgQEAgdm9pZCBz
cGlsbEV2ZXJ5dGhpbmcoQ29kZSYgY29kZSkKICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChy
b2xlKSB7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpVc2U6CiAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgQXJnOjpDb2xkVXNlOgotICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6
RWFybHlEZWY6CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiByZWdzSW5Q
cmlvcml0eU9yZGVyKHR5cGUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFz
ZXRCZWZvcmUuZ2V0KHJlZykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0
QmVmb3JlLnNldChyZWcpOwpAQCAtMTU0LDYgKzE1MSw3IEBAIHZvaWQgc3BpbGxFdmVyeXRoaW5n
KENvZGUmIGNvZGUpCiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpMYXRlVXNlOgogICAg
ICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6TGF0ZUNvbGRVc2U6CiAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgQXJnOjpTY3JhdGNoOgorICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6RWFy
bHlEZWY6CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiByZWdzSW5Qcmlv
cml0eU9yZGVyKHR5cGUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZXRC
ZWZvcmUuZ2V0KHJlZykgJiYgIXNldEFmdGVyLmdldChyZWcpKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNldEFmdGVyLnNldChyZWcpOwpAQCAtMTgyLDEyICsxODAsNiBAQCB2
b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJiBjb2RlKQogICAgICAgICB9CiAgICAgICAgIGluc2Vy
dGlvblNldC5leGVjdXRlKGJsb2NrKTsKICAgICB9Ci0KLSAgICBmaXhTcGlsbFNsb3RaRGVmKAot
ICAgICAgICBjb2RlLAotICAgICAgICBbJl0gKFN0YWNrU2xvdCogc3RhY2tTbG90KSAtPiBib29s
IHsKLSAgICAgICAgICAgIHJldHVybiBzdGFja1Nsb3QtPmluZGV4KCkgPj0gbmV3U3RhY2tTbG90
VGhyZXNob2xkOwotICAgICAgICB9KTsKIH0KIAogfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6
OkFpcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdC5o
CShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0
YWNrU2xvdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCwxMiBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBpc0xvY2tlZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCA9PSBTdGFja1Nsb3RLaW5kOjpM
b2NrZWQ7IH0KICAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0K
IAorICAgIHZvaWQgZW5zdXJlU2l6ZSh1bnNpZ25lZCByZXF1ZXN0ZWRTaXplKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKCFtX29mZnNldEZyb21GUCk7CisgICAgICAgIG1fYnl0ZVNpemUgPSBzdGQ6
Om1heChtX2J5dGVTaXplLCByZXF1ZXN0ZWRTaXplKTsKKyAgICB9CisKICAgICB1bnNpZ25lZCBh
bGlnbm1lbnQoKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKGJ5dGVTaXplKCkgPD0gMSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVmFsaWRhdGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVmFsaWRhdGUuY3BwCShyZXZp
c2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZhbGlkYXRl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsNiArODIsMTMgQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgICAgICBWQUxJREFURShpc1Rlcm1pbmFsKGluc3Qub3Bjb2RlKSwgKCJBdCAiLCBpbnN0
LCAiIGluICIsICpibG9jaykpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg
ICAgICAgVkFMSURBVEUoIWlzVGVybWluYWwoaW5zdC5vcGNvZGUpLCAoIkF0ICIsIGluc3QsICIg
aW4gIiwgKmJsb2NrKSk7CisKKyAgICAgICAgICAgICAgICAvLyBmb3JFYWNoQXJnIG11c3QgcmV0
dXJuIEFyZyYncyB0aGF0IHBvaW50IGludG8gdGhlIGFyZ3MgYXJyYXkuCisgICAgICAgICAgICAg
ICAgaW5zdC5mb3JFYWNoQXJnKAorICAgICAgICAgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBB
cmc6OlJvbGUsIEFyZzo6VHlwZSwgQXJnOjpXaWR0aCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgVkFMSURBVEUoJmFyZyA+PSAmaW5zdC5hcmdzWzBdLCAoIkF0ICIsIGFyZywgIiBpbiAiLCBp
bnN0LCAiIGluICIsICpibG9jaykpOworICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUo
JmFyZyA8PSAmaW5zdC5hcmdzLmxhc3QoKSwgKCJBdCAiLCBhcmcsICIgaW4gIiwgaW5zdCwgIiBp
biAiLCAqYmxvY2spKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JC
bG9ja3MoKSkKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWxpZEJsb2Nrcy5jb250YWlucyhz
dWNjZXNzb3IpLCAoIkluICIsICpibG9jaykpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExCM0NvbXBpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQjNDb21waWxlLmNwcAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExCM0NvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsy
OCw3IEBACiAKICNpZiBFTkFCTEUoRlRMX0pJVCkgJiYgRlRMX1VTRVNfQjMKIAorI2luY2x1ZGUg
IkFpckNvZGUuaCIKICNpbmNsdWRlICJCM0dlbmVyYXRlLmgiCiAjaW5jbHVkZSAiQjNQcm9jZWR1
cmVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNTdGFja1Nsb3RWYWx1ZS5oIgpAQCAtNTcsNyArNTgs
NyBAQCB2b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRlLCBTYWZlcG9pbnQ6OlJlCiAgICAgR3JhcGgm
IGdyYXBoID0gc3RhdGUuZ3JhcGg7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBncmFwaC5t
X2NvZGVCbG9jazsKICAgICBWTSYgdm0gPSBncmFwaC5tX3ZtOwotICAgIAorCiAgICAgewogICAg
ICAgICBHcmFwaFNhZmVwb2ludCBzYWZlcG9pbnQoc3RhdGUuZ3JhcGgsIHNhZmVwb2ludFJlc3Vs
dCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0xMVk0uY3BwCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg1OCw4ICsxODU4LDgg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgbV9vdXQubm90WmVybzMyKHJlc3VsdCks
IHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFyZWx5KHNsb3dDYXNlKSk7CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRU
byhzbG93Q2FzZSwgY29udGludWF0aW9uKTsKLSAgICAgICAgICAgICAgICBMVmFsdWUgY29uZCA9
IG1fb3V0LmJpdE9yKG1fb3V0Lmxlc3NUaGFuKGxlZnQsIG1fb3V0LmludDMyWmVybyksIG1fb3V0
Lmxlc3NUaGFuKHJpZ2h0LCBtX291dC5pbnQzMlplcm8pKTsKLSAgICAgICAgICAgICAgICBzcGVj
dWxhdGUoTmVnYXRpdmVaZXJvLCBub1ZhbHVlKCksIDAsIGNvbmQpOworICAgICAgICAgICAgICAg
IHNwZWN1bGF0ZShOZWdhdGl2ZVplcm8sIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQubGVzc1Ro
YW4obGVmdCwgbV9vdXQuaW50MzJaZXJvKSk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKE5l
Z2F0aXZlWmVybywgbm9WYWx1ZSgpLCBudWxscHRyLCBtX291dC5sZXNzVGhhbihyaWdodCwgbV9v
dXQuaW50MzJaZXJvKSk7CiAgICAgICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OwogICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQp
OwogICAgICAgICAgICAgfQpAQCAtMTg5MCw4ICsxODkwLDggQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAgICAgbV9vdXQubm90WmVybzY0KHJlc3VsdCksIHVzdWFsbHkoY29udGludWF0aW9u
KSwgcmFyZWx5KHNsb3dDYXNlKSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
TEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0
aW9uKTsKLSAgICAgICAgICAgICAgICBMVmFsdWUgY29uZCA9IG1fb3V0LmJpdE9yKG1fb3V0Lmxl
c3NUaGFuKGxlZnQsIG1fb3V0LmludDY0WmVybyksIG1fb3V0Lmxlc3NUaGFuKHJpZ2h0LCBtX291
dC5pbnQ2NFplcm8pKTsKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGUoTmVnYXRpdmVaZXJvLCBu
b1ZhbHVlKCksIDAsIGNvbmQpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShOZWdhdGl2ZVpl
cm8sIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQubGVzc1RoYW4obGVmdCwgbV9vdXQuaW50NjRa
ZXJvKSk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKE5lZ2F0aXZlWmVybywgbm9WYWx1ZSgp
LCBudWxscHRyLCBtX291dC5sZXNzVGhhbihyaWdodCwgbV9vdXQuaW50NjRaZXJvKSk7CiAgICAg
ICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAgICAgICAgIG1f
b3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwogICAgICAgICAgICAgfQpAQCAt
MTk1Nyw4ICsxOTU3LDggQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8odW5zYWZlRGVub21pbmF0b3IsIGNvbnRpbnVhdGlv
bik7CiAgICAgICAgICAgICAgICAgTFZhbHVlIG5lZzJUb1RoZTMxID0gbV9vdXQuY29uc3RJbnQz
MigtMjE0NzQ4MzY0Ny0xKTsKLSAgICAgICAgICAgICAgICBMVmFsdWUgY29uZCA9IG1fb3V0LmJp
dE9yKG1fb3V0LmlzWmVybzMyKGRlbm9taW5hdG9yKSwgbV9vdXQuZXF1YWwobnVtZXJhdG9yLCBu
ZWcyVG9UaGUzMSkpOwotICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShPdmVyZmxvdywgbm9WYWx1
ZSgpLCAwLCBjb25kKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIG5vVmFs
dWUoKSwgbnVsbHB0ciwgbV9vdXQuaXNaZXJvMzIoZGVub21pbmF0b3IpKTsKKyAgICAgICAgICAg
ICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQuZXF1YWwo
bnVtZXJhdG9yLCBuZWcyVG9UaGUzMSkpOwogICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKIAogICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlv
biwgbGFzdE5leHQpOwpAQCAtMjAxMyw4ICsyMDEzLDggQEAgcHJpdmF0ZToKIAogICAgICAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8odW5zYWZlRGVub21p
bmF0b3IsIGNvbnRpbnVhdGlvbik7CiAgICAgICAgICAgICAgICAgTFZhbHVlIG5lZzJUb1RoZTMx
ID0gbV9vdXQuY29uc3RJbnQzMigtMjE0NzQ4MzY0Ny0xKTsKLSAgICAgICAgICAgICAgICBMVmFs
dWUgY29uZCA9IG1fb3V0LmJpdE9yKG1fb3V0LmlzWmVybzMyKGRlbm9taW5hdG9yKSwgbV9vdXQu
ZXF1YWwobnVtZXJhdG9yLCBuZWcyVG9UaGUzMSkpOwotICAgICAgICAgICAgICAgIHNwZWN1bGF0
ZShPdmVyZmxvdywgbm9WYWx1ZSgpLCAwLCBjb25kKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxh
dGUoT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQuaXNaZXJvMzIoZGVub21pbmF0
b3IpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVs
bHB0ciwgbV9vdXQuZXF1YWwobnVtZXJhdG9yLCBuZWcyVG9UaGUzMSkpOwogICAgICAgICAgICAg
ICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAogICAgICAgICAgICAgICAgIG1fb3V0LmFw
cGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZWdpc3RlclNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVnaXN0ZXJTZXQuaAkocmV2aXNpb24gMTk1MTc2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MSw2ICs5MSwxMyBA
QCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVCghIXJlZyk7CiAgICAgICAgIHJldHVybiBtX3ZlY3Rv
ci5nZXQocmVnLmluZGV4KCkpOwogICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJh
YmxlPgorICAgIHZvaWQgc2V0QWxsKGNvbnN0IEl0ZXJhYmxlJiBpdGVyYWJsZSkKKyAgICB7Cisg
ICAgICAgIGZvciAoUmVnIHJlZyA6IGl0ZXJhYmxlKQorICAgICAgICAgICAgc2V0KHJlZyk7Cisg
ICAgfQogICAgIAogICAgIHZvaWQgbWVyZ2UoY29uc3QgUmVnaXN0ZXJTZXQmIG90aGVyKSB7IG1f
dmVjdG9yLm1lcmdlKG90aGVyLm1fdmVjdG9yKTsgfQogICAgIHZvaWQgZmlsdGVyKGNvbnN0IFJl
Z2lzdGVyU2V0JiBvdGhlcikgeyBtX3ZlY3Rvci5maWx0ZXIob3RoZXIubV92ZWN0b3IpOyB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAxOTUx
NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM0Myw2ICszNDMsNyBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmlu
ZzsKICAgICB2KGJvb2wsIGxvZ0IzUGhhc2VUaW1lcywgZmFsc2UsIG51bGxwdHIpIFwKICAgICB2
KGRvdWJsZSwgcmFyZUJsb2NrUGVuYWx0eSwgMC4wMDEsIG51bGxwdHIpIFwKICAgICB2KGJvb2ws
IGFpclNwaWxsc0V2ZXJ5dGhpbmcsIGZhbHNlLCBudWxscHRyKSBcCisgICAgdihib29sLCBsb2dB
aXJSZWdpc3RlclByZXNzdXJlLCBmYWxzZSwgbnVsbHB0cikgXAogICAgIFwKICAgICB2KGJvb2ws
IHVzZURvbGxhclZNLCBmYWxzZSwgImluc3RhbGxzIHRoZSAkdm0gZGVidWdnaW5nIHRvb2wgaW4g
Z2xvYmFsIG9iamVjdHMiKSBcCiAgICAgdihvcHRpb25TdHJpbmcsIGZ1bmN0aW9uT3ZlcnJpZGVz
LCBudWxscHRyLCAiZmlsZSB3aXRoIGRlYnVnZ2luZyBvdmVycmlkZXMgZm9yIGZ1bmN0aW9uIGJv
ZGllcyIpIFwKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTUxNzYpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE2LTAxLTE3ICBGaWxpcCBQaXps
byAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgRlRMIEIzIHNob3VsZCBiZSBqdXN0IGFz
IGZhc3QgYXMgRlRMIExMVk0gb24gT2N0YW5lL2NyeXB0bworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUzMTEzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvSW5kZXhTcGFyc2VTZXQuaDoKKyAgICAg
ICAgKFdURjo6SW5kZXhTcGFyc2VTZXQ8T3ZlcmZsb3dIYW5kbGVyPjo6SW5kZXhTcGFyc2VTZXQp
OgorICAgICAgICAoV1RGOjpJbmRleFNwYXJzZVNldDxPdmVyZmxvd0hhbmRsZXI+OjphZGQpOgor
ICAgICAgICAoV1RGOjpJbmRleFNwYXJzZVNldDxPdmVyZmxvd0hhbmRsZXI+OjpyZW1vdmUpOgor
ICAgICAgICAqIHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oOgorICAgICAgICAoV1RGOjpTdHJpbmdQ
cmludFN0cmVhbTo6bGVuZ3RoKToKKwogMjAxNi0wMS0xNSAgU2ltb24gRnJhc2VyICA8c2ltb24u
ZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQga2RlYnVnX3RyYWNlIHNpZ25wb3N0cyBm
b3IgYSBmZXcgV2ViQ29yZSBvcGVyYXRpb25zCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9DaGVja2Vk
QXJpdGhtZXRpYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NoZWNrZWRBcml0aG1l
dGljLmgJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9XVEYvd3RmL0NoZWNrZWRBcml0aG1l
dGljLmgJKHdvcmtpbmcgY29weSkKQEAgLTgwNiw2ICs4MDYsMzAgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUuLi4gQXJncz4gYgogICAgIHJldHVybiBjaGVja2VkU3VtPFQ+KGFyZ3Mu
Li4pLmhhc092ZXJmbG93ZWQoKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VT4gYm9vbCBkaWZmZXJlbmNlT3ZlcmZsb3dzKFUgbGVmdCwgVSByaWdodCkKK3sKKyAgICByZXR1
cm4gKENoZWNrZWQ8VCwgUmVjb3JkT3ZlcmZsb3c+KGxlZnQpIC0gQ2hlY2tlZDxULCBSZWNvcmRP
dmVyZmxvdz4ocmlnaHQpKS5oYXNPdmVyZmxvd2VkKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFU+CitDaGVja2VkPFQsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkUHJvZHVj
dChVIHZhbHVlKQoreworICAgIHJldHVybiBDaGVja2VkPFQsIFJlY29yZE92ZXJmbG93Pih2YWx1
ZSk7Cit9Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZS4uLiBBcmdz
PgorQ2hlY2tlZDxULCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZFByb2R1Y3QoVSB2YWx1ZSwgQXJn
cy4uLiBhcmdzKQoreworICAgIHJldHVybiBDaGVja2VkPFQsIFJlY29yZE92ZXJmbG93Pih2YWx1
ZSkgKiBjaGVja2VkU3VtPFQ+KGFyZ3MuLi4pOworfQorCisvLyBTb21ldGltZXMsIHlvdSBqdXN0
IHdhbnQgdG8gY2hlY2sgaWYgc29tZSBtYXRoIHdvdWxkIG92ZXJmbG93IC0gdGhlIGNvZGUgdG8g
ZG8gdGhlIG1hdGggaXMKKy8vIGFscmVhZHkgaW4gcGxhY2UsIGFuZCB5b3Ugd2FudCB0byBndWFy
ZCBpdC4KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJncz4gYm9vbCBwcm9k
dWN0T3ZlcmZsb3dzKEFyZ3MuLi4gYXJncykKK3sKKyAgICByZXR1cm4gY2hlY2tlZFByb2R1Y3Q8
VD4oYXJncy4uLikuaGFzT3ZlcmZsb3dlZCgpOworfQorCiB9CiAKIHVzaW5nIFdURjo6Q2hlY2tl
ZDsKQEAgLTgyMSw2ICs4NDUsOCBAQCB1c2luZyBXVEY6OkNoZWNrZWRJbnQ2NDsKIHVzaW5nIFdU
Rjo6Q2hlY2tlZFVpbnQ2NDsKIHVzaW5nIFdURjo6Q2hlY2tlZFNpemU7CiB1c2luZyBXVEY6OmNo
ZWNrZWRTdW07Cit1c2luZyBXVEY6OmRpZmZlcmVuY2VPdmVyZmxvd3M7Cit1c2luZyBXVEY6OnBy
b2R1Y3RPdmVyZmxvd3M7CiB1c2luZyBXVEY6OnN1bU92ZXJmbG93czsKIAogI2VuZGlmCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9JbmRleFNwYXJzZVNldC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0luZGV4U3BhcnNlU2V0LmgJKHJldmlzaW9uIDE5NTE3NikKKysrIFNvdXJjZS9XVEYv
d3RmL0luZGV4U3BhcnNlU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDggKzQ3LDggQEAgY2xh
c3MgSW5kZXhTcGFyc2VTZXQgewogcHVibGljOgogICAgIGV4cGxpY2l0IEluZGV4U3BhcnNlU2V0
KHVuc2lnbmVkIG1heFZhbHVlKTsKIAotICAgIHZvaWQgYWRkKHVuc2lnbmVkKTsKLSAgICB2b2lk
IHJlbW92ZSh1bnNpZ25lZCk7CisgICAgYm9vbCBhZGQodW5zaWduZWQpOworICAgIGJvb2wgcmVt
b3ZlKHVuc2lnbmVkKTsKICAgICB2b2lkIGNsZWFyKCk7CiAKICAgICB1bnNpZ25lZCBzaXplKCkg
Y29uc3Q7CkBAIC03MSwyOSArNzEsMzMgQEAgaW5saW5lIEluZGV4U3BhcnNlU2V0PE92ZXJmbG93
SGFuZGxlcj46OgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+Ci1pbmxp
bmUgdm9pZCBJbmRleFNwYXJzZVNldDxPdmVyZmxvd0hhbmRsZXI+OjphZGQodW5zaWduZWQgdmFs
dWUpCitpbmxpbmUgYm9vbCBJbmRleFNwYXJzZVNldDxPdmVyZmxvd0hhbmRsZXI+OjphZGQodW5z
aWduZWQgdmFsdWUpCiB7CiAgICAgaWYgKGNvbnRhaW5zKHZhbHVlKSkKLSAgICAgICAgcmV0dXJu
OworICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICB1bnNpZ25lZCBuZXdQb3NpdGlvbiA9IG1f
dmFsdWVzLnNpemUoKTsKICAgICBtX3ZhbHVlcy5hcHBlbmQodmFsdWUpOwogICAgIG1fbWFwW3Zh
bHVlXSA9IG5ld1Bvc2l0aW9uOworICAgIHJldHVybiB0cnVlOwogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBPdmVyZmxvd0hhbmRsZXI+Ci1pbmxpbmUgdm9pZCBJbmRleFNwYXJzZVNldDxPdmVyZmxv
d0hhbmRsZXI+OjpyZW1vdmUodW5zaWduZWQgdmFsdWUpCitpbmxpbmUgYm9vbCBJbmRleFNwYXJz
ZVNldDxPdmVyZmxvd0hhbmRsZXI+OjpyZW1vdmUodW5zaWduZWQgdmFsdWUpCiB7CiAgICAgdW5z
aWduZWQgcG9zaXRpb24gPSBtX21hcFt2YWx1ZV07CiAgICAgaWYgKHBvc2l0aW9uID49IG1fdmFs
dWVzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICBpZiAobV92YWx1ZXNbcG9zaXRpb25dID09IHZhbHVlKSB7CiAgICAgICAgIHVuc2lnbmVkIGxh
c3RWYWx1ZSA9IG1fdmFsdWVzLmxhc3QoKTsKICAgICAgICAgbV92YWx1ZXNbcG9zaXRpb25dID0g
bGFzdFZhbHVlOwogICAgICAgICBtX21hcFtsYXN0VmFsdWVdID0gcG9zaXRpb247CiAgICAgICAg
IG1fdmFsdWVzLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQorCisg
ICAgcmV0dXJuIGZhbHNlOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TdHJpbmdQcmludFN0cmVhbS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL1N0cmluZ1ByaW50U3RyZWFtLmgJKHJldmlzaW9uIDE5NTE3NikKKysr
IFNvdXJjZS9XVEYvd3RmL1N0cmluZ1ByaW50U3RyZWFtLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDYg
KzM4LDggQEAgcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5TdHJpbmdQ
cmludFN0cmVhbSgpOwogICAgIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIHZvaWQg
dnByaW50Zihjb25zdCBjaGFyKiBmb3JtYXQsIHZhX2xpc3QpIG92ZXJyaWRlIFdURl9BVFRSSUJV
VEVfUFJJTlRGKDIsIDApOworCisgICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
bmV4dDsgfQogICAgIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSBDU3RyaW5nIHRvQ1N0cmluZygp
OwogICAgIFdURl9FWFBPUlRfUFJJVkFURSBTdHJpbmcgdG9TdHJpbmcoKTsK
</data>
<flag name="review"
          id="294129"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>269203</attachid>
            <date>2016-01-17 15:48:31 -0800</date>
            <delta_ts>2016-01-17 15:48:31 -0800</delta_ts>
            <desc>performance</desc>
            <filename>rLongSpiderV8SpiderOctaneKrakenJSRegressAsmBenchCompressionBench_shakezilla_20160117_1536_report.txt</filename>
            <type>text/plain</type>
            <size>66800</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">QmVuY2htYXJrIHJlcG9ydCBmb3IgU3VuU3BpZGVyLCBMb25nU3BpZGVyLCBWOFNwaWRlciwgT2N0
YW5lLCBLcmFrZW4sIEpTUmVncmVzcywgQXNtQmVuY2gsIGFuZCBDb21wcmVzc2lvbkJlbmNoIG9u
IHNoYWtlemlsbGEgKE1hY0Jvb2tQcm8xMSwzKS4KClZNcyB0ZXN0ZWQ6CiJCM1RvVCIgYXQgL1Zv
bHVtZXMvRGF0YS90ZXJ0aWFyeS9PcGVuU291cmNlL1dlYktpdEJ1aWxkL1JlbGVhc2UvanNjIChy
MTk1MTc2KQoiTXlCMyIgYXQgL1ZvbHVtZXMvRGF0YS9xdWFydGFyeS9PcGVuU291cmNlL1dlYktp
dEJ1aWxkL1JlbGVhc2UvanNjIChyMTk1MTc2KQoKQ29sbGVjdGVkIDYgc2FtcGxlcyBwZXIgYmVu
Y2htYXJrL1ZNLCB3aXRoIDYgVk0gaW52b2NhdGlvbnMgcGVyIGJlbmNobWFyay4gRW1pdHRlZCBh
IGNhbGwgdG8gZ2MoKSBiZXR3ZWVuIHNhbXBsZSBtZWFzdXJlbWVudHMuClVzZWQgMSBiZW5jaG1h
cmsgaXRlcmF0aW9uIHBlciBWTSBpbnZvY2F0aW9uIGZvciB3YXJtLXVwLiBVc2VkIHRoZSBqc2Mt
c3BlY2lmaWMgcHJlY2lzZVRpbWUoKSBmdW5jdGlvbiB0byBnZXQgbWljcm9zZWNvbmQtbGV2ZWwK
dGltaW5nLiBSZXBvcnRpbmcgYmVuY2htYXJrIGV4ZWN1dGlvbiB0aW1lcyB3aXRoIDk1JSBjb25m
aWRlbmNlIGludGVydmFscyBpbiBtaWxsaXNlY29uZHMuCgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQjNUb1QgICAgICAgICAgICAgICAg
ICAgICAgTXlCMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIApTdW5TcGlk
ZXI6CiAgIDNkLWN1YmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDQuNzU0NystMC4xNjczICAgICA/ICAgICAgNC45NzQ4Ky0wLjMzMjAgICAgICAgID8gbWlnaHQg
YmUgMS4wNDYzeCBzbG93ZXIKICAgM2QtbW9ycGggICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgNS40MTAwKy0wLjEyMzkgICAgID8gICAgICA1LjU1ODYrLTAuMjc4MyAg
ICAgICAgPyBtaWdodCBiZSAxLjAyNzV4IHNsb3dlcgogICAzZC1yYXl0cmFjZSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1LjYwNDkrLTAuMTU3MCAgICAgPyAgICAgIDUu
NzE5MCstMC4yNDAzICAgICAgICA/IG1pZ2h0IGJlIDEuMDIwNHggc2xvd2VyCiAgIGFjY2Vzcy1i
aW5hcnktdHJlZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIuMjc4NCstMC4xNTcw
ICAgICA/ICAgICAgMi4zNjEyKy0wLjI5MjYgICAgICAgID8gbWlnaHQgYmUgMS4wMzYzeCBzbG93
ZXIKICAgYWNjZXNzLWZhbm5rdWNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
NS43ODY2Ky0wLjI3MjIgICAgICAgICAgICA1Ljc0MjkrLTAuMTM1MiAgICAgICAgCiAgIGFjY2Vz
cy1uYm9keSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIuNjgyMistMC4w
MTYzICAgICA/ICAgICAgMi43MTI4Ky0wLjA0MzUgICAgICAgID8gbWlnaHQgYmUgMS4wMTE0eCBz
bG93ZXIKICAgYWNjZXNzLW5zaWV2ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMy40NzMzKy0wLjA5MDMgICAgICAgICAgICAzLjM4NTcrLTAuMDcyOSAgICAgICAgICBtaWdo
dCBiZSAxLjAyNTl4IGZhc3RlcgogICBiaXRvcHMtM2JpdC1iaXRzLWluLWJ5dGUgICAgICAgICAg
ICAgICAgICAgICAgICAgICAxLjE4ODArLTAuMDIzNyAgICAgPyAgICAgIDEuMTg4NystMC4wNDQy
ICAgICAgICA/CiAgIGJpdG9wcy1iaXRzLWluLWJ5dGUgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDMuMTQxMCstMC4wNTkyICAgICA/ICAgICAgMy4xOTIzKy0wLjA5NTggICAgICAgID8g
bWlnaHQgYmUgMS4wMTYzeCBzbG93ZXIKICAgYml0b3BzLWJpdHdpc2UtYW5kICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMi4xMjUxKy0wLjA5ODAgICAgICAgICAgICAyLjA2MjArLTAu
MTAxMCAgICAgICAgICBtaWdodCBiZSAxLjAzMDZ4IGZhc3RlcgogICBiaXRvcHMtbnNpZXZlLWJp
dHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzLjA5NzkrLTAuMzAxNiAgICAgICAg
ICAgIDIuOTg1NistMC4wNTIzICAgICAgICAgIG1pZ2h0IGJlIDEuMDM3NnggZmFzdGVyCiAgIGNv
bnRyb2xmbG93LXJlY3Vyc2l2ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIuMzEwNist
MC4wMzM4ICAgICAgICAgICAgMi4zMDA2Ky0wLjA5MTUgICAgICAgIAogICBjcnlwdG8tYWVzICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LjMzNTIrLTAuNDMwMiAgICAg
ICAgICAgIDQuMjI2NystMC4zOTkxICAgICAgICAgIG1pZ2h0IGJlIDEuMDI1N3ggZmFzdGVyCiAg
IGNyeXB0by1tZDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIuNjAz
MSstMC4yMDU1ICAgICAgICAgICAgMi40OTEwKy0wLjAzODIgICAgICAgICAgbWlnaHQgYmUgMS4w
NDUweCBmYXN0ZXIKICAgY3J5cHRvLXNoYTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMi41NjI3Ky0wLjI3NzAgICAgICAgICAgICAyLjQ3NDUrLTAuMTQ0MiAgICAgICAg
ICBtaWdodCBiZSAxLjAzNTd4IGZhc3RlcgogICBkYXRlLWZvcm1hdC10b2Z0ZSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA2Ljg2MDErLTAuMzExMSAgICAgPyAgICAgIDcuMDA4MCst
MC4yNzY4ICAgICAgICA/IG1pZ2h0IGJlIDEuMDIxNnggc2xvd2VyCiAgIGRhdGUtZm9ybWF0LXhw
YXJiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQuODAwOSstMC4yMDI5ICAgICAg
ICAgICAgNC42NzQ4Ky0wLjExODcgICAgICAgICAgbWlnaHQgYmUgMS4wMjcweCBmYXN0ZXIKICAg
bWF0aC1jb3JkaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMi45MjA2
Ky0wLjA2OTAgICAgID8gICAgICAzLjA0ODQrLTAuMTk4OSAgICAgICAgPyBtaWdodCBiZSAxLjA0
Mzh4IHNsb3dlcgogICBtYXRoLXBhcnRpYWwtc3VtcyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA1LjAyMzIrLTAuMDkxMiAgICAgPyAgICAgIDUuMjk3MSstMC41MTMwICAgICAgICA/
IG1pZ2h0IGJlIDEuMDU0NXggc2xvd2VyCiAgIG1hdGgtc3BlY3RyYWwtbm9ybSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDIuMTIxOCstMC4wODkyICAgICAgICAgICAgMi4wNzA4Ky0w
LjA1MzIgICAgICAgICAgbWlnaHQgYmUgMS4wMjQ2eCBmYXN0ZXIKICAgcmVnZXhwLWRuYSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNi4zMzU0Ky0wLjQ5MTIgICAgID8g
ICAgICA2LjUxMzErLTAuMjY2NCAgICAgICAgPyBtaWdodCBiZSAxLjAyODB4IHNsb3dlcgogICBz
dHJpbmctYmFzZTY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1LjAzNDEr
LTAuNTI2NiAgICAgICAgICAgIDQuNjkwOSstMC4wOTg1ICAgICAgICAgIG1pZ2h0IGJlIDEuMDcz
MnggZmFzdGVyCiAgIHN0cmluZy1mYXN0YSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDUuNzIxMistMC4xNDY0ICAgICA/ICAgICAgNS43OTc0Ky0wLjA4MzAgICAgICAgID8g
bWlnaHQgYmUgMS4wMTMzeCBzbG93ZXIKICAgc3RyaW5nLXRhZ2Nsb3VkICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgNy44NjA2Ky0wLjEyMjQgICAgID8gICAgICA3Ljk1NTUrLTAu
MDY5NCAgICAgICAgPyBtaWdodCBiZSAxLjAxMjF4IHNsb3dlcgogICBzdHJpbmctdW5wYWNrLWNv
ZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5LjA1ODMrLTEuNzM1MyAgICAgPyAg
ICAgMTkuNzEyNSstMi4yMjM3ICAgICAgICA/IG1pZ2h0IGJlIDEuMDM0M3ggc2xvd2VyCiAgIHN0
cmluZy12YWxpZGF0ZS1pbnB1dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQuMzc5OSst
MC4xMDU0ICAgICA/ICAgICAgNC40MTgyKy0wLjEwNDggICAgICAgID8KCiAgIDxhcml0aG1ldGlj
PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQuNjcxOSstMC4wODcwICAg
ICA/ICAgICAgNC43MTQwKy0wLjA4ODEgICAgICAgID8gbWlnaHQgYmUgMS4wMDkweCBzbG93ZXIK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBCM1RvVCAgICAgICAgICAgICAgICAgICAgICBNeUIzICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgCkxvbmdTcGlkZXI6CiAgIDNkLWN1YmUgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA4MDMuODAwOSstOC41MDg4ICAgICA/ICAgIDgwOS40NjU1
Ky0xMC40MjQ0ICAgICAgID8KICAgM2QtbW9ycGggICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDU5MC44NTIwKy02LjA2NDMgICAgICAgICAgNTg5LjIzMzYrLTEuNjg2MiAg
ICAgICAgCiAgIDNkLXJheXRyYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA2NTkuMzY1MistNC42OTY4ICAgICAgICAgIDY1My4zODQ2Ky00LjEyNzUgICAgICAgIAogICBh
Y2Nlc3MtYmluYXJ5LXRyZWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODQ3LjY3MDEr
LTcuMzY4MCAgICAgICAgICA4NDQuMzYyMCstNS41MTQ5ICAgICAgICAKICAgYWNjZXNzLWZhbm5r
dWNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Ni44MTQ4Ky0yOC43MDk4ICAg
ICAgICAgMjUzLjUxODQrLTI2Ljc3NTIgICAgICAgICBtaWdodCBiZSAxLjAxMzB4IGZhc3Rlcgog
ICBhY2Nlc3MtbmJvZHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjcyLjk1
ODcrLTQuOTQ1NCAgICAgICAgICA2NzEuOTQ4NystNS4zMjg2ICAgICAgICAKICAgYWNjZXNzLW5z
aWV2ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM3NC4xMDY4Ky0xNC4wMzQx
ICAgID8gICAgMzc2LjI1NTErLTEyLjUyOTEgICAgICAgPwogICBiaXRvcHMtM2JpdC1iaXRzLWlu
LWJ5dGUgICAgICAgICAgICAgICAgICAgICAgICAgIDM0LjM5MDgrLTEuNDc3MiAgICAgXiAgICAg
MzEuMjk4NystMS42MDg5ICAgICAgICBeIGRlZmluaXRlbHkgMS4wOTg4eCBmYXN0ZXIKICAgYml0
b3BzLWJpdHMtaW4tYnl0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5OS41MDM3Ky02
LjEwNTMgICAgICAgICAgIDk2LjE5MzUrLTYuODU5MyAgICAgICAgICBtaWdodCBiZSAxLjAzNDR4
IGZhc3RlcgogICBiaXRvcHMtbnNpZXZlLWJpdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMzk2Ljg2MDQrLTQuNDk3MyAgICAgPyAgICA0MDAuMDQzNCstOS43Njc3ICAgICAgICA/CiAg
IGNvbnRyb2xmbG93LXJlY3Vyc2l2ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MzQuNzE1
NystMy41Nzk2ICAgICBeICAgIDQyMy42NTk3Ky0xLjMxNDUgICAgICAgIF4gZGVmaW5pdGVseSAx
LjAyNjF4IGZhc3RlcgogICBjcnlwdG8tYWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgNjgyLjg1NDkrLTMuNDUyMCAgICAgICAgICA2NzEuMzYzOCstOS41MDE4ICAgICAg
ICAgIG1pZ2h0IGJlIDEuMDE3MXggZmFzdGVyCiAgIGNyeXB0by1tZDUgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA2MTYuMjU3NistMS41OTA4ICAgICA/ICAgIDYyMS44MDE4
Ky04LjAzODEgICAgICAgID8KICAgY3J5cHRvLXNoYTEgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDcyNy4wODg1Ky02LjM5NTYgICAgID8gICAgNzM1LjQ2MDkrLTE1LjA3MDUg
ICAgICAgPyBtaWdodCBiZSAxLjAxMTV4IHNsb3dlcgogICBkYXRlLWZvcm1hdC10b2Z0ZSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgNTUxLjI1MjkrLTQuMTMxMyAgICAgISAgICA1Nzcu
MjcwMSstMTIuODk1OCAgICAgICAhIGRlZmluaXRlbHkgMS4wNDcyeCBzbG93ZXIKICAgZGF0ZS1m
b3JtYXQteHBhcmIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY0MS43NDM2Ky0yLjM1
NDggICAgID8gICAgNjQ0LjExNzMrLTQuODAyNSAgICAgICAgPwogICBoYXNoLW1hcCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQ2LjQ1MzcrLTEuODM5MSAgICAgICAg
ICAxNDUuODg4OSstMy4wMTYzICAgICAgICAKICAgbWF0aC1jb3JkaWMgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDUwMC43MDY3Ky0xMi44NzQyICAgICAgICAgNDk2LjUzNDIr
LTE1LjU0OTYgICAgICAgCiAgIG1hdGgtcGFydGlhbC1zdW1zICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA0MTguMzkwOSstMy41MzIxICAgICA/ICAgIDQyMy4xNTkxKy0yNC4xNjAwICAg
ICAgID8gbWlnaHQgYmUgMS4wMTE0eCBzbG93ZXIKICAgbWF0aC1zcGVjdHJhbC1ub3JtICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDc2NC45NzgxKy0xLjc0NjIgICAgID8gICAgNzcxLjQx
ODArLTcuNDIzOSAgICAgICAgPwogICBzdHJpbmctYmFzZTY0ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMzc1Ljg0NjErLTYuMjU4NyAgICAgPyAgICAzNzYuNTg4OCstMS40ODEy
ICAgICAgICA/CiAgIHN0cmluZy1mYXN0YSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAzNjMuMDQzNistNC42MTQ0ICAgICAgICAgIDM1Ny44Nzc0Ky00LjIzNjIgICAgICAgICAg
bWlnaHQgYmUgMS4wMTQ0eCBmYXN0ZXIKICAgc3RyaW5nLXRhZ2Nsb3VkICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDE3My4xNTIzKy0xLjI2OTYgICAgID8gICAgMTc0LjQ0NzIrLTMu
MDIxMCAgICAgICAgPwoKICAgPGdlb21ldHJpYz4gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDM5Ny4zMzcxKy0yLjQ1MzIgICAgICAgICAgMzk1LjQ0NzMrLTIuMjYzOSAgICAg
ICAgICBtaWdodCBiZSAxLjAwNDh4IGZhc3RlcgoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIzVG9UICAgICAgICAgICAgICAgICAgICAg
IE15QjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKVjhTcGlkZXI6CiAg
IGNyeXB0byAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDAuODI3
MistMS4zOTAwICAgICBeICAgICAzOC42MzkxKy0wLjc0MzcgICAgICAgIF4gZGVmaW5pdGVseSAx
LjA1NjZ4IGZhc3RlcgogICBkZWx0YWJsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDU0LjkxNDErLTMuNjU2OSAgICAgICAgICAgNTEuMzA0NistMS4yMTg3ICAgICAg
ICAgIG1pZ2h0IGJlIDEuMDcwNHggZmFzdGVyCiAgIGVhcmxleS1ib3llciAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgNDEuMjQxMistMC45MzUxICAgICA/ICAgICA0MS42NjMw
Ky0xLjIxMjcgICAgICAgID8gbWlnaHQgYmUgMS4wMTAyeCBzbG93ZXIKICAgcmF5dHJhY2UgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMC44NTU2Ky0xLjQyNDUgICAg
ICAgICAgIDIwLjI5MjcrLTAuNTA4NSAgICAgICAgICBtaWdodCBiZSAxLjAyNzd4IGZhc3Rlcgog
ICByZWdleHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYyLjQ5
ODYrLTEuMDI2NCAgICAgPyAgICAgNjMuMjMwMistMS41MTM3ICAgICAgICA/IG1pZ2h0IGJlIDEu
MDExN3ggc2xvd2VyCiAgIHJpY2hhcmRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgNDUuNTk4MCstMC43ODk1ICAgICAgICAgICA0NS40Mjk0Ky0xLjAzNDQgICAgICAg
IAogICBzcGxheSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM2
LjI4MzMrLTAuOTQxNyAgICAgPyAgICAgMzYuOTkxNCstMS4yMzM3ICAgICAgICA/IG1pZ2h0IGJl
IDEuMDE5NXggc2xvd2VyCgogICA8Z2VvbWV0cmljPiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDQxLjExMjQrLTAuMDY0OCAgICAgXiAgICAgNDAuNDcwNistMC4zNTY4ICAg
ICAgICBeIGRlZmluaXRlbHkgMS4wMTU5eCBmYXN0ZXIKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCM1RvVCAgICAgICAgICAgICAgICAg
ICAgICBNeUIzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCk9jdGFuZToK
ICAgZW5jcnlwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjE4
MzI5Ky0wLjAwNDE5ICAgIF4gICAgIDAuMTYyNjcrLTAuMDAzNjAgICAgICAgXiBkZWZpbml0ZWx5
IDEuMTI2OHggZmFzdGVyCiAgIGRlY3J5cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMy4yNjA2MystMC4wMjM0NSAgICBeICAgICAyLjk3NTAyKy0wLjA1NzU1ICAg
ICAgIF4gZGVmaW5pdGVseSAxLjA5NjB4IGZhc3RlcgogICBkZWx0YWJsdWUgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHgyICAgICAgIDAuMTU1MTIrLTAuMDAzOTcgICAgISAgICAgMC4x
NjM5MSstMC4wMDE0NiAgICAgICAhIGRlZmluaXRlbHkgMS4wNTY2eCBzbG93ZXIKICAgZWFybGV5
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjI4MjAxKy0wLjAw
MTAxICAgIF4gICAgIDAuMjc2MTQrLTAuMDAyOTcgICAgICAgXiBkZWZpbml0ZWx5IDEuMDIxM3gg
ZmFzdGVyCiAgIGJveWVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgNC41MTM3NCstMC4xNjY5NSAgICAgICAgICA0LjQzNDQ0Ky0wLjAyNDE5ICAgICAgICAgbWln
aHQgYmUgMS4wMTc5eCBmYXN0ZXIKICAgbmF2aWVyLXN0b2tlcyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB4MiAgICAgICA0LjgyMjQzKy0wLjAyNjc0ICAgICAgICAgIDQuODIwOTIrLTAuMDEw
NDAgICAgICAgCiAgIHJheXRyYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDIg
ICAgICAgMC45MDI1OCstMC4wMDc0NiAgICBeICAgICAwLjg4OTU5Ky0wLjAwMzkzICAgICAgIF4g
ZGVmaW5pdGVseSAxLjAxNDZ4IGZhc3RlcgogICByaWNoYXJkcyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHgyICAgICAgIDAuMDk4MzIrLTAuMDAyMzkgICAgICAgICAgMC4wOTgxNist
MC4wMDEyOCAgICAgICAKICAgc3BsYXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB4MiAgICAgICAwLjM1NzcyKy0wLjAwNDc2ICAgID8gICAgIDAuMzU4MDErLTAuMDA2NjkgICAg
ICAgPwogICByZWdleHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyICAgICAg
MjUuMDAwODIrLTAuMzAwMzAgICAgICAgICAyNC43MzI1NSstMC42NTU2NCAgICAgICAgIG1pZ2h0
IGJlIDEuMDEwOHggZmFzdGVyCiAgIHBkZmpzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeDIgICAgICAzNy42MDM1MCstMC4xMDgwMyAgICA/ICAgIDM3LjYxMDcxKy0wLjQ2OTU2
ICAgICAgID8KICAgbWFuZHJlZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4MiAg
ICAgIDU0LjI0MjA3Ky0wLjM2MzQwICAgIF4gICAgNTIuOTU0NzcrLTAuNjM2MzcgICAgICAgXiBk
ZWZpbml0ZWx5IDEuMDI0M3ggZmFzdGVyCiAgIGdiZW11ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeDIgICAgICAzMy4xMjgyNSstMy45Nzc3MyAgICAgICAgIDMxLjM0MTQwKy0w
LjQ4ODE0ICAgICAgICAgbWlnaHQgYmUgMS4wNTcweCBmYXN0ZXIKICAgY2xvc3VyZSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjU5MzM2Ky0wLjAwNjM5ICAgID8g
ICAgIDAuNTk2NzArLTAuMDA1MTcgICAgICAgPwogICBqcXVlcnkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDcuNDMwMDArLTAuMDQ4NzQgICAgPyAgICAgNy40NDMx
OSstMC4wNzA2MCAgICAgICA/CiAgIGJveDJkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeDIgICAgICAgOS40OTExNCstMC4wOTM5NyAgICBeICAgICA5LjMwNjUyKy0wLjA1MDc3
ICAgICAgIF4gZGVmaW5pdGVseSAxLjAxOTh4IGZhc3RlcgogICB6bGliICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHgyICAgICA0MDkuMDIyNjUrLTQuNzg3NzcgICAgICAgIDQw
Mi40MTM2NistMTEuMTE5MzAgICAgICAgIG1pZ2h0IGJlIDEuMDE2NHggZmFzdGVyCiAgIHR5cGVz
Y3JpcHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDIgICAgIDY3My4wMzcyNystNy4x
NjUwNSAgICAgICAgNjY1Ljk3NjQwKy01LjUxMzg4ICAgICAgICAgbWlnaHQgYmUgMS4wMTA2eCBm
YXN0ZXIKCiAgIDxnZW9tZXRyaWM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgNS42NDk5OSstMC4wNDMyMyAgICBeICAgICA1LjU3MDA1Ky0wLjAxMzc4ICAgICAgIF4gZGVm
aW5pdGVseSAxLjAxNDR4IGZhc3RlcgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEIzVG9UICAgICAgICAgICAgICAgICAgICAgIE15QjMg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKS3Jha2VuOgogICBhaS1hc3Rh
ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5MS42NDIrLTEuNDAz
ICAgICAgPyAgICAgIDkyLjk0NistMi42NDYgICAgICAgICA/IG1pZ2h0IGJlIDEuMDE0Mnggc2xv
d2VyCiAgIGF1ZGlvLWJlYXQtZGV0ZWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDU1LjI0NSstMC4zNTcgICAgICA/ICAgICAgNTUuNTA5Ky0wLjQ3OCAgICAgICAgID8KICAgYXVk
aW8tZGZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTUuNTc1Ky0x
LjAzMyAgICAgID8gICAgICA5Ni45NjgrLTIuNTI5ICAgICAgICAgPyBtaWdodCBiZSAxLjAxNDZ4
IHNsb3dlcgogICBhdWRpby1mZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA0My42MzYrLTEuMzgzICAgICAgPyAgICAgIDQ0LjU4NistMS44OTAgICAgICAgICA/IG1p
Z2h0IGJlIDEuMDIxOHggc2xvd2VyCiAgIGF1ZGlvLW9zY2lsbGF0b3IgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDU0Ljg0NistMS4wNzggICAgICAgICAgICAgNTMuODA2Ky0wLjkw
MSAgICAgICAgICAgbWlnaHQgYmUgMS4wMTkzeCBmYXN0ZXIKICAgaW1hZ2luZy1kYXJrcm9vbSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzAuMjA5Ky0wLjU3NyAgICAgICAgICAg
ICA2OS44OTArLTAuMzYxICAgICAgICAgCiAgIGltYWdpbmctZGVzYXR1cmF0ZSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDQ0LjUwNSstMC40MDkgICAgICA/ICAgICAgNDQuNTQ2Ky0w
LjUyNCAgICAgICAgID8KICAgaW1hZ2luZy1nYXVzc2lhbi1ibHVyICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgNjcuMDYzKy0wLjM5MCAgICAgID8gICAgICA2Ny42MTkrLTAuNjk5ICAgICAg
ICAgPwogICBqc29uLXBhcnNlLWZpbmFuY2lhbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAzOC41MTkrLTEuNDEwICAgICAgICAgICAgIDM3LjM2MSstMC40MzcgICAgICAgICAgIG1pZ2h0
IGJlIDEuMDMxMHggZmFzdGVyCiAgIGpzb24tc3RyaW5naWZ5LXRpbmRlcmJveCAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDIzLjI1NistMC41MzAgICAgICAgICAgICAgMjIuODk5Ky0xLjE1NyAg
ICAgICAgICAgbWlnaHQgYmUgMS4wMTU2eCBmYXN0ZXIKICAgc3RhbmZvcmQtY3J5cHRvLWFlcyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDEuNDA2Ky0yLjA2MiAgICAgID8gICAgICA0
MS40OTQrLTIuMzk2ICAgICAgICAgPwogICBzdGFuZm9yZC1jcnlwdG8tY2NtICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAzOC42MjIrLTIuNTI3ICAgICAgICAgICAgIDM4LjAzOSstMS45
NDkgICAgICAgICAgIG1pZ2h0IGJlIDEuMDE1M3ggZmFzdGVyCiAgIHN0YW5mb3JkLWNyeXB0by1w
YmtkZjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwLjkyNSstMi45NDMgICAgICAgICAg
ICAxMDAuMjkxKy0zLjUxMyAgICAgICAgIAogICBzdGFuZm9yZC1jcnlwdG8tc2hhMjU2LWl0ZXJh
dGl2ZSAgICAgICAgICAgICAgICAgICAzOC45NjArLTEuMTE3ICAgICAgICAgICAgIDM4LjE5NSst
MC44NzMgICAgICAgICAgIG1pZ2h0IGJlIDEuMDIwMHggZmFzdGVyCgogICA8YXJpdGhtZXRpYz4g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ny40NTgrLTAuMzk3ICAgICAg
ICAgICAgIDU3LjQzOSstMC40MTQgICAgICAgICAgIG1pZ2h0IGJlIDEuMDAwM3ggZmFzdGVyCgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QjNUb1QgICAgICAgICAgICAgICAgICAgICAgTXlCMyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIApKU1JlZ3Jlc3M6CiAgIGFiYy1mb3J3YXJkLWxvb3AtZXF1YWwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMjMuNzk5NCstMC40MjYzICAgICA/ICAgICAyNC41OTQyKy0x
LjM0MzEgICAgICAgID8gbWlnaHQgYmUgMS4wMzM0eCBzbG93ZXIKICAgYWJjLXBvc3RmaXgtYmFj
a3dhcmQtbG9vcCAgICAgICAgICAgICAgICAgICAgICAgICAzMC4zNzY5Ky0xLjY2MTIgICAgICAg
ICAgIDMwLjM3NDIrLTEuMDMwMyAgICAgICAgCiAgIGFiYy1zaW1wbGUtYmFja3dhcmQtbG9vcCAg
ICAgICAgICAgICAgICAgICAgICAgICAgMjMuMzcxNCstMC4yOTEyICAgICA/ICAgICAyNC4yNDU0
Ky0xLjUwNzUgICAgICAgID8gbWlnaHQgYmUgMS4wMzc0eCBzbG93ZXIKICAgYWJjLXNpbXBsZS1m
b3J3YXJkLWxvb3AgICAgICAgICAgICAgICAgICAgICAgICAgICAyMy44NDMzKy0wLjY3MzggICAg
ICAgICAgIDIzLjgxMTQrLTAuNDE1NSAgICAgICAgCiAgIGFiYy1za2lwcHktbG9vcCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYuNTQzMSstMC40NDE0ICAgICAgICAgICAxNi4z
NzUyKy0wLjY5MTAgICAgICAgICAgbWlnaHQgYmUgMS4wMTAzeCBmYXN0ZXIKICAgYWJzLWJvb2xl
YW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMi41MjI3Ky0wLjA2OTgg
ICAgICAgICAgICAyLjQ1NzYrLTAuMDMwNSAgICAgICAgICBtaWdodCBiZSAxLjAyNjV4IGZhc3Rl
cgogICBhZGFwdC10by1kb3VibGUtZGl2aWRlICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0
LjYzNzgrLTAuNTk5NSAgICAgICAgICAgMTQuMjk2OCstMC4zODI0ICAgICAgICAgIG1pZ2h0IGJl
IDEuMDIzOHggZmFzdGVyCiAgIGFsaWFzZWQtYXJndW1lbnRzLWdldGJ5dmFsICAgICAgICAgICAg
ICAgICAgICAgICAgIDEuMjYyOSstMC4xMDU4ICAgICAgICAgICAgMS4yMDA3Ky0wLjExODAgICAg
ICAgICAgbWlnaHQgYmUgMS4wNTE3eCBmYXN0ZXIKICAgYWxsb2NhdGUtYmlnLW9iamVjdCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMi42MDU4Ky0wLjEyMjMgICAgICAgICAgICAyLjU4
MDYrLTAuMjE5NyAgICAgICAgCiAgIGFyZ3VtZW50cy1uYW1lZC1hbmQtcmVmbGVjdGl2ZSAgICAg
ICAgICAgICAgICAgICAgIDguMjYyNistMC42NDM0ICAgICAgICAgICAgOC4wODU3Ky0wLjcwODAg
ICAgICAgICAgbWlnaHQgYmUgMS4wMjE5eCBmYXN0ZXIKICAgYXJndW1lbnRzLW91dC1vZi1ib3Vu
ZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAxMi4xNjYwKy0wLjA5MDEgICAgID8gICAgIDEy
LjQxNjQrLTAuMzM2MCAgICAgICAgPyBtaWdodCBiZSAxLjAyMDZ4IHNsb3dlcgogICBhcmd1bWVu
dHMtc3RyaWN0LW1vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3LjE1NjIrLTAuNTkx
MiAgICAgICAgICAgIDYuOTkxOSstMC42OTU0ICAgICAgICAgIG1pZ2h0IGJlIDEuMDIzNXggZmFz
dGVyCiAgIGFyZ3VtZW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDUuOTI4NSstMC4wNzQwICAgICA/ICAgICAgNi4xODcwKy0wLjYyNzEgICAgICAgID8gbWlnaHQg
YmUgMS4wNDM2eCBzbG93ZXIKICAgYXJpdHktbWlzbWF0Y2gtaW5saW5pbmcgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMC44OTk4Ky0wLjA2OTkgICAgID8gICAgICAxLjAwMTArLTAuMjMzMyAg
ICAgICAgPyBtaWdodCBiZSAxLjExMjV4IHNsb3dlcgogICBhcnJheS1hY2Nlc3MtcG9seW1vcnBo
aWMtc3RydWN0dXJlICAgICAgICAgICAgICAgICA4Ljg4MjArLTAuNjAyOSAgICAgICAgICAgIDgu
Njk0OSstMC41NDc2ICAgICAgICAgIG1pZ2h0IGJlIDEuMDIxNXggZmFzdGVyCiAgIGFycmF5LW5v
bmFycmF5LXBvbHltb3JocGljLWFjY2VzcyAgICAgICAgICAgICAgICAgMTguMzYzNystMC43MzEx
ICAgICA/ICAgICAxOC40OTMyKy0wLjM3MTQgICAgICAgID8KICAgYXJyYXktcHJvdG90eXBlLWV2
ZXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ni4xNTcxKy0wLjk3NjQgICAgID8gICAg
IDc2LjgxMTUrLTAuOTgyNSAgICAgICAgPwogICBhcnJheS1wcm90b3R5cGUtZm9yRWFjaCAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDc1LjY3MTArLTEuMjA4OSAgICAgPyAgICAgNzUuOTAzOCst
Mi4xMjEwICAgICAgICA/CiAgIGFycmF5LXByb3RvdHlwZS1tYXAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgODQuNzM5NistMS4yNTA3ICAgICAgICAgICA4NC4wNjYyKy0xLjY3NzAgICAg
ICAgIAogICBhcnJheS1wcm90b3R5cGUtcmVkdWNlICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDcyLjAzODIrLTEuMDI2MiAgICAgPyAgICAgNzMuMzA0OCstMS44NzI3ICAgICAgICA/IG1pZ2h0
IGJlIDEuMDE3Nnggc2xvd2VyCiAgIGFycmF5LXByb3RvdHlwZS1yZWR1Y2VSaWdodCAgICAgICAg
ICAgICAgICAgICAgICAgNzIuMjM3NSstMC40OTQ3ICAgICA/ICAgICA3Ni4yNDg1Ky04LjkxODAg
ICAgICAgID8gbWlnaHQgYmUgMS4wNTU1eCBzbG93ZXIKICAgYXJyYXktcHJvdG90eXBlLXNvbWUg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ny4yMTA5Ky0xLjMwMjIgICAgID8gICAgIDc3
LjcxMDErLTIuNTE0NCAgICAgICAgPwogICBhcnJheS1zcGxpY2UtY29udGlndW91cyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDI1LjI2NTIrLTIuMDcyNSAgICAgICAgICAgMjQuNTA4MystMC43
NjcxICAgICAgICAgIG1pZ2h0IGJlIDEuMDMwOXggZmFzdGVyCiAgIGFycmF5LXdpdGgtZG91Ymxl
LWFkZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMuNTk3NSstMC4yMzY2ICAgICAgICAg
ICAgMy41NDcxKy0wLjE4MDAgICAgICAgICAgbWlnaHQgYmUgMS4wMTQyeCBmYXN0ZXIKICAgYXJy
YXktd2l0aC1kb3VibGUtaW5jcmVtZW50ICAgICAgICAgICAgICAgICAgICAgICAgMy4yMjcxKy0w
LjE4NTcgICAgICAgICAgICAzLjE4NjArLTAuMDgxMCAgICAgICAgICBtaWdodCBiZSAxLjAxMjl4
IGZhc3RlcgogICBhcnJheS13aXRoLWRvdWJsZS1tdWwtYWRkICAgICAgICAgICAgICAgICAgICAg
ICAgICA0LjQ3MzgrLTAuMDYxNSAgICAgPyAgICAgIDQuNzk1MCstMC44NzU0ICAgICAgICA/IG1p
Z2h0IGJlIDEuMDcxOHggc2xvd2VyCiAgIGFycmF5LXdpdGgtZG91YmxlLXN1bSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDMuMzI0MSstMC4xNDE5ICAgICAgICAgICAgMy4yMjE0Ky0wLjEw
MjIgICAgICAgICAgbWlnaHQgYmUgMS4wMzE5eCBmYXN0ZXIKICAgYXJyYXktd2l0aC1pbnQzMi1h
ZGQtc3ViICAgICAgICAgICAgICAgICAgICAgICAgICAgNi40OTUyKy0wLjc5NDAgICAgICAgICAg
ICA2LjE2NTcrLTAuMDkwNyAgICAgICAgICBtaWdodCBiZSAxLjA1MzR4IGZhc3RlcgogICBhcnJh
eS13aXRoLWludDMyLW9yLWRvdWJsZS1zdW0gICAgICAgICAgICAgICAgICAgICAzLjMwMzErLTAu
MTM2OSAgICAgPyAgICAgIDMuNDA5OSstMC4zNDM4ICAgICAgICA/IG1pZ2h0IGJlIDEuMDMyM3gg
c2xvd2VyCiAgIEFycmF5QnVmZmVyLURhdGFWaWV3LWFsbG9jLWxhcmdlLWxvbmctbGl2ZWQgICAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNy4x
NDUxKy0wLjg3ODEgICAgID8gICAgIDI3LjE4MTArLTEuMDA1NiAgICAgICAgPwogICBBcnJheUJ1
ZmZlci1EYXRhVmlldy1hbGxvYy1sb25nLWxpdmVkICAgICAgICAgICAgIDEyLjQyNjUrLTAuMjE1
OCAgICAgPyAgICAgMTIuNjI4OCstMC41OTY1ICAgICAgICA/IG1pZ2h0IGJlIDEuMDE2M3ggc2xv
d2VyCiAgIEFycmF5QnVmZmVyLUludDMyQXJyYXktYnl0ZU9mZnNldCAgICAgICAgICAgICAgICAg
IDMuNjgxMSstMC4yMjcxICAgICAgICAgICAgMy41OTkyKy0wLjA5OTkgICAgICAgICAgbWlnaHQg
YmUgMS4wMjI4eCBmYXN0ZXIKICAgQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWxhcmdlLWxv
bmctbGl2ZWQgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAyNi4zODc0Ky0wLjUzNzUgICAgID8gICAgIDI3LjEwNjgrLTEuMDQ1MiAgICAgICAg
PyBtaWdodCBiZSAxLjAyNzN4IHNsb3dlcgogICBBcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2Mt
bG9uZy1saXZlZC1idWZmZXIgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAxOS44MjM5Ky0wLjczNTMgICAgID8gICAgIDIwLjA1NDgrLTAuNjcx
MiAgICAgICAgPyBtaWdodCBiZSAxLjAxMTZ4IHNsb3dlcgogICBBcnJheUJ1ZmZlci1JbnQ4QXJy
YXktYWxsb2MtbG9uZy1saXZlZCAgICAgICAgICAgIDExLjUyMTArLTAuNDA0NyAgICAgPyAgICAg
MTEuNzIzOCstMC4zMDU5ICAgICAgICA/IG1pZ2h0IGJlIDEuMDE3Nnggc2xvd2VyCiAgIEFycmF5
QnVmZmVyLUludDhBcnJheS1hbGxvYyAgICAgICAgICAgICAgICAgICAgICAgIDkuNjI0OCstMC4z
NTczICAgICA/ICAgICAgOS43ODUxKy0wLjIzMzkgICAgICAgID8gbWlnaHQgYmUgMS4wMTY3eCBz
bG93ZXIKICAgYXJyb3dmdW5jdGlvbi1jYWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOS4xMzk2Ky0wLjE2MTMgICAgID8gICAgICA5LjQ1OTArLTAuNjkwMCAgICAgICAgPyBtaWdo
dCBiZSAxLjAzNDl4IHNsb3dlcgogICBhc21qc19ib29sX2J1ZyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA3LjU2MjYrLTAuNTIzOCAgICAgICAgICAgIDcuNDk0NistMC40NDY4
ICAgICAgICAKICAgYXNzaWduLWN1c3RvbS1zZXR0ZXItcG9seW1vcnBoaWMgICAgICAgICAgICAg
ICAgICAgMi41NTI5Ky0wLjA5MjIgICAgICAgICAgICAyLjQ4MzYrLTAuMDQzNCAgICAgICAgICBt
aWdodCBiZSAxLjAyNzl4IGZhc3RlcgogICBhc3NpZ24tY3VzdG9tLXNldHRlciAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAzLjUwMDIrLTAuMDcyNSAgICAgPyAgICAgIDMuNTY1NystMC4x
MzUzICAgICAgICA/IG1pZ2h0IGJlIDEuMDE4N3ggc2xvd2VyCiAgIGJhc2ljLXNldCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcuMzE2OSstMC4xNDQ5ICAgICAgICAg
ICAgNy4zMDk2Ky0wLjEyMzEgICAgICAgIAogICBiaWctaW50LW11bCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAzLjEwOTYrLTAuMDU1NCAgICAgPyAgICAgIDMuMTU5MCst
MC4wMzkyICAgICAgICA/IG1pZ2h0IGJlIDEuMDE1OXggc2xvd2VyCiAgIGJvb2xlYW4tdGVzdCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMuMzk2MistMC4xMDEzICAgICAg
ICAgICAgMy4zMTM0Ky0wLjA0MjYgICAgICAgICAgbWlnaHQgYmUgMS4wMjUweCBmYXN0ZXIKICAg
YnJhbmNoLWZvbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMy42Njkx
Ky0wLjExMjYgICAgICAgICAgICAzLjYxMDIrLTAuMDQ0OSAgICAgICAgICBtaWdodCBiZSAxLjAx
NjN4IGZhc3RlcgogICBicmFuY2gtb24tc3RyaW5nLWFzLWJvb2xlYW4gICAgICAgICAgICAgICAg
ICAgICAgIDEwLjY1NTArLTAuMzY2NSAgICAgPyAgICAgMTAuODA1MCstMC4xODUzICAgICAgICA/
IG1pZ2h0IGJlIDEuMDE0MXggc2xvd2VyCiAgIGJ5LXZhbC1nZW5lcmljICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDQuNDU5NistMC4xNTk4ICAgICA/ICAgICAgNC41NTUyKy0w
LjI4MzQgICAgICAgID8gbWlnaHQgYmUgMS4wMjE0eCBzbG93ZXIKICAgY2FsbC1zcHJlYWQtYXBw
bHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNy4yMzE5Ky0xLjQ3MTYgICAgID8g
ICAgIDI3LjYwNzcrLTEuMDQzOSAgICAgICAgPyBtaWdodCBiZSAxLjAxMzh4IHNsb3dlcgogICBj
YWxsLXNwcmVhZC1jYWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxLjgwOTcr
LTEuNzc1MSAgICAgICAgICAgMjAuODM4OSstMC41MzI2ICAgICAgICAgIG1pZ2h0IGJlIDEuMDQ2
NnggZmFzdGVyCiAgIGNhcHR1cmVkLWFzc2lnbm1lbnRzICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDAuNDY4MCstMC4wNTE4ICAgICA/ICAgICAgMC40NzQ3Ky0wLjA0OTEgICAgICAgID8g
bWlnaHQgYmUgMS4wMTQzeCBzbG93ZXIKICAgY2FzdC1pbnQtdG8tZG91YmxlICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgNS4zMTc1Ky0wLjkxNDkgICAgICAgICAgICA1LjA0ODErLTAu
MTIxNiAgICAgICAgICBtaWdodCBiZSAxLjA1MzR4IGZhc3RlcgogICBjZWxsLWFyZ3VtZW50ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLjkyNjErLTAuMTU3NiAgICAgPyAg
ICAgIDIuOTY1MCstMC4xMzI5ICAgICAgICA/IG1pZ2h0IGJlIDEuMDEzM3ggc2xvd2VyCiAgIGNm
Zy1zaW1wbGlmeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIuODc3MCst
MC4wNzAxICAgICA/ICAgICAgMi45MzMzKy0wLjE4OTkgICAgICAgID8gbWlnaHQgYmUgMS4wMTk2
eCBzbG93ZXIKICAgY2hhaW4tZ2V0dGVyLWFjY2VzcyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAxMS40OTI5Ky0wLjY4ODEgICAgICAgICAgIDEwLjg3MzArLTAuMTgzMiAgICAgICAgICBt
aWdodCBiZSAxLjA1NzB4IGZhc3RlcgogICBjbXBlcS1vYmotdG8tb2JqLW90aGVyICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA4LjE0OTErLTAuMjcxNyAgICAgPyAgICAgIDguNDI1MystMC42
ODQwICAgICAgICA/IG1pZ2h0IGJlIDEuMDMzOXggc2xvd2VyCiAgIGNvbnN0YW50LXRlc3QgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQuNzQ0NCstMC4xNzk1ICAgICAgICAg
ICAgNC42OTcxKy0wLjA2NzIgICAgICAgICAgbWlnaHQgYmUgMS4wMTAxeCBmYXN0ZXIKICAgY3Jl
YXRlLWxvdHMtb2YtZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgOC44MTE0Ky0x
LjI2NzkgICAgID8gICAgICA5LjE2NjkrLTAuNjMzNyAgICAgICAgPyBtaWdodCBiZSAxLjA0MDN4
IHNsb3dlcgogICBjc2UtbmV3LWFycmF5LWJ1ZmZlciAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAyLjUxODQrLTAuMDkwOSAgICAgICAgICAgIDIuNDU2NSstMC4xMDI3ICAgICAgICAgIG1p
Z2h0IGJlIDEuMDI1MnggZmFzdGVyCiAgIGNzZS1uZXctYXJyYXkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDIuNjM3MystMC4xNjAxICAgICA/ICAgICAgMi42NjExKy0wLjEy
NzAgICAgICAgID8KICAgY3VzdG9tLXNldHRlci1nZXR0ZXItYXMtcHV0LWdldC1ieS1pZCAgICAg
ICAgICAgICAgMC41MTkyKy0wLjAxMjcgICAgID8gICAgICAwLjc2MjIrLTAuNTcxNSAgICAgICAg
PyBtaWdodCBiZSAxLjQ2Nzl4IHNsb3dlcgogICBEYXRhVmlldy1jdXN0b20tcHJvcGVydGllcyAg
ICAgICAgICAgICAgICAgICAgICAgIDMyLjYzMjYrLTEuNDE1MyAgICAgICAgICAgMzIuNDY1MCst
MC41NTc3ICAgICAgICAKICAgZGVsYXktdGVhci1vZmYtYXJndW1lbnRzLXN0cmljdG1vZGUgICAg
ICAgICAgICAgICAxMi44OTczKy0wLjQ5MDQgICAgID8gICAgIDEzLjA1ODErLTAuNDU5NyAgICAg
ICAgPyBtaWdodCBiZSAxLjAxMjV4IHNsb3dlcgogICBkZWx0YWJsdWUtdmFyYXJncyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMTU0LjMwNzcrLTEuMDQ2NyAgICAgICAgICAxNTMuODU4
MCstMi41Mjk0ICAgICAgICAKICAgZGVzdHJ1Y3R1cmluZy1hcmd1bWVudHMgICAgICAgICAgICAg
ICAgICAgICAgICAgIDE1OC45MzE2Ky0wLjYyNzYgICAgICAgICAgMTU4LjIyNzQrLTIuMjA4MSAg
ICAgICAgCiAgIGRlc3RydWN0dXJpbmctcGFyYW1ldGVycy1vdmVycmlkZGVuLWJ5LWZ1bmN0aW9u
ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDAuNTAyNSstMC4wNTk3ICAgICAgICAgICAgMC40NzE0Ky0wLjAxMzYgICAgICAgICAgbWlnaHQg
YmUgMS4wNjU5eCBmYXN0ZXIKICAgZGVzdHJ1Y3R1cmluZy1zd2FwICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgNC42NjEyKy0wLjExMDQgICAgICAgICAgICA0LjY1MDgrLTAuMTU0MSAg
ICAgICAgCiAgIGRpcmVjdC1hcmd1bWVudHMtZ2V0Ynl2YWwgICAgICAgICAgICAgICAgICAgICAg
ICAgIDEuMzA2NSstMC4zNTIxICAgICAgICAgICAgMS4yMzQwKy0wLjA4NTggICAgICAgICAgbWln
aHQgYmUgMS4wNTg4eCBmYXN0ZXIKICAgZGl2LWJvb2xlYW4tZG91YmxlICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgNC42NzM5Ky0wLjExNjIgICAgID8gICAgICA0LjkxMzArLTAuNzc3
MCAgICAgICAgPyBtaWdodCBiZSAxLjA1MTJ4IHNsb3dlcgogICBkaXYtYm9vbGVhbiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3LjQxNjUrLTAuMTk2OCAgICAgICAgICAg
IDcuMjkzMCstMC4wMjUwICAgICAgICAgIG1pZ2h0IGJlIDEuMDE2OXggZmFzdGVyCiAgIGRvdWJs
ZS1nZXQtYnktdmFsLW91dC1vZi1ib3VuZHMgICAgICAgICAgICAgICAgICAgIDQuMDg0MystMC4x
MDY4ICAgICA/ICAgICAgNC4yNDE2Ky0wLjIzMzYgICAgICAgID8gbWlnaHQgYmUgMS4wMzg1eCBz
bG93ZXIKICAgZG91YmxlLXBvbGx1dGlvbi1nZXRieXZhbCAgICAgICAgICAgICAgICAgICAgICAg
ICAgOC4wMDExKy0wLjA5MjAgICAgID8gICAgICA4LjMyOTIrLTAuNDY2MiAgICAgICAgPyBtaWdo
dCBiZSAxLjA0MTB4IHNsb3dlcgogICBkb3VibGUtcG9sbHV0aW9uLXB1dGJ5b2Zmc2V0ICAgICAg
ICAgICAgICAgICAgICAgICAzLjY3MDMrLTAuMjAyNCAgICAgICAgICAgIDMuNjQ2NistMC4xMjMz
ICAgICAgICAKICAgZG91YmxlLXJlYWwtdXNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAyNC43NDEzKy0wLjM4OTIgICAgID8gICAgIDI1LjEwNTErLTAuMzk4NiAgICAgICAgPyBt
aWdodCBiZSAxLjAxNDd4IHNsb3dlcgogICBkb3VibGUtdG8taW50MzItdHlwZWQtYXJyYXktbm8t
aW5saW5lICAgICAgICAgICAgICAyLjE5NjMrLTAuMDQ3MyAgICAgPyAgICAgIDIuMjM0NystMC4w
NTM3ICAgICAgICA/IG1pZ2h0IGJlIDEuMDE3NXggc2xvd2VyCiAgIGRvdWJsZS10by1pbnQzMi10
eXBlZC1hcnJheSAgICAgICAgICAgICAgICAgICAgICAgIDIuMTEwMistMC4wMjM1ICAgICBeICAg
ICAgMi4wNDkwKy0wLjAyNDIgICAgICAgIF4gZGVmaW5pdGVseSAxLjAyOTl4IGZhc3RlcgogICBk
b3VibGUtdG8tdWludDMyLXR5cGVkLWFycmF5LW5vLWlubGluZSAgICAgICAgICAgICAyLjI3Nzkr
LTAuMTYyNCAgICAgICAgICAgIDIuMjQ0NSstMC4wNzg0ICAgICAgICAgIG1pZ2h0IGJlIDEuMDE0
OHggZmFzdGVyCiAgIGRvdWJsZS10by11aW50MzItdHlwZWQtYXJyYXkgICAgICAgICAgICAgICAg
ICAgICAgIDIuMDg5NistMC4wMzkyICAgICA/ICAgICAgMi4xMjEyKy0wLjA5NjggICAgICAgID8g
bWlnaHQgYmUgMS4wMTUxeCBzbG93ZXIKICAgZWxpZGFibGUtbmV3LW9iamVjdC1kYWcgICAgICAg
ICAgICAgICAgICAgICAgICAgICAzMC44ODQ3Ky0wLjkxNjQgICAgID8gICAgIDMxLjE5NDkrLTEu
NTMxMyAgICAgICAgPyBtaWdodCBiZSAxLjAxMDB4IHNsb3dlcgogICBlbGlkYWJsZS1uZXctb2Jq
ZWN0LXJvZmxjb3B0ZXIgICAgICAgICAgICAgICAgICAgIDMzLjU4MDQrLTAuMTc2NCAgICAgICAg
ICAgMzMuMzU3MistMS42MjcyICAgICAgICAKICAgZWxpZGFibGUtbmV3LW9iamVjdC10aGVuLWNh
bGwgICAgICAgICAgICAgICAgICAgICAyNi4yMzA5Ky0xLjU4NjggICAgID8gICAgIDI2LjQ1MzMr
LTAuNDAyNyAgICAgICAgPwogICBlbGlkYWJsZS1uZXctb2JqZWN0LXRyZWUgICAgICAgICAgICAg
ICAgICAgICAgICAgIDM0LjQyODErLTEuMjg2OCAgICAgICAgICAgMzMuOTExOCstMC43Njk4ICAg
ICAgICAgIG1pZ2h0IGJlIDEuMDE1MnggZmFzdGVyCiAgIGVtcHR5LXN0cmluZy1wbHVzLWludCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQuOTI5NCstMC40NDU2ICAgICAgICAgICAgNC44
OTk5Ky0wLjI3NTggICAgICAgIAogICBlbXNjcmlwdGVuLWN1YmUyaGFzaCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDI1LjM0MTkrLTAuMzQxNiAgICAgICAgICAgMjUuMTQzOCstMC4zNjA3
ICAgICAgICAKICAgZXhpdC1sZW5ndGgtb24tcGxhaW4tb2JqZWN0ICAgICAgICAgICAgICAgICAg
ICAgICAxOC4wOTQ3Ky0wLjU4OTEgICAgID8gICAgIDE4LjEzNTIrLTAuNjAyMSAgICAgICAgPwog
ICBleHRlcm5hbC1hcmd1bWVudHMtZ2V0Ynl2YWwgICAgICAgICAgICAgICAgICAgICAgICAxLjIy
ODArLTAuMTM4NyAgICAgICAgICAgIDEuMTYwMistMC4wNjI2ICAgICAgICAgIG1pZ2h0IGJlIDEu
MDU4NXggZmFzdGVyCiAgIGV4dGVybmFsLWFyZ3VtZW50cy1wdXRieXZhbCAgICAgICAgICAgICAg
ICAgICAgICAgIDIuMjg2MistMC4wOTk4ICAgICAgICAgICAgMi4yMzE5Ky0wLjA5NjMgICAgICAg
ICAgbWlnaHQgYmUgMS4wMjQzeCBmYXN0ZXIKICAgZml4ZWQtdHlwZWQtYXJyYXktc3RvcmFnZS12
YXItaW5kZXggICAgICAgICAgICAgICAgMS4yNTE1Ky0wLjA2MzMgICAgICAgICAgICAxLjI1MDgr
LTAuMDI2OCAgICAgICAgCiAgIGZpeGVkLXR5cGVkLWFycmF5LXN0b3JhZ2UgICAgICAgICAgICAg
ICAgICAgICAgICAgIDAuOTc1NSstMC4wNTg5ICAgICAgICAgICAgMC45NDkxKy0wLjAyMDUgICAg
ICAgICAgbWlnaHQgYmUgMS4wMjc4eCBmYXN0ZXIKICAgRmxvYXQzMkFycmF5LW1hdHJpeC1tdWx0
ICAgICAgICAgICAgICAgICAgICAgICAgICAgNC40NzY3Ky0wLjI0MDAgICAgID8gICAgICA0LjU3
MjYrLTAuNDEyMCAgICAgICAgPyBtaWdodCBiZSAxLjAyMTR4IHNsb3dlcgogICBGbG9hdDMyQXJy
YXktdG8tRmxvYXQ2NEFycmF5LXNldCAgICAgICAgICAgICAgICAgIDQ5LjczMDArLTEuMDM2NiAg
ICAgPyAgICAgNTEuNjIwNCstMi4xMzMxICAgICAgICA/IG1pZ2h0IGJlIDEuMDM4MHggc2xvd2Vy
CiAgIEZsb2F0NjRBcnJheS1hbGxvYy1sb25nLWxpdmVkICAgICAgICAgICAgICAgICAgICAgNTku
OTU5MCstMC43MzUwICAgICA/ICAgICA2Mi4xMTAyKy0yLjAzMDIgICAgICAgID8gbWlnaHQgYmUg
MS4wMzU5eCBzbG93ZXIKICAgRmxvYXQ2NEFycmF5LXRvLUludDE2QXJyYXktc2V0ICAgICAgICAg
ICAgICAgICAgICA1OS44NDY4Ky0wLjczNTAgICAgICAgICAgIDU5LjU4ODcrLTAuOTYyNyAgICAg
ICAgCiAgIGZvbGQtZG91YmxlLXRvLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MTMuMDMxMistMC42NTQ1ICAgICAgICAgICAxMi44NjM2Ky0wLjI2OTEgICAgICAgICAgbWlnaHQg
YmUgMS4wMTMweCBmYXN0ZXIKICAgZm9sZC1nZXQtYnktaWQtdG8tbXVsdGktZ2V0LWJ5LW9mZnNl
dC1yYXJlLWludCAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA3LjY1OTArLTAuNjQxOCAgICAgPyAgICAgIDcuNzk2MSstMC42MjUxICAgICAg
ICA/IG1pZ2h0IGJlIDEuMDE3OXggc2xvd2VyCiAgIGZvbGQtZ2V0LWJ5LWlkLXRvLW11bHRpLWdl
dC1ieS1vZmZzZXQgICAgICAgICAgICAgIDYuNTE1MCstMC41MDAwICAgICAgICAgICAgNi4zOTE2
Ky0wLjA4NzkgICAgICAgICAgbWlnaHQgYmUgMS4wMTkzeCBmYXN0ZXIKICAgZm9sZC1tdWx0aS1n
ZXQtYnktb2Zmc2V0LXRvLWdldC1ieS1vZmZzZXQgICAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNS42OTk1Ky0wLjQ1MjUgICAgID8gICAgICA1
Ljg1ODYrLTAuMzg4NCAgICAgICAgPyBtaWdodCBiZSAxLjAyNzl4IHNsb3dlcgogICBmb2xkLW11
bHRpLWdldC1ieS1vZmZzZXQtdG8tcG9seS1nZXQtYnktb2Zmc2V0ICAgCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUuNzYyOSstMC4zMTg1ICAg
ICA/ICAgICAgNS44NDU0Ky0wLjQzNTAgICAgICAgID8gbWlnaHQgYmUgMS4wMTQzeCBzbG93ZXIK
ICAgZm9sZC1tdWx0aS1wdXQtYnktb2Zmc2V0LXRvLXBvbHktcHV0LWJ5LW9mZnNldCAgIAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ljk3MjYr
LTAuOTA5MyAgICAgPyAgICAgIDcuMzgwMystMC44ODEyICAgICAgICA/IG1pZ2h0IGJlIDEuMDU4
NXggc2xvd2VyCiAgIGZvbGQtbXVsdGktcHV0LWJ5LW9mZnNldC10by1wdXQtYnktb2Zmc2V0ICAg
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUu
NTQ4NSstMC40NDIwICAgICA/ICAgICAgNS42NzY1Ky0wLjU1MzQgICAgICAgID8gbWlnaHQgYmUg
MS4wMjMxeCBzbG93ZXIKICAgZm9sZC1tdWx0aS1wdXQtYnktb2Zmc2V0LXRvLXJlcGxhY2Utb3It
dHJhbnNpdGlvbi1wdXQtYnktb2Zmc2V0ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMTAuMDUyNistMS4wNzc2ICAgICAgICAgICAgOS45MjIx
Ky0wLjU3NjUgICAgICAgICAgbWlnaHQgYmUgMS4wMTMyeCBmYXN0ZXIKICAgZm9sZC1wdXQtYnkt
aWQtdG8tbXVsdGktcHV0LWJ5LW9mZnNldCAgICAgICAgICAgICAgNy44OTI0Ky0wLjUyNDAgICAg
ID8gICAgICA4LjE1MTMrLTAuNDM3NSAgICAgICAgPyBtaWdodCBiZSAxLjAzMjh4IHNsb3dlcgog
ICBmb2xkLXB1dC1ieS12YWwtd2l0aC1zdHJpbmctdG8tbXVsdGktcHV0LWJ5LW9mZnNldCAgIAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3LjQ1
MDArLTAuMjAyMyAgICAgPyAgICAgIDcuNjc2MSstMC4xODkyICAgICAgICA/IG1pZ2h0IGJlIDEu
MDMwNHggc2xvd2VyCiAgIGZvbGQtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC10by1tdWx0aS1wdXQt
Ynktb2Zmc2V0ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDcuNjc1OSstMC40MTUyICAgICA/ICAgICAgNy44MzY0Ky0wLjI0NzcgICAgICAg
ID8gbWlnaHQgYmUgMS4wMjA5eCBzbG93ZXIKICAgZm9sZC1wdXQtc3RydWN0dXJlICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgNC43NjY4Ky0wLjExNjYgICAgICAgICAgICA0LjczNTEr
LTAuMTQzMCAgICAgICAgCiAgIGZvci1vZi1pdGVyYXRlLWFycmF5LWVudHJpZXMgICAgICAgICAg
ICAgICAgICAgICAgMTAuMTU3MistMC4yMzkzICAgICA/ICAgICAxMC40OTkzKy0wLjg5OTggICAg
ICAgID8gbWlnaHQgYmUgMS4wMzM3eCBzbG93ZXIKICAgZm9yLW9mLWl0ZXJhdGUtYXJyYXkta2V5
cyAgICAgICAgICAgICAgICAgICAgICAgICAgMy44NjI4Ky0wLjUyNTAgICAgICAgICAgICAzLjcx
MjYrLTAuMjAyMiAgICAgICAgICBtaWdodCBiZSAxLjA0MDR4IGZhc3RlcgogICBmb3Itb2YtaXRl
cmF0ZS1hcnJheS12YWx1ZXMgICAgICAgICAgICAgICAgICAgICAgICAzLjY4MDQrLTAuMzEwMSAg
ICAgICAgICAgIDMuMzYzNCstMC4wNzc5ICAgICAgICAgIG1pZ2h0IGJlIDEuMDk0M3ggZmFzdGVy
CiAgIGZyb3VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIu
MTg0MSstMC45NDMzICAgICAgICAgICAxMi4wNTM3Ky0wLjU0OTMgICAgICAgICAgbWlnaHQgYmUg
MS4wMTA4eCBmYXN0ZXIKICAgZnRsLWxpYnJhcnktaW5saW5pbmctZGF0YXZpZXcgICAgICAgICAg
ICAgICAgICAgICA1OC42MDgzKy0wLjkxODMgICAgICAgICAgIDU3LjkzNDkrLTIuMTQyOCAgICAg
ICAgICBtaWdodCBiZSAxLjAxMTZ4IGZhc3RlcgogICBmdGwtbGlicmFyeS1pbmxpbmluZyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDIzLjY0NzArLTEuMDgxNyAgICAgICAgICAgMjMuNTg1
MystMC4xNTI2ICAgICAgICAKICAgZnRsLXBvbHltb3JwaGljLWJpdGFuZCAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDExMC4xNjI0Ky0xLjkxMzYgICAgID8gICAgMTI2LjM0MDQrLTQwLjQwMzkg
ICAgICAgPyBtaWdodCBiZSAxLjE0Njl4IHNsb3dlcgogICBmdGwtcG9seW1vcnBoaWMtYml0b3Ig
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEwLjg5MzgrLTMuMzY3NiAgICAgICAgICAxMTAu
NjA2NistMC44NTI5ICAgICAgICAKICAgZnRsLXBvbHltb3JwaGljLWJpdHhvciAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDExMS4zNTczKy0zLjY0ODggICAgICAgICAgMTA5Ljk3MjgrLTAuMzU3
NCAgICAgICAgICBtaWdodCBiZSAxLjAxMjZ4IGZhc3RlcgogICBmdGwtcG9seW1vcnBoaWMtZGl2
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDM3Ljc1NzMrLTMuNzQzMiAgICAgPyAgICA0
NTQuMjM1MSstNDQuNzQ4MyAgICAgICA/IG1pZ2h0IGJlIDEuMDM3Nnggc2xvd2VyCiAgIGZ0bC1w
b2x5bW9ycGhpYy1sc2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAxMzYuMDYzNCstMS4z
NDAxICAgICA/ICAgIDEzNy4yODg1Ky0xLjU2MTQgICAgICAgID8KICAgZnRsLXBvbHltb3JwaGlj
LW11bCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxMy41NDg4Ky0yLjM3NzYgICAgID8g
ICAgMjEzLjYwMDMrLTEuMTc1NCAgICAgICAgPwogICBmdGwtcG9seW1vcnBoaWMtcnNoaWZ0ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMTM3LjY5NDUrLTMuMzIyMCAgICAgICAgICAxMzcuMzg0
OCstMS4xMTU5ICAgICAgICAKICAgZnRsLXBvbHltb3JwaGljLVN0cmluZ0Zyb21DaGFyQ29kZSAg
ICAgICAgICAgICAgIDE3OS40NDgyKy0wLjQzNjkgICAgID8gICAgMTg4LjUxMDgrLTIyLjY1MTgg
ICAgICAgPyBtaWdodCBiZSAxLjA1MDV4IHNsb3dlcgogICBmdGwtcG9seW1vcnBoaWMtc3ViICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYwLjI5NDYrLTMuMjQzOCAgICAgICAgICAxNTku
NjA1NystMC43ODMyICAgICAgICAKICAgZnRsLXBvbHltb3JwaGljLXVyc2hpZnQgICAgICAgICAg
ICAgICAgICAgICAgICAgIDE1MS4wNDM4Ky0zLjM3MjEgICAgICAgICAgMTUwLjc5NTQrLTIuMTE4
MSAgICAgICAgCiAgIGZ1bmN0aW9uLWNhbGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDkuNjg1MCstMC44MDQwICAgICAgICAgICAgOS4wOTIyKy0wLjA5NzMgICAgICAgICAg
bWlnaHQgYmUgMS4wNjUyeCBmYXN0ZXIKICAgZnVuY3Rpb24tZG90LWFwcGx5ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMi4xMTgwKy0wLjEwOTIgICAgICAgICAgICAyLjA5NTQrLTAu
MTI1NCAgICAgICAgICBtaWdodCBiZSAxLjAxMDh4IGZhc3RlcgogICBmdW5jdGlvbi10ZXN0ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzLjMyMDYrLTAuMjM3OCAgICAgICAg
ICAgIDMuMjMxNCstMC4wNTQ1ICAgICAgICAgIG1pZ2h0IGJlIDEuMDI3NnggZmFzdGVyCiAgIGZ1
bmN0aW9uLXdpdGgtZXZhbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODEuOTIzNSst
MC4zNDI4ICAgICAhICAgICA4My40ODQ3Ky0wLjkxMDEgICAgICAgICEgZGVmaW5pdGVseSAxLjAx
OTF4IHNsb3dlcgogICBnY3NlLXBvbHktZ2V0LWxlc3Mtb2J2aW91cyAgICAgICAgICAgICAgICAg
ICAgICAgIDE0LjQ0MTcrLTAuNDgwNiAgICAgPyAgICAgMTQuNjczNSstMC40MDkwICAgICAgICA/
IG1pZ2h0IGJlIDEuMDE2MXggc2xvd2VyCiAgIGdjc2UtcG9seS1nZXQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMTUuMjc5NystMS43MTY4ICAgICAgICAgICAxNC43NjkwKy0w
LjQ0NzQgICAgICAgICAgbWlnaHQgYmUgMS4wMzQ2eCBmYXN0ZXIKICAgZ2NzZSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMy40NTIyKy0wLjA4NzUgICAgICAg
ICAgICAzLjQwNDUrLTAuMTAwNyAgICAgICAgICBtaWdodCBiZSAxLjAxNDB4IGZhc3RlcgogICBn
ZW5lcmF0b3ItY3JlYXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjkwMDUr
LTAuMjU4NCAgICAgICAgICAgIDAuNzg3OSstMC4wNTMwICAgICAgICAgIG1pZ2h0IGJlIDEuMTQy
OXggZmFzdGVyCiAgIGdlbmVyYXRvci1maWIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOTYuMTgzNCstMC42NzU5ICAgICAgICAgICA5NS40MzQ5Ky0wLjcwNjQgICAgICAgIAog
ICBnZW5lcmF0b3ItZnVuY3Rpb24tY3JlYXRlICAgICAgICAgICAgICAgICAgICAgICAgICAzLjcz
MzQrLTAuMDY0OSAgICAgPyAgICAgIDMuOTQ0NystMC4yMDQ1ICAgICAgICA/IG1pZ2h0IGJlIDEu
MDU2Nnggc2xvd2VyCiAgIGdlbmVyYXRvci1zdW5zcGlkZXItYWNjZXNzLW5zaWV2ZSAgICAgICAg
ICAgICAgICAgIDYuMTg1MSstMC4zODIyICAgICAgICAgICAgNS45OTQzKy0wLjEyNjUgICAgICAg
ICAgbWlnaHQgYmUgMS4wMzE4eCBmYXN0ZXIKICAgZ2VuZXJhdG9yLXdpdGgtc2V2ZXJhbC10eXBl
cyAgICAgICAgICAgICAgICAgICAgIDMxMS4zMTc4Ky0xNC44OTAxICAgICAgICAgMzA5LjI1MjIr
LTEzLjgwMTMgICAgICAgCiAgIGdldC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVs
aW1pbmF0aW9uLXNpbXBsZSAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAyLjU5OTcrLTAuMDQxMSAgICAgPyAgICAgIDIuNjQwMistMC4wNjYx
ICAgICAgICA/IG1pZ2h0IGJlIDEuMDE1Nnggc2xvd2VyCiAgIGdldC1ieS1pZC1iaW1vcnBoaWMt
Y2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQuNzkwMCstMC4yOTQ4ICAgICAgICAgICAgNC42
NzUzKy0wLjA2ODUgICAgICAgICAgbWlnaHQgYmUgMS4wMjQ1eCBmYXN0ZXIKICAgZ2V0LWJ5LWlk
LWNoYWluLWZyb20tdHJ5LWJsb2NrICAgICAgICAgICAgICAgICAgICAgMi4zNDg4Ky0wLjA1MjYg
ICAgICAgICAgICAyLjI5ODUrLTAuMDY0MSAgICAgICAgICBtaWdodCBiZSAxLjAyMTl4IGZhc3Rl
cgogICBnZXQtYnktaWQtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uICAgICAgICAgICAgICAz
Ljk0MjQrLTAuMDc1MCAgICAgPyAgICAgIDMuOTczNystMC4xODIzICAgICAgICA/CiAgIGdldC1i
eS1pZC1wcm90by1vci1zZWxmICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkuNDQyMystMC40
Mzk2ICAgICAgICAgICAgOS4wMjk5Ky0wLjM3MDggICAgICAgICAgbWlnaHQgYmUgMS4wNDU3eCBm
YXN0ZXIKICAgZ2V0LWJ5LWlkLXF1YWRtb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlv
bi1zaW1wbGUgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMi45NjYzKy0wLjA4NzEgICAgID8gICAgICAzLjA4NDErLTAuMzQ1MyAgICAgICAg
PyBtaWdodCBiZSAxLjAzOTd4IHNsb3dlcgogICBnZXQtYnktaWQtc2VsZi1vci1wcm90byAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDEwLjA4NzIrLTIuMDAzNCAgICAgICAgICAgIDkuNzY5Mist
MS44NzU1ICAgICAgICAgIG1pZ2h0IGJlIDEuMDMyNXggZmFzdGVyCiAgIGdldC1ieS12YWwtb3V0
LW9mLWJvdW5kcyAgICAgICAgICAgICAgICAgICAgICAgICAgIDQuMjM3NistMC4yODI5ICAgICA/
ICAgICAgNC41ODg3Ky0xLjIyMjYgICAgICAgID8gbWlnaHQgYmUgMS4wODI4eCBzbG93ZXIKICAg
Z2V0LWJ5LXZhbC13aXRoLXN0cmluZy1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0
aW9uLXNpbXBsZSAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAyLjc4MzUrLTAuMTE3NiAgICAgPyAgICAgIDIuOTA5MSstMC40OTU0ICAgICAg
ICA/IG1pZ2h0IGJlIDEuMDQ1MXggc2xvd2VyCiAgIGdldC1ieS12YWwtd2l0aC1zdHJpbmctYmlt
b3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbiAgIAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2LjEyMTIrLTAuMDY5NCAgICAgICAg
ICAgIDYuMTA0NCstMC4xMzAzICAgICAgICAKICAgZ2V0LWJ5LXZhbC13aXRoLXN0cmluZy1jaGFp
bi1mcm9tLXRyeS1ibG9jayAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAyLjQ3NDUrLTAuMDk5MyAgICAgICAgICAgIDIuNDQyOCstMC4wNjk0
ICAgICAgICAgIG1pZ2h0IGJlIDEuMDEzMHggZmFzdGVyCiAgIGdldC1ieS12YWwtd2l0aC1zdHJp
bmctY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uICAgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUuNjM4MSstMC4xOTk1ICAgICAgICAgICAg
NS42MTM2Ky0wLjIzMjYgICAgICAgIAogICBnZXQtYnktdmFsLXdpdGgtc3RyaW5nLXByb3RvLW9y
LXNlbGYgICAgICAgICAgICAgIDEwLjQxNTIrLTEuNTM2OSAgICAgPyAgICAgMTAuNTE3NCstMS41
Mzg1ICAgICAgICA/CiAgIGdldC1ieS12YWwtd2l0aC1zdHJpbmctcXVhZG1vcnBoaWMtY2hlY2st
c3RydWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZSAgIAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzLjA3NzgrLTAuMDUwMCAgICAgPyAgICAgIDMu
MTc4NSstMC4yNTQ0ICAgICAgICA/IG1pZ2h0IGJlIDEuMDMyN3ggc2xvd2VyCiAgIGdldC1ieS12
YWwtd2l0aC1zdHJpbmctc2VsZi1vci1wcm90byAgICAgICAgICAgICAgMTAuNjM0NistMS42NTA1
ICAgICAgICAgICAxMC42MTM2Ky0xLjQzMTkgICAgICAgIAogICBnZXQtYnktdmFsLXdpdGgtc3lt
Ym9sLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlICAgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMuMTE2NSst
MC4wNTE1ICAgICA/ICAgICAgMy4xODQzKy0wLjExODcgICAgICAgID8gbWlnaHQgYmUgMS4wMjE4
eCBzbG93ZXIKICAgZ2V0LWJ5LXZhbC13aXRoLXN5bWJvbC1iaW1vcnBoaWMtY2hlY2stc3RydWN0
dXJlLWVsaW1pbmF0aW9uICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMTIuMDU1NCstMC4xNDQzICAgICA/ICAgICAxMi41MjUxKy0wLjQ3MTgg
ICAgICAgID8gbWlnaHQgYmUgMS4wMzkweCBzbG93ZXIKICAgZ2V0LWJ5LXZhbC13aXRoLXN5bWJv
bC1jaGFpbi1mcm9tLXRyeS1ibG9jayAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAyLjU3NDUrLTAuMjgyMCAgICAgICAgICAgIDIuNDQwNyst
MC4wNjk0ICAgICAgICAgIG1pZ2h0IGJlIDEuMDU0OHggZmFzdGVyCiAgIGdldC1ieS12YWwtd2l0
aC1zeW1ib2wtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uICAgCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIuMTg5NystMS4yOTEwICAgICAg
ICAgICAxMS41MTAyKy0wLjQyMTYgICAgICAgICAgbWlnaHQgYmUgMS4wNTkweCBmYXN0ZXIKICAg
Z2V0LWJ5LXZhbC13aXRoLXN5bWJvbC1wcm90by1vci1zZWxmICAgICAgICAgICAgICAxMS4wNTUz
Ky0xLjUzODcgICAgICAgICAgIDEwLjg5NTErLTEuNzM5OCAgICAgICAgICBtaWdodCBiZSAxLjAx
NDd4IGZhc3RlcgogICBnZXQtYnktdmFsLXdpdGgtc3ltYm9sLXF1YWRtb3JwaGljLWNoZWNrLXN0
cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMy44MjQ2Ky0wLjM1NjkgICAgICAgICAgICAzLjcw
NDUrLTAuMDgzNyAgICAgICAgICBtaWdodCBiZSAxLjAzMjR4IGZhc3RlcgogICBnZXQtYnktdmFs
LXdpdGgtc3ltYm9sLXNlbGYtb3ItcHJvdG8gICAgICAgICAgICAgIDEwLjI1NzUrLTEuNDA1MCAg
ICAgPyAgICAgMTAuODc2OSstMS42MjcxICAgICAgICA/IG1pZ2h0IGJlIDEuMDYwNHggc2xvd2Vy
CiAgIGdldF9jYWxsZWVfbW9ub21vcnBoaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIu
NDIyNistMC4wNzc0ICAgICA/ICAgICAgMi41ODE5Ky0wLjM3MzEgICAgICAgID8gbWlnaHQgYmUg
MS4wNjU4eCBzbG93ZXIKICAgZ2V0X2NhbGxlZV9wb2x5bW9ycGhpYyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMy43OTY1Ky0wLjQzNDMgICAgICAgICAgICAzLjYzNDUrLTAuMTQ5NCAgICAg
ICAgICBtaWdodCBiZSAxLjA0NDZ4IGZhc3RlcgogICBnZXR0ZXItbm8tYWN0aXZhdGlvbiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAzLjU4NjIrLTAuMTIwNiAgICAgICAgICAgIDMuNTUx
NCstMC4wMjA5ICAgICAgICAKICAgZ2V0dGVyLXByb3RvdHlwZSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgNC45NTM2Ky0wLjM4NzIgICAgICAgICAgICA0LjcyMjcrLTAuMDQzNSAg
ICAgICAgICBtaWdodCBiZSAxLjA0ODl4IGZhc3RlcgogICBnZXR0ZXItcmljaGFyZHMtdHJ5LWNh
dGNoICAgICAgICAgICAgICAgICAgICAgICAgOTk2LjMxNDMrLTIxLjQwNzYgICAgICAgICA5OTAu
MzMxMSstMTQuOTU4NCAgICAgICAKICAgZ2V0dGVyLXJpY2hhcmRzICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA3Ny40OTE1Ky0yLjA4MTUgICAgICAgICAgIDc2LjA3NTArLTIuMDgy
NyAgICAgICAgICBtaWdodCBiZSAxLjAxODZ4IGZhc3RlcgogICBnZXR0ZXIgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LjUyNTErLTAuNTk0NSAgICAgICAgICAg
IDQuMjE3MSstMC4wNjI4ICAgICAgICAgIG1pZ2h0IGJlIDEuMDczMXggZmFzdGVyCiAgIGdsb2Jh
bC1vYmplY3QtYWNjZXNzLXdpdGgtbXV0YXRpbmctc3RydWN0dXJlICAgCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQuNTI5NistMC4wNzY3ICAg
ICA/ICAgICAgNC42ODIwKy0wLjE5MDggICAgICAgID8gbWlnaHQgYmUgMS4wMzM3eCBzbG93ZXIK
ICAgZ2xvYmFsLXZhci1jb25zdC1pbmZlci1maXJlLWZyb20tb3B0ICAgICAgICAgICAgICAgMC43
MjAwKy0wLjAwNDkgICAgICAgICAgICAwLjcxNTQrLTAuMDEzNCAgICAgICAgCiAgIGdsb2JhbC12
YXItY29uc3QtaW5mZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuNjkyNCstMC4wNTgz
ICAgICA/ICAgICAgMC43Mzg0Ky0wLjIxNTUgICAgICAgID8gbWlnaHQgYmUgMS4wNjY1eCBzbG93
ZXIKICAgaGFyZC1vdmVyZmxvdy1jaGVjay1lcXVhbCAgICAgICAgICAgICAgICAgICAgICAgICAy
My4xNTg5Ky0xLjA0NzIgICAgID8gICAgIDIzLjk1MDYrLTAuMzc0MyAgICAgICAgPyBtaWdodCBi
ZSAxLjAzNDJ4IHNsb3dlcgogICBoYXJkLW92ZXJmbG93LWNoZWNrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDI0LjIxMDErLTEuODI2NCAgICAgICAgICAgMjIuNjUxMCstMC4zMzI1ICAg
ICAgICAgIG1pZ2h0IGJlIDEuMDY4OHggZmFzdGVyCiAgIEhhc2hNYXAtcHV0LWdldC1pdGVyYXRl
LWtleXMgICAgICAgICAgICAgICAgICAgICAgMjIuNTE0NCstMC44NTE5ICAgICA/ICAgICAyMy4w
NDM4Ky0xLjIwMDMgICAgICAgID8gbWlnaHQgYmUgMS4wMjM1eCBzbG93ZXIKICAgSGFzaE1hcC1w
dXQtZ2V0LWl0ZXJhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAyMi41MzQzKy0xLjAyODIg
ICAgID8gICAgIDIyLjYyMDkrLTAuODgzOSAgICAgICAgPwogICBIYXNoTWFwLXN0cmluZy1wdXQt
Z2V0LWl0ZXJhdGUgICAgICAgICAgICAgICAgICAgIDIzLjYzNDQrLTEuMjY4OCAgICAgPyAgICAg
MjMuODA4OCstMC43NzA1ICAgICAgICA/CiAgIGhvaXN0LW1ha2Utcm9wZSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDMuODY0NSstMC4yOTQ0ICAgICA/ICAgICAgMy45NjYxKy0w
LjM0ODggICAgICAgID8gbWlnaHQgYmUgMS4wMjYzeCBzbG93ZXIKICAgaG9pc3QtcG9seS1jaGVj
ay1zdHJ1Y3R1cmUtZWZmZWN0ZnVsLWxvb3AgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMy4zNjUwKy0wLjI5NDAgICAgICAgICAgICAzLjI2
MTgrLTAuMDE3OSAgICAgICAgICBtaWdodCBiZSAxLjAzMTZ4IGZhc3RlcgogICBob2lzdC1wb2x5
LWNoZWNrLXN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAyLjUyODgrLTAuMTA4NCAg
ICAgPyAgICAgIDIuNTk0OSstMC4xMjIxICAgICAgICA/IG1pZ2h0IGJlIDEuMDI2MXggc2xvd2Vy
CiAgIGltdWwtZG91YmxlLW9ubHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIu
OTg1NystMC4xMDAwICAgICA/ICAgICAgMy4wNjM3Ky0wLjExMjUgICAgICAgID8gbWlnaHQgYmUg
MS4wMjYxeCBzbG93ZXIKICAgaW11bC1pbnQtb25seSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgNS4wMDQ0Ky0wLjM1ODIgICAgICAgICAgICA0Ljk5NzQrLTAuMjc3NyAgICAg
ICAgCiAgIGltdWwtbWl4ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDMuMzA4NystMC4xMjI4ICAgICA/ICAgICAgMy4zNjYzKy0wLjE5MDYgICAgICAgID8gbWlnaHQg
YmUgMS4wMTc0eCBzbG93ZXIKICAgaW4tZm91ci1jYXNlcyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAxMy45MTMwKy0wLjIxNTEgICAgID8gICAgIDE0LjA3NTIrLTAuMjIzMCAg
ICAgICAgPyBtaWdodCBiZSAxLjAxMTd4IHNsb3dlcgogICBpbi1vbmUtY2FzZS1mYWxzZSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4LjE0NDErLTAuMDk0NCAgICAgPyAgICAgIDgu
MTk0MystMC4wNjYyICAgICAgICA/CiAgIGluLW9uZS1jYXNlLXRydWUgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDguMjIwMistMC4xMjU2ICAgICA/ICAgICAgOC4yOTY0Ky0wLjE3
OTkgICAgICAgID8KICAgaW4tdHdvLWNhc2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOS4xOTE3Ky0yLjQ1NDEgICAgICAgICAgICA4LjU2MDQrLTAuNjMwMCAgICAgICAg
ICBtaWdodCBiZSAxLjA3Mzd4IGZhc3RlcgogICBpbmRleGVkLXByb3BlcnRpZXMtaW4tb2JqZWN0
cyAgICAgICAgICAgICAgICAgICAgICAyLjgzODIrLTAuMDM4MSAgICAgICAgICAgIDIuODI5MSst
MC4wODUxICAgICAgICAKICAgaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLW1vdi1uby1pbmxpbmUg
ICAgICAgICAgICAgMi42NzcyKy0wLjA2MjMgICAgID8gICAgICAyLjcxNDkrLTAuMDY2NiAgICAg
ICAgPyBtaWdodCBiZSAxLjAxNDF4IHNsb3dlcgogICBpbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4t
bW92ICAgICAgICAgICAgICAgICAgICAgICA2LjY1MTMrLTAuNTAwMCAgICAgPyAgICAgIDYuNjcw
NCstMC4zMzQwICAgICAgICA/CiAgIGluZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1wdXQtdG8tc2Nv
cGUtbm8taW5saW5lICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDkuNzUyOSstMC40Mzg3ICAgICAgICAgICAgOS42Mzc3Ky0wLjM4MTAgICAg
ICAgICAgbWlnaHQgYmUgMS4wMTIweCBmYXN0ZXIKICAgaW5mZXItY2xvc3VyZS1jb25zdC10aGVu
LXB1dC10by1zY29wZSAgICAgICAgICAgICAyMi43MjY2Ky0wLjQ2NzggICAgICAgICAgIDIyLjI4
MTQrLTEuMDE3MiAgICAgICAgICBtaWdodCBiZSAxLjAyMDB4IGZhc3RlcgogICBpbmZlci1jbG9z
dXJlLWNvbnN0LXRoZW4tcmVlbnRlci1uby1pbmxpbmUgICAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0My45NjcwKy0wLjgwMjUgICAgID8gICAg
IDQ0Ljc1MzIrLTAuODg4NyAgICAgICAgPyBtaWdodCBiZSAxLjAxNzl4IHNsb3dlcgogICBpbmZl
ci1jbG9zdXJlLWNvbnN0LXRoZW4tcmVlbnRlciAgICAgICAgICAgICAgICAgIDIzLjc5OTArLTEu
NDQ0NiAgICAgICAgICAgMjMuMzg5NCstMC44NzgzICAgICAgICAgIG1pZ2h0IGJlIDEuMDE3NXgg
ZmFzdGVyCiAgIGluZmVyLWNvbnN0YW50LWdsb2JhbC1wcm9wZXJ0eSAgICAgICAgICAgICAgICAg
ICAgIDMuNDk5MistMC4xNDk0ICAgICA/ICAgICAgMy41MDA0Ky0wLjE0ODcgICAgICAgID8KICAg
aW5mZXItY29uc3RhbnQtcHJvcGVydHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgMi42Mjcy
Ky0wLjA5MzkgICAgID8gICAgICAyLjc0MDArLTAuMTA2OSAgICAgICAgPyBtaWdodCBiZSAxLjA0
Mjl4IHNsb3dlcgogICBpbmZlci1vbmUtdGltZS1jbG9zdXJlLXRlbi12YXJzICAgICAgICAgICAg
ICAgICAgICA1LjA1OTMrLTAuMTY3NSAgICAgICAgICAgIDQuOTA2OCstMC4wMzg5ICAgICAgICAg
IG1pZ2h0IGJlIDEuMDMxMXggZmFzdGVyCiAgIGluZmVyLW9uZS10aW1lLWNsb3N1cmUtdHdvLXZh
cnMgICAgICAgICAgICAgICAgICAgIDQuNTU0NCstMC4wNTQwICAgICAgICAgICAgNC40ODY3Ky0w
LjA1MjggICAgICAgICAgbWlnaHQgYmUgMS4wMTUxeCBmYXN0ZXIKICAgaW5mZXItb25lLXRpbWUt
Y2xvc3VyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNC43MTI2Ky0wLjM4NzIgICAgICAg
ICAgICA0LjQ5MTcrLTAuMDc1OSAgICAgICAgICBtaWdodCBiZSAxLjA0OTJ4IGZhc3RlcgogICBp
bmZlci1vbmUtdGltZS1kZWVwLWNsb3N1cmUgICAgICAgICAgICAgICAgICAgICAgICA4LjEzNTcr
LTAuNzQwMCAgICAgICAgICAgIDcuOTQ1MSstMC4yMTc4ICAgICAgICAgIG1pZ2h0IGJlIDEuMDI0
MHggZmFzdGVyCiAgIGlubGluZS1hcmd1bWVudHMtYWNjZXNzICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDMuNzQwOCstMC4wODM1ICAgICAgICAgICAgMy42Mjk2Ky0wLjIwNDQgICAgICAgICAg
bWlnaHQgYmUgMS4wMzA2eCBmYXN0ZXIKICAgaW5saW5lLWFyZ3VtZW50cy1hbGlhc2VkLWFjY2Vz
cyAgICAgICAgICAgICAgICAgICAgMy42NDM0Ky0wLjEyMDkgICAgID8gICAgICAzLjc2NzkrLTAu
MjI5MCAgICAgICAgPyBtaWdodCBiZSAxLjAzNDJ4IHNsb3dlcgogICBpbmxpbmUtYXJndW1lbnRz
LWxvY2FsLWVzY2FwZSAgICAgICAgICAgICAgICAgICAgICAzLjcyODArLTAuMjA0MCAgICAgPyAg
ICAgIDMuODMwOSstMC4yMjQwICAgICAgICA/IG1pZ2h0IGJlIDEuMDI3Nnggc2xvd2VyCiAgIGlu
bGluZS1nZXQtc2NvcGVkLXZhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMuMTg0OCst
MC4zNDIzICAgICA/ICAgICAgMy4xOTc3Ky0wLjI1OTMgICAgICAgID8KICAgaW5saW5lZC1wdXQt
YnktaWQtdHJhbnNpdGlvbiAgICAgICAgICAgICAgICAgICAgICAxMC42MDY3Ky0wLjYxNzkgICAg
ICAgICAgIDEwLjM5MzIrLTAuNTUwMCAgICAgICAgICBtaWdodCBiZSAxLjAyMDV4IGZhc3Rlcgog
ICBpbmxpbmVkLXB1dC1ieS12YWwtd2l0aC1zdHJpbmctdHJhbnNpdGlvbiAgIAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQyLjg4MzErLTEuMjc3
MCAgICAgPyAgICAgNDQuMDA0NistMS42ODMzICAgICAgICA/IG1pZ2h0IGJlIDEuMDI2Mnggc2xv
d2VyCiAgIGlubGluZWQtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC10cmFuc2l0aW9uICAgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDIuODA5Nyst
MS43NjA5ICAgICA/ICAgICA0My44MTIyKy0xLjM1OTggICAgICAgID8gbWlnaHQgYmUgMS4wMjM0
eCBzbG93ZXIKICAgaW5zdGFuY2VvZi1ib3VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAyMC43MTY5Ky0xLjE2MDAgICAgID8gICAgIDIwLjc4NzcrLTAuMzE5NSAgICAgICAgPwog
ICBpbnQtb3Itb3RoZXItYWJzLXRoZW4tZ2V0LWJ5LXZhbCAgICAgICAgICAgICAgICAgICA0LjQ1
MDgrLTAuMDk3NiAgICAgICAgICAgIDQuNDQwMCstMC4wNzc5ICAgICAgICAKICAgaW50LW9yLW90
aGVyLWFicy16ZXJvLXRoZW4tZ2V0LWJ5LXZhbCAgICAgICAgICAgICAxNS44MzI4Ky0wLjUxOTIg
ICAgICAgICAgIDE1LjYyMDgrLTAuMzQ4NiAgICAgICAgICBtaWdodCBiZSAxLjAxMzZ4IGZhc3Rl
cgogICBpbnQtb3Itb3RoZXItYWRkLXRoZW4tZ2V0LWJ5LXZhbCAgICAgICAgICAgICAgICAgICA0
LjE4OTArLTAuMDk0NSAgICAgICAgICAgIDQuMTYwNSstMC4wODMwICAgICAgICAKICAgaW50LW9y
LW90aGVyLWFkZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNC44MDUwKy0wLjAz
ODcgICAgID8gICAgICA0Ljk1NTgrLTAuMjAzOCAgICAgICAgPyBtaWdodCBiZSAxLjAzMTR4IHNs
b3dlcgogICBpbnQtb3Itb3RoZXItZGl2LXRoZW4tZ2V0LWJ5LXZhbCAgICAgICAgICAgICAgICAg
ICAzLjkzNzYrLTAuMjYxMCAgICAgICAgICAgIDMuODQ0NSstMC4wNjUxICAgICAgICAgIG1pZ2h0
IGJlIDEuMDI0MnggZmFzdGVyCiAgIGludC1vci1vdGhlci1tYXgtdGhlbi1nZXQtYnktdmFsICAg
ICAgICAgICAgICAgICAgIDMuOTU3MCstMC4yODIzICAgICAgICAgICAgMy45NTQ1Ky0wLjIzOTcg
ICAgICAgIAogICBpbnQtb3Itb3RoZXItbWluLXRoZW4tZ2V0LWJ5LXZhbCAgICAgICAgICAgICAg
ICAgICAzLjg1MDUrLTAuMDg2NyAgICAgPyAgICAgIDMuODg0MCstMC4xNTk1ICAgICAgICA/CiAg
IGludC1vci1vdGhlci1tb2QtdGhlbi1nZXQtYnktdmFsICAgICAgICAgICAgICAgICAgIDMuNzQz
MCstMC4xMjkyICAgICAgICAgICAgMy43NDEwKy0wLjEzMzkgICAgICAgIAogICBpbnQtb3Itb3Ro
ZXItbXVsLXRoZW4tZ2V0LWJ5LXZhbCAgICAgICAgICAgICAgICAgICAzLjY0ODUrLTAuMTAyOSAg
ICAgPyAgICAgIDMuNjk0OSstMC4yNTAyICAgICAgICA/IG1pZ2h0IGJlIDEuMDEyN3ggc2xvd2Vy
CiAgIGludC1vci1vdGhlci1uZWctdGhlbi1nZXQtYnktdmFsICAgICAgICAgICAgICAgICAgIDQu
MTIwMistMC4wNjgxICAgICAgICAgICAgNC4xMTY5Ky0wLjA1NjYgICAgICAgIAogICBpbnQtb3It
b3RoZXItbmVnLXplcm8tdGhlbi1nZXQtYnktdmFsICAgICAgICAgICAgIDE1LjgxMDcrLTAuNzg3
MCAgICAgICAgICAgMTUuNTI5OCstMC4zNjE2ICAgICAgICAgIG1pZ2h0IGJlIDEuMDE4MXggZmFz
dGVyCiAgIGludC1vci1vdGhlci1zdWItdGhlbi1nZXQtYnktdmFsICAgICAgICAgICAgICAgICAg
IDQuMTMzMSstMC4wNzk0ICAgICA/ICAgICAgNC4xNTgzKy0wLjIxMDEgICAgICAgID8KICAgaW50
LW9yLW90aGVyLXN1YiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMy41NzIwKy0w
LjEyOTAgICAgICAgICAgICAzLjUyODgrLTAuMjA2NCAgICAgICAgICBtaWdodCBiZSAxLjAxMjN4
IGZhc3RlcgogICBpbnQtb3ZlcmZsb3ctbG9jYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA0LjEyNjArLTAuMDU2NiAgICAgICAgICAgIDQuMDg5OSstMC4wNjIyICAgICAgICAKICAg
SW50MTZBcnJheS1hbGxvYy1sb25nLWxpdmVkICAgICAgICAgICAgICAgICAgICAgICA0NC42NTMy
Ky0wLjk0NzQgICAgID8gICAgIDQ1LjI5OTArLTAuNzk4NCAgICAgICAgPyBtaWdodCBiZSAxLjAx
NDV4IHNsb3dlcgogICBJbnQxNkFycmF5LWJ1YmJsZS1zb3J0LXdpdGgtYnl0ZUxlbmd0aCAgICAg
ICAgICAgIDE2LjMyMTcrLTAuOTE2OSAgICAgICAgICAgMTYuMDI2NSstMC40OTYzICAgICAgICAg
IG1pZ2h0IGJlIDEuMDE4NHggZmFzdGVyCiAgIEludDE2QXJyYXktYnViYmxlLXNvcnQgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMTYuNjEyNistMS4wMTI0ICAgICA/ICAgICAxNi45MjgxKy0x
LjU0NDcgICAgICAgID8gbWlnaHQgYmUgMS4wMTkweCBzbG93ZXIKICAgSW50MTZBcnJheS1sb2Fk
LWludC1tdWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgMS41MjU1Ky0wLjA0MTQgICAgID8g
ICAgICAxLjU2NDErLTAuMDczNiAgICAgICAgPyBtaWdodCBiZSAxLjAyNTN4IHNsb3dlcgogICBJ
bnQxNkFycmF5LXRvLUludDMyQXJyYXktc2V0ICAgICAgICAgICAgICAgICAgICAgIDQ1LjUxMjUr
LTAuNjg2NSAgICAgICAgICAgNDQuNTcwMCstMC42NTU5ICAgICAgICAgIG1pZ2h0IGJlIDEuMDIx
MXggZmFzdGVyCiAgIEludDMyQXJyYXktYWxsb2MtbGFyZ2UgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMTIuMzI5OSstMC40Nzg2ICAgICAgICAgICAxMS45MTM2Ky0wLjM0MzkgICAgICAgICAg
bWlnaHQgYmUgMS4wMzQ5eCBmYXN0ZXIKICAgSW50MzJBcnJheS1hbGxvYy1sb25nLWxpdmVkICAg
ICAgICAgICAgICAgICAgICAgICA1MC45NTMwKy0yLjA3ODMgICAgICAgICAgIDUwLjY4MjkrLTIu
NDkyMiAgICAgICAgCiAgIEludDMyQXJyYXktYWxsb2MgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDMuMjc0NistMC4zMjk5ICAgICAgICAgICAgMy4wODY2Ky0wLjM1NjEgICAgICAg
ICAgbWlnaHQgYmUgMS4wNjA5eCBmYXN0ZXIKICAgSW50MzJBcnJheS1JbnQ4QXJyYXktdmlldy1h
bGxvYyAgICAgICAgICAgICAgICAgICAgNS44NzExKy0wLjE5NzIgICAgID8gICAgICA1LjkxOTUr
LTAuMTg1OCAgICAgICAgPwogICBpbnQ1Mi1zcGlsbCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA0LjU4MjgrLTAuMDkzNyAgICAgPyAgICAgIDQuNzg2NystMC40MDYxICAg
ICAgICA/IG1pZ2h0IGJlIDEuMDQ0NXggc2xvd2VyCiAgIEludDhBcnJheS1hbGxvYy1sb25nLWxp
dmVkICAgICAgICAgICAgICAgICAgICAgICAgNDEuNDgwMCstMS4yOTk5ICAgICAgICAgICA0MC42
MzUzKy0wLjg5ODAgICAgICAgICAgbWlnaHQgYmUgMS4wMjA4eCBmYXN0ZXIKICAgSW50OEFycmF5
LWxvYWQtd2l0aC1ieXRlTGVuZ3RoICAgICAgICAgICAgICAgICAgICAgMy4zODkzKy0wLjA2Mjcg
ICAgID8gICAgICAzLjQzMzErLTAuMDk0MSAgICAgICAgPyBtaWdodCBiZSAxLjAxMjl4IHNsb3dl
cgogICBJbnQ4QXJyYXktbG9hZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAz
LjQ0NzErLTAuMDkwNCAgICAgICAgICAgIDMuNDA5NCstMC4wNjE1ICAgICAgICAgIG1pZ2h0IGJl
IDEuMDExMXggZmFzdGVyCiAgIGludGVnZXItZGl2aWRlICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMTAuMjA2MSstMC4yMDEwICAgICA/ICAgICAxMC41ODgzKy0wLjU5MjYgICAg
ICAgID8gbWlnaHQgYmUgMS4wMzc1eCBzbG93ZXIKICAgaW50ZWdlci1tb2R1bG8gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMS43MzAyKy0wLjE0MzcgICAgICAgICAgICAxLjcy
MDMrLTAuMTk0NiAgICAgICAgCiAgIGlzLWJvb2xlYW4tZm9sZC10cmlja3kgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDQuMDU1NystMC4yNDk5ICAgICAgICAgICAgMy45MjI3Ky0wLjI5NzYg
ICAgICAgICAgbWlnaHQgYmUgMS4wMzM5eCBmYXN0ZXIKICAgaXMtYm9vbGVhbi1mb2xkICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMi43NDQ4Ky0wLjA2NTcgICAgICAgICAgICAy
LjczODgrLTAuMjIwNSAgICAgICAgCiAgIGlzLWZ1bmN0aW9uLWZvbGQtdHJpY2t5LWludGVybmFs
LWZ1bmN0aW9uICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDkuOTA5MSstMC4xMjk2ICAgICA/ICAgICAxMC4xNjY0Ky0wLjI2MjEgICAgICAg
ID8gbWlnaHQgYmUgMS4wMjYweCBzbG93ZXIKICAgaXMtZnVuY3Rpb24tZm9sZC10cmlja3kgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgNC4wOTU5Ky0wLjA4NzkgICAgID8gICAgICA0LjExMzAr
LTAuMTI3NiAgICAgICAgPwogICBpcy1mdW5jdGlvbi1mb2xkICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAyLjg0ODArLTAuMjc0NyAgICAgICAgICAgIDIuNzI2NSstMC4wODU5ICAg
ICAgICAgIG1pZ2h0IGJlIDEuMDQ0NnggZmFzdGVyCiAgIGlzLW51bWJlci1mb2xkLXRyaWNreSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMuOTgxNSstMC4wNzA0ICAgICAgICAgICAgMy45
MzEwKy0wLjA0ODAgICAgICAgICAgbWlnaHQgYmUgMS4wMTI5eCBmYXN0ZXIKICAgaXMtbnVtYmVy
LWZvbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMi43NTA0Ky0wLjA4MDgg
ICAgICAgICAgICAyLjY5NDMrLTAuMDM0NCAgICAgICAgICBtaWdodCBiZSAxLjAyMDh4IGZhc3Rl
cgogICBpcy1vYmplY3Qtb3ItbnVsbC1mb2xkLWZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAy
Ljc5NDgrLTAuMDY0MCAgICAgICAgICAgIDIuNzMwOCstMC4wNzQ5ICAgICAgICAgIG1pZ2h0IGJl
IDEuMDIzNXggZmFzdGVyCiAgIGlzLW9iamVjdC1vci1udWxsLWZvbGQtbGVzcy10cmlja3kgICAg
ICAgICAgICAgICAgIDQuMDg3NistMC4xMDgxICAgICAgICAgICAgNC4wNDU3Ky0wLjA0MTAgICAg
ICAgICAgbWlnaHQgYmUgMS4wMTA0eCBmYXN0ZXIKICAgaXMtb2JqZWN0LW9yLW51bGwtZm9sZC10
cmlja3kgICAgICAgICAgICAgICAgICAgICAgNC45MjY2Ky0wLjI2MTUgICAgICAgICAgICA0Ljg5
NTkrLTAuMDkwMSAgICAgICAgCiAgIGlzLW9iamVjdC1vci1udWxsLWZvbGQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDIuNzA3OCstMC4wMTgyICAgICA/ICAgICAgMi44MTYyKy0wLjIyMTMg
ICAgICAgID8gbWlnaHQgYmUgMS4wNDAweCBzbG93ZXIKICAgaXMtb2JqZWN0LW9yLW51bGwtdHJp
Y2tpZXItZnVuY3Rpb24gICAgICAgICAgICAgICAgNC4yMTAxKy0wLjE5ODAgICAgICAgICAgICA0
LjA5MDkrLTAuMDYzOSAgICAgICAgICBtaWdodCBiZSAxLjAyOTF4IGZhc3RlcgogICBpcy1vYmpl
Y3Qtb3ItbnVsbC10cmlja2llci1pbnRlcm5hbC1mdW5jdGlvbiAgIAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ljg4OTQrLTAuMjQ3NyAgICAg
ICAgICAgIDkuNTgyNistMC4yMDAwICAgICAgICAgIG1pZ2h0IGJlIDEuMDMyMHggZmFzdGVyCiAg
IGlzLW9iamVjdC1vci1udWxsLXRyaWNreS1mdW5jdGlvbiAgICAgICAgICAgICAgICAgIDQuMDg2
MCstMC4wNDUzICAgICA/ICAgICAgNC4wODk1Ky0wLjA1OTMgICAgICAgID8KICAgaXMtb2JqZWN0
LW9yLW51bGwtdHJpY2t5LWludGVybmFsLWZ1bmN0aW9uICAgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcuMjc5MCstMC4xOTQzICAgICAgICAg
ICAgNy4wOTczKy0wLjA3MjAgICAgICAgICAgbWlnaHQgYmUgMS4wMjU2eCBmYXN0ZXIKICAgaXMt
c3RyaW5nLWZvbGQtdHJpY2t5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNC4wNzAyKy0w
LjIzOTYgICAgID8gICAgICA0LjE3MDIrLTAuMzk4MyAgICAgICAgPyBtaWdodCBiZSAxLjAyNDZ4
IHNsb3dlcgogICBpcy1zdHJpbmctZm9sZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAyLjY4MTcrLTAuMDMzNSAgICAgPyAgICAgIDIuNzA3MCstMC4wNjQ1ICAgICAgICA/CiAg
IGlzLXVuZGVmaW5lZC1mb2xkLXRyaWNreSAgICAgICAgICAgICAgICAgICAgICAgICAgIDMuMzk1
MSstMC4wNzkwICAgICAgICAgICAgMy4zNTE3Ky0wLjA0MzkgICAgICAgICAgbWlnaHQgYmUgMS4w
MTMweCBmYXN0ZXIKICAgaXMtdW5kZWZpbmVkLWZvbGQgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMi43MDQ1Ky0wLjAyOTAgICAgID8gICAgICAyLjcwNjErLTAuMDg4NyAgICAgICAg
PwogICBKU09OUC1uZWdhdGl2ZS0wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
LjMxNDMrLTAuMDc4OCAgICAgICAgICAgIDAuMjg4NistMC4wMTg3ICAgICAgICAgIG1pZ2h0IGJl
IDEuMDg5M3ggZmFzdGVyCiAgIGxhcmdlLWludC1jYXB0dXJlZCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDIuODczOCstMC4yMjc1ICAgICA/ICAgICAgMy4wNTAyKy0wLjU5MjEgICAg
ICAgID8gbWlnaHQgYmUgMS4wNjE0eCBzbG93ZXIKICAgbGFyZ2UtaW50LW5lZyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAxMi40MjI4Ky0wLjI5NTAgICAgID8gICAgIDEyLjcx
NTYrLTAuOTU0OSAgICAgICAgPyBtaWdodCBiZSAxLjAyMzZ4IHNsb3dlcgogICBsYXJnZS1pbnQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExLjI0OTArLTAuNDY1OCAg
ICAgPyAgICAgMTEuOTg4MSstMS40Mjc2ICAgICAgICA/IG1pZ2h0IGJlIDEuMDY1N3ggc2xvd2Vy
CiAgIGxvYWQtdmFyYXJncy1lbGltaW5hdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgMjAu
MzM4OCstMC43ODYyICAgICA/ICAgICAyMC4zNjM0Ky0wLjUxNDAgICAgICAgID8KICAgbG9naWNh
bC1ub3Qtd2VpcmQtdHlwZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMi43NDkxKy0wLjA4
NDUgICAgID8gICAgICAyLjc4NzcrLTAuMTc2MCAgICAgICAgPyBtaWdodCBiZSAxLjAxNDB4IHNs
b3dlcgogICBsb2dpY2FsLW5vdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAzLjg1NzMrLTAuMTUzMSAgICAgPyAgICAgIDMuODY2MystMC4yNTQ0ICAgICAgICA/CiAgIGxv
dHMtb2YtZmllbGRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAuNDEzOCst
MC40MjAzICAgICAgICAgICAxMC40MDYyKy0wLjg3NDggICAgICAgIAogICBtYWtlLWluZGV4ZWQt
c3RvcmFnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLjg2NDErLTAuMTY3MSAgICAg
PyAgICAgIDIuODkxNCstMC4xNjY5ICAgICAgICA/CiAgIG1ha2Utcm9wZS1jc2UgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMuODgxNistMC4yOTY3ICAgICA/ICAgICAgMy45
MTIwKy0wLjI0NTkgICAgICAgID8KICAgbWFwLWZvci1lYWNoICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgNS4wMTE0Ky0wLjE3MTAgICAgID8gICAgICA1LjExOTQrLTAuMjg5
MyAgICAgICAgPyBtaWdodCBiZSAxLjAyMTV4IHNsb3dlcgogICBtYXAtZm9yLW9mICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4LjE2MTErLTAuMjY2MSAgICAgICAgICAg
MTcuOTU2MistMC45NDM2ICAgICAgICAgIG1pZ2h0IGJlIDEuMDExNHggZmFzdGVyCiAgIG1hcnNh
Z2xpYS1sYXJnZXItaW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEuODUwNSstMC44
MjA2ICAgICAgICAgICAzMS43MDM1Ky0wLjgyNzkgICAgICAgIAogICBtYXJzYWdsaWEtb3NyLWVu
dHJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3LjMzNDYrLTAuMjQ1NSAgICAgPyAg
ICAgMTcuNzIwOSstMC41MzY4ICAgICAgICA/IG1pZ2h0IGJlIDEuMDIyM3ggc2xvd2VyCiAgIG1h
dGgtcmFuZG9tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUuNzMyMSst
MC4zNDc3ICAgICA/ICAgICAxNi40MzY4Ky0xLjA3MzIgICAgICAgID8gbWlnaHQgYmUgMS4wNDQ4
eCBzbG93ZXIKICAgbWF0aC13aXRoLW91dC1vZi1ib3VuZHMtYXJyYXktdmFsdWVzICAgICAgICAg
ICAgICAyMS43MDMwKy0wLjM4NTcgICAgID8gICAgIDIxLjg1NTIrLTAuMzcyNSAgICAgICAgPwog
ICBtYXgtYm9vbGVhbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLjY4
MDYrLTAuMDc0NCAgICAgICAgICAgIDIuNjY2OSstMC4wNTYzICAgICAgICAKICAgbWV0aG9kLW9u
LW51bWJlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNi4xMjM3Ky0wLjY1ODYg
ICAgICAgICAgIDE1LjcxOTArLTAuMjk5NiAgICAgICAgICBtaWdodCBiZSAxLjAyNTd4IGZhc3Rl
cgogICBtaW4tYm9vbGVhbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAy
LjY5NDgrLTAuMDkzOCAgICAgICAgICAgIDIuNjg4OCstMC4wMzYwICAgICAgICAKICAgbWludXMt
Ym9vbGVhbi1kb3VibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMy4xNTk1Ky0wLjA2
MDMgICAgICAgICAgICAzLjEyODQrLTAuMDM5NCAgICAgICAgCiAgIG1pbnVzLWJvb2xlYW4gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIuMzgzOSstMC4wNTY0ICAgICA/ICAg
ICAgMi40MTk0Ky0wLjA3ODYgICAgICAgID8gbWlnaHQgYmUgMS4wMTQ5eCBzbG93ZXIKICAgbWlz
Yy1zdHJpY3QtZXEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMC45MTA1Ky0x
LjA5MzEgICAgID8gICAgIDIyLjI2NjArLTEuOTgxMSAgICAgICAgPyBtaWdodCBiZSAxLjA2NDh4
IHNsb3dlcgogICBtb2QtYm9vbGVhbi1kb3VibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA5Ljc5NTIrLTAuNzY2NSAgICAgICAgICAgIDkuNjI4MystMC4yNTE2ICAgICAgICAgIG1p
Z2h0IGJlIDEuMDE3M3ggZmFzdGVyCiAgIG1vZC1ib29sZWFuICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDcuMzk0NystMC4xMTA1ICAgICA/ICAgICAgNy40MTQ1Ky0wLjA3
ODYgICAgICAgID8KICAgbXVsLWJvb2xlYW4tZG91YmxlICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMy43MTQyKy0wLjA3MzQgICAgID8gICAgICAzLjc3NTUrLTAuMjI5MiAgICAgICAg
PyBtaWdodCBiZSAxLjAxNjV4IHNsb3dlcgogICBtdWwtYm9vbGVhbiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAyLjg5NTQrLTAuMDg2NiAgICAgICAgICAgIDIuODM0NSst
MC4wNDQ4ICAgICAgICAgIG1pZ2h0IGJlIDEuMDIxNXggZmFzdGVyCiAgIG5lZy1ib29sZWFuICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMuMTQzNSstMC4wODU1ICAgICAg
ICAgICAgMy4xMjc1Ky0wLjEyNzIgICAgICAgIAogICBuZWdhdGl2ZS16ZXJvLWRpdmlkZSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAwLjM5NzUrLTAuMDc5NiAgICAgICAgICAgIDAuMzc5
NSstMC4wMzUyICAgICAgICAgIG1pZ2h0IGJlIDEuMDQ3NHggZmFzdGVyCiAgIG5lZ2F0aXZlLXpl
cm8tbW9kdWxvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuNDEzMSstMC4xMDEzICAg
ICAgICAgICAgMC4zNTQzKy0wLjAwMjIgICAgICAgICAgbWlnaHQgYmUgMS4xNjYxeCBmYXN0ZXIK
ICAgbmVnYXRpdmUtemVyby1uZWdhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4z
NzY2Ky0wLjAzMTIgICAgICAgICAgICAwLjM1NTgrLTAuMDIzOCAgICAgICAgICBtaWdodCBiZSAx
LjA1ODd4IGZhc3RlcgogICBuZXN0ZWQtZnVuY3Rpb24tcGFyc2luZyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDQ1LjIyOTIrLTAuMzcwNSAgICAgICAgICAgNDUuMjI4MistMC42MDY0ICAgICAg
ICAKICAgbmV3LWFycmF5LWJ1ZmZlci1kZWFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4
Ny4yMjQ5Ky0xLjE4NzkgICAgICAgICAgIDg2LjQ4MDErLTAuMjQ4OCAgICAgICAgCiAgIG5ldy1h
cnJheS1idWZmZXItcHVzaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYuNTcxNSstMC4z
MzgzICAgICA/ICAgICAgNi43MzAxKy0wLjQ5ODQgICAgICAgID8gbWlnaHQgYmUgMS4wMjQxeCBz
bG93ZXIKICAgbmV3LWFycmF5LWRlYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOC40ODkxKy0wLjYxNTcgICAgICAgICAgICA4LjM1NTMrLTAuMzY5MyAgICAgICAgICBtaWdo
dCBiZSAxLjAxNjB4IGZhc3RlcgogICBuZXctYXJyYXktcHVzaCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA0LjQxNjkrLTAuMjIyNiAgICAgICAgICAgIDQuMzA0MystMC4yNTA5
ICAgICAgICAgIG1pZ2h0IGJlIDEuMDI2MnggZmFzdGVyCiAgIG5vLWlubGluZS1jb25zdHJ1Y3Rv
ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcuNzUwMistMC4zMjM0ICAgICA/ICAgICAy
OC4xODkwKy0wLjU5MTcgICAgICAgID8gbWlnaHQgYmUgMS4wMTU4eCBzbG93ZXIKICAgbnVtYmVy
LXRlc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMy4yNzg4Ky0wLjAz
MzcgICAgID8gICAgICAzLjM1OTYrLTAuMDk4MyAgICAgICAgPyBtaWdodCBiZSAxLjAyNDZ4IHNs
b3dlcgogICBvYmplY3QtY2xvc3VyZS1jYWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA0LjcwNjArLTAuMTI4MCAgICAgICAgICAgIDQuNzAxNystMC4xNTk5ICAgICAgICAKICAgb2Jq
ZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy1vbi1sYXJnZS1hcnJheSAgIAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LjYxMDgrLTAuNDcy
MiAgICAgICAgICAgIDQuNTI4NSstMC41NTQ1ICAgICAgICAgIG1pZ2h0IGJlIDEuMDE4MnggZmFz
dGVyCiAgIG9iamVjdC10ZXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDMuMjExMystMC4yNDk1ICAgICAgICAgICAgMy4xOTkxKy0wLjA5MDcgICAgICAgIAogICBvYnZp
b3VzLXNpbmstcGF0aG9sb2d5LXRha2VuICAgICAgICAgICAgICAgICAgICAgMTE5LjA0MjErLTEu
NjY4NiAgICAgPyAgICAxMjAuNDk2MSstMS4zMzg4ICAgICAgICA/IG1pZ2h0IGJlIDEuMDEyMngg
c2xvd2VyCiAgIG9idmlvdXMtc2luay1wYXRob2xvZ3kgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMjQuMTUxMistMC43NzczICAgICA/ICAgICAyNS4xMjc5Ky0wLjk2MzMgICAgICAgID8gbWln
aHQgYmUgMS4wNDA0eCBzbG93ZXIKICAgb2J2aW91c2x5LWVsaWRhYmxlLW5ldy1vYmplY3QgICAg
ICAgICAgICAgICAgICAgICAyMy45MzkyKy0xLjY3NTQgICAgID8gICAgIDI1LjA1NjYrLTEuNDAw
MyAgICAgICAgPyBtaWdodCBiZSAxLjA0Njd4IHNsb3dlcgogICBwbHVzLWJvb2xlYW4tYXJpdGgg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLjQ2MTgrLTAuMDY3MiAgICAgICAgICAg
IDIuNDAyMSstMC4wNDYzICAgICAgICAgIG1pZ2h0IGJlIDEuMDI0OXggZmFzdGVyCiAgIHBsdXMt
Ym9vbGVhbi1kb3VibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMuMjExNistMC4w
Nzc2ICAgICAgICAgICAgMy4xNTAxKy0wLjA0NzkgICAgICAgICAgbWlnaHQgYmUgMS4wMTk1eCBm
YXN0ZXIKICAgcGx1cy1ib29sZWFuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMi42MzI4Ky0wLjExMzIgICAgID8gICAgICAyLjcxMTUrLTAuMTI1OSAgICAgICAgPyBtaWdo
dCBiZSAxLjAyOTl4IHNsb3dlcgogICBwb2x5LWNoYWluLWFjY2Vzcy1kaWZmZXJlbnQtcHJvdG90
eXBlcy1zaW1wbGUgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMi42MTc4Ky0wLjA4NzUgICAgID8gICAgICAyLjcxNDArLTAuMzI0NyAgICAg
ICAgPyBtaWdodCBiZSAxLjAzNjd4IHNsb3dlcgogICBwb2x5LWNoYWluLWFjY2Vzcy1kaWZmZXJl
bnQtcHJvdG90eXBlcyAgICAgICAgICAgICAyLjY0NzIrLTAuMTcyNiAgICAgICAgICAgIDIuNjAz
MCstMC4wMzE3ICAgICAgICAgIG1pZ2h0IGJlIDEuMDE3MHggZmFzdGVyCiAgIHBvbHktY2hhaW4t
YWNjZXNzLXNpbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgIDIuNjA1MystMC4wNjE1ICAg
ICA/ICAgICAgMi42MjI1Ky0wLjA3NzMgICAgICAgID8KICAgcG9seS1jaGFpbi1hY2Nlc3MgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMi41NTAzKy0wLjA0MjIgICAgICAgICAgICAy
LjUzNjArLTAuMDUyMiAgICAgICAgCiAgIHBvbHktc3RyaWN0ZXEgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgNTkuNDI3OCstMTYuMTkxMyAgICAgICAgICA1Mi40MDE0Ky0xLjA0
NDMgICAgICAgICAgbWlnaHQgYmUgMS4xMzQxeCBmYXN0ZXIKICAgcG9seW1vcnBoaWMtYXJyYXkt
Y2FsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMS4zMTU2Ky0wLjA1MDEgICAgICAgICAg
ICAxLjMwMzkrLTAuMDY2OSAgICAgICAgCiAgIHBvbHltb3JwaGljLWdldC1ieS1pZCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDIuNTEyNSstMC4zODQyICAgICAgICAgICAgMi40MDQ4Ky0w
LjA1MjggICAgICAgICAgbWlnaHQgYmUgMS4wNDQ4eCBmYXN0ZXIKICAgcG9seW1vcnBoaWMtcHV0
LWJ5LWlkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMy44OTcyKy0wLjUyNDAgICAgICAg
ICAgIDIzLjgzOTMrLTAuNjY4MiAgICAgICAgCiAgIHBvbHltb3JwaGljLXB1dC1ieS12YWwtd2l0
aC1zdHJpbmcgICAgICAgICAgICAgICAgMjUuNzk2NSstMS4xMTE4ICAgICAgICAgICAyNS42MjI0
Ky0wLjc4ODEgICAgICAgIAogICBwb2x5bW9ycGhpYy1wdXQtYnktdmFsLXdpdGgtc3ltYm9sICAg
ICAgICAgICAgICAgIDI1LjY4OTArLTAuNTY1MyAgICAgPyAgICAgMjYuMzE2MistMC43Nzk2ICAg
ICAgICA/IG1pZ2h0IGJlIDEuMDI0NHggc2xvd2VyCiAgIHBvbHltb3JwaGljLXN0cnVjdHVyZSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIuNDYxOCstMC4xNzAwICAgICAgICAgICAxMi4y
OTUyKy0wLjE4NDYgICAgICAgICAgbWlnaHQgYmUgMS4wMTM1eCBmYXN0ZXIKICAgcG9seXZhcmlh
bnQtbW9ub21vcnBoaWMtZ2V0LWJ5LWlkICAgICAgICAgICAgICAgICAgNC40MjMxKy0wLjQ1MDEg
ICAgICAgICAgICA0LjQwNzYrLTAuNDY0NyAgICAgICAgCiAgIHByb3RvLWdldHRlci1hY2Nlc3Mg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAuOTY3MistMC4yNTE2ICAgICAgICAgICAx
MC45MTQzKy0wLjE4NTcgICAgICAgIAogICBwcm90b3R5cGUtYWNjZXNzLXdpdGgtbXV0YXRpbmct
cHJvdG90eXBlICAgICAgICAgICA0LjI5NDQrLTAuMDkzNSAgICAgPyAgICAgIDQuMzc0NistMC4y
ODAwICAgICAgICA/IG1pZ2h0IGJlIDEuMDE4N3ggc2xvd2VyCiAgIHB1dC1ieS1pZC1yZXBsYWNl
LWFuZC10cmFuc2l0aW9uICAgICAgICAgICAgICAgICAgIDkuMTA2MCstMS44MjUwICAgICAgICAg
ICAgOC44NzI4Ky0xLjc0OTMgICAgICAgICAgbWlnaHQgYmUgMS4wMjYzeCBmYXN0ZXIKICAgcHV0
LWJ5LWlkLXNsaWdodGx5LXBvbHltb3JwaGljICAgICAgICAgICAgICAgICAgICAgMi42OTY0Ky0w
LjA0MDQgICAgID8gICAgICAyLjg0MjcrLTAuMTg1MiAgICAgICAgPyBtaWdodCBiZSAxLjA1NDN4
IHNsb3dlcgogICBwdXQtYnktaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDEwLjE2OTUrLTEuMTAzOCAgICAgICAgICAgIDkuNjMxNCstMC4zOTIzICAgICAgICAgIG1p
Z2h0IGJlIDEuMDU1OXggZmFzdGVyCiAgIHB1dC1ieS12YWwtZGlyZWN0ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDAuMzcwNistMC4wMjczICAgICA/ICAgICAgMC40NTcyKy0wLjIz
NzYgICAgICAgID8gbWlnaHQgYmUgMS4yMzM1eCBzbG93ZXIKICAgcHV0LWJ5LXZhbC1sYXJnZS1p
bmRleC1ibGFuay1pbmRleGluZy10eXBlICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDUuMzE4NCstMC4yMDEzICAgICA/ICAgICAgNS40NzU3
Ky0wLjMzMjIgICAgICAgID8gbWlnaHQgYmUgMS4wMjk2eCBzbG93ZXIKICAgcHV0LWJ5LXZhbC1t
YWNoaW5lLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMi44MDY0Ky0wLjEzODUgICAg
ICAgICAgICAyLjY5ODQrLTAuMjMyMSAgICAgICAgICBtaWdodCBiZSAxLjA0MDF4IGZhc3Rlcgog
ICBwdXQtYnktdmFsLXdpdGgtc3RyaW5nLXJlcGxhY2UtYW5kLXRyYW5zaXRpb24gICAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMS4xODE3Ky0w
LjQ4MTAgICAgICAgICAgIDEwLjgyNjQrLTAuODYxNiAgICAgICAgICBtaWdodCBiZSAxLjAzMjh4
IGZhc3RlcgogICBwdXQtYnktdmFsLXdpdGgtc3RyaW5nLXNsaWdodGx5LXBvbHltb3JwaGljICAg
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMu
MDY5MistMC4xMTMwICAgICA/ICAgICAgMy4xOTQxKy0wLjUyMjIgICAgICAgID8gbWlnaHQgYmUg
MS4wNDA3eCBzbG93ZXIKICAgcHV0LWJ5LXZhbC13aXRoLXN0cmluZyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAxMC41ODM3Ky0wLjY4MjkgICAgICAgICAgIDEwLjQ3NjQrLTAuNDk3NiAgICAg
ICAgICBtaWdodCBiZSAxLjAxMDJ4IGZhc3RlcgogICBwdXQtYnktdmFsLXdpdGgtc3ltYm9sLXJl
cGxhY2UtYW5kLXRyYW5zaXRpb24gICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAxMC44OTQyKy0wLjYwNjQgICAgID8gICAgIDEwLjk2NTQrLTAu
MzU1NyAgICAgICAgPwogICBwdXQtYnktdmFsLXdpdGgtc3ltYm9sLXNsaWdodGx5LXBvbHltb3Jw
aGljICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDMuMjU4NystMC4xMDEyICAgICAgICAgICAgMy4xNTIyKy0wLjAyNzMgICAgICAgICAgbWln
aHQgYmUgMS4wMzM4eCBmYXN0ZXIKICAgcHV0LWJ5LXZhbC13aXRoLXN5bWJvbCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAxMC45NTczKy0wLjg2NTQgICAgICAgICAgIDEwLjY3MzQrLTAuNTk1
NyAgICAgICAgICBtaWdodCBiZSAxLjAyNjZ4IGZhc3RlcgogICByYXJlLW9zci1leGl0LW9uLWxv
Y2FsICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzLjY5OTUrLTEuMTA2MiAgICAgICAgICAg
MTMuMTkzOCstMC4xMjI4ICAgICAgICAgIG1pZ2h0IGJlIDEuMDM4M3ggZmFzdGVyCiAgIHJheXRy
YWNlLXdpdGgtZW1wdHktdHJ5LWNhdGNoICAgICAgICAgICAgICAgICAgICAgIDUuNzg3OCstMC4z
NDcyICAgICAgICAgICAgNS43MTgzKy0wLjE4ODUgICAgICAgICAgbWlnaHQgYmUgMS4wMTIyeCBm
YXN0ZXIKICAgcmF5dHJhY2Utd2l0aC10cnktY2F0Y2ggICAgICAgICAgICAgICAgICAgICAgICAg
ICAxMC43MzA5Ky0wLjQ2NjggICAgICAgICAgIDEwLjM5MDUrLTAuNDA2OSAgICAgICAgICBtaWdo
dCBiZSAxLjAzMjh4IGZhc3RlcgogICByZWdpc3Rlci1wcmVzc3VyZS1mcm9tLW9zciAgICAgICAg
ICAgICAgICAgICAgICAgIDE1LjM2NzUrLTAuMzQ5NSAgICAgPyAgICAgMTUuNDczMistMC4yOTcw
ICAgICAgICA/CiAgIHJlcGVhdC1tdWx0aS1nZXQtYnktb2Zmc2V0ICAgICAgICAgICAgICAgICAg
ICAgICAgMjEuMjc1MCstMC42MjE5ICAgICA/ICAgICAyMS4zNTI1Ky0xLjQ0ODMgICAgICAgID8K
ICAgcmljaGFyZHMtZW1wdHktdHJ5LWNhdGNoICAgICAgICAgICAgICAgICAgICAgICAgICA1Mi41
NjY1Ky0wLjgxMjMgICAgID8gICAgIDUzLjE1NjIrLTEuMDI4MSAgICAgICAgPyBtaWdodCBiZSAx
LjAxMTJ4IHNsb3dlcgogICByaWNoYXJkcy10cnktY2F0Y2ggICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMjQyLjI3NjIrLTIuMjAxMyAgICAgICAgICAyNDEuMzM5NystMi4zNzMzICAgICAg
ICAKICAgc2V0LWZvci1lYWNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
NC41NzUwKy0wLjEyOTYgICAgICAgICAgICA0LjUzNDgrLTAuMjcyMSAgICAgICAgCiAgIHNldC1m
b3Itb2YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcuOTgyNSstMC4z
NzY0ICAgICA/ICAgICAgOC4xNTY1Ky0wLjEyNDYgICAgICAgID8gbWlnaHQgYmUgMS4wMjE4eCBz
bG93ZXIKICAgc2V0dGVyLXByb3RvdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgNS4yNTYyKy0xLjYyMjggICAgICAgICAgICA0Ljc2NTcrLTAuMjM5NSAgICAgICAgICBtaWdo
dCBiZSAxLjEwMjl4IGZhc3RlcgogICBzZXR0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAzLjkzNzcrLTAuMDI5NiAgICAgPyAgICAgIDMuOTYzNystMC4wNzYy
ICAgICAgICA/CiAgIHNpbXBsZS1hY3RpdmF0aW9uLWRlbW8gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMjIuMzc1NSstMS40Mjg0ICAgICAgICAgICAyMS41Nzg3Ky0wLjYxNTcgICAgICAgICAg
bWlnaHQgYmUgMS4wMzY5eCBmYXN0ZXIKICAgc2ltcGxlLWdldHRlci1hY2Nlc3MgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAxNy4yNjU3Ky0wLjQ5NDYgICAgICAgICAgIDE2Ljc2MDMrLTAu
NTI5NSAgICAgICAgICBtaWdodCBiZSAxLjAzMDJ4IGZhc3RlcgogICBzaW1wbGUtcG9seS1jYWxs
LW5lc3RlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICA1LjIwMzArLTAuMjAwNiAgICAgPyAg
ICAgIDUuMjA3MCstMC4xNDIxICAgICAgICA/CiAgIHNpbXBsZS1wb2x5LWNhbGwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDEuMzMzNCstMC4wNTI5ICAgICAgICAgICAgMS4yOTMx
Ky0wLjAzNTEgICAgICAgICAgbWlnaHQgYmUgMS4wMzEyeCBmYXN0ZXIKICAgc2luLWJvb2xlYW4g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNC41NDI1Ky0xLjExMzYgICAg
ICAgICAgIDE0LjEwMTArLTAuMzM5NSAgICAgICAgICBtaWdodCBiZSAxLjAzMTN4IGZhc3Rlcgog
ICBzaW5nbGV0b24tc2NvcGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU1LjE1
ODMrLTAuNzcwOSAgICAgPyAgICAgNTUuMzU0MistMS40MTA3ICAgICAgICA/CiAgIHNpbmstZnVu
Y3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYuMTcwOSstMC40NjYx
ICAgICAgICAgICAgNS43MzE4Ky0wLjI4NzAgICAgICAgICAgbWlnaHQgYmUgMS4wNzY2eCBmYXN0
ZXIKICAgc2luay1odWdlLWFjdGl2YXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAx
MS40Mzg0Ky0wLjM0NjEgICAgID8gICAgIDExLjYyMzkrLTAuMjgzMSAgICAgICAgPyBtaWdodCBi
ZSAxLjAxNjJ4IHNsb3dlcgogICBzaW5rYWJsZS1uZXctb2JqZWN0LWRhZyAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDY2LjMzODcrLTEuMDUzNSAgICAgICAgICAgNjUuNzI2MystMS4xNDY5ICAg
ICAgICAKICAgc2lua2FibGUtbmV3LW9iamVjdC10YWtlbiAgICAgICAgICAgICAgICAgICAgICAg
ICA1NS41MzM2Ky0xLjg4ODggICAgID8gICAgIDU1Ljk1NzErLTAuODc4OSAgICAgICAgPwogICBz
aW5rYWJsZS1uZXctb2JqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzLjkwNzcr
LTAuNjIyMiAgICAgISAgICAgMjUuNjQxMystMS4wMDg2ICAgICAgICAhIGRlZmluaXRlbHkgMS4w
NzI1eCBzbG93ZXIKICAgc2xvdy1hcnJheS1wcm9maWxlLWNvbnZlcmdlbmNlICAgICAgICAgICAg
ICAgICAgICAgMi41NDY4Ky0wLjEwMzcgICAgID8gICAgICAyLjY1OTErLTAuMjI4NyAgICAgICAg
PyBtaWdodCBiZSAxLjA0NDF4IHNsb3dlcgogICBzbG93LWNvbnZlcmdlbmNlICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAyLjUyODMrLTAuMTAwNiAgICAgPyAgICAgIDIuNTcyOSst
MC4xNzMwICAgICAgICA/IG1pZ2h0IGJlIDEuMDE3Nnggc2xvd2VyCiAgIHNsb3ctdGVybmFyaWVz
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUuNzM1MCstMC41NDUzICAgICA/
ICAgICAxNi4wNjEwKy0wLjgzODYgICAgICAgID8gbWlnaHQgYmUgMS4wMjA3eCBzbG93ZXIKICAg
c29ydGluZy1iZW5jaG1hcmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNy44MzAy
Ky0xLjg2NDEgICAgICAgICAgIDE3LjgxOTkrLTAuNjY0MSAgICAgICAgCiAgIHNwYXJzZS1jb25k
aXRpb25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEuMjQwNCstMC4wNzM1ICAg
ICAgICAgICAgMS4yMTg2Ky0wLjA2MzYgICAgICAgICAgbWlnaHQgYmUgMS4wMTc5eCBmYXN0ZXIK
ICAgc3BsaWNlLXRvLXJlbW92ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMy4w
ODU3Ky0wLjcxMTMgICAgICAgICAgIDEyLjUzOTMrLTAuNDE4NiAgICAgICAgICBtaWdodCBiZSAx
LjA0MzZ4IGZhc3RlcgogICBzdHJpbmctY2hhci1jb2RlLWF0ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDEyLjg0OTUrLTAuMzI3MyAgICAgPyAgICAgMTMuMjUyNCstMC40NjU0ICAgICAg
ICA/IG1pZ2h0IGJlIDEuMDMxNHggc2xvd2VyCiAgIHN0cmluZy1jb25jYXQtb2JqZWN0ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDIuMzI0OCstMC4yMjcxICAgICAgICAgICAgMi4xODMz
Ky0wLjE0MzEgICAgICAgICAgbWlnaHQgYmUgMS4wNjQ4eCBmYXN0ZXIKICAgc3RyaW5nLWNvbmNh
dC1wYWlyLW9iamVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgMi4xOTE0Ky0wLjA4NTIgICAg
ID8gICAgICAyLjIwNDgrLTAuMDc1NyAgICAgICAgPwogICBzdHJpbmctY29uY2F0LXBhaXItc2lt
cGxlICAgICAgICAgICAgICAgICAgICAgICAgICA5LjI5NjgrLTAuMjkxNSAgICAgICAgICAgIDku
MjA5OCstMC40Mjc5ICAgICAgICAKICAgc3RyaW5nLWNvbmNhdC1zaW1wbGUgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOS41NzQ4Ky0wLjQ5NTAgICAgID8gICAgIDEwLjMyOTMrLTIuMDI1
MSAgICAgICAgPyBtaWdodCBiZSAxLjA3ODh4IHNsb3dlcgogICBzdHJpbmctY29ucy1yZXBlYXQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ljg2MTgrLTAuNDA4NSAgICAgPyAgICAg
IDcuMDIxMCstMC42NDcyICAgICAgICA/IG1pZ2h0IGJlIDEuMDIzMnggc2xvd2VyCiAgIHN0cmlu
Zy1jb25zLXRvd2VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcuMDA3MCstMC4z
ODk4ICAgICA/ICAgICAgNy4wNTQ2Ky0wLjQ5MzYgICAgICAgID8KICAgc3RyaW5nLWVxdWFsaXR5
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOC4zOTgwKy0xLjExMDQgICAgICAg
ICAgIDE3Ljg5NzArLTAuMjE1OSAgICAgICAgICBtaWdodCBiZSAxLjAyODB4IGZhc3RlcgogICBz
dHJpbmctZ2V0LWJ5LXZhbC1iaWctY2hhciAgICAgICAgICAgICAgICAgICAgICAgICA2LjA0MDgr
LTAuNDQzNyAgICAgPyAgICAgIDYuMjc2OCstMC4yMzIyICAgICAgICA/IG1pZ2h0IGJlIDEuMDM5
MXggc2xvd2VyCiAgIHN0cmluZy1nZXQtYnktdmFsLW91dC1vZi1ib3VuZHMtaW5zYW5lICAgICAg
ICAgICAgIDMuMTMwMistMC4wNzc5ICAgICA/ICAgICAgMy4xMzEzKy0wLjEwNDggICAgICAgID8K
ICAgc3RyaW5nLWdldC1ieS12YWwtb3V0LW9mLWJvdW5kcyAgICAgICAgICAgICAgICAgICAgNC4w
MjIzKy0wLjIxMjEgICAgID8gICAgICA0LjA1MjYrLTAuMzcxMCAgICAgICAgPwogICBzdHJpbmct
Z2V0LWJ5LXZhbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLjk3MjUrLTAuMTcz
MyAgICAgICAgICAgIDIuODc3NSstMC4wOTIzICAgICAgICAgIG1pZ2h0IGJlIDEuMDMzMHggZmFz
dGVyCiAgIHN0cmluZy1oYXNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDEuOTQ0NystMC4wMzc5ICAgICA/ICAgICAgMS45Nzc5Ky0wLjEyMDIgICAgICAgID8gbWlnaHQg
YmUgMS4wMTcxeCBzbG93ZXIKICAgc3RyaW5nLWxvbmctaWRlbnQtZXF1YWxpdHkgICAgICAgICAg
ICAgICAgICAgICAgICAxNS4xMTExKy0wLjU1NDkgICAgID8gICAgIDE1LjM1NzArLTAuMjg5NiAg
ICAgICAgPyBtaWdodCBiZSAxLjAxNjN4IHNsb3dlcgogICBzdHJpbmctb3V0LW9mLWJvdW5kcyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyLjY4NDArLTAuODA4MyAgICAgICAgICAgMTIu
MDc5NCstMC4xNTYxICAgICAgICAgIG1pZ2h0IGJlIDEuMDUwMHggZmFzdGVyCiAgIHN0cmluZy1y
ZXBlYXQtYXJpdGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAuNTI4NistMC42MTk0
ICAgICA/ICAgICAyMC45MDc4Ky0wLjU4NDggICAgICAgID8gbWlnaHQgYmUgMS4wMTg1eCBzbG93
ZXIKICAgc3RyaW5nLXJvcGUtd2l0aC1vYmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAx
Ny4yMDYxKy0xLjQ0OTYgICAgICAgICAgIDE2Ljk4NTIrLTAuOTYxOSAgICAgICAgICBtaWdodCBi
ZSAxLjAxMzB4IGZhc3RlcgogICBzdHJpbmctc3ViICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDMzLjQzMzErLTIuMTgyNyAgICAgICAgICAgMzIuODgxMSstMC45NTIzICAg
ICAgICAgIG1pZ2h0IGJlIDEuMDE2OHggZmFzdGVyCiAgIHN0cmluZy10ZXN0ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMuMzM3NystMC4yNTYxICAgICAgICAgICAgMy4y
Nzc4Ky0wLjIxMzAgICAgICAgICAgbWlnaHQgYmUgMS4wMTgzeCBmYXN0ZXIKICAgc3RyaW5nLXZh
ci1lcXVhbGl0eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNy45NzAyKy0wLjM5MTkg
ICAgICAgICAgIDI3Ljk0MDcrLTAuMzEyNiAgICAgICAgCiAgIHN0cnVjdHVyZS1ob2lzdC1vdmVy
LXRyYW5zaXRpb25zICAgICAgICAgICAgICAgICAgIDIuNDM1NistMC4yMTA1ICAgICAgICAgICAg
Mi4zMzc4Ky0wLjExNDUgICAgICAgICAgbWlnaHQgYmUgMS4wNDE4eCBmYXN0ZXIKICAgc3Vic3Ry
aW5nLWNvbmNhdC13ZWlyZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNS4yNDE1Ky0wLjg0
MzYgICAgID8gICAgIDM1LjcwNDgrLTAuOTAzMyAgICAgICAgPyBtaWdodCBiZSAxLjAxMzF4IHNs
b3dlcgogICBzdWJzdHJpbmctY29uY2F0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDQwLjU1MjArLTMuNDkxNyAgICAgICAgICAgMzguNjQzMCstMS4yNzc3ICAgICAgICAgIG1pZ2h0
IGJlIDEuMDQ5NHggZmFzdGVyCiAgIHN1YnN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgNDQuODQ0MCstMS40MDAwICAgICAgICAgICA0NC42MTc0Ky0yLjE5ODYg
ICAgICAgIAogICBzd2l0Y2gtY2hhci1jb25zdGFudCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAyLjc0OTIrLTAuMTg2NSAgICAgICAgICAgIDIuNzQ0MistMC4wODg0ICAgICAgICAKICAg
c3dpdGNoLWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNS4yNjQ3
Ky0wLjI2NDQgICAgICAgICAgICA1LjIzMDArLTAuMTM2NiAgICAgICAgCiAgIHN3aXRjaC1jb25z
dGFudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYuNDkyNCstMC44MDg5ICAg
ICA/ICAgICAgNy4xMjIxKy0wLjU4MzQgICAgICAgID8gbWlnaHQgYmUgMS4wOTcweCBzbG93ZXIK
ICAgc3dpdGNoLXN0cmluZy1iYXNpYy1iaWctdmFyICAgICAgICAgICAgICAgICAgICAgICAxMi45
Njk1Ky0wLjkxMTYgICAgID8gICAgIDEzLjAxMjIrLTAuNjYxMCAgICAgICAgPwogICBzd2l0Y2gt
c3RyaW5nLWJhc2ljLWJpZyAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyLjE2NjcrLTAuMzMx
NCAgICAgPyAgICAgMTIuNTU4NSstMC41MjUzICAgICAgICA/IG1pZ2h0IGJlIDEuMDMyMnggc2xv
d2VyCiAgIHN3aXRjaC1zdHJpbmctYmFzaWMtdmFyICAgICAgICAgICAgICAgICAgICAgICAgICAg
MTIuNjA0NystMC40MjEyICAgICA/ICAgICAxMi43NjU2Ky0wLjgzMDMgICAgICAgID8gbWlnaHQg
YmUgMS4wMTI4eCBzbG93ZXIKICAgc3dpdGNoLXN0cmluZy1iYXNpYyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAxMS4zMTYyKy0wLjY1MDkgICAgID8gICAgIDExLjQxMTkrLTAuMzQ5NiAg
ICAgICAgPwogICBzd2l0Y2gtc3RyaW5nLWJpZy1sZW5ndGgtdG93ZXItdmFyICAgICAgICAgICAg
ICAgIDE5LjE0MDMrLTAuNDY0NSAgICAgPyAgICAgMTkuMzA1NystMC4zOTg4ICAgICAgICA/CiAg
IHN3aXRjaC1zdHJpbmctbGVuZ3RoLXRvd2VyLXZhciAgICAgICAgICAgICAgICAgICAgMTMuMzc5
NCstMC4zOTk1ICAgICA/ICAgICAxMy42NzgyKy0wLjg3MjUgICAgICAgID8gbWlnaHQgYmUgMS4w
MjIzeCBzbG93ZXIKICAgc3dpdGNoLXN0cmluZy1sZW5ndGgtdG93ZXIgICAgICAgICAgICAgICAg
ICAgICAgICAxMC44OTY4Ky0wLjUwOTEgICAgID8gICAgIDExLjI5MTgrLTAuODQ3NCAgICAgICAg
PyBtaWdodCBiZSAxLjAzNjN4IHNsb3dlcgogICBzd2l0Y2gtc3RyaW5nLXNob3J0ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDEwLjc4MjArLTAuNDA1NiAgICAgPyAgICAgMTAuODc3Mist
MC40MDM5ICAgICAgICA/CiAgIHN3aXRjaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMTAuNTg2MystMC44NjE2ICAgICAgICAgICAxMC4yMTc3Ky0xLjEzNDYgICAg
ICAgICAgbWlnaHQgYmUgMS4wMzYxeCBmYXN0ZXIKICAgc3ltYm9sLXRvc3RyaW5ndGFnICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMi45NTkxKy0wLjA0MDYgICAgID8gICAgICAzLjAw
MjErLTAuMjE0MiAgICAgICAgPyBtaWdodCBiZSAxLjAxNDV4IHNsb3dlcgogICB0ZWFyLW9mZi1h
cmd1bWVudHMtc2ltcGxlICAgICAgICAgICAgICAgICAgICAgICAgICAyLjgzNjErLTAuMjc2MSAg
ICAgPyAgICAgIDMuMDE5NystMC4zNjk0ICAgICAgICA/IG1pZ2h0IGJlIDEuMDY0N3ggc2xvd2Vy
CiAgIHRlYXItb2ZmLWFyZ3VtZW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMu
MzAwMistMC4xODA1ICAgICAgICAgICAgMy4yNzkxKy0wLjA0NTggICAgICAgIAogICB0ZW1wb3Jh
bC1zdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExLjYyMDIrLTAuMTI5
NSAgICAgPyAgICAgMTEuNzYzMystMC4zNjg5ICAgICAgICA/IG1pZ2h0IGJlIDEuMDEyM3ggc2xv
d2VyCiAgIHRvLWludDMyLWJvb2xlYW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MTMuNDc2MCstMC40OTQ1ICAgICA/ICAgICAxMy42MjE3Ky0wLjcwNTAgICAgICAgID8gbWlnaHQg
YmUgMS4wMTA4eCBzbG93ZXIKICAgdHJ5LWNhdGNoLWdldC1ieS12YWwtY2xvbmVkLWFyZ3VtZW50
cyAgICAgICAgICAgICAgNy4zMjk1Ky0wLjQ1MDkgICAgICAgICAgICA3LjA3NDcrLTAuMzM0NCAg
ICAgICAgICBtaWdodCBiZSAxLjAzNjB4IGZhc3RlcgogICB0cnktY2F0Y2gtZ2V0LWJ5LXZhbC1k
aXJlY3QtYXJndW1lbnRzICAgICAgICAgICAgICAyLjE5ODMrLTAuMDc0MyAgICAgPyAgICAgIDIu
MjI2MystMC4xNjU1ICAgICAgICA/IG1pZ2h0IGJlIDEuMDEyN3ggc2xvd2VyCiAgIHRyeS1jYXRj
aC1nZXQtYnktdmFsLXNjb3BlZC1hcmd1bWVudHMgICAgICAgICAgICAgIDQuMjUzNSstMC4yNjEw
ICAgICA/ICAgICAgNC4zMDE2Ky0wLjQyNDggICAgICAgID8gbWlnaHQgYmUgMS4wMTEzeCBzbG93
ZXIKICAgdHlwZWQtYXJyYXktZ2V0LXNldC1ieS12YWwtcHJvZmlsaW5nICAgICAgICAgICAgICAy
MC45NjA3Ky0wLjM2OTAgICAgID8gICAgIDIxLjE1NDMrLTAuNzY5NSAgICAgICAgPwogICB1bmRl
ZmluZWQtcHJvcGVydHktYWNjZXNzICAgICAgICAgICAgICAgICAgICAgICAgMjE3Ljc0NjkrLTku
NTcyMyAgICAgICAgICAyMTQuNDU2OSstMi4zNzQxICAgICAgICAgIG1pZ2h0IGJlIDEuMDE1M3gg
ZmFzdGVyCiAgIHVuZGVmaW5lZC10ZXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDMuNDc3MistMC4xMjc3ICAgICA/ICAgICAgMy40ODM0Ky0wLjA5OTIgICAgICAgID8KICAg
dW5wcm9maWxlZC1saWNtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNS45MDY5
Ky0wLjEwMTMgICAgID8gICAgICA2LjAxNDMrLTAuMjQ2OCAgICAgICAgPyBtaWdodCBiZSAxLjAx
ODJ4IHNsb3dlcgogICB2OC1yYXl0cmFjZS13aXRoLWVtcHR5LXRyeS1jYXRjaCAgICAgICAgICAg
ICAgICAgIDUxLjUyNTErLTAuNzU1NyAgICAgICAgICAgNTEuMDM4NystMC42Nzc0ICAgICAgICAK
ICAgdjgtcmF5dHJhY2Utd2l0aC10cnktY2F0Y2ggICAgICAgICAgICAgICAgICAgICAgICA2Ny43
Njk5Ky0wLjcxMzQgICAgICAgICAgIDY2LjIyNzQrLTEuNTMzNyAgICAgICAgICBtaWdodCBiZSAx
LjAyMzN4IGZhc3RlcgogICB2YXJhcmdzLWNhbGwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDExLjE5ODArLTAuMzk2MSAgICAgICAgICAgMTEuMTIxMCstMC4zNjk2ICAgICAg
ICAKICAgdmFyYXJncy1jb25zdHJ1Y3QtaW5saW5lICAgICAgICAgICAgICAgICAgICAgICAgICAx
OC4zOTMyKy0wLjYyNTIgICAgID8gICAgIDE4LjU3NzgrLTAuNTg2MSAgICAgICAgPyBtaWdodCBi
ZSAxLjAxMDB4IHNsb3dlcgogICB2YXJhcmdzLWNvbnN0cnVjdCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDE4LjQ2MTUrLTAuNzQzOCAgICAgPyAgICAgMTguNzU4NCstMC41OTEwICAg
ICAgICA/IG1pZ2h0IGJlIDEuMDE2MXggc2xvd2VyCiAgIHZhcmFyZ3MtaW5saW5lICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcuMzc0MystMC4xMTk2ICAgICA/ICAgICAgNy40
MjAzKy0wLjE1ODIgICAgICAgID8KICAgdmFyYXJncy1zdHJpY3QtbW9kZSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOC43NDU4Ky0wLjQwMDIgICAgICAgICAgICA4LjUwNDArLTAuMDkz
MCAgICAgICAgICBtaWdodCBiZSAxLjAyODR4IGZhc3RlcgogICB2YXJhcmdzICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4LjU3MTYrLTAuMzM1NCAgICAgPyAgICAg
IDguOTE4MSstMC42ODkyICAgICAgICA/IG1pZ2h0IGJlIDEuMDQwNHggc2xvd2VyCiAgIHdlaXJk
LWlubGluaW5nLWNvbnN0LXByb3AgICAgICAgICAgICAgICAgICAgICAgICAgIDIuMjUyNCstMC4x
NzMzICAgICA/ICAgICAgMi4yODU0Ky0wLjIxMDEgICAgICAgID8gbWlnaHQgYmUgMS4wMTQ3eCBz
bG93ZXIKCiAgIDxnZW9tZXRyaWM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDguMTQ5MistMC4wMTc3ICAgICA/ICAgICAgOC4xNTE1Ky0wLjAyMjkgICAgICAgID8gbWln
aHQgYmUgMS4wMDAzeCBzbG93ZXIKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBCM1RvVCAgICAgICAgICAgICAgICAgICAgICBNeUIzICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCkFzbUJlbmNoOgogICBiaWdmaWIu
Y3BwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTgwLjYxNjMrLTUuNTYx
MCAgICAgPyAgICA1ODkuNzA2MistMTYuOTU0MSAgICAgICA/IG1pZ2h0IGJlIDEuMDE1N3ggc2xv
d2VyCiAgIGNyYXkuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAz
OTYuOTU3MSstMy42ODI4ICAgICAgICAgIDM5My4yMjk3Ky01LjA4MzUgICAgICAgIAogICBkcnku
YyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODczLjI5MDgrLTQw
LjI3NTcgICAgICAgICA4NjIuNDY5MystMjguOTUxNCAgICAgICAgIG1pZ2h0IGJlIDEuMDEyNXgg
ZmFzdGVyCiAgIEZsb2F0TU0uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA4MDkuMTMzNSstNy4wNTM1ICAgICAgICAgIDgwMy45NTI2Ky0yLjMyMjAgICAgICAgIAogICBn
Y2MtbG9vcHMuY3BwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzODA0Ljg4MTMr
LTE5LjU1MjcgICAgICAgIDM4MDAuNjc4NCstMTYuMTY3MiAgICAgICAKICAgbi1ib2R5LmMgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkyOC43MzY3Ky00LjA2NDcgICAg
IF4gICAgOTE5Ljc5NjkrLTMuNzY0NiAgICAgICAgXiBkZWZpbml0ZWx5IDEuMDA5N3ggZmFzdGVy
CiAgIFF1aWNrc29ydC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NDku
NDY2MystMy40MDEyICAgICAgICAgIDQ0MS42NzkzKy01LjE0MTMgICAgICAgICAgbWlnaHQgYmUg
MS4wMTc2eCBmYXN0ZXIKICAgc3RlcGFub3ZfY29udGFpbmVyLmNwcCAgICAgICAgICAgICAgICAg
ICAgICAgICAgMzQyOC44NjM3Ky0zMC4xOTE0ICAgICAgICAzNDI0Ljk3NzcrLTI4LjM3NzIgICAg
ICAgCiAgIFRvd2Vycy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAy
ODkuMzg3OCstMS41NzAwICAgICBeICAgIDI4NC45NjAyKy0yLjI0MjYgICAgICAgIF4gZGVmaW5p
dGVseSAxLjAxNTV4IGZhc3RlcgoKICAgPGdlb21ldHJpYz4gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDg1OS42NjkyKy00LjUwMTAgICAgICAgICAgODU0LjE5NjUrLTUuNjc4
MiAgICAgICAgICBtaWdodCBiZSAxLjAwNjR4IGZhc3RlcgoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIzVG9UICAgICAgICAgICAgICAg
ICAgICAgIE15QjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKQ29tcHJl
c3Npb25CZW5jaDoKICAgaHVmZm1hbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA2My4zNTkzKy0xLjEyNDAgICAgICAgICAgIDYyLjMxNDMrLTEuNjExMyAgICAgICAg
ICBtaWdodCBiZSAxLjAxNjh4IGZhc3RlcgogICBhcml0aG1ldGljLXNpbXBsZSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMjYwLjg5MjkrLTQuMjYyNSAgICAgICAgICAyNTkuNDY1Myst
MS45ODMyICAgICAgICAKICAgYXJpdGhtZXRpYy1wcmVjaXNlICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDI0MS42MTYyKy01LjA3MzAgICAgICAgICAgMjQwLjI0MzUrLTEuNzA0NiAgICAg
ICAgCiAgIGFyaXRobWV0aWMtY29tcGxleC1wcmVjaXNlICAgICAgICAgICAgICAgICAgICAgICAy
NDEuNzA3NSstMS45MzUxICAgICA/ICAgIDI0Ni4wMjEyKy01LjIyNTcgICAgICAgID8gbWlnaHQg
YmUgMS4wMTc4eCBzbG93ZXIKICAgYXJpdGhtZXRpYy1wcmVjaXNlLW9yZGVyLTAgICAgICAgICAg
ICAgICAgICAgICAgIDI2My41ODI4Ky0yLjQ4NDYgICAgID8gICAgMjY0LjgwNjErLTIuODE0NSAg
ICAgICAgPwogICBhcml0aG1ldGljLXByZWNpc2Utb3JkZXItMSAgICAgICAgICAgICAgICAgICAg
ICAgMzAyLjg4NDcrLTEuNjU0OCAgICAgICAgICAzMDIuNTE4OCstMi43MjUzICAgICAgICAKICAg
YXJpdGhtZXRpYy1wcmVjaXNlLW9yZGVyLTIgICAgICAgICAgICAgICAgICAgICAgIDM0OC42NjE1
Ky0yLjg1ODUgICAgICAgICAgMzQ1Ljg5NDArLTIuMTE2NiAgICAgICAgCiAgIGFyaXRobWV0aWMt
c2ltcGxlLW9yZGVyLTEgICAgICAgICAgICAgICAgICAgICAgICAzMDYuNDc3OCstMS44OTc5ICAg
ICAgICAgIDMwNi4xMjA1Ky0yLjA5NjUgICAgICAgIAogICBhcml0aG1ldGljLXNpbXBsZS1vcmRl
ci0yICAgICAgICAgICAgICAgICAgICAgICAgMzU3LjQ5NTUrLTYuODIwOSAgICAgPyAgICAzNjQu
Nzk0OSstNS41Nzc1ICAgICAgICA/IG1pZ2h0IGJlIDEuMDIwNHggc2xvd2VyCiAgIGx6LXN0cmlu
ZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMTkuNjM2MCstNC42OTU3
ICAgICA/ICAgIDMyMi43NzYyKy0yLjc4NzkgICAgICAgID8KCiAgIDxnZW9tZXRyaWM+ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNDkuNjQ5NistMC4zNzg4ICAgICA/ICAg
IDI1MC4wMDQ3Ky0wLjkxMzggICAgICAgID8gbWlnaHQgYmUgMS4wMDE0eCBzbG93ZXIKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCM1Rv
VCAgICAgICAgICAgICAgICAgICAgICBNeUIzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCkdlb21lYW4gb2YgcHJlZmVycmVkIG1lYW5zOgogICA8c2NhbGVkLXJlc3VsdD4g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwLjY1MTIrLTAuMDk3OCAgICAgICAg
ICAgNTAuNDU2NistMC4xMzIwICAgICAgICAgIG1pZ2h0IGJlIDEuMDAzOXggZmFzdGVyCgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>