<?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>104406</bug_id>
          
          <creation_ts>2012-12-07 14:57:55 -0800</creation_ts>
          <short_desc>JSC should scale the optimization threshold for a code block according to the cost of compiling it</short_desc>
          <delta_ts>2012-12-10 13:49:31 -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>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>rakuco</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>786198</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-12-07 14:57:55 -0800</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786204</commentid>
    <comment_count>1</comment_count>
      <attachid>178289</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-12-07 15:01:01 -0800</bug_when>
    <thetext>Created attachment 178289
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786209</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-07 15:06:43 -0800</bug_when>
    <thetext>Attachment 178289 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1
Source/JavaScriptCore/dfg/DFGCapabilities.h:42:  The parameter name &quot;codeBlock&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGCapabilities.h:43:  The parameter name &quot;codeBlock&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGCapabilities.h:44:  The parameter name &quot;codeBlock&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGCapabilities.h:45:  The parameter name &quot;codeBlock&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGCapabilities.h:46:  The parameter name &quot;codeBlock&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGCapabilities.h:47:  The parameter name &quot;codeBlock&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 6 in 10 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>786232</commentid>
    <comment_count>3</comment_count>
      <attachid>178289</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-12-07 15:33:25 -0800</bug_when>
    <thetext>Comment on attachment 178289
the patch

Attachment 178289 did not pass win-ews (win):
Output: http://queues.webkit.org/results/15173983</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786256</commentid>
    <comment_count>4</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-12-07 15:57:20 -0800</bug_when>
    <thetext>Windows export file needs some babysitting:


6&gt;CodeBlock.obj : error LNK2019: unresolved external symbol &quot;public: int __thiscall JSC::CodeBlock::counterValueForOptimizeAfterWarmUp(void)&quot; (?counterValueForOptimizeAfterWarmUp@CodeBlock@JSC@@QAEHXZ) referenced in function &quot;public: void __thiscall JSC::CodeBlock::optimizeAfterWarmUp(void)&quot; (?optimizeAfterWarmUp@CodeBlock@JSC@@QAEXXZ)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786262</commentid>
    <comment_count>5</comment_count>
      <attachid>178289</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-12-07 16:01:19 -0800</bug_when>
    <thetext>Comment on attachment 178289
the patch

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

r=me, please fix comments before landing.

&gt; Source/JavaScriptCore/dfg/DFGCapabilities.h:48
&gt; +bool mightCompileEval(CodeBlock* codeBlock);
&gt; +bool mightCompileProgram(CodeBlock* codeBlock);
&gt; +bool mightCompileFunctionForCall(CodeBlock* codeBlock);
&gt; +bool mightCompileFunctionForConstruct(CodeBlock* codeBlock);
&gt; +bool mightInlineFunctionForCall(CodeBlock* codeBlock);
&gt; +bool mightInlineFunctionForConstruct(CodeBlock* codeBlock);
&gt;  

Style bot is right here, for once.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786274</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-12-07 16:23:05 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Windows export file needs some babysitting:
&gt; 
&gt; 
&gt; 6&gt;CodeBlock.obj : error LNK2019: unresolved external symbol &quot;public: int __thiscall JSC::CodeBlock::counterValueForOptimizeAfterWarmUp(void)&quot; (?counterValueForOptimizeAfterWarmUp@CodeBlock@JSC@@QAEHXZ) referenced in function &quot;public: void __thiscall JSC::CodeBlock::optimizeAfterWarmUp(void)&quot; (?optimizeAfterWarmUp@CodeBlock@JSC@@QAEXXZ)

I think it&apos;s once again misuse of #ifdef&apos;s like ENABLE(DFG.. and so on. :-/  I&apos;m trying to fiddle with it now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786275</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-12-07 16:23:13 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 178289 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=178289&amp;action=review
&gt; 
&gt; r=me, please fix comments before landing.
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGCapabilities.h:48
&gt; &gt; +bool mightCompileEval(CodeBlock* codeBlock);
&gt; &gt; +bool mightCompileProgram(CodeBlock* codeBlock);
&gt; &gt; +bool mightCompileFunctionForCall(CodeBlock* codeBlock);
&gt; &gt; +bool mightCompileFunctionForConstruct(CodeBlock* codeBlock);
&gt; &gt; +bool mightInlineFunctionForCall(CodeBlock* codeBlock);
&gt; &gt; +bool mightInlineFunctionForConstruct(CodeBlock* codeBlock);
&gt; &gt;  
&gt; 
&gt; Style bot is right here, for once.

Yup, I fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786300</commentid>
    <comment_count>8</comment_count>
      <attachid>178303</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-12-07 16:44:02 -0800</bug_when>
    <thetext>Created attachment 178303
work in progress

This should make EWS happy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786653</commentid>
    <comment_count>9</comment_count>
      <attachid>178303</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-12-08 16:49:54 -0800</bug_when>
    <thetext>Comment on attachment 178303
work in progress

This causes a massive regression on Kraken audio benchmarks.  The regression only shows up in browser.  Investigating the reasons now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786683</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-12-08 21:53:59 -0800</bug_when>
    <thetext>It looks like what is going on is that we&apos;ve got some code blocks in the Kraken audio benchmarks that rely heavily on OSR exit profiling.  Our previous threshold for triggering recompilation was 5000 (thresholdForOptimizeAfterLongWarmUp); this code effectively increases that threshold since we have scaling by instruction count and most code blocks that benefit from recompilation tend to be large-ish.  

So, I experimented with lowering the thresholdForOptimizeAfterLongWarmUp.  With 3000, we already neutralize the slow-down on Kraken.  But lowering it further seems to help even more.  It looks like setting it to 1000 helps the most.  Here are the performance numbers on various benchmarks for 1000, 2000, and 3000:


3000:
jsc:
   0.7% faster on SunSpider
   neutral on V8v7
   ~1% slower on Kraken
drt:
   1% faster on SunSpider
   ~1% faster on V8v7
   neutral on Octane
   2% slower on Kraken
   ~10% faster on JSBench
   1.5% faster on DSP

2000:
jsc:
   0.9% faster on SunSpider
   neutral on V8v7
   0.9% slower on Kraken
drt:
   neutral on SunSpider
   0.6% faster on V8v7
   ~2% slower on Kraken
   ~7.8% faster on JSBench
   1.9% faster on DSP

1000:
jsc:
   1.4% faster on SunSpider
   0.4% slower on V8v7
   0.6% slower on Kraken
drt:
   0.6% faster on SunSpider
   1.3% faster on V8v7
   neutral on Kraken
   1% faster on JSBench
   neutral on DSP

Further tests seem to imply that the speed-up on SunSpider in DRT is closer to 1% with 1000, but I can&apos;t be sure.  Anyway, 1000 seems best since I&apos;d rather be neutral on Kraken and get a 1% V8v7 &amp; SunSpider speed-up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786690</commentid>
    <comment_count>11</comment_count>
      <attachid>178396</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-12-08 23:00:53 -0800</bug_when>
    <thetext>Created attachment 178396
the patch

I fixed all regressions.  It took some effort.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786692</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-08 23:04:09 -0800</bug_when>
    <thetext>Attachment 178396 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;S...&quot; exit_code: 1
Source/JavaScriptCore/bytecode/CodeBlock.cpp:3110:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/JavaScriptCore/bytecode/CodeBlock.cpp:3115:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/JavaScriptCore/bytecode/CodeBlock.cpp:3125:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Total errors found: 3 in 20 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>786693</commentid>
    <comment_count>13</comment_count>
      <attachid>178397</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-12-08 23:05:34 -0800</bug_when>
    <thetext>Created attachment 178397
the patch

fix style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786847</commentid>
    <comment_count>14</comment_count>
      <attachid>178397</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-12-09 12:16:49 -0800</bug_when>
    <thetext>Comment on attachment 178397
the patch

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

r=me

&gt; Source/JavaScriptCore/profiler/ProfilerDatabase.cpp:61
&gt; +    Bytecodes* result = addBytecodes(
&gt; +        codeBlock-&gt;hash(), codeBlock-&gt;sourceCodeForTools());

something this short could just be a single line :p</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786850</commentid>
    <comment_count>15</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-12-09 12:30:27 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 178397 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=178397&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/profiler/ProfilerDatabase.cpp:61
&gt; &gt; +    Bytecodes* result = addBytecodes(
&gt; &gt; +        codeBlock-&gt;hash(), codeBlock-&gt;sourceCodeForTools());
&gt; 
&gt; something this short could just be a single line :p

You make a fair point!  Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786852</commentid>
    <comment_count>16</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-12-09 12:43:13 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/137094</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787696</commentid>
    <comment_count>17</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-12-10 13:49:31 -0800</bug_when>
    <thetext>Should we reconsider these limits, now that bug 104500 has been discovered and fixed?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178289</attachid>
            <date>2012-12-07 15:01:01 -0800</date>
            <delta_ts>2012-12-07 16:44:02 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>math.patch</filename>
            <type>text/plain</type>
            <size>23628</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTM2OTg5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBA
CisyMDEyLTEyLTA3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SlNDIHNob3VsZCBzY2FsZSB0aGUgb3B0aW1pemF0aW9uIHRocmVzaG9sZCBmb3IgYSBjb2RlIGJs
b2NrIGFjY29yZGluZyB0byB0aGUgY29zdCBvZiBjb21waWxpbmcgaXQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNDQwNgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlJ3ZlIGxvbmcga25vd24gdGhhdCB3
ZSB3YW50IHRvIHNjYWxlIHRoZSBleGVjdXRpb24gY291bnQgdGhyZXNob2xkIG5lZWRlZCBmb3Ig
dGhlIERGRworICAgICAgICB0byBraWNrIGluIHRvIHNjYWxlIGFjY29yZGluZyB0byBzb21lIGVz
dGltYXRlIG9mIHRoZSBjb3N0IG9mIGNvbXBpbGluZyB0aGF0IGNvZGUgYmxvY2suCisgICAgICAg
IFRoaXMgaW5zdGl0dXRlcyBhIHJlbGF0aW9uc2hpcCBsaWtlIHRoaXM6CisgICAgICAgIAorICAg
ICAgICB0aHJlc2hvbGQgPSB0aHJlc2hvbGRTZXR0aW5nICogKGEgKiBzcXJ0KGluc3RydWN0aW9u
Q291bnQgKyBiKSArIGFicyhjICogaW5zdHJ1Y3Rpb25Db3VudCkgKyBkCisgICAgICAgIAorICAg
ICAgICBXaGVyZSBhLCBiLCBjLCBkIGFyZSBjb2VmZmljaWVudHMgZGVyaXZlZCBmcm9tIGZpdHRp
bmcgdGhlIGFib3ZlIGV4cHJlc3Npb24gdG8gdmFyaW91cworICAgICAgICBkYXRhIHBvaW50cywg
d2hpY2ggSSBjaG9zZSBiYXNlZCBvbiBsb29raW5nIGF0IG9uZSBiZW5jaG1hcmsgKDNkLWN1YmUp
IGFuZCBmcm9tIG15CisgICAgICAgIG93biBpbnR1aXRpb25zLgorICAgICAgICAKKyAgICAgICAg
VGhpcyBpcyBhID4xJSBzcGVlZC11cCBvbiBTdW5TcGlkZXIsIGEgPjMlIHNwZWVkLXVwIG9uIFY4
U3BpZGVyLCBuZXV0cmFsIG9uIFY4djcgYW5kCisgICAgICAgIE9jdGFuZSwgYW5kIGEgPjElIHNs
b3ctZG93biBvbiBLcmFrZW4uIFdlIHNob3VsZCByZXZpc2l0IHRoZSBLcmFrZW4gcmVncmVzc2lv
biBidXQgSQorICAgICAgICB0ZW5kIHRvIHRoaW5rIHRoYXQgU3VuU3BpZGVyIGlzIG1vcmUgaW1w
b3J0YW50LgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNjYWxl
QnlJbnN0cnVjdGlvbkNvdW50KToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OmNsaXBU
aHJlc2hvbGQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvdW50ZXJWYWx1ZUZvck9wdGlt
aXplQWZ0ZXJXYXJtVXApOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvdW50ZXJWYWx1ZUZv
ck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb3Vu
dGVyVmFsdWVGb3JPcHRpbWl6ZVNvb24pOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5o
OgorICAgICAgICAoQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvcHRpbWl6
ZVNvb24pOgorICAgICAgICAqIGJ5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwOgorICAgICAg
ICAoSlNDOjpFeGVjdXRpb25Db3VudGVyOjpoYXNDcm9zc2VkVGhyZXNob2xkKToKKyAgICAgICAg
KiBkZmcvREZHQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjptaWdodENvbXBp
bGVFdmFsKToKKyAgICAgICAgKEpTQzo6REZHOjptaWdodENvbXBpbGVQcm9ncmFtKToKKyAgICAg
ICAgKEpTQzo6REZHOjptaWdodENvbXBpbGVGdW5jdGlvbkZvckNhbGwpOgorICAgICAgICAoSlND
OjpERkc6Om1pZ2h0Q29tcGlsZUZ1bmN0aW9uRm9yQ29uc3RydWN0KToKKyAgICAgICAgKERGRyk6
CisgICAgICAgIChKU0M6OkRGRzo6bWlnaHRJbmxpbmVGdW5jdGlvbkZvckNhbGwpOgorICAgICAg
ICAoSlNDOjpERkc6Om1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDb25zdHJ1Y3QpOgorICAgICAgICAq
IGRmZy9ERkdDYXBhYmlsaXRpZXMuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RG
R0Rpc2Fzc2VtYmxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6RGlzYXNzZW1ibGVyOjpkdW1w
SGVhZGVyKToKKyAgICAgICAgKiBkZmcvREZHT1NSRW50cnkuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OnByZXBhcmVPU1JFbnRyeSk6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAg
ICAgKEpTQzo6REVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAqIGxsaW50L0xMSW50U2xv
d1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OmVudHJ5T1NSKToKKyAgICAgICAgKEpT
Qzo6TExJbnQ6OkxMSU5UX1NMT1dfUEFUSF9ERUNMKToKKwogMjAxMi0xMi0wNiAgRmlsaXAgUGl6
bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFN0cmFuZ2UgcmVzdWx0cyBjYWxjdWxh
dGluZyBhIHNxdWFyZSByb290IGluIGEgbG9vcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDEzNjg4MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjkwLDkgKzE2OTAsNiBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBv
CiAgICAgQVNTRVJUKG1fc291cmNlKTsKICAgICBzZXROdW1QYXJhbWV0ZXJzKHVubGlua2VkQ29k
ZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpOwogCi0gICAgb3B0aW1pemVBZnRlcldhcm1VcCgpOwot
ICAgIGppdEFmdGVyV2FybVVwKCk7Ci0KICNpZiBEVU1QX0NPREVfQkxPQ0tfU1RBVElTVElDUwog
ICAgIGxpdmVDb2RlQmxvY2tTZXQuYWRkKHRoaXMpOwogI2VuZGlmCkBAIC0xOTExLDYgKzE5MDgs
MTIgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgIH0KICAg
ICBtX2luc3RydWN0aW9ucyA9IFdURjo6UmVmQ291bnRlZEFycmF5PEluc3RydWN0aW9uPihpbnN0
cnVjdGlvbnMpOwogCisgICAgLy8gU2V0IG9wdGltaXphdGlvbiB0aHJlc2hvbGRzIG9ubHkgYWZ0
ZXIgbV9pbnN0cnVjdGlvbnMgaXMgaW5pdGlhbGl6ZWQsIHNpbmNlIHRoZXNlCisgICAgLy8gcmVs
eSBvbiB0aGUgaW5zdHJ1Y3Rpb24gY291bnQgKGFuZCBhcmUgaW4gdGhlb3J5IHBlcm1pdHRlZCB0
byBhbHNvIGluc3BlY3QgdGhlCisgICAgLy8gaW5zdHJ1Y3Rpb24gc3RyZWFtIHRvIG1vcmUgYWNj
dXJhdGUgYXNzZXNzIHRoZSBjb3N0IG9mIHRpZXItdXApLgorICAgIG9wdGltaXplQWZ0ZXJXYXJt
VXAoKTsKKyAgICBqaXRBZnRlcldhcm1VcCgpOworCiAgICAgaWYgKE9wdGlvbnM6OmR1bXBHZW5l
cmF0ZWRCeXRlY29kZXMoKSkKICAgICAgICAgZHVtcEJ5dGVjb2RlKCk7CiAgICAgbV9nbG9iYWxE
YXRhLT5maW5pc2hlZENvbXBpbGluZyh0aGlzKTsKQEAgLTI5NzYsNiArMjk3OSwxMDEgQEAgdm9p
ZCBDb2RlQmxvY2s6OnVwZGF0ZUFsbFByZWRpY3Rpb25zKE9wZQogICAgIHVwZGF0ZUFsbEFycmF5
UHJlZGljdGlvbnMob3BlcmF0aW9uKTsKIH0KIAorZG91YmxlIENvZGVCbG9jazo6c2NhbGVCeUlu
c3RydWN0aW9uQ291bnQoKQoreworICAgIC8vIFRoaXMgZXhwcmVzc2lvbiBhcmlzZXMgZnJvbSBk
b2luZyBhIGxlYXN0LXNxdWFyZXMgZml0IG9mCisgICAgLy8KKyAgICAvLyBGW3hfXSA9OiBhICog
U3FydFt4ICsgYl0gKyBBYnNbYyAqIHhdICsgZAorICAgIC8vCisgICAgLy8gYWdhaW5zdCB0aGUg
ZGF0YSBwb2ludHM6CisgICAgLy8KKyAgICAvLyAgICB4ICAgICAgRlt4X10KKyAgICAvLyAgICAx
MCAgICAgICAwLjkgICAgICAgICAgKHNtYWxsZXN0IHJlYXNvbmFibGUgY29kZSBibG9jaykKKyAg
ICAvLyAgIDIwMCAgICAgICAxLjAgICAgICAgICAgKHR5cGljYWwgc21hbGwtaXNoIGNvZGUgYmxv
Y2spCisgICAgLy8gICAzMjAgICAgICAgMS4yICAgICAgICAgIChzb21ldGhpbmcgSSBzYXcgaW4g
M2QtY3ViZSB0aGF0IEkgd2FudGVkIHRvIG9wdGltaXplKQorICAgIC8vICAxMjY4ICAgICAgIDUu
MCAgICAgICAgICAoc29tZXRoaW5nIEkgc2F3IGluIDNkLWN1YmUgdGhhdCBJIGRpZG4ndCB3YW50
IHRvIG9wdGltaXplKQorICAgIC8vICA0MDAwICAgICAgIDUuNiAgICAgICAgICAocmFuZG9tIGxh
cmdlIHNpemUsIHVzZWQgdG8gY2F1c2UgdGhlIGZ1bmN0aW9uIHRvIGNvbnZlcmdlIHRvIGEgc2hh
bGxvdyBjdXJ2ZSBvZiBzb21lIHNvcnQpCisgICAgLy8gMTAwMDAgICAgICAgNi4wICAgICAgICAg
IChzaW1pbGFyIHRvIGFib3ZlKQorICAgIC8vCisgICAgLy8gV2UndmUgbG9uZyBrbm93biB0aGUg
Zm9sbG93aW5nIHRvIGJlIHRydWU6CisgICAgLy8gLSBTbWFsbCBjb2RlIGJsb2NrcyBhcmUgY2hl
YXAgdG8gb3B0aW1pemUgYW5kIHNvIHdlIHNob3VsZCBkbyBpdCBzb29uZXIgcmF0aGVyCisgICAg
Ly8gICB0aGFuIGxhdGVyLgorICAgIC8vIC0gTGFyZ2UgY29kZSBibG9ja3MgYXJlIGV4cGVuc2l2
ZSB0byBvcHRpbWl6ZSBhbmQgc28gd2Ugc2hvdWxkIHBvc3Rwb25lIGRvaW5nIHNvLAorICAgIC8v
ICAgYW5kIHNvbWV0aW1lcyBoYXZlIGEgbGFyZ2UgZW5vdWdoIHRocmVzaG9sZCB0aGF0IHdlIG5l
dmVyIG9wdGltaXplIHRoZW0uCisgICAgLy8gLSBUaGUgZGlmZmVyZW5jZSBpbiBjb3N0IGlzIG5v
dCB0b3RhbGx5IGxpbmVhciBiZWNhdXNlIChhKSBqdXN0IGludm9raW5nIHRoZQorICAgIC8vICAg
REZHIGluY3VycyBzb21lIGJhc2UgY29zdCBhbmQgKGIpIGZvciBsYXJnZSBjb2RlIGJsb2NrcyB0
aGVyZSBpcyBlbm91Z2ggc2xvcAorICAgIC8vICAgaW4gdGhlIGNvcnJlbGF0aW9uIGJldHdlZW4g
aW5zdHJ1Y3Rpb24gY291bnQgYW5kIHRoZSBhY3R1YWwgY29tcGlsYXRpb24gY29zdAorICAgIC8v
ICAgdGhhdCBmb3IgdGhvc2UgbGFyZ2UgYmxvY2tzLCB0aGUgaW5zdHJ1Y3Rpb24gY291bnQgc2hv
dWxkIG5vdCBoYXZlIGEgc3Ryb25nCisgICAgLy8gICBpbmZsdWVuY2Ugb24gb3VyIHRocmVzaG9s
ZC4KKyAgICAvLworICAgIC8vIEkga25ldyB0aGUgZ29hbHMgYnV0IEkgZGlkbid0IGtub3cgaG93
IHRvIGFjaGlldmUgdGhlbTsgc28gSSBwaWNrZWQgYW4gaW50ZXJlc3RpbmcKKyAgICAvLyBleGFt
cGxlIHdoZXJlIHRoZSBoZXVyaXN0aWNzIHdlcmUgcmlnaHQgKGNvZGUgYmxvY2sgaW4gM2QtY3Vi
ZSB3aXRoIGluc3RydWN0aW9uCisgICAgLy8gY291bnQgMzIwLCB3aGljaCBnb3QgY29tcGlsZWQg
ZWFybHkgYXMgaXQgc2hvdWxkIGhhdmUgYmVlbikgYW5kIG9uZSB3aGVyZSB0aGV5IHdlcmUKKyAg
ICAvLyB0b3RhbGx5IHdyb25nIChjb2RlIGJsb2NrIGluIDNkLWN1YmUgd2l0aCBpbnN0cnVjdGlv
biBjb3VudCAxMjY4LCB3aGljaCB3YXMgZXhwZW5zaXZlCisgICAgLy8gdG8gY29tcGlsZSBhbmQg
ZGlkbid0IHJ1biBvZnRlbiBlbm91Z2ggdG8gd2FycmFudCBjb21waWxhdGlvbiBpbiBteSBvcGlu
aW9uKSwgYW5kCisgICAgLy8gdGhlbiB0aHJldyBpbiBhZGRpdGlvbmFsIGRhdGEgcG9pbnRzIHRo
YXQgcmVwcmVzZW50ZWQgbXkgb3duIGd1ZXNzIG9mIHdoYXQgb3VyCisgICAgLy8gaGV1cmlzdGlj
cyBzaG91bGQgZG8gZm9yIHNvbWUgcm91bmQtbnVtYmVyZWQgZXhhbXBsZXMuCisgICAgLy8KKyAg
ICAvLyBUaGUgZXhwcmVzc2lvbiB0byB3aGljaCBJIGRlY2lkZWQgdG8gZml0IHRoZSBkYXRhIGFy
b3NlIGJlY2F1c2UgSSBzdGFydGVkIHdpdGggYW4KKyAgICAvLyBhZmZpbmUgZnVuY3Rpb24sIGFu
ZCB0aGVuIGRpZCB0d28gdGhpbmdzOiBwdXQgdGhlIGxpbmVhciBwYXJ0IGluIGFuIEFicyB0byBl
bnN1cmUKKyAgICAvLyB0aGF0IHRoZSBmaXQgZGlkbid0IGVuZCB1cCBjaG9vc2luZyBhIG5lZ2F0
aXZlIHZhbHVlIG9mIGMgKHdoaWNoIHdvdWxkIHJlc3VsdCBpbgorICAgIC8vIHRoZSBmdW5jdGlv
biB0dXJuaW5nIG92ZXIgYW5kIGdvaW5nIG5lZ2F0aXZlIGZvciBsYXJnZSB4KSBhbmQgSSB0aHJl
dyBpbiBhIFNxcnQKKyAgICAvLyB0ZXJtIGJlY2F1c2UgU3FydCByZXByZXNlbnRzIG15IGludHV0
aW9uIHRoYXQgdGhlIGZ1bmN0aW9uIHNob3VsZCBiZSBtb3JlIHNlbnNpdGl2ZQorICAgIC8vIHRv
IHNtYWxsIGNoYW5nZXMgaW4gc21hbGwgdmFsdWVzIG9mIHgsIGJ1dCBsZXNzIHNlbnNpdGl2ZSB3
aGVuIHggZ2V0cyBsYXJnZS4KKyAgICAKKyAgICAvLyBOb3RlIHRoYXQgdGhlIGN1cnJlbnQgZml0
IGVzc2VudGlhbGx5IGVsaW1pbmF0ZXMgdGhlIGxpbmVhciBwb3J0aW9uIG9mIHRoZQorICAgIC8v
IGV4cHJlc3Npb24gKGMgPT0gMC4wKS4KKyAgICBjb25zdCBkb3VibGUgYSA9IDAuMDYxNTA0Owor
ICAgIGNvbnN0IGRvdWJsZSBiID0gMS4wMjQwNjsKKyAgICBjb25zdCBkb3VibGUgYyA9IDAuMDsK
KyAgICBjb25zdCBkb3VibGUgZCA9IDAuODI1OTE0OworICAgIAorICAgIGRvdWJsZSBpbnN0cnVj
dGlvbkNvdW50ID0gdGhpcy0+aW5zdHJ1Y3Rpb25Db3VudCgpOworICAgIAorICAgIEFTU0VSVChp
bnN0cnVjdGlvbkNvdW50KTsKKyAgICAKKyAgICBkb3VibGUgcmVzdWx0ID0gZCArIGEgKiBzcXJ0
KGluc3RydWN0aW9uQ291bnQgKyBiKSArIGMgKiBpbnN0cnVjdGlvbkNvdW50OworI2lmIEVOQUJM
RShKSVRfVkVSQk9TRV9PU1IpCisgICAgZGF0YUxvZygqdGhpcywgIjogaW5zdHJ1Y3Rpb24gY291
bnQgaXMgIiwgaW5zdHJ1Y3Rpb25Db3VudCwgIiwgc2NhbGluZyBleGVjdXRpb24gY291bnRlciBi
eSAiLCByZXN1bHQsICJcbiIpOworI2VuZGlmCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3Rh
dGljIGludDMyX3QgY2xpcFRocmVzaG9sZChkb3VibGUgdGhyZXNob2xkKQoreworICAgIGlmICh0
aHJlc2hvbGQgPCAxLjApCisgICAgICAgIHJldHVybiAxOworICAgIAorICAgIGlmICh0aHJlc2hv
bGQgPiBzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1h
eCgpKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgp
OworICAgIAorICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQzMl90Pih0aHJlc2hvbGQpOworfQor
CitpbnQzMl90IENvZGVCbG9jazo6Y291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgp
Cit7CisgICAgcmV0dXJuIGNsaXBUaHJlc2hvbGQoCisgICAgICAgIE9wdGlvbnM6OnRocmVzaG9s
ZEZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKSAqCisgICAgICAgIHNjYWxlQnlJbnN0cnVjdGlvbkNv
dW50KCkgKgorICAgICAgICAoMSA8PCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpKSk7Cit9
CisKK2ludDMyX3QgQ29kZUJsb2NrOjpjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dh
cm1VcCgpCit7CisgICAgcmV0dXJuIGNsaXBUaHJlc2hvbGQoCisgICAgICAgIE9wdGlvbnM6OnRo
cmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkgKgorICAgICAgICBzY2FsZUJ5SW5z
dHJ1Y3Rpb25Db3VudCgpICoKKyAgICAgICAgKDEgPDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50
ZXIoKSkpOworfQorCitpbnQzMl90IENvZGVCbG9jazo6Y291bnRlclZhbHVlRm9yT3B0aW1pemVT
b29uKCkKK3sKKyAgICByZXR1cm4gY2xpcFRocmVzaG9sZCgKKyAgICAgICAgT3B0aW9uczo6dGhy
ZXNob2xkRm9yT3B0aW1pemVTb29uKCkgKgorICAgICAgICBzY2FsZUJ5SW5zdHJ1Y3Rpb25Db3Vu
dCgpICoKKyAgICAgICAgKDEgPDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKSkpOworfQor
CiBib29sIENvZGVCbG9jazo6c2hvdWxkT3B0aW1pemVOb3coKQogewogI2lmIEVOQUJMRShKSVRf
VkVSQk9TRV9PU1IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5oCShyZXZpc2lvbiAxMzY4ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMjIsMTUgKzEwMjIsOSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgICAgICAgICBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVy
ID0gT3B0aW9uczo6cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgoKTsKICAgICAgICAgfQog
ICAgICAgICAKLSAgICAgICAgaW50MzJfdCBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2Fy
bVVwKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE9wdGlvbnM6OnRocmVzaG9sZEZv
ck9wdGltaXplQWZ0ZXJXYXJtVXAoKSA8PCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpOwot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpbnQzMl90IGNvdW50ZXJWYWx1ZUZvck9wdGlt
aXplQWZ0ZXJMb25nV2FybVVwKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE9wdGlv
bnM6OnRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkgPDwgcmVvcHRpbWl6YXRp
b25SZXRyeUNvdW50ZXIoKTsKLSAgICAgICAgfQorICAgICAgICBpbnQzMl90IGNvdW50ZXJWYWx1
ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKKyAgICAgICAgaW50MzJfdCBjb3VudGVyVmFsdWVG
b3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgpOworICAgICAgICBpbnQzMl90IGNvdW50ZXJWYWx1
ZUZvck9wdGltaXplU29vbigpOwogICAgICAgICAKICAgICAgICAgaW50MzJfdCogYWRkcmVzc09m
SklURXhlY3V0ZUNvdW50ZXIoKQogICAgICAgICB7CkBAIC0xMTA5LDcgKzExMDMsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgLy8gaW4gdGhlIGJhc2VsaW5lIGNvZGUuCiAgICAgICAgIHZv
aWQgb3B0aW1pemVTb29uKCkKICAgICAgICAgewotICAgICAgICAgICAgbV9qaXRFeGVjdXRlQ291
bnRlci5zZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT3B0aW1pemVTb29uKCkg
PDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKSwgdGhpcyk7CisgICAgICAgICAgICBtX2pp
dEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZChjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZVNv
b24oKSwgdGhpcyk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHVpbnQzMl90IG9zckV4
aXRDb3VudGVyKCkgY29uc3QgeyByZXR1cm4gbV9vc3JFeGl0Q291bnRlcjsgfQpAQCAtMTE5Miw2
ICsxMTg2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBwcml2YXRlOgogICAgICAgICBmcmll
bmQgY2xhc3MgREZHQ29kZUJsb2NrczsKKyAgICAgICAgCisgICAgICAgIGRvdWJsZSBzY2FsZUJ5
SW5zdHJ1Y3Rpb25Db3VudCgpOwogCiAjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgQ2xvc3VyZUNh
bGxTdHViUm91dGluZSogZmluZENsb3N1cmVDYWxsRm9yUmV0dXJuUEMoUmV0dXJuQWRkcmVzc1B0
cik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1
dGlvbkNvdW50ZXIuY3BwCShyZXZpc2lvbiAxMzY4ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMyw3
ICsxMTMsNyBAQCBib29sIEV4ZWN1dGlvbkNvdW50ZXI6Omhhc0Nyb3NzZWRUaHJlc2hvCiAgICAg
ZG91YmxlIG1vZGlmaWVkVGhyZXNob2xkID0gYXBwbHlNZW1vcnlVc2FnZUhldXJpc3RpY3MobV9h
Y3RpdmVUaHJlc2hvbGQsIGNvZGVCbG9jayk7CiAgICAgCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGRvdWJsZT4obV90b3RhbENvdW50KSArIG1fY291bnRlciA+PQotICAgICAgICAgbW9kaWZpZWRU
aHJlc2hvbGQgLSBzdGF0aWNfY2FzdDxkb3VibGU+KG1fYWN0aXZlVGhyZXNob2xkKSAvIDI7Cisg
ICAgICAgIG1vZGlmaWVkVGhyZXNob2xkIC0gc3RhdGljX2Nhc3Q8ZG91YmxlPihPcHRpb25zOjpt
YXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzKCkpIC8gMjsKIH0KIAogYm9v
bCBFeGVjdXRpb25Db3VudGVyOjpzZXRUaHJlc2hvbGQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCShy
ZXZpc2lvbiAxMzY4ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxp
dGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDMzIEBACiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKK2Jvb2wgbWlnaHRDb21w
aWxlRXZhbChDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gY29kZUJsb2NrLT5p
bnN0cnVjdGlvbkNvdW50KCkgPD0gT3B0aW9uczo6bWF4aW11bU9wdGltaXphdGlvbkNhbmRpZGF0
ZUluc3RydWN0aW9uQ291bnQoKTsKK30KK2Jvb2wgbWlnaHRDb21waWxlUHJvZ3JhbShDb2RlQmxv
Y2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50
KCkgPD0gT3B0aW9uczo6bWF4aW11bU9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291
bnQoKTsKK30KK2Jvb2wgbWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDYWxsKENvZGVCbG9jayogY29k
ZUJsb2NrKQoreworICAgIHJldHVybiBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSA8PSBP
cHRpb25zOjptYXhpbXVtT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCgpOwor
fQorYm9vbCBtaWdodENvbXBpbGVGdW5jdGlvbkZvckNvbnN0cnVjdChDb2RlQmxvY2sqIGNvZGVC
bG9jaykKK3sKKyAgICByZXR1cm4gY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkgPD0gT3B0
aW9uczo6bWF4aW11bU9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQoKTsKK30K
KworYm9vbCBtaWdodElubGluZUZ1bmN0aW9uRm9yQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaykK
K3sKKyAgICByZXR1cm4gY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkgPD0gT3B0aW9uczo6
bWF4aW11bUZ1bmN0aW9uRm9yQ2FsbElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQoKQor
ICAgICAgICAmJiAhY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+bmVlZHNBY3RpdmF0aW9u
KCk7Cit9Citib29sIG1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDb25zdHJ1Y3QoQ29kZUJsb2NrKiBj
b2RlQmxvY2spCit7CisgICAgcmV0dXJuIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpIDw9
IE9wdGlvbnM6Om1heGltdW1GdW5jdGlvbkZvckNvbnN0cnVjdElubGluZUNhbmRpZGF0ZUluc3Ry
dWN0aW9uQ291bnQoKQorICAgICAgICAmJiAhY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+
bmVlZHNBY3RpdmF0aW9uKCk7Cit9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z0ZhaWwoQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIE9wY29kZUlEIG9wY29kZUlELCBib29sIHJlc3VsdCkKIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuaAkocmV2aXNp
b24gMTM2ODgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMzksMzMgKzM5LDEyIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKIC8vIEZhc3QgY2hlY2sgZnVuY3Rpb25z
OyBpZiB0aGV5IHJldHVybiB0cnVlIGl0IGlzIHN0aWxsIG5lY2Vzc2FyeSB0bwogLy8gY2hlY2sg
b3Bjb2Rlcy4KLWlubGluZSBib29sIG1pZ2h0Q29tcGlsZUV2YWwoQ29kZUJsb2NrKiBjb2RlQmxv
Y2spCi17Ci0gICAgcmV0dXJuIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpIDw9IE9wdGlv
bnM6Om1heGltdW1PcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50KCk7Ci19Ci1p
bmxpbmUgYm9vbCBtaWdodENvbXBpbGVQcm9ncmFtKENvZGVCbG9jayogY29kZUJsb2NrKQotewot
ICAgIHJldHVybiBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSA8PSBPcHRpb25zOjptYXhp
bXVtT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCgpOwotfQotaW5saW5lIGJv
b2wgbWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDYWxsKENvZGVCbG9jayogY29kZUJsb2NrKQotewot
ICAgIHJldHVybiBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSA8PSBPcHRpb25zOjptYXhp
bXVtT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCgpOwotfQotaW5saW5lIGJv
b2wgbWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDb25zdHJ1Y3QoQ29kZUJsb2NrKiBjb2RlQmxvY2sp
Ci17Ci0gICAgcmV0dXJuIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpIDw9IE9wdGlvbnM6
Om1heGltdW1PcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50KCk7Ci19Ci0KLWlu
bGluZSBib29sIG1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDYWxsKENvZGVCbG9jayogY29kZUJsb2Nr
KQotewotICAgIHJldHVybiBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSA8PSBPcHRpb25z
OjptYXhpbXVtRnVuY3Rpb25Gb3JDYWxsSW5saW5lQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCgp
Ci0gICAgICAgICYmICFjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5uZWVkc0FjdGl2YXRp
b24oKTsKLX0KLWlubGluZSBib29sIG1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDb25zdHJ1Y3QoQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCi17Ci0gICAgcmV0dXJuIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25D
b3VudCgpIDw9IE9wdGlvbnM6Om1heGltdW1GdW5jdGlvbkZvckNvbnN0cnVjdElubGluZUNhbmRp
ZGF0ZUluc3RydWN0aW9uQ291bnQoKQotICAgICAgICAmJiAhY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKS0+bmVlZHNBY3RpdmF0aW9uKCk7Ci19Citib29sIG1pZ2h0Q29tcGlsZUV2YWwoQ29k
ZUJsb2NrKiBjb2RlQmxvY2spOworYm9vbCBtaWdodENvbXBpbGVQcm9ncmFtKENvZGVCbG9jayog
Y29kZUJsb2NrKTsKK2Jvb2wgbWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDYWxsKENvZGVCbG9jayog
Y29kZUJsb2NrKTsKK2Jvb2wgbWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDb25zdHJ1Y3QoQ29kZUJs
b2NrKiBjb2RlQmxvY2spOworYm9vbCBtaWdodElubGluZUZ1bmN0aW9uRm9yQ2FsbChDb2RlQmxv
Y2sqIGNvZGVCbG9jayk7Citib29sIG1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDb25zdHJ1Y3QoQ29k
ZUJsb2NrKiBjb2RlQmxvY2spOwogCiAvLyBPcGNvZGUgY2hlY2tpbmcuCiBpbmxpbmUgYm9vbCBj
YW5JbmxpbmVSZXNvbHZlT3BlcmF0aW9ucyhPcGNvZGVJRCBvcGNvZGUsIFJlc29sdmVPcGVyYXRp
b25zKiBvcGVyYXRpb25zKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNh
c3NlbWJsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RGlzYXNzZW1ibGVyLmNwcAkocmV2aXNpb24gMTM2ODgxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEaXNhc3NlbWJsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2OSw3
IEBAIHZvaWQgRGlzYXNzZW1ibGVyOjpyZXBvcnRUb1Byb2ZpbGVyKFByb2YKIHZvaWQgRGlzYXNz
ZW1ibGVyOjpkdW1wSGVhZGVyKFByaW50U3RyZWFtJiBvdXQsIExpbmtCdWZmZXImIGxpbmtCdWZm
ZXIpCiB7CiAgICAgb3V0LnByaW50KCJHZW5lcmF0ZWQgREZHIEpJVCBjb2RlIGZvciAiLCBDb2Rl
QmxvY2tXaXRoSklUVHlwZShtX2dyYXBoLm1fY29kZUJsb2NrLCBKSVRDb2RlOjpERkdKSVQpLCAi
LCBpbnN0cnVjdGlvbiBjb3VudCA9ICIsIG1fZ3JhcGgubV9jb2RlQmxvY2stPmluc3RydWN0aW9u
Q291bnQoKSwgIjpcbiIpOworICAgIG91dC5wcmludCgiICAgIE9wdGltaXplZCB3aXRoIGV4ZWN1
dGlvbiBjb3VudGVyID0gIiwgbV9ncmFwaC5tX3Byb2ZpbGVkQmxvY2stPmppdEV4ZWN1dGVDb3Vu
dGVyKCksICJcbiIpOwogICAgIG91dC5wcmludCgiICAgIENvZGUgYXQgWyIsIFJhd1BvaW50ZXIo
bGlua0J1ZmZlci5kZWJ1Z0FkZHJlc3MoKSksICIsICIsIFJhd1BvaW50ZXIoc3RhdGljX2Nhc3Q8
Y2hhcio+KGxpbmtCdWZmZXIuZGVidWdBZGRyZXNzKCkpICsgbGlua0J1ZmZlci5kZWJ1Z1NpemUo
KSksICIpOlxuIik7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RW50cnkuY3BwCShyZXZpc2lvbiAxMzY4ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCB2b2lkKiBw
cmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAgICAgQVNTRVJUKCFjb2RlQmxvY2st
PmppdENvZGVNYXAoKSk7CiAKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgIGRhdGFM
b2dGKCJPU1IgaW4gJXAoJXApIGZyb20gYmMjJXVcbiIsIGNvZGVCbG9jaywgY29kZUJsb2NrLT5h
bHRlcm5hdGl2ZSgpLCBieXRlY29kZUluZGV4KTsKKyAgICBkYXRhTG9nKCJPU1IgaW4gIiwgKmNv
ZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwgIiAtPiAiLCAqY29kZUJsb2NrLCAiIGZyb20gYmMjIiwg
Ynl0ZWNvZGVJbmRleCwgIlxuIik7CiAjZW5kaWYKICAgICAKICAgICBKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwpAQCAtMTAxLDkgKzEwMSw3IEBAIHZvaWQq
IHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKICAgICAgICAgCiAgICAgICAgIGlm
ICghZW50cnktPm1fZXhwZWN0ZWRWYWx1ZXMuYXJndW1lbnQoYXJndW1lbnQpLnZhbGlkYXRlKHZh
bHVlKSkgewogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgICAgICAgICBkYXRhTG9n
RigiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSBhcmd1bWVudCAlenUgaXMgJXMsIGV4cGVjdGVkICIs
IGFyZ3VtZW50LCB2YWx1ZS5kZXNjcmlwdGlvbigpKTsKLSAgICAgICAgICAgIGVudHJ5LT5tX2V4
cGVjdGVkVmFsdWVzLmFyZ3VtZW50KGFyZ3VtZW50KS5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7Ci0g
ICAgICAgICAgICBkYXRhTG9nRigiLlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKCIgICAgT1NS
IGZhaWxlZCBiZWNhdXNlIGFyZ3VtZW50ICIsIGFyZ3VtZW50LCAiIGlzICIsIHZhbHVlLCAiLCBl
eHBlY3RlZCAiLCBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5hcmd1bWVudChhcmd1bWVudCksICIu
XG4iKTsKICNlbmRpZgogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KQEAgLTExMyw3
ICsxMTEsNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAgICAg
ICAgIGlmIChlbnRyeS0+bV9sb2NhbHNGb3JjZWREb3VibGUuZ2V0KGxvY2FsKSkgewogICAgICAg
ICAgICAgaWYgKCFleGVjLT5yZWdpc3RlcnMoKVtsb2NhbF0uanNWYWx1ZSgpLmlzTnVtYmVyKCkp
IHsKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgICAgICAgICAgICAgIGRhdGFMb2dG
KCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIHZhcmlhYmxlICV6dSBpcyAlcywgZXhwZWN0ZWQgbnVt
YmVyLlxuIiwgbG9jYWwsIGV4ZWMtPnJlZ2lzdGVycygpW2xvY2FsXS5qc1ZhbHVlKCkuZGVzY3Jp
cHRpb24oKSk7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIE9TUiBmYWlsZWQgYmVjYXVz
ZSB2YXJpYWJsZSAiLCBsb2NhbCwgIiBpcyAiLCBleGVjLT5yZWdpc3RlcnMoKVtsb2NhbF0uanNW
YWx1ZSgpLCAiLCBleHBlY3RlZCBudW1iZXIuXG4iKTsKICNlbmRpZgogICAgICAgICAgICAgICAg
IHJldHVybiAwOwogICAgICAgICAgICAgfQpAQCAtMTIxLDkgKzExOSw3IEBAIHZvaWQqIHByZXBh
cmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKICAgICAgICAgfQogICAgICAgICBpZiAoIWVu
dHJ5LT5tX2V4cGVjdGVkVmFsdWVzLmxvY2FsKGxvY2FsKS52YWxpZGF0ZShleGVjLT5yZWdpc3Rl
cnMoKVtsb2NhbF0uanNWYWx1ZSgpKSkgewogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0g
ICAgICAgICAgICBkYXRhTG9nRigiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSB2YXJpYWJsZSAlenUg
aXMgJXMsIGV4cGVjdGVkICIsIGxvY2FsLCBleGVjLT5yZWdpc3RlcnMoKVtsb2NhbF0uanNWYWx1
ZSgpLmRlc2NyaXB0aW9uKCkpOwotICAgICAgICAgICAgZW50cnktPm1fZXhwZWN0ZWRWYWx1ZXMu
bG9jYWwobG9jYWwpLmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKLSAgICAgICAgICAgIGRhdGFMb2dG
KCIuXG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgdmFy
aWFibGUgIiwgbG9jYWwsICIgaXMgIiwgZXhlYy0+cmVnaXN0ZXJzKClbbG9jYWxdLmpzVmFsdWUo
KSwgIiwgZXhwZWN0ZWQgIiwgZW50cnktPm1fZXhwZWN0ZWRWYWx1ZXMubG9jYWwobG9jYWwpLCAi
LlxuIik7CiAjZW5kaWYKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gMTM2ODgxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE4MjIsMTIgKzE4MjIsMTUgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemUp
CiAKICAgICBpZiAoIWNvZGVCbG9jay0+Y2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNo
ZWQoKSkgewogICAgICAgICBjb2RlQmxvY2stPnVwZGF0ZUFsbFByZWRpY3Rpb25zKCk7CisjaWYg
RU5BQkxFKEpJVF9WRVJCT1NFX09TUikKKyAgICAgICAgZGF0YUxvZygiQ2hvb3Npbmcgbm90IHRv
IG9wdGltaXplICIsICpjb2RlQmxvY2ssICIgeWV0LlxuIik7CisjZW5kaWYKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAogICAgIGlmIChjb2RlQmxvY2stPmhhc09wdGltaXplZFJlcGxhY2VtZW50
KCkpIHsKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgICAgICBkYXRhTG9nRigiQ29u
c2lkZXJpbmcgT1NSICIsICpjb2RlQmxvY2ssICIgLT4gIiwgKmNvZGVCbG9jay0+cmVwbGFjZW1l
bnQoKSwgIi5cbiIpOworICAgICAgICBkYXRhTG9nKCJDb25zaWRlcmluZyBPU1IgIiwgKmNvZGVC
bG9jaywgIiAtPiAiLCAqY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLCAiLlxuIik7CiAjZW5kaWYK
ICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhbiBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQsIHRoZW4gaXQg
bXVzdCBiZSB0aGUgY2FzZSB0aGF0IHdlIGVudGVyZWQKICAgICAgICAgLy8gY3RpX29wdGltaXpl
IGZyb20gYSBsb29wLiBUaGF0J3MgYmVjYXVzZSBpcyB0aGVyZSdzIGFuIG9wdGltaXplZCByZXBs
YWNlbWVudCwKQEAgLTE4NDQsNyArMTg0Nyw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQs
IG9wdGltaXplKQogICAgICAgICAvLyBhZGRpdGlvbmFsIGNoZWNraW5nIGFueXdheSwgdG8gcmVk
dWNlIHRoZSBhbW91bnQgb2YgcmVjb21waWxhdGlvbiB0aHJhc2hpbmcuCiAgICAgICAgIGlmIChj
b2RlQmxvY2stPnJlcGxhY2VtZW50KCktPnNob3VsZFJlb3B0aW1pemVGcm9tTG9vcE5vdygpKSB7
CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAgICAgIGRhdGFMb2dGKCJUcmln
Z2VyaW5nIHJlb3B0aW1pemF0aW9uIG9mICIsICpjb2RlQmxvY2ssICIoIiwgKmNvZGVCbG9jay0+
cmVwbGFjZW1lbnQoKSwgIikgKGluIGxvb3ApLlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKCJU
cmlnZ2VyaW5nIHJlb3B0aW1pemF0aW9uIG9mICIsICpjb2RlQmxvY2ssICIoIiwgKmNvZGVCbG9j
ay0+cmVwbGFjZW1lbnQoKSwgIikgKGluIGxvb3ApLlxuIik7CiAjZW5kaWYKICAgICAgICAgICAg
IGNvZGVCbG9jay0+cmVvcHRpbWl6ZSgpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTg1Miwy
MyArMTg1NSwyNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZSkKICAgICB9
IGVsc2UgewogICAgICAgICBpZiAoIWNvZGVCbG9jay0+c2hvdWxkT3B0aW1pemVOb3coKSkgewog
I2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgICAgICAgICBkYXRhTG9nRigiRGVsYXlp
bmcgb3B0aW1pemF0aW9uIGZvciAiLCAqY29kZUJsb2NrLCAiIChpbiBsb29wKSBiZWNhdXNlIG9m
IGluc3VmZmljaWVudCBwcm9maWxpbmcuXG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2coIkRlbGF5
aW5nIG9wdGltaXphdGlvbiBmb3IgIiwgKmNvZGVCbG9jaywgIiAoaW4gbG9vcCkgYmVjYXVzZSBv
ZiBpbnN1ZmZpY2llbnQgcHJvZmlsaW5nLlxuIik7CiAjZW5kaWYKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgICAgICAKKyNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQorICAg
ICAgICBkYXRhTG9nKCJUcmlnZ2VyaW5nIG9wdGltaXplZCBjb21waWxhdGlvbiBvZiAiLCAqY29k
ZUJsb2NrLCAiXG4iKTsKKyNlbmRpZgorICAgICAgICAKICAgICAgICAgSlNTY29wZSogc2NvcGUg
PSBjYWxsRnJhbWUtPnNjb3BlKCk7CiAgICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IGNvZGVCbG9j
ay0+Y29tcGlsZU9wdGltaXplZChjYWxsRnJhbWUsIHNjb3BlLCBieXRlY29kZUluZGV4KTsKICNp
ZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQogICAgICAgICBpZiAoZXJyb3IpCi0gICAgICAgICAg
ICBkYXRhTG9nRigiV0FSTklORzogb3B0aW1pemVkIGNvbXBpbGF0aW9uIGZhaWxlZC5cbiIpOwor
ICAgICAgICAgICAgZGF0YUxvZygiV0FSTklORzogb3B0aW1pemVkIGNvbXBpbGF0aW9uIGZhaWxl
ZC5cbiIpOwogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKICNlbmRpZgogICAg
ICAgICAKICAgICAgICAgaWYgKGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKSA9PSBjb2RlQmxvY2sp
IHsKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgICAgICAgICAgZGF0YUxvZ0YoIk9w
dGltaXppbmcgIiwgKmNvZGVCbG9jaywgIiBmYWlsZWQuXG4iKTsKKyAgICAgICAgICAgIGRhdGFM
b2coIk9wdGltaXppbmcgIiwgKmNvZGVCbG9jaywgIiBmYWlsZWQuXG4iKTsKICNlbmRpZgogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBBU1NFUlQoY29kZUJsb2NrLT5nZXRKSVRUeXBlKCkgPT0g
SklUQ29kZTo6QmFzZWxpbmVKSVQpOwpAQCAtMTg4Nyw3ICsxODk0LDcgQEAgREVGSU5FX1NUVUJf
RlVOQ1RJT04odm9pZCwgb3B0aW1pemUpCiAgICAgICAgICAgICAgICAgUmF3UG9pbnRlcigoU1RV
Ql9SRVRVUk5fQUREUkVTUykudmFsdWUoKSksICIgLT4gIiwgUmF3UG9pbnRlcihhZGRyZXNzKSwg
Ii5cbiIpOwogICAgICAgICB9CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAg
ZGF0YUxvZ0YoIk9wdGltaXppbmcgIiwgKmNvZGVCbG9jaywgIiBzdWNjZWVkZWQsIHBlcmZvcm1p
bmcgT1NSIGFmdGVyIGEgZGVsYXkgb2YgIiwgY29kZUJsb2NrLT5vcHRpbWl6YXRpb25EZWxheUNv
dW50ZXIoKSwgIi5cbiIpOworICAgICAgICBkYXRhTG9nKCJPcHRpbWl6aW5nICIsICpjb2RlQmxv
Y2ssICIgc3VjY2VlZGVkLCBwZXJmb3JtaW5nIE9TUiBhZnRlciBhIGRlbGF5IG9mICIsIGNvZGVC
bG9jay0+b3B0aW1pemF0aW9uRGVsYXlDb3VudGVyKCksICIuXG4iKTsKICNlbmRpZgogCiAgICAg
ICAgIGNvZGVCbG9jay0+b3B0aW1pemVTb29uKCk7CkBAIC0xODk2LDcgKzE5MDMsNyBAQCBERUZJ
TkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZSkKICAgICB9CiAgICAgCiAjaWYgRU5BQkxF
KEpJVF9WRVJCT1NFX09TUikKLSAgICBkYXRhTG9nRigiT3B0aW1pemluZyAiLCAqY29kZUJsb2Nr
LCAiIHN1Y2NlZWRlZCwgT1NSIGZhaWxlZCwgYWZ0ZXIgYSBkZWxheSBvZiAiLCBjb2RlQmxvY2st
Pm9wdGltaXphdGlvbkRlbGF5Q291bnRlcigpLCAiLlxuIik7CisgICAgZGF0YUxvZygiT3B0aW1p
emluZyAiLCAqY29kZUJsb2NrLCAiIHN1Y2NlZWRlZCwgT1NSIGZhaWxlZCwgYWZ0ZXIgYSBkZWxh
eSBvZiAiLCBjb2RlQmxvY2stPm9wdGltaXphdGlvbkRlbGF5Q291bnRlcigpLCAiLlxuIik7CiAj
ZW5kaWYKIAogICAgIC8vIENvdW50IHRoZSBPU1IgZmFpbHVyZSBhcyBhIHNwZWN1bGF0aW9uIGZh
aWx1cmUuIElmIHRoaXMgaGFwcGVucyBhIGxvdCwgdGhlbgpAQCAtMTkwNCw3ICsxOTExLDcgQEAg
REVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemUpCiAgICAgb3B0aW1pemVkQ29kZUJs
b2NrLT5jb3VudE9TUkV4aXQoKTsKICAgICAKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQot
ICAgIGRhdGFMb2dGKCJFbmNvdW50ZXJlZCBPU1IgZmFpbHVyZSAiLCAqY29kZUJsb2NrLCAiIC0+
ICIsICpjb2RlQmxvY2stPnJlcGxhY2VtZW50KCksICIuXG4iKTsKKyAgICBkYXRhTG9nKCJFbmNv
dW50ZXJlZCBPU1IgZmFpbHVyZSAiLCAqY29kZUJsb2NrLCAiIC0+ICIsICpjb2RlQmxvY2stPnJl
cGxhY2VtZW50KCksICIuXG4iKTsKICNlbmRpZgogCiAgICAgLy8gV2UgYXJlIGEgbG90IG1vcmUg
Y29uc2VydmF0aXZlIGFib3V0IHRyaWdnZXJpbmcgcmVvcHRpbWl6YXRpb24gYWZ0ZXIgT1NSIGZh
aWx1cmUgdGhhbgpAQCAtMTkxNyw3ICsxOTI0LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9p
ZCwgb3B0aW1pemUpCiAgICAgLy8gcmVvcHRpbWl6YXRpb24gdHJpZ2dlci4KICAgICBpZiAob3B0
aW1pemVkQ29kZUJsb2NrLT5zaG91bGRSZW9wdGltaXplTm93KCkpIHsKICNpZiBFTkFCTEUoSklU
X1ZFUkJPU0VfT1NSKQotICAgICAgICBkYXRhTG9nRigiVHJpZ2dlcmluZyByZW9wdGltaXphdGlv
biBvZiAiLCAqY29kZUJsb2NrLCAiIC0+ICIsICpjb2RlQmxvY2stPnJlcGxhY2VtZW50KCksICIg
KGFmdGVyIE9TUiBmYWlsKS5cbiIpOworICAgICAgICBkYXRhTG9nKCJUcmlnZ2VyaW5nIHJlb3B0
aW1pemF0aW9uIG9mICIsICpjb2RlQmxvY2ssICIgLT4gIiwgKmNvZGVCbG9jay0+cmVwbGFjZW1l
bnQoKSwgIiAoYWZ0ZXIgT1NSIGZhaWwpLlxuIik7CiAjZW5kaWYKICAgICAgICAgY29kZUJsb2Nr
LT5yZW9wdGltaXplKCk7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTM2ODgxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzE1LDggKzMxNSw3IEBAIGVudW0gRW50cnlLaW5kIHsgUHJvbG9ndWUsIEFyaXR5
Q2hlY2sgfTsKIHN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgZW50cnlPU1IoRXhlY1N0YXRlKiBl
eGVjLCBJbnN0cnVjdGlvbiosIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBjaGFyICpuYW1l
LCBFbnRyeUtpbmQga2luZCkKIHsKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgIGRh
dGFMb2dGKCIlcDogRW50ZXJlZCAlcyB3aXRoIGV4ZWN1dGVDb3VudGVyID0gJXNcbiIsIGNvZGVC
bG9jaywgbmFtZSwKLSAgICAgICAgICAgIGNvZGVCbG9jay0+bGxpbnRFeGVjdXRlQ291bnRlcigp
LnN0YXR1cygpKTsKKyAgICBkYXRhTG9nKCpjb2RlQmxvY2ssICI6IEVudGVyZWQgIiwgbmFtZSwg
IiB3aXRoIGV4ZWN1dGVDb3VudGVyID0gIiwgY29kZUJsb2NrLT5sbGludEV4ZWN1dGVDb3VudGVy
KCksICJcbiIpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0obmFtZSk7CiAjZW5kaWYKQEAgLTM2
NCw4ICszNjMsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChsb29wX29zcikKICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwogICAgIAogI2lmIEVOQUJMRShKSVRf
VkVSQk9TRV9PU1IpCi0gICAgZGF0YUxvZ0YoIiVwOiBFbnRlcmVkIGxvb3Bfb3NyIHdpdGggZXhl
Y3V0ZUNvdW50ZXIgPSAlc1xuIiwgY29kZUJsb2NrLAotICAgICAgICAgICAgY29kZUJsb2NrLT5s
bGludEV4ZWN1dGVDb3VudGVyKCkuc3RhdHVzKCkpOworICAgIGRhdGFMb2coKmNvZGVCbG9jaywg
IjogRW50ZXJlZCBsb29wX29zciB3aXRoIGV4ZWN1dGVDb3VudGVyID0gIiwgY29kZUJsb2NrLT5s
bGludEV4ZWN1dGVDb3VudGVyKCksICJcbiIpOwogI2VuZGlmCiAgICAgCiAgICAgaWYgKCFzaG91
bGRKSVQoZXhlYykpIHsKQEAgLTM5NSw4ICszOTMsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChy
ZXBsYWNlKQogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CiAg
ICAgCiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICBkYXRhTG9nRigiJXA6IEVudGVy
ZWQgcmVwbGFjZSB3aXRoIGV4ZWN1dGVDb3VudGVyID0gJXNcbiIsIGNvZGVCbG9jaywKLSAgICAg
ICAgICAgIGNvZGVCbG9jay0+bGxpbnRFeGVjdXRlQ291bnRlcigpLnN0YXR1cygpKTsKKyAgICBk
YXRhTG9nKCpjb2RlQmxvY2ssICI6IEVudGVyZWQgcmVwbGFjZSB3aXRoIGV4ZWN1dGVDb3VudGVy
ID0gIiwgY29kZUJsb2NrLT5sbGludEV4ZWN1dGVDb3VudGVyKCksICJcbiIpOwogI2VuZGlmCiAg
ICAgCiAgICAgaWYgKHNob3VsZEpJVChleGVjKSkK
</data>
<flag name="review"
          id="194767"
          type_id="1"
          status="+"
          setter="ggaren"
    />
    <flag name="commit-queue"
          id="194775"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178303</attachid>
            <date>2012-12-07 16:44:02 -0800</date>
            <delta_ts>2012-12-08 23:00:53 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>math.patch</filename>
            <type>text/plain</type>
            <size>23605</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTM2OTk5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBA
CisyMDEyLTEyLTA3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SlNDIHNob3VsZCBzY2FsZSB0aGUgb3B0aW1pemF0aW9uIHRocmVzaG9sZCBmb3IgYSBjb2RlIGJs
b2NrIGFjY29yZGluZyB0byB0aGUgY29zdCBvZiBjb21waWxpbmcgaXQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNDQwNgorCisgICAgICAgIFJldmll
d2VkIGJ5IEdlb2ZmcmV5IEdhcmVuLgorCisgICAgICAgIFdlJ3ZlIGxvbmcga25vd24gdGhhdCB3
ZSB3YW50IHRvIHNjYWxlIHRoZSBleGVjdXRpb24gY291bnQgdGhyZXNob2xkIG5lZWRlZCBmb3Ig
dGhlIERGRworICAgICAgICB0byBraWNrIGluIHRvIHNjYWxlIGFjY29yZGluZyB0byBzb21lIGVz
dGltYXRlIG9mIHRoZSBjb3N0IG9mIGNvbXBpbGluZyB0aGF0IGNvZGUgYmxvY2suCisgICAgICAg
IFRoaXMgaW5zdGl0dXRlcyBhIHJlbGF0aW9uc2hpcCBsaWtlIHRoaXM6CisgICAgICAgIAorICAg
ICAgICB0aHJlc2hvbGQgPSB0aHJlc2hvbGRTZXR0aW5nICogKGEgKiBzcXJ0KGluc3RydWN0aW9u
Q291bnQgKyBiKSArIGFicyhjICogaW5zdHJ1Y3Rpb25Db3VudCkgKyBkCisgICAgICAgIAorICAg
ICAgICBXaGVyZSBhLCBiLCBjLCBkIGFyZSBjb2VmZmljaWVudHMgZGVyaXZlZCBmcm9tIGZpdHRp
bmcgdGhlIGFib3ZlIGV4cHJlc3Npb24gdG8gdmFyaW91cworICAgICAgICBkYXRhIHBvaW50cywg
d2hpY2ggSSBjaG9zZSBiYXNlZCBvbiBsb29raW5nIGF0IG9uZSBiZW5jaG1hcmsgKDNkLWN1YmUp
IGFuZCBmcm9tIG15CisgICAgICAgIG93biBpbnR1aXRpb25zLgorICAgICAgICAKKyAgICAgICAg
VGhpcyBpcyBhID4xJSBzcGVlZC11cCBvbiBTdW5TcGlkZXIsIGEgPjMlIHNwZWVkLXVwIG9uIFY4
U3BpZGVyLCBuZXV0cmFsIG9uIFY4djcgYW5kCisgICAgICAgIE9jdGFuZSwgYW5kIGEgPjElIHNs
b3ctZG93biBvbiBLcmFrZW4uIFdlIHNob3VsZCByZXZpc2l0IHRoZSBLcmFrZW4gcmVncmVzc2lv
biBidXQgSQorICAgICAgICB0ZW5kIHRvIHRoaW5rIHRoYXQgU3VuU3BpZGVyIGlzIG1vcmUgaW1w
b3J0YW50LgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNjYWxl
QnlJbnN0cnVjdGlvbkNvdW50KToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OmNsaXBU
aHJlc2hvbGQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvdW50ZXJWYWx1ZUZvck9wdGlt
aXplQWZ0ZXJXYXJtVXApOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvdW50ZXJWYWx1ZUZv
ck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb3Vu
dGVyVmFsdWVGb3JPcHRpbWl6ZVNvb24pOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5o
OgorICAgICAgICAoQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvcHRpbWl6
ZVNvb24pOgorICAgICAgICAqIGJ5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwOgorICAgICAg
ICAoSlNDOjpFeGVjdXRpb25Db3VudGVyOjpoYXNDcm9zc2VkVGhyZXNob2xkKToKKyAgICAgICAg
KiBkZmcvREZHQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjptaWdodENvbXBp
bGVFdmFsKToKKyAgICAgICAgKEpTQzo6REZHOjptaWdodENvbXBpbGVQcm9ncmFtKToKKyAgICAg
ICAgKEpTQzo6REZHOjptaWdodENvbXBpbGVGdW5jdGlvbkZvckNhbGwpOgorICAgICAgICAoSlND
OjpERkc6Om1pZ2h0Q29tcGlsZUZ1bmN0aW9uRm9yQ29uc3RydWN0KToKKyAgICAgICAgKERGRyk6
CisgICAgICAgIChKU0M6OkRGRzo6bWlnaHRJbmxpbmVGdW5jdGlvbkZvckNhbGwpOgorICAgICAg
ICAoSlNDOjpERkc6Om1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDb25zdHJ1Y3QpOgorICAgICAgICAq
IGRmZy9ERkdDYXBhYmlsaXRpZXMuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RG
R0Rpc2Fzc2VtYmxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6RGlzYXNzZW1ibGVyOjpkdW1w
SGVhZGVyKToKKyAgICAgICAgKiBkZmcvREZHT1NSRW50cnkuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OnByZXBhcmVPU1JFbnRyeSk6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAg
ICAgKEpTQzo6REVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAqIGxsaW50L0xMSW50U2xv
d1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OmVudHJ5T1NSKToKKyAgICAgICAgKEpT
Qzo6TExJbnQ6OkxMSU5UX1NMT1dfUEFUSF9ERUNMKToKKwogMjAxMi0xMi0wNiAgRmlsaXAgUGl6
bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFN0cmFuZ2UgcmVzdWx0cyBjYWxjdWxh
dGluZyBhIHNxdWFyZSByb290IGluIGEgbG9vcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDEzNjg4MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjkwLDkgKzE2OTAsNiBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBv
CiAgICAgQVNTRVJUKG1fc291cmNlKTsKICAgICBzZXROdW1QYXJhbWV0ZXJzKHVubGlua2VkQ29k
ZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpOwogCi0gICAgb3B0aW1pemVBZnRlcldhcm1VcCgpOwot
ICAgIGppdEFmdGVyV2FybVVwKCk7Ci0KICNpZiBEVU1QX0NPREVfQkxPQ0tfU1RBVElTVElDUwog
ICAgIGxpdmVDb2RlQmxvY2tTZXQuYWRkKHRoaXMpOwogI2VuZGlmCkBAIC0xOTExLDYgKzE5MDgs
MTIgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgIH0KICAg
ICBtX2luc3RydWN0aW9ucyA9IFdURjo6UmVmQ291bnRlZEFycmF5PEluc3RydWN0aW9uPihpbnN0
cnVjdGlvbnMpOwogCisgICAgLy8gU2V0IG9wdGltaXphdGlvbiB0aHJlc2hvbGRzIG9ubHkgYWZ0
ZXIgbV9pbnN0cnVjdGlvbnMgaXMgaW5pdGlhbGl6ZWQsIHNpbmNlIHRoZXNlCisgICAgLy8gcmVs
eSBvbiB0aGUgaW5zdHJ1Y3Rpb24gY291bnQgKGFuZCBhcmUgaW4gdGhlb3J5IHBlcm1pdHRlZCB0
byBhbHNvIGluc3BlY3QgdGhlCisgICAgLy8gaW5zdHJ1Y3Rpb24gc3RyZWFtIHRvIG1vcmUgYWNj
dXJhdGUgYXNzZXNzIHRoZSBjb3N0IG9mIHRpZXItdXApLgorICAgIG9wdGltaXplQWZ0ZXJXYXJt
VXAoKTsKKyAgICBqaXRBZnRlcldhcm1VcCgpOworCiAgICAgaWYgKE9wdGlvbnM6OmR1bXBHZW5l
cmF0ZWRCeXRlY29kZXMoKSkKICAgICAgICAgZHVtcEJ5dGVjb2RlKCk7CiAgICAgbV9nbG9iYWxE
YXRhLT5maW5pc2hlZENvbXBpbGluZyh0aGlzKTsKQEAgLTI5MTEsNiArMjkxNCwxMDEgQEAgYm9v
bCBGdW5jdGlvbkNvZGVCbG9jazo6aml0Q29tcGlsZUltcGwoRQogfQogI2VuZGlmCiAKK2RvdWJs
ZSBDb2RlQmxvY2s6OnNjYWxlQnlJbnN0cnVjdGlvbkNvdW50KCkKK3sKKyAgICAvLyBUaGlzIGV4
cHJlc3Npb24gYXJpc2VzIGZyb20gZG9pbmcgYSBsZWFzdC1zcXVhcmVzIGZpdCBvZgorICAgIC8v
CisgICAgLy8gRlt4X10gPTogYSAqIFNxcnRbeCArIGJdICsgQWJzW2MgKiB4XSArIGQKKyAgICAv
LworICAgIC8vIGFnYWluc3QgdGhlIGRhdGEgcG9pbnRzOgorICAgIC8vCisgICAgLy8gICAgeCAg
ICAgIEZbeF9dCisgICAgLy8gICAgMTAgICAgICAgMC45ICAgICAgICAgIChzbWFsbGVzdCByZWFz
b25hYmxlIGNvZGUgYmxvY2spCisgICAgLy8gICAyMDAgICAgICAgMS4wICAgICAgICAgICh0eXBp
Y2FsIHNtYWxsLWlzaCBjb2RlIGJsb2NrKQorICAgIC8vICAgMzIwICAgICAgIDEuMiAgICAgICAg
ICAoc29tZXRoaW5nIEkgc2F3IGluIDNkLWN1YmUgdGhhdCBJIHdhbnRlZCB0byBvcHRpbWl6ZSkK
KyAgICAvLyAgMTI2OCAgICAgICA1LjAgICAgICAgICAgKHNvbWV0aGluZyBJIHNhdyBpbiAzZC1j
dWJlIHRoYXQgSSBkaWRuJ3Qgd2FudCB0byBvcHRpbWl6ZSkKKyAgICAvLyAgNDAwMCAgICAgICA1
LjYgICAgICAgICAgKHJhbmRvbSBsYXJnZSBzaXplLCB1c2VkIHRvIGNhdXNlIHRoZSBmdW5jdGlv
biB0byBjb252ZXJnZSB0byBhIHNoYWxsb3cgY3VydmUgb2Ygc29tZSBzb3J0KQorICAgIC8vIDEw
MDAwICAgICAgIDYuMCAgICAgICAgICAoc2ltaWxhciB0byBhYm92ZSkKKyAgICAvLworICAgIC8v
IFdlJ3ZlIGxvbmcga25vd24gdGhlIGZvbGxvd2luZyB0byBiZSB0cnVlOgorICAgIC8vIC0gU21h
bGwgY29kZSBibG9ja3MgYXJlIGNoZWFwIHRvIG9wdGltaXplIGFuZCBzbyB3ZSBzaG91bGQgZG8g
aXQgc29vbmVyIHJhdGhlcgorICAgIC8vICAgdGhhbiBsYXRlci4KKyAgICAvLyAtIExhcmdlIGNv
ZGUgYmxvY2tzIGFyZSBleHBlbnNpdmUgdG8gb3B0aW1pemUgYW5kIHNvIHdlIHNob3VsZCBwb3N0
cG9uZSBkb2luZyBzbywKKyAgICAvLyAgIGFuZCBzb21ldGltZXMgaGF2ZSBhIGxhcmdlIGVub3Vn
aCB0aHJlc2hvbGQgdGhhdCB3ZSBuZXZlciBvcHRpbWl6ZSB0aGVtLgorICAgIC8vIC0gVGhlIGRp
ZmZlcmVuY2UgaW4gY29zdCBpcyBub3QgdG90YWxseSBsaW5lYXIgYmVjYXVzZSAoYSkganVzdCBp
bnZva2luZyB0aGUKKyAgICAvLyAgIERGRyBpbmN1cnMgc29tZSBiYXNlIGNvc3QgYW5kIChiKSBm
b3IgbGFyZ2UgY29kZSBibG9ja3MgdGhlcmUgaXMgZW5vdWdoIHNsb3AKKyAgICAvLyAgIGluIHRo
ZSBjb3JyZWxhdGlvbiBiZXR3ZWVuIGluc3RydWN0aW9uIGNvdW50IGFuZCB0aGUgYWN0dWFsIGNv
bXBpbGF0aW9uIGNvc3QKKyAgICAvLyAgIHRoYXQgZm9yIHRob3NlIGxhcmdlIGJsb2NrcywgdGhl
IGluc3RydWN0aW9uIGNvdW50IHNob3VsZCBub3QgaGF2ZSBhIHN0cm9uZworICAgIC8vICAgaW5m
bHVlbmNlIG9uIG91ciB0aHJlc2hvbGQuCisgICAgLy8KKyAgICAvLyBJIGtuZXcgdGhlIGdvYWxz
IGJ1dCBJIGRpZG4ndCBrbm93IGhvdyB0byBhY2hpZXZlIHRoZW07IHNvIEkgcGlja2VkIGFuIGlu
dGVyZXN0aW5nCisgICAgLy8gZXhhbXBsZSB3aGVyZSB0aGUgaGV1cmlzdGljcyB3ZXJlIHJpZ2h0
IChjb2RlIGJsb2NrIGluIDNkLWN1YmUgd2l0aCBpbnN0cnVjdGlvbgorICAgIC8vIGNvdW50IDMy
MCwgd2hpY2ggZ290IGNvbXBpbGVkIGVhcmx5IGFzIGl0IHNob3VsZCBoYXZlIGJlZW4pIGFuZCBv
bmUgd2hlcmUgdGhleSB3ZXJlCisgICAgLy8gdG90YWxseSB3cm9uZyAoY29kZSBibG9jayBpbiAz
ZC1jdWJlIHdpdGggaW5zdHJ1Y3Rpb24gY291bnQgMTI2OCwgd2hpY2ggd2FzIGV4cGVuc2l2ZQor
ICAgIC8vIHRvIGNvbXBpbGUgYW5kIGRpZG4ndCBydW4gb2Z0ZW4gZW5vdWdoIHRvIHdhcnJhbnQg
Y29tcGlsYXRpb24gaW4gbXkgb3BpbmlvbiksIGFuZAorICAgIC8vIHRoZW4gdGhyZXcgaW4gYWRk
aXRpb25hbCBkYXRhIHBvaW50cyB0aGF0IHJlcHJlc2VudGVkIG15IG93biBndWVzcyBvZiB3aGF0
IG91cgorICAgIC8vIGhldXJpc3RpY3Mgc2hvdWxkIGRvIGZvciBzb21lIHJvdW5kLW51bWJlcmVk
IGV4YW1wbGVzLgorICAgIC8vCisgICAgLy8gVGhlIGV4cHJlc3Npb24gdG8gd2hpY2ggSSBkZWNp
ZGVkIHRvIGZpdCB0aGUgZGF0YSBhcm9zZSBiZWNhdXNlIEkgc3RhcnRlZCB3aXRoIGFuCisgICAg
Ly8gYWZmaW5lIGZ1bmN0aW9uLCBhbmQgdGhlbiBkaWQgdHdvIHRoaW5nczogcHV0IHRoZSBsaW5l
YXIgcGFydCBpbiBhbiBBYnMgdG8gZW5zdXJlCisgICAgLy8gdGhhdCB0aGUgZml0IGRpZG4ndCBl
bmQgdXAgY2hvb3NpbmcgYSBuZWdhdGl2ZSB2YWx1ZSBvZiBjICh3aGljaCB3b3VsZCByZXN1bHQg
aW4KKyAgICAvLyB0aGUgZnVuY3Rpb24gdHVybmluZyBvdmVyIGFuZCBnb2luZyBuZWdhdGl2ZSBm
b3IgbGFyZ2UgeCkgYW5kIEkgdGhyZXcgaW4gYSBTcXJ0CisgICAgLy8gdGVybSBiZWNhdXNlIFNx
cnQgcmVwcmVzZW50cyBteSBpbnR1dGlvbiB0aGF0IHRoZSBmdW5jdGlvbiBzaG91bGQgYmUgbW9y
ZSBzZW5zaXRpdmUKKyAgICAvLyB0byBzbWFsbCBjaGFuZ2VzIGluIHNtYWxsIHZhbHVlcyBvZiB4
LCBidXQgbGVzcyBzZW5zaXRpdmUgd2hlbiB4IGdldHMgbGFyZ2UuCisgICAgCisgICAgLy8gTm90
ZSB0aGF0IHRoZSBjdXJyZW50IGZpdCBlc3NlbnRpYWxseSBlbGltaW5hdGVzIHRoZSBsaW5lYXIg
cG9ydGlvbiBvZiB0aGUKKyAgICAvLyBleHByZXNzaW9uIChjID09IDAuMCkuCisgICAgY29uc3Qg
ZG91YmxlIGEgPSAwLjA2MTUwNDsKKyAgICBjb25zdCBkb3VibGUgYiA9IDEuMDI0MDY7CisgICAg
Y29uc3QgZG91YmxlIGMgPSAwLjA7CisgICAgY29uc3QgZG91YmxlIGQgPSAwLjgyNTkxNDsKKyAg
ICAKKyAgICBkb3VibGUgaW5zdHJ1Y3Rpb25Db3VudCA9IHRoaXMtPmluc3RydWN0aW9uQ291bnQo
KTsKKyAgICAKKyAgICBBU1NFUlQoaW5zdHJ1Y3Rpb25Db3VudCk7CisgICAgCisgICAgZG91Ymxl
IHJlc3VsdCA9IGQgKyBhICogc3FydChpbnN0cnVjdGlvbkNvdW50ICsgYikgKyBjICogaW5zdHJ1
Y3Rpb25Db3VudDsKKyNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQorICAgIGRhdGFMb2coKnRo
aXMsICI6IGluc3RydWN0aW9uIGNvdW50IGlzICIsIGluc3RydWN0aW9uQ291bnQsICIsIHNjYWxp
bmcgZXhlY3V0aW9uIGNvdW50ZXIgYnkgIiwgcmVzdWx0LCAiXG4iKTsKKyNlbmRpZgorICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQzMl90IGNsaXBUaHJlc2hvbGQoZG91YmxlIHRo
cmVzaG9sZCkKK3sKKyAgICBpZiAodGhyZXNob2xkIDwgMS4wKQorICAgICAgICByZXR1cm4gMTsK
KyAgICAKKyAgICBpZiAodGhyZXNob2xkID4gc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVy
aWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNf
bGltaXRzPGludDMyX3Q+OjptYXgoKTsKKyAgICAKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50
MzJfdD4odGhyZXNob2xkKTsKK30KKworaW50MzJfdCBDb2RlQmxvY2s6OmNvdW50ZXJWYWx1ZUZv
ck9wdGltaXplQWZ0ZXJXYXJtVXAoKQoreworICAgIHJldHVybiBjbGlwVGhyZXNob2xkKAorICAg
ICAgICBPcHRpb25zOjp0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkgKgorICAgICAg
ICBzY2FsZUJ5SW5zdHJ1Y3Rpb25Db3VudCgpICoKKyAgICAgICAgKDEgPDwgcmVvcHRpbWl6YXRp
b25SZXRyeUNvdW50ZXIoKSkpOworfQorCitpbnQzMl90IENvZGVCbG9jazo6Y291bnRlclZhbHVl
Rm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXAoKQoreworICAgIHJldHVybiBjbGlwVGhyZXNob2xk
KAorICAgICAgICBPcHRpb25zOjp0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgp
ICoKKyAgICAgICAgc2NhbGVCeUluc3RydWN0aW9uQ291bnQoKSAqCisgICAgICAgICgxIDw8IHJl
b3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCkpKTsKK30KKworaW50MzJfdCBDb2RlQmxvY2s6OmNv
dW50ZXJWYWx1ZUZvck9wdGltaXplU29vbigpCit7CisgICAgcmV0dXJuIGNsaXBUaHJlc2hvbGQo
CisgICAgICAgIE9wdGlvbnM6OnRocmVzaG9sZEZvck9wdGltaXplU29vbigpICoKKyAgICAgICAg
c2NhbGVCeUluc3RydWN0aW9uQ291bnQoKSAqCisgICAgICAgICgxIDw8IHJlb3B0aW1pemF0aW9u
UmV0cnlDb3VudGVyKCkpKTsKK30KKwogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKIEFycmF5
UHJvZmlsZSogQ29kZUJsb2NrOjpnZXRBcnJheVByb2ZpbGUodW5zaWduZWQgYnl0ZWNvZGVPZmZz
ZXQpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5o
CShyZXZpc2lvbiAxMzY4ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMjIsMTUgKzEwMjIsOSBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgICAgICAgICBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyID0gT3B0
aW9uczo6cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgoKTsKICAgICAgICAgfQogICAgICAg
ICAKLSAgICAgICAgaW50MzJfdCBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE9wdGlvbnM6OnRocmVzaG9sZEZvck9wdGlt
aXplQWZ0ZXJXYXJtVXAoKSA8PCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBpbnQzMl90IGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0
ZXJMb25nV2FybVVwKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE9wdGlvbnM6OnRo
cmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkgPDwgcmVvcHRpbWl6YXRpb25SZXRy
eUNvdW50ZXIoKTsKLSAgICAgICAgfQorICAgICAgICBpbnQzMl90IGNvdW50ZXJWYWx1ZUZvck9w
dGltaXplQWZ0ZXJXYXJtVXAoKTsKKyAgICAgICAgaW50MzJfdCBjb3VudGVyVmFsdWVGb3JPcHRp
bWl6ZUFmdGVyTG9uZ1dhcm1VcCgpOworICAgICAgICBpbnQzMl90IGNvdW50ZXJWYWx1ZUZvck9w
dGltaXplU29vbigpOwogICAgICAgICAKICAgICAgICAgaW50MzJfdCogYWRkcmVzc09mSklURXhl
Y3V0ZUNvdW50ZXIoKQogICAgICAgICB7CkBAIC0xMTA5LDcgKzExMDMsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgLy8gaW4gdGhlIGJhc2VsaW5lIGNvZGUuCiAgICAgICAgIHZvaWQgb3B0
aW1pemVTb29uKCkKICAgICAgICAgewotICAgICAgICAgICAgbV9qaXRFeGVjdXRlQ291bnRlci5z
ZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT3B0aW1pemVTb29uKCkgPDwgcmVv
cHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKSwgdGhpcyk7CisgICAgICAgICAgICBtX2ppdEV4ZWN1
dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZChjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZVNvb24oKSwg
dGhpcyk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHVpbnQzMl90IG9zckV4aXRDb3Vu
dGVyKCkgY29uc3QgeyByZXR1cm4gbV9vc3JFeGl0Q291bnRlcjsgfQpAQCAtMTE5Miw2ICsxMTg2
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xh
c3MgREZHQ29kZUJsb2NrczsKKyAgICAgICAgCisgICAgICAgIGRvdWJsZSBzY2FsZUJ5SW5zdHJ1
Y3Rpb25Db3VudCgpOwogCiAjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgQ2xvc3VyZUNhbGxTdHVi
Um91dGluZSogZmluZENsb3N1cmVDYWxsRm9yUmV0dXJuUEMoUmV0dXJuQWRkcmVzc1B0cik7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNv
dW50ZXIuY3BwCShyZXZpc2lvbiAxMzY4ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMyw3ICsxMTMs
OCBAQCBib29sIEV4ZWN1dGlvbkNvdW50ZXI6Omhhc0Nyb3NzZWRUaHJlc2hvCiAgICAgZG91Ymxl
IG1vZGlmaWVkVGhyZXNob2xkID0gYXBwbHlNZW1vcnlVc2FnZUhldXJpc3RpY3MobV9hY3RpdmVU
aHJlc2hvbGQsIGNvZGVCbG9jayk7CiAgICAgCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJs
ZT4obV90b3RhbENvdW50KSArIG1fY291bnRlciA+PQotICAgICAgICAgbW9kaWZpZWRUaHJlc2hv
bGQgLSBzdGF0aWNfY2FzdDxkb3VibGU+KG1fYWN0aXZlVGhyZXNob2xkKSAvIDI7CisgICAgICAg
IG1vZGlmaWVkVGhyZXNob2xkIC0gc3RhdGljX2Nhc3Q8ZG91YmxlPigKKyAgICAgICAgICAgIHN0
ZDo6bWluKG1fYWN0aXZlVGhyZXNob2xkLCBPcHRpb25zOjptYXhpbXVtRXhlY3V0aW9uQ291bnRz
QmV0d2VlbkNoZWNrcG9pbnRzKCkpKSAvIDI7CiB9CiAKIGJvb2wgRXhlY3V0aW9uQ291bnRlcjo6
c2V0VGhyZXNob2xkKENvZGVCbG9jayogY29kZUJsb2NrKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTM2ODgxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMyw2ICszMywzMyBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
CiAjaWYgRU5BQkxFKERGR19KSVQpCitib29sIG1pZ2h0Q29tcGlsZUV2YWwoQ29kZUJsb2NrKiBj
b2RlQmxvY2spCit7CisgICAgcmV0dXJuIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpIDw9
IE9wdGlvbnM6Om1heGltdW1PcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50KCk7
Cit9Citib29sIG1pZ2h0Q29tcGlsZVByb2dyYW0oQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7Cisg
ICAgcmV0dXJuIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpIDw9IE9wdGlvbnM6Om1heGlt
dW1PcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50KCk7Cit9Citib29sIG1pZ2h0
Q29tcGlsZUZ1bmN0aW9uRm9yQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1
cm4gY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkgPD0gT3B0aW9uczo6bWF4aW11bU9wdGlt
aXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQoKTsKK30KK2Jvb2wgbWlnaHRDb21waWxl
RnVuY3Rpb25Gb3JDb25zdHJ1Y3QoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgcmV0dXJu
IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpIDw9IE9wdGlvbnM6Om1heGltdW1PcHRpbWl6
YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50KCk7Cit9CisKK2Jvb2wgbWlnaHRJbmxpbmVG
dW5jdGlvbkZvckNhbGwoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgcmV0dXJuIGNvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpIDw9IE9wdGlvbnM6Om1heGltdW1GdW5jdGlvbkZvckNh
bGxJbmxpbmVDYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50KCkKKyAgICAgICAgJiYgIWNvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCktPm5lZWRzQWN0aXZhdGlvbigpOworfQorYm9vbCBtaWdodElu
bGluZUZ1bmN0aW9uRm9yQ29uc3RydWN0KENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIHJl
dHVybiBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSA8PSBPcHRpb25zOjptYXhpbXVtRnVu
Y3Rpb25Gb3JDb25zdHJ1Y3RJbmxpbmVDYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50KCkKKyAgICAg
ICAgJiYgIWNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPm5lZWRzQWN0aXZhdGlvbigpOwor
fQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdGYWlsKENvZGVCbG9jayogY29kZUJsb2NrLCBP
cGNvZGVJRCBvcGNvZGVJRCwgYm9vbCByZXN1bHQpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmgJKHJldmlzaW9uIDEzNjg4MSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM5LDMzICszOSwxMiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAjaWYgRU5B
QkxFKERGR19KSVQpCiAvLyBGYXN0IGNoZWNrIGZ1bmN0aW9uczsgaWYgdGhleSByZXR1cm4gdHJ1
ZSBpdCBpcyBzdGlsbCBuZWNlc3NhcnkgdG8KIC8vIGNoZWNrIG9wY29kZXMuCi1pbmxpbmUgYm9v
bCBtaWdodENvbXBpbGVFdmFsKENvZGVCbG9jayogY29kZUJsb2NrKQotewotICAgIHJldHVybiBj
b2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSA8PSBPcHRpb25zOjptYXhpbXVtT3B0aW1pemF0
aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCgpOwotfQotaW5saW5lIGJvb2wgbWlnaHRDb21w
aWxlUHJvZ3JhbShDb2RlQmxvY2sqIGNvZGVCbG9jaykKLXsKLSAgICByZXR1cm4gY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbkNvdW50KCkgPD0gT3B0aW9uczo6bWF4aW11bU9wdGltaXphdGlvbkNhbmRp
ZGF0ZUluc3RydWN0aW9uQ291bnQoKTsKLX0KLWlubGluZSBib29sIG1pZ2h0Q29tcGlsZUZ1bmN0
aW9uRm9yQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaykKLXsKLSAgICByZXR1cm4gY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbkNvdW50KCkgPD0gT3B0aW9uczo6bWF4aW11bU9wdGltaXphdGlvbkNhbmRp
ZGF0ZUluc3RydWN0aW9uQ291bnQoKTsKLX0KLWlubGluZSBib29sIG1pZ2h0Q29tcGlsZUZ1bmN0
aW9uRm9yQ29uc3RydWN0KENvZGVCbG9jayogY29kZUJsb2NrKQotewotICAgIHJldHVybiBjb2Rl
QmxvY2stPmluc3RydWN0aW9uQ291bnQoKSA8PSBPcHRpb25zOjptYXhpbXVtT3B0aW1pemF0aW9u
Q2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCgpOwotfQotCi1pbmxpbmUgYm9vbCBtaWdodElubGlu
ZUZ1bmN0aW9uRm9yQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaykKLXsKLSAgICByZXR1cm4gY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkgPD0gT3B0aW9uczo6bWF4aW11bUZ1bmN0aW9uRm9y
Q2FsbElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQoKQotICAgICAgICAmJiAhY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKS0+bmVlZHNBY3RpdmF0aW9uKCk7Ci19Ci1pbmxpbmUgYm9v
bCBtaWdodElubGluZUZ1bmN0aW9uRm9yQ29uc3RydWN0KENvZGVCbG9jayogY29kZUJsb2NrKQot
ewotICAgIHJldHVybiBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSA8PSBPcHRpb25zOjpt
YXhpbXVtRnVuY3Rpb25Gb3JDb25zdHJ1Y3RJbmxpbmVDYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50
KCkKLSAgICAgICAgJiYgIWNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPm5lZWRzQWN0aXZh
dGlvbigpOwotfQorYm9vbCBtaWdodENvbXBpbGVFdmFsKENvZGVCbG9jayopOworYm9vbCBtaWdo
dENvbXBpbGVQcm9ncmFtKENvZGVCbG9jayopOworYm9vbCBtaWdodENvbXBpbGVGdW5jdGlvbkZv
ckNhbGwoQ29kZUJsb2NrKik7Citib29sIG1pZ2h0Q29tcGlsZUZ1bmN0aW9uRm9yQ29uc3RydWN0
KENvZGVCbG9jayopOworYm9vbCBtaWdodElubGluZUZ1bmN0aW9uRm9yQ2FsbChDb2RlQmxvY2sq
KTsKK2Jvb2wgbWlnaHRJbmxpbmVGdW5jdGlvbkZvckNvbnN0cnVjdChDb2RlQmxvY2sqKTsKIAog
Ly8gT3Bjb2RlIGNoZWNraW5nLgogaW5saW5lIGJvb2wgY2FuSW5saW5lUmVzb2x2ZU9wZXJhdGlv
bnMoT3Bjb2RlSUQgb3Bjb2RlLCBSZXNvbHZlT3BlcmF0aW9ucyogb3BlcmF0aW9ucykKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGlzYXNzZW1ibGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rpc2Fzc2VtYmxlci5jcHAJKHJldmlz
aW9uIDEzNjg4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGlzYXNzZW1ibGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksNyBAQCB2b2lkIERpc2Fzc2VtYmxlcjo6
cmVwb3J0VG9Qcm9maWxlcihQcm9mCiB2b2lkIERpc2Fzc2VtYmxlcjo6ZHVtcEhlYWRlcihQcmlu
dFN0cmVhbSYgb3V0LCBMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQogewogICAgIG91dC5wcmludCgi
R2VuZXJhdGVkIERGRyBKSVQgY29kZSBmb3IgIiwgQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9ncmFw
aC5tX2NvZGVCbG9jaywgSklUQ29kZTo6REZHSklUKSwgIiwgaW5zdHJ1Y3Rpb24gY291bnQgPSAi
LCBtX2dyYXBoLm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCksICI6XG4iKTsKKyAgICBv
dXQucHJpbnQoIiAgICBPcHRpbWl6ZWQgd2l0aCBleGVjdXRpb24gY291bnRlciA9ICIsIG1fZ3Jh
cGgubV9wcm9maWxlZEJsb2NrLT5qaXRFeGVjdXRlQ291bnRlcigpLCAiXG4iKTsKICAgICBvdXQu
cHJpbnQoIiAgICBDb2RlIGF0IFsiLCBSYXdQb2ludGVyKGxpbmtCdWZmZXIuZGVidWdBZGRyZXNz
KCkpLCAiLCAiLCBSYXdQb2ludGVyKHN0YXRpY19jYXN0PGNoYXIqPihsaW5rQnVmZmVyLmRlYnVn
QWRkcmVzcygpKSArIGxpbmtCdWZmZXIuZGVidWdTaXplKCkpLCAiKTpcbiIpOwogfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24gMTM2
ODgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0
ZSogZXhlYywgQwogICAgIEFTU0VSVCghY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkpOwogCiAjaWYg
RU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICBkYXRhTG9nRigiT1NSIGluICVwKCVwKSBmcm9t
IGJjIyV1XG4iLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwgYnl0ZWNvZGVJ
bmRleCk7CisgICAgZGF0YUxvZygiT1NSIGluICIsICpjb2RlQmxvY2stPmFsdGVybmF0aXZlKCks
ICIgLT4gIiwgKmNvZGVCbG9jaywgIiBmcm9tIGJjIyIsIGJ5dGVjb2RlSW5kZXgsICJcbiIpOwog
I2VuZGlmCiAgICAgCiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2Jh
bERhdGEoKTsKQEAgLTEwMSw5ICsxMDEsNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0
YXRlKiBleGVjLCBDCiAgICAgICAgIAogICAgICAgICBpZiAoIWVudHJ5LT5tX2V4cGVjdGVkVmFs
dWVzLmFyZ3VtZW50KGFyZ3VtZW50KS52YWxpZGF0ZSh2YWx1ZSkpIHsKICNpZiBFTkFCTEUoSklU
X1ZFUkJPU0VfT1NSKQotICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICBPU1IgZmFpbGVkIGJlY2F1
c2UgYXJndW1lbnQgJXp1IGlzICVzLCBleHBlY3RlZCAiLCBhcmd1bWVudCwgdmFsdWUuZGVzY3Jp
cHRpb24oKSk7Ci0gICAgICAgICAgICBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5hcmd1bWVudChh
cmd1bWVudCkuZHVtcChXVEY6OmRhdGFGaWxlKCkpOwotICAgICAgICAgICAgZGF0YUxvZ0YoIi5c
biIpOworICAgICAgICAgICAgZGF0YUxvZygiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSBhcmd1bWVu
dCAiLCBhcmd1bWVudCwgIiBpcyAiLCB2YWx1ZSwgIiwgZXhwZWN0ZWQgIiwgZW50cnktPm1fZXhw
ZWN0ZWRWYWx1ZXMuYXJndW1lbnQoYXJndW1lbnQpLCAiLlxuIik7CiAjZW5kaWYKICAgICAgICAg
ICAgIHJldHVybiAwOwogICAgICAgICB9CkBAIC0xMTMsNyArMTExLDcgQEAgdm9pZCogcHJlcGFy
ZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQwogICAgICAgICBpZiAoZW50cnktPm1fbG9jYWxz
Rm9yY2VkRG91YmxlLmdldChsb2NhbCkpIHsKICAgICAgICAgICAgIGlmICghZXhlYy0+cmVnaXN0
ZXJzKClbbG9jYWxdLmpzVmFsdWUoKS5pc051bWJlcigpKSB7CiAjaWYgRU5BQkxFKEpJVF9WRVJC
T1NFX09TUikKLSAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAgIE9TUiBmYWlsZWQgYmVjYXVz
ZSB2YXJpYWJsZSAlenUgaXMgJXMsIGV4cGVjdGVkIG51bWJlci5cbiIsIGxvY2FsLCBleGVjLT5y
ZWdpc3RlcnMoKVtsb2NhbF0uanNWYWx1ZSgpLmRlc2NyaXB0aW9uKCkpOworICAgICAgICAgICAg
ICAgIGRhdGFMb2coIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgdmFyaWFibGUgIiwgbG9jYWwsICIg
aXMgIiwgZXhlYy0+cmVnaXN0ZXJzKClbbG9jYWxdLmpzVmFsdWUoKSwgIiwgZXhwZWN0ZWQgbnVt
YmVyLlxuIik7CiAjZW5kaWYKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAg
IH0KQEAgLTEyMSw5ICsxMTksNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBl
eGVjLCBDCiAgICAgICAgIH0KICAgICAgICAgaWYgKCFlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5s
b2NhbChsb2NhbCkudmFsaWRhdGUoZXhlYy0+cmVnaXN0ZXJzKClbbG9jYWxdLmpzVmFsdWUoKSkp
IHsKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgICAgICAgICAgZGF0YUxvZ0YoIiAg
ICBPU1IgZmFpbGVkIGJlY2F1c2UgdmFyaWFibGUgJXp1IGlzICVzLCBleHBlY3RlZCAiLCBsb2Nh
bCwgZXhlYy0+cmVnaXN0ZXJzKClbbG9jYWxdLmpzVmFsdWUoKS5kZXNjcmlwdGlvbigpKTsKLSAg
ICAgICAgICAgIGVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzLmxvY2FsKGxvY2FsKS5kdW1wKFdURjo6
ZGF0YUZpbGUoKSk7Ci0gICAgICAgICAgICBkYXRhTG9nRigiLlxuIik7CisgICAgICAgICAgICBk
YXRhTG9nKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIHZhcmlhYmxlICIsIGxvY2FsLCAiIGlzICIs
IGV4ZWMtPnJlZ2lzdGVycygpW2xvY2FsXS5qc1ZhbHVlKCksICIsIGV4cGVjdGVkICIsIGVudHJ5
LT5tX2V4cGVjdGVkVmFsdWVzLmxvY2FsKGxvY2FsKSwgIi5cbiIpOwogI2VuZGlmCiAgICAgICAg
ICAgICByZXR1cm4gMDsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRTdHVicy5jcHAJKHJldmlzaW9uIDEzNjg4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODIyLDEyICsxODIyLDE1IEBAIERF
RklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGltaXplKQogCiAgICAgaWYgKCFjb2RlQmxvY2st
PmNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKCkpIHsKICAgICAgICAgY29kZUJs
b2NrLT51cGRhdGVBbGxQcmVkaWN0aW9ucygpOworI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1Ip
CisgICAgICAgIGRhdGFMb2coIkNob29zaW5nIG5vdCB0byBvcHRpbWl6ZSAiLCAqY29kZUJsb2Nr
LCAiIHlldC5cbiIpOworI2VuZGlmCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAo
Y29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7CiAjaWYgRU5BQkxFKEpJVF9W
RVJCT1NFX09TUikKLSAgICAgICAgZGF0YUxvZ0YoIkNvbnNpZGVyaW5nIE9TUiAiLCAqY29kZUJs
b2NrLCAiIC0+ICIsICpjb2RlQmxvY2stPnJlcGxhY2VtZW50KCksICIuXG4iKTsKKyAgICAgICAg
ZGF0YUxvZygiQ29uc2lkZXJpbmcgT1NSICIsICpjb2RlQmxvY2ssICIgLT4gIiwgKmNvZGVCbG9j
ay0+cmVwbGFjZW1lbnQoKSwgIi5cbiIpOwogI2VuZGlmCiAgICAgICAgIC8vIElmIHdlIGhhdmUg
YW4gb3B0aW1pemVkIHJlcGxhY2VtZW50LCB0aGVuIGl0IG11c3QgYmUgdGhlIGNhc2UgdGhhdCB3
ZSBlbnRlcmVkCiAgICAgICAgIC8vIGN0aV9vcHRpbWl6ZSBmcm9tIGEgbG9vcC4gVGhhdCdzIGJl
Y2F1c2UgaXMgdGhlcmUncyBhbiBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQsCkBAIC0xODQ0LDcgKzE4
NDcsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZSkKICAgICAgICAgLy8g
YWRkaXRpb25hbCBjaGVja2luZyBhbnl3YXksIHRvIHJlZHVjZSB0aGUgYW1vdW50IG9mIHJlY29t
cGlsYXRpb24gdGhyYXNoaW5nLgogICAgICAgICBpZiAoY29kZUJsb2NrLT5yZXBsYWNlbWVudCgp
LT5zaG91bGRSZW9wdGltaXplRnJvbUxvb3BOb3coKSkgewogI2lmIEVOQUJMRShKSVRfVkVSQk9T
RV9PU1IpCi0gICAgICAgICAgICBkYXRhTG9nRigiVHJpZ2dlcmluZyByZW9wdGltaXphdGlvbiBv
ZiAiLCAqY29kZUJsb2NrLCAiKCIsICpjb2RlQmxvY2stPnJlcGxhY2VtZW50KCksICIpIChpbiBs
b29wKS5cbiIpOworICAgICAgICAgICAgZGF0YUxvZygiVHJpZ2dlcmluZyByZW9wdGltaXphdGlv
biBvZiAiLCAqY29kZUJsb2NrLCAiKCIsICpjb2RlQmxvY2stPnJlcGxhY2VtZW50KCksICIpIChp
biBsb29wKS5cbiIpOwogI2VuZGlmCiAgICAgICAgICAgICBjb2RlQmxvY2stPnJlb3B0aW1pemUo
KTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE4NTIsMjMgKzE4NTUsMjcgQEAgREVGSU5FX1NU
VUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemUpCiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKCFj
b2RlQmxvY2stPnNob3VsZE9wdGltaXplTm93KCkpIHsKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0Vf
T1NSKQotICAgICAgICAgICAgZGF0YUxvZ0YoIkRlbGF5aW5nIG9wdGltaXphdGlvbiBmb3IgIiwg
KmNvZGVCbG9jaywgIiAoaW4gbG9vcCkgYmVjYXVzZSBvZiBpbnN1ZmZpY2llbnQgcHJvZmlsaW5n
LlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKCJEZWxheWluZyBvcHRpbWl6YXRpb24gZm9yICIs
ICpjb2RlQmxvY2ssICIgKGluIGxvb3ApIGJlY2F1c2Ugb2YgaW5zdWZmaWNpZW50IHByb2ZpbGlu
Zy5cbiIpOwogI2VuZGlmCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAg
CisjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKKyAgICAgICAgZGF0YUxvZygiVHJpZ2dlcmlu
ZyBvcHRpbWl6ZWQgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIlxuIik7CisjZW5kaWYK
KyAgICAgICAgCiAgICAgICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT5zY29wZSgpOwog
ICAgICAgICBKU09iamVjdCogZXJyb3IgPSBjb2RlQmxvY2stPmNvbXBpbGVPcHRpbWl6ZWQoY2Fs
bEZyYW1lLCBzY29wZSwgYnl0ZWNvZGVJbmRleCk7CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09T
UikKICAgICAgICAgaWYgKGVycm9yKQotICAgICAgICAgICAgZGF0YUxvZ0YoIldBUk5JTkc6IG9w
dGltaXplZCBjb21waWxhdGlvbiBmYWlsZWQuXG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2coIldB
Uk5JTkc6IG9wdGltaXplZCBjb21waWxhdGlvbiBmYWlsZWQuXG4iKTsKICNlbHNlCiAgICAgICAg
IFVOVVNFRF9QQVJBTShlcnJvcik7CiAjZW5kaWYKICAgICAgICAgCiAgICAgICAgIGlmIChjb2Rl
QmxvY2stPnJlcGxhY2VtZW50KCkgPT0gY29kZUJsb2NrKSB7CiAjaWYgRU5BQkxFKEpJVF9WRVJC
T1NFX09TUikKLSAgICAgICAgICAgIGRhdGFMb2dGKCJPcHRpbWl6aW5nICIsICpjb2RlQmxvY2ss
ICIgZmFpbGVkLlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKCJPcHRpbWl6aW5nICIsICpjb2Rl
QmxvY2ssICIgZmFpbGVkLlxuIik7CiAjZW5kaWYKICAgICAgICAgICAgIAogICAgICAgICAgICAg
QVNTRVJUKGNvZGVCbG9jay0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsK
QEAgLTE4ODcsNyArMTg5NCw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGltaXpl
KQogICAgICAgICAgICAgICAgIFJhd1BvaW50ZXIoKFNUVUJfUkVUVVJOX0FERFJFU1MpLnZhbHVl
KCkpLCAiIC0+ICIsIFJhd1BvaW50ZXIoYWRkcmVzcyksICIuXG4iKTsKICAgICAgICAgfQogI2lm
IEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgICAgIGRhdGFMb2dGKCJPcHRpbWl6aW5nICIs
ICpjb2RlQmxvY2ssICIgc3VjY2VlZGVkLCBwZXJmb3JtaW5nIE9TUiBhZnRlciBhIGRlbGF5IG9m
ICIsIGNvZGVCbG9jay0+b3B0aW1pemF0aW9uRGVsYXlDb3VudGVyKCksICIuXG4iKTsKKyAgICAg
ICAgZGF0YUxvZygiT3B0aW1pemluZyAiLCAqY29kZUJsb2NrLCAiIHN1Y2NlZWRlZCwgcGVyZm9y
bWluZyBPU1IgYWZ0ZXIgYSBkZWxheSBvZiAiLCBjb2RlQmxvY2stPm9wdGltaXphdGlvbkRlbGF5
Q291bnRlcigpLCAiLlxuIik7CiAjZW5kaWYKIAogICAgICAgICBjb2RlQmxvY2stPm9wdGltaXpl
U29vbigpOwpAQCAtMTg5Niw3ICsxOTAzLDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwg
b3B0aW1pemUpCiAgICAgfQogICAgIAogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAg
ZGF0YUxvZ0YoIk9wdGltaXppbmcgIiwgKmNvZGVCbG9jaywgIiBzdWNjZWVkZWQsIE9TUiBmYWls
ZWQsIGFmdGVyIGEgZGVsYXkgb2YgIiwgY29kZUJsb2NrLT5vcHRpbWl6YXRpb25EZWxheUNvdW50
ZXIoKSwgIi5cbiIpOworICAgIGRhdGFMb2coIk9wdGltaXppbmcgIiwgKmNvZGVCbG9jaywgIiBz
dWNjZWVkZWQsIE9TUiBmYWlsZWQsIGFmdGVyIGEgZGVsYXkgb2YgIiwgY29kZUJsb2NrLT5vcHRp
bWl6YXRpb25EZWxheUNvdW50ZXIoKSwgIi5cbiIpOwogI2VuZGlmCiAKICAgICAvLyBDb3VudCB0
aGUgT1NSIGZhaWx1cmUgYXMgYSBzcGVjdWxhdGlvbiBmYWlsdXJlLiBJZiB0aGlzIGhhcHBlbnMg
YSBsb3QsIHRoZW4KQEAgLTE5MDQsNyArMTkxMSw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZv
aWQsIG9wdGltaXplKQogICAgIG9wdGltaXplZENvZGVCbG9jay0+Y291bnRPU1JFeGl0KCk7CiAg
ICAgCiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICBkYXRhTG9nRigiRW5jb3VudGVy
ZWQgT1NSIGZhaWx1cmUgIiwgKmNvZGVCbG9jaywgIiAtPiAiLCAqY29kZUJsb2NrLT5yZXBsYWNl
bWVudCgpLCAiLlxuIik7CisgICAgZGF0YUxvZygiRW5jb3VudGVyZWQgT1NSIGZhaWx1cmUgIiwg
KmNvZGVCbG9jaywgIiAtPiAiLCAqY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLCAiLlxuIik7CiAj
ZW5kaWYKIAogICAgIC8vIFdlIGFyZSBhIGxvdCBtb3JlIGNvbnNlcnZhdGl2ZSBhYm91dCB0cmln
Z2VyaW5nIHJlb3B0aW1pemF0aW9uIGFmdGVyIE9TUiBmYWlsdXJlIHRoYW4KQEAgLTE5MTcsNyAr
MTkyNCw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGltaXplKQogICAgIC8vIHJl
b3B0aW1pemF0aW9uIHRyaWdnZXIuCiAgICAgaWYgKG9wdGltaXplZENvZGVCbG9jay0+c2hvdWxk
UmVvcHRpbWl6ZU5vdygpKSB7CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAg
ZGF0YUxvZ0YoIlRyaWdnZXJpbmcgcmVvcHRpbWl6YXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIiAt
PiAiLCAqY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLCAiIChhZnRlciBPU1IgZmFpbCkuXG4iKTsK
KyAgICAgICAgZGF0YUxvZygiVHJpZ2dlcmluZyByZW9wdGltaXphdGlvbiBvZiAiLCAqY29kZUJs
b2NrLCAiIC0+ICIsICpjb2RlQmxvY2stPnJlcGxhY2VtZW50KCksICIgKGFmdGVyIE9TUiBmYWls
KS5cbiIpOwogI2VuZGlmCiAgICAgICAgIGNvZGVCbG9jay0+cmVvcHRpbWl6ZSgpOwogICAgICAg
ICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0
aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNs
b3dQYXRocy5jcHAJKHJldmlzaW9uIDEzNjg4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNSw4ICszMTUsNyBA
QCBlbnVtIEVudHJ5S2luZCB7IFByb2xvZ3VlLCBBcml0eUNoZWNrIH07CiBzdGF0aWMgU2xvd1Bh
dGhSZXR1cm5UeXBlIGVudHJ5T1NSKEV4ZWNTdGF0ZSogZXhlYywgSW5zdHJ1Y3Rpb24qLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgY29uc3QgY2hhciAqbmFtZSwgRW50cnlLaW5kIGtpbmQpCiB7CiAj
aWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICBkYXRhTG9nRigiJXA6IEVudGVyZWQgJXMg
d2l0aCBleGVjdXRlQ291bnRlciA9ICVzXG4iLCBjb2RlQmxvY2ssIG5hbWUsCi0gICAgICAgICAg
ICBjb2RlQmxvY2stPmxsaW50RXhlY3V0ZUNvdW50ZXIoKS5zdGF0dXMoKSk7CisgICAgZGF0YUxv
ZygqY29kZUJsb2NrLCAiOiBFbnRlcmVkICIsIG5hbWUsICIgd2l0aCBleGVjdXRlQ291bnRlciA9
ICIsIGNvZGVCbG9jay0+bGxpbnRFeGVjdXRlQ291bnRlcigpLCAiXG4iKTsKICNlbHNlCiAgICAg
VU5VU0VEX1BBUkFNKG5hbWUpOwogI2VuZGlmCkBAIC0zNjQsOCArMzYzLDcgQEAgTExJTlRfU0xP
V19QQVRIX0RFQ0wobG9vcF9vc3IpCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5j
b2RlQmxvY2soKTsKICAgICAKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgIGRhdGFM
b2dGKCIlcDogRW50ZXJlZCBsb29wX29zciB3aXRoIGV4ZWN1dGVDb3VudGVyID0gJXNcbiIsIGNv
ZGVCbG9jaywKLSAgICAgICAgICAgIGNvZGVCbG9jay0+bGxpbnRFeGVjdXRlQ291bnRlcigpLnN0
YXR1cygpKTsKKyAgICBkYXRhTG9nKCpjb2RlQmxvY2ssICI6IEVudGVyZWQgbG9vcF9vc3Igd2l0
aCBleGVjdXRlQ291bnRlciA9ICIsIGNvZGVCbG9jay0+bGxpbnRFeGVjdXRlQ291bnRlcigpLCAi
XG4iKTsKICNlbmRpZgogICAgIAogICAgIGlmICghc2hvdWxkSklUKGV4ZWMpKSB7CkBAIC0zOTUs
OCArMzkzLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0wocmVwbGFjZSkKICAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwogICAgIAogI2lmIEVOQUJMRShKSVRfVkVS
Qk9TRV9PU1IpCi0gICAgZGF0YUxvZ0YoIiVwOiBFbnRlcmVkIHJlcGxhY2Ugd2l0aCBleGVjdXRl
Q291bnRlciA9ICVzXG4iLCBjb2RlQmxvY2ssCi0gICAgICAgICAgICBjb2RlQmxvY2stPmxsaW50
RXhlY3V0ZUNvdW50ZXIoKS5zdGF0dXMoKSk7CisgICAgZGF0YUxvZygqY29kZUJsb2NrLCAiOiBF
bnRlcmVkIHJlcGxhY2Ugd2l0aCBleGVjdXRlQ291bnRlciA9ICIsIGNvZGVCbG9jay0+bGxpbnRF
eGVjdXRlQ291bnRlcigpLCAiXG4iKTsKICNlbmRpZgogICAgIAogICAgIGlmIChzaG91bGRKSVQo
ZXhlYykpCg==
</data>
<flag name="review"
          id="194905"
          type_id="1"
          status="-"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178396</attachid>
            <date>2012-12-08 23:00:53 -0800</date>
            <delta_ts>2012-12-08 23:05:34 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>math.patch</filename>
            <type>text/plain</type>
            <size>51589</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTM3MDU2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg3IEBA
CisyMDEyLTEyLTA4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SlNDIHNob3VsZCBzY2FsZSB0aGUgb3B0aW1pemF0aW9uIHRocmVzaG9sZCBmb3IgYSBjb2RlIGJs
b2NrIGFjY29yZGluZyB0byB0aGUgY29zdCBvZiBjb21waWxpbmcgaXQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNDQwNgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlJ3ZlIGxvbmcga25vd24gdGhhdCB3
ZSB3YW50IHRvIHNjYWxlIHRoZSBleGVjdXRpb24gY291bnQgdGhyZXNob2xkIG5lZWRlZCBmb3Ig
dGhlIERGRworICAgICAgICB0byBraWNrIGluIHRvIHNjYWxlIGFjY29yZGluZyB0byBzb21lIGVz
dGltYXRlIG9mIHRoZSBjb3N0IG9mIGNvbXBpbGluZyB0aGF0IGNvZGUgYmxvY2suCisgICAgICAg
IFRoaXMgaW5zdGl0dXRlcyBhIHJlbGF0aW9uc2hpcCBsaWtlIHRoaXM6CisgICAgICAgIAorICAg
ICAgICB0aHJlc2hvbGQgPSB0aHJlc2hvbGRTZXR0aW5nICogKGEgKiBzcXJ0KGluc3RydWN0aW9u
Q291bnQgKyBiKSArIGFicyhjICogaW5zdHJ1Y3Rpb25Db3VudCkgKyBkCisgICAgICAgIAorICAg
ICAgICBXaGVyZSBhLCBiLCBjLCBkIGFyZSBjb2VmZmljaWVudHMgZGVyaXZlZCBmcm9tIGZpdHRp
bmcgdGhlIGFib3ZlIGV4cHJlc3Npb24gdG8gdmFyaW91cworICAgICAgICBkYXRhIHBvaW50cywg
d2hpY2ggSSBjaG9zZSBiYXNlZCBvbiBsb29raW5nIGF0IG9uZSBiZW5jaG1hcmsgKDNkLWN1YmUp
IGFuZCBmcm9tIG15CisgICAgICAgIG93biBpbnR1aXRpb25zLgorICAgICAgICAKKyAgICAgICAg
TWFraW5nIHRoaXMgd29yayB3ZWxsIGFsc28gcmVxdWlyZWQgY2hhbmdpbmcgdGhlIHRocmVzaG9s
ZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwCisgICAgICAgIGZyb20gNTAwMCB0byAxMDAwLgor
ICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBhID4xJSBzcGVlZC11cCBvbiBTdW5TcGlkZXIsIGEg
PjMlIHNwZWVkLXVwIG9uIFY4U3BpZGVyLCB+MSUgc3BlZWQtdXAgb24gVjh2NywKKyAgICAgICAg
bmV1dHJhbCBvbiBPY3RhbmUsIGFuZCBuZXV0cmFsIG9uIEtyYWtlbi4KKyAgICAgICAgCisgICAg
ICAgIEkgYWxzbyBvdXQtb2YtbGluZWQgYSBidW5jaCBvZiBtZXRob2RzIHJlbGF0ZWQgdG8gdGhl
c2UgaGV1cmlzdGljcywgYmVjYXVzZSBJIGNvdWxkbid0CisgICAgICAgIHN0YW5kIGhhdmluZyB0
aGVtIGRlZmluZWQgaW4gdGhlIGhlYWRlciBhbnltb3JlLiBJIGFsc28gbWFkZSBpbXByb3ZlbWVu
dHMgdG8gZGVidWdnaW5nCisgICAgICAgIGNvZGUgYmVjYXVzZSBJIG5lZWRlZCBpdCBmb3IgdHVu
aW5nIHRoaXMgY2hhbmdlLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICog
R05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGFyZ2V0LnByaToKKyAg
ICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OnNvdXJjZUNvZGVGb3JUb29scyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c291cmNlQ29k
ZU9uT25lTGluZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OnJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
Ojpjb3VudFJlb3B0aW1pemF0aW9uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvcHRpbWl6
YXRpb25UaHJlc2hvbGRTY2FsaW5nRmFjdG9yKToKKyAgICAgICAgKEpTQzo6Y2xpcFRocmVzaG9s
ZCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRl
cldhcm1VcCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y291bnRlclZhbHVlRm9yT3B0aW1p
emVBZnRlckxvbmdXYXJtVXApOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvdW50ZXJWYWx1
ZUZvck9wdGltaXplU29vbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2hlY2tJZk9wdGlt
aXphdGlvblRocmVzaG9sZFJlYWNoZWQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9wdGlt
aXplTmV4dEludm9jYXRpb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmRvbnRPcHRpbWl6
ZUFueXRpbWVTb29uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvcHRpbWl6ZUFmdGVyV2Fy
bVVwKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCk6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6b3B0aW1pemVTb29uKToKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjphZGp1c3RlZEV4aXRDb3VudFRocmVzaG9sZCk6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6ZXhpdENvdW50VGhyZXNob2xkRm9yUmVvcHRpbWl6YXRpb24pOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmV4aXRDb3VudFRocmVzaG9sZEZvclJlb3B0aW1pemF0aW9uRnJvbUxv
b3ApOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNob3VsZFJlb3B0aW1pemVOb3cpOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OnNob3VsZFJlb3B0aW1pemVGcm9tTG9vcE5vdyk6CisgICAg
ICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgICogYnl0ZWNvZGUvRXhlY3V0aW9u
Q291bnRlci5jcHA6CisgICAgICAgIChKU0M6OkV4ZWN1dGlvbkNvdW50ZXI6Omhhc0Nyb3NzZWRU
aHJlc2hvbGQpOgorICAgICAgICAqIGJ5dGVjb2RlL1JlZHVjZVdoaXRlc3BhY2UuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6cmVkdWNlV2hpdGVzcGFjZSk6CisgICAgICAgICogYnl0ZWNvZGUv
UmVkdWNlV2hpdGVzcGFjZS5oOiBBZGRlZC4KKyAgICAgICAgKiBkZmcvREZHQ2FwYWJpbGl0aWVz
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjptaWdodENvbXBpbGVFdmFsKToKKyAgICAgICAgKEpT
Qzo6REZHOjptaWdodENvbXBpbGVQcm9ncmFtKToKKyAgICAgICAgKEpTQzo6REZHOjptaWdodENv
bXBpbGVGdW5jdGlvbkZvckNhbGwpOgorICAgICAgICAoSlNDOjpERkc6Om1pZ2h0Q29tcGlsZUZ1
bmN0aW9uRm9yQ29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6REZHOjptaWdodElubGluZUZ1bmN0
aW9uRm9yQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6bWlnaHRJbmxpbmVGdW5jdGlvbkZvckNv
bnN0cnVjdCk6CisgICAgICAgICogZGZnL0RGR0NhcGFiaWxpdGllcy5oOgorICAgICAgICAqIGRm
Zy9ERkdEaXNhc3NlbWJsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkRpc2Fzc2VtYmxlcjo6
ZHVtcEhlYWRlcik6CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5LmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpwcmVwYXJlT1NSRW50cnkpOgorICAgICAgICAqIGppdC9KSVREaXNhc3NlbWJsZXIu
Y3BwOgorICAgICAgICAoSlNDOjpKSVREaXNhc3NlbWJsZXI6OmR1bXBIZWFkZXIpOgorICAgICAg
ICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAgIChKU0M6OkRFRklORV9TVFVCX0ZVTkNUSU9O
KToKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxM
SW50OjplbnRyeU9TUik6CisgICAgICAgIChKU0M6OkxMSW50OjpMTElOVF9TTE9XX1BBVEhfREVD
TCk6CisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZXJEYXRhYmFzZS5jcHA6CisgICAgICAgIChK
U0M6OlByb2ZpbGVyOjpEYXRhYmFzZTo6ZW5zdXJlQnl0ZWNvZGVzRm9yKToKKyAgICAgICAgKiBy
dW50aW1lL09wdGlvbnMuaDoKKwogMjAxMi0xMi0wNyAgSm9uYXRoYW4gTGl1ICA8bmV0MTQ3QGdt
YWlsLmNvbT4KIAogICAgICAgICBBZGQgbWlzc2luZyBmb3J3YXJkIGRlY2xhcmF0aW9uIGZvciBK
U0M6OkFycmF5QWxsb2NhdGlvblByb2ZpbGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
TWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VM
aXN0cy50eHQJKHJldmlzaW9uIDEzNjk4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFr
ZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsNyBAQCBzZXQoSmF2YVNjcmlw
dENvcmVfU09VUkNFUwogICAgIGJ5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwCiAg
ICAgYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCiAgICAgYnl0ZWNvZGUvUHV0QnlJZFN0YXR1
cy5jcHAKKyAgICBieXRlY29kZS9SZWR1Y2VXaGl0ZXNwYWNlLmNwcAogICAgIGJ5dGVjb2RlL1Jl
c29sdmVHbG9iYWxTdGF0dXMuY3BwCiAgICAgYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmNwcAogICAg
IGJ5dGVjb2RlL1NwZWNpYWxQb2ludGVyLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDEzNjk4OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNiArMTMz
LDggQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlJZFN0YXR1cy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0S2luZC5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVkdWNlV2hpdGVz
cGFjZS5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWR1Y2VXaGl0ZXNw
YWNlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXNvbHZlR2xvYmFsU3Rh
dHVzLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Jlc29sdmVHbG9iYWxT
dGF0dXMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Jlc29sdmVPcGVyYXRp
b24uaCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkocmV2aXNpb24gMTM2OTg5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTY3
LDYgKzY3LDcgQEAgU09VUkNFUyArPSBcCiAgICAgYnl0ZWNvZGUvT3Bjb2RlLmNwcCBcCiAgICAg
Ynl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAgXAogICAgIGJ5dGVjb2RlL1B1dEJ5
SWRTdGF0dXMuY3BwIFwKKyAgICBieXRlY29kZS9SZWR1Y2VXaGl0ZXNwYWNlLmNwcCBcCiAgICAg
Ynl0ZWNvZGUvUmVzb2x2ZUdsb2JhbFN0YXR1cy5jcHAgXAogICAgIGJ5dGVjb2RlL1NhbXBsaW5n
VG9vbC5jcHAgXAogICAgIGJ5dGVjb2RlL1NwZWNpYWxQb2ludGVyLmNwcCBcCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJv
agkocmV2aXNpb24gMTM2OTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTE4MTAsNiArMTgxMCwxNCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxl
CisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxieXRlY29kZVxSZWR1Y2VXaGl0ZXNwYWNlLmNwcCIK
KwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cYnl0
ZWNvZGVcUmVkdWNlV2hpdGVzcGFjZS5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJ
CQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxieXRlY29kZVxTcGVjaWFsUG9pbnRlci5jcHAiCiAJCQkJ
PgogCQkJPC9GaWxlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDEzNjk4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNzAsNiArMjcwLDggQEAKIAkJ
MEZGNDI3NjUxNTkxQTFDRTAwNENCOUZGIC8qIERGR0Rpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGNDI3NjIxNTkxQTFDOTAwNENC
OUZGIC8qIERGR0Rpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGRjQyNzcxMTU5Mjc1RDUwMDRDQjlGRiAvKiBSZXNvbHZlR2xv
YmFsU3RhdHVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRjQyNzZFMTU5Mjc1RDIwMDRDQjlGRiAvKiBSZXNvbHZlR2xvYmFsU3RhdHVzLmNwcCAq
LzsgfTsKIAkJMEZGNDI3NzIxNTkyNzVEODAwNENCOUZGIC8qIFJlc29sdmVHbG9iYWxTdGF0dXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjQyNzZG
MTU5Mjc1RDIwMDRDQjlGRiAvKiBSZXNvbHZlR2xvYmFsU3RhdHVzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZGNjBBQzIxNjc0MEY4MzAwMDI5
Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRjYwQUMwMTY3NDBGODEwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNw
YWNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
MEZGNjBBQzMxNjc0MEY4ODAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGNjBBQkYxNjc0MEY4MTAw
MDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2UuY3BwICovOyB9OwogCQkwRkY3MTY4QzE1QTNCMjM1
MDA4RjVEQUEgLyogUHJvcGVydHlPZmZzZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjcxNjhBMTVBM0IyMzEwMDhGNURBQSAvKiBQcm9wZXJ0eU9m
ZnNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGRjcyOUE1MTY2QUQzNTEwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2RlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY3Mjk5MzE2NkFEMzQ3MDAw
RjVCQTMgLyogUHJvZmlsZXJCeXRlY29kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGRjcyOUFEMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxl
ckJ5dGVjb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRjcyOTkyMTY2QUQzNDcwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2RlLmNwcCAqLzsg
fTsKQEAgLTEwOTUsNiArMTA5Nyw4IEBACiAJCTBGRjQyNzYyMTU5MUExQzkwMDRDQjlGRiAvKiBE
RkdEaXNhc3NlbWJsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRGlz
YXNzZW1ibGVyLmg7IHBhdGggPSBkZmcvREZHRGlzYXNzZW1ibGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGRjQyNzZFMTU5Mjc1RDIwMDRDQjlGRiAvKiBSZXNvbHZlR2xvYmFs
U3RhdHVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlc29sdmVH
bG9iYWxTdGF0dXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkY0Mjc2RjE1
OTI3NUQyMDA0Q0I5RkYgLyogUmVzb2x2ZUdsb2JhbFN0YXR1cy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZXNvbHZlR2xvYmFsU3RhdHVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRjYwQUJGMTY3NDBGODEwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNwYWNl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlZHVjZVdoaXRlc3Bh
Y2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkY2MEFDMDE2NzQwRjgxMDAw
Mjk3NzkgLyogUmVkdWNlV2hpdGVzcGFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZWR1Y2VXaGl0ZXNwYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
RjcxNjhBMTVBM0IyMzEwMDhGNURBQSAvKiBQcm9wZXJ0eU9mZnNldC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQcm9wZXJ0eU9mZnNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkY3Mjk5MjE2NkFEMzQ3MDAwRjVCQTMgLyogUHJvZmlsZXJCeXRlY29kZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBQcm9maWxlckJ5dGVjb2Rl
LmNwcDsgcGF0aCA9IHByb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkY3Mjk5MzE2NkFEMzQ3MDAwRjVCQTMgLyogUHJvZmlsZXJCeXRl
Y29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQcm9maWxlckJ5dGVjb2Rl
Lmg7IHBhdGggPSBwcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0yNjI3LDExICsyNjMxLDExIEBACiAJCQkJMEY5MzMyOTMxNENBN0RDMTAw
ODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmNwcCAqLywKIAkJCQkwRjkzMzI5NDE0Q0E3REMxMDA4
NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuaCAqLywKIAkJCQkwRjBCODNCODE0QkNGOTVCMDA4ODVC
NEYgLyogQ2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQuaCAqLywKKwkJCQk5NjlBMDc5
MDBFRDFEM0FFMDBGMUY2ODEgLyogQ29kZUJsb2NrLmNwcCAqLywKKwkJCQk5NjlBMDc5MTBFRDFE
M0FFMDBGMUY2ODEgLyogQ29kZUJsb2NrLmggKi8sCiAJCQkJMEY4Rjk0M0QxNjY3NjMyRDAwRDYx
OTcxIC8qIENvZGVCbG9ja0hhc2guY3BwICovLAogCQkJCTBGOEY5NDNFMTY2NzYzMkQwMEQ2MTk3
MSAvKiBDb2RlQmxvY2tIYXNoLmggKi8sCiAJCQkJMEY5NkVCQjExNjY3NkVGNDAwOEJBREUzIC8q
IENvZGVCbG9ja1dpdGhKSVRUeXBlLmggKi8sCi0JCQkJOTY5QTA3OTAwRUQxRDNBRTAwRjFGNjgx
IC8qIENvZGVCbG9jay5jcHAgKi8sCi0JCQkJOTY5QTA3OTEwRUQxRDNBRTAwRjFGNjgxIC8qIENv
ZGVCbG9jay5oICovLAogCQkJCTBGOEY5NDQ1MTY2NzY0RUUwMEQ2MTk3MSAvKiBDb2RlT3JpZ2lu
LmNwcCAqLywKIAkJCQkwRkJEN0U2NzE0NDc5OThGMDA0ODEzMTUgLyogQ29kZU9yaWdpbi5oICov
LAogCQkJCTBGOEY5NDNGMTY2NzYzMkQwMEQ2MTk3MSAvKiBDb2RlVHlwZS5jcHAgKi8sCkBAIC0y
NjY0LDYgKzI2NjgsOCBAQAogCQkJCTBGOTMzMjk5MTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlk
U3RhdHVzLmNwcCAqLywKIAkJCQkwRjkzMzI5QTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0
YXR1cy5oICovLAogCQkJCTBGOUZDOEMxMTRFMUI1RkIwMEQ1MkFFMCAvKiBQdXRLaW5kLmggKi8s
CisJCQkJMEZGNjBBQkYxNjc0MEY4MTAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2UuY3BwICov
LAorCQkJCTBGRjYwQUMwMTY3NDBGODEwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNwYWNlLmggKi8s
CiAJCQkJMEZGNDI3NkUxNTkyNzVEMjAwNENCOUZGIC8qIFJlc29sdmVHbG9iYWxTdGF0dXMuY3Bw
ICovLAogCQkJCTBGRjQyNzZGMTU5Mjc1RDIwMDRDQjlGRiAvKiBSZXNvbHZlR2xvYmFsU3RhdHVz
LmggKi8sCiAJCQkJQTdBRkMxNzcxNUY3RUZFMzAwNDhGNTdCIC8qIFJlc29sdmVPcGVyYXRpb24u
aCAqLywKQEAgLTI2NzksNiArMjY4NSw4IEBACiAJCQkJMEY3NjZEMzcxNUFFNEExQTAwOEYzNjNF
IC8qIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaCAqLywKIAkJCQlCQ0NGMEQwQjBF
RjBCOEE1MDA0MTNDOEYgLyogU3RydWN0dXJlU3R1YkluZm8uY3BwICovLAogCQkJCUJDQ0YwRDA3
MEVGMEFBQjkwMDQxM0M4RiAvKiBTdHJ1Y3R1cmVTdHViSW5mby5oICovLAorCQkJCUE3OUU3ODFF
MTVFRUNCQTgwMDQ3Qzg1NSAvKiBVbmxpbmtlZENvZGVCbG9jay5jcHAgKi8sCisJCQkJQTc5RTc4
MUYxNUVFQ0JBODAwNDdDODU1IC8qIFVubGlua2VkQ29kZUJsb2NrLmggKi8sCiAJCQkJMEY5NjNC
MzYxM0ZDNkZERTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5oICovLAogCQkJCTBGNDI2QTQ1MTQ2
MENCQUIwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi8sCiAJCQkJMEY0MjZBNDYxNDYwQ0JB
QjAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oICovLApAQCAtMjY4OCw4ICsyNjk2LDYgQEAK
IAkJCQkwRjkzMzI5OTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5jcHAgKi8sCiAJ
CQkJMEY5MzMyOUExNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCAqLywKIAkJCQkw
RjkzMzI5QjE0Q0E3REMxMDA4NUYzQzYgLyogU3RydWN0dXJlU2V0LmggKi8sCi0JCQkJQTc5RTc4
MUUxNUVFQ0JBODAwNDdDODU1IC8qIFVubGlua2VkQ29kZUJsb2NrLmNwcCAqLywKLQkJCQlBNzlF
NzgxRjE1RUVDQkE4MDA0N0M4NTUgLyogVW5saW5rZWRDb2RlQmxvY2suaCAqLywKIAkJCSk7CiAJ
CQlwYXRoID0gYnl0ZWNvZGU7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMzEzNyw2
ICszMTQzLDcgQEAKIAkJCQkwRkY3MjlCRTE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJFeGVj
dXRpb25Db3VudGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCRjE2NkFEMzYwMDAwRjVC
QTMgLyogUHJvZmlsZXJPcmlnaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUMwMTY2QUQz
NjAwMDBGNUJBMyAvKiBQcm9maWxlck9yaWdpblN0YWNrLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RkY2MEFDMjE2NzQwRjgzMDAwMjk3NzkgLyogUmVkdWNlV2hpdGVzcGFjZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJ
CX07CkBAIC0zNzMzLDYgKzM3NDAsNyBAQAogCQkJCTBGRjcyOUIyMTY2QUQzNUMwMDBGNUJBMyAv
KiBQcm9maWxlckRhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUIzMTY2QUQz
NUMwMDBGNUJBMyAvKiBQcm9maWxlck9yaWdpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3
MjlCNDE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJPcmlnaW5TdGFjay5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRkY2MEFDMzE2NzQwRjg4MDAwMjk3NzkgLyogUmVkdWNlV2hpdGVzcGFjZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxMzY5ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsNyBA
QAogI2luY2x1ZGUgIkpTTmFtZVNjb3BlLmgiCiAjaW5jbHVkZSAiSlNWYWx1ZS5oIgogI2luY2x1
ZGUgIkxvd0xldmVsSW50ZXJwcmV0ZXIuaCIKKyNpbmNsdWRlICJSZWR1Y2VXaGl0ZXNwYWNlLmgi
CiAjaW5jbHVkZSAiUmVwYXRjaEJ1ZmZlci5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5l
cy5oIgogI2luY2x1ZGUgPHN0ZGlvLmg+CkBAIC02OCw2ICs2OSwzMCBAQCBDb2RlQmxvY2tIYXNo
IENvZGVCbG9jazo6aGFzaCgpIGNvbnN0CiAgICAgcmV0dXJuIENvZGVCbG9ja0hhc2gob3duZXJF
eGVjdXRhYmxlKCktPnNvdXJjZSgpLCBzcGVjaWFsaXphdGlvbktpbmQoKSk7CiB9CiAKK1N0cmlu
ZyBDb2RlQmxvY2s6OnNvdXJjZUNvZGVGb3JUb29scygpIGNvbnN0Cit7CisgICAgaWYgKGNvZGVU
eXBlKCkgIT0gRnVuY3Rpb25Db2RlKQorICAgICAgICByZXR1cm4gb3duZXJFeGVjdXRhYmxlKCkt
PnNvdXJjZSgpLnRvU3RyaW5nKCk7CisgICAgCisgICAgU291cmNlUHJvdmlkZXIqIHByb3ZpZGVy
ID0gc291cmNlKCk7CisgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0
PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKTsKKyAgICBVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZSogdW5saW5rZWQgPSBleGVjdXRhYmxlLT51bmxpbmtlZEV4ZWN1dGFi
bGUoKTsKKyAgICB1bnNpZ25lZCB1bmxpbmtlZFN0YXJ0T2Zmc2V0ID0gdW5saW5rZWQtPnN0YXJ0
T2Zmc2V0KCk7CisgICAgdW5zaWduZWQgbGlua2VkU3RhcnRPZmZzZXQgPSBleGVjdXRhYmxlLT5z
b3VyY2UoKS5zdGFydE9mZnNldCgpOworICAgIGludCBkZWx0YSA9IGxpbmtlZFN0YXJ0T2Zmc2V0
IC0gdW5saW5rZWRTdGFydE9mZnNldDsKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAg
YnVpbGRlci5hcHBlbmQoImZ1bmN0aW9uICIpOworICAgIGJ1aWxkZXIuYXBwZW5kKHByb3ZpZGVy
LT5nZXRSYW5nZSgKKyAgICAgICAgZGVsdGEgKyB1bmxpbmtlZC0+ZnVuY3Rpb25TdGFydE9mZnNl
dCgpLAorICAgICAgICBkZWx0YSArIHVubGlua2VkLT5zdGFydE9mZnNldCgpICsgdW5saW5rZWQt
PnNvdXJjZUxlbmd0aCgpKSk7CisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKK30KKwor
U3RyaW5nIENvZGVCbG9jazo6c291cmNlQ29kZU9uT25lTGluZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIHJlZHVjZVdoaXRlc3BhY2Uoc291cmNlQ29kZUZvclRvb2xzKCkpOworfQorCiB2b2lkIENv
ZGVCbG9jazo6ZHVtcEFzc3VtaW5nSklUVHlwZShQcmludFN0cmVhbSYgb3V0LCBKSVRDb2RlOjpK
SVRUeXBlIGppdFR5cGUpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50KCIjIiwgaGFzaCgpLCAiOlsi
LCBSYXdQb2ludGVyKHRoaXMpLCAiLT4iLCBSYXdQb2ludGVyKG93bmVyRXhlY3V0YWJsZSgpKSwg
IiwgIiwgaml0VHlwZSwgY29kZVR5cGUoKSk7CkBAIC01MjcsNyArNTUyLDcgQEAgdm9pZCBDb2Rl
QmxvY2s6OmR1bXBCeXRlY29kZShQcmludFN0cmVhbQogICAgIH0KICAgICBpZiAobmVlZHNGdWxs
U2NvcGVDaGFpbigpICYmIGNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKQogICAgICAgICBvdXQu
cHJpbnRmKCI7IGFjdGl2YXRpb24gaW4gciVkIiwgYWN0aXZhdGlvblJlZ2lzdGVyKCkpOwotICAg
IG91dC5wcmludGYoIlxuXG4iKTsKKyAgICBvdXQucHJpbnQoIlxuXG5Tb3VyY2U6ICIsIHNvdXJj
ZUNvZGVPbk9uZUxpbmUoKSwgIlxuXG4iKTsKIAogICAgIGNvbnN0IEluc3RydWN0aW9uKiBiZWdp
biA9IGluc3RydWN0aW9ucygpLmJlZ2luKCk7CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGVuZCA9
IGluc3RydWN0aW9ucygpLmVuZCgpOwpAQCAtMTY5MCw5ICsxNzE1LDYgQEAgQ29kZUJsb2NrOjpD
b2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgIEFTU0VSVChtX3NvdXJjZSk7CiAgICAg
c2V0TnVtUGFyYW1ldGVycyh1bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKTsKIAot
ICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKLSAgICBqaXRBZnRlcldhcm1VcCgpOwotCiAjaWYg
RFVNUF9DT0RFX0JMT0NLX1NUQVRJU1RJQ1MKICAgICBsaXZlQ29kZUJsb2NrU2V0LmFkZCh0aGlz
KTsKICNlbmRpZgpAQCAtMTkxMSw2ICsxOTMzLDEyIEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNj
cmlwdEV4ZWN1dGFibGUqIG8KICAgICB9CiAgICAgbV9pbnN0cnVjdGlvbnMgPSBXVEY6OlJlZkNv
dW50ZWRBcnJheTxJbnN0cnVjdGlvbj4oaW5zdHJ1Y3Rpb25zKTsKIAorICAgIC8vIFNldCBvcHRp
bWl6YXRpb24gdGhyZXNob2xkcyBvbmx5IGFmdGVyIG1faW5zdHJ1Y3Rpb25zIGlzIGluaXRpYWxp
emVkLCBzaW5jZSB0aGVzZQorICAgIC8vIHJlbHkgb24gdGhlIGluc3RydWN0aW9uIGNvdW50IChh
bmQgYXJlIGluIHRoZW9yeSBwZXJtaXR0ZWQgdG8gYWxzbyBpbnNwZWN0IHRoZQorICAgIC8vIGlu
c3RydWN0aW9uIHN0cmVhbSB0byBtb3JlIGFjY3VyYXRlIGFzc2VzcyB0aGUgY29zdCBvZiB0aWVy
LXVwKS4KKyAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7CisgICAgaml0QWZ0ZXJXYXJtVXAoKTsK
KwogICAgIGlmIChPcHRpb25zOjpkdW1wR2VuZXJhdGVkQnl0ZWNvZGVzKCkpCiAgICAgICAgIGR1
bXBCeXRlY29kZSgpOwogICAgIG1fZ2xvYmFsRGF0YS0+ZmluaXNoZWRDb21waWxpbmcodGhpcyk7
CkBAIC0yOTExLDYgKzI5MzksMTk2IEBAIGJvb2wgRnVuY3Rpb25Db2RlQmxvY2s6OmppdENvbXBp
bGVJbXBsKEUKIH0KICNlbmRpZgogCit1bnNpZ25lZCBDb2RlQmxvY2s6OnJlb3B0aW1pemF0aW9u
UmV0cnlDb3VudGVyKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9yZW9wdGltaXphdGlvblJldHJ5
Q291bnRlciA8PSBPcHRpb25zOjpyZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCgpKTsKKyAg
ICByZXR1cm4gbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcjsKK30KKwordm9pZCBDb2RlQmxv
Y2s6OmNvdW50UmVvcHRpbWl6YXRpb24oKQoreworICAgIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNv
dW50ZXIrKzsKKyAgICBpZiAobV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlciA+IE9wdGlvbnM6
OnJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyTWF4KCkpCisgICAgICAgIG1fcmVvcHRpbWl6YXRp
b25SZXRyeUNvdW50ZXIgPSBPcHRpb25zOjpyZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCgp
OworfQorCitkb3VibGUgQ29kZUJsb2NrOjpvcHRpbWl6YXRpb25UaHJlc2hvbGRTY2FsaW5nRmFj
dG9yKCkKK3sKKyAgICAvLyBUaGlzIGV4cHJlc3Npb24gYXJpc2VzIGZyb20gZG9pbmcgYSBsZWFz
dC1zcXVhcmVzIGZpdCBvZgorICAgIC8vCisgICAgLy8gRlt4X10gPTogYSAqIFNxcnRbeCArIGJd
ICsgQWJzW2MgKiB4XSArIGQKKyAgICAvLworICAgIC8vIGFnYWluc3QgdGhlIGRhdGEgcG9pbnRz
OgorICAgIC8vCisgICAgLy8gICAgeCAgICAgICBGW3hfXQorICAgIC8vICAgIDEwICAgICAgIDAu
OSAgICAgICAgICAoc21hbGxlc3QgcmVhc29uYWJsZSBjb2RlIGJsb2NrKQorICAgIC8vICAgMjAw
ICAgICAgIDEuMCAgICAgICAgICAodHlwaWNhbCBzbWFsbC1pc2ggY29kZSBibG9jaykKKyAgICAv
LyAgIDMyMCAgICAgICAxLjIgICAgICAgICAgKHNvbWV0aGluZyBJIHNhdyBpbiAzZC1jdWJlIHRo
YXQgSSB3YW50ZWQgdG8gb3B0aW1pemUpCisgICAgLy8gIDEyNjggICAgICAgNS4wICAgICAgICAg
IChzb21ldGhpbmcgSSBzYXcgaW4gM2QtY3ViZSB0aGF0IEkgZGlkbid0IHdhbnQgdG8gb3B0aW1p
emUpCisgICAgLy8gIDQwMDAgICAgICAgNS41ICAgICAgICAgIChyYW5kb20gbGFyZ2Ugc2l6ZSwg
dXNlZCB0byBjYXVzZSB0aGUgZnVuY3Rpb24gdG8gY29udmVyZ2UgdG8gYSBzaGFsbG93IGN1cnZl
IG9mIHNvbWUgc29ydCkKKyAgICAvLyAxMDAwMCAgICAgICA2LjAgICAgICAgICAgKHNpbWlsYXIg
dG8gYWJvdmUpCisgICAgLy8KKyAgICAvLyBJIGFjaGlldmUgdGhlIG1pbmltaXphdGlvbiB1c2lu
ZyB0aGUgZm9sbG93aW5nIE1hdGhlbWF0aWNhIGNvZGU6CisgICAgLy8KKyAgICAvLyBNeUZ1bmN0
aW9uVGVtcGxhdGVbeF8sIGFfLCBiXywgY18sIGRfXSA6PSBhKlNxcnRbeCArIGJdICsgQWJzW2Mq
eF0gKyBkCisgICAgLy8KKyAgICAvLyBzYW1wbGVzID0ge3sxMCwgMC45fSwgezIwMCwgMX0sIHsz
MjAsIDEuMn0sIHsxMjY4LCA1fSwgezQwMDAsIDUuNX0sIHsxMDAwMCwgNn19CisgICAgLy8KKyAg
ICAvLyBzb2x1dGlvbiA9IAorICAgIC8vICAgICBNaW5pbWl6ZVtQbHVzIEBAICgoTXlGdW5jdGlv
blRlbXBsYXRlWyNbWzFdXSwgYSwgYiwgYywgZF0gLSAjW1syXV0pXjIgJiAvQCBzYW1wbGVzKSwK
KyAgICAvLyAgICAgICAgIHthLCBiLCBjLCBkfV1bWzJdXQorICAgIC8vCisgICAgLy8gQW5kIHRo
ZSBjb2RlIGJlbG93ICh0byBpbml0aWFsaXplIGEsIGIsIGMsIGQpIGlzIGdlbmVyYXRlZCBieToK
KyAgICAvLworICAgIC8vIFByaW50WyJjb25zdCBkb3VibGUgIiA8PiBUb1N0cmluZ1sjW1sxXV1d
IDw+ICIgPSAiIDw+CisgICAgLy8gICAgIElmWyNbWzJdXSA8IDAuMDAwMDEsICIwLjAiLCBUb1N0
cmluZ1sjW1syXV1dXSA8PiAiOyJdICYgL0Agc29sdXRpb24KKyAgICAvLworICAgIC8vIFdlJ3Zl
IGxvbmcga25vd24gdGhlIGZvbGxvd2luZyB0byBiZSB0cnVlOgorICAgIC8vIC0gU21hbGwgY29k
ZSBibG9ja3MgYXJlIGNoZWFwIHRvIG9wdGltaXplIGFuZCBzbyB3ZSBzaG91bGQgZG8gaXQgc29v
bmVyIHJhdGhlcgorICAgIC8vICAgdGhhbiBsYXRlci4KKyAgICAvLyAtIExhcmdlIGNvZGUgYmxv
Y2tzIGFyZSBleHBlbnNpdmUgdG8gb3B0aW1pemUgYW5kIHNvIHdlIHNob3VsZCBwb3N0cG9uZSBk
b2luZyBzbywKKyAgICAvLyAgIGFuZCBzb21ldGltZXMgaGF2ZSBhIGxhcmdlIGVub3VnaCB0aHJl
c2hvbGQgdGhhdCB3ZSBuZXZlciBvcHRpbWl6ZSB0aGVtLgorICAgIC8vIC0gVGhlIGRpZmZlcmVu
Y2UgaW4gY29zdCBpcyBub3QgdG90YWxseSBsaW5lYXIgYmVjYXVzZSAoYSkganVzdCBpbnZva2lu
ZyB0aGUKKyAgICAvLyAgIERGRyBpbmN1cnMgc29tZSBiYXNlIGNvc3QgYW5kIChiKSBmb3IgbGFy
Z2UgY29kZSBibG9ja3MgdGhlcmUgaXMgZW5vdWdoIHNsb3AKKyAgICAvLyAgIGluIHRoZSBjb3Jy
ZWxhdGlvbiBiZXR3ZWVuIGluc3RydWN0aW9uIGNvdW50IGFuZCB0aGUgYWN0dWFsIGNvbXBpbGF0
aW9uIGNvc3QKKyAgICAvLyAgIHRoYXQgZm9yIHRob3NlIGxhcmdlIGJsb2NrcywgdGhlIGluc3Ry
dWN0aW9uIGNvdW50IHNob3VsZCBub3QgaGF2ZSBhIHN0cm9uZworICAgIC8vICAgaW5mbHVlbmNl
IG9uIG91ciB0aHJlc2hvbGQuCisgICAgLy8KKyAgICAvLyBJIGtuZXcgdGhlIGdvYWxzIGJ1dCBJ
IGRpZG4ndCBrbm93IGhvdyB0byBhY2hpZXZlIHRoZW07IHNvIEkgcGlja2VkIGFuIGludGVyZXN0
aW5nCisgICAgLy8gZXhhbXBsZSB3aGVyZSB0aGUgaGV1cmlzdGljcyB3ZXJlIHJpZ2h0IChjb2Rl
IGJsb2NrIGluIDNkLWN1YmUgd2l0aCBpbnN0cnVjdGlvbgorICAgIC8vIGNvdW50IDMyMCwgd2hp
Y2ggZ290IGNvbXBpbGVkIGVhcmx5IGFzIGl0IHNob3VsZCBoYXZlIGJlZW4pIGFuZCBvbmUgd2hl
cmUgdGhleSB3ZXJlCisgICAgLy8gdG90YWxseSB3cm9uZyAoY29kZSBibG9jayBpbiAzZC1jdWJl
IHdpdGggaW5zdHJ1Y3Rpb24gY291bnQgMTI2OCwgd2hpY2ggd2FzIGV4cGVuc2l2ZQorICAgIC8v
IHRvIGNvbXBpbGUgYW5kIGRpZG4ndCBydW4gb2Z0ZW4gZW5vdWdoIHRvIHdhcnJhbnQgY29tcGls
YXRpb24gaW4gbXkgb3BpbmlvbiksIGFuZAorICAgIC8vIHRoZW4gdGhyZXcgaW4gYWRkaXRpb25h
bCBkYXRhIHBvaW50cyB0aGF0IHJlcHJlc2VudGVkIG15IG93biBndWVzcyBvZiB3aGF0IG91cgor
ICAgIC8vIGhldXJpc3RpY3Mgc2hvdWxkIGRvIGZvciBzb21lIHJvdW5kLW51bWJlcmVkIGV4YW1w
bGVzLgorICAgIC8vCisgICAgLy8gVGhlIGV4cHJlc3Npb24gdG8gd2hpY2ggSSBkZWNpZGVkIHRv
IGZpdCB0aGUgZGF0YSBhcm9zZSBiZWNhdXNlIEkgc3RhcnRlZCB3aXRoIGFuCisgICAgLy8gYWZm
aW5lIGZ1bmN0aW9uLCBhbmQgdGhlbiBkaWQgdHdvIHRoaW5nczogcHV0IHRoZSBsaW5lYXIgcGFy
dCBpbiBhbiBBYnMgdG8gZW5zdXJlCisgICAgLy8gdGhhdCB0aGUgZml0IGRpZG4ndCBlbmQgdXAg
Y2hvb3NpbmcgYSBuZWdhdGl2ZSB2YWx1ZSBvZiBjICh3aGljaCB3b3VsZCByZXN1bHQgaW4KKyAg
ICAvLyB0aGUgZnVuY3Rpb24gdHVybmluZyBvdmVyIGFuZCBnb2luZyBuZWdhdGl2ZSBmb3IgbGFy
Z2UgeCkgYW5kIEkgdGhyZXcgaW4gYSBTcXJ0CisgICAgLy8gdGVybSBiZWNhdXNlIFNxcnQgcmVw
cmVzZW50cyBteSBpbnR1dGlvbiB0aGF0IHRoZSBmdW5jdGlvbiBzaG91bGQgYmUgbW9yZSBzZW5z
aXRpdmUKKyAgICAvLyB0byBzbWFsbCBjaGFuZ2VzIGluIHNtYWxsIHZhbHVlcyBvZiB4LCBidXQg
bGVzcyBzZW5zaXRpdmUgd2hlbiB4IGdldHMgbGFyZ2UuCisgICAgCisgICAgLy8gTm90ZSB0aGF0
IHRoZSBjdXJyZW50IGZpdCBlc3NlbnRpYWxseSBlbGltaW5hdGVzIHRoZSBsaW5lYXIgcG9ydGlv
biBvZiB0aGUKKyAgICAvLyBleHByZXNzaW9uIChjID09IDAuMCkuCisgICAgY29uc3QgZG91Ymxl
IGEgPSAwLjA2MTUwNDsKKyAgICBjb25zdCBkb3VibGUgYiA9IDEuMDI0MDY7CisgICAgY29uc3Qg
ZG91YmxlIGMgPSAwLjA7CisgICAgY29uc3QgZG91YmxlIGQgPSAwLjgyNTkxNDsKKyAgICAKKyAg
ICBkb3VibGUgaW5zdHJ1Y3Rpb25Db3VudCA9IHRoaXMtPmluc3RydWN0aW9uQ291bnQoKTsKKyAg
ICAKKyAgICBBU1NFUlQoaW5zdHJ1Y3Rpb25Db3VudCk7IC8vIE1ha2Ugc3VyZSB0aGlzIGlzIGNh
bGxlZCBvbmx5IGFmdGVyIHdlIGhhdmUgYW4gaW5zdHJ1Y3Rpb24gc3RyZWFtOyBvdGhlcndpc2Ug
aXQnbGwganVzdCByZXR1cm4gdGhlIHZhbHVlIG9mIGQsIHdoaWNoIG1ha2VzIG5vIHNlbnNlLgor
ICAgIAorICAgIGRvdWJsZSByZXN1bHQgPSBkICsgYSAqIHNxcnQoaW5zdHJ1Y3Rpb25Db3VudCAr
IGIpICsgYyAqIGluc3RydWN0aW9uQ291bnQ7CisjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikK
KyAgICBkYXRhTG9nKCp0aGlzLCAiOiBpbnN0cnVjdGlvbiBjb3VudCBpcyAiLCBpbnN0cnVjdGlv
bkNvdW50LCAiLCBzY2FsaW5nIGV4ZWN1dGlvbiBjb3VudGVyIGJ5ICIsIHJlc3VsdCwgIlxuIik7
CisjZW5kaWYKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50MzJfdCBjbGlwVGhy
ZXNob2xkKGRvdWJsZSB0aHJlc2hvbGQpCit7CisgICAgaWYgKHRocmVzaG9sZCA8IDEuMCkKKyAg
ICAgICAgcmV0dXJuIDE7CisgICAgCisgICAgaWYgKHRocmVzaG9sZCA+IHN0YXRpY19jYXN0PGRv
dWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpKQorICAgICAgICByZXR1
cm4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCk7CisgICAgCisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGludDMyX3Q+KHRocmVzaG9sZCk7Cit9CisKK2ludDMyX3QgQ29kZUJsb2Nr
Ojpjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkKK3sKKyAgICByZXR1cm4gY2xp
cFRocmVzaG9sZCgKKyAgICAgICAgT3B0aW9uczo6dGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldh
cm1VcCgpICoKKyAgICAgICAgb3B0aW1pemF0aW9uVGhyZXNob2xkU2NhbGluZ0ZhY3RvcigpICoK
KyAgICAgICAgKDEgPDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKSkpOworfQorCitpbnQz
Ml90IENvZGVCbG9jazo6Y291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXAoKQor
eworICAgIHJldHVybiBjbGlwVGhyZXNob2xkKAorICAgICAgICBPcHRpb25zOjp0aHJlc2hvbGRG
b3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgpICoKKyAgICAgICAgb3B0aW1pemF0aW9uVGhyZXNo
b2xkU2NhbGluZ0ZhY3RvcigpICoKKyAgICAgICAgKDEgPDwgcmVvcHRpbWl6YXRpb25SZXRyeUNv
dW50ZXIoKSkpOworfQorCitpbnQzMl90IENvZGVCbG9jazo6Y291bnRlclZhbHVlRm9yT3B0aW1p
emVTb29uKCkKK3sKKyAgICByZXR1cm4gY2xpcFRocmVzaG9sZCgKKyAgICAgICAgT3B0aW9uczo6
dGhyZXNob2xkRm9yT3B0aW1pemVTb29uKCkgKgorICAgICAgICBvcHRpbWl6YXRpb25UaHJlc2hv
bGRTY2FsaW5nRmFjdG9yKCkgKgorICAgICAgICAoMSA8PCByZW9wdGltaXphdGlvblJldHJ5Q291
bnRlcigpKSk7Cit9CisKK2Jvb2wgQ29kZUJsb2NrOjpjaGVja0lmT3B0aW1pemF0aW9uVGhyZXNo
b2xkUmVhY2hlZCgpCit7CisgICAgcmV0dXJuIG1faml0RXhlY3V0ZUNvdW50ZXIuY2hlY2tJZlRo
cmVzaG9sZENyb3NzZWRBbmRTZXQodGhpcyk7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpvcHRpbWl6
ZU5leHRJbnZvY2F0aW9uKCkKK3sKKyAgICBtX2ppdEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVz
aG9sZCgwLCB0aGlzKTsKK30KKwordm9pZCBDb2RlQmxvY2s6OmRvbnRPcHRpbWl6ZUFueXRpbWVT
b29uKCkKK3sKKyAgICBtX2ppdEV4ZWN1dGVDb3VudGVyLmRlZmVySW5kZWZpbml0ZWx5KCk7Cit9
CisKK3ZvaWQgQ29kZUJsb2NrOjpvcHRpbWl6ZUFmdGVyV2FybVVwKCkKK3sKKyAgICBtX2ppdEV4
ZWN1dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZChjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVy
V2FybVVwKCksIHRoaXMpOworfQorCit2b2lkIENvZGVCbG9jazo6b3B0aW1pemVBZnRlckxvbmdX
YXJtVXAoKQoreworICAgIG1faml0RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKGNvdW50
ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCksIHRoaXMpOworfQorCit2b2lkIENv
ZGVCbG9jazo6b3B0aW1pemVTb29uKCkKK3sKKyAgICBtX2ppdEV4ZWN1dGVDb3VudGVyLnNldE5l
d1RocmVzaG9sZChjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZVNvb24oKSwgdGhpcyk7Cit9CisKKyNp
ZiBFTkFCTEUoSklUKQordWludDMyX3QgQ29kZUJsb2NrOjphZGp1c3RlZEV4aXRDb3VudFRocmVz
aG9sZCh1aW50MzJfdCBkZXNpcmVkVGhyZXNob2xkKQoreworICAgIEFTU0VSVChnZXRKSVRUeXBl
KCkgPT0gSklUQ29kZTo6REZHSklUKTsKKyAgICAvLyBDb21wdXRlIHRoaXMgdGhlIGxhbWUgd2F5
IHNvIHdlIGRvbid0IHNhdHVyYXRlLiBUaGlzIGlzIGNhbGxlZCBpbmZyZXF1ZW50bHkKKyAgICAv
LyBlbm91Z2ggdGhhdCB0aGlzIGxvb3Agd29uJ3QgaHVydCB1cy4KKyAgICB1bnNpZ25lZCByZXN1
bHQgPSBkZXNpcmVkVGhyZXNob2xkOworICAgIGZvciAodW5zaWduZWQgbiA9IGJhc2VsaW5lVmVy
c2lvbigpLT5yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpOyBuLS07KSB7CisgICAgICAgIHVu
c2lnbmVkIG5ld1Jlc3VsdCA9IHJlc3VsdCA8PCAxOworICAgICAgICBpZiAobmV3UmVzdWx0IDwg
cmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+
OjptYXgoKTsKKyAgICAgICAgcmVzdWx0ID0gbmV3UmVzdWx0OworICAgIH0KKyAgICByZXR1cm4g
cmVzdWx0OworfQorICAgICAgICAKK3VpbnQzMl90IENvZGVCbG9jazo6ZXhpdENvdW50VGhyZXNo
b2xkRm9yUmVvcHRpbWl6YXRpb24oKQoreworICAgIHJldHVybiBhZGp1c3RlZEV4aXRDb3VudFRo
cmVzaG9sZChPcHRpb25zOjpvc3JFeGl0Q291bnRGb3JSZW9wdGltaXphdGlvbigpKTsKK30KKyAg
ICAgICAgCit1aW50MzJfdCBDb2RlQmxvY2s6OmV4aXRDb3VudFRocmVzaG9sZEZvclJlb3B0aW1p
emF0aW9uRnJvbUxvb3AoKQoreworICAgIHJldHVybiBhZGp1c3RlZEV4aXRDb3VudFRocmVzaG9s
ZChPcHRpb25zOjpvc3JFeGl0Q291bnRGb3JSZW9wdGltaXphdGlvbkZyb21Mb29wKCkpOworfQor
Citib29sIENvZGVCbG9jazo6c2hvdWxkUmVvcHRpbWl6ZU5vdygpCit7CisgICAgcmV0dXJuIG9z
ckV4aXRDb3VudGVyKCkgPj0gZXhpdENvdW50VGhyZXNob2xkRm9yUmVvcHRpbWl6YXRpb24oKTsK
K30KKyAgICAgICAgCitib29sIENvZGVCbG9jazo6c2hvdWxkUmVvcHRpbWl6ZUZyb21Mb29wTm93
KCkKK3sKKyAgICByZXR1cm4gb3NyRXhpdENvdW50ZXIoKSA+PSBleGl0Q291bnRUaHJlc2hvbGRG
b3JSZW9wdGltaXphdGlvbkZyb21Mb29wKCk7Cit9CisjZW5kaWYKKwogI2lmIEVOQUJMRShWQUxV
RV9QUk9GSUxFUikKIEFycmF5UHJvZmlsZSogQ29kZUJsb2NrOjpnZXRBcnJheVByb2ZpbGUodW5z
aWduZWQgYnl0ZWNvZGVPZmZzZXQpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxMzY5ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMiw2ICsxMzIs
OCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2Vk
Q29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUuZ2V0KCk7IH0KIAogICAg
ICAgICBDb2RlQmxvY2tIYXNoIGhhc2goKSBjb25zdDsKKyAgICAgICAgU3RyaW5nIHNvdXJjZUNv
ZGVGb3JUb29scygpIGNvbnN0OyAvLyBOb3QgcXVpdGUgdGhlIGFjdHVhbCBzb3VyY2Ugd2UgcGFy
c2VkOyB0aGlzIHdpbGwgZG8gdGhpbmdzIGxpa2UgcHJlZml4IHRoZSBzb3VyY2UgZm9yIGEgZnVu
Y3Rpb24gd2l0aCBhIHJlaWZpZWQgc2lnbmF0dXJlLgorICAgICAgICBTdHJpbmcgc291cmNlQ29k
ZU9uT25lTGluZSgpIGNvbnN0OyAvLyBBcyBzb3VyY2VDb2RlRm9yVG9vbHMoKSwgYnV0IHJlcGxh
Y2VzIGFsbCB3aGl0ZXNwYWNlIHJ1bnMgd2l0aCBhIHNpbmdsZSBzcGFjZS4KICAgICAgICAgdm9p
ZCBkdW1wQXNzdW1pbmdKSVRUeXBlKFByaW50U3RyZWFtJiwgSklUQ29kZTo6SklUVHlwZSkgY29u
c3Q7CiAgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgICAgICAKQEAg
LTEwMDksMjggKzEwMTEsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIFdoZW4gd2Ug
b2JzZXJ2ZSBhIGxvdCBvZiBzcGVjdWxhdGlvbiBmYWlsdXJlcywgd2UgdHJpZ2dlciBhCiAgICAg
ICAgIC8vIHJlb3B0aW1pemF0aW9uLiBCdXQgZWFjaCB0aW1lLCB3ZSBpbmNyZWFzZSB0aGUgb3B0
aW1pemF0aW9uIHRyaWdnZXIKICAgICAgICAgLy8gdG8gYXZvaWQgdGhyYXNoaW5nLgotICAgICAg
ICB1bnNpZ25lZCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpIGNvbnN0Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIEFTU0VSVChtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyIDw9IE9wdGlv
bnM6OnJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyTWF4KCkpOwotICAgICAgICAgICAgcmV0dXJu
IG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIHZvaWQgY291bnRSZW9wdGltaXphdGlvbigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1f
cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIrKzsKLSAgICAgICAgICAgIGlmIChtX3Jlb3B0aW1p
emF0aW9uUmV0cnlDb3VudGVyID4gT3B0aW9uczo6cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJN
YXgoKSkKLSAgICAgICAgICAgICAgICBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyID0gT3B0
aW9uczo6cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgoKTsKLSAgICAgICAgfQorICAgICAg
ICB1bnNpZ25lZCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpIGNvbnN0OworICAgICAgICB2
b2lkIGNvdW50UmVvcHRpbWl6YXRpb24oKTsKICAgICAgICAgCi0gICAgICAgIGludDMyX3QgY291
bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBPcHRpb25zOjp0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkgPDwgcmVv
cHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
aW50MzJfdCBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBPcHRpb25zOjp0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVy
TG9uZ1dhcm1VcCgpIDw8IHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCk7Ci0gICAgICAgIH0K
KyAgICAgICAgaW50MzJfdCBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCk7Cisg
ICAgICAgIGludDMyX3QgY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXAoKTsK
KyAgICAgICAgaW50MzJfdCBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZVNvb24oKTsKICAgICAgICAg
CiAgICAgICAgIGludDMyX3QqIGFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkKICAgICAgICAg
ewpAQCAtMTA0OCwyOCArMTAzNCwxOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gQ2hl
Y2sgaWYgdGhlIG9wdGltaXphdGlvbiB0aHJlc2hvbGQgaGFzIGJlZW4gcmVhY2hlZCwgYW5kIGlm
IG5vdCwKICAgICAgICAgLy8gYWRqdXN0IHRoZSBoZXVyaXN0aWNzIGFjY29yZGluZ2x5LiBSZXR1
cm5zIHRydWUgaWYgdGhlIHRocmVzaG9sZCBoYXMKICAgICAgICAgLy8gYmVlbiByZWFjaGVkLgot
ICAgICAgICBib29sIGNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKCkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIG1faml0RXhlY3V0ZUNvdW50ZXIuY2hlY2tJZlRocmVz
aG9sZENyb3NzZWRBbmRTZXQodGhpcyk7Ci0gICAgICAgIH0KKyAgICAgICAgYm9vbCBjaGVja0lm
T3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZCgpOwogICAgICAgICAKICAgICAgICAgLy8gQ2Fs
bCB0aGlzIHRvIGZvcmNlIHRoZSBuZXh0IG9wdGltaXphdGlvbiB0cmlnZ2VyIHRvIGZpcmUuIFRo
aXMgaXMKICAgICAgICAgLy8gcmFyZWx5IHdpc2UsIHNpbmNlIG9wdGltaXphdGlvbiB0cmlnZ2Vy
cyBhcmUgdHlwaWNhbGx5IG1vcmUKICAgICAgICAgLy8gZXhwZW5zaXZlIHRoYW4gZXhlY3V0aW5n
IGJhc2VsaW5lIGNvZGUuCi0gICAgICAgIHZvaWQgb3B0aW1pemVOZXh0SW52b2NhdGlvbigpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIG1faml0RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xk
KDAsIHRoaXMpOwotICAgICAgICB9CisgICAgICAgIHZvaWQgb3B0aW1pemVOZXh0SW52b2NhdGlv
bigpOwogICAgICAgICAKICAgICAgICAgLy8gQ2FsbCB0aGlzIHRvIHByZXZlbnQgb3B0aW1pemF0
aW9uIGZyb20gaGFwcGVuaW5nIGFnYWluLiBOb3RlIHRoYXQKICAgICAgICAgLy8gb3B0aW1pemF0
aW9uIHdpbGwgc3RpbGwgaGFwcGVuIGFmdGVyIHJvdWdobHkgMl4yOSBpbnZvY2F0aW9ucywKICAg
ICAgICAgLy8gc28gdGhpcyBpcyByZWFsbHkgbWVhbnQgdG8gZGVsYXkgdGhhdCBhcyBtdWNoIGFz
IHBvc3NpYmxlLiBUaGlzCiAgICAgICAgIC8vIGlzIGNhbGxlZCBpZiBvcHRpbWl6YXRpb24gZmFp
bGVkLCBhbmQgd2UgZXhwZWN0IGl0IHRvIGZhaWwgaW4KICAgICAgICAgLy8gdGhlIGZ1dHVyZSBh
cyB3ZWxsLgotICAgICAgICB2b2lkIGRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKCkKLSAgICAgICAg
ewotICAgICAgICAgICAgbV9qaXRFeGVjdXRlQ291bnRlci5kZWZlckluZGVmaW5pdGVseSgpOwot
ICAgICAgICB9CisgICAgICAgIHZvaWQgZG9udE9wdGltaXplQW55dGltZVNvb24oKTsKICAgICAg
ICAgCiAgICAgICAgIC8vIENhbGwgdGhpcyB0byByZWluaXRpYWxpemUgdGhlIGNvdW50ZXIgdG8g
aXRzIHN0YXJ0aW5nIHN0YXRlLAogICAgICAgICAvLyBmb3JjaW5nIGEgd2FybS11cCB0byBoYXBw
ZW4gYmVmb3JlIHRoZSBuZXh0IG9wdGltaXphdGlvbiB0cmlnZ2VyCkBAIC0xMDc3LDE3ICsxMDU0
LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyBtYWtlcyBzZW5zZSB0byBjYWxsIHRo
aXMgaWYgYW4gT1NSIGV4aXQgb2NjdXJyZWQuIE5vdGUgdGhhdAogICAgICAgICAvLyBPU1IgZXhp
dCBjb2RlIGlzIGNvZGUgZ2VuZXJhdGVkLCBzbyB0aGUgdmFsdWUgb2YgdGhlIGV4ZWN1dGUKICAg
ICAgICAgLy8gY291bnRlciB0aGF0IHRoaXMgY29ycmVzcG9uZHMgdG8gaXMgYWxzbyBhdmFpbGFi
bGUgZGlyZWN0bHkuCi0gICAgICAgIHZvaWQgb3B0aW1pemVBZnRlcldhcm1VcCgpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIG1faml0RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKGNvdW50
ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKSwgdGhpcyk7Ci0gICAgICAgIH0KKyAgICAg
ICAgdm9pZCBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7CiAgICAgICAgIAogICAgICAgICAvLyBDYWxs
IHRoaXMgdG8gZm9yY2UgYW4gb3B0aW1pemF0aW9uIHRyaWdnZXIgdG8gZmlyZSBvbmx5IGFmdGVy
CiAgICAgICAgIC8vIGEgbG90IG9mIHdhcm0tdXAuCi0gICAgICAgIHZvaWQgb3B0aW1pemVBZnRl
ckxvbmdXYXJtVXAoKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2ppdEV4ZWN1dGVDb3VudGVy
LnNldE5ld1RocmVzaG9sZChjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgp
LCB0aGlzKTsKLSAgICAgICAgfQorICAgICAgICB2b2lkIG9wdGltaXplQWZ0ZXJMb25nV2FybVVw
KCk7CiAgICAgICAgIAogICAgICAgICAvLyBDYWxsIHRoaXMgdG8gY2F1c2UgYW4gb3B0aW1pemF0
aW9uIHRyaWdnZXIgdG8gZmlyZSBzb29uLCBidXQKICAgICAgICAgLy8gbm90IG5lY2Vzc2FyaWx5
IHRoZSBuZXh0IG9uZS4gVGhpcyBtYWtlcyBzZW5zZSBpZiBvcHRpbWl6YXRpb24KQEAgLTExMDcs
MTAgKzEwNzgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gZWFjaCByZXR1cm4sIGFz
IHRoYXQgd291bGQgYmUgc3VwZXJmbHVvdXMuIEl0IG9ubHkgbWFrZXMgc2Vuc2UKICAgICAgICAg
Ly8gdG8gdHJpZ2dlciBvcHRpbWl6YXRpb24gaWYgb25lIG9mIHRob3NlIGZ1bmN0aW9ucyBiZWNv
bWVzIGhvdAogICAgICAgICAvLyBpbiB0aGUgYmFzZWxpbmUgY29kZS4KLSAgICAgICAgdm9pZCBv
cHRpbWl6ZVNvb24oKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2ppdEV4ZWN1dGVDb3VudGVy
LnNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPcHRpbWl6ZVNvb24oKSA8PCBy
ZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpLCB0aGlzKTsKLSAgICAgICAgfQorICAgICAgICB2
b2lkIG9wdGltaXplU29vbigpOwogICAgICAgICAKICAgICAgICAgdWludDMyX3Qgb3NyRXhpdENv
dW50ZXIoKSBjb25zdCB7IHJldHVybiBtX29zckV4aXRDb3VudGVyOyB9CiAgICAgICAgIApAQCAt
MTEyMSw0MCArMTA4OSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZk9TUkV4aXRDb3VudGVyKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENv
ZGVCbG9jaywgbV9vc3JFeGl0Q291bnRlcik7IH0KIAogI2lmIEVOQUJMRShKSVQpCi0gICAgICAg
IHVpbnQzMl90IGFkanVzdGVkRXhpdENvdW50VGhyZXNob2xkKHVpbnQzMl90IGRlc2lyZWRUaHJl
c2hvbGQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChnZXRKSVRUeXBlKCkgPT0gSklU
Q29kZTo6REZHSklUKTsKLSAgICAgICAgICAgIC8vIENvbXB1dGUgdGhpcyB0aGUgbGFtZSB3YXkg
c28gd2UgZG9uJ3Qgc2F0dXJhdGUuIFRoaXMgaXMgY2FsbGVkIGluZnJlcXVlbnRseQotICAgICAg
ICAgICAgLy8gZW5vdWdoIHRoYXQgdGhpcyBsb29wIHdvbid0IGh1cnQgdXMuCi0gICAgICAgICAg
ICB1bnNpZ25lZCByZXN1bHQgPSBkZXNpcmVkVGhyZXNob2xkOwotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBuID0gYmFzZWxpbmVWZXJzaW9uKCktPnJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVy
KCk7IG4tLTspIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBuZXdSZXN1bHQgPSByZXN1bHQg
PDwgMTsKLSAgICAgICAgICAgICAgICBpZiAobmV3UmVzdWx0IDwgcmVzdWx0KQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpOwot
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5ld1Jlc3VsdDsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHVpbnQz
Ml90IGV4aXRDb3VudFRocmVzaG9sZEZvclJlb3B0aW1pemF0aW9uKCkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGFkanVzdGVkRXhpdENvdW50VGhyZXNob2xkKE9wdGlvbnM6Om9zckV4
aXRDb3VudEZvclJlb3B0aW1pemF0aW9uKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICB1aW50MzJfdCBleGl0Q291bnRUaHJlc2hvbGRGb3JSZW9wdGltaXphdGlvbkZyb21Mb29wKCkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkanVzdGVkRXhpdENvdW50VGhyZXNob2xk
KE9wdGlvbnM6Om9zckV4aXRDb3VudEZvclJlb3B0aW1pemF0aW9uRnJvbUxvb3AoKSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBib29sIHNob3VsZFJlb3B0aW1pemVOb3coKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gb3NyRXhpdENvdW50ZXIoKSA+PSBleGl0Q291bnRUaHJlc2hvbGRG
b3JSZW9wdGltaXphdGlvbigpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBib29sIHNo
b3VsZFJlb3B0aW1pemVGcm9tTG9vcE5vdygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBvc3JFeGl0Q291bnRlcigpID49IGV4aXRDb3VudFRocmVzaG9sZEZvclJlb3B0aW1pemF0aW9u
RnJvbUxvb3AoKTsKLSAgICAgICAgfQorICAgICAgICB1aW50MzJfdCBhZGp1c3RlZEV4aXRDb3Vu
dFRocmVzaG9sZCh1aW50MzJfdCBkZXNpcmVkVGhyZXNob2xkKTsKKyAgICAgICAgdWludDMyX3Qg
ZXhpdENvdW50VGhyZXNob2xkRm9yUmVvcHRpbWl6YXRpb24oKTsKKyAgICAgICAgdWludDMyX3Qg
ZXhpdENvdW50VGhyZXNob2xkRm9yUmVvcHRpbWl6YXRpb25Gcm9tTG9vcCgpOworICAgICAgICBi
b29sIHNob3VsZFJlb3B0aW1pemVOb3coKTsKKyAgICAgICAgYm9vbCBzaG91bGRSZW9wdGltaXpl
RnJvbUxvb3BOb3coKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQpAQCAt
MTE5Miw2ICsxMTMxLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBwcml2YXRlOgogICAgICAg
ICBmcmllbmQgY2xhc3MgREZHQ29kZUJsb2NrczsKKyAgICAgICAgCisgICAgICAgIGRvdWJsZSBv
cHRpbWl6YXRpb25UaHJlc2hvbGRTY2FsaW5nRmFjdG9yKCk7CiAKICNpZiBFTkFCTEUoSklUKQog
ICAgICAgICBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lKiBmaW5kQ2xvc3VyZUNhbGxGb3JSZXR1cm5Q
QyhSZXR1cm5BZGRyZXNzUHRyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9FeGVjdXRpb25Db3VudGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5jcHAJKHJldmlzaW9uIDEzNjk4OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTEzLDcgKzExMyw4IEBAIGJvb2wgRXhlY3V0aW9uQ291bnRlcjo6aGFzQ3Jv
c3NlZFRocmVzaG8KICAgICBkb3VibGUgbW9kaWZpZWRUaHJlc2hvbGQgPSBhcHBseU1lbW9yeVVz
YWdlSGV1cmlzdGljcyhtX2FjdGl2ZVRocmVzaG9sZCwgY29kZUJsb2NrKTsKICAgICAKICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPihtX3RvdGFsQ291bnQpICsgbV9jb3VudGVyID49Ci0g
ICAgICAgICBtb2RpZmllZFRocmVzaG9sZCAtIHN0YXRpY19jYXN0PGRvdWJsZT4obV9hY3RpdmVU
aHJlc2hvbGQpIC8gMjsKKyAgICAgICAgbW9kaWZpZWRUaHJlc2hvbGQgLSBzdGF0aWNfY2FzdDxk
b3VibGU+KAorICAgICAgICAgICAgc3RkOjptaW4obV9hY3RpdmVUaHJlc2hvbGQsIE9wdGlvbnM6
Om1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHMoKSkpIC8gMjsKIH0KIAog
Ym9vbCBFeGVjdXRpb25Db3VudGVyOjpzZXRUaHJlc2hvbGQoQ29kZUJsb2NrKiBjb2RlQmxvY2sp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVkdWNlV2hpdGVzcGFjZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlZHVjZVdo
aXRlc3BhY2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1JlZHVjZVdoaXRlc3BhY2UuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJSZWR1Y2VXaGl0ZXNwYWNlLmgiCisKKyNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBKU0MgeworCitTdHJpbmcgcmVkdWNlV2hpdGVzcGFjZShjb25zdCBTdHJpbmcm
IGlucHV0KQoreworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICAKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoKCk7KSB7CisgICAgICAgIGlmIChpc0FTQ0lJ
U3BhY2UoaW5wdXRbaV0pKSB7CisgICAgICAgICAgICB3aGlsZSAoaSA8IGlucHV0Lmxlbmd0aCgp
ICYmIGlzQVNDSUlTcGFjZShpbnB1dFtpXSkpCisgICAgICAgICAgICAgICAgKytpOworICAgICAg
ICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGlucHV0W2ldKTsKKyAgICAgICAgKytpOworICAg
IH0KKyAgICAKKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworfQorCit9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWR1Y2VXaGl0
ZXNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Jl
ZHVjZVdoaXRlc3BhY2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9SZWR1Y2VXaGl0ZXNwYWNlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBS
ZWR1Y2VXaGl0ZXNwYWNlX2gKKyNkZWZpbmUgUmVkdWNlV2hpdGVzcGFjZV9oCisKKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFJlcGxhY2Ug
YWxsIHdoaXRlc3BhY2UgcnVucyB3aXRoIGEgc2luZ2xlIHNwYWNlLgorU3RyaW5nIHJlZHVjZVdo
aXRlc3BhY2UoY29uc3QgU3RyaW5nJik7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYg
Ly8gUmVkdWNlV2hpdGVzcGFjZV9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxMzY5ODkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYg
KzMzLDMzIEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKICNpZiBFTkFCTEUo
REZHX0pJVCkKK2Jvb2wgbWlnaHRDb21waWxlRXZhbChDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sK
KyAgICByZXR1cm4gY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkgPD0gT3B0aW9uczo6bWF4
aW11bU9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQoKTsKK30KK2Jvb2wgbWln
aHRDb21waWxlUHJvZ3JhbShDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkgPD0gT3B0aW9uczo6bWF4aW11bU9wdGltaXphdGlv
bkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQoKTsKK30KK2Jvb2wgbWlnaHRDb21waWxlRnVuY3Rp
b25Gb3JDYWxsKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIHJldHVybiBjb2RlQmxvY2st
Pmluc3RydWN0aW9uQ291bnQoKSA8PSBPcHRpb25zOjptYXhpbXVtT3B0aW1pemF0aW9uQ2FuZGlk
YXRlSW5zdHJ1Y3Rpb25Db3VudCgpOworfQorYm9vbCBtaWdodENvbXBpbGVGdW5jdGlvbkZvckNv
bnN0cnVjdChDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gY29kZUJsb2NrLT5p
bnN0cnVjdGlvbkNvdW50KCkgPD0gT3B0aW9uczo6bWF4aW11bU9wdGltaXphdGlvbkNhbmRpZGF0
ZUluc3RydWN0aW9uQ291bnQoKTsKK30KKworYm9vbCBtaWdodElubGluZUZ1bmN0aW9uRm9yQ2Fs
bChDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gY29kZUJsb2NrLT5pbnN0cnVj
dGlvbkNvdW50KCkgPD0gT3B0aW9uczo6bWF4aW11bUZ1bmN0aW9uRm9yQ2FsbElubGluZUNhbmRp
ZGF0ZUluc3RydWN0aW9uQ291bnQoKQorICAgICAgICAmJiAhY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKS0+bmVlZHNBY3RpdmF0aW9uKCk7Cit9Citib29sIG1pZ2h0SW5saW5lRnVuY3Rpb25G
b3JDb25zdHJ1Y3QoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgcmV0dXJuIGNvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25Db3VudCgpIDw9IE9wdGlvbnM6Om1heGltdW1GdW5jdGlvbkZvckNvbnN0
cnVjdElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQoKQorICAgICAgICAmJiAhY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKS0+bmVlZHNBY3RpdmF0aW9uKCk7Cit9CiAKIHN0YXRpYyBp
bmxpbmUgdm9pZCBkZWJ1Z0ZhaWwoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIE9wY29kZUlEIG9wY29k
ZUlELCBib29sIHJlc3VsdCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q2FwYWJpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDYXBhYmlsaXRpZXMuaAkocmV2aXNpb24gMTM2OTg5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzksMzMgKzM5LDEy
IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICNpZiBFTkFCTEUoREZHX0pJVCkK
IC8vIEZhc3QgY2hlY2sgZnVuY3Rpb25zOyBpZiB0aGV5IHJldHVybiB0cnVlIGl0IGlzIHN0aWxs
IG5lY2Vzc2FyeSB0bwogLy8gY2hlY2sgb3Bjb2Rlcy4KLWlubGluZSBib29sIG1pZ2h0Q29tcGls
ZUV2YWwoQ29kZUJsb2NrKiBjb2RlQmxvY2spCi17Ci0gICAgcmV0dXJuIGNvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25Db3VudCgpIDw9IE9wdGlvbnM6Om1heGltdW1PcHRpbWl6YXRpb25DYW5kaWRhdGVJ
bnN0cnVjdGlvbkNvdW50KCk7Ci19Ci1pbmxpbmUgYm9vbCBtaWdodENvbXBpbGVQcm9ncmFtKENv
ZGVCbG9jayogY29kZUJsb2NrKQotewotICAgIHJldHVybiBjb2RlQmxvY2stPmluc3RydWN0aW9u
Q291bnQoKSA8PSBPcHRpb25zOjptYXhpbXVtT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rp
b25Db3VudCgpOwotfQotaW5saW5lIGJvb2wgbWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDYWxsKENv
ZGVCbG9jayogY29kZUJsb2NrKQotewotICAgIHJldHVybiBjb2RlQmxvY2stPmluc3RydWN0aW9u
Q291bnQoKSA8PSBPcHRpb25zOjptYXhpbXVtT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rp
b25Db3VudCgpOwotfQotaW5saW5lIGJvb2wgbWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDb25zdHJ1
Y3QoQ29kZUJsb2NrKiBjb2RlQmxvY2spCi17Ci0gICAgcmV0dXJuIGNvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25Db3VudCgpIDw9IE9wdGlvbnM6Om1heGltdW1PcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0
cnVjdGlvbkNvdW50KCk7Ci19Ci0KLWlubGluZSBib29sIG1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JD
YWxsKENvZGVCbG9jayogY29kZUJsb2NrKQotewotICAgIHJldHVybiBjb2RlQmxvY2stPmluc3Ry
dWN0aW9uQ291bnQoKSA8PSBPcHRpb25zOjptYXhpbXVtRnVuY3Rpb25Gb3JDYWxsSW5saW5lQ2Fu
ZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCgpCi0gICAgICAgICYmICFjb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpLT5uZWVkc0FjdGl2YXRpb24oKTsKLX0KLWlubGluZSBib29sIG1pZ2h0SW5saW5l
RnVuY3Rpb25Gb3JDb25zdHJ1Y3QoQ29kZUJsb2NrKiBjb2RlQmxvY2spCi17Ci0gICAgcmV0dXJu
IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpIDw9IE9wdGlvbnM6Om1heGltdW1GdW5jdGlv
bkZvckNvbnN0cnVjdElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQoKQotICAgICAgICAm
JiAhY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+bmVlZHNBY3RpdmF0aW9uKCk7Ci19Citi
b29sIG1pZ2h0Q29tcGlsZUV2YWwoQ29kZUJsb2NrKik7Citib29sIG1pZ2h0Q29tcGlsZVByb2dy
YW0oQ29kZUJsb2NrKik7Citib29sIG1pZ2h0Q29tcGlsZUZ1bmN0aW9uRm9yQ2FsbChDb2RlQmxv
Y2sqKTsKK2Jvb2wgbWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDb25zdHJ1Y3QoQ29kZUJsb2NrKik7
Citib29sIG1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDYWxsKENvZGVCbG9jayopOworYm9vbCBtaWdo
dElubGluZUZ1bmN0aW9uRm9yQ29uc3RydWN0KENvZGVCbG9jayopOwogCiAvLyBPcGNvZGUgY2hl
Y2tpbmcuCiBpbmxpbmUgYm9vbCBjYW5JbmxpbmVSZXNvbHZlT3BlcmF0aW9ucyhPcGNvZGVJRCBv
cGNvZGUsIFJlc29sdmVPcGVyYXRpb25zKiBvcGVyYXRpb25zKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRGlzYXNzZW1ibGVyLmNwcAkocmV2aXNpb24gMTM2OTg5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02OSw2ICs2OSw4IEBAIHZvaWQgRGlzYXNzZW1ibGVyOjpyZXBvcnRUb1Byb2Zp
bGVyKFByb2YKIHZvaWQgRGlzYXNzZW1ibGVyOjpkdW1wSGVhZGVyKFByaW50U3RyZWFtJiBvdXQs
IExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCiB7CiAgICAgb3V0LnByaW50KCJHZW5lcmF0ZWQgREZH
IEpJVCBjb2RlIGZvciAiLCBDb2RlQmxvY2tXaXRoSklUVHlwZShtX2dyYXBoLm1fY29kZUJsb2Nr
LCBKSVRDb2RlOjpERkdKSVQpLCAiLCBpbnN0cnVjdGlvbiBjb3VudCA9ICIsIG1fZ3JhcGgubV9j
b2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSwgIjpcbiIpOworICAgIG91dC5wcmludCgiICAg
IE9wdGltaXplZCB3aXRoIGV4ZWN1dGlvbiBjb3VudGVyID0gIiwgbV9ncmFwaC5tX3Byb2ZpbGVk
QmxvY2stPmppdEV4ZWN1dGVDb3VudGVyKCksICJcbiIpOworICAgIG91dC5wcmludCgiICAgIFNv
dXJjZTogIiwgbV9ncmFwaC5tX2NvZGVCbG9jay0+c291cmNlQ29kZU9uT25lTGluZSgpLCAiXG4i
KTsKICAgICBvdXQucHJpbnQoIiAgICBDb2RlIGF0IFsiLCBSYXdQb2ludGVyKGxpbmtCdWZmZXIu
ZGVidWdBZGRyZXNzKCkpLCAiLCAiLCBSYXdQb2ludGVyKHN0YXRpY19jYXN0PGNoYXIqPihsaW5r
QnVmZmVyLmRlYnVnQWRkcmVzcygpKSArIGxpbmtCdWZmZXIuZGVidWdTaXplKCkpLCAiKTpcbiIp
OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAko
cmV2aXNpb24gMTM2OTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRy
eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgdm9pZCogcHJlcGFyZU9TUkVu
dHJ5KEV4ZWNTdGF0ZSogZXhlYywgQwogICAgIEFTU0VSVCghY29kZUJsb2NrLT5qaXRDb2RlTWFw
KCkpOwogCiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICBkYXRhTG9nRigiT1NSIGlu
ICVwKCVwKSBmcm9tIGJjIyV1XG4iLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUo
KSwgYnl0ZWNvZGVJbmRleCk7CisgICAgZGF0YUxvZygiT1NSIGluICIsICpjb2RlQmxvY2stPmFs
dGVybmF0aXZlKCksICIgLT4gIiwgKmNvZGVCbG9jaywgIiBmcm9tIGJjIyIsIGJ5dGVjb2RlSW5k
ZXgsICJcbiIpOwogI2VuZGlmCiAgICAgCiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0g
JmV4ZWMtPmdsb2JhbERhdGEoKTsKQEAgLTEwMSw5ICsxMDEsNyBAQCB2b2lkKiBwcmVwYXJlT1NS
RW50cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAgICAgICAgIAogICAgICAgICBpZiAoIWVudHJ5LT5t
X2V4cGVjdGVkVmFsdWVzLmFyZ3VtZW50KGFyZ3VtZW50KS52YWxpZGF0ZSh2YWx1ZSkpIHsKICNp
ZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICBPU1Ig
ZmFpbGVkIGJlY2F1c2UgYXJndW1lbnQgJXp1IGlzICVzLCBleHBlY3RlZCAiLCBhcmd1bWVudCwg
dmFsdWUuZGVzY3JpcHRpb24oKSk7Ci0gICAgICAgICAgICBlbnRyeS0+bV9leHBlY3RlZFZhbHVl
cy5hcmd1bWVudChhcmd1bWVudCkuZHVtcChXVEY6OmRhdGFGaWxlKCkpOwotICAgICAgICAgICAg
ZGF0YUxvZ0YoIi5cbiIpOworICAgICAgICAgICAgZGF0YUxvZygiICAgIE9TUiBmYWlsZWQgYmVj
YXVzZSBhcmd1bWVudCAiLCBhcmd1bWVudCwgIiBpcyAiLCB2YWx1ZSwgIiwgZXhwZWN0ZWQgIiwg
ZW50cnktPm1fZXhwZWN0ZWRWYWx1ZXMuYXJndW1lbnQoYXJndW1lbnQpLCAiLlxuIik7CiAjZW5k
aWYKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CkBAIC0xMTMsNyArMTExLDcgQEAg
dm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQwogICAgICAgICBpZiAoZW50
cnktPm1fbG9jYWxzRm9yY2VkRG91YmxlLmdldChsb2NhbCkpIHsKICAgICAgICAgICAgIGlmICgh
ZXhlYy0+cmVnaXN0ZXJzKClbbG9jYWxdLmpzVmFsdWUoKS5pc051bWJlcigpKSB7CiAjaWYgRU5B
QkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAgIE9TUiBm
YWlsZWQgYmVjYXVzZSB2YXJpYWJsZSAlenUgaXMgJXMsIGV4cGVjdGVkIG51bWJlci5cbiIsIGxv
Y2FsLCBleGVjLT5yZWdpc3RlcnMoKVtsb2NhbF0uanNWYWx1ZSgpLmRlc2NyaXB0aW9uKCkpOwor
ICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgdmFyaWFibGUg
IiwgbG9jYWwsICIgaXMgIiwgZXhlYy0+cmVnaXN0ZXJzKClbbG9jYWxdLmpzVmFsdWUoKSwgIiwg
ZXhwZWN0ZWQgbnVtYmVyLlxuIik7CiAjZW5kaWYKICAgICAgICAgICAgICAgICByZXR1cm4gMDsK
ICAgICAgICAgICAgIH0KQEAgLTEyMSw5ICsxMTksNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnko
RXhlY1N0YXRlKiBleGVjLCBDCiAgICAgICAgIH0KICAgICAgICAgaWYgKCFlbnRyeS0+bV9leHBl
Y3RlZFZhbHVlcy5sb2NhbChsb2NhbCkudmFsaWRhdGUoZXhlYy0+cmVnaXN0ZXJzKClbbG9jYWxd
LmpzVmFsdWUoKSkpIHsKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgICAgICAgICAg
ZGF0YUxvZ0YoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgdmFyaWFibGUgJXp1IGlzICVzLCBleHBl
Y3RlZCAiLCBsb2NhbCwgZXhlYy0+cmVnaXN0ZXJzKClbbG9jYWxdLmpzVmFsdWUoKS5kZXNjcmlw
dGlvbigpKTsKLSAgICAgICAgICAgIGVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzLmxvY2FsKGxvY2Fs
KS5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7Ci0gICAgICAgICAgICBkYXRhTG9nRigiLlxuIik7Cisg
ICAgICAgICAgICBkYXRhTG9nKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIHZhcmlhYmxlICIsIGxv
Y2FsLCAiIGlzICIsIGV4ZWMtPnJlZ2lzdGVycygpW2xvY2FsXS5qc1ZhbHVlKCksICIsIGV4cGVj
dGVkICIsIGVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzLmxvY2FsKGxvY2FsKSwgIi5cbiIpOwogI2Vu
ZGlmCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVREaXNhc3NlbWJsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklURGlzYXNzZW1ibGVyLmNwcAkocmV2aXNpb24gMTM2OTg5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVREaXNhc3NlbWJsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04Niw2ICs4Niw3IEBAIHZvaWQgSklURGlzYXNzZW1ibGVyOjpyZXBvcnRUb1By
b2ZpbGVyKFAKIHZvaWQgSklURGlzYXNzZW1ibGVyOjpkdW1wSGVhZGVyKFByaW50U3RyZWFtJiBv
dXQsIExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCiB7CiAgICAgb3V0LnByaW50KCJHZW5lcmF0ZWQg
QmFzZWxpbmUgSklUIGNvZGUgZm9yICIsIENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fY29kZUJsb2Nr
LCBKSVRDb2RlOjpCYXNlbGluZUpJVCksICIsIGluc3RydWN0aW9uIGNvdW50ID0gIiwgbV9jb2Rl
QmxvY2stPmluc3RydWN0aW9uQ291bnQoKSwgIlxuIik7CisgICAgb3V0LnByaW50KCIgICBTb3Vy
Y2U6ICIsIG1fY29kZUJsb2NrLT5zb3VyY2VDb2RlT25PbmVMaW5lKCksICJcbiIpOwogICAgIG91
dC5wcmludCgiICAgQ29kZSBhdCBbIiwgUmF3UG9pbnRlcihsaW5rQnVmZmVyLmRlYnVnQWRkcmVz
cygpKSwgIiwgIiwgUmF3UG9pbnRlcihzdGF0aWNfY2FzdDxjaGFyKj4obGlua0J1ZmZlci5kZWJ1
Z0FkZHJlc3MoKSkgKyBsaW5rQnVmZmVyLmRlYnVnU2l6ZSgpKSwgIik6XG4iKTsKIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDEzNjk4OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xODIyLDEyICsxODIyLDE1IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGlt
aXplKQogCiAgICAgaWYgKCFjb2RlQmxvY2stPmNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRS
ZWFjaGVkKCkpIHsKICAgICAgICAgY29kZUJsb2NrLT51cGRhdGVBbGxQcmVkaWN0aW9ucygpOwor
I2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCisgICAgICAgIGRhdGFMb2coIkNob29zaW5nIG5v
dCB0byBvcHRpbWl6ZSAiLCAqY29kZUJsb2NrLCAiIHlldC5cbiIpOworI2VuZGlmCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKICAgICBpZiAoY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNl
bWVudCgpKSB7CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAgZGF0YUxvZ0Yo
IkNvbnNpZGVyaW5nIE9TUiAiLCAqY29kZUJsb2NrLCAiIC0+ICIsICpjb2RlQmxvY2stPnJlcGxh
Y2VtZW50KCksICIuXG4iKTsKKyAgICAgICAgZGF0YUxvZygiQ29uc2lkZXJpbmcgT1NSICIsICpj
b2RlQmxvY2ssICIgLT4gIiwgKmNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKSwgIi5cbiIpOwogI2Vu
ZGlmCiAgICAgICAgIC8vIElmIHdlIGhhdmUgYW4gb3B0aW1pemVkIHJlcGxhY2VtZW50LCB0aGVu
IGl0IG11c3QgYmUgdGhlIGNhc2UgdGhhdCB3ZSBlbnRlcmVkCiAgICAgICAgIC8vIGN0aV9vcHRp
bWl6ZSBmcm9tIGEgbG9vcC4gVGhhdCdzIGJlY2F1c2UgaXMgdGhlcmUncyBhbiBvcHRpbWl6ZWQg
cmVwbGFjZW1lbnQsCkBAIC0xODQ0LDcgKzE4NDcsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2
b2lkLCBvcHRpbWl6ZSkKICAgICAgICAgLy8gYWRkaXRpb25hbCBjaGVja2luZyBhbnl3YXksIHRv
IHJlZHVjZSB0aGUgYW1vdW50IG9mIHJlY29tcGlsYXRpb24gdGhyYXNoaW5nLgogICAgICAgICBp
ZiAoY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5zaG91bGRSZW9wdGltaXplRnJvbUxvb3BOb3co
KSkgewogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgICAgICAgICBkYXRhTG9nRigi
VHJpZ2dlcmluZyByZW9wdGltaXphdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiKCIsICpjb2RlQmxv
Y2stPnJlcGxhY2VtZW50KCksICIpIChpbiBsb29wKS5cbiIpOworICAgICAgICAgICAgZGF0YUxv
ZygiVHJpZ2dlcmluZyByZW9wdGltaXphdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiKCIsICpjb2Rl
QmxvY2stPnJlcGxhY2VtZW50KCksICIpIChpbiBsb29wKS5cbiIpOwogI2VuZGlmCiAgICAgICAg
ICAgICBjb2RlQmxvY2stPnJlb3B0aW1pemUoKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE4
NTIsMjMgKzE4NTUsMjcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemUpCiAg
ICAgfSBlbHNlIHsKICAgICAgICAgaWYgKCFjb2RlQmxvY2stPnNob3VsZE9wdGltaXplTm93KCkp
IHsKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgICAgICAgICAgZGF0YUxvZ0YoIkRl
bGF5aW5nIG9wdGltaXphdGlvbiBmb3IgIiwgKmNvZGVCbG9jaywgIiAoaW4gbG9vcCkgYmVjYXVz
ZSBvZiBpbnN1ZmZpY2llbnQgcHJvZmlsaW5nLlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKCJE
ZWxheWluZyBvcHRpbWl6YXRpb24gZm9yICIsICpjb2RlQmxvY2ssICIgKGluIGxvb3ApIGJlY2F1
c2Ugb2YgaW5zdWZmaWNpZW50IHByb2ZpbGluZy5cbiIpOwogI2VuZGlmCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCisjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikK
KyAgICAgICAgZGF0YUxvZygiVHJpZ2dlcmluZyBvcHRpbWl6ZWQgY29tcGlsYXRpb24gb2YgIiwg
KmNvZGVCbG9jaywgIlxuIik7CisjZW5kaWYKKyAgICAgICAgCiAgICAgICAgIEpTU2NvcGUqIHNj
b3BlID0gY2FsbEZyYW1lLT5zY29wZSgpOwogICAgICAgICBKU09iamVjdCogZXJyb3IgPSBjb2Rl
QmxvY2stPmNvbXBpbGVPcHRpbWl6ZWQoY2FsbEZyYW1lLCBzY29wZSwgYnl0ZWNvZGVJbmRleCk7
CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKICAgICAgICAgaWYgKGVycm9yKQotICAgICAg
ICAgICAgZGF0YUxvZ0YoIldBUk5JTkc6IG9wdGltaXplZCBjb21waWxhdGlvbiBmYWlsZWQuXG4i
KTsKKyAgICAgICAgICAgIGRhdGFMb2coIldBUk5JTkc6IG9wdGltaXplZCBjb21waWxhdGlvbiBm
YWlsZWQuXG4iKTsKICNlbHNlCiAgICAgICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CiAjZW5kaWYK
ICAgICAgICAgCiAgICAgICAgIGlmIChjb2RlQmxvY2stPnJlcGxhY2VtZW50KCkgPT0gY29kZUJs
b2NrKSB7CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAgICAgIGRhdGFMb2dG
KCJPcHRpbWl6aW5nICIsICpjb2RlQmxvY2ssICIgZmFpbGVkLlxuIik7CisgICAgICAgICAgICBk
YXRhTG9nKCJPcHRpbWl6aW5nICIsICpjb2RlQmxvY2ssICIgZmFpbGVkLlxuIik7CiAjZW5kaWYK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgQVNTRVJUKGNvZGVCbG9jay0+Z2V0SklUVHlwZSgp
ID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKQEAgLTE4ODcsNyArMTg5NCw3IEBAIERFRklORV9T
VFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGltaXplKQogICAgICAgICAgICAgICAgIFJhd1BvaW50ZXIo
KFNUVUJfUkVUVVJOX0FERFJFU1MpLnZhbHVlKCkpLCAiIC0+ICIsIFJhd1BvaW50ZXIoYWRkcmVz
cyksICIuXG4iKTsKICAgICAgICAgfQogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAg
ICAgIGRhdGFMb2dGKCJPcHRpbWl6aW5nICIsICpjb2RlQmxvY2ssICIgc3VjY2VlZGVkLCBwZXJm
b3JtaW5nIE9TUiBhZnRlciBhIGRlbGF5IG9mICIsIGNvZGVCbG9jay0+b3B0aW1pemF0aW9uRGVs
YXlDb3VudGVyKCksICIuXG4iKTsKKyAgICAgICAgZGF0YUxvZygiT3B0aW1pemluZyAiLCAqY29k
ZUJsb2NrLCAiIHN1Y2NlZWRlZCwgcGVyZm9ybWluZyBPU1IgYWZ0ZXIgYSBkZWxheSBvZiAiLCBj
b2RlQmxvY2stPm9wdGltaXphdGlvbkRlbGF5Q291bnRlcigpLCAiLlxuIik7CiAjZW5kaWYKIAog
ICAgICAgICBjb2RlQmxvY2stPm9wdGltaXplU29vbigpOwpAQCAtMTg5Niw3ICsxOTAzLDcgQEAg
REVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemUpCiAgICAgfQogICAgIAogI2lmIEVO
QUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgZGF0YUxvZ0YoIk9wdGltaXppbmcgIiwgKmNvZGVC
bG9jaywgIiBzdWNjZWVkZWQsIE9TUiBmYWlsZWQsIGFmdGVyIGEgZGVsYXkgb2YgIiwgY29kZUJs
b2NrLT5vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIoKSwgIi5cbiIpOworICAgIGRhdGFMb2coIk9w
dGltaXppbmcgIiwgKmNvZGVCbG9jaywgIiBzdWNjZWVkZWQsIE9TUiBmYWlsZWQsIGFmdGVyIGEg
ZGVsYXkgb2YgIiwgY29kZUJsb2NrLT5vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIoKSwgIi5cbiIp
OwogI2VuZGlmCiAKICAgICAvLyBDb3VudCB0aGUgT1NSIGZhaWx1cmUgYXMgYSBzcGVjdWxhdGlv
biBmYWlsdXJlLiBJZiB0aGlzIGhhcHBlbnMgYSBsb3QsIHRoZW4KQEAgLTE5MDQsNyArMTkxMSw3
IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGltaXplKQogICAgIG9wdGltaXplZENv
ZGVCbG9jay0+Y291bnRPU1JFeGl0KCk7CiAgICAgCiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09T
UikKLSAgICBkYXRhTG9nRigiRW5jb3VudGVyZWQgT1NSIGZhaWx1cmUgIiwgKmNvZGVCbG9jaywg
IiAtPiAiLCAqY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLCAiLlxuIik7CisgICAgZGF0YUxvZygi
RW5jb3VudGVyZWQgT1NSIGZhaWx1cmUgIiwgKmNvZGVCbG9jaywgIiAtPiAiLCAqY29kZUJsb2Nr
LT5yZXBsYWNlbWVudCgpLCAiLlxuIik7CiAjZW5kaWYKIAogICAgIC8vIFdlIGFyZSBhIGxvdCBt
b3JlIGNvbnNlcnZhdGl2ZSBhYm91dCB0cmlnZ2VyaW5nIHJlb3B0aW1pemF0aW9uIGFmdGVyIE9T
UiBmYWlsdXJlIHRoYW4KQEAgLTE5MTcsNyArMTkyNCw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9O
KHZvaWQsIG9wdGltaXplKQogICAgIC8vIHJlb3B0aW1pemF0aW9uIHRyaWdnZXIuCiAgICAgaWYg
KG9wdGltaXplZENvZGVCbG9jay0+c2hvdWxkUmVvcHRpbWl6ZU5vdygpKSB7CiAjaWYgRU5BQkxF
KEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAgZGF0YUxvZ0YoIlRyaWdnZXJpbmcgcmVvcHRpbWl6
YXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIiAtPiAiLCAqY29kZUJsb2NrLT5yZXBsYWNlbWVudCgp
LCAiIChhZnRlciBPU1IgZmFpbCkuXG4iKTsKKyAgICAgICAgZGF0YUxvZygiVHJpZ2dlcmluZyBy
ZW9wdGltaXphdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIC0+ICIsICpjb2RlQmxvY2stPnJlcGxh
Y2VtZW50KCksICIgKGFmdGVyIE9TUiBmYWlsKS5cbiIpOwogI2VuZGlmCiAgICAgICAgIGNvZGVC
bG9jay0+cmVvcHRpbWl6ZSgpOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDEzNjk4OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxNSw4ICszMTUsNyBAQCBlbnVtIEVudHJ5S2luZCB7IFByb2xvZ3VlLCBB
cml0eUNoZWNrIH07CiBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGVudHJ5T1NSKEV4ZWNTdGF0
ZSogZXhlYywgSW5zdHJ1Y3Rpb24qLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgY2hhciAq
bmFtZSwgRW50cnlLaW5kIGtpbmQpCiB7CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAg
ICBkYXRhTG9nRigiJXA6IEVudGVyZWQgJXMgd2l0aCBleGVjdXRlQ291bnRlciA9ICVzXG4iLCBj
b2RlQmxvY2ssIG5hbWUsCi0gICAgICAgICAgICBjb2RlQmxvY2stPmxsaW50RXhlY3V0ZUNvdW50
ZXIoKS5zdGF0dXMoKSk7CisgICAgZGF0YUxvZygqY29kZUJsb2NrLCAiOiBFbnRlcmVkICIsIG5h
bWUsICIgd2l0aCBleGVjdXRlQ291bnRlciA9ICIsIGNvZGVCbG9jay0+bGxpbnRFeGVjdXRlQ291
bnRlcigpLCAiXG4iKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKG5hbWUpOwogI2VuZGlmCkBA
IC0zNjQsOCArMzYzLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0wobG9vcF9vc3IpCiAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKICAgICAKICNpZiBFTkFCTEUo
SklUX1ZFUkJPU0VfT1NSKQotICAgIGRhdGFMb2dGKCIlcDogRW50ZXJlZCBsb29wX29zciB3aXRo
IGV4ZWN1dGVDb3VudGVyID0gJXNcbiIsIGNvZGVCbG9jaywKLSAgICAgICAgICAgIGNvZGVCbG9j
ay0+bGxpbnRFeGVjdXRlQ291bnRlcigpLnN0YXR1cygpKTsKKyAgICBkYXRhTG9nKCpjb2RlQmxv
Y2ssICI6IEVudGVyZWQgbG9vcF9vc3Igd2l0aCBleGVjdXRlQ291bnRlciA9ICIsIGNvZGVCbG9j
ay0+bGxpbnRFeGVjdXRlQ291bnRlcigpLCAiXG4iKTsKICNlbmRpZgogICAgIAogICAgIGlmICgh
c2hvdWxkSklUKGV4ZWMpKSB7CkBAIC0zOTUsOCArMzkzLDcgQEAgTExJTlRfU0xPV19QQVRIX0RF
Q0wocmVwbGFjZSkKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygp
OwogICAgIAogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgZGF0YUxvZ0YoIiVwOiBF
bnRlcmVkIHJlcGxhY2Ugd2l0aCBleGVjdXRlQ291bnRlciA9ICVzXG4iLCBjb2RlQmxvY2ssCi0g
ICAgICAgICAgICBjb2RlQmxvY2stPmxsaW50RXhlY3V0ZUNvdW50ZXIoKS5zdGF0dXMoKSk7Cisg
ICAgZGF0YUxvZygqY29kZUJsb2NrLCAiOiBFbnRlcmVkIHJlcGxhY2Ugd2l0aCBleGVjdXRlQ291
bnRlciA9ICIsIGNvZGVCbG9jay0+bGxpbnRFeGVjdXRlQ291bnRlcigpLCAiXG4iKTsKICNlbmRp
ZgogICAgIAogICAgIGlmIChzaG91bGRKSVQoZXhlYykpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcHJvZmlsZXIvUHJvZmlsZXJEYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyRGF0YWJhc2UuY3BwCShyZXZpc2lvbiAx
MzY5ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJEYXRhYmFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDI1ICs1Nyw4IEBAIEJ5dGVjb2RlcyogRGF0YWJh
c2U6OmVuc3VyZUJ5dGVjb2Rlc0ZvcigKICAgICBpZiAoaXRlciAhPSBtX2J5dGVjb2Rlc01hcC5l
bmQoKSkKICAgICAgICAgcmV0dXJuIGl0ZXItPnZhbHVlOwogICAgIAotICAgIFN0cmluZyBzb3Vy
Y2VDb2RlOwotICAgIAotICAgIGlmIChjb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25D
b2RlKSB7Ci0gICAgICAgIFNvdXJjZVByb3ZpZGVyKiBwcm92aWRlciA9IGNvZGVCbG9jay0+c291
cmNlKCk7Ci0gICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxG
dW5jdGlvbkV4ZWN1dGFibGUqPihjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKTsKLSAgICAg
ICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2VkID0gZXhlY3V0YWJsZS0+dW5s
aW5rZWRFeGVjdXRhYmxlKCk7Ci0gICAgICAgIHVuc2lnbmVkIHVubGlua2VkU3RhcnRPZmZzZXQg
PSB1bmxpbmtlZC0+c3RhcnRPZmZzZXQoKTsKLSAgICAgICAgdW5zaWduZWQgbGlua2VkU3RhcnRP
ZmZzZXQgPSBleGVjdXRhYmxlLT5zb3VyY2UoKS5zdGFydE9mZnNldCgpOwotICAgICAgICBpbnQg
ZGVsdGEgPSBsaW5rZWRTdGFydE9mZnNldCAtIHVubGlua2VkU3RhcnRPZmZzZXQ7Ci0gICAgICAg
IFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoImZ1bmN0aW9u
ICIpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChwcm92aWRlci0+Z2V0UmFuZ2UoCi0gICAgICAg
ICAgICBkZWx0YSArIHVubGlua2VkLT5mdW5jdGlvblN0YXJ0T2Zmc2V0KCksCi0gICAgICAgICAg
ICBkZWx0YSArIHVubGlua2VkLT5zdGFydE9mZnNldCgpICsgdW5saW5rZWQtPnNvdXJjZUxlbmd0
aCgpKSk7Ci0gICAgICAgIHNvdXJjZUNvZGUgPSBidWlsZGVyLnRvU3RyaW5nKCk7Ci0gICAgfSBl
bHNlCi0gICAgICAgIHNvdXJjZUNvZGUgPSBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5z
b3VyY2UoKS50b1N0cmluZygpOwotICAgIAotICAgIEJ5dGVjb2RlcyogcmVzdWx0ID0gYWRkQnl0
ZWNvZGVzKGNvZGVCbG9jay0+aGFzaCgpLCBzb3VyY2VDb2RlKTsKKyAgICBCeXRlY29kZXMqIHJl
c3VsdCA9IGFkZEJ5dGVjb2RlcygKKyAgICAgICAgY29kZUJsb2NrLT5oYXNoKCksIGNvZGVCbG9j
ay0+c291cmNlQ29kZUZvclRvb2xzKCkpOwogICAgIAogICAgIGZvciAodW5zaWduZWQgYnl0ZWNv
ZGVJbmRleCA9IDA7IGJ5dGVjb2RlSW5kZXggPCBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNp
emUoKTspIHsKICAgICAgICAgb3V0LnJlc2V0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAxMzY5ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTg5LDcgKzg5LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgdihpbnQzMiwgdGhyZXNob2xkRm9ySklUU29vbiwgMTAwKSBc
CiAgICAgXAogICAgIHYoaW50MzIsIHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJXYXJtVXAsIDEw
MDApIFwKLSAgICB2KGludDMyLCB0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCwg
NTAwMCkgXAorICAgIHYoaW50MzIsIHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVw
LCAxMDAwKSBcCiAgICAgdihpbnQzMiwgdGhyZXNob2xkRm9yT3B0aW1pemVTb29uLCAxMDAwKSBc
CiAgICAgXAogICAgIHYoaW50MzIsIGV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JMb29wLCAx
KSBcCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178397</attachid>
            <date>2012-12-08 23:05:34 -0800</date>
            <delta_ts>2012-12-09 12:16:49 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>math.patch</filename>
            <type>text/plain</type>
            <size>51565</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTM3MDU2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg3IEBA
CisyMDEyLTEyLTA4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SlNDIHNob3VsZCBzY2FsZSB0aGUgb3B0aW1pemF0aW9uIHRocmVzaG9sZCBmb3IgYSBjb2RlIGJs
b2NrIGFjY29yZGluZyB0byB0aGUgY29zdCBvZiBjb21waWxpbmcgaXQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNDQwNgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlJ3ZlIGxvbmcga25vd24gdGhhdCB3
ZSB3YW50IHRvIHNjYWxlIHRoZSBleGVjdXRpb24gY291bnQgdGhyZXNob2xkIG5lZWRlZCBmb3Ig
dGhlIERGRworICAgICAgICB0byBraWNrIGluIHRvIHNjYWxlIGFjY29yZGluZyB0byBzb21lIGVz
dGltYXRlIG9mIHRoZSBjb3N0IG9mIGNvbXBpbGluZyB0aGF0IGNvZGUgYmxvY2suCisgICAgICAg
IFRoaXMgaW5zdGl0dXRlcyBhIHJlbGF0aW9uc2hpcCBsaWtlIHRoaXM6CisgICAgICAgIAorICAg
ICAgICB0aHJlc2hvbGQgPSB0aHJlc2hvbGRTZXR0aW5nICogKGEgKiBzcXJ0KGluc3RydWN0aW9u
Q291bnQgKyBiKSArIGFicyhjICogaW5zdHJ1Y3Rpb25Db3VudCkgKyBkCisgICAgICAgIAorICAg
ICAgICBXaGVyZSBhLCBiLCBjLCBkIGFyZSBjb2VmZmljaWVudHMgZGVyaXZlZCBmcm9tIGZpdHRp
bmcgdGhlIGFib3ZlIGV4cHJlc3Npb24gdG8gdmFyaW91cworICAgICAgICBkYXRhIHBvaW50cywg
d2hpY2ggSSBjaG9zZSBiYXNlZCBvbiBsb29raW5nIGF0IG9uZSBiZW5jaG1hcmsgKDNkLWN1YmUp
IGFuZCBmcm9tIG15CisgICAgICAgIG93biBpbnR1aXRpb25zLgorICAgICAgICAKKyAgICAgICAg
TWFraW5nIHRoaXMgd29yayB3ZWxsIGFsc28gcmVxdWlyZWQgY2hhbmdpbmcgdGhlIHRocmVzaG9s
ZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwCisgICAgICAgIGZyb20gNTAwMCB0byAxMDAwLgor
ICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBhID4xJSBzcGVlZC11cCBvbiBTdW5TcGlkZXIsIGEg
PjMlIHNwZWVkLXVwIG9uIFY4U3BpZGVyLCB+MSUgc3BlZWQtdXAgb24gVjh2NywKKyAgICAgICAg
bmV1dHJhbCBvbiBPY3RhbmUsIGFuZCBuZXV0cmFsIG9uIEtyYWtlbi4KKyAgICAgICAgCisgICAg
ICAgIEkgYWxzbyBvdXQtb2YtbGluZWQgYSBidW5jaCBvZiBtZXRob2RzIHJlbGF0ZWQgdG8gdGhl
c2UgaGV1cmlzdGljcywgYmVjYXVzZSBJIGNvdWxkbid0CisgICAgICAgIHN0YW5kIGhhdmluZyB0
aGVtIGRlZmluZWQgaW4gdGhlIGhlYWRlciBhbnltb3JlLiBJIGFsc28gbWFkZSBpbXByb3ZlbWVu
dHMgdG8gZGVidWdnaW5nCisgICAgICAgIGNvZGUgYmVjYXVzZSBJIG5lZWRlZCBpdCBmb3IgdHVu
aW5nIHRoaXMgY2hhbmdlLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICog
R05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGFyZ2V0LnByaToKKyAg
ICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OnNvdXJjZUNvZGVGb3JUb29scyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c291cmNlQ29k
ZU9uT25lTGluZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OnJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
Ojpjb3VudFJlb3B0aW1pemF0aW9uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvcHRpbWl6
YXRpb25UaHJlc2hvbGRTY2FsaW5nRmFjdG9yKToKKyAgICAgICAgKEpTQzo6Y2xpcFRocmVzaG9s
ZCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRl
cldhcm1VcCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y291bnRlclZhbHVlRm9yT3B0aW1p
emVBZnRlckxvbmdXYXJtVXApOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvdW50ZXJWYWx1
ZUZvck9wdGltaXplU29vbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2hlY2tJZk9wdGlt
aXphdGlvblRocmVzaG9sZFJlYWNoZWQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9wdGlt
aXplTmV4dEludm9jYXRpb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmRvbnRPcHRpbWl6
ZUFueXRpbWVTb29uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvcHRpbWl6ZUFmdGVyV2Fy
bVVwKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCk6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6b3B0aW1pemVTb29uKToKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjphZGp1c3RlZEV4aXRDb3VudFRocmVzaG9sZCk6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6ZXhpdENvdW50VGhyZXNob2xkRm9yUmVvcHRpbWl6YXRpb24pOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmV4aXRDb3VudFRocmVzaG9sZEZvclJlb3B0aW1pemF0aW9uRnJvbUxv
b3ApOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNob3VsZFJlb3B0aW1pemVOb3cpOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OnNob3VsZFJlb3B0aW1pemVGcm9tTG9vcE5vdyk6CisgICAg
ICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgICogYnl0ZWNvZGUvRXhlY3V0aW9u
Q291bnRlci5jcHA6CisgICAgICAgIChKU0M6OkV4ZWN1dGlvbkNvdW50ZXI6Omhhc0Nyb3NzZWRU
aHJlc2hvbGQpOgorICAgICAgICAqIGJ5dGVjb2RlL1JlZHVjZVdoaXRlc3BhY2UuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6cmVkdWNlV2hpdGVzcGFjZSk6CisgICAgICAgICogYnl0ZWNvZGUv
UmVkdWNlV2hpdGVzcGFjZS5oOiBBZGRlZC4KKyAgICAgICAgKiBkZmcvREZHQ2FwYWJpbGl0aWVz
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjptaWdodENvbXBpbGVFdmFsKToKKyAgICAgICAgKEpT
Qzo6REZHOjptaWdodENvbXBpbGVQcm9ncmFtKToKKyAgICAgICAgKEpTQzo6REZHOjptaWdodENv
bXBpbGVGdW5jdGlvbkZvckNhbGwpOgorICAgICAgICAoSlNDOjpERkc6Om1pZ2h0Q29tcGlsZUZ1
bmN0aW9uRm9yQ29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6REZHOjptaWdodElubGluZUZ1bmN0
aW9uRm9yQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6bWlnaHRJbmxpbmVGdW5jdGlvbkZvckNv
bnN0cnVjdCk6CisgICAgICAgICogZGZnL0RGR0NhcGFiaWxpdGllcy5oOgorICAgICAgICAqIGRm
Zy9ERkdEaXNhc3NlbWJsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkRpc2Fzc2VtYmxlcjo6
ZHVtcEhlYWRlcik6CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5LmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpwcmVwYXJlT1NSRW50cnkpOgorICAgICAgICAqIGppdC9KSVREaXNhc3NlbWJsZXIu
Y3BwOgorICAgICAgICAoSlNDOjpKSVREaXNhc3NlbWJsZXI6OmR1bXBIZWFkZXIpOgorICAgICAg
ICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAgIChKU0M6OkRFRklORV9TVFVCX0ZVTkNUSU9O
KToKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxM
SW50OjplbnRyeU9TUik6CisgICAgICAgIChKU0M6OkxMSW50OjpMTElOVF9TTE9XX1BBVEhfREVD
TCk6CisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZXJEYXRhYmFzZS5jcHA6CisgICAgICAgIChK
U0M6OlByb2ZpbGVyOjpEYXRhYmFzZTo6ZW5zdXJlQnl0ZWNvZGVzRm9yKToKKyAgICAgICAgKiBy
dW50aW1lL09wdGlvbnMuaDoKKwogMjAxMi0xMi0wNyAgSm9uYXRoYW4gTGl1ICA8bmV0MTQ3QGdt
YWlsLmNvbT4KIAogICAgICAgICBBZGQgbWlzc2luZyBmb3J3YXJkIGRlY2xhcmF0aW9uIGZvciBK
U0M6OkFycmF5QWxsb2NhdGlvblByb2ZpbGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
TWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VM
aXN0cy50eHQJKHJldmlzaW9uIDEzNjk4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFr
ZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsNyBAQCBzZXQoSmF2YVNjcmlw
dENvcmVfU09VUkNFUwogICAgIGJ5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwCiAg
ICAgYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCiAgICAgYnl0ZWNvZGUvUHV0QnlJZFN0YXR1
cy5jcHAKKyAgICBieXRlY29kZS9SZWR1Y2VXaGl0ZXNwYWNlLmNwcAogICAgIGJ5dGVjb2RlL1Jl
c29sdmVHbG9iYWxTdGF0dXMuY3BwCiAgICAgYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmNwcAogICAg
IGJ5dGVjb2RlL1NwZWNpYWxQb2ludGVyLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDEzNjk4OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNiArMTMz
LDggQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlJZFN0YXR1cy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0S2luZC5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVkdWNlV2hpdGVz
cGFjZS5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWR1Y2VXaGl0ZXNw
YWNlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXNvbHZlR2xvYmFsU3Rh
dHVzLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Jlc29sdmVHbG9iYWxT
dGF0dXMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Jlc29sdmVPcGVyYXRp
b24uaCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkocmV2aXNpb24gMTM2OTg5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTY3
LDYgKzY3LDcgQEAgU09VUkNFUyArPSBcCiAgICAgYnl0ZWNvZGUvT3Bjb2RlLmNwcCBcCiAgICAg
Ynl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAgXAogICAgIGJ5dGVjb2RlL1B1dEJ5
SWRTdGF0dXMuY3BwIFwKKyAgICBieXRlY29kZS9SZWR1Y2VXaGl0ZXNwYWNlLmNwcCBcCiAgICAg
Ynl0ZWNvZGUvUmVzb2x2ZUdsb2JhbFN0YXR1cy5jcHAgXAogICAgIGJ5dGVjb2RlL1NhbXBsaW5n
VG9vbC5jcHAgXAogICAgIGJ5dGVjb2RlL1NwZWNpYWxQb2ludGVyLmNwcCBcCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJv
agkocmV2aXNpb24gMTM2OTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTE4MTAsNiArMTgxMCwxNCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxl
CisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxieXRlY29kZVxSZWR1Y2VXaGl0ZXNwYWNlLmNwcCIK
KwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cYnl0
ZWNvZGVcUmVkdWNlV2hpdGVzcGFjZS5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJ
CQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxieXRlY29kZVxTcGVjaWFsUG9pbnRlci5jcHAiCiAJCQkJ
PgogCQkJPC9GaWxlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDEzNjk4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNzAsNiArMjcwLDggQEAKIAkJ
MEZGNDI3NjUxNTkxQTFDRTAwNENCOUZGIC8qIERGR0Rpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGNDI3NjIxNTkxQTFDOTAwNENC
OUZGIC8qIERGR0Rpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGRjQyNzcxMTU5Mjc1RDUwMDRDQjlGRiAvKiBSZXNvbHZlR2xv
YmFsU3RhdHVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRjQyNzZFMTU5Mjc1RDIwMDRDQjlGRiAvKiBSZXNvbHZlR2xvYmFsU3RhdHVzLmNwcCAq
LzsgfTsKIAkJMEZGNDI3NzIxNTkyNzVEODAwNENCOUZGIC8qIFJlc29sdmVHbG9iYWxTdGF0dXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjQyNzZG
MTU5Mjc1RDIwMDRDQjlGRiAvKiBSZXNvbHZlR2xvYmFsU3RhdHVzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZGNjBBQzIxNjc0MEY4MzAwMDI5
Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRjYwQUMwMTY3NDBGODEwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNw
YWNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
MEZGNjBBQzMxNjc0MEY4ODAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGNjBBQkYxNjc0MEY4MTAw
MDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2UuY3BwICovOyB9OwogCQkwRkY3MTY4QzE1QTNCMjM1
MDA4RjVEQUEgLyogUHJvcGVydHlPZmZzZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjcxNjhBMTVBM0IyMzEwMDhGNURBQSAvKiBQcm9wZXJ0eU9m
ZnNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGRjcyOUE1MTY2QUQzNTEwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2RlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY3Mjk5MzE2NkFEMzQ3MDAw
RjVCQTMgLyogUHJvZmlsZXJCeXRlY29kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGRjcyOUFEMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxl
ckJ5dGVjb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRjcyOTkyMTY2QUQzNDcwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2RlLmNwcCAqLzsg
fTsKQEAgLTEwOTUsNiArMTA5Nyw4IEBACiAJCTBGRjQyNzYyMTU5MUExQzkwMDRDQjlGRiAvKiBE
RkdEaXNhc3NlbWJsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRGlz
YXNzZW1ibGVyLmg7IHBhdGggPSBkZmcvREZHRGlzYXNzZW1ibGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGRjQyNzZFMTU5Mjc1RDIwMDRDQjlGRiAvKiBSZXNvbHZlR2xvYmFs
U3RhdHVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlc29sdmVH
bG9iYWxTdGF0dXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkY0Mjc2RjE1
OTI3NUQyMDA0Q0I5RkYgLyogUmVzb2x2ZUdsb2JhbFN0YXR1cy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZXNvbHZlR2xvYmFsU3RhdHVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRjYwQUJGMTY3NDBGODEwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNwYWNl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlZHVjZVdoaXRlc3Bh
Y2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkY2MEFDMDE2NzQwRjgxMDAw
Mjk3NzkgLyogUmVkdWNlV2hpdGVzcGFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZWR1Y2VXaGl0ZXNwYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
RjcxNjhBMTVBM0IyMzEwMDhGNURBQSAvKiBQcm9wZXJ0eU9mZnNldC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQcm9wZXJ0eU9mZnNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkY3Mjk5MjE2NkFEMzQ3MDAwRjVCQTMgLyogUHJvZmlsZXJCeXRlY29kZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBQcm9maWxlckJ5dGVjb2Rl
LmNwcDsgcGF0aCA9IHByb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkY3Mjk5MzE2NkFEMzQ3MDAwRjVCQTMgLyogUHJvZmlsZXJCeXRl
Y29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQcm9maWxlckJ5dGVjb2Rl
Lmg7IHBhdGggPSBwcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0yNjI3LDExICsyNjMxLDExIEBACiAJCQkJMEY5MzMyOTMxNENBN0RDMTAw
ODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmNwcCAqLywKIAkJCQkwRjkzMzI5NDE0Q0E3REMxMDA4
NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuaCAqLywKIAkJCQkwRjBCODNCODE0QkNGOTVCMDA4ODVC
NEYgLyogQ2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQuaCAqLywKKwkJCQk5NjlBMDc5
MDBFRDFEM0FFMDBGMUY2ODEgLyogQ29kZUJsb2NrLmNwcCAqLywKKwkJCQk5NjlBMDc5MTBFRDFE
M0FFMDBGMUY2ODEgLyogQ29kZUJsb2NrLmggKi8sCiAJCQkJMEY4Rjk0M0QxNjY3NjMyRDAwRDYx
OTcxIC8qIENvZGVCbG9ja0hhc2guY3BwICovLAogCQkJCTBGOEY5NDNFMTY2NzYzMkQwMEQ2MTk3
MSAvKiBDb2RlQmxvY2tIYXNoLmggKi8sCiAJCQkJMEY5NkVCQjExNjY3NkVGNDAwOEJBREUzIC8q
IENvZGVCbG9ja1dpdGhKSVRUeXBlLmggKi8sCi0JCQkJOTY5QTA3OTAwRUQxRDNBRTAwRjFGNjgx
IC8qIENvZGVCbG9jay5jcHAgKi8sCi0JCQkJOTY5QTA3OTEwRUQxRDNBRTAwRjFGNjgxIC8qIENv
ZGVCbG9jay5oICovLAogCQkJCTBGOEY5NDQ1MTY2NzY0RUUwMEQ2MTk3MSAvKiBDb2RlT3JpZ2lu
LmNwcCAqLywKIAkJCQkwRkJEN0U2NzE0NDc5OThGMDA0ODEzMTUgLyogQ29kZU9yaWdpbi5oICov
LAogCQkJCTBGOEY5NDNGMTY2NzYzMkQwMEQ2MTk3MSAvKiBDb2RlVHlwZS5jcHAgKi8sCkBAIC0y
NjY0LDYgKzI2NjgsOCBAQAogCQkJCTBGOTMzMjk5MTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlk
U3RhdHVzLmNwcCAqLywKIAkJCQkwRjkzMzI5QTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0
YXR1cy5oICovLAogCQkJCTBGOUZDOEMxMTRFMUI1RkIwMEQ1MkFFMCAvKiBQdXRLaW5kLmggKi8s
CisJCQkJMEZGNjBBQkYxNjc0MEY4MTAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2UuY3BwICov
LAorCQkJCTBGRjYwQUMwMTY3NDBGODEwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNwYWNlLmggKi8s
CiAJCQkJMEZGNDI3NkUxNTkyNzVEMjAwNENCOUZGIC8qIFJlc29sdmVHbG9iYWxTdGF0dXMuY3Bw
ICovLAogCQkJCTBGRjQyNzZGMTU5Mjc1RDIwMDRDQjlGRiAvKiBSZXNvbHZlR2xvYmFsU3RhdHVz
LmggKi8sCiAJCQkJQTdBRkMxNzcxNUY3RUZFMzAwNDhGNTdCIC8qIFJlc29sdmVPcGVyYXRpb24u
aCAqLywKQEAgLTI2NzksNiArMjY4NSw4IEBACiAJCQkJMEY3NjZEMzcxNUFFNEExQTAwOEYzNjNF
IC8qIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaCAqLywKIAkJCQlCQ0NGMEQwQjBF
RjBCOEE1MDA0MTNDOEYgLyogU3RydWN0dXJlU3R1YkluZm8uY3BwICovLAogCQkJCUJDQ0YwRDA3
MEVGMEFBQjkwMDQxM0M4RiAvKiBTdHJ1Y3R1cmVTdHViSW5mby5oICovLAorCQkJCUE3OUU3ODFF
MTVFRUNCQTgwMDQ3Qzg1NSAvKiBVbmxpbmtlZENvZGVCbG9jay5jcHAgKi8sCisJCQkJQTc5RTc4
MUYxNUVFQ0JBODAwNDdDODU1IC8qIFVubGlua2VkQ29kZUJsb2NrLmggKi8sCiAJCQkJMEY5NjNC
MzYxM0ZDNkZERTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5oICovLAogCQkJCTBGNDI2QTQ1MTQ2
MENCQUIwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi8sCiAJCQkJMEY0MjZBNDYxNDYwQ0JB
QjAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oICovLApAQCAtMjY4OCw4ICsyNjk2LDYgQEAK
IAkJCQkwRjkzMzI5OTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5jcHAgKi8sCiAJ
CQkJMEY5MzMyOUExNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCAqLywKIAkJCQkw
RjkzMzI5QjE0Q0E3REMxMDA4NUYzQzYgLyogU3RydWN0dXJlU2V0LmggKi8sCi0JCQkJQTc5RTc4
MUUxNUVFQ0JBODAwNDdDODU1IC8qIFVubGlua2VkQ29kZUJsb2NrLmNwcCAqLywKLQkJCQlBNzlF
NzgxRjE1RUVDQkE4MDA0N0M4NTUgLyogVW5saW5rZWRDb2RlQmxvY2suaCAqLywKIAkJCSk7CiAJ
CQlwYXRoID0gYnl0ZWNvZGU7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMzEzNyw2
ICszMTQzLDcgQEAKIAkJCQkwRkY3MjlCRTE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJFeGVj
dXRpb25Db3VudGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCRjE2NkFEMzYwMDAwRjVC
QTMgLyogUHJvZmlsZXJPcmlnaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUMwMTY2QUQz
NjAwMDBGNUJBMyAvKiBQcm9maWxlck9yaWdpblN0YWNrLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RkY2MEFDMjE2NzQwRjgzMDAwMjk3NzkgLyogUmVkdWNlV2hpdGVzcGFjZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJ
CX07CkBAIC0zNzMzLDYgKzM3NDAsNyBAQAogCQkJCTBGRjcyOUIyMTY2QUQzNUMwMDBGNUJBMyAv
KiBQcm9maWxlckRhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUIzMTY2QUQz
NUMwMDBGNUJBMyAvKiBQcm9maWxlck9yaWdpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3
MjlCNDE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJPcmlnaW5TdGFjay5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRkY2MEFDMzE2NzQwRjg4MDAwMjk3NzkgLyogUmVkdWNlV2hpdGVzcGFjZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxMzY5ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsNyBA
QAogI2luY2x1ZGUgIkpTTmFtZVNjb3BlLmgiCiAjaW5jbHVkZSAiSlNWYWx1ZS5oIgogI2luY2x1
ZGUgIkxvd0xldmVsSW50ZXJwcmV0ZXIuaCIKKyNpbmNsdWRlICJSZWR1Y2VXaGl0ZXNwYWNlLmgi
CiAjaW5jbHVkZSAiUmVwYXRjaEJ1ZmZlci5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5l
cy5oIgogI2luY2x1ZGUgPHN0ZGlvLmg+CkBAIC02OCw2ICs2OSwzMCBAQCBDb2RlQmxvY2tIYXNo
IENvZGVCbG9jazo6aGFzaCgpIGNvbnN0CiAgICAgcmV0dXJuIENvZGVCbG9ja0hhc2gob3duZXJF
eGVjdXRhYmxlKCktPnNvdXJjZSgpLCBzcGVjaWFsaXphdGlvbktpbmQoKSk7CiB9CiAKK1N0cmlu
ZyBDb2RlQmxvY2s6OnNvdXJjZUNvZGVGb3JUb29scygpIGNvbnN0Cit7CisgICAgaWYgKGNvZGVU
eXBlKCkgIT0gRnVuY3Rpb25Db2RlKQorICAgICAgICByZXR1cm4gb3duZXJFeGVjdXRhYmxlKCkt
PnNvdXJjZSgpLnRvU3RyaW5nKCk7CisgICAgCisgICAgU291cmNlUHJvdmlkZXIqIHByb3ZpZGVy
ID0gc291cmNlKCk7CisgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0
PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKTsKKyAgICBVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZSogdW5saW5rZWQgPSBleGVjdXRhYmxlLT51bmxpbmtlZEV4ZWN1dGFi
bGUoKTsKKyAgICB1bnNpZ25lZCB1bmxpbmtlZFN0YXJ0T2Zmc2V0ID0gdW5saW5rZWQtPnN0YXJ0
T2Zmc2V0KCk7CisgICAgdW5zaWduZWQgbGlua2VkU3RhcnRPZmZzZXQgPSBleGVjdXRhYmxlLT5z
b3VyY2UoKS5zdGFydE9mZnNldCgpOworICAgIGludCBkZWx0YSA9IGxpbmtlZFN0YXJ0T2Zmc2V0
IC0gdW5saW5rZWRTdGFydE9mZnNldDsKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAg
YnVpbGRlci5hcHBlbmQoImZ1bmN0aW9uICIpOworICAgIGJ1aWxkZXIuYXBwZW5kKHByb3ZpZGVy
LT5nZXRSYW5nZSgKKyAgICAgICAgZGVsdGEgKyB1bmxpbmtlZC0+ZnVuY3Rpb25TdGFydE9mZnNl
dCgpLAorICAgICAgICBkZWx0YSArIHVubGlua2VkLT5zdGFydE9mZnNldCgpICsgdW5saW5rZWQt
PnNvdXJjZUxlbmd0aCgpKSk7CisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKK30KKwor
U3RyaW5nIENvZGVCbG9jazo6c291cmNlQ29kZU9uT25lTGluZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIHJlZHVjZVdoaXRlc3BhY2Uoc291cmNlQ29kZUZvclRvb2xzKCkpOworfQorCiB2b2lkIENv
ZGVCbG9jazo6ZHVtcEFzc3VtaW5nSklUVHlwZShQcmludFN0cmVhbSYgb3V0LCBKSVRDb2RlOjpK
SVRUeXBlIGppdFR5cGUpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50KCIjIiwgaGFzaCgpLCAiOlsi
LCBSYXdQb2ludGVyKHRoaXMpLCAiLT4iLCBSYXdQb2ludGVyKG93bmVyRXhlY3V0YWJsZSgpKSwg
IiwgIiwgaml0VHlwZSwgY29kZVR5cGUoKSk7CkBAIC01MjcsNyArNTUyLDcgQEAgdm9pZCBDb2Rl
QmxvY2s6OmR1bXBCeXRlY29kZShQcmludFN0cmVhbQogICAgIH0KICAgICBpZiAobmVlZHNGdWxs
U2NvcGVDaGFpbigpICYmIGNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKQogICAgICAgICBvdXQu
cHJpbnRmKCI7IGFjdGl2YXRpb24gaW4gciVkIiwgYWN0aXZhdGlvblJlZ2lzdGVyKCkpOwotICAg
IG91dC5wcmludGYoIlxuXG4iKTsKKyAgICBvdXQucHJpbnQoIlxuXG5Tb3VyY2U6ICIsIHNvdXJj
ZUNvZGVPbk9uZUxpbmUoKSwgIlxuXG4iKTsKIAogICAgIGNvbnN0IEluc3RydWN0aW9uKiBiZWdp
biA9IGluc3RydWN0aW9ucygpLmJlZ2luKCk7CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGVuZCA9
IGluc3RydWN0aW9ucygpLmVuZCgpOwpAQCAtMTY5MCw5ICsxNzE1LDYgQEAgQ29kZUJsb2NrOjpD
b2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgIEFTU0VSVChtX3NvdXJjZSk7CiAgICAg
c2V0TnVtUGFyYW1ldGVycyh1bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKTsKIAot
ICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKLSAgICBqaXRBZnRlcldhcm1VcCgpOwotCiAjaWYg
RFVNUF9DT0RFX0JMT0NLX1NUQVRJU1RJQ1MKICAgICBsaXZlQ29kZUJsb2NrU2V0LmFkZCh0aGlz
KTsKICNlbmRpZgpAQCAtMTkxMSw2ICsxOTMzLDEyIEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNj
cmlwdEV4ZWN1dGFibGUqIG8KICAgICB9CiAgICAgbV9pbnN0cnVjdGlvbnMgPSBXVEY6OlJlZkNv
dW50ZWRBcnJheTxJbnN0cnVjdGlvbj4oaW5zdHJ1Y3Rpb25zKTsKIAorICAgIC8vIFNldCBvcHRp
bWl6YXRpb24gdGhyZXNob2xkcyBvbmx5IGFmdGVyIG1faW5zdHJ1Y3Rpb25zIGlzIGluaXRpYWxp
emVkLCBzaW5jZSB0aGVzZQorICAgIC8vIHJlbHkgb24gdGhlIGluc3RydWN0aW9uIGNvdW50IChh
bmQgYXJlIGluIHRoZW9yeSBwZXJtaXR0ZWQgdG8gYWxzbyBpbnNwZWN0IHRoZQorICAgIC8vIGlu
c3RydWN0aW9uIHN0cmVhbSB0byBtb3JlIGFjY3VyYXRlIGFzc2VzcyB0aGUgY29zdCBvZiB0aWVy
LXVwKS4KKyAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7CisgICAgaml0QWZ0ZXJXYXJtVXAoKTsK
KwogICAgIGlmIChPcHRpb25zOjpkdW1wR2VuZXJhdGVkQnl0ZWNvZGVzKCkpCiAgICAgICAgIGR1
bXBCeXRlY29kZSgpOwogICAgIG1fZ2xvYmFsRGF0YS0+ZmluaXNoZWRDb21waWxpbmcodGhpcyk7
CkBAIC0yOTExLDYgKzI5MzksMTk2IEBAIGJvb2wgRnVuY3Rpb25Db2RlQmxvY2s6OmppdENvbXBp
bGVJbXBsKEUKIH0KICNlbmRpZgogCit1bnNpZ25lZCBDb2RlQmxvY2s6OnJlb3B0aW1pemF0aW9u
UmV0cnlDb3VudGVyKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9yZW9wdGltaXphdGlvblJldHJ5
Q291bnRlciA8PSBPcHRpb25zOjpyZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCgpKTsKKyAg
ICByZXR1cm4gbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcjsKK30KKwordm9pZCBDb2RlQmxv
Y2s6OmNvdW50UmVvcHRpbWl6YXRpb24oKQoreworICAgIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNv
dW50ZXIrKzsKKyAgICBpZiAobV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlciA+IE9wdGlvbnM6
OnJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyTWF4KCkpCisgICAgICAgIG1fcmVvcHRpbWl6YXRp
b25SZXRyeUNvdW50ZXIgPSBPcHRpb25zOjpyZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCgp
OworfQorCitkb3VibGUgQ29kZUJsb2NrOjpvcHRpbWl6YXRpb25UaHJlc2hvbGRTY2FsaW5nRmFj
dG9yKCkKK3sKKyAgICAvLyBUaGlzIGV4cHJlc3Npb24gYXJpc2VzIGZyb20gZG9pbmcgYSBsZWFz
dC1zcXVhcmVzIGZpdCBvZgorICAgIC8vCisgICAgLy8gRlt4X10gPTogYSAqIFNxcnRbeCArIGJd
ICsgQWJzW2MgKiB4XSArIGQKKyAgICAvLworICAgIC8vIGFnYWluc3QgdGhlIGRhdGEgcG9pbnRz
OgorICAgIC8vCisgICAgLy8gICAgeCAgICAgICBGW3hfXQorICAgIC8vICAgIDEwICAgICAgIDAu
OSAgICAgICAgICAoc21hbGxlc3QgcmVhc29uYWJsZSBjb2RlIGJsb2NrKQorICAgIC8vICAgMjAw
ICAgICAgIDEuMCAgICAgICAgICAodHlwaWNhbCBzbWFsbC1pc2ggY29kZSBibG9jaykKKyAgICAv
LyAgIDMyMCAgICAgICAxLjIgICAgICAgICAgKHNvbWV0aGluZyBJIHNhdyBpbiAzZC1jdWJlIHRo
YXQgSSB3YW50ZWQgdG8gb3B0aW1pemUpCisgICAgLy8gIDEyNjggICAgICAgNS4wICAgICAgICAg
IChzb21ldGhpbmcgSSBzYXcgaW4gM2QtY3ViZSB0aGF0IEkgZGlkbid0IHdhbnQgdG8gb3B0aW1p
emUpCisgICAgLy8gIDQwMDAgICAgICAgNS41ICAgICAgICAgIChyYW5kb20gbGFyZ2Ugc2l6ZSwg
dXNlZCB0byBjYXVzZSB0aGUgZnVuY3Rpb24gdG8gY29udmVyZ2UgdG8gYSBzaGFsbG93IGN1cnZl
IG9mIHNvbWUgc29ydCkKKyAgICAvLyAxMDAwMCAgICAgICA2LjAgICAgICAgICAgKHNpbWlsYXIg
dG8gYWJvdmUpCisgICAgLy8KKyAgICAvLyBJIGFjaGlldmUgdGhlIG1pbmltaXphdGlvbiB1c2lu
ZyB0aGUgZm9sbG93aW5nIE1hdGhlbWF0aWNhIGNvZGU6CisgICAgLy8KKyAgICAvLyBNeUZ1bmN0
aW9uVGVtcGxhdGVbeF8sIGFfLCBiXywgY18sIGRfXSA6PSBhKlNxcnRbeCArIGJdICsgQWJzW2Mq
eF0gKyBkCisgICAgLy8KKyAgICAvLyBzYW1wbGVzID0ge3sxMCwgMC45fSwgezIwMCwgMX0sIHsz
MjAsIDEuMn0sIHsxMjY4LCA1fSwgezQwMDAsIDUuNX0sIHsxMDAwMCwgNn19CisgICAgLy8KKyAg
ICAvLyBzb2x1dGlvbiA9IAorICAgIC8vICAgICBNaW5pbWl6ZVtQbHVzIEBAICgoTXlGdW5jdGlv
blRlbXBsYXRlWyNbWzFdXSwgYSwgYiwgYywgZF0gLSAjW1syXV0pXjIgJiAvQCBzYW1wbGVzKSwK
KyAgICAvLyAgICAgICAgIHthLCBiLCBjLCBkfV1bWzJdXQorICAgIC8vCisgICAgLy8gQW5kIHRo
ZSBjb2RlIGJlbG93ICh0byBpbml0aWFsaXplIGEsIGIsIGMsIGQpIGlzIGdlbmVyYXRlZCBieToK
KyAgICAvLworICAgIC8vIFByaW50WyJjb25zdCBkb3VibGUgIiA8PiBUb1N0cmluZ1sjW1sxXV1d
IDw+ICIgPSAiIDw+CisgICAgLy8gICAgIElmWyNbWzJdXSA8IDAuMDAwMDEsICIwLjAiLCBUb1N0
cmluZ1sjW1syXV1dXSA8PiAiOyJdICYgL0Agc29sdXRpb24KKyAgICAvLworICAgIC8vIFdlJ3Zl
IGxvbmcga25vd24gdGhlIGZvbGxvd2luZyB0byBiZSB0cnVlOgorICAgIC8vIC0gU21hbGwgY29k
ZSBibG9ja3MgYXJlIGNoZWFwIHRvIG9wdGltaXplIGFuZCBzbyB3ZSBzaG91bGQgZG8gaXQgc29v
bmVyIHJhdGhlcgorICAgIC8vICAgdGhhbiBsYXRlci4KKyAgICAvLyAtIExhcmdlIGNvZGUgYmxv
Y2tzIGFyZSBleHBlbnNpdmUgdG8gb3B0aW1pemUgYW5kIHNvIHdlIHNob3VsZCBwb3N0cG9uZSBk
b2luZyBzbywKKyAgICAvLyAgIGFuZCBzb21ldGltZXMgaGF2ZSBhIGxhcmdlIGVub3VnaCB0aHJl
c2hvbGQgdGhhdCB3ZSBuZXZlciBvcHRpbWl6ZSB0aGVtLgorICAgIC8vIC0gVGhlIGRpZmZlcmVu
Y2UgaW4gY29zdCBpcyBub3QgdG90YWxseSBsaW5lYXIgYmVjYXVzZSAoYSkganVzdCBpbnZva2lu
ZyB0aGUKKyAgICAvLyAgIERGRyBpbmN1cnMgc29tZSBiYXNlIGNvc3QgYW5kIChiKSBmb3IgbGFy
Z2UgY29kZSBibG9ja3MgdGhlcmUgaXMgZW5vdWdoIHNsb3AKKyAgICAvLyAgIGluIHRoZSBjb3Jy
ZWxhdGlvbiBiZXR3ZWVuIGluc3RydWN0aW9uIGNvdW50IGFuZCB0aGUgYWN0dWFsIGNvbXBpbGF0
aW9uIGNvc3QKKyAgICAvLyAgIHRoYXQgZm9yIHRob3NlIGxhcmdlIGJsb2NrcywgdGhlIGluc3Ry
dWN0aW9uIGNvdW50IHNob3VsZCBub3QgaGF2ZSBhIHN0cm9uZworICAgIC8vICAgaW5mbHVlbmNl
IG9uIG91ciB0aHJlc2hvbGQuCisgICAgLy8KKyAgICAvLyBJIGtuZXcgdGhlIGdvYWxzIGJ1dCBJ
IGRpZG4ndCBrbm93IGhvdyB0byBhY2hpZXZlIHRoZW07IHNvIEkgcGlja2VkIGFuIGludGVyZXN0
aW5nCisgICAgLy8gZXhhbXBsZSB3aGVyZSB0aGUgaGV1cmlzdGljcyB3ZXJlIHJpZ2h0IChjb2Rl
IGJsb2NrIGluIDNkLWN1YmUgd2l0aCBpbnN0cnVjdGlvbgorICAgIC8vIGNvdW50IDMyMCwgd2hp
Y2ggZ290IGNvbXBpbGVkIGVhcmx5IGFzIGl0IHNob3VsZCBoYXZlIGJlZW4pIGFuZCBvbmUgd2hl
cmUgdGhleSB3ZXJlCisgICAgLy8gdG90YWxseSB3cm9uZyAoY29kZSBibG9jayBpbiAzZC1jdWJl
IHdpdGggaW5zdHJ1Y3Rpb24gY291bnQgMTI2OCwgd2hpY2ggd2FzIGV4cGVuc2l2ZQorICAgIC8v
IHRvIGNvbXBpbGUgYW5kIGRpZG4ndCBydW4gb2Z0ZW4gZW5vdWdoIHRvIHdhcnJhbnQgY29tcGls
YXRpb24gaW4gbXkgb3BpbmlvbiksIGFuZAorICAgIC8vIHRoZW4gdGhyZXcgaW4gYWRkaXRpb25h
bCBkYXRhIHBvaW50cyB0aGF0IHJlcHJlc2VudGVkIG15IG93biBndWVzcyBvZiB3aGF0IG91cgor
ICAgIC8vIGhldXJpc3RpY3Mgc2hvdWxkIGRvIGZvciBzb21lIHJvdW5kLW51bWJlcmVkIGV4YW1w
bGVzLgorICAgIC8vCisgICAgLy8gVGhlIGV4cHJlc3Npb24gdG8gd2hpY2ggSSBkZWNpZGVkIHRv
IGZpdCB0aGUgZGF0YSBhcm9zZSBiZWNhdXNlIEkgc3RhcnRlZCB3aXRoIGFuCisgICAgLy8gYWZm
aW5lIGZ1bmN0aW9uLCBhbmQgdGhlbiBkaWQgdHdvIHRoaW5nczogcHV0IHRoZSBsaW5lYXIgcGFy
dCBpbiBhbiBBYnMgdG8gZW5zdXJlCisgICAgLy8gdGhhdCB0aGUgZml0IGRpZG4ndCBlbmQgdXAg
Y2hvb3NpbmcgYSBuZWdhdGl2ZSB2YWx1ZSBvZiBjICh3aGljaCB3b3VsZCByZXN1bHQgaW4KKyAg
ICAvLyB0aGUgZnVuY3Rpb24gdHVybmluZyBvdmVyIGFuZCBnb2luZyBuZWdhdGl2ZSBmb3IgbGFy
Z2UgeCkgYW5kIEkgdGhyZXcgaW4gYSBTcXJ0CisgICAgLy8gdGVybSBiZWNhdXNlIFNxcnQgcmVw
cmVzZW50cyBteSBpbnR1dGlvbiB0aGF0IHRoZSBmdW5jdGlvbiBzaG91bGQgYmUgbW9yZSBzZW5z
aXRpdmUKKyAgICAvLyB0byBzbWFsbCBjaGFuZ2VzIGluIHNtYWxsIHZhbHVlcyBvZiB4LCBidXQg
bGVzcyBzZW5zaXRpdmUgd2hlbiB4IGdldHMgbGFyZ2UuCisgICAgCisgICAgLy8gTm90ZSB0aGF0
IHRoZSBjdXJyZW50IGZpdCBlc3NlbnRpYWxseSBlbGltaW5hdGVzIHRoZSBsaW5lYXIgcG9ydGlv
biBvZiB0aGUKKyAgICAvLyBleHByZXNzaW9uIChjID09IDAuMCkuCisgICAgY29uc3QgZG91Ymxl
IGEgPSAwLjA2MTUwNDsKKyAgICBjb25zdCBkb3VibGUgYiA9IDEuMDI0MDY7CisgICAgY29uc3Qg
ZG91YmxlIGMgPSAwLjA7CisgICAgY29uc3QgZG91YmxlIGQgPSAwLjgyNTkxNDsKKyAgICAKKyAg
ICBkb3VibGUgaW5zdHJ1Y3Rpb25Db3VudCA9IHRoaXMtPmluc3RydWN0aW9uQ291bnQoKTsKKyAg
ICAKKyAgICBBU1NFUlQoaW5zdHJ1Y3Rpb25Db3VudCk7IC8vIE1ha2Ugc3VyZSB0aGlzIGlzIGNh
bGxlZCBvbmx5IGFmdGVyIHdlIGhhdmUgYW4gaW5zdHJ1Y3Rpb24gc3RyZWFtOyBvdGhlcndpc2Ug
aXQnbGwganVzdCByZXR1cm4gdGhlIHZhbHVlIG9mIGQsIHdoaWNoIG1ha2VzIG5vIHNlbnNlLgor
ICAgIAorICAgIGRvdWJsZSByZXN1bHQgPSBkICsgYSAqIHNxcnQoaW5zdHJ1Y3Rpb25Db3VudCAr
IGIpICsgYyAqIGluc3RydWN0aW9uQ291bnQ7CisjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikK
KyAgICBkYXRhTG9nKCp0aGlzLCAiOiBpbnN0cnVjdGlvbiBjb3VudCBpcyAiLCBpbnN0cnVjdGlv
bkNvdW50LCAiLCBzY2FsaW5nIGV4ZWN1dGlvbiBjb3VudGVyIGJ5ICIsIHJlc3VsdCwgIlxuIik7
CisjZW5kaWYKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50MzJfdCBjbGlwVGhy
ZXNob2xkKGRvdWJsZSB0aHJlc2hvbGQpCit7CisgICAgaWYgKHRocmVzaG9sZCA8IDEuMCkKKyAg
ICAgICAgcmV0dXJuIDE7CisgICAgCisgICAgaWYgKHRocmVzaG9sZCA+IHN0YXRpY19jYXN0PGRv
dWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpKQorICAgICAgICByZXR1
cm4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCk7CisgICAgCisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGludDMyX3Q+KHRocmVzaG9sZCk7Cit9CisKK2ludDMyX3QgQ29kZUJsb2Nr
Ojpjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkKK3sKKyAgICByZXR1cm4gY2xp
cFRocmVzaG9sZCgKKyAgICAgICAgT3B0aW9uczo6dGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldh
cm1VcCgpICoKKyAgICAgICAgb3B0aW1pemF0aW9uVGhyZXNob2xkU2NhbGluZ0ZhY3RvcigpICoK
KyAgICAgICAgKDEgPDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKSkpOworfQorCitpbnQz
Ml90IENvZGVCbG9jazo6Y291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXAoKQor
eworICAgIHJldHVybiBjbGlwVGhyZXNob2xkKAorICAgICAgICBPcHRpb25zOjp0aHJlc2hvbGRG
b3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgpICoKKyAgICAgICAgb3B0aW1pemF0aW9uVGhyZXNo
b2xkU2NhbGluZ0ZhY3RvcigpICoKKyAgICAgICAgKDEgPDwgcmVvcHRpbWl6YXRpb25SZXRyeUNv
dW50ZXIoKSkpOworfQorCitpbnQzMl90IENvZGVCbG9jazo6Y291bnRlclZhbHVlRm9yT3B0aW1p
emVTb29uKCkKK3sKKyAgICByZXR1cm4gY2xpcFRocmVzaG9sZCgKKyAgICAgICAgT3B0aW9uczo6
dGhyZXNob2xkRm9yT3B0aW1pemVTb29uKCkgKgorICAgICAgICBvcHRpbWl6YXRpb25UaHJlc2hv
bGRTY2FsaW5nRmFjdG9yKCkgKgorICAgICAgICAoMSA8PCByZW9wdGltaXphdGlvblJldHJ5Q291
bnRlcigpKSk7Cit9CisKK2Jvb2wgQ29kZUJsb2NrOjpjaGVja0lmT3B0aW1pemF0aW9uVGhyZXNo
b2xkUmVhY2hlZCgpCit7CisgICAgcmV0dXJuIG1faml0RXhlY3V0ZUNvdW50ZXIuY2hlY2tJZlRo
cmVzaG9sZENyb3NzZWRBbmRTZXQodGhpcyk7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpvcHRpbWl6
ZU5leHRJbnZvY2F0aW9uKCkKK3sKKyAgICBtX2ppdEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVz
aG9sZCgwLCB0aGlzKTsKK30KKwordm9pZCBDb2RlQmxvY2s6OmRvbnRPcHRpbWl6ZUFueXRpbWVT
b29uKCkKK3sKKyAgICBtX2ppdEV4ZWN1dGVDb3VudGVyLmRlZmVySW5kZWZpbml0ZWx5KCk7Cit9
CisKK3ZvaWQgQ29kZUJsb2NrOjpvcHRpbWl6ZUFmdGVyV2FybVVwKCkKK3sKKyAgICBtX2ppdEV4
ZWN1dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZChjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVy
V2FybVVwKCksIHRoaXMpOworfQorCit2b2lkIENvZGVCbG9jazo6b3B0aW1pemVBZnRlckxvbmdX
YXJtVXAoKQoreworICAgIG1faml0RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKGNvdW50
ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCksIHRoaXMpOworfQorCit2b2lkIENv
ZGVCbG9jazo6b3B0aW1pemVTb29uKCkKK3sKKyAgICBtX2ppdEV4ZWN1dGVDb3VudGVyLnNldE5l
d1RocmVzaG9sZChjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZVNvb24oKSwgdGhpcyk7Cit9CisKKyNp
ZiBFTkFCTEUoSklUKQordWludDMyX3QgQ29kZUJsb2NrOjphZGp1c3RlZEV4aXRDb3VudFRocmVz
aG9sZCh1aW50MzJfdCBkZXNpcmVkVGhyZXNob2xkKQoreworICAgIEFTU0VSVChnZXRKSVRUeXBl
KCkgPT0gSklUQ29kZTo6REZHSklUKTsKKyAgICAvLyBDb21wdXRlIHRoaXMgdGhlIGxhbWUgd2F5
IHNvIHdlIGRvbid0IHNhdHVyYXRlLiBUaGlzIGlzIGNhbGxlZCBpbmZyZXF1ZW50bHkKKyAgICAv
LyBlbm91Z2ggdGhhdCB0aGlzIGxvb3Agd29uJ3QgaHVydCB1cy4KKyAgICB1bnNpZ25lZCByZXN1
bHQgPSBkZXNpcmVkVGhyZXNob2xkOworICAgIGZvciAodW5zaWduZWQgbiA9IGJhc2VsaW5lVmVy
c2lvbigpLT5yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpOyBuLS07KSB7CisgICAgICAgIHVu
c2lnbmVkIG5ld1Jlc3VsdCA9IHJlc3VsdCA8PCAxOworICAgICAgICBpZiAobmV3UmVzdWx0IDwg
cmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+
OjptYXgoKTsKKyAgICAgICAgcmVzdWx0ID0gbmV3UmVzdWx0OworICAgIH0KKyAgICByZXR1cm4g
cmVzdWx0OworfQorCit1aW50MzJfdCBDb2RlQmxvY2s6OmV4aXRDb3VudFRocmVzaG9sZEZvclJl
b3B0aW1pemF0aW9uKCkKK3sKKyAgICByZXR1cm4gYWRqdXN0ZWRFeGl0Q291bnRUaHJlc2hvbGQo
T3B0aW9uczo6b3NyRXhpdENvdW50Rm9yUmVvcHRpbWl6YXRpb24oKSk7Cit9CisKK3VpbnQzMl90
IENvZGVCbG9jazo6ZXhpdENvdW50VGhyZXNob2xkRm9yUmVvcHRpbWl6YXRpb25Gcm9tTG9vcCgp
Cit7CisgICAgcmV0dXJuIGFkanVzdGVkRXhpdENvdW50VGhyZXNob2xkKE9wdGlvbnM6Om9zckV4
aXRDb3VudEZvclJlb3B0aW1pemF0aW9uRnJvbUxvb3AoKSk7Cit9CisKK2Jvb2wgQ29kZUJsb2Nr
OjpzaG91bGRSZW9wdGltaXplTm93KCkKK3sKKyAgICByZXR1cm4gb3NyRXhpdENvdW50ZXIoKSA+
PSBleGl0Q291bnRUaHJlc2hvbGRGb3JSZW9wdGltaXphdGlvbigpOworfQorCitib29sIENvZGVC
bG9jazo6c2hvdWxkUmVvcHRpbWl6ZUZyb21Mb29wTm93KCkKK3sKKyAgICByZXR1cm4gb3NyRXhp
dENvdW50ZXIoKSA+PSBleGl0Q291bnRUaHJlc2hvbGRGb3JSZW9wdGltaXphdGlvbkZyb21Mb29w
KCk7Cit9CisjZW5kaWYKKwogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKIEFycmF5UHJvZmls
ZSogQ29kZUJsb2NrOjpnZXRBcnJheVByb2ZpbGUodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCiB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZp
c2lvbiAxMzY5ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMiw2ICsxMzIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrKCkgY29uc3QgeyByZXR1
cm4gbV91bmxpbmtlZENvZGUuZ2V0KCk7IH0KIAogICAgICAgICBDb2RlQmxvY2tIYXNoIGhhc2go
KSBjb25zdDsKKyAgICAgICAgU3RyaW5nIHNvdXJjZUNvZGVGb3JUb29scygpIGNvbnN0OyAvLyBO
b3QgcXVpdGUgdGhlIGFjdHVhbCBzb3VyY2Ugd2UgcGFyc2VkOyB0aGlzIHdpbGwgZG8gdGhpbmdz
IGxpa2UgcHJlZml4IHRoZSBzb3VyY2UgZm9yIGEgZnVuY3Rpb24gd2l0aCBhIHJlaWZpZWQgc2ln
bmF0dXJlLgorICAgICAgICBTdHJpbmcgc291cmNlQ29kZU9uT25lTGluZSgpIGNvbnN0OyAvLyBB
cyBzb3VyY2VDb2RlRm9yVG9vbHMoKSwgYnV0IHJlcGxhY2VzIGFsbCB3aGl0ZXNwYWNlIHJ1bnMg
d2l0aCBhIHNpbmdsZSBzcGFjZS4KICAgICAgICAgdm9pZCBkdW1wQXNzdW1pbmdKSVRUeXBlKFBy
aW50U3RyZWFtJiwgSklUQ29kZTo6SklUVHlwZSkgY29uc3Q7CiAgICAgICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0OwogICAgICAgICAKQEAgLTEwMDksMjggKzEwMTEsMTIgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIFdoZW4gd2Ugb2JzZXJ2ZSBhIGxvdCBvZiBzcGVjdWxh
dGlvbiBmYWlsdXJlcywgd2UgdHJpZ2dlciBhCiAgICAgICAgIC8vIHJlb3B0aW1pemF0aW9uLiBC
dXQgZWFjaCB0aW1lLCB3ZSBpbmNyZWFzZSB0aGUgb3B0aW1pemF0aW9uIHRyaWdnZXIKICAgICAg
ICAgLy8gdG8gYXZvaWQgdGhyYXNoaW5nLgotICAgICAgICB1bnNpZ25lZCByZW9wdGltaXphdGlv
blJldHJ5Q291bnRlcigpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChtX3Jl
b3B0aW1pemF0aW9uUmV0cnlDb3VudGVyIDw9IE9wdGlvbnM6OnJlb3B0aW1pemF0aW9uUmV0cnlD
b3VudGVyTWF4KCkpOwotICAgICAgICAgICAgcmV0dXJuIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNv
dW50ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHZvaWQgY291bnRSZW9wdGltaXph
dGlvbigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50
ZXIrKzsKLSAgICAgICAgICAgIGlmIChtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyID4gT3B0
aW9uczo6cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgoKSkKLSAgICAgICAgICAgICAgICBt
X3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyID0gT3B0aW9uczo6cmVvcHRpbWl6YXRpb25SZXRy
eUNvdW50ZXJNYXgoKTsKLSAgICAgICAgfQorICAgICAgICB1bnNpZ25lZCByZW9wdGltaXphdGlv
blJldHJ5Q291bnRlcigpIGNvbnN0OworICAgICAgICB2b2lkIGNvdW50UmVvcHRpbWl6YXRpb24o
KTsKICAgICAgICAgCi0gICAgICAgIGludDMyX3QgY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRl
cldhcm1VcCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBPcHRpb25zOjp0aHJlc2hv
bGRGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkgPDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIo
KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaW50MzJfdCBjb3VudGVyVmFsdWVGb3JP
cHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBP
cHRpb25zOjp0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgpIDw8IHJlb3B0aW1p
emF0aW9uUmV0cnlDb3VudGVyKCk7Ci0gICAgICAgIH0KKyAgICAgICAgaW50MzJfdCBjb3VudGVy
VmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCk7CisgICAgICAgIGludDMyX3QgY291bnRlclZh
bHVlRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXAoKTsKKyAgICAgICAgaW50MzJfdCBjb3VudGVy
VmFsdWVGb3JPcHRpbWl6ZVNvb24oKTsKICAgICAgICAgCiAgICAgICAgIGludDMyX3QqIGFkZHJl
c3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkKICAgICAgICAgewpAQCAtMTA0OCwyOCArMTAzNCwxOSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIG9wdGltaXphdGlvbiB0
aHJlc2hvbGQgaGFzIGJlZW4gcmVhY2hlZCwgYW5kIGlmIG5vdCwKICAgICAgICAgLy8gYWRqdXN0
IHRoZSBoZXVyaXN0aWNzIGFjY29yZGluZ2x5LiBSZXR1cm5zIHRydWUgaWYgdGhlIHRocmVzaG9s
ZCBoYXMKICAgICAgICAgLy8gYmVlbiByZWFjaGVkLgotICAgICAgICBib29sIGNoZWNrSWZPcHRp
bWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IG1faml0RXhlY3V0ZUNvdW50ZXIuY2hlY2tJZlRocmVzaG9sZENyb3NzZWRBbmRTZXQodGhpcyk7
Ci0gICAgICAgIH0KKyAgICAgICAgYm9vbCBjaGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVh
Y2hlZCgpOwogICAgICAgICAKICAgICAgICAgLy8gQ2FsbCB0aGlzIHRvIGZvcmNlIHRoZSBuZXh0
IG9wdGltaXphdGlvbiB0cmlnZ2VyIHRvIGZpcmUuIFRoaXMgaXMKICAgICAgICAgLy8gcmFyZWx5
IHdpc2UsIHNpbmNlIG9wdGltaXphdGlvbiB0cmlnZ2VycyBhcmUgdHlwaWNhbGx5IG1vcmUKICAg
ICAgICAgLy8gZXhwZW5zaXZlIHRoYW4gZXhlY3V0aW5nIGJhc2VsaW5lIGNvZGUuCi0gICAgICAg
IHZvaWQgb3B0aW1pemVOZXh0SW52b2NhdGlvbigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1f
aml0RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKDAsIHRoaXMpOwotICAgICAgICB9Cisg
ICAgICAgIHZvaWQgb3B0aW1pemVOZXh0SW52b2NhdGlvbigpOwogICAgICAgICAKICAgICAgICAg
Ly8gQ2FsbCB0aGlzIHRvIHByZXZlbnQgb3B0aW1pemF0aW9uIGZyb20gaGFwcGVuaW5nIGFnYWlu
LiBOb3RlIHRoYXQKICAgICAgICAgLy8gb3B0aW1pemF0aW9uIHdpbGwgc3RpbGwgaGFwcGVuIGFm
dGVyIHJvdWdobHkgMl4yOSBpbnZvY2F0aW9ucywKICAgICAgICAgLy8gc28gdGhpcyBpcyByZWFs
bHkgbWVhbnQgdG8gZGVsYXkgdGhhdCBhcyBtdWNoIGFzIHBvc3NpYmxlLiBUaGlzCiAgICAgICAg
IC8vIGlzIGNhbGxlZCBpZiBvcHRpbWl6YXRpb24gZmFpbGVkLCBhbmQgd2UgZXhwZWN0IGl0IHRv
IGZhaWwgaW4KICAgICAgICAgLy8gdGhlIGZ1dHVyZSBhcyB3ZWxsLgotICAgICAgICB2b2lkIGRv
bnRPcHRpbWl6ZUFueXRpbWVTb29uKCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9qaXRFeGVj
dXRlQ291bnRlci5kZWZlckluZGVmaW5pdGVseSgpOwotICAgICAgICB9CisgICAgICAgIHZvaWQg
ZG9udE9wdGltaXplQW55dGltZVNvb24oKTsKICAgICAgICAgCiAgICAgICAgIC8vIENhbGwgdGhp
cyB0byByZWluaXRpYWxpemUgdGhlIGNvdW50ZXIgdG8gaXRzIHN0YXJ0aW5nIHN0YXRlLAogICAg
ICAgICAvLyBmb3JjaW5nIGEgd2FybS11cCB0byBoYXBwZW4gYmVmb3JlIHRoZSBuZXh0IG9wdGlt
aXphdGlvbiB0cmlnZ2VyCkBAIC0xMDc3LDE3ICsxMDU0LDExIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAvLyBtYWtlcyBzZW5zZSB0byBjYWxsIHRoaXMgaWYgYW4gT1NSIGV4aXQgb2NjdXJy
ZWQuIE5vdGUgdGhhdAogICAgICAgICAvLyBPU1IgZXhpdCBjb2RlIGlzIGNvZGUgZ2VuZXJhdGVk
LCBzbyB0aGUgdmFsdWUgb2YgdGhlIGV4ZWN1dGUKICAgICAgICAgLy8gY291bnRlciB0aGF0IHRo
aXMgY29ycmVzcG9uZHMgdG8gaXMgYWxzbyBhdmFpbGFibGUgZGlyZWN0bHkuCi0gICAgICAgIHZv
aWQgb3B0aW1pemVBZnRlcldhcm1VcCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1faml0RXhl
Y3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJX
YXJtVXAoKSwgdGhpcyk7Ci0gICAgICAgIH0KKyAgICAgICAgdm9pZCBvcHRpbWl6ZUFmdGVyV2Fy
bVVwKCk7CiAgICAgICAgIAogICAgICAgICAvLyBDYWxsIHRoaXMgdG8gZm9yY2UgYW4gb3B0aW1p
emF0aW9uIHRyaWdnZXIgdG8gZmlyZSBvbmx5IGFmdGVyCiAgICAgICAgIC8vIGEgbG90IG9mIHdh
cm0tdXAuCi0gICAgICAgIHZvaWQgb3B0aW1pemVBZnRlckxvbmdXYXJtVXAoKQotICAgICAgICB7
Ci0gICAgICAgICAgICBtX2ppdEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZChjb3VudGVy
VmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgpLCB0aGlzKTsKLSAgICAgICAgfQorICAg
ICAgICB2b2lkIG9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCk7CiAgICAgICAgIAogICAgICAgICAv
LyBDYWxsIHRoaXMgdG8gY2F1c2UgYW4gb3B0aW1pemF0aW9uIHRyaWdnZXIgdG8gZmlyZSBzb29u
LCBidXQKICAgICAgICAgLy8gbm90IG5lY2Vzc2FyaWx5IHRoZSBuZXh0IG9uZS4gVGhpcyBtYWtl
cyBzZW5zZSBpZiBvcHRpbWl6YXRpb24KQEAgLTExMDcsMTAgKzEwNzgsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgLy8gZWFjaCByZXR1cm4sIGFzIHRoYXQgd291bGQgYmUgc3VwZXJmbHVv
dXMuIEl0IG9ubHkgbWFrZXMgc2Vuc2UKICAgICAgICAgLy8gdG8gdHJpZ2dlciBvcHRpbWl6YXRp
b24gaWYgb25lIG9mIHRob3NlIGZ1bmN0aW9ucyBiZWNvbWVzIGhvdAogICAgICAgICAvLyBpbiB0
aGUgYmFzZWxpbmUgY29kZS4KLSAgICAgICAgdm9pZCBvcHRpbWl6ZVNvb24oKQotICAgICAgICB7
Ci0gICAgICAgICAgICBtX2ppdEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZChPcHRpb25z
Ojp0aHJlc2hvbGRGb3JPcHRpbWl6ZVNvb24oKSA8PCByZW9wdGltaXphdGlvblJldHJ5Q291bnRl
cigpLCB0aGlzKTsKLSAgICAgICAgfQorICAgICAgICB2b2lkIG9wdGltaXplU29vbigpOwogICAg
ICAgICAKICAgICAgICAgdWludDMyX3Qgb3NyRXhpdENvdW50ZXIoKSBjb25zdCB7IHJldHVybiBt
X29zckV4aXRDb3VudGVyOyB9CiAgICAgICAgIApAQCAtMTEyMSw0MCArMTA4OSwxMSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk9TUkV4aXRDb3Vu
dGVyKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9vc3JFeGl0Q291bnRl
cik7IH0KIAogI2lmIEVOQUJMRShKSVQpCi0gICAgICAgIHVpbnQzMl90IGFkanVzdGVkRXhpdENv
dW50VGhyZXNob2xkKHVpbnQzMl90IGRlc2lyZWRUaHJlc2hvbGQpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIEFTU0VSVChnZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKTsKLSAgICAgICAg
ICAgIC8vIENvbXB1dGUgdGhpcyB0aGUgbGFtZSB3YXkgc28gd2UgZG9uJ3Qgc2F0dXJhdGUuIFRo
aXMgaXMgY2FsbGVkIGluZnJlcXVlbnRseQotICAgICAgICAgICAgLy8gZW5vdWdoIHRoYXQgdGhp
cyBsb29wIHdvbid0IGh1cnQgdXMuCi0gICAgICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBkZXNp
cmVkVGhyZXNob2xkOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBuID0gYmFzZWxpbmVWZXJz
aW9uKCktPnJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCk7IG4tLTspIHsKLSAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBuZXdSZXN1bHQgPSByZXN1bHQgPDwgMTsKLSAgICAgICAgICAgICAgICBp
ZiAobmV3UmVzdWx0IDwgcmVzdWx0KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpu
dW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpOwotICAgICAgICAgICAgICAgIHJlc3VsdCA9
IG5ld1Jlc3VsdDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHVpbnQzMl90IGV4aXRDb3VudFRocmVzaG9sZEZv
clJlb3B0aW1pemF0aW9uKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkanVzdGVk
RXhpdENvdW50VGhyZXNob2xkKE9wdGlvbnM6Om9zckV4aXRDb3VudEZvclJlb3B0aW1pemF0aW9u
KCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB1aW50MzJfdCBleGl0Q291bnRUaHJl
c2hvbGRGb3JSZW9wdGltaXphdGlvbkZyb21Mb29wKCkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGFkanVzdGVkRXhpdENvdW50VGhyZXNob2xkKE9wdGlvbnM6Om9zckV4aXRDb3VudEZv
clJlb3B0aW1pemF0aW9uRnJvbUxvb3AoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIHNo
b3VsZFJlb3B0aW1pemVOb3coKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gb3NyRXhp
dENvdW50ZXIoKSA+PSBleGl0Q291bnRUaHJlc2hvbGRGb3JSZW9wdGltaXphdGlvbigpOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBib29sIHNob3VsZFJlb3B0aW1pemVGcm9tTG9vcE5v
dygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBvc3JFeGl0Q291bnRlcigpID49IGV4
aXRDb3VudFRocmVzaG9sZEZvclJlb3B0aW1pemF0aW9uRnJvbUxvb3AoKTsKLSAgICAgICAgfQor
ICAgICAgICB1aW50MzJfdCBhZGp1c3RlZEV4aXRDb3VudFRocmVzaG9sZCh1aW50MzJfdCBkZXNp
cmVkVGhyZXNob2xkKTsKKyAgICAgICAgdWludDMyX3QgZXhpdENvdW50VGhyZXNob2xkRm9yUmVv
cHRpbWl6YXRpb24oKTsKKyAgICAgICAgdWludDMyX3QgZXhpdENvdW50VGhyZXNob2xkRm9yUmVv
cHRpbWl6YXRpb25Gcm9tTG9vcCgpOworICAgICAgICBib29sIHNob3VsZFJlb3B0aW1pemVOb3co
KTsKKyAgICAgICAgYm9vbCBzaG91bGRSZW9wdGltaXplRnJvbUxvb3BOb3coKTsKICNlbmRpZgog
CiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQpAQCAtMTE5Miw2ICsxMTMxLDggQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgREZHQ29kZUJs
b2NrczsKKyAgICAgICAgCisgICAgICAgIGRvdWJsZSBvcHRpbWl6YXRpb25UaHJlc2hvbGRTY2Fs
aW5nRmFjdG9yKCk7CiAKICNpZiBFTkFCTEUoSklUKQogICAgICAgICBDbG9zdXJlQ2FsbFN0dWJS
b3V0aW5lKiBmaW5kQ2xvc3VyZUNhbGxGb3JSZXR1cm5QQyhSZXR1cm5BZGRyZXNzUHRyKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291
bnRlci5jcHAJKHJldmlzaW9uIDEzNjk4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9FeGVjdXRpb25Db3VudGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDcgKzExMyw4
IEBAIGJvb2wgRXhlY3V0aW9uQ291bnRlcjo6aGFzQ3Jvc3NlZFRocmVzaG8KICAgICBkb3VibGUg
bW9kaWZpZWRUaHJlc2hvbGQgPSBhcHBseU1lbW9yeVVzYWdlSGV1cmlzdGljcyhtX2FjdGl2ZVRo
cmVzaG9sZCwgY29kZUJsb2NrKTsKICAgICAKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91Ymxl
PihtX3RvdGFsQ291bnQpICsgbV9jb3VudGVyID49Ci0gICAgICAgICBtb2RpZmllZFRocmVzaG9s
ZCAtIHN0YXRpY19jYXN0PGRvdWJsZT4obV9hY3RpdmVUaHJlc2hvbGQpIC8gMjsKKyAgICAgICAg
bW9kaWZpZWRUaHJlc2hvbGQgLSBzdGF0aWNfY2FzdDxkb3VibGU+KAorICAgICAgICAgICAgc3Rk
OjptaW4obV9hY3RpdmVUaHJlc2hvbGQsIE9wdGlvbnM6Om1heGltdW1FeGVjdXRpb25Db3VudHNC
ZXR3ZWVuQ2hlY2twb2ludHMoKSkpIC8gMjsKIH0KIAogYm9vbCBFeGVjdXRpb25Db3VudGVyOjpz
ZXRUaHJlc2hvbGQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUmVkdWNlV2hpdGVzcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlZHVjZVdoaXRlc3BhY2UuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlZHVjZVdoaXRlc3BhY2UuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZWR1
Y2VXaGl0ZXNwYWNlLmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitTdHJp
bmcgcmVkdWNlV2hpdGVzcGFjZShjb25zdCBTdHJpbmcmIGlucHV0KQoreworICAgIFN0cmluZ0J1
aWxkZXIgYnVpbGRlcjsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5wdXQu
bGVuZ3RoKCk7KSB7CisgICAgICAgIGlmIChpc0FTQ0lJU3BhY2UoaW5wdXRbaV0pKSB7CisgICAg
ICAgICAgICB3aGlsZSAoaSA8IGlucHV0Lmxlbmd0aCgpICYmIGlzQVNDSUlTcGFjZShpbnB1dFtp
XSkpCisgICAgICAgICAgICAgICAgKytpOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAn
KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKGlucHV0W2ldKTsKKyAgICAgICAgKytpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gYnVp
bGRlci50b1N0cmluZygpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWR1Y2VXaGl0ZXNwYWNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlZHVjZVdoaXRlc3BhY2UuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWR1Y2VXaGl0ZXNwYWNl
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBSZWR1Y2VXaGl0ZXNwYWNlX2gKKyNkZWZp
bmUgUmVkdWNlV2hpdGVzcGFjZV9oCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
KworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFJlcGxhY2UgYWxsIHdoaXRlc3BhY2UgcnVucyB3aXRo
IGEgc2luZ2xlIHNwYWNlLgorU3RyaW5nIHJlZHVjZVdoaXRlc3BhY2UoY29uc3QgU3RyaW5nJik7
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gUmVkdWNlV2hpdGVzcGFjZV9oCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCShy
ZXZpc2lvbiAxMzY5ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxp
dGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDMzIEBACiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKK2Jvb2wgbWlnaHRDb21w
aWxlRXZhbChDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gY29kZUJsb2NrLT5p
bnN0cnVjdGlvbkNvdW50KCkgPD0gT3B0aW9uczo6bWF4aW11bU9wdGltaXphdGlvbkNhbmRpZGF0
ZUluc3RydWN0aW9uQ291bnQoKTsKK30KK2Jvb2wgbWlnaHRDb21waWxlUHJvZ3JhbShDb2RlQmxv
Y2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50
KCkgPD0gT3B0aW9uczo6bWF4aW11bU9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291
bnQoKTsKK30KK2Jvb2wgbWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDYWxsKENvZGVCbG9jayogY29k
ZUJsb2NrKQoreworICAgIHJldHVybiBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSA8PSBP
cHRpb25zOjptYXhpbXVtT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCgpOwor
fQorYm9vbCBtaWdodENvbXBpbGVGdW5jdGlvbkZvckNvbnN0cnVjdChDb2RlQmxvY2sqIGNvZGVC
bG9jaykKK3sKKyAgICByZXR1cm4gY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkgPD0gT3B0
aW9uczo6bWF4aW11bU9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQoKTsKK30K
KworYm9vbCBtaWdodElubGluZUZ1bmN0aW9uRm9yQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaykK
K3sKKyAgICByZXR1cm4gY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkgPD0gT3B0aW9uczo6
bWF4aW11bUZ1bmN0aW9uRm9yQ2FsbElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQoKQor
ICAgICAgICAmJiAhY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+bmVlZHNBY3RpdmF0aW9u
KCk7Cit9Citib29sIG1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDb25zdHJ1Y3QoQ29kZUJsb2NrKiBj
b2RlQmxvY2spCit7CisgICAgcmV0dXJuIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpIDw9
IE9wdGlvbnM6Om1heGltdW1GdW5jdGlvbkZvckNvbnN0cnVjdElubGluZUNhbmRpZGF0ZUluc3Ry
dWN0aW9uQ291bnQoKQorICAgICAgICAmJiAhY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+
bmVlZHNBY3RpdmF0aW9uKCk7Cit9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z0ZhaWwoQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIE9wY29kZUlEIG9wY29kZUlELCBib29sIHJlc3VsdCkKIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuaAkocmV2aXNp
b24gMTM2OTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMzksMzMgKzM5LDEyIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKIC8vIEZhc3QgY2hlY2sgZnVuY3Rpb25z
OyBpZiB0aGV5IHJldHVybiB0cnVlIGl0IGlzIHN0aWxsIG5lY2Vzc2FyeSB0bwogLy8gY2hlY2sg
b3Bjb2Rlcy4KLWlubGluZSBib29sIG1pZ2h0Q29tcGlsZUV2YWwoQ29kZUJsb2NrKiBjb2RlQmxv
Y2spCi17Ci0gICAgcmV0dXJuIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpIDw9IE9wdGlv
bnM6Om1heGltdW1PcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50KCk7Ci19Ci1p
bmxpbmUgYm9vbCBtaWdodENvbXBpbGVQcm9ncmFtKENvZGVCbG9jayogY29kZUJsb2NrKQotewot
ICAgIHJldHVybiBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSA8PSBPcHRpb25zOjptYXhp
bXVtT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCgpOwotfQotaW5saW5lIGJv
b2wgbWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDYWxsKENvZGVCbG9jayogY29kZUJsb2NrKQotewot
ICAgIHJldHVybiBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSA8PSBPcHRpb25zOjptYXhp
bXVtT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCgpOwotfQotaW5saW5lIGJv
b2wgbWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDb25zdHJ1Y3QoQ29kZUJsb2NrKiBjb2RlQmxvY2sp
Ci17Ci0gICAgcmV0dXJuIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpIDw9IE9wdGlvbnM6
Om1heGltdW1PcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50KCk7Ci19Ci0KLWlu
bGluZSBib29sIG1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDYWxsKENvZGVCbG9jayogY29kZUJsb2Nr
KQotewotICAgIHJldHVybiBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSA8PSBPcHRpb25z
OjptYXhpbXVtRnVuY3Rpb25Gb3JDYWxsSW5saW5lQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCgp
Ci0gICAgICAgICYmICFjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5uZWVkc0FjdGl2YXRp
b24oKTsKLX0KLWlubGluZSBib29sIG1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDb25zdHJ1Y3QoQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCi17Ci0gICAgcmV0dXJuIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25D
b3VudCgpIDw9IE9wdGlvbnM6Om1heGltdW1GdW5jdGlvbkZvckNvbnN0cnVjdElubGluZUNhbmRp
ZGF0ZUluc3RydWN0aW9uQ291bnQoKQotICAgICAgICAmJiAhY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKS0+bmVlZHNBY3RpdmF0aW9uKCk7Ci19Citib29sIG1pZ2h0Q29tcGlsZUV2YWwoQ29k
ZUJsb2NrKik7Citib29sIG1pZ2h0Q29tcGlsZVByb2dyYW0oQ29kZUJsb2NrKik7Citib29sIG1p
Z2h0Q29tcGlsZUZ1bmN0aW9uRm9yQ2FsbChDb2RlQmxvY2sqKTsKK2Jvb2wgbWlnaHRDb21waWxl
RnVuY3Rpb25Gb3JDb25zdHJ1Y3QoQ29kZUJsb2NrKik7Citib29sIG1pZ2h0SW5saW5lRnVuY3Rp
b25Gb3JDYWxsKENvZGVCbG9jayopOworYm9vbCBtaWdodElubGluZUZ1bmN0aW9uRm9yQ29uc3Ry
dWN0KENvZGVCbG9jayopOwogCiAvLyBPcGNvZGUgY2hlY2tpbmcuCiBpbmxpbmUgYm9vbCBjYW5J
bmxpbmVSZXNvbHZlT3BlcmF0aW9ucyhPcGNvZGVJRCBvcGNvZGUsIFJlc29sdmVPcGVyYXRpb25z
KiBvcGVyYXRpb25zKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3Nl
bWJsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGlz
YXNzZW1ibGVyLmNwcAkocmV2aXNpb24gMTM2OTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEaXNhc3NlbWJsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2OSw4IEBA
IHZvaWQgRGlzYXNzZW1ibGVyOjpyZXBvcnRUb1Byb2ZpbGVyKFByb2YKIHZvaWQgRGlzYXNzZW1i
bGVyOjpkdW1wSGVhZGVyKFByaW50U3RyZWFtJiBvdXQsIExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
CiB7CiAgICAgb3V0LnByaW50KCJHZW5lcmF0ZWQgREZHIEpJVCBjb2RlIGZvciAiLCBDb2RlQmxv
Y2tXaXRoSklUVHlwZShtX2dyYXBoLm1fY29kZUJsb2NrLCBKSVRDb2RlOjpERkdKSVQpLCAiLCBp
bnN0cnVjdGlvbiBjb3VudCA9ICIsIG1fZ3JhcGgubV9jb2RlQmxvY2stPmluc3RydWN0aW9uQ291
bnQoKSwgIjpcbiIpOworICAgIG91dC5wcmludCgiICAgIE9wdGltaXplZCB3aXRoIGV4ZWN1dGlv
biBjb3VudGVyID0gIiwgbV9ncmFwaC5tX3Byb2ZpbGVkQmxvY2stPmppdEV4ZWN1dGVDb3VudGVy
KCksICJcbiIpOworICAgIG91dC5wcmludCgiICAgIFNvdXJjZTogIiwgbV9ncmFwaC5tX2NvZGVC
bG9jay0+c291cmNlQ29kZU9uT25lTGluZSgpLCAiXG4iKTsKICAgICBvdXQucHJpbnQoIiAgICBD
b2RlIGF0IFsiLCBSYXdQb2ludGVyKGxpbmtCdWZmZXIuZGVidWdBZGRyZXNzKCkpLCAiLCAiLCBS
YXdQb2ludGVyKHN0YXRpY19jYXN0PGNoYXIqPihsaW5rQnVmZmVyLmRlYnVnQWRkcmVzcygpKSAr
IGxpbmtCdWZmZXIuZGVidWdTaXplKCkpLCAiKTpcbiIpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24gMTM2OTg5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ0LDcgKzQ0LDcgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQwog
ICAgIEFTU0VSVCghY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkpOwogCiAjaWYgRU5BQkxFKEpJVF9W
RVJCT1NFX09TUikKLSAgICBkYXRhTG9nRigiT1NSIGluICVwKCVwKSBmcm9tIGJjIyV1XG4iLCBj
b2RlQmxvY2ssIGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwgYnl0ZWNvZGVJbmRleCk7CisgICAg
ZGF0YUxvZygiT1NSIGluICIsICpjb2RlQmxvY2stPmFsdGVybmF0aXZlKCksICIgLT4gIiwgKmNv
ZGVCbG9jaywgIiBmcm9tIGJjIyIsIGJ5dGVjb2RlSW5kZXgsICJcbiIpOwogI2VuZGlmCiAgICAg
CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKQEAg
LTEwMSw5ICsxMDEsNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBD
CiAgICAgICAgIAogICAgICAgICBpZiAoIWVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzLmFyZ3VtZW50
KGFyZ3VtZW50KS52YWxpZGF0ZSh2YWx1ZSkpIHsKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NS
KQotICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgYXJndW1lbnQg
JXp1IGlzICVzLCBleHBlY3RlZCAiLCBhcmd1bWVudCwgdmFsdWUuZGVzY3JpcHRpb24oKSk7Ci0g
ICAgICAgICAgICBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5hcmd1bWVudChhcmd1bWVudCkuZHVt
cChXVEY6OmRhdGFGaWxlKCkpOwotICAgICAgICAgICAgZGF0YUxvZ0YoIi5cbiIpOworICAgICAg
ICAgICAgZGF0YUxvZygiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSBhcmd1bWVudCAiLCBhcmd1bWVu
dCwgIiBpcyAiLCB2YWx1ZSwgIiwgZXhwZWN0ZWQgIiwgZW50cnktPm1fZXhwZWN0ZWRWYWx1ZXMu
YXJndW1lbnQoYXJndW1lbnQpLCAiLlxuIik7CiAjZW5kaWYKICAgICAgICAgICAgIHJldHVybiAw
OwogICAgICAgICB9CkBAIC0xMTMsNyArMTExLDcgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4
ZWNTdGF0ZSogZXhlYywgQwogICAgICAgICBpZiAoZW50cnktPm1fbG9jYWxzRm9yY2VkRG91Ymxl
LmdldChsb2NhbCkpIHsKICAgICAgICAgICAgIGlmICghZXhlYy0+cmVnaXN0ZXJzKClbbG9jYWxd
LmpzVmFsdWUoKS5pc051bWJlcigpKSB7CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAg
ICAgICAgICAgICAgICBkYXRhTG9nRigiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSB2YXJpYWJsZSAl
enUgaXMgJXMsIGV4cGVjdGVkIG51bWJlci5cbiIsIGxvY2FsLCBleGVjLT5yZWdpc3RlcnMoKVts
b2NhbF0uanNWYWx1ZSgpLmRlc2NyaXB0aW9uKCkpOworICAgICAgICAgICAgICAgIGRhdGFMb2co
IiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgdmFyaWFibGUgIiwgbG9jYWwsICIgaXMgIiwgZXhlYy0+
cmVnaXN0ZXJzKClbbG9jYWxdLmpzVmFsdWUoKSwgIiwgZXhwZWN0ZWQgbnVtYmVyLlxuIik7CiAj
ZW5kaWYKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIH0KQEAgLTEyMSw5
ICsxMTksNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAgICAg
ICAgIH0KICAgICAgICAgaWYgKCFlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5sb2NhbChsb2NhbCku
dmFsaWRhdGUoZXhlYy0+cmVnaXN0ZXJzKClbbG9jYWxdLmpzVmFsdWUoKSkpIHsKICNpZiBFTkFC
TEUoSklUX1ZFUkJPU0VfT1NSKQotICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICBPU1IgZmFpbGVk
IGJlY2F1c2UgdmFyaWFibGUgJXp1IGlzICVzLCBleHBlY3RlZCAiLCBsb2NhbCwgZXhlYy0+cmVn
aXN0ZXJzKClbbG9jYWxdLmpzVmFsdWUoKS5kZXNjcmlwdGlvbigpKTsKLSAgICAgICAgICAgIGVu
dHJ5LT5tX2V4cGVjdGVkVmFsdWVzLmxvY2FsKGxvY2FsKS5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7
Ci0gICAgICAgICAgICBkYXRhTG9nRigiLlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKCIgICAg
T1NSIGZhaWxlZCBiZWNhdXNlIHZhcmlhYmxlICIsIGxvY2FsLCAiIGlzICIsIGV4ZWMtPnJlZ2lz
dGVycygpW2xvY2FsXS5qc1ZhbHVlKCksICIsIGV4cGVjdGVkICIsIGVudHJ5LT5tX2V4cGVjdGVk
VmFsdWVzLmxvY2FsKGxvY2FsKSwgIi5cbiIpOwogI2VuZGlmCiAgICAgICAgICAgICByZXR1cm4g
MDsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVREaXNhc3Nl
bWJsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURGlz
YXNzZW1ibGVyLmNwcAkocmV2aXNpb24gMTM2OTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVREaXNhc3NlbWJsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niw2ICs4Niw3IEBA
IHZvaWQgSklURGlzYXNzZW1ibGVyOjpyZXBvcnRUb1Byb2ZpbGVyKFAKIHZvaWQgSklURGlzYXNz
ZW1ibGVyOjpkdW1wSGVhZGVyKFByaW50U3RyZWFtJiBvdXQsIExpbmtCdWZmZXImIGxpbmtCdWZm
ZXIpCiB7CiAgICAgb3V0LnByaW50KCJHZW5lcmF0ZWQgQmFzZWxpbmUgSklUIGNvZGUgZm9yICIs
IENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fY29kZUJsb2NrLCBKSVRDb2RlOjpCYXNlbGluZUpJVCks
ICIsIGluc3RydWN0aW9uIGNvdW50ID0gIiwgbV9jb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQo
KSwgIlxuIik7CisgICAgb3V0LnByaW50KCIgICBTb3VyY2U6ICIsIG1fY29kZUJsb2NrLT5zb3Vy
Y2VDb2RlT25PbmVMaW5lKCksICJcbiIpOwogICAgIG91dC5wcmludCgiICAgQ29kZSBhdCBbIiwg
UmF3UG9pbnRlcihsaW5rQnVmZmVyLmRlYnVnQWRkcmVzcygpKSwgIiwgIiwgUmF3UG9pbnRlcihz
dGF0aWNfY2FzdDxjaGFyKj4obGlua0J1ZmZlci5kZWJ1Z0FkZHJlc3MoKSkgKyBsaW5rQnVmZmVy
LmRlYnVnU2l6ZSgpKSwgIik6XG4iKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDEzNjk4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODIyLDEyICsxODIyLDE1IEBA
IERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGltaXplKQogCiAgICAgaWYgKCFjb2RlQmxv
Y2stPmNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKCkpIHsKICAgICAgICAgY29k
ZUJsb2NrLT51cGRhdGVBbGxQcmVkaWN0aW9ucygpOworI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9P
U1IpCisgICAgICAgIGRhdGFMb2coIkNob29zaW5nIG5vdCB0byBvcHRpbWl6ZSAiLCAqY29kZUJs
b2NrLCAiIHlldC5cbiIpOworI2VuZGlmCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBp
ZiAoY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7CiAjaWYgRU5BQkxFKEpJ
VF9WRVJCT1NFX09TUikKLSAgICAgICAgZGF0YUxvZ0YoIkNvbnNpZGVyaW5nIE9TUiAiLCAqY29k
ZUJsb2NrLCAiIC0+ICIsICpjb2RlQmxvY2stPnJlcGxhY2VtZW50KCksICIuXG4iKTsKKyAgICAg
ICAgZGF0YUxvZygiQ29uc2lkZXJpbmcgT1NSICIsICpjb2RlQmxvY2ssICIgLT4gIiwgKmNvZGVC
bG9jay0+cmVwbGFjZW1lbnQoKSwgIi5cbiIpOwogI2VuZGlmCiAgICAgICAgIC8vIElmIHdlIGhh
dmUgYW4gb3B0aW1pemVkIHJlcGxhY2VtZW50LCB0aGVuIGl0IG11c3QgYmUgdGhlIGNhc2UgdGhh
dCB3ZSBlbnRlcmVkCiAgICAgICAgIC8vIGN0aV9vcHRpbWl6ZSBmcm9tIGEgbG9vcC4gVGhhdCdz
IGJlY2F1c2UgaXMgdGhlcmUncyBhbiBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQsCkBAIC0xODQ0LDcg
KzE4NDcsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZSkKICAgICAgICAg
Ly8gYWRkaXRpb25hbCBjaGVja2luZyBhbnl3YXksIHRvIHJlZHVjZSB0aGUgYW1vdW50IG9mIHJl
Y29tcGlsYXRpb24gdGhyYXNoaW5nLgogICAgICAgICBpZiAoY29kZUJsb2NrLT5yZXBsYWNlbWVu
dCgpLT5zaG91bGRSZW9wdGltaXplRnJvbUxvb3BOb3coKSkgewogI2lmIEVOQUJMRShKSVRfVkVS
Qk9TRV9PU1IpCi0gICAgICAgICAgICBkYXRhTG9nRigiVHJpZ2dlcmluZyByZW9wdGltaXphdGlv
biBvZiAiLCAqY29kZUJsb2NrLCAiKCIsICpjb2RlQmxvY2stPnJlcGxhY2VtZW50KCksICIpIChp
biBsb29wKS5cbiIpOworICAgICAgICAgICAgZGF0YUxvZygiVHJpZ2dlcmluZyByZW9wdGltaXph
dGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiKCIsICpjb2RlQmxvY2stPnJlcGxhY2VtZW50KCksICIp
IChpbiBsb29wKS5cbiIpOwogI2VuZGlmCiAgICAgICAgICAgICBjb2RlQmxvY2stPnJlb3B0aW1p
emUoKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE4NTIsMjMgKzE4NTUsMjcgQEAgREVGSU5F
X1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemUpCiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYg
KCFjb2RlQmxvY2stPnNob3VsZE9wdGltaXplTm93KCkpIHsKICNpZiBFTkFCTEUoSklUX1ZFUkJP
U0VfT1NSKQotICAgICAgICAgICAgZGF0YUxvZ0YoIkRlbGF5aW5nIG9wdGltaXphdGlvbiBmb3Ig
IiwgKmNvZGVCbG9jaywgIiAoaW4gbG9vcCkgYmVjYXVzZSBvZiBpbnN1ZmZpY2llbnQgcHJvZmls
aW5nLlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKCJEZWxheWluZyBvcHRpbWl6YXRpb24gZm9y
ICIsICpjb2RlQmxvY2ssICIgKGluIGxvb3ApIGJlY2F1c2Ugb2YgaW5zdWZmaWNpZW50IHByb2Zp
bGluZy5cbiIpOwogI2VuZGlmCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAg
ICAgCisjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKKyAgICAgICAgZGF0YUxvZygiVHJpZ2dl
cmluZyBvcHRpbWl6ZWQgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIlxuIik7CisjZW5k
aWYKKyAgICAgICAgCiAgICAgICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT5zY29wZSgp
OwogICAgICAgICBKU09iamVjdCogZXJyb3IgPSBjb2RlQmxvY2stPmNvbXBpbGVPcHRpbWl6ZWQo
Y2FsbEZyYW1lLCBzY29wZSwgYnl0ZWNvZGVJbmRleCk7CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NF
X09TUikKICAgICAgICAgaWYgKGVycm9yKQotICAgICAgICAgICAgZGF0YUxvZ0YoIldBUk5JTkc6
IG9wdGltaXplZCBjb21waWxhdGlvbiBmYWlsZWQuXG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2co
IldBUk5JTkc6IG9wdGltaXplZCBjb21waWxhdGlvbiBmYWlsZWQuXG4iKTsKICNlbHNlCiAgICAg
ICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CiAjZW5kaWYKICAgICAgICAgCiAgICAgICAgIGlmIChj
b2RlQmxvY2stPnJlcGxhY2VtZW50KCkgPT0gY29kZUJsb2NrKSB7CiAjaWYgRU5BQkxFKEpJVF9W
RVJCT1NFX09TUikKLSAgICAgICAgICAgIGRhdGFMb2dGKCJPcHRpbWl6aW5nICIsICpjb2RlQmxv
Y2ssICIgZmFpbGVkLlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKCJPcHRpbWl6aW5nICIsICpj
b2RlQmxvY2ssICIgZmFpbGVkLlxuIik7CiAjZW5kaWYKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgQVNTRVJUKGNvZGVCbG9jay0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklU
KTsKQEAgLTE4ODcsNyArMTg5NCw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGlt
aXplKQogICAgICAgICAgICAgICAgIFJhd1BvaW50ZXIoKFNUVUJfUkVUVVJOX0FERFJFU1MpLnZh
bHVlKCkpLCAiIC0+ICIsIFJhd1BvaW50ZXIoYWRkcmVzcyksICIuXG4iKTsKICAgICAgICAgfQog
I2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgICAgIGRhdGFMb2dGKCJPcHRpbWl6aW5n
ICIsICpjb2RlQmxvY2ssICIgc3VjY2VlZGVkLCBwZXJmb3JtaW5nIE9TUiBhZnRlciBhIGRlbGF5
IG9mICIsIGNvZGVCbG9jay0+b3B0aW1pemF0aW9uRGVsYXlDb3VudGVyKCksICIuXG4iKTsKKyAg
ICAgICAgZGF0YUxvZygiT3B0aW1pemluZyAiLCAqY29kZUJsb2NrLCAiIHN1Y2NlZWRlZCwgcGVy
Zm9ybWluZyBPU1IgYWZ0ZXIgYSBkZWxheSBvZiAiLCBjb2RlQmxvY2stPm9wdGltaXphdGlvbkRl
bGF5Q291bnRlcigpLCAiLlxuIik7CiAjZW5kaWYKIAogICAgICAgICBjb2RlQmxvY2stPm9wdGlt
aXplU29vbigpOwpAQCAtMTg5Niw3ICsxOTAzLDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9p
ZCwgb3B0aW1pemUpCiAgICAgfQogICAgIAogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0g
ICAgZGF0YUxvZ0YoIk9wdGltaXppbmcgIiwgKmNvZGVCbG9jaywgIiBzdWNjZWVkZWQsIE9TUiBm
YWlsZWQsIGFmdGVyIGEgZGVsYXkgb2YgIiwgY29kZUJsb2NrLT5vcHRpbWl6YXRpb25EZWxheUNv
dW50ZXIoKSwgIi5cbiIpOworICAgIGRhdGFMb2coIk9wdGltaXppbmcgIiwgKmNvZGVCbG9jaywg
IiBzdWNjZWVkZWQsIE9TUiBmYWlsZWQsIGFmdGVyIGEgZGVsYXkgb2YgIiwgY29kZUJsb2NrLT5v
cHRpbWl6YXRpb25EZWxheUNvdW50ZXIoKSwgIi5cbiIpOwogI2VuZGlmCiAKICAgICAvLyBDb3Vu
dCB0aGUgT1NSIGZhaWx1cmUgYXMgYSBzcGVjdWxhdGlvbiBmYWlsdXJlLiBJZiB0aGlzIGhhcHBl
bnMgYSBsb3QsIHRoZW4KQEAgLTE5MDQsNyArMTkxMSw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9O
KHZvaWQsIG9wdGltaXplKQogICAgIG9wdGltaXplZENvZGVCbG9jay0+Y291bnRPU1JFeGl0KCk7
CiAgICAgCiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICBkYXRhTG9nRigiRW5jb3Vu
dGVyZWQgT1NSIGZhaWx1cmUgIiwgKmNvZGVCbG9jaywgIiAtPiAiLCAqY29kZUJsb2NrLT5yZXBs
YWNlbWVudCgpLCAiLlxuIik7CisgICAgZGF0YUxvZygiRW5jb3VudGVyZWQgT1NSIGZhaWx1cmUg
IiwgKmNvZGVCbG9jaywgIiAtPiAiLCAqY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLCAiLlxuIik7
CiAjZW5kaWYKIAogICAgIC8vIFdlIGFyZSBhIGxvdCBtb3JlIGNvbnNlcnZhdGl2ZSBhYm91dCB0
cmlnZ2VyaW5nIHJlb3B0aW1pemF0aW9uIGFmdGVyIE9TUiBmYWlsdXJlIHRoYW4KQEAgLTE5MTcs
NyArMTkyNCw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGltaXplKQogICAgIC8v
IHJlb3B0aW1pemF0aW9uIHRyaWdnZXIuCiAgICAgaWYgKG9wdGltaXplZENvZGVCbG9jay0+c2hv
dWxkUmVvcHRpbWl6ZU5vdygpKSB7CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAg
ICAgZGF0YUxvZ0YoIlRyaWdnZXJpbmcgcmVvcHRpbWl6YXRpb24gb2YgIiwgKmNvZGVCbG9jaywg
IiAtPiAiLCAqY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLCAiIChhZnRlciBPU1IgZmFpbCkuXG4i
KTsKKyAgICAgICAgZGF0YUxvZygiVHJpZ2dlcmluZyByZW9wdGltaXphdGlvbiBvZiAiLCAqY29k
ZUJsb2NrLCAiIC0+ICIsICpjb2RlQmxvY2stPnJlcGxhY2VtZW50KCksICIgKGFmdGVyIE9TUiBm
YWlsKS5cbiIpOwogI2VuZGlmCiAgICAgICAgIGNvZGVCbG9jay0+cmVvcHRpbWl6ZSgpOwogICAg
ICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93
UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDEzNjk4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNSw4ICszMTUs
NyBAQCBlbnVtIEVudHJ5S2luZCB7IFByb2xvZ3VlLCBBcml0eUNoZWNrIH07CiBzdGF0aWMgU2xv
d1BhdGhSZXR1cm5UeXBlIGVudHJ5T1NSKEV4ZWNTdGF0ZSogZXhlYywgSW5zdHJ1Y3Rpb24qLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgY2hhciAqbmFtZSwgRW50cnlLaW5kIGtpbmQpCiB7
CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICBkYXRhTG9nRigiJXA6IEVudGVyZWQg
JXMgd2l0aCBleGVjdXRlQ291bnRlciA9ICVzXG4iLCBjb2RlQmxvY2ssIG5hbWUsCi0gICAgICAg
ICAgICBjb2RlQmxvY2stPmxsaW50RXhlY3V0ZUNvdW50ZXIoKS5zdGF0dXMoKSk7CisgICAgZGF0
YUxvZygqY29kZUJsb2NrLCAiOiBFbnRlcmVkICIsIG5hbWUsICIgd2l0aCBleGVjdXRlQ291bnRl
ciA9ICIsIGNvZGVCbG9jay0+bGxpbnRFeGVjdXRlQ291bnRlcigpLCAiXG4iKTsKICNlbHNlCiAg
ICAgVU5VU0VEX1BBUkFNKG5hbWUpOwogI2VuZGlmCkBAIC0zNjQsOCArMzYzLDcgQEAgTExJTlRf
U0xPV19QQVRIX0RFQ0wobG9vcF9vc3IpCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVj
LT5jb2RlQmxvY2soKTsKICAgICAKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgIGRh
dGFMb2dGKCIlcDogRW50ZXJlZCBsb29wX29zciB3aXRoIGV4ZWN1dGVDb3VudGVyID0gJXNcbiIs
IGNvZGVCbG9jaywKLSAgICAgICAgICAgIGNvZGVCbG9jay0+bGxpbnRFeGVjdXRlQ291bnRlcigp
LnN0YXR1cygpKTsKKyAgICBkYXRhTG9nKCpjb2RlQmxvY2ssICI6IEVudGVyZWQgbG9vcF9vc3Ig
d2l0aCBleGVjdXRlQ291bnRlciA9ICIsIGNvZGVCbG9jay0+bGxpbnRFeGVjdXRlQ291bnRlcigp
LCAiXG4iKTsKICNlbmRpZgogICAgIAogICAgIGlmICghc2hvdWxkSklUKGV4ZWMpKSB7CkBAIC0z
OTUsOCArMzkzLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0wocmVwbGFjZSkKICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwogICAgIAogI2lmIEVOQUJMRShKSVRf
VkVSQk9TRV9PU1IpCi0gICAgZGF0YUxvZ0YoIiVwOiBFbnRlcmVkIHJlcGxhY2Ugd2l0aCBleGVj
dXRlQ291bnRlciA9ICVzXG4iLCBjb2RlQmxvY2ssCi0gICAgICAgICAgICBjb2RlQmxvY2stPmxs
aW50RXhlY3V0ZUNvdW50ZXIoKS5zdGF0dXMoKSk7CisgICAgZGF0YUxvZygqY29kZUJsb2NrLCAi
OiBFbnRlcmVkIHJlcGxhY2Ugd2l0aCBleGVjdXRlQ291bnRlciA9ICIsIGNvZGVCbG9jay0+bGxp
bnRFeGVjdXRlQ291bnRlcigpLCAiXG4iKTsKICNlbmRpZgogICAgIAogICAgIGlmIChzaG91bGRK
SVQoZXhlYykpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJE
YXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVy
L1Byb2ZpbGVyRGF0YWJhc2UuY3BwCShyZXZpc2lvbiAxMzY5ODkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJEYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU3LDI1ICs1Nyw4IEBAIEJ5dGVjb2RlcyogRGF0YWJhc2U6OmVuc3VyZUJ5dGVjb2Rlc0ZvcigK
ICAgICBpZiAoaXRlciAhPSBtX2J5dGVjb2Rlc01hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuIGl0
ZXItPnZhbHVlOwogICAgIAotICAgIFN0cmluZyBzb3VyY2VDb2RlOwotICAgIAotICAgIGlmIChj
b2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKSB7Ci0gICAgICAgIFNvdXJjZVBy
b3ZpZGVyKiBwcm92aWRlciA9IGNvZGVCbG9jay0+c291cmNlKCk7Ci0gICAgICAgIEZ1bmN0aW9u
RXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihjb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKTsKLSAgICAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGUqIHVubGlua2VkID0gZXhlY3V0YWJsZS0+dW5saW5rZWRFeGVjdXRhYmxlKCk7Ci0gICAg
ICAgIHVuc2lnbmVkIHVubGlua2VkU3RhcnRPZmZzZXQgPSB1bmxpbmtlZC0+c3RhcnRPZmZzZXQo
KTsKLSAgICAgICAgdW5zaWduZWQgbGlua2VkU3RhcnRPZmZzZXQgPSBleGVjdXRhYmxlLT5zb3Vy
Y2UoKS5zdGFydE9mZnNldCgpOwotICAgICAgICBpbnQgZGVsdGEgPSBsaW5rZWRTdGFydE9mZnNl
dCAtIHVubGlua2VkU3RhcnRPZmZzZXQ7Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsK
LSAgICAgICAgYnVpbGRlci5hcHBlbmQoImZ1bmN0aW9uICIpOwotICAgICAgICBidWlsZGVyLmFw
cGVuZChwcm92aWRlci0+Z2V0UmFuZ2UoCi0gICAgICAgICAgICBkZWx0YSArIHVubGlua2VkLT5m
dW5jdGlvblN0YXJ0T2Zmc2V0KCksCi0gICAgICAgICAgICBkZWx0YSArIHVubGlua2VkLT5zdGFy
dE9mZnNldCgpICsgdW5saW5rZWQtPnNvdXJjZUxlbmd0aCgpKSk7Ci0gICAgICAgIHNvdXJjZUNv
ZGUgPSBidWlsZGVyLnRvU3RyaW5nKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHNvdXJjZUNvZGUg
PSBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5zb3VyY2UoKS50b1N0cmluZygpOwotICAg
IAotICAgIEJ5dGVjb2RlcyogcmVzdWx0ID0gYWRkQnl0ZWNvZGVzKGNvZGVCbG9jay0+aGFzaCgp
LCBzb3VyY2VDb2RlKTsKKyAgICBCeXRlY29kZXMqIHJlc3VsdCA9IGFkZEJ5dGVjb2RlcygKKyAg
ICAgICAgY29kZUJsb2NrLT5oYXNoKCksIGNvZGVCbG9jay0+c291cmNlQ29kZUZvclRvb2xzKCkp
OwogICAgIAogICAgIGZvciAodW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IDA7IGJ5dGVjb2RlSW5k
ZXggPCBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKTspIHsKICAgICAgICAgb3V0LnJl
c2V0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZp
c2lvbiAxMzY5ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTg5LDcgKzg5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgdihp
bnQzMiwgdGhyZXNob2xkRm9ySklUU29vbiwgMTAwKSBcCiAgICAgXAogICAgIHYoaW50MzIsIHRo
cmVzaG9sZEZvck9wdGltaXplQWZ0ZXJXYXJtVXAsIDEwMDApIFwKLSAgICB2KGludDMyLCB0aHJl
c2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCwgNTAwMCkgXAorICAgIHYoaW50MzIsIHRo
cmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwLCAxMDAwKSBcCiAgICAgdihpbnQzMiwg
dGhyZXNob2xkRm9yT3B0aW1pemVTb29uLCAxMDAwKSBcCiAgICAgXAogICAgIHYoaW50MzIsIGV4
ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JMb29wLCAxKSBcCg==
</data>
<flag name="review"
          id="194920"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>